var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; import { getCurrentScope, onScopeDispose, unref, getCurrentInstance, onMounted, nextTick, ref, readonly, watch, openBlock, createElementBlock, createElementVNode, warn, computed as computed$1, watchEffect, onBeforeUnmount, inject, isRef, shallowRef, onBeforeMount, provide, defineComponent, renderSlot, mergeProps, toRef, onUnmounted, useAttrs as useAttrs$1, useSlots, withDirectives, createCommentVNode, Fragment, normalizeClass, createBlock, withCtx, resolveDynamicComponent, withModifiers, createVNode, toDisplayString, normalizeStyle, vShow, Transition, reactive, onUpdated, cloneVNode, Text as Text$1, Comment as Comment$1, Teleport, onDeactivated, vModelRadio, createTextVNode, toRefs, toHandlers, withKeys, renderList, h, createSlots, toRaw as toRaw$1, triggerRef, resolveComponent, resolveDirective, vModelText, defineCustomElement } from "vue"; const CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""); class Util { static uuid(prefix = "D") { let uuid = []; uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-"; uuid[14] = "4"; let r2; for (let i2 = 0; i2 < 36; i2++) { if (!uuid[i2]) { r2 = 0 | Math.random() * 16; uuid[i2] = CHARS[i2 == 19 ? r2 & 3 | 8 : r2]; } } return prefix + "-" + uuid.join(""); } static merge(dest, ...sources) { let i2, j, len, src; for (j = 0, len = sources.length; j < len; j++) { src = sources[j]; for (i2 in src) { dest[i2] = src[i2]; } } return dest; } static trim(str) { return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ""); } static splitWords(str) { return this.trim(str).split(/\s+/); } static setOptions(obj, options2) { if (!obj.hasOwnProperty("options")) { obj.options = obj.options ? create(obj.options) : {}; } for (var i2 in options2) { obj.options[i2] = options2[i2]; } return obj.options; } static checkPosition(position2) { return position2 && position2.hasOwnProperty("_lng") && position2.hasOwnProperty("_lat") && position2.hasOwnProperty("_alt"); } static checkPositions(positions) { return positions && (typeof positions === "string" || Array.isArray(positions)); } static checkViewer(viewer2) { return viewer2 && viewer2.delegate && viewer2.canvas; } } class DomUtil { static get(id) { return typeof id === "string" ? document.getElementById(id) : id; } static getStyle(el, style) { var value = el.style[style] || el.currentStyle && el.currentStyle[style]; if ((!value || value === "auto") && document.defaultView) { var css = document.defaultView.getComputedStyle(el, null); value = css ? css[style] : null; } return value === "auto" ? null : value; } static create(tagName, className, container) { var el = document.createElement(tagName); el.className = className || ""; if (container) { container.appendChild(el); } return el; } static remove(el) { var parent = el.parentNode; if (parent) { parent.removeChild(el); } } static empty(el) { while (el.firstChild) { el.removeChild(el.firstChild); } } hasClass(el, name) { if (el.classList !== void 0) { return el.classList.contains(name); } var className = getClass(el); return className.length > 0 && new RegExp("(^|\\s)" + name + "(\\s|$)").test(className); } static addClass(el, name) { if (el.classList !== void 0) { let classes = Util.splitWords(name); for (let i2 = 0, len = classes.length; i2 < len; i2++) { el.classList.add(classes[i2]); } } else if (!this.hasClass(el, name)) { let className = this.getClass(el); this.setClass(el, (className ? className + " " : "") + name); } } static removeClass(el, name) { if (el.classList !== void 0) { el.classList.remove(name); } else { this.setClass( el, Util.trim( (" " + this.getClass(el) + " ").replace(" " + name + " ", " ") ) ); } } static setClass(el, name) { if (el.className.baseVal === void 0) { el.className = name; } else { el.className.baseVal = name; } } static getClass(el) { if (el.correspondingElement) { el = el.correspondingElement; } return el.className.baseVal === void 0 ? el.className : el.className.baseVal; } static createSvg(width2, height2, path, container) { let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg:svg"); svg.setAttribute("class", "svg-path"); svg.setAttribute("width", width2); svg.setAttribute("height", height2); svg.setAttribute("viewBox", `0 0 ${width2} ${height2}`); let pathEl = document.createElementNS("http://www.w3.org/2000/svg", "path"); pathEl.setAttribute("d", path); svg.appendChild(pathEl); if (container) { container.appendChild(svg); } return svg; } } var StatusBar$1 = ""; class StatusBar { constructor(viewer2) { if (!viewer2) throw new Error("viewer is required!"); this._viewer = viewer2; this._show = false; this._handler; this._posX; this._posY; this._posZ; this._cameraHeight; this._pitch; this._heading; this._scale; this.initListener(); } get params() { return { posX: this._posX, posY: this._posY, posZ: this._posZ, cameraHeight: this._cameraHeight, pitch: this._pitch, heading: this._heading, scale: this._scale }; } get statusDom() { let innerHtml = ` \u6BD4\u4F8B\u5C3A\uFF1A ${this._scale} \u7A7A\u95F4\u4FE1\u606F \u5237\u5E27\u7387\uFF1A| `; return innerHtml; } get show() { return this._show; } set show(bool) { bool ? this.createStatusBar() : this.removeStatusBar(); this._show = bool; } initListener() { const $this = this; const scene = this._viewer.scene; this._scaleListener = function() { let width2 = scene.canvas.clientWidth; let height2 = scene.canvas.clientHeight; let left = scene.camera.getPickRay( new Cesium.Cartesian2(width2 / 2 | 0, height2 - 1) ); let right = scene.camera.getPickRay( new Cesium.Cartesian2(1 + width2 / 2 | 0, height2 - 1) ); let globe = scene.globe; let leftPosition = globe.pick(left, scene); let rightPosition = globe.pick(right, scene); if (leftPosition && rightPosition) { let geodesic = new Cesium.EllipsoidGeodesic(); let leftCartographic = globe.ellipsoid.cartesianToCartographic(leftPosition); let rightCartographic = globe.ellipsoid.cartesianToCartographic(rightPosition); geodesic.setEndPoints(leftCartographic, rightCartographic); let distance2 = geodesic.surfaceDistance; let curScaleNum = $this.closest(distance2 / 10); if (curScaleNum < 1) { $this._scale = curScaleNum * 1e3 + "m"; } else { $this._scale = curScaleNum + "km"; } } document.getElementsByClassName("scale-border")[0].innerText = $this._scale; if (document.getElementsByClassName("cesium-performanceDisplay-ms").length > 0) { document.getElementById("status_ms").innerText = document.getElementsByClassName("cesium-performanceDisplay-ms")[0].innerText; } if (document.getElementsByClassName("cesium-performanceDisplay-fps").length > 0) { document.getElementById("status_fps").innerText = document.getElementsByClassName("cesium-performanceDisplay-fps")[0].innerText; } }; } createStatusBar() { const _delegate = this._viewer; this.initHandler(_delegate); this.initScale(_delegate, true); this._domContainer = DomUtil.create( "div", "lk-status-bar", document.getElementById(this._viewer._container.id) ); this._domContainer.innerHTML = this.statusDom; } removeStatusBar() { this.initScale(this._viewer, false); if (this._handler) { this._handler.destroy(); } if (this._domContainer) { DomUtil.remove(this._domContainer); } } initHandler(viewer2) { const $this = this; this._handler = new Cesium.ScreenSpaceEventHandler(viewer2.scene.canvas); const mouseOverHandler = function(movement) { let loc2 = $this._getScreenClickPositionAndHeight(movement.endPosition); if (!Cesium.defined(loc2)) return; if (!loc2.lng) return; $this._posX = loc2.lng.toFixed(8); $this._posY = loc2.lat.toFixed(8); $this._posZ = loc2.height.toFixed(2); document.getElementById("status_spaceInfo").innerHTML = ` \u7ECF\u5EA6\uFF1A${$this._posX} \u7EAC\u5EA6\uFF1A${$this._posY} \u9AD8\u5EA6\uFF1A${$this._posZ} `; }; this._handler.setInputAction( mouseOverHandler, Cesium.ScreenSpaceEventType.MOUSE_MOVE ); } initScale(viewer2, bool) { const scene = viewer2.scene; bool ? scene.postRender.addEventListener(this._scaleListener) : scene.postRender.removeEventListener(this._scaleListener); } closest(num) { const scaleList = [ 1e-3, 2e-3, 3e-3, 5e-3, 0.01, 0.015, 0.02, 0.025, 0.03, 0.035, 0.04, 0.045, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.12, 0.15, 0.2, 0.25, 0.3, 0.5, 1, 2, 3, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100, 120, 150, 200, 250, 300, 500, 1e3, 2e3, 5e3, 1e4, 1e5, 5e5, 1e6 ]; let ret = scaleList[0]; let distance2 = Math.abs(ret - num); for (let i2 = 1; i2 < scaleList.length; i2++) { let newDistance = Math.abs(scaleList[i2] - num); if (newDistance < distance2) { distance2 = newDistance; ret = scaleList[i2]; } } return ret; } _getScreenClickPositionAndHeight(screenPoint) { var lng = void 0, lat = void 0, height2 = void 0; var ray = this._viewer.scene.camera.getPickRay(screenPoint); var position2 = this._viewer.scene.globe.pick(ray, this._viewer.scene); if (position2) { var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); cartographic = Cesium.Cartographic.fromCartesian(position2); var feature2 = this._viewer.scene.pick(screenPoint); if (feature2 === void 0 && Cesium.defined(cartographic)) { lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } else { var cartesian = this._viewer.scene.pickPosition(screenPoint); if (Cesium.defined(cartesian)) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); if (Cesium.defined(cartographic)) { lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } } } } return { lng, lat, height: height2 }; } _arcToDegree(arc) { return arc / Math.PI * 180; } } var base = ""; class jtMap3d { constructor(options2) { if (!Cesium.defined(options2) || !Cesium.defined(options2.container)) { throw new Cesium.DeveloperError("options.container is required."); } Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxNzM5YjQ3MC03YmMxLTRmMjAtOTk4Yi0yNDMyMDZlOTQzYTYiLCJpZCI6NTU5MjAsImlhdCI6MTYyNDI0NTM5NX0.diydVWFzw5C5rQlHaFYkdDJoSorcdex81KpWcntyICo"; this._viewer = this._initMap(options2); this._imageryLayers = this._viewer.imageryLayers; this._primitives = this._viewer.scene.primitives; this._entities = this._viewer.entities; this._dataSources = this._viewer.dataSources; this._defaultSkyBox = this._viewer.scene.skyBox; this.statusBar = new StatusBar(this._viewer); } _initMap(options2) { let viewer2 = new Cesium.Viewer(options2.container, { animation: true, timeline: true, shadows: false, shouldAnimate: true, baseLayerPicker: false, navigationHelpButton: false, homeButton: false, fullscreenButton: false, sceneModePicker: false, scene3DOnly: true, infoBox: false, clampToGround: true, geocoder: false, imageryProvider: new Cesium.SingleTileImageryProvider({ url: "jt3dSDK/imgs/earth_2.jpg" }), selectionIndicator: false, contextOptions: { webgl: { alpha: true, depth: true, stencil: true, antialias: true, premultipliedAlpha: true, preserveDrawingBuffer: true, failIfMajorPerformanceCaveat: true } } }); viewer2._cesiumWidget._creditContainer.style.display = "none"; viewer2.scene.globe.show = true; viewer2.scene.globe.depthTestAgainstTerrain = true; viewer2.scene.globe.enableLighting = false; viewer2.scene.requestRenderMode = false; viewer2.scene.debugShowFramesPerSecond = true; viewer2.scene.skyAtmosphere.show = false; viewer2.scene.skyBox.show = true; viewer2.scene.sun.show = true; viewer2.scene.moon.show = false; viewer2.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); viewer2.animation.viewModel.dateFormatter = localeDateTimeFormatter; viewer2.animation.viewModel.timeFormatter = localeTimeFormatter; viewer2.timeline.makeLabel = localeDateTimeFormatter; function localeDateTimeFormatter(datetime, viewModel, ignoredate) { var julianDT = new Cesium.JulianDate(); Cesium.JulianDate.addHours(datetime, 8, julianDT); var gregorianDT = Cesium.JulianDate.toGregorianDate(julianDT); var objDT; if (ignoredate) { objDT = ""; } else { objDT = new Date(gregorianDT.year, gregorianDT.month - 1, gregorianDT.day); objDT = gregorianDT.year + "-" + objDT.toLocaleString("zh-cn", { month: "short" }).split("\u6708").join("-") + gregorianDT.day + " "; if (viewModel || gregorianDT.hour + gregorianDT.minute === 0) { return objDT; } } let hour, minute, second; if (gregorianDT.hour < 10) { hour = `0${gregorianDT.hour}`; } else { hour = gregorianDT.hour; } if (gregorianDT.minute < 10) { minute = `0${gregorianDT.minute}`; } else { minute = gregorianDT.minute; } if (gregorianDT.second < 10) { second = `0${gregorianDT.second}`; } else { second = gregorianDT.second; } return objDT + hour + ":" + minute + ":" + second; } function localeTimeFormatter(time, viewModel) { return localeDateTimeFormatter(time, viewModel, true); } return viewer2; } _setView(options2) { if (!Cesium.defined(options2.longitude) && !Cesium.defined(options2.latitude)) { throw new Cesium.DeveloperError("longitude and latitude are required."); } Cesium.Check.typeOf.number("longitude", options2.longitude); Cesium.Check.typeOf.number("latitude", options2.latitude); this._viewer.camera.setView({ destination: Cesium.Cartesian3.fromDegrees( options2.longitude, options2.latitude, options2.height ), orientation: { heading: Cesium.Math.toRadians(Cesium.defaultValue(options2.heading, 0)), pitch: Cesium.Math.toRadians(Cesium.defaultValue(options2.pitch, -90)), roll: options2.roll } }); } _getChinaPostion() { return Cesium.Cartesian3.fromDegrees(116.435314, 40.960521, 1e7); } } Object.assign(jtMap3d.prototype, { flytoChina() { this._viewer.camera.flyTo({ destination: this._getChinaPostion(), duration: 3 }); }, setViewChina: function() { this._setView({ longitude: 103.84, latitude: 31.15, height: 24e6, heading: 0, pitch: -90, roll: 0 }); }, fullMap: function(options2) { return new Promise((resolve2, reject2) => { let _self = this; this._entities.removeById("fullMapRectangle"); options2.isRemove = Cesium.defaultValue(options2.isRemove, true); options2.duration = Cesium.defaultValue(options2.duration, 3); options2.heading = Cesium.defaultValue(options2.heading, 0); options2.pitch = Cesium.defaultValue(options2.pitch, -90); options2.range = Cesium.defaultValue(options2.range, 0); var rectangle = Cesium.Rectangle.fromDegrees( options2.west, options2.south, options2.east, options2.north ); var fullMapEntity = this._entities.add({ id: "fullMapRectangle", name: "fullMapRectangle", rectangle: { coordinates: rectangle, material: Cesium.Color.GREEN.withAlpha(0), height: 10, outline: false } }); var flyPromise = this._viewer.flyTo(fullMapEntity, { duration: options2.duration, offset: { heading: Cesium.Math.toRadians(options2.heading), pitch: Cesium.Math.toRadians(options2.pitch), range: options2.range } }); flyPromise.then(function(flyPromise2) { if (flyPromise2) { if (options2.isRemove) { fullMapEntity && (_self._entities.remove(fullMapEntity), fullMapEntity = null); } resolve2(true); } }).catch(function(error) { console.log(error); }); }); }, setMapNorth() { let viewer2 = this._viewer; let pitch = Cesium.Math.toDegrees(viewer2.camera.pitch).toFixed(0); var center2 = viewer2.camera.pickEllipsoid(new Cesium.Cartesian2(viewer2.canvas.clientWidth / 2, viewer2.canvas.clientHeight / 2)); var curPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(center2); let centerX = curPosition.longitude * 180 / Math.PI; let centerY = curPosition.latitude * 180 / Math.PI; let cameraPointX = viewer2.camera.positionCartographic.longitude * 180 / Math.PI; let cameraPointY = viewer2.camera.positionCartographic.latitude * 180 / Math.PI; let cameraPointZ = viewer2.camera.positionCartographic.height.toFixed(0); var satrt = Cesium.Cartographic.fromDegrees(cameraPointX, cameraPointY, cameraPointZ); var end = Cesium.Cartographic.fromDegrees(centerX, centerY, 0); var geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(satrt, end); var distance2 = geodesic.surfaceDistance; let range3 = Math.sqrt(Math.pow(distance2, 2) + Math.pow(cameraPointZ - 0, 2)); if (this.centerEntity) { viewer2.entities.remove(this.centerEntity); } this.centerEntity = viewer2.entities.add({ position: Cesium.Cartesian3.fromDegrees(centerX, centerY, 0), point: { color: Cesium.Color.RED, pixelSize: 1 } }); let offset = new Cesium.HeadingPitchRange(Cesium.Math.toRadians(0), Cesium.Math.toRadians(pitch), range3); viewer2.zoomTo(this.centerEntity, offset); }, setMapSpinByPoint(points2, options2) { let viewer2 = this._viewer; if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } options2 = options2 || {}; options2.speed = Cesium.defaultValue(options2.speed, 30); var position2 = points2; if (points2 instanceof Cesium.Cartesian3) { position2 = points2; } else { position2 = Cesium.Cartesian3.fromDegrees(points2[0], points2[1], points2[2] || 0); } var entity = viewer2.entities.add( new Cesium.Entity({ point: new Cesium.PointGraphics({ color: new Cesium.Color(1, 1, 0), pixelSize: 6, outlineColor: new Cesium.Color(0, 1, 1) }), position: position2 }) ); var angle = 360 / options2.speed; var initialHeading = viewer2.camera.heading; var pitch = viewer2.camera.pitch; if (options2.pitch) { pitch = Cesium.Math.toRadians(options2.pitch); } var distance2 = viewer2.camera.positionCartographic.height; if (options2.height) { distance2 = options2.height; } var startTime = Cesium.JulianDate.fromDate(new Date()); viewer2.clock.startTime = startTime.clone(); viewer2.clock.currentTime = startTime.clone(); viewer2.clock.clockRange = Cesium.ClockRange.CLAMPED; viewer2.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK; var Exection = function TimeExecution() { var delTime = Cesium.JulianDate.secondsDifference(viewer2.clock.currentTime, viewer2.clock.startTime); var heading = Cesium.Math.toRadians(delTime * angle) + initialHeading; viewer2.scene.camera.setView({ destination: position2, orientation: { heading, pitch } }); viewer2.scene.camera.moveBackward(distance2); if (Cesium.JulianDate.compare(viewer2.clock.currentTime, viewer2.clock.stopTime) >= 0) { viewer2.clock.onTick.removeEventListener(Exection); } var handler = new Cesium.ScreenSpaceEventHandler(viewer2.scene.canvas); handler.setInputAction(function(click) { viewer2.clock.onTick.removeEventListener(Exection); viewer2.entities.remove(entity); }, Cesium.ScreenSpaceEventType.LEFT_DOWN); }; viewer2.clock.onTick.addEventListener(Exection); } }); const BD_FACTOR = 3.141592653589793 * 3e3 / 180; const PI = 3.141592653589793; const RADIUS = 6378245; const EE = 0.006693421622965943; class CoordTransform { static BD09ToGCJ02(lng, lat) { let x = +lng - 65e-4; let y = +lat - 6e-3; let z = Math.sqrt(x * x + y * y) - 2e-5 * Math.sin(y * BD_FACTOR); let theta = Math.atan2(y, x) - 3e-6 * Math.cos(x * BD_FACTOR); let gg_lng = z * Math.cos(theta); let gg_lat = z * Math.sin(theta); return [gg_lng, gg_lat]; } static GCJ02ToBD09(lng, lat) { lat = +lat; lng = +lng; let z = Math.sqrt(lng * lng + lat * lat) + 2e-5 * Math.sin(lat * BD_FACTOR); let theta = Math.atan2(lat, lng) + 3e-6 * Math.cos(lng * BD_FACTOR); let bd_lng = z * Math.cos(theta) + 65e-4; let bd_lat = z * Math.sin(theta) + 6e-3; return [bd_lng, bd_lat]; } static WGS84ToGCJ02(lng, lat) { lat = +lat; lng = +lng; if (this.out_of_china(lng, lat)) { return [lng, lat]; } else { let d2 = this.delta(lng, lat); return [lng + d2[0], lat + d2[1]]; } } static GCJ02ToWGS84(lng, lat) { lat = +lat; lng = +lng; if (this.out_of_china(lng, lat)) { return [lng, lat]; } else { let d2 = this.delta(lng, lat); let mgLng = lng + d2[0]; let mgLat = lat + d2[1]; return [lng * 2 - mgLng, lat * 2 - mgLat]; } } static delta(lng, lat) { let dLng = this.transformLng(lng - 105, lat - 35); let dLat = this.transformLat(lng - 105, lat - 35); const radLat = lat / 180 * PI; let magic = Math.sin(radLat); magic = 1 - EE * magic * magic; const sqrtMagic = Math.sqrt(magic); dLng = dLng * 180 / (RADIUS / sqrtMagic * Math.cos(radLat) * PI); dLat = dLat * 180 / (RADIUS * (1 - EE) / (magic * sqrtMagic) * PI); return [dLng, dLat]; } static transformLng(lng, lat) { lat = +lat; lng = +lng; let ret = 300 + lng + 2 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng)); ret += (20 * Math.sin(6 * lng * PI) + 20 * Math.sin(2 * lng * PI)) * 2 / 3; ret += (20 * Math.sin(lng * PI) + 40 * Math.sin(lng / 3 * PI)) * 2 / 3; ret += (150 * Math.sin(lng / 12 * PI) + 300 * Math.sin(lng / 30 * PI)) * 2 / 3; return ret; } static transformLat(lng, lat) { lat = +lat; lng = +lng; let ret = -100 + 2 * lng + 3 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng)); ret += (20 * Math.sin(6 * lng * PI) + 20 * Math.sin(2 * lng * PI)) * 2 / 3; ret += (20 * Math.sin(lat * PI) + 40 * Math.sin(lat / 3 * PI)) * 2 / 3; ret += (160 * Math.sin(lat / 12 * PI) + 320 * Math.sin(lat * PI / 30)) * 2 / 3; return ret; } static out_of_china(lng, lat) { lat = +lat; lng = +lng; return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55); } static getCatesian3FromPX(viewer2, px) { let picks = viewer2.scene.drillPick(px); let cartesian = null; let isOn3dtiles = false, isOnTerrain = false; for (let i2 in picks) { let pick = picks[i2]; if (pick && pick.primitive instanceof Cesium.Cesium3DTileFeature || pick && pick.primitive instanceof Cesium.Cesium3DTileset || pick && pick.primitive instanceof Cesium.Model) { isOn3dtiles = true; } if (isOn3dtiles) { viewer2.scene.pick(px); cartesian = viewer2.scene.pickPosition(px); if (cartesian) { let cartographic = Cesium.Cartographic.fromCartesian(cartesian); if (cartographic.height < 0) cartographic.height = 0; let lon = Cesium.Math.toDegrees(cartographic.longitude), lat = Cesium.Math.toDegrees(cartographic.latitude), height2 = cartographic.height; cartesian = this.transformWGS84ToCartesian({ lng: lon, lat, alt: height2 }); } } } let boolTerrain = viewer2.terrainProvider instanceof Cesium.EllipsoidTerrainProvider; if (!isOn3dtiles && !boolTerrain) { let ray = viewer2.scene.camera.getPickRay(px); if (!ray) return null; cartesian = viewer2.scene.globe.pick(ray, viewer2.scene); isOnTerrain = true; } if (!isOn3dtiles && !isOnTerrain && boolTerrain) { cartesian = viewer2.scene.camera.pickEllipsoid( px, viewer2.scene.globe.ellipsoid ); } if (cartesian) { let position2 = this.transformCartesianToWGS84(cartesian); if (position2.alt < 0) { cartesian = this.transformWGS84ToCartesian(position2, 0.1); } return cartesian; } return false; } static transformWGS84ToCartesian(position2, alt) { return position2 ? Cesium.Cartesian3.fromDegrees( position2.lng || position2.lon, position2.lat, position2.alt = alt || position2.alt, Cesium.Ellipsoid.WGS84 ) : Cesium.Cartesian3.ZERO; } static transformCartesianToWGS84(cartesian) { let ellipsoid = Cesium.Ellipsoid.WGS84; let cartographic = ellipsoid.cartesianToCartographic(cartesian); return { lng: Cesium.Math.toDegrees(cartographic.longitude), lat: Cesium.Math.toDegrees(cartographic.latitude), alt: cartographic.height }; } static Cartesian3ListToWGS84(cartesianList) { let ellipsoid = Cesium.Ellipsoid.WGS84; let result = []; for (let index2 = 0; index2 < cartesianList.length; index2++) { const cartesian = cartesianList[index2]; let cartographic = ellipsoid.cartesianToCartographic(cartesian); result.push({ lng: Cesium.Math.toDegrees(cartographic.longitude), lat: Cesium.Math.toDegrees(cartographic.latitude), alt: cartographic.height }); } return result; } static Degrees2DMS(value) { let degrees = Math.floor(value); let rem = (value - degrees) * 60; let minutes = Math.floor(rem); let _second = (rem - minutes) * 60; let seconds = Math.round(_second); Cesium.Math.toRadians(value); Cesium.Math.toDegrees(value); let DMS = { degrees, minutes, seconds }; return DMS; } static DMS2Degrees(DMS) { let _double = parseFloat(DMS.degrees) + parseFloat(DMS.minutes) / 60 + parseFloat(DMS.seconds) / 3600; return parseFloat(_double).toFixed(6); } static _cartesian3ToGeo(position2) { let g = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); return { longitude: Cesium.Math.toDegrees(g.longitude), latitude: Cesium.Math.toDegrees(g.latitude), height: g.height }; } static _arcToDegree(arc) { return arc / Math.PI * 180; } static _getScreenClickPositionAndHeight(viewer2, screenPoint) { this._viewer = viewer2; var lng = void 0, lat = void 0, height2 = void 0; var ray = this._viewer.scene.camera.getPickRay(screenPoint); var position2 = this._viewer.scene.globe.pick(ray, this._viewer.scene); var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); var feature2 = this._viewer.scene.pick(screenPoint); if (feature2 == void 0) { lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } else { var cartesian = this._viewer.scene.pickPosition(screenPoint); if (Cesium.defined(cartesian)) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } } return { lng, lat, height: height2 }; } static _transfromFromScreenPoint(viewer2, screenPosition) { let location = this._getScreenClickPositionAndHeight(viewer2, screenPosition); var cartesian = Cesium.Cartesian3.fromDegrees(location.lng, location.lat, location.height); return { gLocation: location, sLocation: cartesian }; } } class PolylineDirectionMaterialProperty { constructor(options2) { this.defaultColor = new Cesium.Color(255 / 255, 0, 0, 0); options2 = options2 || {}; options2.isImageAlpha = Cesium.defaultValue(options2.isImageAlpha, true); options2.imgUrl = Cesium.defaultValue(options2.imgUrl, "jt3dSDK/imgs/polylinematerial/spriteline1.png"); options2.duration = Cesium.defaultValue(options2.duration, 3e3); options2.count = Cesium.defaultValue(options2.count, 1); options2.direction = Cesium.defaultValue(options2.direction, "horizontal"); options2.order = Cesium.defaultValue(options2.order, "-"); if (options2.isImageAlpha) { options2.color = this.defaultColor; } else { if (options2.color instanceof Array) { options2.color = new Cesium.Color(options2.color[0] / 255, options2.color[1] / 255, options2.color[2] / 255, options2.color[3]); } else if (typeof options2.color === "string") { options2.color = new Cesium.Color.fromCssColorString(options2.color); } else { options2.color = this.defaultColor; } } this._definitionChanged = new Cesium.Event(); this._color = void 0; this._image = void 0; this.color = options2.color; this.image = options2.imgUrl; this._isImageAlpha = options2.isImageAlpha; this._duration = options2.duration; this._count = options2.count; this._direction = options2.direction; this._order = options2.order; this._time = performance.now(); this.addMaterial(); } addMaterial() { Cesium.Material.PolylineTrailType = "PolylineTrail"; Cesium.Material.Polylineimage = "images/colors.png"; if (this._direction === "vertical") { if (this._isImageAlpha) { Cesium.Material.PolylineTrailSource = "czm_material czm_getMaterial(czm_materialInput materialInput)\n {\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec2 st = repeat * materialInput.st;\n vec4 colorImage = texture2D(image, vec2(fract(st.t " + this._order + " time), st.s));\n material.alpha = colorImage.a;\n material.diffuse = colorImage.rgb* 1.5 ;\n return material;\n }"; } else { Cesium.Material.PolylineTrailSource = "czm_material czm_getMaterial(czm_materialInput materialInput)\n {\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec2 st = repeat * materialInput.st;\n vec4 colorImage = texture2D(image, vec2(fract(st.t " + this._order + " time), st.s));\n material.alpha = colorImage.a * color.a;\n material.diffuse = max(color.rgb * material.alpha * 3.0, color.rgb);\n return material;\n }"; } } else if (this._direction === "horizontal") { if (this._isImageAlpha) { Cesium.Material.PolylineTrailSource = "czm_material czm_getMaterial(czm_materialInput materialInput)\n {\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec2 st = repeat * materialInput.st;\n vec4 colorImage = texture2D(image, vec2(fract(st.s " + this._order + " time), st.t));\n material.alpha = colorImage.a;\n material.diffuse = colorImage.rgb * 1.5 ;\n return material;\n }"; } else { Cesium.Material.PolylineTrailSource = "czm_material czm_getMaterial(czm_materialInput materialInput)\n {\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec2 st = repeat * materialInput.st;\n vec4 colorImage = texture2D(image, vec2(fract(st.s " + this._order + " time), st.t));\n material.alpha = colorImage.a * color.a;\n material.diffuse = max(color.rgb * material.alpha * 3.0, color.rgb);\n return material;\n }"; } } Cesium.Material._materialCache.addMaterial(Cesium.Material.PolylineTrailType, { fabric: { type: Cesium.Material.PolylineTrailType, uniforms: { color: new Cesium.Color(1, 0, 0, 0.5), image: Cesium.Material.Polylineimage, time: 0, repeat: new Cesium.Cartesian2(5, 1), order: "-" }, source: Cesium.Material.PolylineTrailSource }, translucent: function(material) { return true; } }); } } PolylineDirectionMaterialProperty.prototype.getType = function(time) { return "PolylineTrail"; }; PolylineDirectionMaterialProperty.prototype.getValue = function(time, result) { if (!Cesium.defined(result)) { result = {}; } result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, this.defaultColor, result.color); result.image = Cesium.Property.getValueOrUndefined(this._image, time); result.time = (performance.now() - this._time) % this._duration / this._duration; result.repeat = new Cesium.Cartesian2(this._count, 1); result.order = this._order; return result; }; PolylineDirectionMaterialProperty.prototype.equals = function(other) { return this === other || other instanceof PolylineDirectionMaterialProperty && Cesium.Property.equals(this._color, other._color); }; Object.defineProperties(PolylineDirectionMaterialProperty.prototype, { isConstant: { get: function() { return false; } }, definitionChanged: { get: function() { return this._definitionChanged; } }, color: Cesium.createPropertyDescriptor("color"), image: Cesium.createPropertyDescriptor("image") }); class WallMaterialProperty$1 { constructor(viewer2, options2) { this._viewer = viewer2; options2 = options2 || {}; this._definitionChanged = new Cesium.Event(); this._color = void 0; this.color = options2.color || Cesium.Color.BLUE; this.duration = options2.duration || 1e3; this.count = options2.duration || 1; this.direction = options2.duration || "vertical"; this.order = options2.duration || "-"; this.trailImage = Cesium.defaultValue(options2.trailImage, "jt3dSDK/imgs/wallmaterial/wl.png"); this._time = new Date().getTime(); this._materialTypeName = "WallMaterial" + this._guid(); this._param = { color: this.color._value.toCssColorString(), image: this.trailImage, duration: this.duration, count: this.count, direction: this.direction, order: this.order }; Cesium.Material._materialCache.addMaterial(this._materialTypeName, { fabric: { type: this._materialTypeName, uniforms: { time: -20, color: new Cesium.Color(1, 0, 0, 0.5), image: options2.trailImage }, source: this._getDirectionWallShader(options2.param) }, translucent: function(material) { return true; } }); } _guid() { function S4() { return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1); } return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); } getType(time) { return this._materialTypeName; } getValue(time, result) { if (!Cesium.defined(result)) { result = {}; } result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.BLUE, result.color); result.image = this.trailImage; if (this.duration) { result.time = (new Date().getTime() - this._time) % this.duration / this.duration; } this._viewer.scene.requestRender(); return result; } equals(other) { return this === other || other instanceof WallMaterialProperty$1 && Cesium.Property.equals(this._color, other._color) && other._param.order === this._param.order && other._param.count === this._param.count && other._param.direction === this._param.direction && other.duration === this.duration; } _getDirectionWallShader(options2) { let op = Cesium.defaultValue(options2, {}); let count = op.count !== void 0 && typeof op.count === "number" && op.count > 0 ? op.count : 1; let direction = op.direction === "horizontal" ? "horizontal" : "vertical"; let order = op.order === "+" ? "+" : "-"; this._param.count = count; this._param.direction = direction; this._param.order = order; let materail = ""; materail += "czm_material czm_getMaterial(czm_materialInput materialInput){\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec2 st = materialInput.st;\n"; if (direction === "vertical") { materail += " vec4 colorImage = texture2D(image,vec2(st.s,fract(float(" + count + ")*st.t " + order + " time)));\n"; } else if (direction === "horizontal") { materail += " vec4 colorImage = texture2D(image, vec2(fract(float(" + count + ")*st.s " + order + " time), st.t));\n"; } materail += " vec4 fragColor;\n fragColor.rgb = color.rgb / 1.0;\n fragColor = czm_gammaCorrect(fragColor);\n material.alpha = colorImage.a * color.a;\n material.diffuse = color.rgb;\n material.emission = fragColor.rgb;\n return material;\n}"; return materail; } } Object.defineProperties(WallMaterialProperty$1.prototype, { isConstant: { get: function() { return false; } }, definitionChanged: { get: function() { return this._definitionChanged; } }, color: Cesium.createPropertyDescriptor("color") }); var tooltip = ""; function setSessionid$1(num) { let len = num || 32; let chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678"; let maxPos = chars.length; let pwd = ""; for (let i2 = 0; i2 < len; i2++) { pwd += chars.charAt(Math.floor(Math.random() * maxPos)); } return pwd; } function guid() { function S4() { return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1); } return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); } function getGuid(removeMinus) { let d2 = new Date().getTime(); let uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { const r2 = (d2 + Math.random() * 16) % 16 | 0; d2 = Math.floor(d2 / 16); return (c === "x" ? r2 : r2 & 3 | 8).toString(16); }); if (removeMinus) { uuid = uuid.replace(/-/g, ""); } return uuid; } function getHeigthByLngLat(viewer2, options2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!Cesium.defined(options2.longitude) && !Cesium.defined(options2.latitude)) { throw new Cesium.DeveloperError("longitude and latitude are required."); } options2.level = Cesium.defaultValue(options2.level, 11); let positions = Cesium.Cartographic.fromDegrees(options2.longitude, options2.latitude); let terrainProvider = viewer2.terrainProvider; return new Promise((resolve2, reject2) => { new Cesium.sampleTerrain(terrainProvider, options2.level, [positions]).then(function(updatedPositions) { if (updatedPositions) { resolve2(updatedPositions[0].height); } }); }); } function getHeigthByPoints(viewer2, options2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!Cesium.defined(options2)) { throw new Cesium.DeveloperError("options is required."); } options2.level = Cesium.defaultValue(options2.level, 11); let positions = []; let points2 = options2.points; for (let i2 = 0; i2 < points2.length; i2++) { let pointX = points2[i2][0]; let pointY = points2[i2][1]; positions.push( Cesium.Cartographic.fromDegrees(pointX, pointY) ); } let terrainProvider = viewer2.terrainProvider; return new Promise((resolve2, reject2) => { new Cesium.sampleTerrain(terrainProvider, options2.level, positions).then(function(updatedPositions) { if (updatedPositions) { resolve2(updatedPositions); } }); }); } function getHeigthByPointsMostDetailed(viewer2, points2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } let positions = []; for (let i2 = 0; i2 < points2.length; i2++) { let pointX = points2[i2][0]; let pointY = points2[i2][1]; positions.push(Cesium.Cartographic.fromDegrees(pointX, pointY)); } let terrainProvider = viewer2.terrainProvider; return new Promise((resolve2, reject2) => { let promise = new Cesium.sampleTerrainMostDetailed(terrainProvider, positions); promise.then(function(updatedPositions) { resolve2(updatedPositions); }); }); } function getHeigthByPointMostDetailed(viewer2, points2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } let positions = Cesium.Cartographic.fromDegrees(points2[0], points2[1]); let terrainProvider = viewer2.terrainProvider; return new Promise((resolve2, reject2) => { let promise = new Cesium.sampleTerrainMostDetailed(terrainProvider, positions); promise.then(function(updatedPositions) { resolve2(updatedPositions); }); }); } function createTooltip(frameDiv) { var tooltip2 = function(frameDiv2) { var div = document.createElement("DIV"); div.className = "twipsy right"; var arrow = document.createElement("DIV"); arrow.className = "twipsy-arrow"; div.appendChild(arrow); var title = document.createElement("DIV"); title.className = "twipsy-inner"; div.appendChild(title); this._div = div; this._title = title; frameDiv2.appendChild(div); }; tooltip2.prototype.setVisible = function(visible) { this._div.style.display = visible ? "block" : "none"; }; tooltip2.prototype.showAt = function(position2, message) { if (position2 && message) { this.setVisible(true); this._title.innerHTML = message; this._div.style.left = position2.x + 10 + "px"; this._div.style.top = position2.y - this._div.clientHeight / 2 + "px"; } }; return new tooltip2(frameDiv); } var common = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, setSessionid: setSessionid$1, guid, getGuid, getHeigthByLngLat, getHeigthByPoints, getHeigthByPointsMostDetailed, getHeigthByPointMostDetailed, createTooltip }, Symbol.toStringTag, { value: "Module" })); class PointObject { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; } } Object.assign(PointObject.prototype, { addLabel(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } let position2; if (points2 instanceof Cesium.Cartesian3) { position2 = points2; } else { position2 = Cesium.Cartesian3.fromDegrees(points2[0], points2[1], points2[2] || 0); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); let label2 = options2.label || {}; label2.text = Cesium.defaultValue(label2.text, "\u91D1\u7530CIM\u4E09\u7EF4\u57FA\u7840\u5E73\u53F0"); label2.font = Cesium.defaultValue(label2.font, "24px Helvetica"); if (label2.fillColor instanceof Cesium.Color) { label2.fillColor = label2.fillColor; } else if (label2.fillColor instanceof Array) { label2.fillColor = new Cesium.Color(label2.fillColor[0] / 255, label2.fillColor[1] / 255, label2.fillColor[2] / 255, label2.fillColor[3]); } else if (typeof label2.fillColor === "string") { label2.fillColor = new Cesium.Color.fromCssColorString(label2.fillColor); } else { label2.fillColor = new Cesium.Color.fromCssColorString("#FFFF00"); } if (label2.outlineColor instanceof Cesium.Color) { label2.outlineColor = label2.outlineColor; } else if (label2.outlineColor instanceof Array) { label2.outlineColor = new Cesium.Color(label2.outlineColor[0] / 255, label2.outlineColor[1] / 255, label2.outlineColor[2] / 255, label2.outlineColor[3]); } else if (typeof label2.outlineColor === "string") { label2.outlineColor = new Cesium.Color.fromCssColorString(label2.outlineColor); } else { label2.outlineColor = new Cesium.Color.fromCssColorString("#FFF"); } label2.outlineWidth = Cesium.defaultValue(label2.outlineWidth, 1); label2.showBackground = Cesium.defaultValue(label2.showBackground, false); if (label2.backgroundColor instanceof Cesium.Color) { label2.backgroundColor = label2.backgroundColor; } else if (label2.backgroundColor instanceof Array) { label2.backgroundColor = new Cesium.Color(label2.backgroundColor[0] / 255, label2.backgroundColor[1] / 255, label2.backgroundColor[2] / 255, label2.backgroundColor[3]); } else if (typeof label2.backgroundColor === "string") { label2.backgroundColor = new Cesium.Color.fromCssColorString(label2.backgroundColor); } else { label2.backgroundColor = new Cesium.Color.fromCssColorString("#FFF"); } if (label2.backgroundPadding) { label2.backgroundPadding = new Cesium.Cartesian2(label2.backgroundPadding, label2.backgroundPadding); } let entity = new Cesium.Entity({ position: position2, label: { text: label2.text, font: label2.font, fillColor: label2.fillColor, outlineColor: label2.outlineColor, outlineWidth: label2.outlineWidth, style: Cesium.LabelStyle.FILL_AND_OUTLINE, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, showBackground: label2.showBackground, backgroundColor: label2.backgroundColor, backgroundPadding: label2.backgroundPadding } }); if (label2.pixelOffset) { label2.pixelOffset.x = Cesium.defaultValue(label2.pixelOffset.x, 0); label2.pixelOffset.y = Cesium.defaultValue(label2.pixelOffset.y, 0); entity.label.pixelOffset = new Cesium.Cartesian2(label2.pixelOffset.x, label2.pixelOffset.y); } if (label2.eyeOffset) { label2.eyeOffset.x = Cesium.defaultValue(label2.eyeOffset.x, 0); label2.eyeOffset.y = Cesium.defaultValue(label2.eyeOffset.y, 0); label2.eyeOffset.z = Cesium.defaultValue(label2.eyeOffset.z, 0); entity.label.eyeOffset = new Cesium.Cartesian3(label2.eyeOffset.x, label2.eyeOffset.y, label2.eyeOffset.z); } if (label2.scaleByDistance) { label2.scaleByDistance.near = Cesium.defaultValue(label2.scaleByDistance.near, 0); label2.scaleByDistance.nearValue = Cesium.defaultValue(label2.scaleByDistance.nearValue, 0); label2.scaleByDistance.far = Cesium.defaultValue(label2.scaleByDistance.far, 1); label2.scaleByDistance.farValue = Cesium.defaultValue(label2.scaleByDistance.farValue, 0); entity.label.scaleByDistance = new Cesium.NearFarScalar(label2.scaleByDistance.near, label2.scaleByDistance.nearValue, label2.scaleByDistance.far, label2.scaleByDistance.farValue); } if (label2.distanceDisplayCondition) { label2.distanceDisplayCondition.near = Cesium.defaultValue(label2.distanceDisplayCondition.near, 0); label2.distanceDisplayCondition.far = Cesium.defaultValue(label2.distanceDisplayCondition.far, Number.MAX_VALUE); entity.label.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(label2.distanceDisplayCondition.near, label2.distanceDisplayCondition.far); } if (label2.disableDepthTestDistance) { label2.disableDepthTestDistance = Cesium.defaultValue(label2.disableDepthTestDistance, 999); entity.label.disableDepthTestDistance = label2.disableDepthTestDistance; } resolve2(entity); }); }, addPoint(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } let position2; if (points2 instanceof Cesium.Cartesian3) { position2 = points2; } else { position2 = Cesium.Cartesian3.fromDegrees(points2[0], points2[1], points2[2] || 0); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); let point2 = options2.point || {}; point2.pixelSize = Cesium.defaultValue(point2.pixelSize, 10); if (point2.color instanceof Cesium.Color) { point2.color = point2.color; } else if (point2.color instanceof Array) { point2.color = new Cesium.Color(point2.color[0] / 255, point2.color[1] / 255, point2.color[2] / 255, point2.color[3]); } else if (typeof point2.color === "string") { point2.color = new Cesium.Color.fromCssColorString(point2.color); } else { point2.color = new Cesium.Color.fromCssColorString("#FFF"); } if (point2.outlineColor instanceof Cesium.Color) { point2.outlineColor = point2.outlineColor; } else if (point2.outlineColor instanceof Array) { point2.outlineColor = new Cesium.Color(point2.outlineColor[0] / 255, point2.outlineColor[1] / 255, point2.outlineColor[2] / 255, point2.outlineColor[3]); } else if (typeof point2.outlineColor === "string") { point2.outlineColor = new Cesium.Color.fromCssColorString(point2.outlineColor); } else { point2.outlineColor = new Cesium.Color.fromCssColorString("#FFF"); } point2.outlineWidth = Cesium.defaultValue(point2.outlineWidth, 1); let entity = new Cesium.Entity({ position: position2, point: { pixelSize: point2.pixelSize, color: point2.color, outlineColor: point2.outlineColor, outlineWidth: point2.outlineWidth, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, disableDepthTestDistance: Number.POSITIVE_INFINITY, clampToGround: true } }); if (options2.label) { let label2 = options2.label || {}; label2.text = Cesium.defaultValue(label2.text, ""); label2.font = Cesium.defaultValue(label2.font, "24px Helvetica"); if (label2.fillColor instanceof Cesium.Color) { label2.fillColor = label2.outlineColor; } else if (label2.fillColor instanceof Array) { label2.fillColor = new Cesium.Color(label2.fillColor[0] / 255, label2.fillColor[1] / 255, label2.fillColor[2] / 255, label2.fillColor[3]); } else if (typeof label2.fillColor === "string") { label2.fillColor = new Cesium.Color.fromCssColorString(label2.fillColor); } else { label2.fillColor = new Cesium.Color.fromCssColorString("#FFFF00"); } if (label2.outlineColor instanceof Cesium.Color) { label2.outlineColor = label2.outlineColor; } else if (label2.outlineColor instanceof Array) { label2.outlineColor = new Cesium.Color(label2.outlineColor[0] / 255, label2.outlineColor[1] / 255, label2.outlineColor[2] / 255, label2.outlineColor[3]); } else if (typeof label2.outlineColor === "string") { label2.outlineColor = new Cesium.Color.fromCssColorString(label2.outlineColor); } else { label2.outlineColor = new Cesium.Color.fromCssColorString("#FFF"); } label2.outlineWidth = Cesium.defaultValue(label2.outlineWidth, 1); label2.showBackground = Cesium.defaultValue(label2.showBackground, false); if (label2.backgroundColor instanceof Cesium.Color) { label2.backgroundColor = label2.backgroundColor; } else if (label2.backgroundColor instanceof Array) { label2.backgroundColor = new Cesium.Color(label2.backgroundColor[0] / 255, label2.backgroundColor[1] / 255, label2.backgroundColor[2] / 255, label2.backgroundColor[3]); } else if (typeof label2.backgroundColor === "string") { label2.backgroundColor = new Cesium.Color.fromCssColorString(label2.backgroundColor); } else { label2.backgroundColor = new Cesium.Color.fromCssColorString("#FFF"); } if (label2.backgroundPadding) { label2.backgroundPadding = new Cesium.Cartesian2(label2.backgroundPadding, label2.backgroundPadding); } entity.label = { text: label2.text, font: label2.font, fillColor: label2.fillColor, outlineColor: label2.outlineColor, outlineWidth: label2.outlineWidth, style: Cesium.LabelStyle.FILL_AND_OUTLINE, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, showBackground: label2.showBackground, backgroundColor: label2.backgroundColor, backgroundPadding: new Cesium.Cartesian2(6, 6), disableDepthTestDistance: Number.POSITIVE_INFINITY, eyeOffset: new Cesium.Cartesian3(0, 0, 1e4), clampToGround: true }; if (label2.pixelOffset) { label2.pixelOffset.x = Cesium.defaultValue(label2.pixelOffset.x, 0); label2.pixelOffset.y = Cesium.defaultValue(label2.pixelOffset.y, 0); entity.label.pixelOffset = new Cesium.Cartesian2(label2.pixelOffset.x, label2.pixelOffset.y); } if (label2.scaleByDistance) { label2.scaleByDistance.near = Cesium.defaultValue(label2.scaleByDistance.near, 0); label2.scaleByDistance.nearValue = Cesium.defaultValue(label2.scaleByDistance.nearValue, 0); label2.scaleByDistance.far = Cesium.defaultValue(label2.scaleByDistance.far, 1); label2.scaleByDistance.farValue = Cesium.defaultValue(label2.scaleByDistance.farValue, 0); entity.label.scaleByDistance = new Cesium.NearFarScalar(label2.scaleByDistance.near, label2.scaleByDistance.nearValue, label2.scaleByDistance.far, label2.scaleByDistance.farValue); entity.label.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(label2.scaleByDistance.near, label2.scaleByDistance.far); } if (label2.distanceDisplayCondition) { label2.distanceDisplayCondition.near = Cesium.defaultValue(label2.distanceDisplayCondition.near, 0); label2.distanceDisplayCondition.far = Cesium.defaultValue(label2.distanceDisplayCondition.far, Number.MAX_VALUE); entity.label.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(label2.distanceDisplayCondition.near, label2.distanceDisplayCondition.far); } if (label2.disableDepthTestDistance) { label2.disableDepthTestDistance = Cesium.defaultValue(label2.disableDepthTestDistance, 999); entity.label.disableDepthTestDistance = label2.disableDepthTestDistance; } } resolve2(entity); }); }, addBillboard(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } let position2; if (points2 instanceof Cesium.Cartesian3) { position2 = points2; } else { position2 = Cesium.Cartesian3.fromDegrees(points2[0], points2[1], points2[2] || 0); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); let billboard = options2.billboard || {}; billboard.image = billboard.imgUrl || "jt3dSDK/imgs/point/point3.png"; billboard.scale = Cesium.defaultValue(billboard.scale, 1); let entity = new Cesium.Entity({ name: "add billboard", position: position2, billboard: { image: billboard.image, horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, scale: billboard.scale } }); if (options2.properties) { entity.properties = options2.properties; } if (billboard.pixelOffset) { billboard.pixelOffset.x = Cesium.defaultValue(billboard.pixelOffset.x, 0); billboard.pixelOffset.y = Cesium.defaultValue(billboard.pixelOffset.y, 0); entity.billboard.pixelOffset = new Cesium.Cartesian2(billboard.pixelOffset.x, billboard.pixelOffset.y); } if (billboard.scaleByDistance) { billboard.scaleByDistance.near = Cesium.defaultValue(billboard.scaleByDistance.near, 0); billboard.scaleByDistance.nearValue = Cesium.defaultValue(billboard.scaleByDistance.nearValue, 0); billboard.scaleByDistance.far = Cesium.defaultValue(billboard.scaleByDistance.far, 1); billboard.scaleByDistance.farValue = Cesium.defaultValue(billboard.scaleByDistance.farValue, 0); entity.billboard.scaleByDistance = new Cesium.NearFarScalar(billboard.scaleByDistance.near, billboard.scaleByDistance.nearValue, billboard.scaleByDistance.far, billboard.scaleByDistance.farValue); entity.billboard.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(billboard.scaleByDistance.near, billboard.scaleByDistance.far); } if (billboard.distanceDisplayCondition) { billboard.distanceDisplayCondition.near = Cesium.defaultValue(billboard.distanceDisplayCondition.near, 0); billboard.distanceDisplayCondition.far = Cesium.defaultValue(billboard.distanceDisplayCondition.far, Number.MAX_VALUE); entity.billboard.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(billboard.distanceDisplayCondition.near, billboard.distanceDisplayCondition.far); } if (billboard.disableDepthTestDistance) { billboard.disableDepthTestDistance = Cesium.defaultValue(billboard.disableDepthTestDistance, 999); entity.billboard.disableDepthTestDistance = billboard.disableDepthTestDistance; } if (options2.label) { let label2 = options2.label || {}; label2.text = Cesium.defaultValue(label2.text, ""); label2.font = Cesium.defaultValue(label2.font, "24px Helvetica"); if (label2.fillColor instanceof Cesium.Color) { label2.fillColor = label2.fillColor; } else if (label2.fillColor instanceof Array) { label2.fillColor = new Cesium.Color(label2.fillColor[0] / 255, label2.fillColor[1] / 255, label2.fillColor[2] / 255, label2.fillColor[3]); } else if (typeof label2.fillColor === "string") { label2.fillColor = new Cesium.Color.fromCssColorString(label2.fillColor); } else { label2.fillColor = new Cesium.Color.fromCssColorString("#ff0000"); } if (label2.outlineColor instanceof Cesium.Color) { label2.outlineColor = label2.outlineColor; } else if (label2.outlineColor instanceof Array) { label2.outlineColor = new Cesium.Color(label2.outlineColor[0] / 255, label2.outlineColor[1] / 255, label2.outlineColor[2] / 255, label2.outlineColor[3]); } else if (typeof label2.outlineColor === "string") { label2.outlineColor = new Cesium.Color.fromCssColorString(label2.outlineColor); } else { label2.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00"); } label2.outlineWidth = Cesium.defaultValue(label2.outlineWidth, 1); label2.showBackground = Cesium.defaultValue(label2.showBackground, false); if (label2.backgroundColor instanceof Cesium.Color) { label2.backgroundColor = label2.backgroundColor; } else if (label2.backgroundColor instanceof Array) { label2.backgroundColor = new Cesium.Color(label2.backgroundColor[0] / 255, label2.backgroundColor[1] / 255, label2.backgroundColor[2] / 255, label2.backgroundColor[3]); } else if (typeof label2.backgroundColor === "string") { label2.backgroundColor = new Cesium.Color.fromCssColorString(label2.backgroundColor); } else { label2.backgroundColor = new Cesium.Color.fromCssColorString("#FFFF00"); } if (label2.backgroundPadding) { label2.backgroundPadding = new Cesium.Cartesian2(label2.backgroundPadding, label2.backgroundPadding); } entity.label = { text: label2.text, font: label2.font, fillColor: label2.fillColor, outlineColor: label2.outlineColor, outlineWidth: label2.outlineWidth, style: Cesium.LabelStyle.FILL_AND_OUTLINE, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, showBackground: label2.showBackground, backgroundColor: label2.backgroundColor, backgroundPadding: label2.backgroundPadding, clampToGround: true, eyeOffset: new Cesium.Cartesian3(0, 0, 1e4) }; if (label2.pixelOffset) { label2.pixelOffset.x = Cesium.defaultValue(label2.pixelOffset.x, 0); label2.pixelOffset.y = Cesium.defaultValue(label2.pixelOffset.y, 0); entity.label.pixelOffset = new Cesium.Cartesian2(label2.pixelOffset.x, label2.pixelOffset.y); } if (label2.scaleByDistance) { label2.scaleByDistance.near = Cesium.defaultValue(label2.scaleByDistance.near, 0); label2.scaleByDistance.nearValue = Cesium.defaultValue(label2.scaleByDistance.nearValue, 0); label2.scaleByDistance.far = Cesium.defaultValue(label2.scaleByDistance.far, 1); label2.scaleByDistance.farValue = Cesium.defaultValue(label2.scaleByDistance.farValue, 0); entity.label.scaleByDistance = new Cesium.NearFarScalar(label2.scaleByDistance.near, label2.scaleByDistance.nearValue, label2.scaleByDistance.far, label2.scaleByDistance.farValue); entity.label.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(label2.scaleByDistance.near, label2.scaleByDistance.far); } if (label2.distanceDisplayCondition) { label2.distanceDisplayCondition.near = Cesium.defaultValue(label2.distanceDisplayCondition.near, 0); label2.distanceDisplayCondition.far = Cesium.defaultValue(label2.distanceDisplayCondition.far, Number.MAX_VALUE); entity.label.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(label2.distanceDisplayCondition.near, label2.distanceDisplayCondition.far); } if (label2.disableDepthTestDistance) { label2.disableDepthTestDistance = Cesium.defaultValue(label2.disableDepthTestDistance, 999); entity.label.disableDepthTestDistance = label2.disableDepthTestDistance; } } resolve2(entity); }); }, addModel: function(points2, options2) { this._viewer; return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } let position2; if (points2 instanceof Cesium.Cartesian3) { position2 = points2; } else { position2 = Cesium.Cartesian3.fromDegrees(points2[0], points2[1], points2[2] || 0); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); let model = options2.model || {}; model.alpha = Cesium.defaultValue(model.alpha, 1); model.heading = Cesium.defaultValue(model.heading, 0); model.pitch = Cesium.defaultValue(model.pitch, 0); model.roll = Cesium.defaultValue(model.roll, 0); var heading = Cesium.Math.toRadians(model.heading); var pitch = model.pitch; var roll = model.roll; new Cesium.HeadingPitchRoll(heading, pitch, roll); let entity = new Cesium.Entity({ position: position2, model: { uri: model.url, incrementallyLoadTextures: true, colorBlendMode: Cesium.ColorBlendMode["HIGHLIGHT"], colorBlendAmount: 0.1, color: Cesium.Color.WHITE.withAlpha(model.alpha), imageBasedLightingFactor: new Cesium.Cartesian2(12, 13), runAnimations: true, show: true, debugWireframe: false, debugShowBoundingVolume: false, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, disableDepthTestDistance: Number.POSITIVE_INFINITY, clampToGround: true } }); if (model.minimumPixelSize) { entity.model.minimumPixelSize = model.minimumPixelSize; } if (model.maximumScale) { entity.model.maximumScale = model.maximumScale; } if (options2.silhouetteColor) { if (model.silhouetteColor instanceof Cesium.Color) { model.silhouetteColor = model.silhouetteColor; } else if (model.silhouetteColor instanceof Array) { model.silhouetteColor = new Cesium.Color(model.silhouetteColor[0] / 255, model.silhouetteColor[1] / 255, model.silhouetteColor[2] / 255, model.silhouetteColor[3]); } else if (typeof model.silhouetteColor === "string") { model.silhouetteColor = new Cesium.Color.fromCssColorString(model.silhouetteColor); } else { model.silhouetteColor = new Cesium.Color.fromCssColorString("#FFFF00"); } } model.silhouetteSize = Cesium.defaultValue(model.silhouetteSize, 1); resolve2(entity); }); }, generatePoint(points2, options2) { return new Promise((resolve2, reject2) => { let _self = this; if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); let point2 = options2.point || {}; point2.pixelSize = Cesium.defaultValue(point2.pixelSize, 10); if (point2.color instanceof Cesium.Color) { point2.color = point2.color; } else if (point2.color instanceof Array) { point2.color = new Cesium.Color(point2.color[0] / 255, point2.color[1] / 255, point2.color[2] / 255, point2.color[3]); } else if (typeof point2.color === "string") { point2.color = new Cesium.Color.fromCssColorString(point2.color); } else { point2.color = new Cesium.Color.fromCssColorString("#FFF"); } if (point2.outlineColor instanceof Cesium.Color) { point2.outlineColor = point2.outlineColor; } else if (point2.outlineColor instanceof Array) { point2.outlineColor = new Cesium.Color(point2.outlineColor[0] / 255, point2.outlineColor[1] / 255, point2.outlineColor[2] / 255, point2.outlineColor[3]); } else if (typeof point2.outlineColor === "string") { point2.outlineColor = new Cesium.Color.fromCssColorString(point2.outlineColor); } else { point2.outlineColor = new Cesium.Color.fromCssColorString("#FFF"); } point2.outlineWidth = Cesium.defaultValue(point2.outlineWidth, 1); let terrainAltitude = getHeigthByPointsMostDetailed(_self._viewer, [points2]); terrainAltitude.then(function(updatedPositions) { let position2 = Cesium.Cartesian3.fromDegrees(points2[0], points2[1], updatedPositions[0].height); let entity = new Cesium.Entity({ id: options2.id, position: position2, point: { pixelSize: point2.pixelSize, color: point2.color, outlineColor: point2.outlineColor, outlineWidth: point2.outlineWidth, heightReference: Cesium.HeightReference.NONE, disableDepthTestDistance: updatedPositions[0].height, clampToGround: true } }); if (options2.label) { let label2 = options2.label || {}; label2.text = Cesium.defaultValue(label2.text, ""); label2.font = Cesium.defaultValue(label2.font, "24px Helvetica"); if (label2.fillColor instanceof Cesium.Color) { label2.fillColor = label2.fillColor; } else if (label2.fillColor instanceof Array) { label2.fillColor = new Cesium.Color(label2.fillColor[0] / 255, label2.fillColor[1] / 255, label2.fillColor[2] / 255, label2.fillColor[3]); } else if (typeof label2.fillColor === "string") { label2.fillColor = new Cesium.Color.fromCssColorString(label2.fillColor); } else { label2.fillColor = new Cesium.Color.fromCssColorString("#FFFF00"); } if (label2.outlineColor instanceof Cesium.Color) { label2.outlineColor = label2.outlineColor; } else if (label2.outlineColor instanceof Array) { label2.outlineColor = new Cesium.Color(label2.outlineColor[0] / 255, label2.outlineColor[1] / 255, label2.outlineColor[2] / 255, label2.outlineColor[3]); } else if (typeof label2.outlineColor === "string") { label2.outlineColor = new Cesium.Color.fromCssColorString(label2.outlineColor); } else { label2.outlineColor = new Cesium.Color.fromCssColorString("#FFF"); } label2.outlineWidth = Cesium.defaultValue(label2.outlineWidth, 1); label2.showBackground = Cesium.defaultValue(label2.showBackground, false); if (label2.backgroundColor instanceof Cesium.Color) { label2.backgroundColor = label2.backgroundColor; } else if (label2.backgroundColor instanceof Array) { label2.backgroundColor = new Cesium.Color(label2.backgroundColor[0] / 255, label2.backgroundColor[1] / 255, label2.backgroundColor[2] / 255, label2.backgroundColor[3]); } else if (typeof label2.backgroundColor === "string") { label2.backgroundColor = new Cesium.Color.fromCssColorString(label2.backgroundColor); } else { label2.backgroundColor = new Cesium.Color.fromCssColorString("#FFF"); } label2.scale = Cesium.defaultValue(label2.scale, 1); entity.label = { text: label2.text, font: label2.font, fillColor: label2.fillColor, outlineColor: label2.outlineColor, outlineWidth: label2.outlineWidth, style: Cesium.LabelStyle.FILL_AND_OUTLINE, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, showBackground: label2.showBackground, backgroundColor: label2.backgroundColor, backgroundPadding: new Cesium.Cartesian2(6, 6), disableDepthTestDistance: Number.POSITIVE_INFINITY, scale: label2.scale, clampToGround: true }; if (label2.pixelOffset) { label2.pixelOffset.x = Cesium.defaultValue(label2.pixelOffset.x, 0); label2.pixelOffset.y = Cesium.defaultValue(label2.pixelOffset.y, 0); entity.label.pixelOffset = new Cesium.Cartesian2(label2.pixelOffset.x, label2.pixelOffset.y); } if (label2.scaleByDistance) { label2.scaleByDistance.near = Cesium.defaultValue(label2.scaleByDistance.near, 0); label2.scaleByDistance.nearValue = Cesium.defaultValue(label2.scaleByDistance.nearValue, 0); label2.scaleByDistance.far = Cesium.defaultValue(label2.scaleByDistance.far, 1); label2.scaleByDistance.farValue = Cesium.defaultValue(label2.scaleByDistance.farValue, 0); entity.label.scaleByDistance = new Cesium.NearFarScalar(label2.scaleByDistance.near, label2.scaleByDistance.nearValue, label2.scaleByDistance.far, label2.scaleByDistance.farValue); } if (label2.distanceDisplayCondition) { label2.distanceDisplayCondition.near = Cesium.defaultValue(label2.distanceDisplayCondition.near, 0); label2.distanceDisplayCondition.far = Cesium.defaultValue(label2.distanceDisplayCondition.far, Number.MAX_VALUE); entity.label.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(label2.distanceDisplayCondition.near, label2.distanceDisplayCondition.far); } if (label2.disableDepthTestDistance) { label2.disableDepthTestDistance = Cesium.defaultValue(label2.disableDepthTestDistance, 999); entity.label.disableDepthTestDistance = label2.disableDepthTestDistance; } } resolve2(entity); }); }); }, addBillboardByGeoJson: function(geoJsonUrl, options2) { return new Promise((resolve2, reject2) => { let viewer2 = this._viewer; if (!Cesium.defined(geoJsonUrl)) { throw new Cesium.DeveloperError("geoJsonUrl is required."); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); let billboard = options2.billboard || {}; billboard.imgUrl = Cesium.defaultValue(billboard.imgUrl, "jt3dSDK/imgs/point/point3.png"); billboard.scale = Cesium.defaultValue(billboard.scale, 1); let label2 = options2.label || {}; label2.text = Cesium.defaultValue(label2.text, ""); label2.textField = Cesium.defaultValue(label2.textField, ""); label2.font = Cesium.defaultValue(label2.font, "24px Helvetica"); if (label2.fillColor instanceof Cesium.Color) { label2.fillColor = label2.fillColor; } else if (label2.fillColor instanceof Array) { label2.fillColor = new Cesium.Color(label2.fillColor[0] / 255, label2.fillColor[1] / 255, label2.fillColor[2] / 255, label2.fillColor[3]); } else if (typeof label2.fillColor === "string") { label2.fillColor = new Cesium.Color.fromCssColorString(label2.fillColor); } else { label2.fillColor = new Cesium.Color.fromCssColorString("#ff0000"); } if (label2.outlineColor instanceof Cesium.Color) { label2.outlineColor = label2.outlineColor; } else if (label2.outlineColor instanceof Array) { label2.outlineColor = new Cesium.Color(label2.outlineColor[0] / 255, label2.outlineColor[1] / 255, label2.outlineColor[2] / 255, label2.outlineColor[3]); } else if (typeof label2.outlineColor === "string") { label2.outlineColor = new Cesium.Color.fromCssColorString(label2.outlineColor); } else { label2.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00"); } label2.outlineWidth = Cesium.defaultValue(label2.outlineWidth, 1); label2.showBackground = Cesium.defaultValue(label2.showBackground, false); if (label2.backgroundColor instanceof Cesium.Color) { label2.backgroundColor = label2.backgroundColor; } else if (label2.backgroundColor instanceof Array) { label2.backgroundColor = new Cesium.Color(label2.backgroundColor[0] / 255, label2.backgroundColor[1] / 255, label2.backgroundColor[2] / 255, label2.backgroundColor[3]); } else if (typeof label2.backgroundColor === "string") { label2.backgroundColor = new Cesium.Color.fromCssColorString(label2.backgroundColor); } else { label2.backgroundColor = new Cesium.Color.fromCssColorString("#FFFF00"); } label2.scale = Cesium.defaultValue(label2.scale, 1); const dataSource = new Cesium.GeoJsonDataSource(options2.id); dataSource.load(geoJsonUrl, { clampToGround: true }).then(function(data) { viewer2.dataSources.add(data); const entities2 = data.entities.values; entities2.forEach((entity) => { entity.billboard = { image: billboard.imgUrl, horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, scale: billboard.scale, disableDepthTestDistance: Number.POSITIVE_INFINITY }; let labelText = label2.text; if (entity.properties[label2.textField]) { labelText = entity.properties[label2.textField]._value; } if (labelText === "") { labelText = (i + 1).toString(); } entity.label = { text: labelText.toString(), font: label2.font, fillColor: label2.fillColor, outlineColor: label2.outlineColor, outlineWidth: label2.outlineWidth, style: Cesium.LabelStyle.FILL_AND_OUTLINE, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, showBackground: label2.showBackground, backgroundColor: label2.backgroundColor, backgroundPadding: new Cesium.Cartesian2(6, 6), heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, scale: label2.scale }; if (label2.scaleByDistance) { label2.scaleByDistance.near = Cesium.defaultValue(label2.scaleByDistance.near, 0); label2.scaleByDistance.nearValue = Cesium.defaultValue(label2.scaleByDistance.nearValue, 0); label2.scaleByDistance.far = Cesium.defaultValue(label2.scaleByDistance.far, 1); label2.scaleByDistance.farValue = Cesium.defaultValue(label2.scaleByDistance.farValue, 0); entity.label.scaleByDistance = new Cesium.NearFarScalar(label2.scaleByDistance.near, label2.scaleByDistance.nearValue, label2.scaleByDistance.far, label2.scaleByDistance.farValue); } if (label2.distanceDisplayCondition) { label2.distanceDisplayCondition.near = Cesium.defaultValue(label2.distanceDisplayCondition.near, 0); label2.distanceDisplayCondition.far = Cesium.defaultValue(label2.distanceDisplayCondition.far, Number.MAX_VALUE); entity.label.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(label2.distanceDisplayCondition.near, label2.distanceDisplayCondition.far); } if (label2.disableDepthTestDistance) { label2.disableDepthTestDistance = Cesium.defaultValue(label2.disableDepthTestDistance, 999); entity.label.disableDepthTestDistance = label2.disableDepthTestDistance; } }); }); }); }, addGltf: function(options2) { let viewer2 = this._viewer; return new Promise((resolve2, reject2) => { if (!Cesium.defined(options2.points)) { resolve2("options.points is required."); throw new Cesium.DeveloperError("options.points is required."); } if (!Cesium.defined(options2.url)) { resolve2("options.url is required."); throw new Cesium.DeveloperError("options.url is required."); } options2.id = options2.id || setSessionid$1(); options2.heading = Cesium.defaultValue(options2.heading, 0); options2.pitch = Cesium.defaultValue(options2.pitch, 0); options2.roll = Cesium.defaultValue(options2.roll, 0); options2.alpha = Cesium.defaultValue(options2.alpha, 1); let position2 = void 0; if (options2.points instanceof Cesium.Cartesian3) { position2 = options2.points; } else { position2 = Cesium.Cartesian3.fromDegrees(options2.points[0], options2.points[1], options2.points[2] || 0); } var heading = Cesium.Math.toRadians(options2.heading); var pitch = options2.pitch; var roll = options2.roll; var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll); var modelGltf = viewer2.entities.add({ id: options2.id, position: position2, orientation: Cesium.Transforms.headingPitchRollQuaternion(position2, hpr), model: { uri: options2.url, incrementallyLoadTextures: true, colorBlendMode: Cesium.ColorBlendMode["HIGHLIGHT"], colorBlendAmount: 0.1, color: Cesium.Color.WHITE.withAlpha(options2.alpha), imageBasedLightingFactor: new Cesium.Cartesian2(12, 13), runAnimations: true, show: true, debugWireframe: false, debugShowBoundingVolume: false } }); if (options2.minimumPixelSize) { modelGltf.model.minimumPixelSize = options2.minimumPixelSize; } if (options2.maximumScale) { modelGltf.model.maximumScale = options2.maximumScale; } if (options2.silhouetteColor) { if (options2.silhouetteColor instanceof Cesium.Color) { options2.silhouetteColor = label.silhouetteColor; } else if (options2.silhouetteColor instanceof Array) { options2.silhouetteColor = new Cesium.Color(options2.silhouetteColor[0] / 255, options2.silhouetteColor[1] / 255, options2.silhouetteColor[2] / 255, options2.silhouetteColor[3]); } else if (typeof options2.silhouetteColor === "string") { options2.silhouetteColor = new Cesium.Color.fromCssColorString(options2.silhouetteColor); } else { options2.silhouetteColor = new Cesium.Color.fromCssColorString("#FFFF00"); } } window[options2.id] = modelGltf; resolve2(options2.id); }); }, addModelFromGltf(points2, options2) { let viewer2 = this._viewer; return new Promise((resolve2, reject2) => { if (!Cesium.defined(options2.points)) { resolve2("options.points is required."); throw new Cesium.DeveloperError("options.points is required."); } if (!Cesium.defined(options2.url)) { resolve2("options.url is required."); throw new Cesium.DeveloperError("options.url is required."); } options2.id = options2.id || setSessionid$1(); options2.scale = Cesium.defaultValue(options2.scale, 1); let position2 = void 0; if (options2.points instanceof Cesium.Cartesian3) { position2 = options2.points; } else { position2 = Cesium.Cartesian3.fromDegrees(options2.points[0], options2.points[1], options2.points[2] || 0); } const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position2); let model = viewer2.scene.primitives.add( Cesium.Model.fromGltf({ show: true, url: options2.url, modelMatrix, lightColor: new Cesium.Cartesian3(10, 10, 10), debugWireframe: false, debugShowBoundingVolume: false }) ); model.readyPromise.then(function() { var rotationX = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(0))); Cesium.Matrix4.multiply(model.modelMatrix, rotationX, model.modelMatrix); }); window[options2.id] = model; resolve2(options2.id); }); } }); class PolylineObject { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; } } Object.assign(PolylineObject.prototype, { addPolyline: function(points2, options2) { this._viewer; return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } if (points2.length < 2) { reject2("\u7EBF\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } let positions; if (points2[0] instanceof Cesium.Cartesian3) { positions = points2; } else { positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); } options2 = options2 || {}; options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); options2.clampToGround = Cesium.defaultValue(options2.clampToGround, true); options2.width = Cesium.defaultValue(options2.width, 3); options2.minHeigh = Cesium.defaultValue(options2.minHeigh, 0); options2.maxHeigh = Cesium.defaultValue(options2.maxHeigh, 2e8); let distanceDisplayCondition = new Cesium.DistanceDisplayCondition(options2.minHeigh, options2.maxHeigh); let material = new PolylineDirectionMaterialProperty(options2); let entity = new Cesium.Entity({ name: "line", polyline: { positions, width: options2.width, material, distanceDisplayCondition } }); if (options2.clampToGround) { entity.polyline.clampToGround = true; } resolve2(entity); }); }, drawPolylineByGeoJson: function(geoJsonUrl, options2) { return new Promise((resolve2, reject2) => { let viewer2 = this._viewer; if (!Cesium.defined(geoJsonUrl)) { throw new Cesium.DeveloperError("geoJsonUrl is required."); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); options2.clampToGround = Cesium.defaultValue(options2.clampToGround, true); options2.width = Cesium.defaultValue(options2.width, 3); options2.minHeigh = Cesium.defaultValue(options2.minHeigh, 0); options2.maxHeigh = Cesium.defaultValue(options2.maxHeigh, 2e8); let promise = Cesium.GeoJsonDataSource.load(geoJsonUrl, { clampToGround: options2.clampToGround }); promise.then((dataSource) => { viewer2.dataSources.add(dataSource); dataSource.name = options2.id; let entities2 = dataSource.entities.values; let distanceDisplayCondition = new Cesium.DistanceDisplayCondition(options2.minHeigh, options2.maxHeigh); let material = new PolylineDirectionMaterialProperty(options2); for (var i2 = 0; i2 < entities2.length; i2++) { var entity = entities2[i2]; entity.polyline.distanceDisplayCondition = distanceDisplayCondition; entity.polyline.material = material; entity.polyline.width = options2.width; if (options2.clampToGround) { entity.polyline.clampToGround = true; } } resolve2(entities2); }); }); }, PolylineLinkPulseMaterialProperty: function(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } if (points2.length < 2) { reject2("\u7EBF\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); options2.width = options2.width || 5; let material = new PolylineDirectionMaterialProperty(options2); let entity = this._viewer.entities.add({ id: options2.id, name: "Pulse line", polyline: { positions, width: options2.width, material, clampToGround: true } }); resolve2(entity); }); }, PolylineArrowMaterialProperty: function(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } if (points2.length < 2) { reject2("\u7EBF\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); options2.width = options2.width || 5; let material = new PolylineDirectionMaterialProperty(options2); let entity = this._viewer.entities.add({ id: options2.id, name: "Pulse line", polyline: { positions, width: options2.width, material, clampToGround: true } }); resolve2(entity); }); }, drawGlowingLine(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } if (points2.length < 2) { reject2("\u7EBF\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); if (options2.color) { if (options2.color instanceof Array) { options2.color = new Cesium.Color(options2.color[0] / 255, options2.color[1] / 255, options2.color[2] / 255, options2.color[3]); } else if (typeof options2.color === "string") { options2.color = new Cesium.Color.fromCssColorString(options2.color); } else { options2.color = new Cesium.Color.fromCssColorString("#FFFF00"); } } options2.width = options2.width || 5; options2.glowPower = options2.glowPower || 0.25; options2.taperPower = options2.taperPower || 1; let entity = this._viewer.entities.add({ id: options2.id, name: "Glowing blue line on the surface", polyline: { clampToGround: true, positions, width: options2.width, followSurface: true, material: new Cesium.PolylineGlowMaterialProperty({ color: options2.color, glowPower: options2.glowPower, taperPower: options2.taperPower }) } }); resolve2(entity); }); }, drawSpecifyColorLine(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { reject2("points is required."); } if (points2.length < 2) { reject2("\u7EBF\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); if (options2.color) { if (options2.color instanceof Array) { options2.color = new Cesium.Color(options2.color[0] / 255, options2.color[1] / 255, options2.color[2] / 255, options2.color[3]); } else if (typeof options2.color === "string") { options2.color = new Cesium.Color.fromCssColorString(options2.color); } else { options2.color = new Cesium.Color.fromCssColorString("#FFFF00"); } } options2.width = options2.width || 5; let entity = this._viewer.entities.add({ id: options2.id, name: "Red line on the surface", polyline: { clampToGround: true, positions, width: options2.width, material: options2.color } }); resolve2(entity); }); }, drawSpecifyColorAndOutlineColorLine(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } if (points2.length < 2) { reject2("\u7EBF\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); if (options2.color) { if (options2.color instanceof Array) { options2.color = new Cesium.Color(options2.color[0] / 255, options2.color[1] / 255, options2.color[2] / 255, options2.color[3]); } else if (typeof options2.color === "string") { options2.color = new Cesium.Color.fromCssColorString(options2.color); } else { options2.color = new Cesium.Color.fromCssColorString("#FFFF00"); } } options2.width = options2.width || 5; if (options2.outlineColor) { if (options2.outlineColor instanceof Array) { options2.outlineColor = new Cesium.Color(options2.outlineColor[0] / 255, options2.outlineColor[1] / 255, options2.outlineColor[2] / 255, options2.outlineColor[3]); } else if (typeof options2.outlineColor === "string") { options2.outlineColor = new Cesium.Color.fromCssColorString(options2.outlineColor); } else { options2.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00"); } } options2.outlineWidth = Cesium.defaultValue(options2.outlineWidth, 1); let entity = this._viewer.entities.add({ id: options2.id, name: "Orange line with black outline at height and following the surface", polyline: { clampToGround: true, positions, width: options2.width, material: new Cesium.PolylineOutlineMaterialProperty({ color: options2.color, outlineWidth: options2.outlineWidth, outlineColor: options2.outlineColor }) } }); resolve2(entity); }); }, drawSpecifyColorArrowStaticStateLine(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } if (points2.length < 2) { reject2("\u7EBF\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); if (options2.color) { if (options2.color instanceof Array) { options2.color = new Cesium.Color(options2.color[0] / 255, options2.color[1] / 255, options2.color[2] / 255, options2.color[3]); } else if (typeof options2.color === "string") { options2.color = new Cesium.Color.fromCssColorString(options2.color); } else { options2.color = new Cesium.Color.fromCssColorString("#FFFF00"); } } options2.width = options2.width || 5; let entity = this._viewer.entities.add({ id: options2.id, name: "Purple straight arrow at height", polyline: { clampToGround: true, positions, width: options2.width, followSurface: false, material: new Cesium.PolylineArrowMaterialProperty(options2.color) } }); resolve2(entity); }); }, drawDashedLine(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } if (points2.length < 2) { reject2("\u7EBF\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); if (options2.color) { if (options2.color instanceof Array) { options2.color = new Cesium.Color(options2.color[0] / 255, options2.color[1] / 255, options2.color[2] / 255, options2.color[3]); } else if (typeof options2.color === "string") { options2.color = new Cesium.Color.fromCssColorString(options2.color); } else { options2.color = new Cesium.Color.fromCssColorString("#FFFF00"); } } options2.width = options2.width || 5; if (options2.gapColor) { if (options2.gapColor instanceof Array) { options2.gapColor = new Cesium.Color(options2.gapColor[0] / 255, options2.gapColor[1] / 255, options2.gapColor[2] / 255, options2.gapColor[3]); } else if (typeof options2.gapColor === "string") { options2.gapColor = new Cesium.Color.fromCssColorString(options2.gapColor); } else { options2.gapColor = new Cesium.Color.fromCssColorString("#FFFF00"); } } options2.dashLength = options2.dashLength || 16; options2.dashPattern = options2.dashPattern || 255; let entity = this._viewer.entities.add({ id: options2.id, name: "CYAN dashed line", polyline: { clampToGround: true, positions, width: options2.width, material: new Cesium.PolylineDashMaterialProperty({ color: options2.color, gapColor: options2.gapColor, dashLength: options2.dashLength, dashPattern: options2.dashPattern }) } }); resolve2(entity); }); } }); function DynamicWallMaterialProperty(options2) { this._definitionChanged = new Cesium.Event(); this._color = void 0; this._colorSubscription = void 0; this.color = options2.color || Color.BLUE; this.duration = options2.duration || 1e3; this.trailImage = options2.trailImage; this._time = new Date().getTime(); } function _getDirectionWallShader(options2) { if (options2 && options2.get) { var materail = "czm_material czm_getMaterial(czm_materialInput materialInput)\n {\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec2 st = materialInput.st;"; if (options2.direction == "vertical") { materail += "vec4 colorImage = texture2D(image, vec2(fract(st.s), fract(float(" + options2.count + ")*st.t" + options2.order + " time)));\n "; } else { materail += "vec4 colorImage = texture2D(image, vec2(fract(float(" + options2.count + ")*st.s " + options2.order + " time), fract(st.t)));\n "; } materail += "vec4 fragColor;\n fragColor.rgb = (colorImage.rgb+color.rgb) / 1.0;\n fragColor = czm_gammaCorrect(fragColor);\n material.diffuse = colorImage.rgb;\n material.alpha = colorImage.a;\n material.emission = fragColor.rgb;\n return material;\n }"; return materail; } } Object.defineProperties(DynamicWallMaterialProperty.prototype, { isConstant: { get: function() { return false; } }, definitionChanged: { get: function() { return this._definitionChanged; } }, color: Cesium.createPropertyDescriptor("color") }); var MaterialType = "wallType" + parseInt(Math.random() * 1e3); DynamicWallMaterialProperty.prototype.getType = function(time) { return MaterialType; }; DynamicWallMaterialProperty.prototype.getValue = function(time, result) { if (!Cesium.defined(result)) { result = {}; } result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.WHITE, result.color); result.image = this.trailImage; if (this.duration) { result.time = (new Date().getTime() - this._time) % this.duration / this.duration; } viewer.scene.requestRender(); return result; }; DynamicWallMaterialProperty.prototype.equals = function(other) { return this === other || other instanceof DynamicWallMaterialProperty && Cesium.Property.equals(this._color, other._color); }; Cesium.Material._materialCache.addMaterial(MaterialType, { fabric: { type: MaterialType, uniforms: { color: new Cesium.Color(1, 0, 0, 0.5), image: Cesium.Material.DefaultImageId, time: -20 }, source: _getDirectionWallShader({ get: true, count: 3, direction: "vertical", order: "-" }) }, translucent: function(material) { return true; } }); Cesium.DynamicWallMaterialProperty = DynamicWallMaterialProperty; class WallDiffuseMaterialProperty { constructor(options2) { this._definitionChanged = new Cesium.Event(); this._color = void 0; this.color = options2.color; } get isConstant() { return false; } get definitionChanged() { return this._definitionChanged; } getType(time) { return Cesium.Material.WallDiffuseMaterialType; } getValue(time, result) { if (!Cesium.defined(result)) { result = {}; } result.color = Cesium.Property.getValueOrDefault(this._color, time, Cesium.Color.RED, result.color); return result; } equals(other) { return this === other || other instanceof WallDiffuseMaterialProperty && Cesium.Property.equals(this._color, other._color); } } Object.defineProperties(WallDiffuseMaterialProperty.prototype, { color: Cesium.createPropertyDescriptor("color") }); Cesium.WallDiffuseMaterialProperty = WallDiffuseMaterialProperty; Cesium.Material.WallDiffuseMaterialProperty = "WallDiffuseMaterialProperty"; Cesium.Material.WallDiffuseMaterialType = "WallDiffuseMaterialType"; Cesium.Material.WallDiffuseMaterialSource = ` uniform vec4 color; czm_material czm_getMaterial(czm_materialInput materialInput){ czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; material.diffuse = color.rgb * 2.0; material.alpha = color.a * (1.0 - fract(st.t)) * 0.8; return material; } `; Cesium.Material._materialCache.addMaterial(Cesium.Material.WallDiffuseMaterialType, { fabric: { type: Cesium.Material.WallDiffuseMaterialType, uniforms: { color: new Cesium.Color(1, 0, 0, 1) }, source: Cesium.Material.WallDiffuseMaterialSource }, translucent: function(material) { return true; } }); class WallObject { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; } } Object.assign(WallObject.prototype, { drawWallByGeoJson: function(geoJsonUrl, options2) { return new Promise((resolve2, reject2) => { let _self = this; let viewer2 = this._viewer; if (!Cesium.defined(geoJsonUrl)) { throw new Cesium.DeveloperError("geoJsonUrl is required."); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); fetch(geoJsonUrl).then((res) => { return res.json(); }).then((res) => { let wall = new Cesium.CustomDataSource(options2.id); viewer2.dataSources.add(wall); for (var i2 = 0; i2 < res.features.length; i2++) { if (res.features[i2].geometry) { if (res.features[i2].geometry.type === "MultiLineString") { let coordinatesList = res.features[i2].geometry.coordinates; for (var j = 0; j < coordinatesList.length; j++) { let coordinates = coordinatesList[j]; let positions = coordinates.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); _self.addWall(positions, options2).then((entity) => { wall.entities.add(entity); }); } } else { let coordinates = res.features[i2].geometry.coordinates; let positions = coordinates.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); _self.addWall(positions, options2).then((entity) => { wall.entities.add(entity); }); } } } resolve2(options2.id); }); }); }, addWall(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } if (points2.length < 2) { reject2("\u5899\u4F53\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } let positions; if (points2[0] instanceof Cesium.Cartesian3) { positions = points2; } else { positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); options2.clampToGround = Cesium.defaultValue(options2.clampToGround, true); options2.minimunHeights = options2.minimunHeights !== void 0 && typeof options2.minimunHeights === "number" ? options2.minimunHeights : 0; options2.maximumHeights = options2.maximumHeights !== void 0 && typeof options2.maximumHeights === "number" ? options2.maximumHeights : 1e3; if (options2.color) { if (options2.color instanceof Cesium.Color) { options2.color = options2.color; } else if (options2.color instanceof Array) { options2.color = new Cesium.Color(options2.color[0] / 255, options2.color[1] / 255, options2.color[2] / 255, options2.color[3]); } else if (typeof options2.color === "string") { options2.color = new Cesium.Color.fromCssColorString(options2.color); } else { options2.color = new Cesium.Color.fromCssColorString("#FFFF00"); } } options2.trailImage = Cesium.defaultValue(options2.trailImage, "jt3dSDK/imgs/wallmaterial/wl.png"); options2.duration = Cesium.defaultValue(options2.duration, 3e3); options2.count = Cesium.defaultValue(options2.count, 1); options2.direction = Cesium.defaultValue(options2.direction, "vertical"); options2.order = Cesium.defaultValue(options2.order, "-"); let entity = new Cesium.Entity({ name: "\u7ACB\u4F53\u5899\u6548\u679C", wall: { positions, maximumHeights: new Array(positions.length).fill(options2.maximumHeights), minimunHeights: new Array(positions.length).fill(options2.minimunHeights), material: new WallMaterialProperty$1(viewer, { trailImage: options2.trailImage, color: options2.color, duration: options2.duration, param: { count: options2.count, direction: options2.direction, order: options2.order } }) } }); resolve2(entity); }); } }); class LoadMapData { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._pointObject = new PointObject(viewer2); this._polylineObject = new PolylineObject(viewer2); this._wallObject = new WallObject(viewer2); } _addImageryProvider(id, provider) { window[id] = this._viewer.imageryLayers.addImageryProvider(provider); } _removeImageryProvider(serviceId) { this._viewer.imageryLayers.remove(window[serviceId]); window[serviceId] = null; } _addTerrainProvider(provider) { this._viewer.terrainProvider = provider; } _setEllipsoidTerrain() { this._viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider({}); } _addScenePrimitives(scenePrimitives) { this._viewer.scene.primitives.add(scenePrimitives); } _removeScenePrimitives(serviceId) { this._viewer.scene.primitives.remove(window[serviceId]); window[serviceId] = null; } _guid() { function S4() { return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1); } return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); } _transformProjection(provider) { let webMercatorTilingScheme = provider.tilingScheme; let projection = webMercatorTilingScheme._projection; projection.x_project = projection.project; projection.project = function(cartographic) { let point2; return point2 = CoordTransform.WGS84ToGCJ02( Cesium.Math.toDegrees(cartographic.longitude), Cesium.Math.toDegrees(cartographic.latitude) ), projection.x_project( new Cesium.Cartographic( Cesium.Math.toRadians(point2[0]), Cesium.Math.toRadians(point2[1]) ) ); }; projection.x_unproject = projection.unproject; projection.unproject = function(cartesian) { let point2, cartographic = projection.x_unproject(cartesian); return point2 = CoordTransform.GCJ02ToWGS84( Cesium.Math.toDegrees(cartographic.longitude), Cesium.Math.toDegrees(cartographic.latitude) ), new Cesium.Cartographic( Cesium.Math.toRadians(point2[0]), Cesium.Math.toRadians(point2[1]) ); }; return provider; } } Object.assign(LoadMapData.prototype, { addTerrain(options2) { if (!Cesium.defined(options2) || !Cesium.defined(options2.url)) { throw new Cesium.DeveloperError("options.url is required."); } let _ConstructorOptions = { url: options2.url }; if (options2.requestVertexNormals) { _ConstructorOptions.requestVertexNormals = options2.requestVertexNormals; } else { _ConstructorOptions.requestVertexNormals = false; } if (options2.requestWaterMask) { _ConstructorOptions.requestWaterMask = options2.requestWaterMask; } else { _ConstructorOptions.requestWaterMask = false; } var terrainProvider = new Cesium.CesiumTerrainProvider(_ConstructorOptions); this._addTerrainProvider(terrainProvider); this.setTerrainExaggeration(options2); }, addMapboxLayer(options2, callSuccess) { if (!Cesium.defined(options2) || !Cesium.defined(options2.styleId)) { throw new Cesium.DeveloperError("options.styleId is required."); } if (!Cesium.defined(options2.accessToken)) { throw new Cesium.DeveloperError("options.accessToken is required."); } options2.id = options2.id || this._guid(); var imageryProvider = new Cesium.MapboxStyleImageryProvider({ url: options2.url, username: options2.username, styleId: options2.styleId, accessToken: options2.accessToken, scaleFactor: options2.scaleFactor }); this._addImageryProvider(options2.id, imageryProvider); this.setLayersStyle({ serviceId: options2.id, alpha: options2.alpha }); if (callSuccess) callSuccess(options2.id); }, addUrlTemplateImagery: function(options2, callSuccess) { if (!Cesium.defined(options2) || !Cesium.defined(options2.url)) { throw new Cesium.DeveloperError("options.url is required."); } options2.id = options2.id || this._guid(); options2.CRS = options2.CRS || ""; let _ConstructorOptions = { url: options2.url }; if (options2.minimumLevel) { _ConstructorOptions.minimumLevel = options2.minimumLevel; } if (options2.maximumLevel) { _ConstructorOptions.maximumLevel = options2.maximumLevel; } else { _ConstructorOptions.maximumLevel = 18; } var imageryProvider = new Cesium.UrlTemplateImageryProvider(_ConstructorOptions); if (options2.CRS.toUpperCase() === "WGS84") { imageryProvider.readyPromise.then(() => { this._transformProjection(imageryProvider); }); } this._addImageryProvider(options2.id, imageryProvider); this.setLayersStyle({ serviceId: options2.id, alpha: options2.alpha }); if (callSuccess) callSuccess(options2.id); }, addTileMapServiceImagery: function(options2, callSuccess) { if (!Cesium.defined(options2) || !Cesium.defined(options2.url)) { throw new Cesium.DeveloperError("options.url is required."); } options2.id = options2.id || this._guid(); let _ConstructorOptions = { url: options2.url }; if (options2.minimumLevel) { _ConstructorOptions.minimumLevel = options2.minimumLevel; } if (options2.maximumLevel) { _ConstructorOptions.maximumLevel = options2.maximumLevel; } else { _ConstructorOptions.maximumLevel = 18; } var imageryProvider = new Cesium.TileMapServiceImageryProvider(_ConstructorOptions); this._addImageryProvider(options2.id, imageryProvider); this.setLayersStyle({ serviceId: options2.id, alpha: options2.alpha }); if (callSuccess) callSuccess(options2.id); }, addWebMapTileService: function(options2, callSuccess) { if (!Cesium.defined(options2) || !Cesium.defined(options2.url)) { throw new Cesium.DeveloperError("options.url is required."); } if (!Cesium.defined(options2.layers)) { throw new Cesium.DeveloperError("options.layers is required."); } if (!Cesium.defined(options2.style)) { throw new Cesium.DeveloperError("options.style is required."); } if (!Cesium.defined(options2.tileMatrixSetID)) { throw new Cesium.DeveloperError("options.tileMatrixSetID is required."); } options2.id = options2.id || this._guid(); let _ConstructorOptions = { url: options2.url, layer: options2.layers, style: options2.style, tileMatrixSetID: options2.tileMatrixSetID, format: Cesium.defaultValue(options2.format, "image/png") }; if (options2.tileMatrixLabels) { _ConstructorOptions.tileMatrixLabels = options2.tileMatrixLabels; } if (options2.minimumLevel) { _ConstructorOptions.minimumLevel = options2.minimumLevel; } if (options2.maximumLevel) { _ConstructorOptions.maximumLevel = options2.maximumLevel; } else { _ConstructorOptions.maximumLevel = 18; } let imageryProvider = new Cesium.WebMapTileServiceImageryProvider(_ConstructorOptions); this._addImageryProvider(options2.id, imageryProvider); this.setLayersStyle({ serviceId: options2.id, alpha: options2.alpha }); if (callSuccess) callSuccess(options2.id); }, addWebMapService: function(options2, callSuccess) { if (!Cesium.defined(options2) || !Cesium.defined(options2.url)) { throw new Cesium.DeveloperError("options.url is required."); } if (!Cesium.defined(options2.layers)) { throw new Cesium.DeveloperError("options.layers is required."); } options2.id = options2.id || this._guid(); let _ConstructorOptions = { url: options2.url, layers: options2.layers }; if (options2.parameters) { _ConstructorOptions.parameters = options2.parameters; } if (options2.minimumLevel) { _ConstructorOptions.minimumLevel = options2.minimumLevel; } if (options2.maximumLevel) { _ConstructorOptions.maximumLevel = options2.maximumLevel; } else { _ConstructorOptions.maximumLevel = 18; } let imageryProvider = new Cesium.WebMapServiceImageryProvider(_ConstructorOptions); this._addImageryProvider(options2.id, imageryProvider); this.setLayersStyle({ serviceId: options2.id, alpha: options2.alpha }); if (callSuccess) callSuccess(options2.id); }, addArcGisMapServer: function(options2, callSuccess) { if (!Cesium.defined(options2) || !Cesium.defined(options2.url)) { throw new Cesium.DeveloperError("options.url is required."); } options2.id = options2.id || this._guid(); let _ConstructorOptions = { url: options2.url }; if (options2.layers) { _ConstructorOptions.layers = options2.layers; } let imageryProvider = new Cesium.ArcGisMapServerImageryProvider(_ConstructorOptions); this._addImageryProvider(options2.id, imageryProvider); this.setLayersStyle({ serviceId: options2.id, alpha: options2.alpha }); if (callSuccess) callSuccess(options2.id); }, addCesium3DTileset: function(options2, callSuccess) { let _self = this; if (!Cesium.defined(options2) || !Cesium.defined(options2.url)) { throw new Cesium.DeveloperError("options.url is required."); } options2.id = options2.id || this._guid(); let _ConstructorOptions = { url: options2.url, skipLevelOfDetail: true }; let tileSetModel = new Cesium.Cesium3DTileset(_ConstructorOptions); tileSetModel.readyPromise.then((tileset) => { window[options2.id] = tileset; _self._addScenePrimitives(tileset); _self.set3DTilePosition({ serviceId: options2.id, height: options2.height }); _self.set3DTileStyle({ serviceId: options2.id, alpha: options2.alpha }); if (callSuccess) callSuccess(options2.id); }).catch(function(error) { console.log(error); }); }, addCesium3DTilesetBm: function(options2, callSuccess) { let _self = this; if (!Cesium.defined(options2) || !Cesium.defined(options2.url)) { throw new Cesium.DeveloperError("options.url is required."); } options2.id = options2.id || this._guid(); let _ConstructorOptions = { url: options2.url, skipLevelOfDetail: true }; let tileSetModel = new Cesium.Cesium3DTileset(_ConstructorOptions); tileSetModel.readyPromise.then((tileset) => { window[options2.id] = tileset; _self._addScenePrimitives(tileset); _self.set3DTileBMStyle({ serviceId: options2.id, color: options2.color }); if (callSuccess) callSuccess(options2.id); }).catch(function(error) { console.log(error); }); }, addPolygonImageMaterial: function(options2, callSuccess) { if (!Cesium.defined(options2.points)) { throw new Cesium.DeveloperError("options.points is required."); } if (options2.points.length < 3) { reject("\u9762\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C113\u4E2A"); } let positions = []; if (options2.points instanceof Cesium.Cartesian3) { positions = options2.points; } else { positions = options2.points.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); } options2.id = options2.id || this._guid(); options2.alpha = options2.alpha || 1; this.classificationType = Cesium.ClassificationType.BOTH; if (options2.classificationType === "Terrain") { this.classificationType = Cesium.ClassificationType.TERRAIN; } else if (options2.classificationType === "3DTiles") { this.classificationType = Cesium.ClassificationType.CESIUM_3D_TILE; } if (options2.url) { if (!Cesium.Entity.supportsMaterialsforEntitiesOnTerrain(this._viewer.scene)) { window.alert("Terrain Entity materials are not supported on this platform"); } this.material = new Cesium.ImageMaterialProperty({ image: options2.url, repeat: Cesium.Cartesian2(1, 1), transparent: true, color: Cesium.Color.WHITE.withAlpha(options2.alpha) }); } else { this.material = Cesium.Color.RED.withAlpha(options2.alpha); } window[options2.id] = this._viewer.entities.add({ id: options2.id, polygon: { hierarchy: positions, material: this.material, classificationType: this.classificationType } }); if (callSuccess) callSuccess(options2.id); }, addEntitiesGltf: function(options2, callSuccess) { let viewer2 = this._viewer; if (!Cesium.defined(options2.points)) { resolve("options.points is required."); throw new Cesium.DeveloperError("options.points is required."); } if (!Cesium.defined(options2.url)) { resolve("options.url is required."); throw new Cesium.DeveloperError("options.url is required."); } options2.id = options2.id || this._guid(); options2.heading = Cesium.defaultValue(options2.heading, 0); options2.pitch = Cesium.defaultValue(options2.pitch, 0); options2.roll = Cesium.defaultValue(options2.roll, 0); options2.alpha = Cesium.defaultValue(options2.alpha, 1); let position2 = void 0; if (options2.points instanceof Cesium.Cartesian3) { position2 = options2.points; } else { position2 = Cesium.Cartesian3.fromDegrees(options2.points[0], options2.points[1], options2.points[2] || 0); } var heading = Cesium.Math.toRadians(options2.heading); var pitch = options2.pitch; var roll = options2.roll; var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll); var modelGltf = viewer2.entities.add({ id: options2.id, position: position2, orientation: Cesium.Transforms.headingPitchRollQuaternion(position2, hpr), model: { uri: options2.url, incrementallyLoadTextures: true, colorBlendMode: Cesium.ColorBlendMode["HIGHLIGHT"], colorBlendAmount: 0.1, color: Cesium.Color.WHITE.withAlpha(options2.alpha), imageBasedLightingFactor: new Cesium.Cartesian2(12, 13), runAnimations: true, show: true, debugWireframe: false, debugShowBoundingVolume: false } }); if (options2.minimumPixelSize) { modelGltf.model.minimumPixelSize = options2.minimumPixelSize; } if (options2.maximumScale) { modelGltf.model.maximumScale = options2.maximumScale; } if (options2.silhouetteColor) { modelGltf.model.silhouetteColor = new Cesium.Color(options2.silhouetteColor[0] / 255, options2.silhouetteColor[1] / 255, options2.silhouetteColor[2] / 255, options2.silhouetteColor[3]); } window[options2.id] = modelGltf; if (callSuccess) callSuccess(options2.id); }, addScenePrimitivesGltf(options2, callSuccess) { let viewer2 = this._viewer; if (!Cesium.defined(options2.points)) { resolve("options.points is required."); throw new Cesium.DeveloperError("options.points is required."); } if (!Cesium.defined(options2.url)) { resolve("options.url is required."); throw new Cesium.DeveloperError("options.url is required."); } options2.id = options2.id || this._guid(); options2.scale = Cesium.defaultValue(options2.scale, 1); let position2 = void 0; if (options2.points instanceof Cesium.Cartesian3) { position2 = options2.points; } else { position2 = Cesium.Cartesian3.fromDegrees(options2.points[0], options2.points[1], options2.points[2] || 0); } const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position2); let model = viewer2.scene.primitives.add( Cesium.Model.fromGltf({ show: true, url: options2.url, modelMatrix, lightColor: new Cesium.Cartesian3(10, 10, 10), scale: options2.scale, debugWireframe: false, debugShowBoundingVolume: false }) ); model.readyPromise.then(function() { var rotationX = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(0))); Cesium.Matrix4.multiply(model.modelMatrix, rotationX, model.modelMatrix); }); window[options2.id] = model; if (callSuccess) callSuccess(options2.id); }, addPolylineByGeoJson(options2, callSuccess) { let _self = this; this._viewer; if (!Cesium.defined(options2.url)) { resolve("options.url is required."); throw new Cesium.DeveloperError("options.url is required."); } options2 = options2 || {}; options2.id = options2.id || this._guid(); let promise = Cesium.GeoJsonDataSource.load(options2.url, { clampToGround: options2.clampToGround }); promise.then((dataSource) => { _self._viewer.dataSources.add(dataSource); dataSource.name = options2.id; let entities2 = dataSource.entities.values; let material = new PolylineDirectionMaterialProperty(options2); for (var i2 = 0; i2 < entities2.length; i2++) { var entity = entities2[i2]; entity.polyline.material = material; entity.polyline.width = options2.width; if (options2.clampToGround) { entity.polyline.clampToGround = true; } } if (callSuccess) callSuccess(options2.id); }); }, addPolylineByJson(options2, callSuccess) { let _self = this; let viewer2 = this._viewer; if (!Cesium.defined(options2.url)) { resolve("options.url is required."); throw new Cesium.DeveloperError("options.url is required."); } options2 = options2 || {}; options2.id = options2.id || this._guid(); fetch(options2.url).then((res) => { return res.json(); }).then((res) => { let dataSource = new Cesium.CustomDataSource(options2.id); viewer2.dataSources.add(dataSource); for (var i2 = 0; i2 < res.features.length; i2++) { if (res.features[i2].geometry) { if (res.features[i2].geometry.type === "MultiLineString") { let coordinatesList = res.features[i2].geometry.coordinates; for (var j = 0; j < coordinatesList.length; j++) { let coordinates = coordinatesList[j]; let positions = coordinates.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); _self._polylineObject.addPolyline(positions, options2).then((entity) => { dataSource.entities.add(entity); }); } } else { let coordinates = res.features[i2].geometry.coordinates; let positions = coordinates.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); _self._polylineObject.addPolyline(positions, options2).then((entity) => { dataSource.entities.add(entity); }); } } } if (callSuccess) callSuccess(options2.id); }); }, addBillboardByGeoJson(options2, callSuccess) { let viewer2 = this._viewer; if (!Cesium.defined(options2.url)) { resolve("options.url is required."); throw new Cesium.DeveloperError("options.url is required."); } options2 = options2 || {}; options2.id = options2.id || this._guid(); let billboard = options2.billboard || {}; billboard.imgUrl = Cesium.defaultValue(billboard.imgUrl, "jt3dSDK/imgs/point/point3.png"); billboard.scale = Cesium.defaultValue(billboard.scale, 1); billboard.pixelOffset = Cesium.defaultValue(billboard.pixelOffset, 0); const dataSource = new Cesium.GeoJsonDataSource(options2.id); dataSource.load(options2.url, { clampToGround: true }).then(function(data) { viewer2.dataSources.add(data); const entities2 = data.entities.values; entities2.forEach((entity) => { entity.billboard = { image: billboard.imgUrl, horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, scale: billboard.scale, pixelOffset: new Cesium.Cartesian2(0, billboard.pixelOffset), disableDepthTestDistance: Number.POSITIVE_INFINITY }; if (billboard.scaleByDistance) { billboard.scaleByDistance.near = Cesium.defaultValue(billboard.scaleByDistance.near, 0); billboard.scaleByDistance.nearValue = Cesium.defaultValue(billboard.scaleByDistance.nearValue, 0); billboard.scaleByDistance.far = Cesium.defaultValue(billboard.scaleByDistance.far, 1); billboard.scaleByDistance.farValue = Cesium.defaultValue(billboard.scaleByDistance.farValue, 0); entity.billboard.scaleByDistance = new Cesium.NearFarScalar(billboard.scaleByDistance.near, billboard.scaleByDistance.nearValue, billboard.scaleByDistance.far, billboard.scaleByDistance.farValue); } if (options2.label) { let label2 = options2.label || {}; label2.text = Cesium.defaultValue(label2.text, ""); label2.textField = Cesium.defaultValue(label2.textField, ""); label2.font = Cesium.defaultValue(label2.font, "24px Helvetica"); if (label2.fillColor instanceof Array) { label2.fillColor = new Cesium.Color(label2.fillColor[0] / 255, label2.fillColor[1] / 255, label2.fillColor[2] / 255, label2.fillColor[3]); } else if (typeof options2.color === "string") { label2.fillColor = new Cesium.Color.fromCssColorString(label2.fillColor); } else { label2.fillColor = new Cesium.Color.fromCssColorString("#ff0000"); } if (label2.outlineColor instanceof Array) { label2.outlineColor = new Cesium.Color(label2.outlineColor[0] / 255, label2.outlineColor[1] / 255, label2.outlineColor[2] / 255, label2.outlineColor[3]); } else if (label2.outlineColor instanceof String) { label2.outlineColor = new Cesium.Color.fromCssColorString(label2.outlineColor); } else { label2.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00"); } label2.outlineWidth = Cesium.defaultValue(label2.outlineWidth, 1); label2.showBackground = Cesium.defaultValue(label2.showBackground, false); if (label2.backgroundColor instanceof Array) { label2.backgroundColor = new Cesium.Color(label2.backgroundColor[0] / 255, label2.backgroundColor[1] / 255, label2.backgroundColor[2] / 255, label2.backgroundColor[3]); } else if (label2.backgroundColor instanceof String) { label2.backgroundColor = new Cesium.Color.fromCssColorString(label2.backgroundColor); } else { label2.backgroundColor = new Cesium.Color.fromCssColorString("#FFFF00"); } label2.pixelOffset = Cesium.defaultValue(label2.pixelOffset, 0); label2.scale = Cesium.defaultValue(label2.scale, 1); label2.near = Cesium.defaultValue(label2.near, 150); label2.nearValue = Cesium.defaultValue(label2.nearValue, 1); label2.far = Cesium.defaultValue(label2.far, 2400); label2.farValue = Cesium.defaultValue(label2.farValue, 0); let labelText = label2.text; if (entity.properties[label2.textField]) { labelText = entity.properties[label2.textField]._value; } if (labelText === "") { labelText = (i + 1).toString(); } entity.label = { text: labelText.toString(), font: label2.font, fillColor: label2.fillColor, outlineColor: label2.outlineColor, outlineWidth: label2.outlineWidth, style: Cesium.LabelStyle.FILL_AND_OUTLINE, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, showBackground: label2.showBackground, backgroundColor: label2.backgroundColor, backgroundPadding: new Cesium.Cartesian2(6, 6), disableDepthTestDistance: Number.POSITIVE_INFINITY, pixelOffset: new Cesium.Cartesian2(0, label2.pixelOffset), scale: label2.scale }; if (label2.scaleByDistance) { label2.scaleByDistance.near = Cesium.defaultValue(label2.scaleByDistance.near, 0); label2.scaleByDistance.nearValue = Cesium.defaultValue(label2.scaleByDistance.nearValue, 0); label2.scaleByDistance.far = Cesium.defaultValue(label2.scaleByDistance.far, 1); label2.scaleByDistance.farValue = Cesium.defaultValue(label2.scaleByDistance.farValue, 0); entity.label.scaleByDistance = new Cesium.NearFarScalar(label2.scaleByDistance.near, label2.scaleByDistance.nearValue, label2.scaleByDistance.far, label2.scaleByDistance.farValue); } } }); if (callSuccess) callSuccess(options2.id); }); }, addBillboardByJson(options2, callSuccess) { let _self = this; let viewer2 = this._viewer; if (!Cesium.defined(options2.url)) { resolve("options.url is required."); throw new Cesium.DeveloperError("options.url is required."); } options2 = options2 || {}; let id = options2.id || this._guid(); let height2 = Cesium.defaultValue(options2.height, 0); viewer2.terrainProvider; fetch(options2.url).then((res) => { return res.json(); }).then((res) => { let dataSource = new Cesium.CustomDataSource(options2.id); viewer2.dataSources.add(dataSource); let promiseList = []; for (var i2 = 0; i2 < res.features.length; i2++) { let geometry2 = res.features[i2].geometry; let properties = res.features[i2].properties; if (geometry2) { if (properties) { options2.properties = properties; if (options2.label) { let label2 = options2.label || {}; if (properties[label2.textField]) { options2.label.text = properties[label2.textField]; } } } if (geometry2.type === "MultiPoint") { let coordinatesList = geometry2.coordinates; for (var j = 0; j < coordinatesList.length; j++) { let coordinates = coordinatesList[j]; let position2 = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], coordinates[2] || height2); if (options2.billboard) { _self._pointObject.addBillboard(position2, options2).then((entity) => { dataSource.entities.add(entity); }); } else { _self._pointObject.addLabel(position2, options2).then((entity) => { dataSource.entities.add(entity); }); } } } else { let coordinates = geometry2.coordinates; let position2 = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], coordinates[2] || height2); if (options2.billboard) { let result = _self._pointObject.addBillboard(position2, options2); promiseList.push(result); } else { let result = _self._pointObject.addLabel(position2, options2); promiseList.push(result); } } } } Promise.all(promiseList).then((itemList) => { itemList.forEach((item, index2) => { dataSource.entities.add(item); }); if (callSuccess) callSuccess(id); }); }); }, addWallByJson(options2, callSuccess) { let _self = this; let viewer2 = this._viewer; if (!Cesium.defined(options2.url)) { resolve("options.url is required."); throw new Cesium.DeveloperError("options.url is required."); } options2 = options2 || {}; options2.id = options2.id || setSessionid(); fetch(options2.url).then((res) => { return res.json(); }).then((res) => { let dataSource = new Cesium.CustomDataSource(options2.id); viewer2.dataSources.add(dataSource); for (var i2 = 0; i2 < res.features.length; i2++) { if (res.features[i2].geometry) { if (res.features[i2].geometry.type === "MultiLineString") { let coordinatesList = res.features[i2].geometry.coordinates; for (var j = 0; j < coordinatesList.length; j++) { let coordinates = coordinatesList[j]; let positions = coordinates.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); _self._wallObject.addWall(positions, options2).then((entity) => { dataSource.entities.add(entity); }); } } else { let coordinates = res.features[i2].geometry.coordinates; let positions = coordinates.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); _self._wallObject.addWall(positions, options2).then((entity) => { dataSource.entities.add(entity); }); } } } if (callSuccess) callSuccess(options2.id); }); } }); Object.assign(LoadMapData.prototype, { set3DTileStyle(options2) { if (!Cesium.defined(options2) || !Cesium.defined(options2.serviceId)) { throw new Cesium.DeveloperError("options.serviceId is required."); } if (Cesium.defined(options2.alpha)) { Cesium.Check.typeOf.number("alpha", options2.alpha); } options2.alpha = Cesium.defaultValue(options2.alpha, 1); let tileset = window[options2.serviceId]; tileset.style = new Cesium.Cesium3DTileStyle({ color: "color('rgba(255,255,255," + options2.alpha + ")')" }); }, set3DTileBMStyle: function(options2) { if (!Cesium.defined(options2) || !Cesium.defined(options2.serviceId)) { throw new Cesium.DeveloperError("options.serviceId is required."); } options2.color = options2.color ? "vec4(" + options2.color[0] + "/255, " + options2.color[1] + "/255, " + options2.color[2] + "/255, " + options2.color[3] + ")" : "vec4(0.0, 0.58, 0.86, 1.0)"; let tileset = window[options2.serviceId]; tileset.readyPromise.then((tileset2) => { tileset2.boundingSphere.radius; if (tileset2.boundingSphere.radius > 1e4) { tileset2.boundingSphere.radius / 10; } tileset2.style = new Cesium.Cesium3DTileStyle({ color: options2.color }); tileset2.tileVisible.addEventListener((tile) => { let content = tile.content; let featuresLength = content.featuresLength; for (let i2 = 0; i2 < featuresLength; i2 += 2) { const feature2 = content.getFeature(i2); const model = feature2.content._model; if (model && model._sourcePrograms && model._rendererResources) { Object.keys(model._sourcePrograms).forEach((key) => { const program = model._sourcePrograms[key]; const fragmentShader = model._rendererResources.sourceShaders[program.fragmentShader]; let vPosition = ""; if (fragmentShader.indexOf(" v_positionEC;") !== -1) { vPosition = "v_positionEC"; } else if (fragmentShader.indexOf(" v_pos;") !== -1) { vPosition = "v_pos"; } const color2 = `vec4(${feature2.color.toString()})`; model._rendererResources.sourceShaders[program.fragmentShader] = ` varying vec3 ${vPosition}; void main(void){ vec4 v_helsing_position = czm_inverseModelView * vec4(${vPosition},1); float _baseHeight = -30.0; float vtxf_height = v_helsing_position.z - _baseHeight; float stc_pl = fract(czm_frameNumber / 120.0) * 3.14159265 * 2.0; float stc_sd = vtxf_height / 30.0 + sin(stc_pl) * 0.1; gl_FragColor = ${color2}; gl_FragColor *= vec4(stc_sd, stc_sd, stc_sd, 1.0); /* \u626B\u63CF\u7EBF */ float glowRange = 80.0; float stc_a13 = fract(czm_frameNumber / 460.0); float stc_h = clamp(v_helsing_position.z / glowRange, 0.0, 1.0); stc_a13 = abs(stc_a13 - 0.5) * 1.0; float stc_diff = step(0.003, abs(stc_h - stc_a13)); gl_FragColor.rgb += gl_FragColor.rgb * (1.0 - stc_diff); } `; }); model._shouldRegenerateShaders = true; } } }); }); this._viewer.scene.requestRender(); }, set3DTilePosition: function(options2) { if (!Cesium.defined(options2) || !Cesium.defined(options2.serviceId)) { throw new Cesium.DeveloperError("options.serviceId is required."); } options2.height = Cesium.defaultValue(options2.height, 0); let boundingSphere = window[options2.serviceId].boundingSphere; let cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center); let left = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, options2.height); let right = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0); let translation = Cesium.Cartesian3.subtract(left, right, new Cesium.Cartesian3()); window[options2.serviceId].modelMatrix = Cesium.Matrix4.fromTranslation(translation); this._viewer.scene.requestRender(); }, setLayersStyle(options2) { if (!Cesium.defined(options2) || !Cesium.defined(options2.serviceId)) { throw new Cesium.DeveloperError("options.serviceId is required."); } let layer = window[options2.serviceId]; if (Cesium.defined(options2.alpha)) { Cesium.Check.typeOf.number("alpha", options2.alpha); } options2.alpha = Cesium.defaultValue(options2.alpha, 1); layer.alpha = options2.alpha; if (Cesium.defined(options2.brightness)) { Cesium.Check.typeOf.number("brightness", options2.brightness); } options2.brightness = Cesium.defaultValue(options2.brightness, 1); layer.brightness = options2.brightness; if (Cesium.defined(options2.contrast)) { Cesium.Check.typeOf.number("contrast", options2.contrast); } options2.contrast = Cesium.defaultValue(options2.contrast, 1); layer.contrast = options2.contrast; if (Cesium.defined(options2.gamma)) { Cesium.Check.typeOf.number("gamma", options2.gamma); } options2.gamma = Cesium.defaultValue(options2.gamma, 1); layer.gamma = options2.gamma; if (Cesium.defined(options2.hue)) { Cesium.Check.typeOf.number("hue", options2.hue); } options2.hue = Cesium.defaultValue(options2.hue, 0); layer.hue = options2.hue; if (Cesium.defined(options2.saturation)) { Cesium.Check.typeOf.number("saturation", options2.saturation); } options2.saturation = Cesium.defaultValue(options2.saturation, 1); layer.saturation = options2.saturation; }, setPolygonImageMaterial(options2) { if (Cesium.defined(options2.alpha)) { Cesium.Check.typeOf.number("alpha", options2.alpha); } options2.alpha = Cesium.defaultValue(options2.alpha, 1); let entity = window[options2.serviceId]; entity.polygon.material.color._value.alpha = options2.alpha; }, setModelStyle(options2) { if (Cesium.defined(options2.alpha)) { Cesium.Check.typeOf.number("alpha", options2.alpha); } options2.alpha = Cesium.defaultValue(options2.alpha, 1); let entity = window[options2.serviceId]; if (entity.model) { entity.model.color._value.alpha = options2.alpha; } else { entity.color._value.alpha = options2.alpha; } }, setTerrainExaggeration(options2) { if (Cesium.defined(options2.terrainExaggeration)) { Cesium.Check.typeOf.number("terrainExaggeration", options2.terrainExaggeration); } options2.terrainExaggeration = Cesium.defaultValue(options2.terrainExaggeration, 1); this._viewer.scene.globe.terrainExaggeration = options2.terrainExaggeration; } }); Object.assign(LoadMapData.prototype, { removeImageryProvider(options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(options2) || !Cesium.defined(options2.serviceId)) { throw new Cesium.DeveloperError("options.serviceId is required."); } this._removeImageryProvider(options2.serviceId); resolve2(true); }); }, removeTerrain() { return new Promise((resolve2, reject2) => { this._setEllipsoidTerrain(); resolve2(true); }); }, removeScenePrimitives(options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(options2) || !Cesium.defined(options2.serviceId)) { throw new Cesium.DeveloperError("options.serviceId is required."); } this._removeScenePrimitives(options2.serviceId); resolve2(true); }); }, removeEntity(options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(options2) || !Cesium.defined(options2.serviceId)) { throw new Cesium.DeveloperError("options.serviceId is required."); } this._viewer.entities.remove(window[options2.serviceId]); window[options2.serviceId] = null; resolve2(true); }); }, removeDataSources(options2) { let viewer2 = this._viewer; return new Promise((resolve2, reject2) => { if (!Cesium.defined(options2) || !Cesium.defined(options2.serviceId)) { throw new Cesium.DeveloperError("options.serviceId is required."); } let list = viewer2.dataSources.getByName(options2.serviceId); list.forEach((res, index2) => { viewer2.dataSources.remove(res); if (index2 === list.length - 1) { resolve2(true); } }); }); } }); Date.prototype.Format = function(fmt) { var o = { "M+": this.getMonth() + 1, "d+": this.getDate(), "h+": this.getHours(), "m+": this.getMinutes(), "s+": this.getSeconds(), "q+": Math.floor((this.getMonth() + 3) / 3), "S": this.getMilliseconds() }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); return fmt; }; class CrImageServerLayer { constructor({ viewer: viewer2, url, opacity = 0.75, show = true } = {}) { this._viewer = viewer2; this._url = url; this._opacity = opacity; this._renderName = this._guid(); let dataSource = new Cesium.CustomDataSource(this._renderName); this._viewer.dataSources.add(dataSource); this._entities = dataSource.entities; this._renderEntities = /* @__PURE__ */ new Map(); this._isUpdateTile = show; this._isDebug = false; this._init(); } _init() { let _self = this; this._provider = new Cesium.ArcGisMapServerImageryProvider({ url: _self._url }); this._provider.readyPromise.then(function(result) { _self._rectangle = _self._provider.rectangle; if (_self._isDebug) _self._printDebug(); _self._viewer.scene.postRender.addEventListener(() => { if (_self._isUpdateTile) { _self._isUpdateTile = false; _self._renderTiles(); } }); }); } _guid() { function S4() { return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1); } return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); } _printDebug() { this._provider.tilingScheme; let tiling84 = new Cesium.GeographicTilingScheme(); this._drawDebugRectangle(this._rectangle, Cesium.Color.GREEN); tiling84.tileXYToRectangle(1696, 312, 10); } _drawDebugRectangle(rectangle, color2) { let positions = this._calculateRectangleOutlineCoordinates(rectangle); let rectEntity = new Cesium.Entity({ name: this._renderName, polyline: { positions, material: color2, width: 10, clampToGround: true } }); this._entities.add(rectEntity); } _console(...rest) { if (this._isDebug) console.log("===" + new Date().Format("yyyy-MM-dd HH:mm:ss") + ">>>", rest); } _renderTiles() { let _self = this; let tilesToRender = this._viewer.scene.globe._surface._tilesToRender; if (tilesToRender === void 0 || tilesToRender.length === 0) { this._isUpdateTile = true; return; } else { new Promise((resolve2, reject2) => { tilesToRender.sort(function(obj1, obj2) { let level1 = parseInt(obj1.level); let level2 = parseInt(obj2.level); return level1 - level2; }); resolve2(tilesToRender); }).then((tiles) => { _self._asyncProjectionTiles(tiles); }); } } _createKey(x, y, level) { let key = `${this._renderName}_${x}_${y}_${level}`; return key; } _asyncProjectionTiles(tiles) { let renderTiles = []; for (let tile of tiles) { let proTiles = this._projectionTile(tile); for (let proTile of proTiles) { let key = this._createKey(proTile.x, proTile.y, proTile.level); let subTile = renderTiles.find((obj) => { return obj.x === proTile.x && obj.y === proTile.y; }); if (subTile === void 0) { let isExists = false; for (let eTile of renderTiles) { if (Cesium.Rectangle.intersection(eTile.rectangle, proTile.rectangle)) { eTile.childTiles.push(key); isExists = true; break; } } if (!isExists) { renderTiles.push({ key, x: proTile.x, y: proTile.y, level: proTile.level, rectangle: proTile.rectangle, childTiles: [] }); } } } } let i2 = renderTiles.length; let appendTiles = []; while (i2--) { let findTile = renderTiles[i2]; if (findTile.childTiles.length >= 1) { let tiles2 = this._createFourTiles(findTile); for (let tile of tiles2) { appendTiles.push(tile); } renderTiles.splice(i2, 1); } } for (let appendTile of appendTiles) { renderTiles.push(appendTile); } renderTiles.sort(function(obj1, obj2) { let level1 = parseInt(obj1.level); let level2 = parseInt(obj2.level); return level1 - level2; }); this._renderTilesToViewer(renderTiles); } _createTileByRectangleAndLevel(rectangle, level) { let center2 = Cesium.Rectangle.center(rectangle); let nLevel = parseInt(level) + 1; let query = this._provider.tilingScheme.positionToTileXY(center2, nLevel); if (query === void 0) return void 0; return { key: this._createKey(query.x, query.y, nLevel), x: query.x, y: query.y, level: nLevel, rectangle, childTiles: [] }; } _createFourTiles(tile) { let rects = []; let results = []; let rectangle = tile.rectangle; rects.push(Cesium.Rectangle.subsection(rectangle, 0, 0, 0.5, 0.5)); rects.push(Cesium.Rectangle.subsection(rectangle, 0.5, 0, 1, 0.5)); rects.push(Cesium.Rectangle.subsection(rectangle, 0, 0.5, 0.5, 1)); rects.push(Cesium.Rectangle.subsection(rectangle, 0.5, 0.5, 1, 1)); for (let rect of rects) { if (Cesium.Rectangle.intersection(rect, this._rectangle)) { let newTile = this._createTileByRectangleAndLevel(rect, tile.level); if (newTile !== void 0) results.push(newTile); } } return results; } _renderTilesToViewer(tiles) { let _self = this; let deleteKeys = []; for (let [key, tile] of this._renderEntities) { let findTile = tiles.find((obj) => { return obj.key === key; }); if (findTile === void 0) { deleteKeys.push(key); } } for (let key of deleteKeys) { this._renderEntities.delete(key); this._entities.removeById(key); } for (let tile of tiles) { if (!this._renderEntities.has(tile.key)) { let entity = this._renderSimpleTileToViewer(tile); this._renderEntities.set(tile.key, entity); let workBlob = new Blob([`(${downloadWorker.toString()})()`]); let worker = new Worker(URL.createObjectURL(workBlob)); worker.postMessage({ key: tile.key, url: this._url, x: tile.x, y: tile.y, level: tile.level }); worker.onmessage = function(event2) { _self._console(`render x:${event2.data.x} y:${event2.data.y} level:${event2.data.level}`); let renderEntity = _self._entities.getById(event2.data.key); if (renderEntity !== void 0) { event2.data.key; const canvas = _self._createCanvas(event2.data, event2.data.image, _self._isDebug); renderEntity.rectangle.material = canvas; } worker.terminate(); }; } } this._isUpdateTile = true; } _renderSimpleTileToViewer(tile) { const canvas = this._createCanvas(tile, void 0, this._isDebug); let bjPositions = this._calculateRectangleOutlineCoordinates(tile.rectangle); let tileEntity = new Cesium.Entity({ name: this._renderName, id: tile.key, rectangle: { coordinates: tile.rectangle, material: canvas }, polyline: { positions: bjPositions, material: Cesium.Color.YELLOW.withAlpha(this._isDebug ? 1 : 0), width: 1, clampToGround: true } }); return this._entities.add(tileEntity); } _createCanvas(tile, image, islabel) { let provider = this._provider; const canvas = document.createElement("canvas"); canvas.width = provider.tileWidth; canvas.height = provider.tileHeight; const context = canvas.getContext("2d"); if (image !== void 0) { context.globalAlpha = this._opacity; context.drawImage(event.data.image, 0, 0, canvas.width, canvas.height); } if (islabel !== void 0 && islabel === true) { context.globalAlpha = 1; context.font = "20px Arial"; context.textAlign = "center"; context.fillStyle = "rgba(255,255,0)"; context.strokeStyle = "rgba(255,255,255,1)"; context.lineWidth = 2; context.strokeText(`L: ${tile.level}`, 126, 86); context.fillText(`L: ${tile.level}`, 126, 86); context.strokeText(`X: ${tile.x}`, 126, 136); context.fillText(`X: ${tile.x}`, 126, 136); context.strokeText(`Y: ${tile.y}`, 126, 186); context.fillText(`Y: ${tile.y}`, 126, 186); } return canvas; } _projectionTile(tile) { let rectangle = tile._rectangle; let imageryLevel = parseInt(tile.level); let mercatorTilingScheme = this._provider.tilingScheme; let res = []; let interRectangle = Cesium.Rectangle.intersection(rectangle, this._rectangle); if (interRectangle === void 0) return res; let northwestTileCoordinates = mercatorTilingScheme.positionToTileXY( Cesium.Rectangle.northwest(rectangle), imageryLevel ); let southeastTileCoordinates = mercatorTilingScheme.positionToTileXY( Cesium.Rectangle.southeast(rectangle), imageryLevel ); if (northwestTileCoordinates !== void 0 && southeastTileCoordinates !== void 0) { for (let i2 = northwestTileCoordinates.x; i2 <= southeastTileCoordinates.x; i2++) { for (let j = northwestTileCoordinates.y; j <= southeastTileCoordinates.y; j++) { let _webRectangle = mercatorTilingScheme.tileXYToRectangle(i2, j, imageryLevel); if (Cesium.Rectangle.intersection(_webRectangle, this._rectangle)) { res.push({ x: i2, y: j, level: imageryLevel, rectangle: _webRectangle }); } } } } else if (northwestTileCoordinates !== void 0) { let _webRectangle = mercatorTilingScheme.tileXYToRectangle( northwestTileCoordinates.x, northwestTileCoordinates.y, imageryLevel ); if (Cesium.Rectangle.intersection(_webRectangle, this._rectangle)) { res.push({ x: northwestTileCoordinates.x, y: northwestTileCoordinates.y, level: imageryLevel, rectangle: _webRectangle }); } } else if (southeastTileCoordinates !== void 0) { let _webRectangle = mercatorTilingScheme.tileXYToRectangle( southeastTileCoordinates.x, southeastTileCoordinates.y, imageryLevel ); if (Cesium.Rectangle.intersection(_webRectangle, this._rectangle)) { res.push({ x: southeastTileCoordinates.x, y: southeastTileCoordinates.y, level: imageryLevel, rectangle: _webRectangle }); } } return res; } _calculateRectangleOutlineCoordinates(rectangle) { let south_east = Cesium.Rectangle.southeast(rectangle); let se2 = Cesium.Cartographic.toCartesian(south_east); let south_west = Cesium.Rectangle.southwest(rectangle); let sw = Cesium.Cartographic.toCartesian(south_west); let north_east = Cesium.Rectangle.northeast(rectangle); let ne2 = Cesium.Cartographic.toCartesian(north_east); let north_west = Cesium.Rectangle.northwest(rectangle); let nw = Cesium.Cartographic.toCartesian(north_west); return [sw, se2, ne2, nw, sw]; } _removeEntityByName(entityName) { var entities2 = this._entities; if (!entities2 || !entities2.values) return; var delEntitys = []; for (var i2 = 0; i2 < entities2.values.length; i2++) { if (entities2.values[i2].name == entityName) { delEntitys.push(entities2.values[i2]); } } for (var i2 = 0; i2 < delEntitys.length; i2++) { entities2.remove(delEntitys[i2]); } } } Object.assign(CrImageServerLayer.prototype, { hide: function() { this._console("\u9690\u85CF"); this._isUpdateTile = false; this._removeEntityByName(this._renderName); this._renderEntities.clear(); }, show: function() { this._console("\u663E\u793A"); this._isUpdateTile = true; }, setOpacity: function(opacity) { if (opacity === void 0 || typeof opacity !== "number") return; if (opacity >= 1) this._opacity = 1; if (opacity <= 0) this._opacity = 0; this._opacity = parseFloat(opacity); } }); function downloadWorker() { onmessage = function(event2) { let data = event2.data; let url = data.url + "/tile/" + data.level + "/" + data.y + "/" + data.x; let xhr = new XMLHttpRequest(); xhr.open("get", url, true); xhr.responseType = "blob"; xhr.onload = function() { if (this.status === 200) { var blob = this.response; var bmpPromise = createImageBitmap(blob, { imageOrientation: "none", premultiplyAlpha: "none", colorSpaceConversion: "default" }); bmpPromise.then(function(image) { let outObj = { key: data.key, x: data.x, y: data.y, level: data.level, image }; postMessage(outObj); }); } else { console.log("===>>>", url + " Not found"); } }; xhr.send(); }; } class LocateUtil { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._locationEntity = null; } } Object.assign(LocateUtil.prototype, { flyToPoint: function(options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(options2) || !Cesium.defined(options2.longitude) || !Cesium.defined(options2.latitude)) { throw new Cesium.DeveloperError("options.longitude and options.latitude are required."); } options2.height = Cesium.defaultValue(options2.height, 0); options2.heading = Cesium.defaultValue(options2.heading, 0); options2.pitch = Cesium.defaultValue(options2.pitch, -90); options2.range = Cesium.defaultValue(options2.range, 0); options2.duration = Cesium.defaultValue(options2.duration, 3); var boundingSphere = new Cesium.BoundingSphere(Cesium.Cartesian3.fromDegrees(options2.longitude, options2.latitude, options2.height), 0); this._viewer.camera.flyToBoundingSphere(boundingSphere, { duration: options2.duration, complete: function() { resolve2(true); }, offset: { heading: Cesium.Math.toRadians(options2.heading), pitch: Cesium.Math.toRadians(options2.pitch), range: options2.range } }); }); }, flyToEntityByPoints: function(points2, type2, options2) { return new Promise((resolve2, reject2) => { let _self = this; options2 = options2 || {}; if (points2 === void 0 || points2.length === void 0) { reject2("\u8F93\u5165\u7684\u5750\u6807\u96C6\u5408\u5F02\u5E38\uFF01"); return; } let pointsArray = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); switch (type2) { case "point": _self._locationEntity = _self._viewer.entities.add({ position: pointsArray[0], point: { pixelSize: 1 } }); break; case "polyline": if (pointsArray.length < 2) { reject2("\u7EBF\u5BF9\u8C61\u5B9A\u4F4D\uFF0C\u70B9\u6570\u81F3\u5C112\u4E2A"); } else { _self._locationEntity = _self._viewer.entities.add({ polyline: { positions: pointsArray, clampToGround: true, material: new Cesium.Color(255, 0, 0, 0.5), width: 1 } }); } break; case "polygon": if (pointsArray.length < 3) { reject2("\u9762\u5BF9\u8C61\u5B9A\u4F4D\uFF0C\u70B9\u6570\u81F3\u5C113\u4E2A"); } else { _self._locationEntity = _self._viewer.entities.add({ polygon: { hierarchy: { positions: pointsArray }, material: new Cesium.Color(255, 0, 0, 0.5), outline: true } }); } break; default: reject2("\u5750\u6807\u5F02\u5E38\uFF01"); break; } options2.duration = Cesium.defaultValue(options2.duration, 3); options2.heading = Cesium.defaultValue(options2.heading, 0); options2.pitch = Cesium.defaultValue(options2.pitch, -90); options2.range = Cesium.defaultValue(options2.range, 0); let flyPromise = _self._viewer.flyTo(_self._locationEntity, { duration: options2.duration, offset: { heading: Cesium.Math.toRadians(options2.heading), pitch: Cesium.Math.toRadians(options2.pitch), range: options2.range } }); flyPromise.then(function(flag) { resolve2(flag); }); }); }, flyToEntity: function(entity, options2) { return new Promise((resolve2, reject2) => { let _self = this; options2 = options2 || {}; options2.duration = Cesium.defaultValue(options2.duration, 3); options2.heading = Cesium.defaultValue(options2.heading, 0); options2.pitch = Cesium.defaultValue(options2.pitch, -90); options2.range = Cesium.defaultValue(options2.range, 0); let flyPromise = _self._viewer.flyTo(entity, { duration: options2.duration, offset: { heading: Cesium.Math.toRadians(options2.heading), pitch: Cesium.Math.toRadians(options2.pitch), range: options2.range } }); flyPromise.then(function(flag) { resolve2(flag); }); }); }, zoomToTilesets(tileset, options2) { return new Promise((resolve2, reject2) => { let _self = this; if (!Cesium.defined(tileset)) { throw new Cesium.DeveloperError("tileset is required."); } options2 = options2 || {}; options2.heading = Cesium.defaultValue(options2.heading, 120); options2.pitch = Cesium.defaultValue(options2.pitch, -10); options2.range = Cesium.defaultValue(options2.range, 450); options2.duration = Cesium.defaultValue(options2.duration, 3); let boundingSphere = tileset.boundingSphere; _self._viewer.camera.flyToBoundingSphere(boundingSphere, { duration: options2.duration, complete: function() { resolve2(true); }, offset: { heading: Cesium.Math.toRadians(options2.heading), pitch: Cesium.Math.toRadians(options2.pitch), range: options2.range } }); }); }, flyToTileset(tileset, options2) { return new Promise((resolve2, reject2) => { let _self = this; if (!Cesium.defined(tileset)) { throw new Cesium.DeveloperError("tileset is required."); } options2 = options2 || {}; options2.heading = Cesium.defaultValue(options2.heading, 120); options2.pitch = Cesium.defaultValue(options2.pitch, -10); options2.range = Cesium.defaultValue(options2.range, 450); options2.duration = Cesium.defaultValue(options2.duration, 3); let flyPromise = _self._viewer.flyTo(tileset, { duration: options2.duration, offset: { heading: Cesium.Math.toRadians(options2.heading), pitch: Cesium.Math.toRadians(options2.pitch), range: options2.range } }); flyPromise.then(function(flag) { resolve2(flag); }); }); } }); const CreateRemindertip = function(arr, position2, show) { let tooltip2 = document.getElementById("toolTip"); let style, _x, _y, _color; if (arr && typeof arr === "object") { style = arr; } if (style && style.origin) { style.origin === "center" && (_x = 15, _y = -12); style.origin === "top" && (_x = 15, _y = -44); style.origin === "bottom" && (_x = 15, _y = 20); } else { _x = 15, _y = 20; } if (style && style.color) { style.color === "white" && (_color = "background: rgba(255, 255, 255, 0.8);color: black;"); style.color === "black" && (_color = "background: rgba(0, 0, 0, 0.65);color: white;"); style.color === "yellow" && (_color = "color: black;background-color: #ffcc33;border: 1px solid white;"); } else { _color = "background: rgba(0, 0, 0, 0.65);color: white;"; } if (!tooltip2) { const viewerDom = document.getElementsByClassName("cesium-viewer")[0]; let elementbottom = document.createElement("div"); viewerDom.append(elementbottom); let html = ''; viewerDom.insertAdjacentHTML("beforeend", html); tooltip2 = document.getElementById("toolTip"); } if (show) { tooltip2.innerHTML = arr; tooltip2.style.left = position2.x + _x + "px"; tooltip2.style.top = position2.y + _y + "px"; tooltip2.style.display = "block"; } else { tooltip2.style.display = "none"; } return { tooltip: tooltip2, style, showAt: function(position3, text) { this.tooltip.innerHTML = text; if (this.style && this.style.origin) { this.style.origin === "center" && (_x = 15, _y = -this.tooltip.offsetHeight / 2); this.style.origin === "top" && (_x = 15, _y = -this.tooltip.offsetHeight - 20); this.style.origin === "bottom" && (_x = 15, _y = 20); } else { _x = 15, _y = -this.tooltip.offsetHeight / 2; } this.tooltip.style.left = position3.x + _x + "px"; this.tooltip.style.top = position3.y + _y + "px"; this.tooltip.style.display = "block"; }, show: function(show2) { if (show2) { this.tooltip.style.display = "block"; } else { this.tooltip.style.display = "none"; } } }; }; class SightLine { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._resultObject = { viewPoint: void 0, targetPoints: [], targetPoint: void 0, objectExclude: [], entities: [] }; } _distance(point1, point2) { let point1cartographic = Cesium.Cartographic.fromCartesian(point1); let point2cartographic = Cesium.Cartographic.fromCartesian(point2); let geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); let s = geodesic.surfaceDistance; s = Math.sqrt( Math.pow(s, 2) + Math.pow(point2cartographic.height - point1cartographic.height, 2) ); return s; } _checkAppOrWeb() { if (window.navigator.userAgent.match( /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i )) { return SightLine.RuntimeEnvironment.App; } else { return SightLine.RuntimeEnvironment.Web; } } _isRuntimeApp() { if (this._checkAppOrWeb() === SightLine.RuntimeEnvironment.App) { return true; } return false; } _isRuntimeWeb() { if (this._checkAppOrWeb() === SightLine.RuntimeEnvironment.Web) { return true; } return false; } _createOperationMainDom() { let buttonDiv = document.createElement("div"); buttonDiv.id = "drawButtonDiv"; buttonDiv.style.width = "80px"; buttonDiv.style.backgroundColor = "rgba(5, 45, 155, 0.7)"; buttonDiv.style.borderRadius = "5px"; buttonDiv.style.display = "flex"; buttonDiv.style.flexDirection = "column"; buttonDiv.style.padding = "8px"; buttonDiv.style.justifyContent = "center"; buttonDiv.style.position = "absolute"; buttonDiv.style.bottom = "150px"; buttonDiv.style.right = "10px"; let btnCompletion = document.createElement("button"); btnCompletion.id = "btnDrawComplete"; btnCompletion.style.height = "30px"; btnCompletion.style.backgroundColor = "rgba(88, 185, 45, 1.0)"; btnCompletion.style.color = "rgb(255, 255, 255)"; btnCompletion.style.border = "0px solid red"; btnCompletion.style.borderRadius = "5px"; btnCompletion.innerHTML = "\u5B8C\u6210"; btnCompletion.style.fontSize = "13px"; btnCompletion.style.cursor = "pointer"; buttonDiv.appendChild(btnCompletion); document.body.appendChild(buttonDiv); } _showTooltipMessage(message) { let msgMainDom = document.getElementById("messageMainDom"); if (msgMainDom !== null && msgMainDom !== void 0) { document.body.removeChild(msgMainDom); } msgMainDom = document.createElement("div"); msgMainDom.style.width = "30%"; msgMainDom.style.backgroundColor = "rgba(237, 248, 230, 1.0)"; msgMainDom.style.height = "45px"; msgMainDom.style.border = "solid 2px rgb(219, 241, 208)"; msgMainDom.style.borderRadius = "8px"; msgMainDom.style.display = "flex"; msgMainDom.style.alignItems = "center"; msgMainDom.style.paddingLeft = "10px"; msgMainDom.style.color = "rgb(91, 188, 48)"; msgMainDom.style.fontSize = "14px"; msgMainDom.style.fontWeight = "600"; msgMainDom.style.position = "absolute"; msgMainDom.style.left = "35%"; msgMainDom.style.transition = "transform 1s"; msgMainDom.style.transform = "translateY(-90px)"; msgMainDom.style.top = "0px"; msgMainDom.style.zIndex = 1e3; document.body.appendChild(msgMainDom); let strHtml = ""; strHtml += "
"; strHtml += "
" + message + "
"; msgMainDom.innerHTML = strHtml; msgMainDom.addEventListener("transitionend", function() { setTimeout(function() { document.body.removeChild(msgMainDom); }, 1e3); }, false); setTimeout(function() { msgMainDom.style.transform = "translateY(50px)"; }, 100); } } Object.assign(SightLine.prototype, { startSightLine() { let _self = this; _self.clearAll(); let toolTip = "\u5DE6\u952E\u5355\u51FB\u521B\u5EFA\u89C6\u89D2\u8D77\u70B9"; if (this._isRuntimeApp()) { toolTip = "\u5355\u51FB\u521B\u5EFA\u89C6\u89D2\u8D77\u70B9"; _self._showTooltipMessage(toolTip); } _self.handler = new Cesium.ScreenSpaceEventHandler(_self._viewer.canvas); _self.handler.setInputAction((event2) => { let loc2 = CoordTransform._transfromFromScreenPoint(_self._viewer, event2.position); toolTip = "\u5DE6\u952E\u521B\u5EFA\u89C6\u89D2\u7EC8\u70B9\uFF0C\u53F3\u952E\u7ED3\u675F\u901A\u89C6\u5206\u6790"; if (this._isRuntimeApp()) { toolTip = "\u518D\u6B21\u5355\u51FB\u521B\u5EFA\u89C6\u89D2\u7EC8\u70B9"; _self._showTooltipMessage(toolTip); } if (!Cesium.defined(loc2.sLocation)) return; let cartesian = loc2.sLocation; if (!_self._resultObject.viewPoint) { _self._resultObject.viewPoint = cartesian; let pointEntity = _self._viewer.entities.add({ position: cartesian, point: { color: Cesium.Color.YELLOW, pixelSize: 5 }, label: { text: "\u89C2\u5BDF\u4F4D\u7F6E", font: "12px sans-serif", fillColor: new Cesium.Color(255 / 255, 255 / 255, 255 / 255, 1), outlineColor: new Cesium.Color(0, 154 / 255, 94 / 255, 1), style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth: 1, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, pixelOffset: new Cesium.Cartesian2(0, -28), showBackground: true, backgroundColor: new Cesium.Color(0, 0, 0, 0.6), disableDepthTestDistance: Number.POSITIVE_INFINITY } }); _self._resultObject.objectExclude.push(pointEntity); _self._resultObject.entities.push(pointEntity); } else { _self._resultObject.targetPoint = cartesian; let pointEntity = _self._viewer.entities.add({ position: cartesian, point: { color: Cesium.Color.YELLOW, pixelSize: 5 }, label: { text: "\u76EE\u6807\u4F4D\u7F6E", font: "12px sans-serif", fillColor: new Cesium.Color(255 / 255, 255 / 255, 255 / 255, 1), outlineColor: new Cesium.Color(0, 154 / 255, 94 / 255, 1), style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth: 1, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, pixelOffset: new Cesium.Cartesian2(0, -28), showBackground: true, backgroundColor: new Cesium.Color(0, 0, 0, 0.6), disableDepthTestDistance: Number.POSITIVE_INFINITY } }); _self._resultObject.objectExclude.push(pointEntity); _self._resultObject.entities.push(pointEntity); let direction = Cesium.Cartesian3.normalize( Cesium.Cartesian3.subtract( _self._resultObject.targetPoint, _self._resultObject.viewPoint, new Cesium.Cartesian3() ), new Cesium.Cartesian3() ); let ray = new Cesium.Ray(_self._resultObject.viewPoint, direction); let result = _self._viewer.scene.pickFromRay(ray, _self._resultObject.objectExclude); if (result) { let dis0 = _self._distance( _self._resultObject.viewPoint, _self._resultObject.targetPoint ); let dis1 = _self._distance( _self._resultObject.viewPoint, result.position ); let dis2 = _self._distance( result.position, _self._resultObject.targetPoint ); if (dis0 > dis1) { let _poly0 = _self._viewer.entities.add({ polyline: { positions: [_self._resultObject.viewPoint, result.position], material: Cesium.Color.GREEN, width: 3 } }); _self._resultObject.entities.push(_poly0); let _poly1 = _self._viewer.entities.add({ polyline: { positions: [result.position, _self._resultObject.targetPoint], material: Cesium.Color.RED, width: 3 } }); _self._resultObject.entities.push(_poly1); _self._resultObject.targetPoints.push({ targetPoint: cartesian, visual: false, distance: [dis0, dis1, dis2] }); } else { let _poly2 = _self._viewer.entities.add({ polyline: { positions: [ _self._resultObject.viewPoint, _self._resultObject.targetPoint ], material: Cesium.Color.GREEN, width: 3 } }); _self._resultObject.entities.push(_poly2); _self._resultObject.targetPoints.push({ targetPoint: cartesian, visual: true, distance: [dis0, dis1, dis2] }); } } } if (_self._resultObject.objectExclude.length === 2) { if (this._isRuntimeApp()) { _self._createOperationMainDom(); document.getElementById("btnDrawComplete").onclick = () => { CreateRemindertip(toolTip, event2.endPosition, false); _self.handler.destroy(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } }; } } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); _self.handler.setInputAction(function(move) { if (_self._isRuntimeApp()) return; CreateRemindertip(toolTip, move.endPosition, true); }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); _self.handler.setInputAction((event2) => { CreateRemindertip(toolTip, event2.endPosition, false); _self.handler.destroy(); }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); }, clearAll() { this._resultObject.entities.forEach((element) => { this._viewer.entities.remove(element); }); this._resultObject = { viewPoint: void 0, targetPoints: [], targetPoint: void 0, objectExclude: [], entities: [] }; if (this.handler) { this.handler.destroy(); } let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } } }); SightLine.RuntimeEnvironment = Object.freeze({ App: "app", Web: "web" }); /*! * author: [object Object] * @sakitam-gis/kriging v0.1.0 * build-time: 2019-7-6 20:41 * LICENSE: MIT * (c) 2019-2019 https://github.com/sakitam-gis/kriging.js */ function max(source) { return Math.max.apply(null, source); } function min(source) { return Math.min.apply(null, source); } function rep(source, n) { var array = []; for (var i2 = 0; i2 < n; i2++) { array.push(source); } return array; } function pip(source, x, y) { var i2 = 0; var j = source.length - 1; var c = false; var length = source.length; for (; i2 < length; j = i2++) { if (source[i2][1] > y !== source[j][1] > y && x < (source[j][0] - source[i2][0]) * (y - source[i2][1]) / (source[j][1] - source[i2][1]) + source[i2][0]) { c = !c; } } return c; } function matrixDiag(c, n) { var i2 = 0; var Z2 = rep(0, n * n); for (; i2 < n; i2++) { Z2[i2 * n + i2] = c; } return Z2; } function matrixTranspose(X2, n, m) { var i2 = 0; var j; var Z2 = Array(m * n); for (; i2 < n; i2++) { j = 0; for (; j < m; j++) { Z2[j * n + i2] = X2[i2 * m + j]; } } return Z2; } function matrixAdd(X2, Y, n, m) { var i2 = 0; var j; var Z2 = Array(n * m); for (; i2 < n; i2++) { j = 0; for (; j < m; j++) { Z2[i2 * m + j] = X2[i2 * m + j] + Y[i2 * m + j]; } } return Z2; } function matrixMultiply(X2, Y, n, m, p) { var i2 = 0; var j; var k; var Z2 = Array(n * p); for (; i2 < n; i2++) { j = 0; for (; j < p; j++) { Z2[i2 * p + j] = 0; k = 0; for (; k < m; k++) { Z2[i2 * p + j] += X2[i2 * m + k] * Y[k * p + j]; } } } return Z2; } function matrixChol(X2, n) { var i2; var j; var k; var p = Array(n); for (i2 = 0; i2 < n; i2++) p[i2] = X2[i2 * n + i2]; for (i2 = 0; i2 < n; i2++) { for (j = 0; j < i2; j++) p[i2] -= X2[i2 * n + j] * X2[i2 * n + j]; if (p[i2] <= 0) return false; p[i2] = Math.sqrt(p[i2]); for (j = i2 + 1; j < n; j++) { for (k = 0; k < i2; k++) X2[j * n + i2] -= X2[j * n + k] * X2[i2 * n + k]; X2[j * n + i2] /= p[i2]; } } for (i2 = 0; i2 < n; i2++) X2[i2 * n + i2] = p[i2]; return true; } function matrixChol2inv(X2, n) { var i2; var j; var k; var sum; for (i2 = 0; i2 < n; i2++) { X2[i2 * n + i2] = 1 / X2[i2 * n + i2]; for (j = i2 + 1; j < n; j++) { sum = 0; for (k = i2; k < j; k++) sum -= X2[j * n + k] * X2[k * n + i2]; X2[j * n + i2] = sum / X2[j * n + j]; } } for (i2 = 0; i2 < n; i2++) for (j = i2 + 1; j < n; j++) X2[i2 * n + j] = 0; for (i2 = 0; i2 < n; i2++) { X2[i2 * n + i2] *= X2[i2 * n + i2]; for (k = i2 + 1; k < n; k++) X2[i2 * n + i2] += X2[k * n + i2] * X2[k * n + i2]; for (j = i2 + 1; j < n; j++) for (k = j; k < n; k++) X2[i2 * n + j] += X2[k * n + i2] * X2[k * n + j]; } for (i2 = 0; i2 < n; i2++) for (j = 0; j < i2; j++) X2[i2 * n + j] = X2[j * n + i2]; } function matrixSolve(X2, n) { var m = n; var b = Array(n * n); var indxc = Array(n); var indxr = Array(n); var ipiv = Array(n); var i2; var icol = 0; var irow = 0; var j; var k; var l; var ll; var big; var dum; var pivinv; var temp; for (i2 = 0; i2 < n; i2++) { for (j = 0; j < n; j++) { if (i2 === j) b[i2 * n + j] = 1; else b[i2 * n + j] = 0; } } for (j = 0; j < n; j++) ipiv[j] = 0; for (i2 = 0; i2 < n; i2++) { big = 0; for (j = 0; j < n; j++) { if (ipiv[j] !== 1) { for (k = 0; k < n; k++) { if (ipiv[k] === 0) { if (Math.abs(X2[j * n + k]) >= big) { big = Math.abs(X2[j * n + k]); irow = j; icol = k; } } } } } ++ipiv[icol]; if (irow !== icol) { for (l = 0; l < n; l++) { temp = X2[irow * n + l]; X2[irow * n + l] = X2[icol * n + l]; X2[icol * n + l] = temp; } for (l = 0; l < m; l++) { temp = b[irow * n + l]; b[irow * n + l] = b[icol * n + l]; b[icol * n + l] = temp; } } indxr[i2] = irow; indxc[i2] = icol; if (X2[icol * n + icol] === 0) return false; pivinv = 1 / X2[icol * n + icol]; X2[icol * n + icol] = 1; for (l = 0; l < n; l++) X2[icol * n + l] *= pivinv; for (l = 0; l < m; l++) b[icol * n + l] *= pivinv; for (ll = 0; ll < n; ll++) { if (ll !== icol) { dum = X2[ll * n + icol]; X2[ll * n + icol] = 0; for (l = 0; l < n; l++) X2[ll * n + l] -= X2[icol * n + l] * dum; for (l = 0; l < m; l++) b[ll * n + l] -= b[icol * n + l] * dum; } } } for (l = n - 1; l >= 0; l--) { if (indxr[l] !== indxc[l]) { for (k = 0; k < n; k++) { temp = X2[k * n + indxr[l]]; X2[k * n + indxr[l]] = X2[k * n + indxc[l]]; X2[k * n + indxc[l]] = temp; } } } return true; } function variogramGaussian(h2, nugget, range3, sill, A) { return nugget + (sill - nugget) / range3 * (1 - Math.exp(-(1 / A) * Math.pow(h2 / range3, 2))); } function variogramExponential(h2, nugget, range3, sill, A) { return nugget + (sill - nugget) / range3 * (1 - Math.exp(-(1 / A) * (h2 / range3))); } function variogramSpherical(h2, nugget, range3, sill) { if (h2 > range3) return nugget + (sill - nugget) / range3; return nugget + (sill - nugget) / range3 * (1.5 * (h2 / range3) - 0.5 * Math.pow(h2 / range3, 3)); } function train(t2, x, y, model, sigma2, alpha) { var variogram = { t: t2, x, y, nugget: 0, range: 0, sill: 0, A: 1 / 3, n: 0, model: variogramExponential, K: [], M: [] }; switch (model) { case "gaussian": variogram.model = variogramGaussian; break; case "exponential": variogram.model = variogramExponential; break; case "spherical": variogram.model = variogramSpherical; break; default: variogram.model = variogramExponential; } var i2; var j; var k; var l; var n = t2.length; var distance2 = Array((n * n - n) / 2); for (i2 = 0, k = 0; i2 < n; i2++) { for (j = 0; j < i2; j++, k++) { distance2[k] = Array(2); distance2[k][0] = Math.pow(Math.pow(x[i2] - x[j], 2) + Math.pow(y[i2] - y[j], 2), 0.5); distance2[k][1] = Math.abs(t2[i2] - t2[j]); } } distance2.sort(function(a, b) { return a[0] - b[0]; }); variogram.range = distance2[(n * n - n) / 2 - 1][0]; var lags = (n * n - n) / 2 > 30 ? 30 : (n * n - n) / 2; var tolerance = variogram.range / lags; var lag = rep(0, lags); var semi = rep(0, lags); if (lags < 30) { for (l = 0; l < lags; l++) { lag[l] = distance2[l][0]; semi[l] = distance2[l][1]; } } else { for (i2 = 0, j = 0, k = 0, l = 0; i2 < lags && j < (n * n - n) / 2; i2++, k = 0) { while (distance2[j][0] <= (i2 + 1) * tolerance) { lag[l] += distance2[j][0]; semi[l] += distance2[j][1]; j++; k++; if (j >= (n * n - n) / 2) break; } if (k > 0) { lag[l] /= k; semi[l] /= k; l++; } } if (l < 2) return variogram; } n = l; variogram.range = lag[n - 1] - lag[0]; var X2 = rep(1, 2 * n); var Y = Array(n); var A = variogram.A; for (i2 = 0; i2 < n; i2++) { switch (model) { case "gaussian": X2[i2 * 2 + 1] = 1 - Math.exp(-(1 / A) * Math.pow(lag[i2] / variogram.range, 2)); break; case "exponential": X2[i2 * 2 + 1] = 1 - Math.exp(-(1 / A) * lag[i2] / variogram.range); break; case "spherical": X2[i2 * 2 + 1] = 1.5 * (lag[i2] / variogram.range) - 0.5 * Math.pow(lag[i2] / variogram.range, 3); break; } Y[i2] = semi[i2]; } var Xt2 = matrixTranspose(X2, n, 2); var Z2 = matrixMultiply(Xt2, X2, 2, n, 2); Z2 = matrixAdd(Z2, matrixDiag(1 / alpha, 2), 2, 2); var cloneZ = Z2.slice(0); if (matrixChol(Z2, 2)) { matrixChol2inv(Z2, 2); } else { matrixSolve(cloneZ, 2); Z2 = cloneZ; } var W2 = matrixMultiply(matrixMultiply(Z2, Xt2, 2, 2, n), Y, 2, n, 1); variogram.nugget = W2[0]; variogram.sill = W2[1] * variogram.range + variogram.nugget; variogram.n = x.length; n = x.length; var K2 = Array(n * n); for (i2 = 0; i2 < n; i2++) { for (j = 0; j < i2; j++) { K2[i2 * n + j] = variogram.model(Math.pow(Math.pow(x[i2] - x[j], 2) + Math.pow(y[i2] - y[j], 2), 0.5), variogram.nugget, variogram.range, variogram.sill, variogram.A); K2[j * n + i2] = K2[i2 * n + j]; } K2[i2 * n + i2] = variogram.model(0, variogram.nugget, variogram.range, variogram.sill, variogram.A); } var C2 = matrixAdd(K2, matrixDiag(sigma2, n), n, n); var cloneC = C2.slice(0); if (matrixChol(C2, n)) { matrixChol2inv(C2, n); } else { matrixSolve(cloneC, n); C2 = cloneC; } var K1 = C2.slice(0); var M = matrixMultiply(C2, t2, n, n, 1); variogram.K = K1; variogram.M = M; return variogram; } function predict(x, y, variogram) { var i2; var k = Array(variogram.n); for (i2 = 0; i2 < variogram.n; i2++) { k[i2] = variogram.model(Math.pow(Math.pow(x - variogram.x[i2], 2) + Math.pow(y - variogram.y[i2], 2), 0.5), variogram.nugget, variogram.range, variogram.sill, variogram.A); } return matrixMultiply(k, variogram.M, 1, variogram.n, 1)[0]; } function variance(x, y, variogram) { var i2; var k = Array(variogram.n); for (i2 = 0; i2 < variogram.n; i2++) { k[i2] = variogram.model(Math.pow(Math.pow(x - variogram.x[i2], 2) + Math.pow(y - variogram.y[i2], 2), 0.5), variogram.nugget, variogram.range, variogram.sill, variogram.A); } var val = matrixMultiply(matrixMultiply(k, variogram.K, 1, variogram.n, variogram.n), k, 1, variogram.n, 1)[0]; return variogram.model(0, variogram.nugget, variogram.range, variogram.sill, variogram.A) + val; } function grid(polygons2, variogram, width2) { var i2; var j; var k; var n = polygons2.length; if (n === 0) return; var xlim = [polygons2[0][0][0], polygons2[0][0][0]]; var ylim = [polygons2[0][0][1], polygons2[0][0][1]]; for (i2 = 0; i2 < n; i2++) { for (j = 0; j < polygons2[i2].length; j++) { if (polygons2[i2][j][0] < xlim[0]) xlim[0] = polygons2[i2][j][0]; if (polygons2[i2][j][0] > xlim[1]) xlim[1] = polygons2[i2][j][0]; if (polygons2[i2][j][1] < ylim[0]) ylim[0] = polygons2[i2][j][1]; if (polygons2[i2][j][1] > ylim[1]) ylim[1] = polygons2[i2][j][1]; } } var xtarget; var ytarget; var a = Array(2); var b = Array(2); var lxlim = Array(2); var lylim = Array(2); var x = Math.ceil((xlim[1] - xlim[0]) / width2); var y = Math.ceil((ylim[1] - ylim[0]) / width2); var A = Array(x + 1); for (i2 = 0; i2 <= x; i2++) A[i2] = Array(y + 1); for (i2 = 0; i2 < n; i2++) { lxlim[0] = polygons2[i2][0][0]; lxlim[1] = lxlim[0]; lylim[0] = polygons2[i2][0][1]; lylim[1] = lylim[0]; for (j = 1; j < polygons2[i2].length; j++) { if (polygons2[i2][j][0] < lxlim[0]) lxlim[0] = polygons2[i2][j][0]; if (polygons2[i2][j][0] > lxlim[1]) lxlim[1] = polygons2[i2][j][0]; if (polygons2[i2][j][1] < lylim[0]) lylim[0] = polygons2[i2][j][1]; if (polygons2[i2][j][1] > lylim[1]) lylim[1] = polygons2[i2][j][1]; } a[0] = Math.floor((lxlim[0] - (lxlim[0] - xlim[0]) % width2 - xlim[0]) / width2); a[1] = Math.ceil((lxlim[1] - (lxlim[1] - xlim[1]) % width2 - xlim[0]) / width2); b[0] = Math.floor((lylim[0] - (lylim[0] - ylim[0]) % width2 - ylim[0]) / width2); b[1] = Math.ceil((lylim[1] - (lylim[1] - ylim[1]) % width2 - ylim[0]) / width2); for (j = a[0]; j <= a[1]; j++) { for (k = b[0]; k <= b[1]; k++) { xtarget = xlim[0] + j * width2; ytarget = ylim[0] + k * width2; if (pip(polygons2[i2], xtarget, ytarget)) { A[j][k] = predict(xtarget, ytarget, variogram); } } } } return { xlim, ylim, width: width2, data: A, zlim: [min(variogram.t), max(variogram.t)] }; } function plot(canvas, grid2, xlim, ylim, colors) { var ctx = canvas.getContext("2d"); var data = grid2.data, zlim = grid2.zlim, width2 = grid2.width; if (ctx) { ctx.clearRect(0, 0, canvas.width, canvas.height); var range3 = [xlim[1] - xlim[0], ylim[1] - ylim[0], zlim[1] - zlim[0]]; var i2 = void 0; var j = void 0; var x = void 0; var y = void 0; var z = void 0; var n = data.length; var m = data[0].length; var wx = Math.ceil(width2 * canvas.width / (xlim[1] - xlim[0])); var wy = Math.ceil(width2 * canvas.height / (ylim[1] - ylim[0])); for (i2 = 0; i2 < n; i2++) { for (j = 0; j < m; j++) { if (data[i2][j] === void 0) continue; x = canvas.width * (i2 * width2 + grid2.xlim[0] - xlim[0]) / range3[0]; y = canvas.height * (1 - (j * width2 + grid2.ylim[0] - ylim[0]) / range3[1]); z = (data[i2][j] - zlim[0]) / range3[2]; if (z < 0) z = 0; if (z > 1) z = 1; ctx.fillStyle = colors[Math.floor((colors.length - 1) * z)]; ctx.fillRect(Math.round(x - wx / 2), Math.round(y - wy / 2), wx, wy); } } } } var index = { train, predict, variance, grid, plot, max, min, pip, rep, matrixDiag, matrixTranspose, matrixAdd, matrixMultiply, matrixChol, matrixChol2inv, matrixSolve, variogramGaussian, variogramExponential, variogramSpherical }; var earthRadius = 63710088e-1; var factors = { centimeters: earthRadius * 100, centimetres: earthRadius * 100, degrees: earthRadius / 111325, feet: earthRadius * 3.28084, inches: earthRadius * 39.37, kilometers: earthRadius / 1e3, kilometres: earthRadius / 1e3, meters: earthRadius, metres: earthRadius, miles: earthRadius / 1609.344, millimeters: earthRadius * 1e3, millimetres: earthRadius * 1e3, nauticalmiles: earthRadius / 1852, radians: 1, yards: earthRadius * 1.0936 }; var unitsFactors = { centimeters: 100, centimetres: 100, degrees: 1 / 111325, feet: 3.28084, inches: 39.37, kilometers: 1 / 1e3, kilometres: 1 / 1e3, meters: 1, metres: 1, miles: 1 / 1609.344, millimeters: 1e3, millimetres: 1e3, nauticalmiles: 1 / 1852, radians: 1 / earthRadius, yards: 1.0936133 }; var areaFactors = { acres: 247105e-9, centimeters: 1e4, centimetres: 1e4, feet: 10.763910417, hectares: 1e-4, inches: 1550.003100006, kilometers: 1e-6, kilometres: 1e-6, meters: 1, metres: 1, miles: 386e-9, millimeters: 1e6, millimetres: 1e6, yards: 1.195990046 }; function feature(geom, properties, options2) { if (options2 === void 0) { options2 = {}; } var feat = { type: "Feature" }; if (options2.id === 0 || options2.id) { feat.id = options2.id; } if (options2.bbox) { feat.bbox = options2.bbox; } feat.properties = properties || {}; feat.geometry = geom; return feat; } function geometry(type2, coordinates, _options) { switch (type2) { case "Point": return point(coordinates).geometry; case "LineString": return lineString(coordinates).geometry; case "Polygon": return polygon(coordinates).geometry; case "MultiPoint": return multiPoint(coordinates).geometry; case "MultiLineString": return multiLineString(coordinates).geometry; case "MultiPolygon": return multiPolygon(coordinates).geometry; default: throw new Error(type2 + " is invalid"); } } function point(coordinates, properties, options2) { if (options2 === void 0) { options2 = {}; } if (!coordinates) { throw new Error("coordinates is required"); } if (!Array.isArray(coordinates)) { throw new Error("coordinates must be an Array"); } if (coordinates.length < 2) { throw new Error("coordinates must be at least 2 numbers long"); } if (!isNumber$1(coordinates[0]) || !isNumber$1(coordinates[1])) { throw new Error("coordinates must contain numbers"); } var geom = { type: "Point", coordinates }; return feature(geom, properties, options2); } function points(coordinates, properties, options2) { if (options2 === void 0) { options2 = {}; } return featureCollection$1(coordinates.map(function(coords) { return point(coords, properties); }), options2); } function polygon(coordinates, properties, options2) { if (options2 === void 0) { options2 = {}; } for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) { var ring = coordinates_1[_i]; if (ring.length < 4) { throw new Error("Each LinearRing of a Polygon must have 4 or more Positions."); } for (var j = 0; j < ring[ring.length - 1].length; j++) { if (ring[ring.length - 1][j] !== ring[0][j]) { throw new Error("First and last Position are not equivalent."); } } } var geom = { type: "Polygon", coordinates }; return feature(geom, properties, options2); } function polygons(coordinates, properties, options2) { if (options2 === void 0) { options2 = {}; } return featureCollection$1(coordinates.map(function(coords) { return polygon(coords, properties); }), options2); } function lineString(coordinates, properties, options2) { if (options2 === void 0) { options2 = {}; } if (coordinates.length < 2) { throw new Error("coordinates must be an array of two or more positions"); } var geom = { type: "LineString", coordinates }; return feature(geom, properties, options2); } function lineStrings(coordinates, properties, options2) { if (options2 === void 0) { options2 = {}; } return featureCollection$1(coordinates.map(function(coords) { return lineString(coords, properties); }), options2); } function featureCollection$1(features, options2) { if (options2 === void 0) { options2 = {}; } var fc = { type: "FeatureCollection" }; if (options2.id) { fc.id = options2.id; } if (options2.bbox) { fc.bbox = options2.bbox; } fc.features = features; return fc; } function multiLineString(coordinates, properties, options2) { if (options2 === void 0) { options2 = {}; } var geom = { type: "MultiLineString", coordinates }; return feature(geom, properties, options2); } function multiPoint(coordinates, properties, options2) { if (options2 === void 0) { options2 = {}; } var geom = { type: "MultiPoint", coordinates }; return feature(geom, properties, options2); } function multiPolygon(coordinates, properties, options2) { if (options2 === void 0) { options2 = {}; } var geom = { type: "MultiPolygon", coordinates }; return feature(geom, properties, options2); } function geometryCollection(geometries, properties, options2) { if (options2 === void 0) { options2 = {}; } var geom = { type: "GeometryCollection", geometries }; return feature(geom, properties, options2); } function round(num, precision) { if (precision === void 0) { precision = 0; } if (precision && !(precision >= 0)) { throw new Error("precision must be a positive number"); } var multiplier = Math.pow(10, precision || 0); return Math.round(num * multiplier) / multiplier; } function radiansToLength(radians, units) { if (units === void 0) { units = "kilometers"; } var factor = factors[units]; if (!factor) { throw new Error(units + " units is invalid"); } return radians * factor; } function lengthToRadians(distance2, units) { if (units === void 0) { units = "kilometers"; } var factor = factors[units]; if (!factor) { throw new Error(units + " units is invalid"); } return distance2 / factor; } function lengthToDegrees(distance2, units) { return radiansToDegrees(lengthToRadians(distance2, units)); } function bearingToAzimuth(bearing2) { var angle = bearing2 % 360; if (angle < 0) { angle += 360; } return angle; } function radiansToDegrees(radians) { var degrees = radians % (2 * Math.PI); return degrees * 180 / Math.PI; } function degreesToRadians(degrees) { var radians = degrees % 360; return radians * Math.PI / 180; } function convertLength(length, originalUnit, finalUnit) { if (originalUnit === void 0) { originalUnit = "kilometers"; } if (finalUnit === void 0) { finalUnit = "kilometers"; } if (!(length >= 0)) { throw new Error("length must be a positive number"); } return radiansToLength(lengthToRadians(length, originalUnit), finalUnit); } function convertArea(area, originalUnit, finalUnit) { if (originalUnit === void 0) { originalUnit = "meters"; } if (finalUnit === void 0) { finalUnit = "kilometers"; } if (!(area >= 0)) { throw new Error("area must be a positive number"); } var startFactor = areaFactors[originalUnit]; if (!startFactor) { throw new Error("invalid original units"); } var finalFactor = areaFactors[finalUnit]; if (!finalFactor) { throw new Error("invalid final units"); } return area / startFactor * finalFactor; } function isNumber$1(num) { return !isNaN(num) && num !== null && !Array.isArray(num); } function isObject$6(input) { return !!input && input.constructor === Object; } function validateBBox(bbox2) { if (!bbox2) { throw new Error("bbox is required"); } if (!Array.isArray(bbox2)) { throw new Error("bbox must be an Array"); } if (bbox2.length !== 4 && bbox2.length !== 6) { throw new Error("bbox must be an Array of 4 or 6 numbers"); } bbox2.forEach(function(num) { if (!isNumber$1(num)) { throw new Error("bbox must only contain numbers"); } }); } function validateId(id) { if (!id) { throw new Error("id is required"); } if (["string", "number"].indexOf(typeof id) === -1) { throw new Error("id must be a number or a string"); } } var es$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, earthRadius, factors, unitsFactors, areaFactors, feature, geometry, point, points, polygon, polygons, lineString, lineStrings, featureCollection: featureCollection$1, multiLineString, multiPoint, multiPolygon, geometryCollection, round, radiansToLength, lengthToRadians, lengthToDegrees, bearingToAzimuth, radiansToDegrees, degreesToRadians, convertLength, convertArea, isNumber: isNumber$1, isObject: isObject$6, validateBBox, validateId }, Symbol.toStringTag, { value: "Module" })); function coordEach(geojson, callback2, excludeWrapCoord) { if (geojson === null) return; var j, k, l, geometry2, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type2 = geojson.type, isFeatureCollection = type2 === "FeatureCollection", isFeature = type2 === "Feature", stop = isFeatureCollection ? geojson.features.length : 1; for (var featureIndex = 0; featureIndex < stop; featureIndex++) { geometryMaybeCollection = isFeatureCollection ? geojson.features[featureIndex].geometry : isFeature ? geojson.geometry : geojson; isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === "GeometryCollection" : false; stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; for (var geomIndex = 0; geomIndex < stopG; geomIndex++) { var multiFeatureIndex = 0; var geometryIndex = 0; geometry2 = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection; if (geometry2 === null) continue; coords = geometry2.coordinates; var geomType = geometry2.type; wrapShrink = excludeWrapCoord && (geomType === "Polygon" || geomType === "MultiPolygon") ? 1 : 0; switch (geomType) { case null: break; case "Point": if (callback2( coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex ) === false) return false; coordIndex++; multiFeatureIndex++; break; case "LineString": case "MultiPoint": for (j = 0; j < coords.length; j++) { if (callback2( coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex ) === false) return false; coordIndex++; if (geomType === "MultiPoint") multiFeatureIndex++; } if (geomType === "LineString") multiFeatureIndex++; break; case "Polygon": case "MultiLineString": for (j = 0; j < coords.length; j++) { for (k = 0; k < coords[j].length - wrapShrink; k++) { if (callback2( coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex ) === false) return false; coordIndex++; } if (geomType === "MultiLineString") multiFeatureIndex++; if (geomType === "Polygon") geometryIndex++; } if (geomType === "Polygon") multiFeatureIndex++; break; case "MultiPolygon": for (j = 0; j < coords.length; j++) { geometryIndex = 0; for (k = 0; k < coords[j].length; k++) { for (l = 0; l < coords[j][k].length - wrapShrink; l++) { if (callback2( coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex ) === false) return false; coordIndex++; } geometryIndex++; } multiFeatureIndex++; } break; case "GeometryCollection": for (j = 0; j < geometry2.geometries.length; j++) if (coordEach(geometry2.geometries[j], callback2, excludeWrapCoord) === false) return false; break; default: throw new Error("Unknown Geometry Type"); } } } } function coordReduce(geojson, callback2, initialValue, excludeWrapCoord) { var previousValue = initialValue; coordEach( geojson, function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { if (coordIndex === 0 && initialValue === void 0) previousValue = currentCoord; else previousValue = callback2( previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex ); }, excludeWrapCoord ); return previousValue; } function propEach(geojson, callback2) { var i2; switch (geojson.type) { case "FeatureCollection": for (i2 = 0; i2 < geojson.features.length; i2++) { if (callback2(geojson.features[i2].properties, i2) === false) break; } break; case "Feature": callback2(geojson.properties, 0); break; } } function propReduce(geojson, callback2, initialValue) { var previousValue = initialValue; propEach(geojson, function(currentProperties, featureIndex) { if (featureIndex === 0 && initialValue === void 0) previousValue = currentProperties; else previousValue = callback2(previousValue, currentProperties, featureIndex); }); return previousValue; } function featureEach$1(geojson, callback2) { if (geojson.type === "Feature") { callback2(geojson, 0); } else if (geojson.type === "FeatureCollection") { for (var i2 = 0; i2 < geojson.features.length; i2++) { if (callback2(geojson.features[i2], i2) === false) break; } } } function featureReduce(geojson, callback2, initialValue) { var previousValue = initialValue; featureEach$1(geojson, function(currentFeature, featureIndex) { if (featureIndex === 0 && initialValue === void 0) previousValue = currentFeature; else previousValue = callback2(previousValue, currentFeature, featureIndex); }); return previousValue; } function coordAll(geojson) { var coords = []; coordEach(geojson, function(coord) { coords.push(coord); }); return coords; } function geomEach(geojson, callback2) { var i2, j, g, geometry2, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === "FeatureCollection", isFeature = geojson.type === "Feature", stop = isFeatureCollection ? geojson.features.length : 1; for (i2 = 0; i2 < stop; i2++) { geometryMaybeCollection = isFeatureCollection ? geojson.features[i2].geometry : isFeature ? geojson.geometry : geojson; featureProperties = isFeatureCollection ? geojson.features[i2].properties : isFeature ? geojson.properties : {}; featureBBox = isFeatureCollection ? geojson.features[i2].bbox : isFeature ? geojson.bbox : void 0; featureId = isFeatureCollection ? geojson.features[i2].id : isFeature ? geojson.id : void 0; isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === "GeometryCollection" : false; stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; for (g = 0; g < stopG; g++) { geometry2 = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection; if (geometry2 === null) { if (callback2( null, featureIndex, featureProperties, featureBBox, featureId ) === false) return false; continue; } switch (geometry2.type) { case "Point": case "LineString": case "MultiPoint": case "Polygon": case "MultiLineString": case "MultiPolygon": { if (callback2( geometry2, featureIndex, featureProperties, featureBBox, featureId ) === false) return false; break; } case "GeometryCollection": { for (j = 0; j < geometry2.geometries.length; j++) { if (callback2( geometry2.geometries[j], featureIndex, featureProperties, featureBBox, featureId ) === false) return false; } break; } default: throw new Error("Unknown Geometry Type"); } } featureIndex++; } } function geomReduce(geojson, callback2, initialValue) { var previousValue = initialValue; geomEach( geojson, function(currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { if (featureIndex === 0 && initialValue === void 0) previousValue = currentGeometry; else previousValue = callback2( previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId ); } ); return previousValue; } function flattenEach(geojson, callback2) { geomEach(geojson, function(geometry2, featureIndex, properties, bbox2, id) { var type2 = geometry2 === null ? null : geometry2.type; switch (type2) { case null: case "Point": case "LineString": case "Polygon": if (callback2( feature(geometry2, properties, { bbox: bbox2, id }), featureIndex, 0 ) === false) return false; return; } var geomType; switch (type2) { case "MultiPoint": geomType = "Point"; break; case "MultiLineString": geomType = "LineString"; break; case "MultiPolygon": geomType = "Polygon"; break; } for (var multiFeatureIndex = 0; multiFeatureIndex < geometry2.coordinates.length; multiFeatureIndex++) { var coordinate = geometry2.coordinates[multiFeatureIndex]; var geom = { type: geomType, coordinates: coordinate }; if (callback2(feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false; } }); } function flattenReduce(geojson, callback2, initialValue) { var previousValue = initialValue; flattenEach( geojson, function(currentFeature, featureIndex, multiFeatureIndex) { if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === void 0) previousValue = currentFeature; else previousValue = callback2( previousValue, currentFeature, featureIndex, multiFeatureIndex ); } ); return previousValue; } function segmentEach(geojson, callback2) { flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) { var segmentIndex = 0; if (!feature2.geometry) return; var type2 = feature2.geometry.type; if (type2 === "Point" || type2 === "MultiPoint") return; var previousCoords; var previousFeatureIndex = 0; var previousMultiIndex = 0; var prevGeomIndex = 0; if (coordEach( feature2, function(currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) { if (previousCoords === void 0 || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) { previousCoords = currentCoord; previousFeatureIndex = featureIndex; previousMultiIndex = multiPartIndexCoord; prevGeomIndex = geometryIndex; segmentIndex = 0; return; } var currentSegment = lineString( [previousCoords, currentCoord], feature2.properties ); if (callback2( currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex ) === false) return false; segmentIndex++; previousCoords = currentCoord; } ) === false) return false; }); } function segmentReduce(geojson, callback2, initialValue) { var previousValue = initialValue; var started = false; segmentEach( geojson, function(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { if (started === false && initialValue === void 0) previousValue = currentSegment; else previousValue = callback2( previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex ); started = true; } ); return previousValue; } function lineEach(geojson, callback2) { if (!geojson) throw new Error("geojson is required"); flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) { if (feature2.geometry === null) return; var type2 = feature2.geometry.type; var coords = feature2.geometry.coordinates; switch (type2) { case "LineString": if (callback2(feature2, featureIndex, multiFeatureIndex, 0, 0) === false) return false; break; case "Polygon": for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) { if (callback2( lineString(coords[geometryIndex], feature2.properties), featureIndex, multiFeatureIndex, geometryIndex ) === false) return false; } break; } }); } function lineReduce(geojson, callback2, initialValue) { var previousValue = initialValue; lineEach( geojson, function(currentLine, featureIndex, multiFeatureIndex, geometryIndex) { if (featureIndex === 0 && initialValue === void 0) previousValue = currentLine; else previousValue = callback2( previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex ); } ); return previousValue; } function findSegment(geojson, options2) { options2 = options2 || {}; if (!isObject$6(options2)) throw new Error("options is invalid"); var featureIndex = options2.featureIndex || 0; var multiFeatureIndex = options2.multiFeatureIndex || 0; var geometryIndex = options2.geometryIndex || 0; var segmentIndex = options2.segmentIndex || 0; var properties = options2.properties; var geometry2; switch (geojson.type) { case "FeatureCollection": if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex; properties = properties || geojson.features[featureIndex].properties; geometry2 = geojson.features[featureIndex].geometry; break; case "Feature": properties = properties || geojson.properties; geometry2 = geojson.geometry; break; case "Point": case "MultiPoint": return null; case "LineString": case "Polygon": case "MultiLineString": case "MultiPolygon": geometry2 = geojson; break; default: throw new Error("geojson is invalid"); } if (geometry2 === null) return null; var coords = geometry2.coordinates; switch (geometry2.type) { case "Point": case "MultiPoint": return null; case "LineString": if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1; return lineString( [coords[segmentIndex], coords[segmentIndex + 1]], properties, options2 ); case "Polygon": if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex; if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1; return lineString( [ coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1] ], properties, options2 ); case "MultiLineString": if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1; return lineString( [ coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1] ], properties, options2 ); case "MultiPolygon": if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex; if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1; return lineString( [ coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1] ], properties, options2 ); } throw new Error("geojson is invalid"); } function findPoint(geojson, options2) { options2 = options2 || {}; if (!isObject$6(options2)) throw new Error("options is invalid"); var featureIndex = options2.featureIndex || 0; var multiFeatureIndex = options2.multiFeatureIndex || 0; var geometryIndex = options2.geometryIndex || 0; var coordIndex = options2.coordIndex || 0; var properties = options2.properties; var geometry2; switch (geojson.type) { case "FeatureCollection": if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex; properties = properties || geojson.features[featureIndex].properties; geometry2 = geojson.features[featureIndex].geometry; break; case "Feature": properties = properties || geojson.properties; geometry2 = geojson.geometry; break; case "Point": case "MultiPoint": return null; case "LineString": case "Polygon": case "MultiLineString": case "MultiPolygon": geometry2 = geojson; break; default: throw new Error("geojson is invalid"); } if (geometry2 === null) return null; var coords = geometry2.coordinates; switch (geometry2.type) { case "Point": return point(coords, properties, options2); case "MultiPoint": if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; return point(coords[multiFeatureIndex], properties, options2); case "LineString": if (coordIndex < 0) coordIndex = coords.length + coordIndex; return point(coords[coordIndex], properties, options2); case "Polygon": if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex; if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex; return point(coords[geometryIndex][coordIndex], properties, options2); case "MultiLineString": if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex; return point(coords[multiFeatureIndex][coordIndex], properties, options2); case "MultiPolygon": if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex; if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex; return point( coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options2 ); } throw new Error("geojson is invalid"); } var es$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, coordAll, coordEach, coordReduce, featureEach: featureEach$1, featureReduce, findPoint, findSegment, flattenEach, flattenReduce, geomEach, geomReduce, lineEach, lineReduce, propEach, propReduce, segmentEach, segmentReduce }, Symbol.toStringTag, { value: "Module" })); function bbox$1(geojson) { var result = [Infinity, Infinity, -Infinity, -Infinity]; coordEach(geojson, function(coord) { if (result[0] > coord[0]) { result[0] = coord[0]; } if (result[1] > coord[1]) { result[1] = coord[1]; } if (result[2] < coord[0]) { result[2] = coord[0]; } if (result[3] < coord[1]) { result[3] = coord[1]; } }); return result; } bbox$1["default"] = bbox$1; var es = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, "default": bbox$1 }, Symbol.toStringTag, { value: "Module" })); function getCoord(coord) { if (!coord) { throw new Error("coord is required"); } if (!Array.isArray(coord)) { if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") { return coord.geometry.coordinates; } if (coord.type === "Point") { return coord.coordinates; } } if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) { return coord; } throw new Error("coord must be GeoJSON Point or an Array of numbers"); } function getCoords(coords) { if (Array.isArray(coords)) { return coords; } if (coords.type === "Feature") { if (coords.geometry !== null) { return coords.geometry.coordinates; } } else { if (coords.coordinates) { return coords.coordinates; } } throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array"); } function getGeom(geojson) { if (geojson.type === "Feature") { return geojson.geometry; } return geojson; } function getType(geojson, _name) { if (geojson.type === "FeatureCollection") { return "FeatureCollection"; } if (geojson.type === "GeometryCollection") { return "GeometryCollection"; } if (geojson.type === "Feature" && geojson.geometry !== null) { return geojson.geometry.type; } return geojson.type; } var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } function getAugmentedNamespace(n) { if (n.__esModule) return n; var a = Object.defineProperty({}, "__esModule", { value: true }); Object.keys(n).forEach(function(k) { var d2 = Object.getOwnPropertyDescriptor(n, k); Object.defineProperty(a, k, d2.get ? d2 : { enumerable: true, get: function() { return n[k]; } }); }); return a; } var concaveman$2 = { exports: {} }; var rbush_min$1 = { exports: {} }; (function(module2, exports2) { !function(t2, i2) { module2.exports = i2(); }(commonjsGlobal, function() { function t2(t3, r3, e2, a2, h3) { !function t4(n2, r4, e3, a3, h4) { for (; a3 > e3; ) { if (a3 - e3 > 600) { var o2 = a3 - e3 + 1, s2 = r4 - e3 + 1, l2 = Math.log(o2), f2 = 0.5 * Math.exp(2 * l2 / 3), u2 = 0.5 * Math.sqrt(l2 * f2 * (o2 - f2) / o2) * (s2 - o2 / 2 < 0 ? -1 : 1), m2 = Math.max(e3, Math.floor(r4 - s2 * f2 / o2 + u2)), c2 = Math.min(a3, Math.floor(r4 + (o2 - s2) * f2 / o2 + u2)); t4(n2, r4, m2, c2, h4); } var p2 = n2[r4], d3 = e3, x = a3; for (i2(n2, e3, r4), h4(n2[a3], p2) > 0 && i2(n2, e3, a3); d3 < x; ) { for (i2(n2, d3, x), d3++, x--; h4(n2[d3], p2) < 0; ) d3++; for (; h4(n2[x], p2) > 0; ) x--; } 0 === h4(n2[e3], p2) ? i2(n2, e3, x) : i2(n2, ++x, a3), x <= r4 && (e3 = x + 1), r4 <= x && (a3 = x - 1); } }(t3, r3, e2 || 0, a2 || t3.length - 1, h3 || n); } function i2(t3, i3, n2) { var r3 = t3[i3]; t3[i3] = t3[n2], t3[n2] = r3; } function n(t3, i3) { return t3 < i3 ? -1 : t3 > i3 ? 1 : 0; } var r2 = function(t3) { void 0 === t3 && (t3 = 9), this._maxEntries = Math.max(4, t3), this._minEntries = Math.max(2, Math.ceil(0.4 * this._maxEntries)), this.clear(); }; function e(t3, i3, n2) { if (!n2) return i3.indexOf(t3); for (var r3 = 0; r3 < i3.length; r3++) if (n2(t3, i3[r3])) return r3; return -1; } function a(t3, i3) { h2(t3, 0, t3.children.length, i3, t3); } function h2(t3, i3, n2, r3, e2) { e2 || (e2 = p(null)), e2.minX = 1 / 0, e2.minY = 1 / 0, e2.maxX = -1 / 0, e2.maxY = -1 / 0; for (var a2 = i3; a2 < n2; a2++) { var h3 = t3.children[a2]; o(e2, t3.leaf ? r3(h3) : h3); } return e2; } function o(t3, i3) { return t3.minX = Math.min(t3.minX, i3.minX), t3.minY = Math.min(t3.minY, i3.minY), t3.maxX = Math.max(t3.maxX, i3.maxX), t3.maxY = Math.max(t3.maxY, i3.maxY), t3; } function s(t3, i3) { return t3.minX - i3.minX; } function l(t3, i3) { return t3.minY - i3.minY; } function f(t3) { return (t3.maxX - t3.minX) * (t3.maxY - t3.minY); } function u(t3) { return t3.maxX - t3.minX + (t3.maxY - t3.minY); } function m(t3, i3) { return t3.minX <= i3.minX && t3.minY <= i3.minY && i3.maxX <= t3.maxX && i3.maxY <= t3.maxY; } function c(t3, i3) { return i3.minX <= t3.maxX && i3.minY <= t3.maxY && i3.maxX >= t3.minX && i3.maxY >= t3.minY; } function p(t3) { return { children: t3, height: 1, leaf: true, minX: 1 / 0, minY: 1 / 0, maxX: -1 / 0, maxY: -1 / 0 }; } function d2(i3, n2, r3, e2, a2) { for (var h3 = [n2, r3]; h3.length; ) if (!((r3 = h3.pop()) - (n2 = h3.pop()) <= e2)) { var o2 = n2 + Math.ceil((r3 - n2) / e2 / 2) * e2; t2(i3, o2, n2, r3, a2), h3.push(n2, o2, o2, r3); } } return r2.prototype.all = function() { return this._all(this.data, []); }, r2.prototype.search = function(t3) { var i3 = this.data, n2 = []; if (!c(t3, i3)) return n2; for (var r3 = this.toBBox, e2 = []; i3; ) { for (var a2 = 0; a2 < i3.children.length; a2++) { var h3 = i3.children[a2], o2 = i3.leaf ? r3(h3) : h3; c(t3, o2) && (i3.leaf ? n2.push(h3) : m(t3, o2) ? this._all(h3, n2) : e2.push(h3)); } i3 = e2.pop(); } return n2; }, r2.prototype.collides = function(t3) { var i3 = this.data; if (!c(t3, i3)) return false; for (var n2 = []; i3; ) { for (var r3 = 0; r3 < i3.children.length; r3++) { var e2 = i3.children[r3], a2 = i3.leaf ? this.toBBox(e2) : e2; if (c(t3, a2)) { if (i3.leaf || m(t3, a2)) return true; n2.push(e2); } } i3 = n2.pop(); } return false; }, r2.prototype.load = function(t3) { if (!t3 || !t3.length) return this; if (t3.length < this._minEntries) { for (var i3 = 0; i3 < t3.length; i3++) this.insert(t3[i3]); return this; } var n2 = this._build(t3.slice(), 0, t3.length - 1, 0); if (this.data.children.length) if (this.data.height === n2.height) this._splitRoot(this.data, n2); else { if (this.data.height < n2.height) { var r3 = this.data; this.data = n2, n2 = r3; } this._insert(n2, this.data.height - n2.height - 1, true); } else this.data = n2; return this; }, r2.prototype.insert = function(t3) { return t3 && this._insert(t3, this.data.height - 1), this; }, r2.prototype.clear = function() { return this.data = p([]), this; }, r2.prototype.remove = function(t3, i3) { if (!t3) return this; for (var n2, r3, a2, h3 = this.data, o2 = this.toBBox(t3), s2 = [], l2 = []; h3 || s2.length; ) { if (h3 || (h3 = s2.pop(), r3 = s2[s2.length - 1], n2 = l2.pop(), a2 = true), h3.leaf) { var f2 = e(t3, h3.children, i3); if (-1 !== f2) return h3.children.splice(f2, 1), s2.push(h3), this._condense(s2), this; } a2 || h3.leaf || !m(h3, o2) ? r3 ? (n2++, h3 = r3.children[n2], a2 = false) : h3 = null : (s2.push(h3), l2.push(n2), n2 = 0, r3 = h3, h3 = h3.children[0]); } return this; }, r2.prototype.toBBox = function(t3) { return t3; }, r2.prototype.compareMinX = function(t3, i3) { return t3.minX - i3.minX; }, r2.prototype.compareMinY = function(t3, i3) { return t3.minY - i3.minY; }, r2.prototype.toJSON = function() { return this.data; }, r2.prototype.fromJSON = function(t3) { return this.data = t3, this; }, r2.prototype._all = function(t3, i3) { for (var n2 = []; t3; ) t3.leaf ? i3.push.apply(i3, t3.children) : n2.push.apply(n2, t3.children), t3 = n2.pop(); return i3; }, r2.prototype._build = function(t3, i3, n2, r3) { var e2, h3 = n2 - i3 + 1, o2 = this._maxEntries; if (h3 <= o2) return a(e2 = p(t3.slice(i3, n2 + 1)), this.toBBox), e2; r3 || (r3 = Math.ceil(Math.log(h3) / Math.log(o2)), o2 = Math.ceil(h3 / Math.pow(o2, r3 - 1))), (e2 = p([])).leaf = false, e2.height = r3; var s2 = Math.ceil(h3 / o2), l2 = s2 * Math.ceil(Math.sqrt(o2)); d2(t3, i3, n2, l2, this.compareMinX); for (var f2 = i3; f2 <= n2; f2 += l2) { var u2 = Math.min(f2 + l2 - 1, n2); d2(t3, f2, u2, s2, this.compareMinY); for (var m2 = f2; m2 <= u2; m2 += s2) { var c2 = Math.min(m2 + s2 - 1, u2); e2.children.push(this._build(t3, m2, c2, r3 - 1)); } } return a(e2, this.toBBox), e2; }, r2.prototype._chooseSubtree = function(t3, i3, n2, r3) { for (; r3.push(i3), !i3.leaf && r3.length - 1 !== n2; ) { for (var e2 = 1 / 0, a2 = 1 / 0, h3 = void 0, o2 = 0; o2 < i3.children.length; o2++) { var s2 = i3.children[o2], l2 = f(s2), u2 = (m2 = t3, c2 = s2, (Math.max(c2.maxX, m2.maxX) - Math.min(c2.minX, m2.minX)) * (Math.max(c2.maxY, m2.maxY) - Math.min(c2.minY, m2.minY)) - l2); u2 < a2 ? (a2 = u2, e2 = l2 < e2 ? l2 : e2, h3 = s2) : u2 === a2 && l2 < e2 && (e2 = l2, h3 = s2); } i3 = h3 || i3.children[0]; } var m2, c2; return i3; }, r2.prototype._insert = function(t3, i3, n2) { var r3 = n2 ? t3 : this.toBBox(t3), e2 = [], a2 = this._chooseSubtree(r3, this.data, i3, e2); for (a2.children.push(t3), o(a2, r3); i3 >= 0 && e2[i3].children.length > this._maxEntries; ) this._split(e2, i3), i3--; this._adjustParentBBoxes(r3, e2, i3); }, r2.prototype._split = function(t3, i3) { var n2 = t3[i3], r3 = n2.children.length, e2 = this._minEntries; this._chooseSplitAxis(n2, e2, r3); var h3 = this._chooseSplitIndex(n2, e2, r3), o2 = p(n2.children.splice(h3, n2.children.length - h3)); o2.height = n2.height, o2.leaf = n2.leaf, a(n2, this.toBBox), a(o2, this.toBBox), i3 ? t3[i3 - 1].children.push(o2) : this._splitRoot(n2, o2); }, r2.prototype._splitRoot = function(t3, i3) { this.data = p([t3, i3]), this.data.height = t3.height + 1, this.data.leaf = false, a(this.data, this.toBBox); }, r2.prototype._chooseSplitIndex = function(t3, i3, n2) { for (var r3, e2, a2, o2, s2, l2, u2, m2 = 1 / 0, c2 = 1 / 0, p2 = i3; p2 <= n2 - i3; p2++) { var d3 = h2(t3, 0, p2, this.toBBox), x = h2(t3, p2, n2, this.toBBox), v = (e2 = d3, a2 = x, o2 = void 0, s2 = void 0, l2 = void 0, u2 = void 0, o2 = Math.max(e2.minX, a2.minX), s2 = Math.max(e2.minY, a2.minY), l2 = Math.min(e2.maxX, a2.maxX), u2 = Math.min(e2.maxY, a2.maxY), Math.max(0, l2 - o2) * Math.max(0, u2 - s2)), M = f(d3) + f(x); v < m2 ? (m2 = v, r3 = p2, c2 = M < c2 ? M : c2) : v === m2 && M < c2 && (c2 = M, r3 = p2); } return r3 || n2 - i3; }, r2.prototype._chooseSplitAxis = function(t3, i3, n2) { var r3 = t3.leaf ? this.compareMinX : s, e2 = t3.leaf ? this.compareMinY : l; this._allDistMargin(t3, i3, n2, r3) < this._allDistMargin(t3, i3, n2, e2) && t3.children.sort(r3); }, r2.prototype._allDistMargin = function(t3, i3, n2, r3) { t3.children.sort(r3); for (var e2 = this.toBBox, a2 = h2(t3, 0, i3, e2), s2 = h2(t3, n2 - i3, n2, e2), l2 = u(a2) + u(s2), f2 = i3; f2 < n2 - i3; f2++) { var m2 = t3.children[f2]; o(a2, t3.leaf ? e2(m2) : m2), l2 += u(a2); } for (var c2 = n2 - i3 - 1; c2 >= i3; c2--) { var p2 = t3.children[c2]; o(s2, t3.leaf ? e2(p2) : p2), l2 += u(s2); } return l2; }, r2.prototype._adjustParentBBoxes = function(t3, i3, n2) { for (var r3 = n2; r3 >= 0; r3--) o(i3[r3], t3); }, r2.prototype._condense = function(t3) { for (var i3 = t3.length - 1, n2 = void 0; i3 >= 0; i3--) 0 === t3[i3].children.length ? i3 > 0 ? (n2 = t3[i3 - 1].children).splice(n2.indexOf(t3[i3]), 1) : this.clear() : a(t3[i3], this.toBBox); }, r2; }); })(rbush_min$1); class TinyQueue { constructor(data = [], compare = defaultCompare) { this.data = data; this.length = this.data.length; this.compare = compare; if (this.length > 0) { for (let i2 = (this.length >> 1) - 1; i2 >= 0; i2--) this._down(i2); } } push(item) { this.data.push(item); this.length++; this._up(this.length - 1); } pop() { if (this.length === 0) return void 0; const top = this.data[0]; const bottom = this.data.pop(); this.length--; if (this.length > 0) { this.data[0] = bottom; this._down(0); } return top; } peek() { return this.data[0]; } _up(pos) { const { data, compare } = this; const item = data[pos]; while (pos > 0) { const parent = pos - 1 >> 1; const current = data[parent]; if (compare(item, current) >= 0) break; data[pos] = current; pos = parent; } data[pos] = item; } _down(pos) { const { data, compare } = this; const halfLength = this.length >> 1; const item = data[pos]; while (pos < halfLength) { let left = (pos << 1) + 1; let best = data[left]; const right = left + 1; if (right < this.length && compare(data[right], best) < 0) { left = right; best = data[right]; } if (compare(best, item) >= 0) break; data[pos] = best; pos = left; } data[pos] = item; } } function defaultCompare(a, b) { return a < b ? -1 : a > b ? 1 : 0; } var tinyqueue = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, "default": TinyQueue }, Symbol.toStringTag, { value: "Module" })); var require$$1$2 = /* @__PURE__ */ getAugmentedNamespace(tinyqueue); var pointInPolygon$1 = { exports: {} }; var flat = function pointInPolygonFlat(point2, vs, start2, end) { var x = point2[0], y = point2[1]; var inside2 = false; if (start2 === void 0) start2 = 0; if (end === void 0) end = vs.length; var len = (end - start2) / 2; for (var i2 = 0, j = len - 1; i2 < len; j = i2++) { var xi = vs[start2 + i2 * 2 + 0], yi = vs[start2 + i2 * 2 + 1]; var xj = vs[start2 + j * 2 + 0], yj = vs[start2 + j * 2 + 1]; var intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi; if (intersect) inside2 = !inside2; } return inside2; }; var nested = function pointInPolygonNested(point2, vs, start2, end) { var x = point2[0], y = point2[1]; var inside2 = false; if (start2 === void 0) start2 = 0; if (end === void 0) end = vs.length; var len = end - start2; for (var i2 = 0, j = len - 1; i2 < len; j = i2++) { var xi = vs[i2 + start2][0], yi = vs[i2 + start2][1]; var xj = vs[j + start2][0], yj = vs[j + start2][1]; var intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi; if (intersect) inside2 = !inside2; } return inside2; }; var pointInPolygonFlat2 = flat; var pointInPolygonNested2 = nested; pointInPolygon$1.exports = function pointInPolygon(point2, vs, start2, end) { if (vs.length > 0 && Array.isArray(vs[0])) { return pointInPolygonNested2(point2, vs, start2, end); } else { return pointInPolygonFlat2(point2, vs, start2, end); } }; pointInPolygon$1.exports.nested = pointInPolygonNested2; pointInPolygon$1.exports.flat = pointInPolygonFlat2; var orient2d_min = { exports: {} }; (function(module2, exports2) { !function(t2, e) { e(exports2); }(commonjsGlobal, function(t2) { const e = 134217729, n = 33306690738754706e-32; function r2(t3, e2, n2, r3, o2) { let f2, i3, u2, c2, s2 = e2[0], a2 = r3[0], d3 = 0, l2 = 0; a2 > s2 == a2 > -s2 ? (f2 = s2, s2 = e2[++d3]) : (f2 = a2, a2 = r3[++l2]); let p = 0; if (d3 < t3 && l2 < n2) for (a2 > s2 == a2 > -s2 ? (u2 = f2 - ((i3 = s2 + f2) - s2), s2 = e2[++d3]) : (u2 = f2 - ((i3 = a2 + f2) - a2), a2 = r3[++l2]), f2 = i3, 0 !== u2 && (o2[p++] = u2); d3 < t3 && l2 < n2; ) a2 > s2 == a2 > -s2 ? (u2 = f2 - ((i3 = f2 + s2) - (c2 = i3 - f2)) + (s2 - c2), s2 = e2[++d3]) : (u2 = f2 - ((i3 = f2 + a2) - (c2 = i3 - f2)) + (a2 - c2), a2 = r3[++l2]), f2 = i3, 0 !== u2 && (o2[p++] = u2); for (; d3 < t3; ) u2 = f2 - ((i3 = f2 + s2) - (c2 = i3 - f2)) + (s2 - c2), s2 = e2[++d3], f2 = i3, 0 !== u2 && (o2[p++] = u2); for (; l2 < n2; ) u2 = f2 - ((i3 = f2 + a2) - (c2 = i3 - f2)) + (a2 - c2), a2 = r3[++l2], f2 = i3, 0 !== u2 && (o2[p++] = u2); return 0 === f2 && 0 !== p || (o2[p++] = f2), p; } function o(t3) { return new Float64Array(t3); } const f = 33306690738754716e-32, i2 = 22204460492503146e-32, u = 11093356479670487e-47, c = o(4), s = o(8), a = o(12), d2 = o(16), l = o(4); t2.orient2d = function(t3, o2, p, b, y, h2) { const M = (o2 - h2) * (p - y), x = (t3 - y) * (b - h2), j = M - x; if (0 === M || 0 === x || M > 0 != x > 0) return j; const m = Math.abs(M + x); return Math.abs(j) >= f * m ? j : -function(t4, o3, f2, p2, b2, y2, h3) { let M2, x2, j2, m2, _, v, w, A, F, O, P2, g, k, q2, z, B2, C2, D; const E2 = t4 - b2, G2 = f2 - b2, H2 = o3 - y2, I2 = p2 - y2; _ = (z = (A = E2 - (w = (v = e * E2) - (v - E2))) * (O = I2 - (F = (v = e * I2) - (v - I2))) - ((q2 = E2 * I2) - w * F - A * F - w * O)) - (P2 = z - (C2 = (A = H2 - (w = (v = e * H2) - (v - H2))) * (O = G2 - (F = (v = e * G2) - (v - G2))) - ((B2 = H2 * G2) - w * F - A * F - w * O))), c[0] = z - (P2 + _) + (_ - C2), _ = (k = q2 - ((g = q2 + P2) - (_ = g - q2)) + (P2 - _)) - (P2 = k - B2), c[1] = k - (P2 + _) + (_ - B2), _ = (D = g + P2) - g, c[2] = g - (D - _) + (P2 - _), c[3] = D; let J2 = function(t5, e2) { let n2 = e2[0]; for (let r3 = 1; r3 < t5; r3++) n2 += e2[r3]; return n2; }(4, c), K2 = i2 * h3; if (J2 >= K2 || -J2 >= K2) return J2; if (M2 = t4 - (E2 + (_ = t4 - E2)) + (_ - b2), j2 = f2 - (G2 + (_ = f2 - G2)) + (_ - b2), x2 = o3 - (H2 + (_ = o3 - H2)) + (_ - y2), m2 = p2 - (I2 + (_ = p2 - I2)) + (_ - y2), 0 === M2 && 0 === x2 && 0 === j2 && 0 === m2) return J2; if (K2 = u * h3 + n * Math.abs(J2), (J2 += E2 * m2 + I2 * M2 - (H2 * j2 + G2 * x2)) >= K2 || -J2 >= K2) return J2; _ = (z = (A = M2 - (w = (v = e * M2) - (v - M2))) * (O = I2 - (F = (v = e * I2) - (v - I2))) - ((q2 = M2 * I2) - w * F - A * F - w * O)) - (P2 = z - (C2 = (A = x2 - (w = (v = e * x2) - (v - x2))) * (O = G2 - (F = (v = e * G2) - (v - G2))) - ((B2 = x2 * G2) - w * F - A * F - w * O))), l[0] = z - (P2 + _) + (_ - C2), _ = (k = q2 - ((g = q2 + P2) - (_ = g - q2)) + (P2 - _)) - (P2 = k - B2), l[1] = k - (P2 + _) + (_ - B2), _ = (D = g + P2) - g, l[2] = g - (D - _) + (P2 - _), l[3] = D; const L = r2(4, c, 4, l, s); _ = (z = (A = E2 - (w = (v = e * E2) - (v - E2))) * (O = m2 - (F = (v = e * m2) - (v - m2))) - ((q2 = E2 * m2) - w * F - A * F - w * O)) - (P2 = z - (C2 = (A = H2 - (w = (v = e * H2) - (v - H2))) * (O = j2 - (F = (v = e * j2) - (v - j2))) - ((B2 = H2 * j2) - w * F - A * F - w * O))), l[0] = z - (P2 + _) + (_ - C2), _ = (k = q2 - ((g = q2 + P2) - (_ = g - q2)) + (P2 - _)) - (P2 = k - B2), l[1] = k - (P2 + _) + (_ - B2), _ = (D = g + P2) - g, l[2] = g - (D - _) + (P2 - _), l[3] = D; const N2 = r2(L, s, 4, l, a); _ = (z = (A = M2 - (w = (v = e * M2) - (v - M2))) * (O = m2 - (F = (v = e * m2) - (v - m2))) - ((q2 = M2 * m2) - w * F - A * F - w * O)) - (P2 = z - (C2 = (A = x2 - (w = (v = e * x2) - (v - x2))) * (O = j2 - (F = (v = e * j2) - (v - j2))) - ((B2 = x2 * j2) - w * F - A * F - w * O))), l[0] = z - (P2 + _) + (_ - C2), _ = (k = q2 - ((g = q2 + P2) - (_ = g - q2)) + (P2 - _)) - (P2 = k - B2), l[1] = k - (P2 + _) + (_ - B2), _ = (D = g + P2) - g, l[2] = g - (D - _) + (P2 - _), l[3] = D; const Q2 = r2(N2, a, 4, l, d2); return d2[Q2 - 1]; }(t3, o2, p, b, y, h2, m); }, t2.orient2dfast = function(t3, e2, n2, r3, o2, f2) { return (e2 - f2) * (n2 - o2) - (t3 - o2) * (r3 - f2); }, Object.defineProperty(t2, "__esModule", { value: true }); }); })(orient2d_min, orient2d_min.exports); var RBush = rbush_min$1.exports; var Queue = require$$1$2; var pointInPolygon2 = pointInPolygon$1.exports; var orient = orient2d_min.exports.orient2d; if (Queue.default) { Queue = Queue.default; } concaveman$2.exports = concaveman; concaveman$2.exports.default = concaveman; function concaveman(points2, concavity, lengthThreshold) { concavity = Math.max(0, concavity === void 0 ? 2 : concavity); lengthThreshold = lengthThreshold || 0; var hull = fastConvexHull(points2); var tree = new RBush(16); tree.toBBox = function(a2) { return { minX: a2[0], minY: a2[1], maxX: a2[0], maxY: a2[1] }; }; tree.compareMinX = function(a2, b2) { return a2[0] - b2[0]; }; tree.compareMinY = function(a2, b2) { return a2[1] - b2[1]; }; tree.load(points2); var queue = []; for (var i2 = 0, last; i2 < hull.length; i2++) { var p = hull[i2]; tree.remove(p); last = insertNode(p, last); queue.push(last); } var segTree = new RBush(16); for (i2 = 0; i2 < queue.length; i2++) segTree.insert(updateBBox(queue[i2])); var sqConcavity = concavity * concavity; var sqLenThreshold = lengthThreshold * lengthThreshold; while (queue.length) { var node = queue.shift(); var a = node.p; var b = node.next.p; var sqLen = getSqDist(a, b); if (sqLen < sqLenThreshold) continue; var maxSqLen = sqLen / sqConcavity; p = findCandidate(tree, node.prev.p, a, b, node.next.next.p, maxSqLen, segTree); if (p && Math.min(getSqDist(p, a), getSqDist(p, b)) <= maxSqLen) { queue.push(node); queue.push(insertNode(p, node)); tree.remove(p); segTree.remove(node); segTree.insert(updateBBox(node)); segTree.insert(updateBBox(node.next)); } } node = last; var concave = []; do { concave.push(node.p); node = node.next; } while (node !== last); concave.push(node.p); return concave; } function findCandidate(tree, a, b, c, d2, maxDist, segTree) { var queue = new Queue([], compareDist); var node = tree.data; while (node) { for (var i2 = 0; i2 < node.children.length; i2++) { var child = node.children[i2]; var dist = node.leaf ? sqSegDist(child, b, c) : sqSegBoxDist(b, c, child); if (dist > maxDist) continue; queue.push({ node: child, dist }); } while (queue.length && !queue.peek().node.children) { var item = queue.pop(); var p = item.node; var d0 = sqSegDist(p, a, b); var d1 = sqSegDist(p, c, d2); if (item.dist < d0 && item.dist < d1 && noIntersections(b, p, segTree) && noIntersections(c, p, segTree)) return p; } node = queue.pop(); if (node) node = node.node; } return null; } function compareDist(a, b) { return a.dist - b.dist; } function sqSegBoxDist(a, b, bbox2) { if (inside(a, bbox2) || inside(b, bbox2)) return 0; var d1 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox2.minX, bbox2.minY, bbox2.maxX, bbox2.minY); if (d1 === 0) return 0; var d2 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox2.minX, bbox2.minY, bbox2.minX, bbox2.maxY); if (d2 === 0) return 0; var d3 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox2.maxX, bbox2.minY, bbox2.maxX, bbox2.maxY); if (d3 === 0) return 0; var d4 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox2.minX, bbox2.maxY, bbox2.maxX, bbox2.maxY); if (d4 === 0) return 0; return Math.min(d1, d2, d3, d4); } function inside(a, bbox2) { return a[0] >= bbox2.minX && a[0] <= bbox2.maxX && a[1] >= bbox2.minY && a[1] <= bbox2.maxY; } function noIntersections(a, b, segTree) { var minX = Math.min(a[0], b[0]); var minY = Math.min(a[1], b[1]); var maxX = Math.max(a[0], b[0]); var maxY = Math.max(a[1], b[1]); var edges = segTree.search({ minX, minY, maxX, maxY }); for (var i2 = 0; i2 < edges.length; i2++) { if (intersects$1(edges[i2].p, edges[i2].next.p, a, b)) return false; } return true; } function cross(p1, p2, p3) { return orient(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); } function intersects$1(p1, q1, p2, q2) { return p1 !== q2 && q1 !== p2 && cross(p1, q1, p2) > 0 !== cross(p1, q1, q2) > 0 && cross(p2, q2, p1) > 0 !== cross(p2, q2, q1) > 0; } function updateBBox(node) { var p1 = node.p; var p2 = node.next.p; node.minX = Math.min(p1[0], p2[0]); node.minY = Math.min(p1[1], p2[1]); node.maxX = Math.max(p1[0], p2[0]); node.maxY = Math.max(p1[1], p2[1]); return node; } function fastConvexHull(points2) { var left = points2[0]; var top = points2[0]; var right = points2[0]; var bottom = points2[0]; for (var i2 = 0; i2 < points2.length; i2++) { var p = points2[i2]; if (p[0] < left[0]) left = p; if (p[0] > right[0]) right = p; if (p[1] < top[1]) top = p; if (p[1] > bottom[1]) bottom = p; } var cull = [left, top, right, bottom]; var filtered = cull.slice(); for (i2 = 0; i2 < points2.length; i2++) { if (!pointInPolygon2(points2[i2], cull)) filtered.push(points2[i2]); } return convexHull(filtered); } function insertNode(p, prev) { var node = { p, prev: null, next: null, minX: 0, minY: 0, maxX: 0, maxY: 0 }; if (!prev) { node.prev = node; node.next = node; } else { node.next = prev.next; node.prev = prev; prev.next.prev = node; prev.next = node; } return node; } function getSqDist(p1, p2) { var dx = p1[0] - p2[0], dy = p1[1] - p2[1]; return dx * dx + dy * dy; } function sqSegDist(p, p1, p2) { var x = p1[0], y = p1[1], dx = p2[0] - x, dy = p2[1] - y; if (dx !== 0 || dy !== 0) { var t2 = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy); if (t2 > 1) { x = p2[0]; y = p2[1]; } else if (t2 > 0) { x += dx * t2; y += dy * t2; } } dx = p[0] - x; dy = p[1] - y; return dx * dx + dy * dy; } function sqSegSegDist(x0, y0, x1, y1, x2, y2, x3, y3) { var ux = x1 - x0; var uy = y1 - y0; var vx = x3 - x2; var vy = y3 - y2; var wx = x0 - x2; var wy = y0 - y2; var a = ux * ux + uy * uy; var b = ux * vx + uy * vy; var c = vx * vx + vy * vy; var d2 = ux * wx + uy * wy; var e = vx * wx + vy * wy; var D = a * c - b * b; var sc, sN, tc, tN; var sD = D; var tD = D; if (D === 0) { sN = 0; sD = 1; tN = e; tD = c; } else { sN = b * e - c * d2; tN = a * e - b * d2; if (sN < 0) { sN = 0; tN = e; tD = c; } else if (sN > sD) { sN = sD; tN = e + b; tD = c; } } if (tN < 0) { tN = 0; if (-d2 < 0) sN = 0; else if (-d2 > a) sN = sD; else { sN = -d2; sD = a; } } else if (tN > tD) { tN = tD; if (-d2 + b < 0) sN = 0; else if (-d2 + b > a) sN = sD; else { sN = -d2 + b; sD = a; } } sc = sN === 0 ? 0 : sN / sD; tc = tN === 0 ? 0 : tN / tD; var cx = (1 - sc) * x0 + sc * x1; var cy = (1 - sc) * y0 + sc * y1; var cx2 = (1 - tc) * x2 + tc * x3; var cy2 = (1 - tc) * y2 + tc * y3; var dx = cx2 - cx; var dy = cy2 - cy; return dx * dx + dy * dy; } function compareByX(a, b) { return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0]; } function convexHull(points2) { points2.sort(compareByX); var lower = []; for (var i2 = 0; i2 < points2.length; i2++) { while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points2[i2]) <= 0) { lower.pop(); } lower.push(points2[i2]); } var upper = []; for (var ii = points2.length - 1; ii >= 0; ii--) { while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points2[ii]) <= 0) { upper.pop(); } upper.push(points2[ii]); } upper.pop(); lower.pop(); return lower.concat(upper); } var concaveman$1 = concaveman$2.exports; function convex(geojson, options2) { if (options2 === void 0) { options2 = {}; } options2.concavity = options2.concavity || Infinity; var points2 = []; coordEach(geojson, function(coord) { points2.push([coord[0], coord[1]]); }); if (!points2.length) { return null; } var convexHull2 = concaveman$1(points2, options2.concavity); if (convexHull2.length > 3) { return polygon([convexHull2]); } return null; } function booleanPointInPolygon(point2, polygon2, options2) { if (options2 === void 0) { options2 = {}; } if (!point2) { throw new Error("point is required"); } if (!polygon2) { throw new Error("polygon is required"); } var pt2 = getCoord(point2); var geom = getGeom(polygon2); var type2 = geom.type; var bbox2 = polygon2.bbox; var polys = geom.coordinates; if (bbox2 && inBBox(pt2, bbox2) === false) { return false; } if (type2 === "Polygon") { polys = [polys]; } var insidePoly = false; for (var i2 = 0; i2 < polys.length && !insidePoly; i2++) { if (inRing(pt2, polys[i2][0], options2.ignoreBoundary)) { var inHole = false; var k = 1; while (k < polys[i2].length && !inHole) { if (inRing(pt2, polys[i2][k], !options2.ignoreBoundary)) { inHole = true; } k++; } if (!inHole) { insidePoly = true; } } } return insidePoly; } function inRing(pt2, ring, ignoreBoundary) { var isInside = false; if (ring[0][0] === ring[ring.length - 1][0] && ring[0][1] === ring[ring.length - 1][1]) { ring = ring.slice(0, ring.length - 1); } for (var i2 = 0, j = ring.length - 1; i2 < ring.length; j = i2++) { var xi = ring[i2][0]; var yi = ring[i2][1]; var xj = ring[j][0]; var yj = ring[j][1]; var onBoundary = pt2[1] * (xi - xj) + yi * (xj - pt2[0]) + yj * (pt2[0] - xi) === 0 && (xi - pt2[0]) * (xj - pt2[0]) <= 0 && (yi - pt2[1]) * (yj - pt2[1]) <= 0; if (onBoundary) { return !ignoreBoundary; } var intersect = yi > pt2[1] !== yj > pt2[1] && pt2[0] < (xj - xi) * (pt2[1] - yi) / (yj - yi) + xi; if (intersect) { isInside = !isInside; } } return isInside; } function inBBox(pt2, bbox2) { return bbox2[0] <= pt2[0] && bbox2[1] <= pt2[1] && bbox2[2] >= pt2[0] && bbox2[3] >= pt2[1]; } function distance(from3, to, options2) { if (options2 === void 0) { options2 = {}; } var coordinates1 = getCoord(from3); var coordinates2 = getCoord(to); var dLat = degreesToRadians(coordinates2[1] - coordinates1[1]); var dLon = degreesToRadians(coordinates2[0] - coordinates1[0]); var lat1 = degreesToRadians(coordinates1[1]); var lat2 = degreesToRadians(coordinates2[1]); var a = Math.pow(Math.sin(dLat / 2), 2) + Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2); return radiansToLength(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)), options2.units); } function bboxPolygon(bbox2, options2) { if (options2 === void 0) { options2 = {}; } var west = Number(bbox2[0]); var south = Number(bbox2[1]); var east = Number(bbox2[2]); var north = Number(bbox2[3]); if (bbox2.length === 6) { throw new Error("@turf/bbox-polygon does not support BBox with 6 positions"); } var lowLeft = [west, south]; var topLeft = [west, north]; var topRight = [east, north]; var lowRight = [east, south]; return polygon([[lowLeft, lowRight, topRight, topLeft, lowLeft]], options2.properties, { bbox: bbox2, id: options2.id }); } function destination(origin, distance2, bearing2, options2) { if (options2 === void 0) { options2 = {}; } var coordinates1 = getCoord(origin); var longitude1 = degreesToRadians(coordinates1[0]); var latitude1 = degreesToRadians(coordinates1[1]); var bearingRad = degreesToRadians(bearing2); var radians = lengthToRadians(distance2, options2.units); var latitude2 = Math.asin(Math.sin(latitude1) * Math.cos(radians) + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad)); var longitude2 = longitude1 + Math.atan2(Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1), Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2)); var lng = radiansToDegrees(longitude2); var lat = radiansToDegrees(latitude2); return point([lng, lat], options2.properties); } function bearing(start2, end, options2) { if (options2 === void 0) { options2 = {}; } if (options2.final === true) { return calculateFinalBearing(start2, end); } var coordinates1 = getCoord(start2); var coordinates2 = getCoord(end); var lon1 = degreesToRadians(coordinates1[0]); var lon2 = degreesToRadians(coordinates2[0]); var lat1 = degreesToRadians(coordinates1[1]); var lat2 = degreesToRadians(coordinates2[1]); var a = Math.sin(lon2 - lon1) * Math.cos(lat2); var b = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1); return radiansToDegrees(Math.atan2(a, b)); } function calculateFinalBearing(start2, end) { var bear = bearing(end, start2); bear = (bear + 180) % 360; return bear; } function midpoint(point1, point2) { var dist = distance(point1, point2); var heading = bearing(point1, point2); var midpoint2 = destination(point1, dist / 2, heading); return midpoint2; } function center(geojson, options2) { if (options2 === void 0) { options2 = {}; } var ext = bbox$1(geojson); var x = (ext[0] + ext[2]) / 2; var y = (ext[1] + ext[3]) / 2; return point([x, y], options2.properties, options2); } function centroid(geojson, options2) { if (options2 === void 0) { options2 = {}; } var xSum = 0; var ySum = 0; var len = 0; coordEach(geojson, function(coord) { xSum += coord[0]; ySum += coord[1]; len++; }, true); return point([xSum / len, ySum / len], options2.properties); } function centerOfMass(geojson, options2) { if (options2 === void 0) { options2 = {}; } switch (getType(geojson)) { case "Point": return point(getCoord(geojson), options2.properties); case "Polygon": var coords = []; coordEach(geojson, function(coord) { coords.push(coord); }); var centre = centroid(geojson, { properties: options2.properties }); var translation = centre.geometry.coordinates; var sx = 0; var sy = 0; var sArea = 0; var i2, pi, pj, xi, xj, yi, yj, a; var neutralizedPoints = coords.map(function(point2) { return [point2[0] - translation[0], point2[1] - translation[1]]; }); for (i2 = 0; i2 < coords.length - 1; i2++) { pi = neutralizedPoints[i2]; xi = pi[0]; yi = pi[1]; pj = neutralizedPoints[i2 + 1]; xj = pj[0]; yj = pj[1]; a = xi * yj - xj * yi; sArea += a; sx += (xi + xj) * a; sy += (yi + yj) * a; } if (sArea === 0) { return centre; } else { var area = sArea * 0.5; var areaFactor = 1 / (6 * area); return point([translation[0] + areaFactor * sx, translation[1] + areaFactor * sy], options2.properties); } default: var hull = convex(geojson); if (hull) return centerOfMass(hull, { properties: options2.properties }); else return centroid(geojson, { properties: options2.properties }); } } function lineSegment(geojson) { if (!geojson) { throw new Error("geojson is required"); } var results = []; flattenEach(geojson, function(feature2) { lineSegmentFeature(feature2, results); }); return featureCollection$1(results); } function lineSegmentFeature(geojson, results) { var coords = []; var geometry2 = geojson.geometry; if (geometry2 !== null) { switch (geometry2.type) { case "Polygon": coords = getCoords(geometry2); break; case "LineString": coords = [getCoords(geometry2)]; } coords.forEach(function(coord) { var segments = createSegments(coord, geojson.properties); segments.forEach(function(segment) { segment.id = results.length; results.push(segment); }); }); } } function createSegments(coords, properties) { var segments = []; coords.reduce(function(previousCoords, currentCoords) { var segment = lineString([previousCoords, currentCoords], properties); segment.bbox = bbox(previousCoords, currentCoords); segments.push(segment); return currentCoords; }); return segments; } function bbox(coords1, coords2) { var x1 = coords1[0]; var y1 = coords1[1]; var x2 = coords2[0]; var y2 = coords2[1]; var west = x1 < x2 ? x1 : x2; var south = y1 < y2 ? y1 : y2; var east = x1 > x2 ? x1 : x2; var north = y1 > y2 ? y1 : y2; return [west, south, east, north]; } var geojsonRbush$1 = { exports: {} }; var rbush_min = { exports: {} }; (function(module2, exports2) { !function(t2, i2) { module2.exports = i2(); }(commonjsGlobal, function() { function t2(t3, r3, e2, a2, h3) { !function t4(n2, r4, e3, a3, h4) { for (; a3 > e3; ) { if (a3 - e3 > 600) { var o2 = a3 - e3 + 1, s2 = r4 - e3 + 1, l2 = Math.log(o2), f2 = 0.5 * Math.exp(2 * l2 / 3), u2 = 0.5 * Math.sqrt(l2 * f2 * (o2 - f2) / o2) * (s2 - o2 / 2 < 0 ? -1 : 1), m2 = Math.max(e3, Math.floor(r4 - s2 * f2 / o2 + u2)), c2 = Math.min(a3, Math.floor(r4 + (o2 - s2) * f2 / o2 + u2)); t4(n2, r4, m2, c2, h4); } var p2 = n2[r4], d3 = e3, x = a3; for (i2(n2, e3, r4), h4(n2[a3], p2) > 0 && i2(n2, e3, a3); d3 < x; ) { for (i2(n2, d3, x), d3++, x--; h4(n2[d3], p2) < 0; ) d3++; for (; h4(n2[x], p2) > 0; ) x--; } 0 === h4(n2[e3], p2) ? i2(n2, e3, x) : i2(n2, ++x, a3), x <= r4 && (e3 = x + 1), r4 <= x && (a3 = x - 1); } }(t3, r3, e2 || 0, a2 || t3.length - 1, h3 || n); } function i2(t3, i3, n2) { var r3 = t3[i3]; t3[i3] = t3[n2], t3[n2] = r3; } function n(t3, i3) { return t3 < i3 ? -1 : t3 > i3 ? 1 : 0; } var r2 = function(t3) { void 0 === t3 && (t3 = 9), this._maxEntries = Math.max(4, t3), this._minEntries = Math.max(2, Math.ceil(0.4 * this._maxEntries)), this.clear(); }; function e(t3, i3, n2) { if (!n2) return i3.indexOf(t3); for (var r3 = 0; r3 < i3.length; r3++) if (n2(t3, i3[r3])) return r3; return -1; } function a(t3, i3) { h2(t3, 0, t3.children.length, i3, t3); } function h2(t3, i3, n2, r3, e2) { e2 || (e2 = p(null)), e2.minX = 1 / 0, e2.minY = 1 / 0, e2.maxX = -1 / 0, e2.maxY = -1 / 0; for (var a2 = i3; a2 < n2; a2++) { var h3 = t3.children[a2]; o(e2, t3.leaf ? r3(h3) : h3); } return e2; } function o(t3, i3) { return t3.minX = Math.min(t3.minX, i3.minX), t3.minY = Math.min(t3.minY, i3.minY), t3.maxX = Math.max(t3.maxX, i3.maxX), t3.maxY = Math.max(t3.maxY, i3.maxY), t3; } function s(t3, i3) { return t3.minX - i3.minX; } function l(t3, i3) { return t3.minY - i3.minY; } function f(t3) { return (t3.maxX - t3.minX) * (t3.maxY - t3.minY); } function u(t3) { return t3.maxX - t3.minX + (t3.maxY - t3.minY); } function m(t3, i3) { return t3.minX <= i3.minX && t3.minY <= i3.minY && i3.maxX <= t3.maxX && i3.maxY <= t3.maxY; } function c(t3, i3) { return i3.minX <= t3.maxX && i3.minY <= t3.maxY && i3.maxX >= t3.minX && i3.maxY >= t3.minY; } function p(t3) { return { children: t3, height: 1, leaf: true, minX: 1 / 0, minY: 1 / 0, maxX: -1 / 0, maxY: -1 / 0 }; } function d2(i3, n2, r3, e2, a2) { for (var h3 = [n2, r3]; h3.length; ) if (!((r3 = h3.pop()) - (n2 = h3.pop()) <= e2)) { var o2 = n2 + Math.ceil((r3 - n2) / e2 / 2) * e2; t2(i3, o2, n2, r3, a2), h3.push(n2, o2, o2, r3); } } return r2.prototype.all = function() { return this._all(this.data, []); }, r2.prototype.search = function(t3) { var i3 = this.data, n2 = []; if (!c(t3, i3)) return n2; for (var r3 = this.toBBox, e2 = []; i3; ) { for (var a2 = 0; a2 < i3.children.length; a2++) { var h3 = i3.children[a2], o2 = i3.leaf ? r3(h3) : h3; c(t3, o2) && (i3.leaf ? n2.push(h3) : m(t3, o2) ? this._all(h3, n2) : e2.push(h3)); } i3 = e2.pop(); } return n2; }, r2.prototype.collides = function(t3) { var i3 = this.data; if (!c(t3, i3)) return false; for (var n2 = []; i3; ) { for (var r3 = 0; r3 < i3.children.length; r3++) { var e2 = i3.children[r3], a2 = i3.leaf ? this.toBBox(e2) : e2; if (c(t3, a2)) { if (i3.leaf || m(t3, a2)) return true; n2.push(e2); } } i3 = n2.pop(); } return false; }, r2.prototype.load = function(t3) { if (!t3 || !t3.length) return this; if (t3.length < this._minEntries) { for (var i3 = 0; i3 < t3.length; i3++) this.insert(t3[i3]); return this; } var n2 = this._build(t3.slice(), 0, t3.length - 1, 0); if (this.data.children.length) if (this.data.height === n2.height) this._splitRoot(this.data, n2); else { if (this.data.height < n2.height) { var r3 = this.data; this.data = n2, n2 = r3; } this._insert(n2, this.data.height - n2.height - 1, true); } else this.data = n2; return this; }, r2.prototype.insert = function(t3) { return t3 && this._insert(t3, this.data.height - 1), this; }, r2.prototype.clear = function() { return this.data = p([]), this; }, r2.prototype.remove = function(t3, i3) { if (!t3) return this; for (var n2, r3, a2, h3 = this.data, o2 = this.toBBox(t3), s2 = [], l2 = []; h3 || s2.length; ) { if (h3 || (h3 = s2.pop(), r3 = s2[s2.length - 1], n2 = l2.pop(), a2 = true), h3.leaf) { var f2 = e(t3, h3.children, i3); if (-1 !== f2) return h3.children.splice(f2, 1), s2.push(h3), this._condense(s2), this; } a2 || h3.leaf || !m(h3, o2) ? r3 ? (n2++, h3 = r3.children[n2], a2 = false) : h3 = null : (s2.push(h3), l2.push(n2), n2 = 0, r3 = h3, h3 = h3.children[0]); } return this; }, r2.prototype.toBBox = function(t3) { return t3; }, r2.prototype.compareMinX = function(t3, i3) { return t3.minX - i3.minX; }, r2.prototype.compareMinY = function(t3, i3) { return t3.minY - i3.minY; }, r2.prototype.toJSON = function() { return this.data; }, r2.prototype.fromJSON = function(t3) { return this.data = t3, this; }, r2.prototype._all = function(t3, i3) { for (var n2 = []; t3; ) t3.leaf ? i3.push.apply(i3, t3.children) : n2.push.apply(n2, t3.children), t3 = n2.pop(); return i3; }, r2.prototype._build = function(t3, i3, n2, r3) { var e2, h3 = n2 - i3 + 1, o2 = this._maxEntries; if (h3 <= o2) return a(e2 = p(t3.slice(i3, n2 + 1)), this.toBBox), e2; r3 || (r3 = Math.ceil(Math.log(h3) / Math.log(o2)), o2 = Math.ceil(h3 / Math.pow(o2, r3 - 1))), (e2 = p([])).leaf = false, e2.height = r3; var s2 = Math.ceil(h3 / o2), l2 = s2 * Math.ceil(Math.sqrt(o2)); d2(t3, i3, n2, l2, this.compareMinX); for (var f2 = i3; f2 <= n2; f2 += l2) { var u2 = Math.min(f2 + l2 - 1, n2); d2(t3, f2, u2, s2, this.compareMinY); for (var m2 = f2; m2 <= u2; m2 += s2) { var c2 = Math.min(m2 + s2 - 1, u2); e2.children.push(this._build(t3, m2, c2, r3 - 1)); } } return a(e2, this.toBBox), e2; }, r2.prototype._chooseSubtree = function(t3, i3, n2, r3) { for (; r3.push(i3), !i3.leaf && r3.length - 1 !== n2; ) { for (var e2 = 1 / 0, a2 = 1 / 0, h3 = void 0, o2 = 0; o2 < i3.children.length; o2++) { var s2 = i3.children[o2], l2 = f(s2), u2 = (m2 = t3, c2 = s2, (Math.max(c2.maxX, m2.maxX) - Math.min(c2.minX, m2.minX)) * (Math.max(c2.maxY, m2.maxY) - Math.min(c2.minY, m2.minY)) - l2); u2 < a2 ? (a2 = u2, e2 = l2 < e2 ? l2 : e2, h3 = s2) : u2 === a2 && l2 < e2 && (e2 = l2, h3 = s2); } i3 = h3 || i3.children[0]; } var m2, c2; return i3; }, r2.prototype._insert = function(t3, i3, n2) { var r3 = n2 ? t3 : this.toBBox(t3), e2 = [], a2 = this._chooseSubtree(r3, this.data, i3, e2); for (a2.children.push(t3), o(a2, r3); i3 >= 0 && e2[i3].children.length > this._maxEntries; ) this._split(e2, i3), i3--; this._adjustParentBBoxes(r3, e2, i3); }, r2.prototype._split = function(t3, i3) { var n2 = t3[i3], r3 = n2.children.length, e2 = this._minEntries; this._chooseSplitAxis(n2, e2, r3); var h3 = this._chooseSplitIndex(n2, e2, r3), o2 = p(n2.children.splice(h3, n2.children.length - h3)); o2.height = n2.height, o2.leaf = n2.leaf, a(n2, this.toBBox), a(o2, this.toBBox), i3 ? t3[i3 - 1].children.push(o2) : this._splitRoot(n2, o2); }, r2.prototype._splitRoot = function(t3, i3) { this.data = p([t3, i3]), this.data.height = t3.height + 1, this.data.leaf = false, a(this.data, this.toBBox); }, r2.prototype._chooseSplitIndex = function(t3, i3, n2) { for (var r3, e2, a2, o2, s2, l2, u2, m2 = 1 / 0, c2 = 1 / 0, p2 = i3; p2 <= n2 - i3; p2++) { var d3 = h2(t3, 0, p2, this.toBBox), x = h2(t3, p2, n2, this.toBBox), v = (e2 = d3, a2 = x, o2 = void 0, s2 = void 0, l2 = void 0, u2 = void 0, o2 = Math.max(e2.minX, a2.minX), s2 = Math.max(e2.minY, a2.minY), l2 = Math.min(e2.maxX, a2.maxX), u2 = Math.min(e2.maxY, a2.maxY), Math.max(0, l2 - o2) * Math.max(0, u2 - s2)), M = f(d3) + f(x); v < m2 ? (m2 = v, r3 = p2, c2 = M < c2 ? M : c2) : v === m2 && M < c2 && (c2 = M, r3 = p2); } return r3 || n2 - i3; }, r2.prototype._chooseSplitAxis = function(t3, i3, n2) { var r3 = t3.leaf ? this.compareMinX : s, e2 = t3.leaf ? this.compareMinY : l; this._allDistMargin(t3, i3, n2, r3) < this._allDistMargin(t3, i3, n2, e2) && t3.children.sort(r3); }, r2.prototype._allDistMargin = function(t3, i3, n2, r3) { t3.children.sort(r3); for (var e2 = this.toBBox, a2 = h2(t3, 0, i3, e2), s2 = h2(t3, n2 - i3, n2, e2), l2 = u(a2) + u(s2), f2 = i3; f2 < n2 - i3; f2++) { var m2 = t3.children[f2]; o(a2, t3.leaf ? e2(m2) : m2), l2 += u(a2); } for (var c2 = n2 - i3 - 1; c2 >= i3; c2--) { var p2 = t3.children[c2]; o(s2, t3.leaf ? e2(p2) : p2), l2 += u(s2); } return l2; }, r2.prototype._adjustParentBBoxes = function(t3, i3, n2) { for (var r3 = n2; r3 >= 0; r3--) o(i3[r3], t3); }, r2.prototype._condense = function(t3) { for (var i3 = t3.length - 1, n2 = void 0; i3 >= 0; i3--) 0 === t3[i3].children.length ? i3 > 0 ? (n2 = t3[i3 - 1].children).splice(n2.indexOf(t3[i3]), 1) : this.clear() : a(t3[i3], this.toBBox); }, r2; }); })(rbush_min); var require$$1$1 = /* @__PURE__ */ getAugmentedNamespace(es$2); var require$$2 = /* @__PURE__ */ getAugmentedNamespace(es$1); var require$$3 = /* @__PURE__ */ getAugmentedNamespace(es); var rbush = rbush_min.exports; var helpers = require$$1$1; var meta = require$$2; var turfBBox = require$$3.default; var featureEach = meta.featureEach; meta.coordEach; helpers.polygon; var featureCollection = helpers.featureCollection; function geojsonRbush(maxEntries) { var tree = new rbush(maxEntries); tree.insert = function(feature2) { if (feature2.type !== "Feature") throw new Error("invalid feature"); feature2.bbox = feature2.bbox ? feature2.bbox : turfBBox(feature2); return rbush.prototype.insert.call(this, feature2); }; tree.load = function(features) { var load = []; if (Array.isArray(features)) { features.forEach(function(feature2) { if (feature2.type !== "Feature") throw new Error("invalid features"); feature2.bbox = feature2.bbox ? feature2.bbox : turfBBox(feature2); load.push(feature2); }); } else { featureEach(features, function(feature2) { if (feature2.type !== "Feature") throw new Error("invalid features"); feature2.bbox = feature2.bbox ? feature2.bbox : turfBBox(feature2); load.push(feature2); }); } return rbush.prototype.load.call(this, load); }; tree.remove = function(feature2, equals) { if (feature2.type !== "Feature") throw new Error("invalid feature"); feature2.bbox = feature2.bbox ? feature2.bbox : turfBBox(feature2); return rbush.prototype.remove.call(this, feature2, equals); }; tree.clear = function() { return rbush.prototype.clear.call(this); }; tree.search = function(geojson) { var features = rbush.prototype.search.call(this, this.toBBox(geojson)); return featureCollection(features); }; tree.collides = function(geojson) { return rbush.prototype.collides.call(this, this.toBBox(geojson)); }; tree.all = function() { var features = rbush.prototype.all.call(this); return featureCollection(features); }; tree.toJSON = function() { return rbush.prototype.toJSON.call(this); }; tree.fromJSON = function(json) { return rbush.prototype.fromJSON.call(this, json); }; tree.toBBox = function(geojson) { var bbox2; if (geojson.bbox) bbox2 = geojson.bbox; else if (Array.isArray(geojson) && geojson.length === 4) bbox2 = geojson; else if (Array.isArray(geojson) && geojson.length === 6) bbox2 = [geojson[0], geojson[1], geojson[3], geojson[4]]; else if (geojson.type === "Feature") bbox2 = turfBBox(geojson); else if (geojson.type === "FeatureCollection") bbox2 = turfBBox(geojson); else throw new Error("invalid geojson"); return { minX: bbox2[0], minY: bbox2[1], maxX: bbox2[2], maxY: bbox2[3] }; }; return tree; } geojsonRbush$1.exports = geojsonRbush; geojsonRbush$1.exports.default = geojsonRbush; var rbush$1 = geojsonRbush$1.exports; function lineIntersect(line1, line2) { var unique = {}; var results = []; if (line1.type === "LineString") { line1 = feature(line1); } if (line2.type === "LineString") { line2 = feature(line2); } if (line1.type === "Feature" && line2.type === "Feature" && line1.geometry !== null && line2.geometry !== null && line1.geometry.type === "LineString" && line2.geometry.type === "LineString" && line1.geometry.coordinates.length === 2 && line2.geometry.coordinates.length === 2) { var intersect = intersects(line1, line2); if (intersect) { results.push(intersect); } return featureCollection$1(results); } var tree = rbush$1(); tree.load(lineSegment(line2)); featureEach$1(lineSegment(line1), function(segment) { featureEach$1(tree.search(segment), function(match) { var intersect2 = intersects(segment, match); if (intersect2) { var key = getCoords(intersect2).join(","); if (!unique[key]) { unique[key] = true; results.push(intersect2); } } }); }); return featureCollection$1(results); } function intersects(line1, line2) { var coords1 = getCoords(line1); var coords2 = getCoords(line2); if (coords1.length !== 2) { throw new Error(" line1 must only contain 2 coordinates"); } if (coords2.length !== 2) { throw new Error(" line2 must only contain 2 coordinates"); } var x1 = coords1[0][0]; var y1 = coords1[0][1]; var x2 = coords1[1][0]; var y2 = coords1[1][1]; var x3 = coords2[0][0]; var y3 = coords2[0][1]; var x4 = coords2[1][0]; var y4 = coords2[1][1]; var denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); var numeA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3); var numeB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3); if (denom === 0) { if (numeA === 0 && numeB === 0) { return null; } return null; } var uA = numeA / denom; var uB = numeB / denom; if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) { var x = x1 + uA * (x2 - x1); var y = y1 + uA * (y2 - y1); return point([x, y]); } return null; } function booleanPointOnLine(pt2, line, options2) { if (options2 === void 0) { options2 = {}; } var ptCoords = getCoord(pt2); var lineCoords = getCoords(line); for (var i2 = 0; i2 < lineCoords.length - 1; i2++) { var ignoreBoundary = false; if (options2.ignoreEndVertices) { if (i2 === 0) { ignoreBoundary = "start"; } if (i2 === lineCoords.length - 2) { ignoreBoundary = "end"; } if (i2 === 0 && i2 + 1 === lineCoords.length - 1) { ignoreBoundary = "both"; } } if (isPointOnLineSegment$1(lineCoords[i2], lineCoords[i2 + 1], ptCoords, ignoreBoundary, typeof options2.epsilon === "undefined" ? null : options2.epsilon)) { return true; } } return false; } function isPointOnLineSegment$1(lineSegmentStart, lineSegmentEnd, pt2, excludeBoundary, epsilon) { var x = pt2[0]; var y = pt2[1]; var x1 = lineSegmentStart[0]; var y1 = lineSegmentStart[1]; var x2 = lineSegmentEnd[0]; var y2 = lineSegmentEnd[1]; var dxc = pt2[0] - x1; var dyc = pt2[1] - y1; var dxl = x2 - x1; var dyl = y2 - y1; var cross2 = dxc * dyl - dyc * dxl; if (epsilon !== null) { if (Math.abs(cross2) > epsilon) { return false; } } else if (cross2 !== 0) { return false; } if (!excludeBoundary) { if (Math.abs(dxl) >= Math.abs(dyl)) { return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1; } return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1; } else if (excludeBoundary === "start") { if (Math.abs(dxl) >= Math.abs(dyl)) { return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1; } return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1; } else if (excludeBoundary === "end") { if (Math.abs(dxl) >= Math.abs(dyl)) { return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1; } return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1; } else if (excludeBoundary === "both") { if (Math.abs(dxl) >= Math.abs(dyl)) { return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1; } return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1; } return false; } function booleanWithin(feature1, feature2) { var geom1 = getGeom(feature1); var geom2 = getGeom(feature2); var type1 = geom1.type; var type2 = geom2.type; switch (type1) { case "Point": switch (type2) { case "MultiPoint": return isPointInMultiPoint(geom1, geom2); case "LineString": return booleanPointOnLine(geom1, geom2, { ignoreEndVertices: true }); case "Polygon": case "MultiPolygon": return booleanPointInPolygon(geom1, geom2, { ignoreBoundary: true }); default: throw new Error("feature2 " + type2 + " geometry not supported"); } case "MultiPoint": switch (type2) { case "MultiPoint": return isMultiPointInMultiPoint(geom1, geom2); case "LineString": return isMultiPointOnLine(geom1, geom2); case "Polygon": case "MultiPolygon": return isMultiPointInPoly(geom1, geom2); default: throw new Error("feature2 " + type2 + " geometry not supported"); } case "LineString": switch (type2) { case "LineString": return isLineOnLine$1(geom1, geom2); case "Polygon": case "MultiPolygon": return isLineInPoly$1(geom1, geom2); default: throw new Error("feature2 " + type2 + " geometry not supported"); } case "Polygon": switch (type2) { case "Polygon": case "MultiPolygon": return isPolyInPoly$1(geom1, geom2); default: throw new Error("feature2 " + type2 + " geometry not supported"); } default: throw new Error("feature1 " + type1 + " geometry not supported"); } } function isPointInMultiPoint(point2, multiPoint2) { var i2; var output = false; for (i2 = 0; i2 < multiPoint2.coordinates.length; i2++) { if (compareCoords$1(multiPoint2.coordinates[i2], point2.coordinates)) { output = true; break; } } return output; } function isMultiPointInMultiPoint(multiPoint1, multiPoint2) { for (var i2 = 0; i2 < multiPoint1.coordinates.length; i2++) { var anyMatch = false; for (var i22 = 0; i22 < multiPoint2.coordinates.length; i22++) { if (compareCoords$1(multiPoint1.coordinates[i2], multiPoint2.coordinates[i22])) { anyMatch = true; } } if (!anyMatch) { return false; } } return true; } function isMultiPointOnLine(multiPoint2, lineString2) { var foundInsidePoint = false; for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) { if (!booleanPointOnLine(multiPoint2.coordinates[i2], lineString2)) { return false; } if (!foundInsidePoint) { foundInsidePoint = booleanPointOnLine(multiPoint2.coordinates[i2], lineString2, { ignoreEndVertices: true }); } } return foundInsidePoint; } function isMultiPointInPoly(multiPoint2, polygon2) { var output = true; var isInside = false; for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) { isInside = booleanPointInPolygon(multiPoint2.coordinates[1], polygon2); if (!isInside) { output = false; break; } { isInside = booleanPointInPolygon(multiPoint2.coordinates[1], polygon2, { ignoreBoundary: true }); } } return output && isInside; } function isLineOnLine$1(lineString1, lineString2) { for (var i2 = 0; i2 < lineString1.coordinates.length; i2++) { if (!booleanPointOnLine(lineString1.coordinates[i2], lineString2)) { return false; } } return true; } function isLineInPoly$1(linestring, polygon2) { var polyBbox = bbox$1(polygon2); var lineBbox = bbox$1(linestring); if (!doBBoxOverlap(polyBbox, lineBbox)) { return false; } var foundInsidePoint = false; for (var i2 = 0; i2 < linestring.coordinates.length - 1; i2++) { if (!booleanPointInPolygon(linestring.coordinates[i2], polygon2)) { return false; } if (!foundInsidePoint) { foundInsidePoint = booleanPointInPolygon(linestring.coordinates[i2], polygon2, { ignoreBoundary: true }); } if (!foundInsidePoint) { var midpoint2 = getMidpoint(linestring.coordinates[i2], linestring.coordinates[i2 + 1]); foundInsidePoint = booleanPointInPolygon(midpoint2, polygon2, { ignoreBoundary: true }); } } return foundInsidePoint; } function isPolyInPoly$1(geometry1, geometry2) { var poly1Bbox = bbox$1(geometry1); var poly2Bbox = bbox$1(geometry2); if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) { return false; } for (var i2 = 0; i2 < geometry1.coordinates[0].length; i2++) { if (!booleanPointInPolygon(geometry1.coordinates[0][i2], geometry2)) { return false; } } return true; } function doBBoxOverlap(bbox1, bbox2) { if (bbox1[0] > bbox2[0]) return false; if (bbox1[2] < bbox2[2]) return false; if (bbox1[1] > bbox2[1]) return false; if (bbox1[3] < bbox2[3]) return false; return true; } function compareCoords$1(pair1, pair2) { return pair1[0] === pair2[0] && pair1[1] === pair2[1]; } function getMidpoint(pair1, pair2) { return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2]; } function pointGrid(bbox2, cellSide, options2) { if (options2 === void 0) { options2 = {}; } if (options2.mask && !options2.units) options2.units = "kilometers"; var results = []; var west = bbox2[0]; var south = bbox2[1]; var east = bbox2[2]; var north = bbox2[3]; var xFraction = cellSide / distance([west, south], [east, south], options2); var cellWidth = xFraction * (east - west); var yFraction = cellSide / distance([west, south], [west, north], options2); var cellHeight = yFraction * (north - south); var bboxWidth = east - west; var bboxHeight = north - south; var columns = Math.floor(bboxWidth / cellWidth); var rows = Math.floor(bboxHeight / cellHeight); var deltaX = (bboxWidth - columns * cellWidth) / 2; var deltaY = (bboxHeight - rows * cellHeight) / 2; var currentX = west + deltaX; while (currentX <= east) { var currentY = south + deltaY; while (currentY <= north) { var cellPt = point([currentX, currentY], options2.properties); if (options2.mask) { if (booleanWithin(cellPt, options2.mask)) results.push(cellPt); } else { results.push(cellPt); } currentY += cellHeight; } currentX += cellWidth; } return featureCollection$1(results); } function polygonToLine(poly, options2) { if (options2 === void 0) { options2 = {}; } var geom = getGeom(poly); if (!options2.properties && poly.type === "Feature") { options2.properties = poly.properties; } switch (geom.type) { case "Polygon": return polygonToLine$1(geom, options2); case "MultiPolygon": return multiPolygonToLine(geom, options2); default: throw new Error("invalid poly"); } } function polygonToLine$1(poly, options2) { if (options2 === void 0) { options2 = {}; } var geom = getGeom(poly); var coords = geom.coordinates; var properties = options2.properties ? options2.properties : poly.type === "Feature" ? poly.properties : {}; return coordsToLine(coords, properties); } function multiPolygonToLine(multiPoly, options2) { if (options2 === void 0) { options2 = {}; } var geom = getGeom(multiPoly); var coords = geom.coordinates; var properties = options2.properties ? options2.properties : multiPoly.type === "Feature" ? multiPoly.properties : {}; var lines = []; coords.forEach(function(coord) { lines.push(coordsToLine(coord, properties)); }); return featureCollection$1(lines); } function coordsToLine(coords, properties) { if (coords.length > 1) { return multiLineString(coords, properties); } return lineString(coords[0], properties); } function booleanClockwise(line) { var ring = getCoords(line); var sum = 0; var i2 = 1; var prev; var cur; while (i2 < ring.length) { prev = cur || ring[0]; cur = ring[i2]; sum += (cur[0] - prev[0]) * (cur[1] + prev[1]); i2++; } return sum > 0; } function booleanDisjoint(feature1, feature2) { var bool = true; flattenEach(feature1, function(flatten1) { flattenEach(feature2, function(flatten22) { if (bool === false) { return false; } bool = disjoint(flatten1.geometry, flatten22.geometry); }); }); return bool; } function disjoint(geom1, geom2) { switch (geom1.type) { case "Point": switch (geom2.type) { case "Point": return !compareCoords(geom1.coordinates, geom2.coordinates); case "LineString": return !isPointOnLine(geom2, geom1); case "Polygon": return !booleanPointInPolygon(geom1, geom2); } break; case "LineString": switch (geom2.type) { case "Point": return !isPointOnLine(geom1, geom2); case "LineString": return !isLineOnLine(geom1, geom2); case "Polygon": return !isLineInPoly(geom2, geom1); } break; case "Polygon": switch (geom2.type) { case "Point": return !booleanPointInPolygon(geom2, geom1); case "LineString": return !isLineInPoly(geom1, geom2); case "Polygon": return !isPolyInPoly(geom2, geom1); } } return false; } function isPointOnLine(lineString2, pt2) { for (var i2 = 0; i2 < lineString2.coordinates.length - 1; i2++) { if (isPointOnLineSegment(lineString2.coordinates[i2], lineString2.coordinates[i2 + 1], pt2.coordinates)) { return true; } } return false; } function isLineOnLine(lineString1, lineString2) { var doLinesIntersect = lineIntersect(lineString1, lineString2); if (doLinesIntersect.features.length > 0) { return true; } return false; } function isLineInPoly(polygon2, lineString2) { for (var _i = 0, _a2 = lineString2.coordinates; _i < _a2.length; _i++) { var coord = _a2[_i]; if (booleanPointInPolygon(coord, polygon2)) { return true; } } var doLinesIntersect = lineIntersect(lineString2, polygonToLine(polygon2)); if (doLinesIntersect.features.length > 0) { return true; } return false; } function isPolyInPoly(feature1, feature2) { for (var _i = 0, _a2 = feature1.coordinates[0]; _i < _a2.length; _i++) { var coord1 = _a2[_i]; if (booleanPointInPolygon(coord1, feature2)) { return true; } } for (var _b = 0, _c = feature2.coordinates[0]; _b < _c.length; _b++) { var coord2 = _c[_b]; if (booleanPointInPolygon(coord2, feature1)) { return true; } } var doLinesIntersect = lineIntersect(polygonToLine(feature1), polygonToLine(feature2)); if (doLinesIntersect.features.length > 0) { return true; } return false; } function isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt2) { var dxc = pt2[0] - lineSegmentStart[0]; var dyc = pt2[1] - lineSegmentStart[1]; var dxl = lineSegmentEnd[0] - lineSegmentStart[0]; var dyl = lineSegmentEnd[1] - lineSegmentStart[1]; var cross2 = dxc * dyl - dyc * dxl; if (cross2 !== 0) { return false; } if (Math.abs(dxl) >= Math.abs(dyl)) { if (dxl > 0) { return lineSegmentStart[0] <= pt2[0] && pt2[0] <= lineSegmentEnd[0]; } else { return lineSegmentEnd[0] <= pt2[0] && pt2[0] <= lineSegmentStart[0]; } } else if (dyl > 0) { return lineSegmentStart[1] <= pt2[1] && pt2[1] <= lineSegmentEnd[1]; } else { return lineSegmentEnd[1] <= pt2[1] && pt2[1] <= lineSegmentStart[1]; } } function compareCoords(pair1, pair2) { return pair1[0] === pair2[0] && pair1[1] === pair2[1]; } function booleanIntersects(feature1, feature2) { var bool = false; flattenEach(feature1, function(flatten1) { flattenEach(feature2, function(flatten22) { if (bool === true) { return true; } bool = !booleanDisjoint(flatten1.geometry, flatten22.geometry); }); }); return bool; } function rectangleGrid(bbox2, cellWidth, cellHeight, options2) { if (options2 === void 0) { options2 = {}; } var results = []; var west = bbox2[0]; var south = bbox2[1]; var east = bbox2[2]; var north = bbox2[3]; var xFraction = cellWidth / distance([west, south], [east, south], options2); var cellWidthDeg = xFraction * (east - west); var yFraction = cellHeight / distance([west, south], [west, north], options2); var cellHeightDeg = yFraction * (north - south); var bboxWidth = east - west; var bboxHeight = north - south; var columns = Math.floor(bboxWidth / cellWidthDeg); var rows = Math.floor(bboxHeight / cellHeightDeg); var deltaX = (bboxWidth - columns * cellWidthDeg) / 2; var deltaY = (bboxHeight - rows * cellHeightDeg) / 2; var currentX = west + deltaX; for (var column = 0; column < columns; column++) { var currentY = south + deltaY; for (var row = 0; row < rows; row++) { var cellPoly = polygon([ [ [currentX, currentY], [currentX, currentY + cellHeightDeg], [currentX + cellWidthDeg, currentY + cellHeightDeg], [currentX + cellWidthDeg, currentY], [currentX, currentY] ] ], options2.properties); if (options2.mask) { if (booleanIntersects(options2.mask, cellPoly)) { results.push(cellPoly); } } else { results.push(cellPoly); } currentY += cellHeightDeg; } currentX += cellWidthDeg; } return featureCollection$1(results); } function squareGrid(bbox2, cellSide, options2) { if (options2 === void 0) { options2 = {}; } return rectangleGrid(bbox2, cellSide, cellSide, options2); } class ViewShed { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this.viewer = viewer2; this.handler = void 0; this.lightCamera; this.pyramid; this.frustumPrimitive; this.viewershedPolygon; } initHandler() { if (this.handler) { this.handler.destroy(); this.handler = void 0; } let canvas = document.getElementById("canvasMap"); if (canvas == null) { canvas = document.createElement("canvas"); canvas.id = "canvasMap"; canvas.style.display = "none"; canvas.style.top = "0px"; canvas.style.position = "absolute"; document.body.append(canvas); } this.canvasEle = canvas; } ReturnDistance(pos0, pos1) { let point1cartographic = Cesium.Cartographic.fromCartesian(pos0); let point2cartographic = Cesium.Cartographic.fromCartesian(pos1); let geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); let s = geodesic.surfaceDistance; return s; } getHeight(x, y, objectsToExclude) { let endCartographic = Cesium.Cartographic.fromDegrees(x, y); let endHeight = this.viewer.scene.sampleHeight( endCartographic, objectsToExclude ); return endHeight; } cartesian3ToDegree(Cartesian32) { let _ellipsoid = this.viewer.scene.globe.ellipsoid; let _cartographic = _ellipsoid.cartesianToCartographic(Cartesian32); let _lat = Cesium.Math.toDegrees(_cartographic.latitude); let _lng = Cesium.Math.toDegrees(_cartographic.longitude); let _alt = _cartographic.height; return [_lng, _lat, _alt]; } getAngle(lng1, lat1, lng2, lat2) { let dRotateAngle = Math.atan2(Math.abs(lng1 - lng2), Math.abs(lat1 - lat2)); if (lng2 >= lng1) { dRotateAngle = lat2 < lat1 ? Math.PI - dRotateAngle : dRotateAngle; } else { dRotateAngle = lat2 >= lat1 ? 2 * Math.PI - dRotateAngle : Math.PI + dRotateAngle; } dRotateAngle = dRotateAngle * 180 / Math.PI; return dRotateAngle; } getPitch(pointA, pointB) { let transfrom = Cesium.Transforms.eastNorthUpToFixedFrame(pointA); const vector = Cesium.Cartesian3.subtract( pointB, pointA, new Cesium.Cartesian3() ); let direction = Cesium.Matrix4.multiplyByPointAsVector( Cesium.Matrix4.inverse(transfrom, transfrom), vector, vector ); Cesium.Cartesian3.normalize(direction, direction); return Cesium.Math.PI_OVER_TWO - Cesium.Math.acosClamped(direction.z); } updateViewShed() { this.clear(); this.setLightCamera(); this.addVisualPyramid(); this.createFrustum(); } clear() { if (this.pyramid) { this.viewer.entities.removeById(this.pyramid.id); this.pyramid = void 0; } if (this.frustumPrimitive) { this.viewer.scene.primitives.remove(this.frustumPrimitive); this.frustumPrimitive = void 0; } if (this.debugModelMatrixPrimitive) { this.viewer.scene.primitives.remove(this.debugModelMatrixPrimitive); this.debugModelMatrixPrimitive = void 0; } } addVisualPyramid() { let options2 = this.ViewShedOptions; let position2 = options2.viewPosition; let visualRange = Number(options2.visualRange); let transform3 = Cesium.Transforms.eastNorthUpToFixedFrame(position2); this.debugModelMatrixPrimitive = this.viewer.scene.primitives.add( new Cesium.DebugModelMatrixPrimitive({ modelMatrix: transform3, length: 5 }) ); const halfClock = options2.horizontalViewAngle / 2; const halfCone = options2.verticalViewAngle / 2; const pitch = Cesium.Math.toDegrees(options2.pitch); const ellipsoid = new Cesium.EllipsoidGraphics({ radii: new Cesium.Cartesian3(visualRange, visualRange, visualRange), minimumClock: Cesium.Math.toRadians(90 - options2.direction - halfClock), maximumClock: Cesium.Math.toRadians(90 - options2.direction + halfClock), minimumCone: Cesium.Math.toRadians(90 - pitch - halfCone), maximumCone: Cesium.Math.toRadians(90 - pitch + halfCone), fill: false, outline: true, subdivisions: 256, stackPartitions: 64, slicePartitions: 64, outlineColor: Cesium.Color.YELLOWGREEN.withAlpha(0.5) }); const pyramidEntity = new Cesium.Entity({ position: position2, ellipsoid }); this.pyramid = this.viewer.entities.add(pyramidEntity); } setLightCamera() { if (!this.lightCamera) { this.lightCamera = new Cesium.Camera(this.viewer.scene); } let options2 = this.ViewShedOptions; let visualRange = Number(options2.visualRange); this.lightCamera.position = options2.viewPosition; this.lightCamera.frustum.near = 0.1; this.lightCamera.frustum.far = visualRange; const hr = Cesium.Math.toRadians(options2.horizontalViewAngle); const vr = Cesium.Math.toRadians(options2.verticalViewAngle); this.lightCamera.frustum.aspectRatio = visualRange * Math.tan(hr / 2) * 2 / (visualRange * Math.tan(vr / 2) * 2); this.lightCamera.frustum.fov = hr > vr ? hr : vr; this.lightCamera.setView({ destination: options2.viewPosition, orientation: { heading: Cesium.Math.toRadians(options2.direction || 0), pitch: options2.pitch || 0, roll: 0 } }); } createFrustum() { const scratchRight = new Cesium.Cartesian3(); const scratchRotation = new Cesium.Matrix3(); const scratchOrientation = new Cesium.Quaternion(); const direction = this.lightCamera.directionWC; const up = this.lightCamera.upWC; let right = this.lightCamera.rightWC; right = Cesium.Cartesian3.negate(right, scratchRight); let rotation = scratchRotation; Cesium.Matrix3.setColumn(rotation, 0, right, rotation); Cesium.Matrix3.setColumn(rotation, 1, up, rotation); Cesium.Matrix3.setColumn(rotation, 2, direction, rotation); let orientation = Cesium.Quaternion.fromRotationMatrix( rotation, scratchOrientation ); let instanceOutline = new Cesium.GeometryInstance({ geometry: new Cesium.FrustumOutlineGeometry({ frustum: this.lightCamera.frustum, origin: this.ViewShedOptions.viewPosition, orientation }), id: "\u89C6\u690E\u4F53\u8F6E\u5ED3\u7EBF" + Math.random().toString(36).substr(2), attributes: { color: Cesium.ColorGeometryInstanceAttribute.fromColor( new Cesium.Color(0, 1, 0, 1) ), show: new Cesium.ShowGeometryInstanceAttribute(true) } }); this.frustumPrimitive = this.viewer.scene.primitives.add( new Cesium.Primitive({ geometryInstances: instanceOutline, appearance: new Cesium.PerInstanceColorAppearance({ flat: true, translucent: false, closed: true }) }) ); } addViewershedPolygon(positionArr) { let polygon2 = new Cesium.PolygonGeometry({ polygonHierarchy: new Cesium.PolygonHierarchy( Cesium.Cartesian3.fromDegreesArray(positionArr) ), height: 0, extrudedHeight: 0, vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT, stRotation: 0, ellipsoid: Cesium.Ellipsoid.WGS84, granularity: Cesium.Math.RADIANS_PER_DEGREE, perPositionHeight: false, closeTop: true, closeBottom: true, arcType: Cesium.ArcType.GEODESIC }); let polygonInstance = new Cesium.GeometryInstance({ geometry: polygon2, name: "ViewershedPolygon", attributes: { color: Cesium.ColorGeometryInstanceAttribute.fromColor( Cesium.Color.BLUE.withAlpha(0.6) ), show: new Cesium.ShowGeometryInstanceAttribute(true) } }); this.viewershedPolygon = this.viewer.scene.primitives.add( new Cesium.GroundPrimitive({ geometryInstances: polygonInstance, appearance: new Cesium.EllipsoidSurfaceAppearance({ aboveGround: true, material: new Cesium.Material({ fabric: { type: "Image", uniforms: { image: this.returnImgae() } } }) }) }) ); } drawViewershed(precision) { const pos = this.cartesian3ToDegree(this.ViewShedOptions.viewPosition); const radius = this.ViewShedOptions.visualRange; const direction = this.ViewShedOptions.direction; let boundary = this.computeBoundaryOptions(pos, radius, direction); const bbox2 = boundary.bbox; let mask = polygon([boundary.boundaryPoints]); const dis = this.ViewShedOptions.visualRange / (precision * 1e3); let gridPoints = pointGrid(bbox2, dis, { mask }); let pointsResult = this.createTargetPoints(gridPoints, dis, pos); let variogram = index.train( pointsResult.values, pointsResult.lngs, pointsResult.lats, "exponential", 0, 100 ); let grid2 = index.grid([boundary.boundaryPoints], variogram, dis / 1e3); const colors = [ "#ff000080", "#ff000080", "#ff000080", "#ff000080", "#ff000080", "#ff000080", "#00ff0080", "#00ff0080", "#00ff0080", "#00ff0080", "#00ff0080", "#00ff0080" ]; this.canvasEle.width = 3840; this.canvasEle.height = 2160; index.plot( this.canvasEle, grid2, [bbox2[0], bbox2[2]], [bbox2[1], bbox2[3]], colors ); this.addViewershedPolygon(boundary.positionArr); } computeBoundaryOptions(pos, radius, angle) { let Ea = 6378137; let Eb = 6356725; const lng = pos[0], lat = pos[1]; const bbox2 = [lng, lat, lng, lat]; let positionArr = []; let boundaryPoints = []; positionArr.push(lng, lat); boundaryPoints.push([lng, lat]); let start2 = angle + 45 > 360 ? angle - 45 - 360 : angle - 45; let end = start2 + 90; for (let i2 = start2; i2 <= end; i2++) { let dx = radius * Math.sin(i2 * Math.PI / 180); let dy = radius * Math.cos(i2 * Math.PI / 180); let ec = Eb + (Ea - Eb) * (90 - lat) / 90; let ed = ec * Math.cos(lat * Math.PI / 180); let BJD = lng + dx / ed * 180 / Math.PI; let BWD = lat + dy / ec * 180 / Math.PI; positionArr.push(BJD, BWD); boundaryPoints.push([BJD, BWD]); this.refreshBBox(bbox2, BJD, BWD); } boundaryPoints.push([lng, lat]); return { positionArr, boundaryPoints, bbox: bbox2 }; } refreshBBox(result, x, y) { result[0] = x < result[0] ? x : result[0]; result[1] = y < result[1] ? y : result[1]; result[2] = x > result[2] ? x : result[2]; result[3] = y > result[3] ? y : result[3]; } createTargetPoints(gridPoints, step, sourcePos) { let positionArr = []; let objectsToExclude = [ this.frustumPrimitive, this.pyramid, this.debugModelMatrixPrimitive ]; let values3 = [], lngs = [], lats = []; let height2 = this.getHeight(sourcePos[0], sourcePos[1], objectsToExclude); positionArr.push({ x: sourcePos[0], y: sourcePos[1], z: height2 }); let viewPoint = this.ViewShedOptions.viewPosition; for (let index2 = 0; index2 < gridPoints.features.length; index2++) { const feature2 = gridPoints.features[index2]; const coords = feature2.geometry.coordinates; const x = coords[0], y = coords[1]; let h2 = this.getHeight(x, y, objectsToExclude); let endPoint = Cesium.Cartesian3.fromDegrees(x, y, h2); let direction = Cesium.Cartesian3.normalize( Cesium.Cartesian3.subtract( endPoint, viewPoint, new Cesium.Cartesian3() ), new Cesium.Cartesian3() ); let ray = new Cesium.Ray(viewPoint, direction); let result = this.viewer.scene.pickFromRay(ray, objectsToExclude); if (result) { let buffer = this.ReturnDistance(endPoint, result.position); if (buffer > step) { values3.push(0); } else { values3.push(1); } lngs.push(x); lats.push(y); } } return { values: values3, lngs, lats }; } returnImgae() { return this.canvasEle.toDataURL("image/png"); } } Object.assign(ViewShed.prototype, { createViewshed: function(precision) { let _self = this; let scene = _self.viewer.scene; _self.initHandler(); _self.clearAll(); let count = 0; let toolTip = "\u5DE6\u952E\u70B9\u51FB\u521B\u5EFA\u8D77\u70B9"; _self.handler = new Cesium.ScreenSpaceEventHandler(_self.viewer.canvas); _self.handler.setInputAction((event2) => { count++; if (count === 1) { toolTip = "\u5DE6\u952E\u70B9\u51FB\u521B\u5EFA\u7EC8\u70B9"; let earthPosition = scene.pickPosition(event2.position); let pos = _self.cartesian3ToDegree(earthPosition); _self.handler.setInputAction(function(move) { CreateRemindertip(toolTip, move.endPosition, true); let newPosition = scene.pickPosition(move.endPosition); if (Cesium.defined(newPosition)) { let pos1 = _self.cartesian3ToDegree(newPosition); let distance2 = Cesium.Cartesian3.distance(newPosition, earthPosition); let angle = _self.getAngle(pos[0], pos[1], pos1[0], pos1[1]); let pitch = _self.getPitch(earthPosition, newPosition); _self.ViewShedOptions = { viewPosition: earthPosition, endPosition: newPosition, direction: angle, pitch, horizontalViewAngle: 90, verticalViewAngle: 60, visibleAreaColor: Cesium.Color.GREEN, invisibleAreaColor: Cesium.Color.RED, visualRange: distance2 }; _self.updateViewShed(); } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); } if (count === 2) { _self.initHandler(); _self.drawViewershed(precision); CreateRemindertip(toolTip, event2.endPosition, false); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); _self.handler.setInputAction(function(move) { CreateRemindertip(toolTip, move.endPosition, true); }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); }, clearAll: function() { this.clear(); if (this.viewershedPolygon) { this.viewer.scene.primitives.remove(this.viewershedPolygon); this.viewershedPolygon = void 0; } } }); class SunshineShadow { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._stopTime = null; } } Object.assign(SunshineShadow.prototype, { startSunShine(options2) { options2 = options2 || {}; if (!Cesium.defined(options2.startTime)) { options2.startTime = new Date().getTime(); } if (!Cesium.defined(options2.stopTime)) { options2.stopTime = new Date().getTime() + 1e3; } if (!Cesium.defined(options2.speed)) { options2.speed = 1600; } if (this._stopTime) { this._viewer.clock.shouldAnimate = true; this._viewer.clock.currentTime = this._stopTime; } else { this._viewer.scene.globe.enableLighting = true; this._viewer.shadows = true; this._viewer.clock.startTime = Cesium.JulianDate.fromDate(new Date(options2.startTime)); this._viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(options2.startTime)); this._viewer.clock.stopTime = Cesium.JulianDate.fromDate(new Date(options2.stopTime)); this._viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; this._viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER; this._viewer.clock.multiplier = options2.speed; this._viewer.clock.canAnimate = true; this._viewer.clock.shouldAnimate = true; } }, stopSunShine() { this._stopTime = this._viewer.clock.currentTime; this._viewer.clock.shouldAnimate = false; }, removeSunShine() { if (this._stopTime) { this._viewer.clock.shouldAnimate = true; this._viewer.clock.currentTime = this._stopTime; } this._viewer.scene.globe.enableLighting = false; this._viewer.shadows = false; this._stopTime = null; } }); Object.assign(SunshineShadow.prototype, { start(options2) { if (document.getElementsByClassName("cesium-viewer-animationContainer").length > 0) { document.getElementsByClassName("cesium-viewer-animationContainer")[0].style.display = "block"; } if (document.getElementsByClassName("cesium-viewer-timelineContainer").length > 0) { document.getElementsByClassName("cesium-viewer-timelineContainer")[0].style.display = "block"; } this._viewer.shadows = true; options2 = options2 || {}; if (!Cesium.defined(options2.startTime)) { options2.startTime = new Date(new Date().toLocaleDateString()).getTime(); } if (!Cesium.defined(options2.stopTime)) { options2.stopTime = new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1e3 - 1; } if (!Cesium.defined(options2.speed)) { options2.speed = 1600; } let start2 = Cesium.JulianDate.fromDate(new Date(options2.startTime)); let stop = Cesium.JulianDate.fromDate(new Date(options2.stopTime)); viewer.timeline.zoomTo(start2, stop); let clock2 = viewer.clock; clock2.shouldAnimate = false; clock2.startTime = start2; clock2.stopTime = stop; clock2.currentTime = start2; clock2.clockRange = Cesium.ClockRange.UNBOUNDED; clock2.multiplier = options2.speed; }, remove() { if (document.getElementsByClassName("cesium-viewer-animationContainer").length > 0) { document.getElementsByClassName("cesium-viewer-animationContainer")[0].style.display = "none"; } if (document.getElementsByClassName("cesium-viewer-timelineContainer").length > 0) { document.getElementsByClassName("cesium-viewer-timelineContainer")[0].style.display = "none"; } this._viewer.shadows = false; this._viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date(new Date().getTime())); this._viewer.clock.shouldAnimate = false; } }); class Profile { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._profileEntities = []; } _interPoints(positions, objectsToExclude) { let positionsCartographic = []; let terrainSamplePositions = []; for (let index2 = 0; index2 < positions.length; index2++) { const element = positions[index2]; let ellipsoid = this._viewer.scene.globe.ellipsoid; let cartographic = ellipsoid.cartesianToCartographic(element); positionsCartographic.push(cartographic); } for (let i2 = 0; i2 < positionsCartographic.length; i2++) { const m_Cartographic0 = positionsCartographic[i2]; const m_Cartographic1 = positionsCartographic[i2 + 1]; if (m_Cartographic1) { let a = Math.abs(m_Cartographic0.longitude - m_Cartographic1.longitude) * 1e7; let b = Math.abs(m_Cartographic0.latitude - m_Cartographic1.latitude) * 1e7; if (a > b) b = a; let length = parseInt(b / 2); if (length > 1e3) length = 1e3; if (length < 2) length = 2; for (let j = 0; j < length; j++) { terrainSamplePositions.push( new Cesium.Cartographic( Cesium.Math.lerp( m_Cartographic0.longitude, m_Cartographic1.longitude, j / (length - 1) ), Cesium.Math.lerp( m_Cartographic0.latitude, m_Cartographic1.latitude, j / (length - 1) ) ) ); } terrainSamplePositions.pop(); } else { terrainSamplePositions.push(m_Cartographic0); } } let positions_Inter = []; let distance2 = 0; for (let n = 0; n < terrainSamplePositions.length; n++) { let curCartographic = terrainSamplePositions[n]; let height2 = this._viewer.scene.sampleHeight(curCartographic, objectsToExclude); const lon = curCartographic.longitude / Math.PI * 180; const lat = curCartographic.latitude / Math.PI * 180; let point2 = Cesium.Cartesian3.fromDegrees(lon, lat, height2); let preCartographic = terrainSamplePositions[n - 1]; if (preCartographic) { const lon1 = preCartographic.longitude / Math.PI * 180; const lat1 = preCartographic.latitude / Math.PI * 180; let point1 = Cesium.Cartesian3.fromDegrees(lon1, lat1, height2); let curDis = Cesium.Cartesian3.distance(point1, point2); distance2 += curDis; } positions_Inter.push({ position: { lon, lat, height: height2 }, distance: distance2 }); } return positions_Inter; } } Object.assign(Profile.prototype, { startProfileAnalysis(points2, entity) { return new Promise((resolve2, reject2) => { let _self = this; let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); _self.removeProfileAnalysis(); entity.clampToGround = true; let pointsList = _self._interPoints(positions, [entity]); resolve2(pointsList); }); }, removeProfileAnalysis() { let _self = this; if (_self._profileEntities && _self._profileEntities.length > 0) { _self._profileEntities.forEach((element) => { _self._viewer.entities.remove(element); }); } _self._profileEntities = []; } }); class CutFill { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this.delEntitys = []; this.maxHeigh = -1e6; } _VolumeAnalysis(options2) { let _self = this; let cutArea = 0, cutVolume = 0, fillArea = 0, fillVolume = 0; const indices = options2.geom.indices; const positions = options2.geom.attributes.position.values; for (let index2 = 0; index2 < indices.length; index2 += 3) { const pos0 = _self._returnPosition(positions, indices[index2]); const pos1 = _self._returnPosition(positions, indices[index2 + 1]); const pos2 = _self._returnPosition(positions, indices[index2 + 2]); let _entities = _self._viewer.entities.add({ name: "\u4E09\u89D2\u9762", polygon: { hierarchy: [pos0.heightPos, pos1.heightPos, pos2.heightPos], perPositionHeight: true, material: Cesium.Color.fromRandom(), extrudedHeight: options2.height, outline: true, outlineColor: Cesium.Color.BLACK } }); _self.delEntitys.push(_entities); const area = _self._computeArea4Triangle( pos0.noHeightPos, pos1.noHeightPos, pos2.noHeightPos ); const height2 = (pos0.height + pos1.height + pos2.height) / 3; if (height2 < options2.height) { fillArea += area; const volume = area * (options2.height - height2); fillVolume += volume; } else { cutArea += area; const volume = area * (height2 - options2.height); cutVolume += volume; } } let allArea = cutArea + fillArea; allArea = allArea.toFixed(2); cutArea = cutArea.toFixed(2); cutVolume = cutVolume.toFixed(2); fillArea = fillArea.toFixed(2); fillVolume = fillVolume.toFixed(2); let result = { allArea, cutArea, cutVolume, fillArea, fillVolume }; return result; } _computeArea4Triangle(pos1, pos2, pos3) { let a = Cesium.Cartesian3.distance(pos1, pos2); let b = Cesium.Cartesian3.distance(pos2, pos3); let c = Cesium.Cartesian3.distance(pos3, pos1); let S = (a + b + c) / 2; return Math.sqrt(S * (S - a) * (S - b) * (S - c)); } _returnPosition(positions, index2) { let cartesian = new Cesium.Cartesian3( positions[index2 * 3], positions[index2 * 3 + 1], positions[index2 * 3 + 2] ); let cartographic = Cesium.Cartographic.fromCartesian(cartesian); let height2 = this._viewer.scene.sampleHeightSupported ? this._viewer.scene.sampleHeight(cartographic) : this._viewer.scene.globe.getHeight(cartographic); if (height2 > this.maxHeigh) { this.maxHeigh = height2; } return { heightPos: Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, height2), noHeightPos: Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0), height: height2 }; } } Object.assign(CutFill.prototype, { createPolygonGeo(points2, options2) { return new Promise((resolve2, reject2) => { let _self = this; options2 = options2 || {}; options2.precision = Cesium.defaultValue(options2.precision, 256); options2.height = Cesium.defaultValue(options2.height, 10); _self.remove(); let positions = []; for (let i2 = 0; i2 < points2.length; i2++) { if (points2[i2] instanceof Cesium.Cartesian3) { positions.push(points2[i2]); } else { positions.push(Cesium.Cartesian3.fromDegrees(points2[i2][0], points2[i2][1], points2[i2][1] || 0)); } } let granularity = Math.PI / Math.pow(2, 11); granularity = granularity / options2.precision; let polygonGeometry = new Cesium.PolygonGeometry.fromPositions({ positions, vertexFormat: Cesium.PerInstanceColorAppearance.FLAT_VERTEX_FORMAT, granularity }); options2.geom = new Cesium.PolygonGeometry.createGeometry(polygonGeometry); let result = _self._VolumeAnalysis(options2); _self._viewer.scene.globe.baseColor = new Cesium.Color(1, 1, 1, 0.9); _self._viewer.scene.screenSpaceCameraController.enableCollisionDetection = false; _self._viewer.scene.globe.translucency.enabled = true; resolve2(result); }); }, remove() { for (var i2 = 0; i2 < this.delEntitys.length; i2++) { this._viewer.entities.remove(this.delEntitys[i2]); } this._viewer.scene.screenSpaceCameraController.enableCollisionDetection = true; this._viewer.scene.globe.translucency.enabled = false; } }); class HeightLimit { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this.targetY = 0; } _setPolygon(options2) { let _self = this; _self.HiePolygon = _self._viewer.entities.add({ polygon: { hierarchy: new Cesium.PolygonHierarchy(_self.data), material: _self._handleColor("#FFF8DC", options2.alpha), height: new Cesium.CallbackProperty(_self._createPolygonUpdateFunction(), false), perPositionHeight: false, outline: true, outlineColor: _self._handleColor("red", options2.alpha), outlineWidth: 1 } }); } _createPolygonUpdateFunction() { let _self = this; return function() { return _self.targetY; }; } _handleColor(color2, alpha) { return Cesium.Color.fromCssColorString(color2).withAlpha(alpha || 1); } _getMinHeight(points2) { let height2 = 0; points2.map((point2) => { let _height = point2[2] || 0; height2 = _height; if (_height < height2) { height2 = _height; } }); return height2; } } Object.assign(HeightLimit.prototype, { addPrimitive(points2, options2) { this.removePrimitive(); options2 = options2 || {}; options2.height = Cesium.defaultValue(options2.height, 50); options2.baseHeight = Cesium.defaultValue(options2.baseHeight, 50); options2.color = Cesium.defaultValue(options2.color, "red"); options2.alpha = Cesium.defaultValue(options2.alpha, 0.6); let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); let _self = this; _self.data = positions; _self.baseHeight = options2.baseHeight; _self.targetY = options2.baseHeight + options2.height; let polygonInstance = new Cesium.GeometryInstance({ geometry: new Cesium.PolygonGeometry({ polygonHierarchy: new Cesium.PolygonHierarchy(_self.data), height: _self.baseHeight, extrudedHeight: _self.baseHeight + 3e3 }), attributes: { color: Cesium.ColorGeometryInstanceAttribute.fromColor( Cesium.Color.fromCssColorString(options2.color).withAlpha(options2.alpha) ), show: new Cesium.ShowGeometryInstanceAttribute(true) } }); _self.limitHeightPrimitive = _self._viewer.scene.primitives.add( new Cesium.ClassificationPrimitive({ geometryInstances: polygonInstance, releaseGeometryInstances: false, classificationType: Cesium.ClassificationType.CESIUM_3D_TILE }) ); _self._setPolygon(options2); }, removePrimitive() { if (this.HiePolygon) { this._viewer.entities.remove(this.HiePolygon); } if (this.limitHeightPrimitive) { this._viewer.scene.primitives.remove(this.limitHeightPrimitive); } }, changeHeight(height2) { if (!this.limitHeightPrimitive) return; this.targetY = this.baseHeight + height2; let cartographic = Cesium.Cartographic.fromCartesian(this.limitHeightPrimitive._primitive._boundingSpheres[0].center); let surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, this.baseHeight); let offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, this.baseHeight + height2); let translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3()); this.limitHeightPrimitive._primitive.modelMatrix = Cesium.Matrix4.fromTranslation(translation); } }); class Cutting { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._camera = this._viewer.camera; this._scene = this._viewer.scene; this.targetY = 0; this._mouseHandler(); } _mouseHandler() { let _self = this; let viewer2 = _self._viewer; let scene = _self._scene; let selectedPlane; let downHandler = new Cesium.ScreenSpaceEventHandler(viewer2.scene.canvas); downHandler.setInputAction(function(movement) { let pickedObject = scene.pick(movement.position); if (Cesium.defined(pickedObject) && Cesium.defined(pickedObject.id) && Cesium.defined(pickedObject.id.plane)) { selectedPlane = pickedObject.id.plane; selectedPlane.material = Cesium.Color.RED.withAlpha(0.05); selectedPlane.outlineColor = Cesium.Color.RED; scene.screenSpaceCameraController.enableInputs = false; } }, Cesium.ScreenSpaceEventType.LEFT_DOWN); let upHandler = new Cesium.ScreenSpaceEventHandler(viewer2.scene.canvas); upHandler.setInputAction(function() { if (Cesium.defined(selectedPlane)) { selectedPlane.material = Cesium.Color.RED.withAlpha(0.1); selectedPlane.outlineColor = Cesium.Color.RED; selectedPlane = void 0; } scene.screenSpaceCameraController.enableInputs = true; }, Cesium.ScreenSpaceEventType.LEFT_UP); let moveHandler = new Cesium.ScreenSpaceEventHandler(viewer2.scene.canvas); moveHandler.setInputAction(function(movement) { if (Cesium.defined(selectedPlane)) { let deltaY = movement.startPosition.y - movement.endPosition.y; _self.targetY += deltaY; } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); } _createPlaneUpdateFunction(plane) { let _self = this; return function() { plane.distance = _self.targetY; return plane; }; } _createPlane(p1, p2, inverseTransform) { let _self = this; let p1C3 = _self._getOriginCoordinateSystemPoint(p1, inverseTransform); let p2C3 = _self._getOriginCoordinateSystemPoint(p2, inverseTransform); let up = new Cesium.Cartesian3(0, 0, 10); let right = Cesium.Cartesian3.subtract(p2C3, p1C3, new Cesium.Cartesian3()); let normal = Cesium.Cartesian3.cross(right, up, new Cesium.Cartesian3()); normal = Cesium.Cartesian3.normalize(normal, normal); let planeTmp = Cesium.Plane.fromPointNormal(p1C3, normal); return Cesium.ClippingPlane.fromPlane(planeTmp); } _getOriginCoordinateSystemPoint(point2, inverseTransform) { let val = Cesium.Cartesian3.fromDegrees(point2[0], point2[1]); return Cesium.Matrix4.multiplyByPoint( inverseTransform, val, new Cesium.Cartesian3(0, 0, 0) ); } _getInverseTransform(tileSet) { let transform3; const tmp = tileSet.root.transform; if (tmp && tmp.equals(Cesium.Matrix4.IDENTITY) || !tmp) { transform3 = Cesium.Transforms.eastNorthUpToFixedFrame(tileSet.boundingSphere.center); } else { transform3 = Cesium.Matrix4.fromArray(tileSet.root.transform); } return Cesium.Matrix4.inverseTransformation(transform3, new Cesium.Matrix4()); } _isDirRes(polygon2, isClockwise) { var lineStringList = []; polygon2.forEach((p) => { lineStringList.push([p.lng, p.lat]); }); var clockwiseRing = lineString(lineStringList); let isR = booleanClockwise(clockwiseRing); var points2 = []; if (isClockwise) { if (!isR) { points2 = polygon2; } else { var count = 0; for (var ii = polygon2.length - 1; ii >= 0; ii--) { points2[count] = polygon2[ii]; count++; } } } else { if (isR) { points2 = polygon2; } else { var count = 0; for (var ii = polygon2.length - 1; ii >= 0; ii--) { points2[count] = polygon2[ii]; count++; } } } return points2; } } Object.assign(Cutting.prototype, { activate(tileset) { let _self = this; let viewer2 = _self._viewer; let inverseTransform = _self._getInverseTransform(tileset); const clippingPlanes1 = []; clippingPlanes1.push(_self._createPlane([121.55814450142213, 37.39658788787028], [121.65814450142213, 37.49658788787028], inverseTransform)); let clippingPlanes = new Cesium.ClippingPlaneCollection({ planes: [ new Cesium.ClippingPlane( new Cesium.Cartesian3(0, 1, 0), -10 ) ], edgeWidth: 1 }); _self.tileset = tileset; tileset.clippingPlanes = clippingPlanes; tileset.debugShowBoundingVolume = false; return tileset.readyPromise.then(function() { let boundingSphere = tileset.boundingSphere; let radius = boundingSphere.radius; viewer2.zoomTo( tileset, new Cesium.HeadingPitchRange(0.5, -0.2, radius / 5) ); if (!Cesium.Matrix4.equals( tileset.root.transform, Cesium.Matrix4.IDENTITY )) { const transformCenter = Cesium.Matrix4.getTranslation(tileset.root.transform, new Cesium.Cartesian3()); const transformCartographic = Cesium.Cartographic.fromCartesian(transformCenter); const boundingSphereCartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center); const height2 = boundingSphereCartographic.height - transformCartographic.height; clippingPlanes.modelMatrix = Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(0, 0, height2)); } for (let i2 = 0; i2 < clippingPlanes.length; ++i2) { const plane = clippingPlanes.get(i2); viewer2.entities.add({ position: boundingSphere.center, plane: { dimensions: new Cesium.Cartesian2( radius / 10, radius / 10 ), material: Cesium.Color.WHITE.withAlpha(0.1), plane: new Cesium.CallbackProperty( _self._createPlaneUpdateFunction(plane), false ), outline: true, outlineColor: Cesium.Color.WHITE } }); } return tileset; }); }, addTiles(my3dtiles, pointsArray) { let _self = this; let viewer2 = _self._viewer; let tileset = my3dtiles; _self.polygon = pointsArray; _self.tileset = tileset; return tileset.readyPromise.then(function() { let inverseTransform = _self._getInverseTransform(tileset); _self.polygon = _self._isDirRes(_self.polygon, false); const clippingPlanes1 = []; for (let i2 = 0; i2 < _self.polygon.length; i2++) { if (i2 === _self.polygon.length - 1) { clippingPlanes1.push(_self._createPlane(_self.polygon[i2], _self.polygon[0], inverseTransform)); } else { clippingPlanes1.push(_self._createPlane(_self.polygon[i2], _self.polygon[i2 + 1], inverseTransform)); } } let clippingPlanes = new Cesium.ClippingPlaneCollection({ planes: clippingPlanes1, edgeWidth: 1, edgeColor: Cesium.Color.RED, unionClippingRegions: false }); _self.clippingPlanes = clippingPlanes; tileset.clippingPlanes = clippingPlanes; tileset.debugShowBoundingVolume = false; let boundingSphere = tileset.boundingSphere; let radius = boundingSphere.radius; for (let i2 = 0; i2 < clippingPlanes.length; ++i2) { let plane = clippingPlanes.get(i2); viewer2.entities.add({ position: boundingSphere.center, plane: { dimensions: new Cesium.Cartesian2( radius / 10, radius / 10 ), material: Cesium.Color.RED.withAlpha(0.1), plane: new Cesium.CallbackProperty( _self._createPlaneUpdateFunction(plane), false ), outline: true, outlineColor: Cesium.Color.RED } }); } return tileset; }); }, addTiles2(my3dtiles, pointsArray) { let _self = this; _self._viewer; let tileset = my3dtiles; _self.polygon = pointsArray; _self.tileset = tileset; Cesium.Matrix4.fromArray( [ 1, 5551115123125783e-31, 5898416033378595e-24, 0, -6106226635438361e-31, 1, -11355608731111744e-24, 0, -5898416061134171e-24, 11355608731111744e-24, 0.9999999999999999, 0, 9.912469893228263, -19.08345020748675, -14.613607150502503, 1 ] ); let transform3 = Cesium.Matrix4.fromArray( [ -0.8874246461620654, -0.46095281470464317, 0, 0, 0.2602796082288922, -0.5010893346724129, 0.8253266045740758, 0, -0.3804366214290463, 0.7324151700322881, 0.5646556435405804, 0, -2429070591483741e-9, 467643767731705e-8, 3581165448379543e-9, 1 ] ); let inverseTransform = Cesium.Matrix4.inverseTransformation(transform3, new Cesium.Matrix4()); let clippingPlanes1 = []; for (let i2 = 0; i2 < _self.polygon.length - 1; i2++) { let plane = _self.createPlane(_self.polygon[i2], _self.polygon[i2 + 1], inverseTransform); clippingPlanes1.push(plane); } let clippingPlanes = new Cesium.ClippingPlaneCollection({ planes: clippingPlanes1, edgeWidth: 1, edgeColor: Cesium.Color.RED, unionClippingRegions: false }); _self.clippingPlanes = clippingPlanes; return tileset.readyPromise.then(function() { tileset.clippingPlanes = clippingPlanes; tileset.debugShowBoundingVolume = false; let boundingSphere = tileset.boundingSphere; boundingSphere.radius; return tileset; }); }, toggleClipping() { let _self = this; _self.tileset = null; } }); class GeologyClipPlan { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._camera = this._viewer.camera; this._scene = this._viewer.scene; this.tileset = void 0; this.targetY = 0; this.planeEntities = []; this._mouseHandler(); } _mouseHandler() { let _self = this; let viewer2 = _self._viewer; let scene = _self._scene; let selectedPlane; let downHandler = new Cesium.ScreenSpaceEventHandler(viewer2.scene.canvas); downHandler.setInputAction(function(movement) { let pickedObject = scene.pick(movement.position); if (Cesium.defined(pickedObject) && Cesium.defined(pickedObject.id) && Cesium.defined(pickedObject.id.plane)) { selectedPlane = pickedObject.id.plane; selectedPlane.material = Cesium.Color.RED.withAlpha(0.05); selectedPlane.outlineColor = Cesium.Color.RED; scene.screenSpaceCameraController.enableInputs = false; } }, Cesium.ScreenSpaceEventType.LEFT_DOWN); let upHandler = new Cesium.ScreenSpaceEventHandler(viewer2.scene.canvas); upHandler.setInputAction(function() { if (Cesium.defined(selectedPlane)) { selectedPlane.material = Cesium.Color.RED.withAlpha(0.1); selectedPlane.outlineColor = Cesium.Color.RED; selectedPlane = void 0; } scene.screenSpaceCameraController.enableInputs = true; }, Cesium.ScreenSpaceEventType.LEFT_UP); let moveHandler = new Cesium.ScreenSpaceEventHandler(viewer2.scene.canvas); moveHandler.setInputAction(function(movement) { if (Cesium.defined(selectedPlane)) { let deltaY = movement.startPosition.y - movement.endPosition.y; _self.targetY += deltaY; } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); } _createPlaneUpdateFunction(plane) { let _self = this; return function() { plane.distance = _self.targetY; return plane; }; } } Object.assign(GeologyClipPlan.prototype, { activate(tileset, options2) { let _self = this; let viewer2 = _self._viewer; let distance2 = 1e5; let clippingPlanes = new Cesium.ClippingPlaneCollection({ planes: [ new Cesium.ClippingPlane( new Cesium.Cartesian3(0, 0, -1), distance2 ) ], edgeWidth: 1 }); _self.tileset = tileset; tileset.clippingPlanes = clippingPlanes; tileset.debugShowBoundingVolume = false; return tileset.readyPromise.then(function() { let boundingSphere = tileset.boundingSphere; let radius = boundingSphere.radius; if (!Cesium.Matrix4.equals( tileset.root.transform, Cesium.Matrix4.IDENTITY )) { const transformCenter = Cesium.Matrix4.getTranslation( tileset.root.transform, new Cesium.Cartesian3() ); const transformCartographic = Cesium.Cartographic.fromCartesian( transformCenter ); const boundingSphereCartographic = Cesium.Cartographic.fromCartesian( tileset.boundingSphere.center ); const height2 = boundingSphereCartographic.height - transformCartographic.height; clippingPlanes.modelMatrix = Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(0, 0, height2)); } viewer2.zoomTo( tileset, new Cesium.HeadingPitchRange(0.5, -0.2, radius / 10) ); let cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center); let lng = Cesium.Math.toDegrees(cartographic.longitude); let lat = Cesium.Math.toDegrees(cartographic.latitude); cartographic.height; var Cartesian33 = Cesium.Cartesian3.fromDegrees(lng, lat, 105); for (let i2 = 0; i2 < clippingPlanes.length; ++i2) { let plane = clippingPlanes.get(i2); let planeEntity = viewer2.entities.add({ position: Cartesian33, plane: { dimensions: new Cesium.Cartesian2( radius / 10, radius / 20 ), material: Cesium.Color.RED.withAlpha(0.1), plane: new Cesium.CallbackProperty( _self._createPlaneUpdateFunction(plane), false ), outline: true, outlineColor: Cesium.Color.RED } }); _self.planeEntities.push(planeEntity); } return tileset; }); }, toggleClipping() { let _self = this; for (let i2 = 0; i2 < _self.planeEntities.length; i2++) { _self._viewer.entities.remove(_self.planeEntities[i2]); } _self.planeEntities = []; _self.targetY = 0; let boundingSphere = _self.tileset.boundingSphere; _self._camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(Cesium.Math.toRadians(120), Cesium.Math.toRadians(-10), boundingSphere.radius * 2.5)); _self._camera.lookAtTransform(Cesium.Matrix4.IDENTITY); }, reset() { this.planeEntities = []; this.targetY = 0; } }); let SpatialAnalysis = { SightLine, ViewShed, SunshineShadow, Profile, CutFill, HeightLimit, Cutting, GeologyClipPlan }; class TerrainExcavation { constructor(viewer2) { if (!viewer2) throw new Error("no viewer object!"); this.viewer = viewer2; } prepareWell(activePoints) { let pointLength = activePoints.length; let heightDiff = this.excavateMinHeight - this.height; let no_height_top = [], bottom_pos = [], lerp_pos = []; for (let l = 0; l < pointLength; l++) { let u = l == pointLength - 1 ? 0 : l + 1; let point0 = [ Cesium.Cartographic.fromCartesian(activePoints[l]).longitude, Cesium.Cartographic.fromCartesian(activePoints[l]).latitude ]; let point1 = [ Cesium.Cartographic.fromCartesian(activePoints[u]).longitude, Cesium.Cartographic.fromCartesian(activePoints[u]).latitude ]; if (0 == l) { lerp_pos.push(new Cesium.Cartographic(point0[0], point0[1])); bottom_pos.push( Cesium.Cartesian3.fromRadians(point0[0], point0[1], heightDiff) ); no_height_top.push( Cesium.Cartesian3.fromRadians(point0[0], point0[1], 0) ); } for (let p = 1; p <= this.splitNum; p++) { let m = Cesium.Math.lerp(point0[0], point1[0], p / this.splitNum); let g = Cesium.Math.lerp(point0[1], point1[1], p / this.splitNum); l == pointLength - 1 && p == this.splitNum || (lerp_pos.push(new Cesium.Cartographic(m, g)), bottom_pos.push(Cesium.Cartesian3.fromRadians(m, g, heightDiff)), no_height_top.push(Cesium.Cartesian3.fromRadians(m, g, 0))); } } this.wellData = { lerp_pos, bottom_pos, no_height_top }; } createWell(wallData) { let $this = this; if (this.viewer.terrainProvider._layers) { this.createBottomSurface(wallData.bottom_pos); let positions = Cesium.sampleTerrainMostDetailed( this.viewer.terrainProvider, wallData.lerp_pos ); positions.then(function(pos) { let positionList = []; for (let index2 = 0; index2 < pos.length; index2++) { const element = pos[index2]; let curPos = Cesium.Cartesian3.fromRadians( element.longitude, element.latitude, element.height ); positionList.push(curPos); } $this.createWellWall(wallData.bottom_pos, positionList); }); } else { this.createBottomSurface(wallData.bottom_pos); this.createWellWall(wallData.bottom_pos, wallData.no_height_top); } } ellipsoidToDegree(pos) { let cartesian3 = new Cesium.Cartesian3(pos.x, pos.y, pos.z); let cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian3); return { longitude: Cesium.Math.toDegrees(cartographic.longitude), latitude: Cesium.Math.toDegrees(cartographic.latitude), altitude: cartographic.height }; } createBottomSurface(points2) { if (points2.length) { let minHeight = this.getMinHeight(points2); let positions = []; for (let i2 = 0; i2 < points2.length; i2++) { let curPoint = this.ellipsoidToDegree(points2[i2]); positions.push(curPoint.longitude, curPoint.latitude, minHeight); } let polygon2 = new Cesium.PolygonGeometry({ polygonHierarchy: new Cesium.PolygonHierarchy( Cesium.Cartesian3.fromDegreesArrayHeights(positions) ), perPositionHeight: true }); let material = new Cesium.Material({ fabric: { type: "Image", uniforms: { image: this.bottomImg } } }); let appearance = new Cesium.MaterialAppearance({ translucent: false, flat: true, material }); this.bottomSurface = new Cesium.Primitive({ geometryInstances: new Cesium.GeometryInstance({ geometry: Cesium.PolygonGeometry.createGeometry(polygon2) }), appearance, asynchronous: false }); this.viewer.scene.primitives.add(this.bottomSurface); } } createWellWall(bottomPos, positionList) { let minHeight = this.getMinHeight(bottomPos); let maxHeights = [], minHeights = []; for (let i2 = 0; i2 < positionList.length; i2++) { maxHeights.push(this.ellipsoidToDegree(positionList[i2]).altitude); minHeights.push(minHeight); } let wall = new Cesium.WallGeometry({ positions: positionList, maximumHeights: maxHeights, minimumHeights: minHeights }); let geometry2 = Cesium.WallGeometry.createGeometry(wall); let material = new Cesium.Material({ fabric: { type: "Image", uniforms: { image: this.wallImg } } }); let appearance = new Cesium.MaterialAppearance({ translucent: false, flat: true, material }); this.wellWall = new Cesium.Primitive({ geometryInstances: new Cesium.GeometryInstance({ geometry: geometry2, attributes: { color: Cesium.ColorGeometryInstanceAttribute.fromColor( Cesium.Color.GREY ) }, id: "PitWall" }), appearance, asynchronous: false }); this.viewer.scene.primitives.add(this.wellWall); } getMinHeight(points2) { let minHeight = 5e6; let minPoint = null; for (let i2 = 0; i2 < points2.length; i2++) { let height2 = points2[i2]["z"]; if (height2 < minHeight) { minHeight = height2; minPoint = this.ellipsoidToDegree(points2[i2]); } } return minPoint.altitude; } switchExcavate(show) { if (show) { this.viewer.scene.globe.material = null; this.wellWall.show = true; this.bottomSurface.show = true; } else { this.viewer.scene.globe.material = null; this.wellWall.show = false; this.bottomSurface.show = false; } } updateExcavateDepth(height2) { this.viewer.scene.primitives.remove(this.bottomSurface); this.viewer.scene.primitives.remove(this.wellWall); let lerp_pos = this.wellData.lerp_pos; let posList = []; for (let n = 0; n < lerp_pos.length; n++) { posList.push( Cesium.Cartesian3.fromRadians( lerp_pos[n].longitude, lerp_pos[n].latitude, this.excavateMinHeight - height2 ) ); } this.wellData.bottom_pos = posList; this.createWell(this.wellData); } } Object.defineProperties(TerrainExcavation.prototype, { show: { get: function() { return this._show; }, set: function(e) { this._show = e; this.switchExcavate(e); } }, height: { get: function() { return this._height; }, set: function(e) { this._height = e; this.updateExcavateDepth(e); } } }); Object.assign(TerrainExcavation.prototype, { add(activePoints, options2) { options2 = options2 || {}; this._height = options2.excavateDepth || 10; this.bottomImg = options2.bottomImg || "jt3dSDK/imgs/polygon/ground.png"; this.wallImg = options2.wallImg || "jt3dSDK/imgs/polygon/ground.png"; this.splitNum = Cesium.defaultValue(options2.splitNum, 50); activePoints = activePoints.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); let viewer2 = this.viewer; this.clear(); let clippingPlanesList = []; let car3Difference = Cesium.Cartesian3.subtract( activePoints[0], activePoints[1], new Cesium.Cartesian3() ); let boolDiff = car3Difference.x > 0; this.excavateMinHeight = 999999999; for (let index2 = 0; index2 < activePoints.length; ++index2) { let s = (index2 + 1) % activePoints.length; let curMidPoint = Cesium.Cartesian3.midpoint( activePoints[index2], activePoints[s], new Cesium.Cartesian3() ); let cartographic = Cesium.Cartographic.fromCartesian(activePoints[index2]); let curHeight = viewer2.scene.globe.getHeight(cartographic) || cartographic.height; if (curHeight < this.excavateMinHeight) { this.excavateMinHeight = curHeight; } let curMidPointNormal = Cesium.Cartesian3.normalize( curMidPoint, new Cesium.Cartesian3() ); let curMidPointDifference = boolDiff ? Cesium.Cartesian3.subtract( activePoints[index2], curMidPoint, new Cesium.Cartesian3() ) : Cesium.Cartesian3.subtract( activePoints[s], curMidPoint, new Cesium.Cartesian3() ); curMidPointDifference = Cesium.Cartesian3.normalize( curMidPointDifference, curMidPointDifference ); let curMidPointCross = Cesium.Cartesian3.cross( curMidPointDifference, curMidPointNormal, new Cesium.Cartesian3() ); curMidPointCross = Cesium.Cartesian3.normalize( curMidPointCross, curMidPointCross ); let plane = new Cesium.Plane(curMidPointCross, 0); let distance2 = Cesium.Plane.getPointDistance(plane, curMidPoint); clippingPlanesList.push( new Cesium.ClippingPlane(curMidPointCross, distance2) ); } this.viewer.scene.globe.clippingPlanes = new Cesium.ClippingPlaneCollection({ planes: clippingPlanesList, edgeWidth: 1, edgeColor: Cesium.Color.WHITE, enabled: true }); this.prepareWell(activePoints); this.createWell(this.wellData); }, clear() { if (this.viewer.scene.globe.clippingPlanes) { this.viewer.scene.globe.clippingPlanes.removeAll(); this.viewer.scene.primitives.remove(this.bottomSurface); this.viewer.scene.primitives.remove(this.wellWall); this.viewer.scene.render(); } } }); class SlopeAspect { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this.result = []; this.handler = void 0; this.toolTip = ""; } _openTip() { let _self = this; this.handler = new Cesium.ScreenSpaceEventHandler(_self._viewer.canvas); this.handler.setInputAction(function(movement) { let endPos = movement.endPosition; var pick = _self._viewer.scene.pick(endPos); if (pick && pick.id && pick.id.type === "SlopeAspect") { _self.toolTip = pick.id.value.toFixed(2); CreateRemindertip(_self.toolTip, endPos, true); } else { _self.toolTip = ""; CreateRemindertip(_self.toolTip, endPos, false); } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); } _createEllipse(gridSquare) { let _self = this; let boxResults = []; for (let index2 = 0; index2 < gridSquare.features.length; index2++) { const feature2 = gridSquare.features[index2]; const coordinates = feature2.geometry.coordinates[0]; const centerdegree = [ (coordinates[0][0] + coordinates[2][0]) / 2, (coordinates[0][1] + coordinates[2][1]) / 2 ]; let centerCartographic = Cesium.Cartographic.fromDegrees( centerdegree[0], centerdegree[1] ); boxResults.push(centerCartographic); for (let i2 = 0; i2 < coordinates.length; i2++) { const coord = coordinates[i2]; let cartographic = Cesium.Cartographic.fromDegrees(coord[0], coord[1]); boxResults.push(cartographic); const coord1 = coordinates[i2 + 1]; if (coord1) { let newCoord = [(coord[0] + coord1[0]) / 2, (coord[1] + coord1[1]) / 2]; let newCartographic = Cesium.Cartographic.fromDegrees(newCoord[0], newCoord[1]); boxResults.push(newCartographic); } } } Cesium.sampleTerrainMostDetailed( _self._viewer.scene.terrainProvider, boxResults ).then((updatePositions) => { let arrr = []; let ellipseResults = updatePositions.reduce(function(pre, item, index2, updatePositions2) { var begin = index2 * 10; var end = begin + 10; var res = updatePositions2.slice(begin, end); if (res.length != 0) { arrr[index2] = res; } return arrr; }, []); _self._calculateSlope(ellipseResults); _self._openTip(); }); } _createPolygonInsrance(points2, color2) { let positions = []; for (let index2 = 1; index2 < points2.length - 1; index2++) { const element = points2[index2]; positions.push(Cesium.Cartographic.toCartesian(element)); } let polygon2 = new Cesium.PolygonGeometry({ polygonHierarchy: new Cesium.PolygonHierarchy(positions) }); let polygonInstance = new Cesium.GeometryInstance({ geometry: polygon2, attributes: { color: Cesium.ColorGeometryInstanceAttribute.fromColor( Cesium.Color.fromCssColorString(color2) ), show: new Cesium.ShowGeometryInstanceAttribute(true) } }); return polygonInstance; } _createArrowInstance(targetPoint, center2, diagonalPoint, heightDifference, curSlope) { let cartographic_0 = new Cesium.Cartographic( (targetPoint.longitude + center2.longitude) / 2, (targetPoint.latitude + center2.latitude) / 2, (targetPoint.height + center2.height) / 2 ); let cartographic_1 = new Cesium.Cartographic( (diagonalPoint.longitude + center2.longitude) / 2, (diagonalPoint.latitude + center2.latitude) / 2, (diagonalPoint.height + center2.height) / 2 ); let positions1 = heightDifference > 0 ? [ Cesium.Cartographic.toCartesian(cartographic_0), Cesium.Cartographic.toCartesian(cartographic_1) ] : [ Cesium.Cartographic.toCartesian(cartographic_1), Cesium.Cartographic.toCartesian(cartographic_0) ]; const instance = new Cesium.GeometryInstance({ id: { type: "SlopeAspect", value: curSlope }, geometry: new Cesium.GroundPolylineGeometry({ positions: positions1, width: this.arrowWidth }), attributes: { color: Cesium.ColorGeometryInstanceAttribute.fromColor( Cesium.Color.BLUE.withAlpha(0.6) ), show: new Cesium.ShowGeometryInstanceAttribute(true) } }); return instance; } _calculateSlope(ellipseResults) { let _self = this; let instances = []; let polygonInstance = []; for (let index2 = 0; index2 < ellipseResults.length; index2++) { const ellipse = ellipseResults[index2]; const center2 = ellipse[0]; let heightDifference = 0; let maxIndex = 0; for (let i2 = 1; i2 < ellipse.length - 1; i2++) { const point2 = ellipse[i2]; let curHD = point2.height - center2.height; if (Math.abs(curHD) > heightDifference) { heightDifference = curHD; maxIndex = i2; } } let pos0 = new Cesium.Cartographic(center2.longitude, center2.latitude, 0); let pos1 = new Cesium.Cartographic( ellipse[maxIndex].longitude, ellipse[maxIndex].latitude, 0 ); let distance2 = Cesium.Cartesian3.distance( Cesium.Cartographic.toCartesian(pos0), Cesium.Cartographic.toCartesian(pos1) ); let curSlope = Math.abs(heightDifference / distance2); let curColor = _self._calculateSlopeColor(curSlope, 0.4); const curPolygonInstance = _self._createPolygonInsrance(ellipse, curColor); polygonInstance.push(curPolygonInstance); let diagonalPoint = maxIndex > 4 ? ellipse[maxIndex - 4] : ellipse[maxIndex + 4]; let targetPoint = ellipse[maxIndex]; const arrowInstance = _self._createArrowInstance(targetPoint, center2, diagonalPoint, heightDifference, curSlope); instances.push(arrowInstance); } const mapPrimitive = _self._viewer.scene.primitives.add( new Cesium.GroundPrimitive({ geometryInstances: polygonInstance, appearance: new Cesium.PerInstanceColorAppearance({ translucent: true, closed: false }) }) ); const arrowPrimitive = _self._viewer.scene.primitives.add( new Cesium.GroundPolylinePrimitive({ geometryInstances: instances, appearance: new Cesium.PolylineMaterialAppearance({ material: new Cesium.Material({ fabric: { type: "PolylineArrow", uniforms: { color: new Cesium.Color(1, 1, 0, 0.8) } } }) }) }) ); _self.result.push(arrowPrimitive, mapPrimitive); } _calculateSlopeColor(value, alpha) { if (value < 0.00872686779075879) { return "rgba(85,182,43," + alpha + ")"; } else if (value < 0.03492076949174773) { return "rgba(135,211,43," + alpha + ")"; } else if (value < 0.08748866352592401) { return "rgba(204,244,44," + alpha + ")"; } else if (value < 0.2679491924311227) { return "rgba(245,233,44," + alpha + ")"; } else if (value < 0.7002075382097097) { return "rgba(255,138,43," + alpha + ")"; } else if (value < 1.4281480067421144) { return "rgba(255,84,43," + alpha + ")"; } else { return "rgba(255,32,43," + alpha + ")"; } } } Object.assign(SlopeAspect.prototype, { createNew4Distance(points2, options2) { let _self = this; options2 = options2 || {}; options2.distance = options2.distance || 0.1; let width2 = options2.distance * 200 > 35 ? 35 : options2.distance * 200; _self.arrowWidth = width2 < 15 ? 15 : width2; let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); _self.clearAll(); let degrees = CoordTransform.Cartesian3ListToWGS84(positions); let boundary = []; let minX = 1e4, minY = 1e4, maxX = -1e4, maxY = -1e3; for (let index2 = 0; index2 < degrees.length; index2++) { const element = degrees[index2]; const x = element.lng; const y = element.lat; boundary.push([x, y]); minX = x < minX ? x : minX; minY = y < minY ? y : minY; maxX = x > maxX ? x : maxX; maxY = y > maxY ? y : maxY; } boundary.push(boundary[0]); let bbox2 = [minX, minY, maxX, maxY]; let mask = polygon([boundary]); let gridSquare = squareGrid(bbox2, options2.distance, { mask }); _self._createEllipse(gridSquare); }, createNew4Num(points2, options2) { let _self = this; options2 = options2 || {}; options2.num = Cesium.defaultValue(options2.num, 10); let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); _self.clearAll(); let degrees = CoordTransform.Cartesian3ListToWGS84(positions); let boundary = []; let minX = 1e4, minY = 1e4, maxX = -1e4, maxY = -1e3; for (let index2 = 0; index2 < degrees.length; index2++) { const element = degrees[index2]; const x = element.lng; const y = element.lat; boundary.push([x, y]); minX = x < minX ? x : minX; minY = y < minY ? y : minY; maxX = x > maxX ? x : maxX; maxY = y > maxY ? y : maxY; } boundary.push(boundary[0]); let bbox2 = [minX, minY, maxX, maxY]; let a = maxX - minX; let b = maxY - minY; b = b > a ? b : a; const step = b / options2.num; let width2 = step * 2e3 > 35 ? 35 : step * 2e3; _self.arrowWidth = width2 < 15 ? 15 : width2; polygon([boundary]); let gridSquare = squareGrid(bbox2, step, { units: "degrees" }); _self._createEllipse(gridSquare); }, clearAll() { this.result.forEach((element) => { this._viewer.scene.primitives.remove(element); }); this.result = []; if (this.handler) { this.handler.destroy(); this.handler = void 0; } } }); let TerrainAnalysis = { TerrainExcavation, SlopeAspect }; class Weather { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; } _initRain() { this.rainStage = new Cesium.PostProcessStage({ name: "jt_rain", fragmentShader: this._rain(), uniforms: { tiltAngle: () => { return this.tiltAngle; }, rainSize: () => { return this.rainSize; }, rainSpeed: () => { return this.rainSpeed; } } }); this._viewer.scene.postProcessStages.add(this.rainStage); } _initSnow() { this.snowStage = new Cesium.PostProcessStage({ name: "jt_snow", fragmentShader: this._snow(), uniforms: { snowSize: () => { return this.snowSize; }, snowSpeed: () => { return this.snowSpeed; } } }); this._viewer.scene.postProcessStages.add(this.snowStage); } _initFog() { this.fogStage = new Cesium.PostProcessStage({ name: "jt_fog", fragmentShader: this._fog(), uniforms: { visibility: () => { return this.visibility; }, fogColor: () => { return this.color; } } }); this._viewer.scene.postProcessStages.add(this.fogStage); } _rain() { return "uniform sampler2D colorTexture;\n varying vec2 v_textureCoordinates;\n uniform float tiltAngle;\n uniform float rainSize;\n uniform float rainSpeed;\n float hash(float x) {\n return fract(sin(x * 133.3) * 13.13);\n }\n void main(void) {\n float time = czm_frameNumber / rainSpeed;\n vec2 resolution = czm_viewport.zw;\n vec2 uv = (gl_FragCoord.xy * 2. - resolution.xy) / min(resolution.x, resolution.y);\n vec3 c = vec3(.6, .7, .8);\n float a = tiltAngle;\n float si = sin(a), co = cos(a);\n uv *= mat2(co, -si, si, co);\n uv *= length(uv + vec2(0, 4.9)) * rainSize + 1.;\n float v = 1. - sin(hash(floor(uv.x * 100.)) * 2.);\n float b = clamp(abs(sin(20. * time * v + uv.y * (5. / (2. + v)))) - .95, 0., 1.) * 20.;\n c *= v * b;\n gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), vec4(c, 1), .5);\n }\n "; } _snow() { return "uniform sampler2D colorTexture;\n varying vec2 v_textureCoordinates;\n uniform float snowSpeed;\n uniform float snowSize;\n float snow(vec2 uv,float scale)\n {\n float time=czm_frameNumber/snowSpeed;\n float w=smoothstep(1.,0.,-uv.y*(scale/10.));if(w<.1)return 0.;\n uv+=time/scale;uv.y+=time*2./scale;uv.x+=sin(uv.y+time*.5)/scale;\n uv*=scale;vec2 s=floor(uv),f=fract(uv),p;float k=3.,d;\n p=.5+.35*sin(11.*fract(sin((s+p+scale)*mat2(7,3,6,5))*5.))-f;d=length(p);k=min(d,k);\n k=smoothstep(0.,k,sin(f.x+f.y)*snowSize);\n return k*w;\n }\n void main(void){\n vec2 resolution=czm_viewport.zw;\n vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y);\n vec3 finalColor=vec3(0);\n //float c=smoothstep(1.,0.3,clamp(uv.y*.3+.8,0.,.75));\n float c=0.;\n c+=snow(uv,30.)*.0;\n c+=snow(uv,20.)*.0;\n c+=snow(uv,15.)*.0;\n c+=snow(uv,10.);\n c+=snow(uv,8.);\n c+=snow(uv,6.);\n c+=snow(uv,5.);\n finalColor=(vec3(c));\n gl_FragColor=mix(texture2D(colorTexture,v_textureCoordinates),vec4(finalColor,1),.5);\n }\n "; } _fog() { return "uniform sampler2D colorTexture;\n uniform sampler2D depthTexture;\n uniform float visibility;\n uniform vec4 fogColor;\n varying vec2 v_textureCoordinates; \n void main(void) \n { \n vec4 origcolor = texture2D(colorTexture, v_textureCoordinates); \n float depth = czm_readDepth(depthTexture, v_textureCoordinates); \n vec4 depthcolor = texture2D(depthTexture, v_textureCoordinates); \n float f = visibility * (depthcolor.r - 0.3) / 0.2; \n if (f < 0.0) f = 0.0; \n else if (f > 1.0) f = 1.0; \n gl_FragColor = mix(origcolor, fogColor, f); \n }\n"; } _removeSnow() { if (!this._viewer || !this.snowStage) return; this._viewer.scene.postProcessStages.remove(this.snowStage); delete this.snowSize; delete this.snowSpeed; } _removeRain() { if (!this._viewer || !this.rainStage) return; this._viewer.scene.postProcessStages.remove(this.rainStage); delete this.tiltAngle; delete this.rainSize; delete this.rainSpeed; } _removeFog() { if (!this._viewer || !this.fogStage) return; this._viewer.scene.postProcessStages.remove(this.fogStage); delete this.visibility; delete this.color; } } Object.assign(Weather.prototype, { addRainEffect(options2) { options2 = options2 || {}; this.tiltAngle = Cesium.defaultValue(options2.tiltAngle, -0.6); this.rainSize = Cesium.defaultValue(options2.rainSize, 0.3); this.rainSpeed = Cesium.defaultValue(options2.rainSpeed, 60); this._initRain(); }, addSnowEffect(options2) { options2 = options2 || {}; this.snowSize = Cesium.defaultValue(options2.snowSize, 0.02); this.snowSpeed = Cesium.defaultValue(options2.snowSpeed, 60); this._initSnow(); }, addFogEffect(options2) { options2 = options2 || {}; this.visibility = Cesium.defaultValue(options2.visibility, 0.1); this.color = Cesium.defaultValue(options2.color, new Cesium.Color(0.8, 0.8, 0.8, 0.5)); this._show = Cesium.defaultValue(options2.show, true); this._initFog(); }, removeEffect() { if (this.snowStage) { this._removeSnow(); } if (this.rainStage) { this._removeRain(); } if (this.fogStage) { this._removeFog(); } } }); const BoxGeometry = Cesium.BoxGeometry; const Cartesian3 = Cesium.Cartesian3; const defaultValue = Cesium.defaultValue; const defined = Cesium.defined; const destroyObject = Cesium.destroyObject; const DeveloperError$1 = Cesium.DeveloperError; const GeometryPipeline = Cesium.GeometryPipeline; const Matrix3 = Cesium.Matrix3; const Matrix4 = Cesium.Matrix4; const Transforms = Cesium.Transforms; const VertexFormat = Cesium.VertexFormat; const BufferUsage = Cesium.BufferUsage; const CubeMap = Cesium.CubeMap; const DrawCommand = Cesium.DrawCommand; const loadCubeMap = Cesium.loadCubeMap; const RenderState = Cesium.RenderState; const VertexArray = Cesium.VertexArray; const BlendingState = Cesium.BlendingState; const SceneMode = Cesium.SceneMode; const ShaderProgram = Cesium.ShaderProgram; const ShaderSource = Cesium.ShaderSource; const SkyBoxFS = "uniform samplerCube u_cubeMap;\n varying vec3 v_texCoord;\n void main()\n {\n vec4 color = textureCube(u_cubeMap, normalize(v_texCoord));\n gl_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);\n }\n "; const SkyBoxVS = "attribute vec3 position;\n varying vec3 v_texCoord;\n uniform mat3 u_rotateMatrix;\n void main()\n {\n vec3 p = czm_viewRotation * u_rotateMatrix * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));\n gl_Position = czm_projection * vec4(p, 1.0);\n v_texCoord = position.xyz;\n }\n "; if (!Cesium.defined(Cesium.Matrix4.getRotation)) { Cesium.Matrix4.getRotation = Cesium.Matrix4.getMatrix3; } class SkyBoxOnGround { constructor(options2) { this.sources = options2.sources; this._sources = void 0; this.show = defaultValue(options2.show, true); this._command = new DrawCommand({ modelMatrix: Matrix4.clone(Matrix4.IDENTITY), owner: this }); this._cubeMap = void 0; this._attributeLocations = void 0; this._useHdr = void 0; } } const skyboxMatrix3 = new Matrix3(); SkyBoxOnGround.prototype.update = function(frameState, useHdr) { const that = this; if (!this.show) { return void 0; } if (frameState.mode !== SceneMode.SCENE3D && frameState.mode !== SceneMode.MORPHING) { return void 0; } if (!frameState.passes.render) { return void 0; } const context = frameState.context; if (this._sources !== this.sources) { this._sources = this.sources; const sources = this.sources; if (!defined(sources.positiveX) || !defined(sources.negativeX) || !defined(sources.positiveY) || !defined(sources.negativeY) || !defined(sources.positiveZ) || !defined(sources.negativeZ)) { throw new DeveloperError$1( "this.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties." ); } if (typeof sources.positiveX !== typeof sources.negativeX || typeof sources.positiveX !== typeof sources.positiveY || typeof sources.positiveX !== typeof sources.negativeY || typeof sources.positiveX !== typeof sources.positiveZ || typeof sources.positiveX !== typeof sources.negativeZ) { throw new DeveloperError$1( "this.sources properties must all be the same type." ); } if (typeof sources.positiveX === "string") { loadCubeMap(context, this._sources).then(function(cubeMap) { that._cubeMap = that._cubeMap && that._cubeMap.destroy(); that._cubeMap = cubeMap; }); } else { this._cubeMap = this._cubeMap && this._cubeMap.destroy(); this._cubeMap = new CubeMap({ context, source: sources }); } } const command = this._command; command.modelMatrix = Transforms.eastNorthUpToFixedFrame( frameState.camera._positionWC ); if (!defined(command.vertexArray)) { command.uniformMap = { u_cubeMap: function() { return that._cubeMap; }, u_rotateMatrix: function() { return Matrix4.getRotation(command.modelMatrix, skyboxMatrix3); } }; const geometry2 = BoxGeometry.createGeometry( BoxGeometry.fromDimensions({ dimensions: new Cartesian3(2, 2, 2), vertexFormat: VertexFormat.POSITION_ONLY }) ); const attributeLocations = this._attributeLocations = GeometryPipeline.createAttributeLocations( geometry2 ); command.vertexArray = VertexArray.fromGeometry({ context, geometry: geometry2, attributeLocations, bufferUsage: BufferUsage._DRAW }); command.renderState = RenderState.fromCache({ blending: BlendingState.ALPHA_BLEND }); } if (!defined(command.shaderProgram) || this._useHdr !== useHdr) { const fs = new ShaderSource({ defines: [useHdr ? "HDR" : ""], sources: [SkyBoxFS] }); command.shaderProgram = ShaderProgram.fromCache({ context, vertexShaderSource: SkyBoxVS, fragmentShaderSource: fs, attributeLocations: this._attributeLocations }); this._useHdr = useHdr; } if (!defined(this._cubeMap)) { return void 0; } return command; }; SkyBoxOnGround.prototype.isDestroyed = function() { return false; }; SkyBoxOnGround.prototype.destroy = function() { const command = this._command; command.vertexArray = command.vertexArray && command.vertexArray.destroy(); command.shaderProgram = command.shaderProgram && command.shaderProgram.destroy(); this._cubeMap = this._cubeMap && this._cubeMap.destroy(); return destroyObject(this); }; class SkyBox { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._farSkyBox = viewer2.scene.skyBox; } } Object.assign(SkyBox.prototype, { setGroundSkyBox(options2) { options2 = options2 || {}; options2.height = options2.height || 2e5; options2.type = options2.type || "\u84DD\u5929"; if (!options2.sources) { switch (options2.type) { case "\u665A\u971E": options2.sources = { positiveX: "jt3dSDK/imgs/skybox/01/px.png", negativeX: "jt3dSDK/imgs/skybox/01/nx.png", positiveY: "jt3dSDK/imgs/skybox/01/py.png", negativeY: "jt3dSDK/imgs/skybox/01/ny.png", positiveZ: "jt3dSDK/imgs/skybox/01/pz.png", negativeZ: "jt3dSDK/imgs/skybox/01/nz.png" }; break; case "\u9634\u5929": options2.sources = { positiveX: "jt3dSDK/imgs/skybox/02/px.jpg", negativeX: "jt3dSDK/imgs/skybox/02/nx.jpg", positiveY: "jt3dSDK/imgs/skybox/02/py.jpg", negativeY: "jt3dSDK/imgs/skybox/02/ny.jpg", positiveZ: "jt3dSDK/imgs/skybox/02/pz.jpg", negativeZ: "jt3dSDK/imgs/skybox/02/nz.jpg" }; break; case "\u84DD\u5929": options2.sources = { positiveX: "jt3dSDK/imgs/skybox/03/px.jpg", negativeX: "jt3dSDK/imgs/skybox/03/nx.jpg", positiveY: "jt3dSDK/imgs/skybox/03/py.jpg", negativeY: "jt3dSDK/imgs/skybox/03/ny.jpg", positiveZ: "jt3dSDK/imgs/skybox/03/pz.jpg", negativeZ: "jt3dSDK/imgs/skybox/03/nz.jpg" }; break; case "\u7D2B\u8272\u661F\u7A7A": options2.sources = { positiveX: "jt3dSDK/imgs/skybox/04/px.jpg", negativeX: "jt3dSDK/imgs/skybox/04/nx.jpg", positiveY: "jt3dSDK/imgs/skybox/04/py.jpg", negativeY: "jt3dSDK/imgs/skybox/04/ny.jpg", positiveZ: "jt3dSDK/imgs/skybox/04/pz.jpg", negativeZ: "jt3dSDK/imgs/skybox/04/nz.jpg" }; break; case "\u84DD\u8272\u661F\u7A7A": options2.sources = { positiveX: "jt3dSDK/imgs/skybox/05/px.jpg", negativeX: "jt3dSDK/imgs/skybox/05/nx.jpg", positiveY: "jt3dSDK/imgs/skybox/05/py.jpg", negativeY: "jt3dSDK/imgs/skybox/05/ny.jpg", positiveZ: "jt3dSDK/imgs/skybox/05/pz.jpg", negativeZ: "jt3dSDK/imgs/skybox/05/nz.jpg" }; break; } } else if (!Cesium.defined(options2.sources.positiveX) || !Cesium.defined(options2.sources.negativeX) || !Cesium.defined(options2.sources.positiveY) || !Cesium.defined(options2.sources.negativeY) || !Cesium.defined(options2.sources.positiveZ) || !Cesium.defined(options2.sources.negativeZ)) { throw new Cesium.DeveloperError( "options.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties." ); } let _self = this; let groundSkyBox = new SkyBoxOnGround({ sources: options2.sources, show: true }); _self._viewer.scene.postRender.addEventListener(() => { var e = _self._viewer.camera.position; if (Cesium.Cartographic.fromCartesian(e).height < options2.height) { _self._viewer.scene.skyBox = groundSkyBox; } else { _self._viewer.scene.skyBox = _self._defaultSkyBox; } }); } }); class ParticleSystem { constructor(viewer2) { if (!viewer2) throw new DeveloperError("no viewer object!"); this.viewer = viewer2; } } Object.assign(ParticleSystem.prototype, { createParticleFire: function(coordinates) { this.viewer.clock.shouldAnimate = true; var position2 = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], coordinates[2] || 0); var entity = this.viewer.entities.add({ position: position2 }); function computeModelMatrix(entity2, time) { var position3 = Cesium.Property.getValueOrUndefined(entity2.position); var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position3); return modelMatrix; } var viewModel = { startScale: 3, endScale: 1.5, minimumParticleLife: 1.5, maximumParticleLife: 1.8, minimumSpeed: 7, maximumSpeed: 9, particleSize: 2, emissionRate: 200 }; var primitive = this.viewer.scene.primitives.add( new Cesium.ParticleSystem({ image: "jt3dSDK/imgs/particlesystem/fire.png", imageSize: new Cesium.Cartesian2(viewModel.particleSize, viewModel.particleSize), startColor: new Cesium.Color(1, 1, 1, 1), endColor: new Cesium.Color(0.5, 0, 0, 0), startScale: viewModel.startScale, endScale: viewModel.endScale, minimumParticleLife: viewModel.minimumParticleLife, maximumParticleLife: viewModel.maximumParticleLife, minimumSpeed: viewModel.minimumSpeed, maximumSpeed: viewModel.maximumSpeed, emissionRate: viewModel.emissionRate, lifetime: 16, loop: true, sizeInMeters: true, emitter: new Cesium.ConeEmitter(Cesium.Math.toRadians(45)), modelMatrix: computeModelMatrix(entity, Cesium.JulianDate.now()) }) ); entity.remove = function() { viewer.entities.remove(entity); viewer.scene.primitives.remove(primitive); }; return entity; }, createParticleWater: function(coordinates) { let viewer2 = this.viewer; this.viewer.clock.shouldAnimate = true; var position2 = Cesium.Cartesian3.fromDegrees(coordinates[0], coordinates[1], coordinates[2] || 0); var entity = this.viewer.entities.add({ position: position2 }); function computeModelMatrix(entity2, time) { return entity2.computeModelMatrix(time, new Cesium.Matrix4()); } function computeEmitterModelMatrix() { let hpr = Cesium.HeadingPitchRoll.fromDegrees(viewModel.heading, viewModel.pitch, viewModel.roll); let trs = new Cesium.TranslationRotationScale(); trs.translation = Cesium.Cartesian3.fromElements(0, 0, 1); trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr); let Matrix42 = Cesium.Matrix4.fromTranslationRotationScale(trs); return Matrix42; } function updateCallback(p, dt2) { var gravityScratch = new Cesium.Cartesian3(); var position3 = p.position; Cesium.Cartesian3.normalize(position3, gravityScratch); Cesium.Cartesian3.multiplyByScalar(gravityScratch, viewModel.gravity * dt2, gravityScratch); p.velocity = Cesium.Cartesian3.add(p.velocity, gravityScratch, p.velocity); } function update(scene, time) { waterParticleSystem.modelMatrix = computeModelMatrix(entity, time); waterParticleSystem.emitterModelMatrix = computeEmitterModelMatrix(); } viewer2.scene.preUpdate.addEventListener(update); var viewModel = { startScale: 1, endScale: 7, minimumParticleLife: 6, maximumParticleLife: 7, minimumSpeed: 9, maximumSpeed: 9.5, particleSize: 1, emissionRate: 60, gravity: -4, heading: 110, pitch: 30, roll: 0 }; var waterParticleSystem = new Cesium.ParticleSystem({ image: "jt3dSDK/imgs/particlesystem/water.png", imageSize: new Cesium.Cartesian2(viewModel.particleSize, viewModel.particleSize), startColor: new Cesium.Color(1, 1, 1, 0.6), endColor: new Cesium.Color(0.8, 0.86, 1, 0.4), startScale: viewModel.startScale, endScale: viewModel.endScale, minimumParticleLife: viewModel.minimumParticleLife, maximumParticleLife: viewModel.maximumParticleLife, minimumSpeed: viewModel.minimumSpeed, maximumSpeed: viewModel.maximumSpeed, emissionRate: viewModel.emissionRate, sizeInMeters: true, emitter: new Cesium.CircleEmitter(0.2), modelMatrix: computeModelMatrix(entity), emitterModelMatrix: computeEmitterModelMatrix(), updateCallback }); viewer2.scene.primitives.add(waterParticleSystem); entity.remove = function() { viewer2.entities.remove(entity); viewer2.scene.primitives.remove(waterParticleSystem); }; return entity; } }); function Intensity(options2) { options2 = options2 || {}; this.gradient = options2.gradient || { 0.25: "rgba(0, 0, 255, 1)", 0.55: "rgba(0, 255, 0, 1)", 0.85: "rgba(255, 255, 0, 1)", 1: "rgba(255, 0, 0, 1)" }; this.maxSize = options2.maxSize || 35; this.minSize = options2.minSize || 0; this.max = options2.max || 100; this.min = options2.min || 0; this.initPalette(); } Intensity.prototype.setMax = function(value) { this.max = value || 100; }; Intensity.prototype.setMin = function(value) { this.min = value || 0; }; Intensity.prototype.setMaxSize = function(maxSize) { this.maxSize = maxSize || 35; }; Intensity.prototype.setMinSize = function(minSize) { this.minSize = minSize || 0; }; Intensity.prototype.initPalette = function() { let gradient = this.gradient; let canvas = new Canvas(256, 1); let paletteCtx = this.paletteCtx = canvas.getContext("2d"); let lineGradient = paletteCtx.createLinearGradient(0, 0, 256, 1); for (let key in gradient) { lineGradient.addColorStop(parseFloat(key), gradient[key]); } paletteCtx.fillStyle = lineGradient; paletteCtx.fillRect(0, 0, 256, 1); }; Intensity.prototype.getColor = function(value) { let imageData = this.getImageData(value); return "rgba(" + imageData[0] + ", " + imageData[1] + ", " + imageData[2] + ", " + imageData[3] / 256 + ")"; }; Intensity.prototype.getImageData = function(value) { let imageData = this.paletteCtx.getImageData(0, 0, 256, 1).data; if (value === void 0) { return imageData; } let max2 = this.max; let min2 = this.min; if (value > max2) { value = max2; } if (value < min2) { value = min2; } let index2 = Math.floor((value - min2) / (max2 - min2) * (256 - 1)) * 4; return [ imageData[index2], imageData[index2 + 1], imageData[index2 + 2], imageData[index2 + 3] ]; }; Intensity.prototype.getSize = function(value) { let size = 0; let max2 = this.max; let min2 = this.min; let maxSize = this.maxSize; let minSize = this.minSize; if (value > max2) { value = max2; } if (value < min2) { value = min2; } size = minSize + (value - min2) / (max2 - min2) * (maxSize - minSize); return size; }; Intensity.prototype.getLegend = function(options2) { let gradient = this.gradient; let width2 = options2.width || 20; let height2 = options2.height || 180; let canvas = new Canvas(width2, height2); let paletteCtx = canvas.getContext("2d"); let lineGradient = paletteCtx.createLinearGradient(0, height2, 0, 0); for (let key in gradient) { lineGradient.addColorStop(parseFloat(key), gradient[key]); } paletteCtx.fillStyle = lineGradient; paletteCtx.fillRect(0, 0, width2, height2); return canvas; }; function Canvas(width2, height2) { let canvas = document.createElement("canvas"); canvas.width = width2; canvas.height = height2; return canvas; } const Cesium$1 = window.Cesium; class HeatmapIntensity { constructor(viewer2, option = {}) { if (!viewer2) throw new Error("no viewer object!"); this._viewer = viewer2; this._min = option.min || 0; this._max = option.max || 100; this._size = option.size || 20; this._result = void 0; this._canvas = void 0; } get min() { return this._min; } set min(val) { this._min = val; this.updateHeatmap(this._result.canvasData); } get max() { return this._max; } set max(val) { this._max = val; this.updateHeatmap(this._result.canvasData); } get size() { return this._size; } set size(val) { this._size = val; this.updateHeatmap(this._result.canvasData); } get result() { return this._result; } createHeatmap(box, data) { const mercator_WestSouth = this.WGS84ToWebMercator(box.west, box.south, 0); const mercator_EastNorth = this.WGS84ToWebMercator(box.east, box.north, 0); const diffDegrees_X = mercator_EastNorth.x - mercator_WestSouth.x; const diffDegrees_Y = mercator_EastNorth.y - mercator_WestSouth.y; const diffMax = Math.max(diffDegrees_X, diffDegrees_Y); let multiple = diffMax / 300; const width2 = Math.ceil(diffDegrees_X / multiple); const height2 = Math.ceil(diffDegrees_Y / multiple); this.mercator_WestSouth = mercator_WestSouth; this.mercator_EastNorth = mercator_EastNorth; this.diffDegrees_X = diffDegrees_X; this.diffDegrees_Y = diffDegrees_Y; let canvasData = []; data.forEach((element) => { const curMercator = this.WGS84ToWebMercator( Number(element.x), Number(element.y), 0 ); const per_X = (curMercator.x - mercator_WestSouth.x) / diffDegrees_X; const currentPix_X = Math.ceil(per_X * width2); const per_Y = (curMercator.y - mercator_WestSouth.y) / diffDegrees_Y; const currentPix_Y = Math.ceil(per_Y * height2); const currentValue = Number(element.value); canvasData.push({ x: currentPix_X, y: height2 - currentPix_Y - 1, value: currentValue }); }); let canvas = new Canvas(width2, height2); let context = canvas.getContext("2d"); context.clearRect(0, 0, canvas.width, canvas.height); let circle = this.createCircle(this._size); let circleHalfWidth = circle.width / 2; let circleHalfHeight = circle.height / 2; let dataOrderByAlpha = {}; canvasData.forEach((item) => { let alpha = item.value < this._min ? 0 : Math.min(1, item.value / this._max).toFixed(2); dataOrderByAlpha[alpha] = dataOrderByAlpha[alpha] || []; dataOrderByAlpha[alpha].push(item); }); for (let i2 in dataOrderByAlpha) { if (isNaN(i2)) continue; let _data = dataOrderByAlpha[i2]; context.beginPath(); context.globalAlpha = i2; _data.forEach((item) => { context.drawImage( circle, item.x - circleHalfWidth, item.y - circleHalfHeight ); }); } let intensity = new Intensity(); let colored = context.getImageData( 0, 0, context.canvas.width, context.canvas.height ); const options2 = { min: 0, max: this._max, size: this._size }; this.colorize(options2, colored.data, intensity.getImageData()); context.clearRect(0, 0, context.canvas.width, context.canvas.height); context.putImageData(colored, 0, 0); let entity = this._viewer.entities.add({ name: "rectangle", rectangle: { coordinates: Cesium$1.Rectangle.fromDegrees( box.west, box.south, box.east, box.north ), material: new Cesium$1.ImageMaterialProperty({ image: canvas, transparent: true }) } }); this._canvas = canvas; this._result = { box, data, canvasData, entity }; return this._result; } setData(data) { if (!this._result) { return; } let canvasData = []; const height2 = this._canvas.height; const width2 = this._canvas.width; data.forEach((element) => { const curMercator = this.WGS84ToWebMercator( Number(element.x), Number(element.y), 0 ); const per_X = (curMercator.x - this.mercator_WestSouth.x) / this.diffDegrees_X; const currentPix_X = Math.ceil(per_X * width2); const per_Y = (curMercator.y - this.mercator_WestSouth.y) / this.diffDegrees_Y; const currentPix_Y = Math.ceil(per_Y * height2); const currentValue = Number(element.value); canvasData.push({ x: currentPix_X, y: height2 - currentPix_Y - 1, value: currentValue }); }); this._result.data = data; this._result.canvasData = canvasData; this.updateHeatmap(canvasData); } updateHeatmap(data) { let canvas = this._canvas; let context = canvas.getContext("2d"); context.clearRect(0, 0, canvas.width, canvas.height); let circle = this.createCircle(this._size); let circleHalfWidth = circle.width / 2; let circleHalfHeight = circle.height / 2; let dataOrderByAlpha = {}; data.forEach((item) => { let alpha = item.value < this._min ? 0 : Math.min(1, item.value / this._max).toFixed(2); dataOrderByAlpha[alpha] = dataOrderByAlpha[alpha] || []; dataOrderByAlpha[alpha].push(item); }); for (let i2 in dataOrderByAlpha) { if (isNaN(i2)) continue; let _data = dataOrderByAlpha[i2]; context.beginPath(); context.globalAlpha = i2; _data.forEach((item) => { context.drawImage( circle, item.x - circleHalfWidth, item.y - circleHalfHeight ); }); } let intensity = new Intensity(); let colored = context.getImageData( 0, 0, context.canvas.width, context.canvas.height ); const options2 = { min: 0, max: this._max, size: this._size }; this.colorize(options2, colored.data, intensity.getImageData()); context.clearRect(0, 0, context.canvas.width, context.canvas.height); context.putImageData(colored, 0, 0); this._result.entity.rectangle.material = new Cesium$1.ImageMaterialProperty({ image: canvas, transparent: true }); return this._result; } createCircle(size) { let shadowBlur = size / 2; let r2 = size + shadowBlur; let offsetDistance = 1e4; let circle = new Canvas(r2 * 2, r2 * 2); let context = circle.getContext("2d"); context.shadowBlur = shadowBlur; context.shadowColor = "black"; context.shadowOffsetX = context.shadowOffsetY = offsetDistance; context.beginPath(); context.arc( r2 - offsetDistance, r2 - offsetDistance, size, 0, Math.PI * 2, true ); context.closePath(); context.fill(); return circle; } colorize(options2, pixels, gradient) { let max2 = options2.max; let min2 = options2.min; let diff = max2 - min2; let range3 = options2.range || null; let jMin = 0; let jMax = 1024; if (range3 && range3.length === 2) { jMin = (range3[0] - min2) / diff * 1024; } if (range3 && range3.length === 2) { jMax = (range3[1] - min2) / diff * 1024; } let maxOpacity = options2.maxOpacity || 0.8; for (let i2 = 3, len = pixels.length, j; i2 < len; i2 += 4) { j = pixels[i2] * 4; if (pixels[i2] / 256 > maxOpacity) { pixels[i2] = 256 * maxOpacity; } if (j && j >= jMin && j <= jMax) { pixels[i2 - 3] = gradient[j]; pixels[i2 - 2] = gradient[j + 1]; pixels[i2 - 1] = gradient[j + 2]; } else { pixels[i2] = 0; } } } WGS84ToWebMercator(lng, lat, height2) { let mercator = {}; let x = lng * 2003750834e-2 / 180; let y = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180); y = y * 2003750834e-2 / 180; mercator.x = x; mercator.y = y; mercator.z = height2; return mercator; } clearAll() { this._result && this._viewer.entities.remove(this._result.entity); this._result = void 0; } } let SceneEffects = { Weather, SkyBox, ParticleSystem, HeatmapIntensity }; class ImageLayerSplit { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; } } Object.assign(ImageLayerSplit.prototype, { initSplit() { let _self = this; this.viewer = this._viewer; let sliderDiv = document.getElementById("image_slider"); if (sliderDiv == null) { sliderDiv = document.createElement("div"); sliderDiv.id = "image_slider"; sliderDiv.style.position = "absolute"; sliderDiv.style.left = "50%"; sliderDiv.style.top = "0px"; sliderDiv.style.backgroundColor = "#d3d3d3"; sliderDiv.style.width = "5px"; sliderDiv.style.height = "100%"; sliderDiv.style.zIndex = "9999"; sliderDiv.onmouseover = function() { this.style.cursor = "ew-resize"; }; document.body.appendChild(sliderDiv); } this.slider = sliderDiv; viewer.scene.splitPosition = this.slider.offsetLeft / this.slider.parentElement.offsetWidth; if (this.handler) { this.handler.destroy(); this.handler = null; } this.handler = new Cesium.ScreenSpaceEventHandler(this.slider); var moveActive = false; function move(movement) { if (!moveActive) { return; } var relativeOffset = movement.endPosition.x; var splitPosition = (_self.slider.offsetLeft + relativeOffset) / _self.slider.parentElement.offsetWidth; _self.slider.style.left = `${100 * splitPosition}%`; viewer.scene.splitPosition = splitPosition; } this.handler.setInputAction(function() { moveActive = true; }, Cesium.ScreenSpaceEventType.LEFT_DOWN); this.handler.setInputAction(function() { moveActive = true; }, Cesium.ScreenSpaceEventType.PINCH_START); this.handler.setInputAction(move, Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(move, Cesium.ScreenSpaceEventType.PINCH_MOVE); this.handler.setInputAction(function() { moveActive = false; }, Cesium.ScreenSpaceEventType.LEFT_UP); this.handler.setInputAction(function() { moveActive = false; }, Cesium.ScreenSpaceEventType.PINCH_END); }, addSplitLayer(earthAtLeft, earthAtRight) { if (this.earthAtLeft) { this._viewer.imageryLayers.remove(this.earthAtLeft); } if (this.earthAtRight) { this._viewer.imageryLayers.remove(this.earthAtRight); } this.earthAtLeft = earthAtLeft; this.earthAtRight = earthAtRight; this.earthAtLeft.splitDirection = Cesium.SplitDirection.LEFT; this.earthAtRight.splitDirection = Cesium.SplitDirection.RIGHT; }, removeSplitLayer() { document.body.removeChild(this.slider); if (this.earthAtLeft) { this._viewer.imageryLayers.remove(this.earthAtLeft); } if (this.earthAtRight) { this._viewer.imageryLayers.remove(this.earthAtRight); } } }); class ViewerSplitScreen { constructor() { } } Object.assign(ViewerSplitScreen.prototype, { initHandler(viewer1, viewer2) { var _self = this; if (_self.handler1 && _self.handler1.getInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE)) { return; } _self.handler1 = new Cesium.ScreenSpaceEventHandler(viewer1.scene.canvas); _self.handler2 = new Cesium.ScreenSpaceEventHandler(viewer2.scene.canvas); _self.handler1.setInputAction(function(movement) { var _camerca = viewer1.camera; viewer2.camera.setView({ destination: _camerca.position, orientation: { direction: _camerca._direction, up: _camerca.up, heading: _camerca.heading, pitch: _camerca.pitch, roll: _camerca.roll } }); }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); _self.handler1.setInputAction(function(movement) { var _camerca = viewer1.camera; viewer2.camera.setView({ destination: _camerca.position, orientation: { direction: _camerca._direction, up: _camerca.up, heading: _camerca.heading, pitch: _camerca.pitch, roll: _camerca.roll } }); }, Cesium.ScreenSpaceEventType.WHEEL); _self.handler2.setInputAction(function(movement) { var _camerca = viewer2.camera; viewer1.camera.setView({ destination: _camerca.position, orientation: { direction: _camerca._direction, up: _camerca.up, heading: _camerca.heading, pitch: _camerca.pitch, roll: _camerca.roll } }); }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); _self.handler2.setInputAction(function(movement) { var _camerca = viewer2.camera; viewer1.camera.setView({ destination: _camerca.position, orientation: { direction: _camerca._direction, up: _camerca.up, heading: _camerca.heading, pitch: _camerca.pitch, roll: _camerca.roll } }); }, Cesium.ScreenSpaceEventType.WHEEL); }, clearHandler() { var _self = this; if (_self.handler1) { _self.handler1.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE); _self.handler1.removeInputAction(Cesium.ScreenSpaceEventType.WHEEL); } if (_self.handler2) { _self.handler2.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE); _self.handler2.removeInputAction(Cesium.ScreenSpaceEventType.WHEEL); } } }); let SceneControl = { ImageLayerSplit, ViewerSplitScreen }; class TrackRoam { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._draw3DObj = null; } _startFly(pathsData, options2) { var _self = this; options2 = options2 || {}; options2.time = Cesium.defaultValue(options2.time, 360); options2.isPathShow = Cesium.defaultValue(options2.isPathShow, true); options2.height = Cesium.defaultValue(options2.height, 5); options2.role = Cesium.defaultValue(options2.role, 1); this.url = options2.modelUrl; this.time = options2.time; this.isPathShow = options2.isPathShow; this.height = options2.height; this.role = options2.role; _self.clearFlyPaths(); _self._viewer.camera.setView({ destination: pathsData.position, orientation: pathsData.orientation }); setTimeout(function() { executeFly3D(); }, 200); function executeFly3D() { if (pathsData && pathsData.geometry) { var positionA = pathsData.geometry.coordinates; let positions = positionA.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2.lng, point2.lat, point2.height); }); let distance2 = []; for (let i2 = 0; i2 < positions.length - 1; i2++) { let dis = Cesium.Cartesian3.distance(positions[i2], positions[i2 + 1]); distance2.push(dis); } let times = [Cesium.JulianDate.fromDate(new Date())]; times.push(Cesium.JulianDate.addSeconds(times[0], _self.time, new Cesium.JulianDate())); for (let i2 = 1; i2 < positions.length - 1; i2++) { let s = Cesium.JulianDate.addSeconds(times[i2], _self.time * (distance2[i2] / distance2[0]), new Cesium.JulianDate()); times.push(s); } let oriSamples = new Cesium.SampledProperty(Cesium.Cartesian3); oriSamples.addSamples(times, positions); let startTime = times[0]; let stopTime = times[times.length - 1]; _self._viewer.clock.startTime = startTime.clone(); _self._viewer.clock.stopTime = stopTime.clone(); _self._viewer.clock.currentTime = startTime.clone(); _self._viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; _self._viewer.clock.multiplier = 10; let timeOfResolution = 6; let samplesNum = Math.floor( Cesium.JulianDate.secondsDifference(stopTime, startTime) / timeOfResolution ); let sampledPositions = []; let sampledTimes = []; for (let i2 = 0; i2 < samplesNum + 1; i2++) { let sampleTime = Cesium.JulianDate.addSeconds( startTime, i2 * timeOfResolution, new Cesium.JulianDate() ); let tmpPos = oriSamples.getValue(sampleTime); sampledPositions.push(Cesium.Cartographic.fromCartesian(tmpPos)); sampledTimes.push(sampleTime); } Cesium.sampleTerrainMostDetailed( _self._viewer.terrainProvider, sampledPositions ).then(() => { let carPositionProperty = new Cesium.SampledPositionProperty(); for (let i2 = 0; i2 < sampledPositions.length; i2++) { sampledPositions[i2].height = sampledPositions[i2].height + _self.height; } for (let i2 = 0; i2 < samplesNum + 1; i2++) { carPositionProperty.addSample( sampledTimes[i2], Cesium.Ellipsoid.WGS84.cartographicToCartesian(sampledPositions[i2]) ); } var position2 = carPositionProperty; _self.entityFly = _self._viewer.entities.add({ availability: new Cesium.TimeIntervalCollection([ new Cesium.TimeInterval({ start: startTime, stop: stopTime }) ]), position: position2, orientation: new Cesium.VelocityOrientationProperty(position2), point: { color: Cesium.Color.RED, outlineColor: Cesium.Color.WHITE, outlineWidth: 2, pixelSize: 10 }, path: { show: _self.isPathShow, resolution: 1, material: new Cesium.PolylineGlowMaterialProperty({ glowPower: 0.1, color: Cesium.Color.YELLOW }), width: 10 } }); if (_self.role == 0) ; else if (_self.role == 1) { _self._viewer.trackedEntity = _self.entityFly; } else if (_self.role == 2) { _self._viewer.trackedEntity = _self.entityFly; let exection = function TimeExecution() { if (_self._viewer.clock.shouldAnimate === true) { let center2 = _self.entity.position.getValue( _self._viewer.clock.currentTime ); let orientation = _self.entity.orientation.getValue( _self._viewer.clock.currentTime ); let transform3 = Cesium.Transforms.eastNorthUpToFixedFrame(center2); transform3 = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation), center2); _self._viewer.camera.lookAtTransform(transform3, new Cesium.Cartesian3(-50, 0, 250)); } }; _self._viewer.clock.onTick.addEventListener(exection); } else if (_self.role == 3) { _self._viewer.trackedEntity = _self.entityFly; let exection = function TimeExecution() { if (_self._viewer.clock.shouldAnimate === true) { let center2 = _self.entity.position.getValue( _self._viewer.clock.currentTime ); _self._viewer.camera.lookAt(center2, new Cesium.Cartesian3(0, 0, 1e3)); } }; _self._viewer.clock.onTick.addEventListener(exection); } }); } else { return; } } } } Object.assign(TrackRoam.prototype, { drawFlyPaths(coordinates, options2) { return new Promise((resolve2, reject2) => { let _self = this; _self.clearFlyPaths(); let position2 = _self._viewer.camera.position; let heading = _self._viewer.camera.heading; let pitch = _self._viewer.camera.pitch; let roll = _self._viewer.camera.roll; var pathsData = { "orientation": { "heading": heading, "pitch": pitch, "roll": roll }, "position": position2, "clampToGround": true, "geometry": { "type": "LineString", "coordinates": coordinates } }; _self._draw3DObj = pathsData; resolve2(true); }); }, clearFlyPaths() { this._draw3DObj = null; this._viewer.trackedEntity = void 0; this._viewer.entities.remove(this.entityFly); }, startFly(options2, callError) { if (this._draw3DObj) { this._startFly(this._draw3DObj, options2); } else { if (callError) callError("\u6F2B\u6E38\u8DEF\u7EBF\u4E0D\u5B58\u5728"); } }, pauseFly() { var clockViewModel = this._viewer.clockViewModel; if (clockViewModel.shouldAnimate) { clockViewModel.shouldAnimate = false; } else if (this._viewer.clockViewModel.canAnimate) { clockViewModel.shouldAnimate = true; } }, forwardFly() { var clockViewModel = this._viewer.clockViewModel; var multiplier = clockViewModel.multiplier; if (multiplier < 0) { clockViewModel.multiplier = -multiplier; } clockViewModel.shouldAnimate = true; }, backwardsFly() { var clockViewModel = this._viewer.clockViewModel; var multiplier = clockViewModel.multiplier; if (multiplier > 0) { clockViewModel.multiplier = -multiplier; } clockViewModel.shouldAnimate = true; }, outFly() { var start2 = Cesium.JulianDate.fromDate(new Date()); this._viewer.clock.startTime = start2.clone(); var stop = Cesium.JulianDate.addSeconds(start2, 3e8, new Cesium.JulianDate()); this._viewer.clock.stopTime = stop.clone(); this.clearFlyPaths(); } }); class Roaming { constructor(viewer2, positions, options2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!positions) throw new Cesium.DeveloperError("no positions Array!"); this.viewer = viewer2; this.entity = void 0; options2 = options2 || {}; options2.time = Cesium.defaultValue(options2.time, 360); options2.speed = Cesium.defaultValue(options2.speed, 10); options2.isPathShow = Cesium.defaultValue(options2.isPathShow, true); options2.height = Cesium.defaultValue(options2.height, 5); options2.role = Cesium.defaultValue(options2.role, 1); options2.followedX = Cesium.defaultValue(options2.followedX, 50); options2.followedZ = Cesium.defaultValue(options2.followedZ, 10); this.time = options2.time; this.speed = options2.speed; this.isPathShow = options2.isPathShow; this.height = options2.height; this.role = options2.role; this.followedX = options2.followedX; this.followedZ = options2.followedZ; this.model = options2.model; this.billboard = options2.billboard; this.point = options2.point; this.label = options2.label; this.property = this.ComputeRoamingLineProperty(positions, this.time); } ComputeRoamingLineProperty(Lines, time) { let positions = []; if (Lines[0] instanceof Cesium.Cartesian3) { positions = Lines; } else { positions = Lines.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); } let distance2 = []; for (let i2 = 0; i2 < positions.length - 1; i2++) { let dis = Cesium.Cartesian3.distance(positions[i2], positions[i2 + 1]); distance2.push(dis); } let times = [Cesium.JulianDate.fromDate(new Date())]; times.push(Cesium.JulianDate.addSeconds(times[0], time, new Cesium.JulianDate())); for (let i2 = 1; i2 < positions.length - 1; i2++) { let s = Cesium.JulianDate.addSeconds(times[i2], time * (distance2[i2] / distance2[0]), new Cesium.JulianDate()); times.push(s); } let oriSamples = new Cesium.SampledProperty(Cesium.Cartesian3); oriSamples.addSamples(times, positions); let startTime = times[0]; let stopTime = times[times.length - 1]; this.viewer.clock.startTime = startTime.clone(); this.viewer.clock.stopTime = stopTime.clone(); this.viewer.clock.currentTime = startTime.clone(); this.viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; this.viewer.clock.multiplier = this.speed; let timeOfResolution = 6; let samplesNum = Math.floor( Cesium.JulianDate.secondsDifference(stopTime, startTime) / timeOfResolution ); let sampledPositions = []; let sampledTimes = []; for (let i2 = 0; i2 < samplesNum + 1; i2++) { let sampleTime = Cesium.JulianDate.addSeconds( startTime, i2 * timeOfResolution, new Cesium.JulianDate() ); let tmpPos = oriSamples.getValue(sampleTime); sampledPositions.push(Cesium.Cartographic.fromCartesian(tmpPos)); sampledTimes.push(sampleTime); } Cesium.sampleTerrainMostDetailed( this.viewer.terrainProvider, sampledPositions ).then((updatedPositions) => { let carPositionProperty = new Cesium.SampledPositionProperty(); for (let i2 = 0; i2 < sampledPositions.length; i2++) { sampledPositions[i2].height = sampledPositions[i2].height + this.height; } for (let i2 = 0; i2 < samplesNum + 1; i2++) { carPositionProperty.addSample( sampledTimes[i2], Cesium.Ellipsoid.WGS84.cartographicToCartesian(sampledPositions[i2]) ); } var position2 = carPositionProperty; this.InitRoaming(position2, startTime, stopTime, this.isPathShow); }); } InitRoaming(position2, start2, stop, isPathShow) { this.entity = this.viewer.entities.add({ availability: new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({ start: start2, stop })]), position: position2, orientation: new Cesium.VelocityOrientationProperty(position2), path: { resolution: 1, material: new Cesium.PolylineGlowMaterialProperty({ glowPower: 0.1, color: Cesium.Color.YELLOW }), width: 10, show: isPathShow } }); if (this.model) { let model = this.model; this.entity.model = { uri: model.url, minimumPixelSize: 64, maximumSize: 128, maximumScale: 200, show: true, silhouetteColor: Cesium.Color.WHITE, debugWireframe: false, debugShowBoundingVolume: false, scale: 20, runAnimations: true }; } else if (this.billboard) { let billboard = this.billboard; billboard.imgUrl = Cesium.defaultValue(billboard.imgUrl, "jt3dSDK/imgs/point/point3.png"); this.entity.billboard = { image: billboard.imgUrl, show: true, width: 30, scale: 1, height: 30, pixelOffset: new Cesium.Cartesian2(0, -14) }; } else { let point2 = {}; if (this.point) { point2 = this.point; } point2.pixelSize = Cesium.defaultValue(point2.pixelSize, 10); if (point2.color) { if (point2.color instanceof Array) { point2.color = new Cesium.Color(point2.color[0] / 255, point2.color[1] / 255, point2.color[2] / 255, point2.color[3]); } else if (typeof point2.color === "string") { point2.color = new Cesium.Color.fromCssColorString(point2.color); } else { point2.color = new Cesium.Color.fromCssColorString("#FFFF00"); } } if (point2.outlineColor) { if (point2.outlineColor instanceof Array) { point2.outlineColor = new Cesium.Color(point2.outlineColor[0] / 255, point2.outlineColor[1] / 255, point2.outlineColor[2] / 255, point2.outlineColor[3]); } else if (typeof point2.outlineColor === "string") { point2.outlineColor = new Cesium.Color.fromCssColorString(point2.outlineColor); } else { point2.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00"); } } point2.outlineWidth = Cesium.defaultValue(point2.outlineWidth, 2); this.entity.point = point2; } if (this.label) { let label2 = this.label; label2.text = Cesium.defaultValue(label2.text, ""); label2.font = Cesium.defaultValue(label2.font, "24px Helvetica"); if (label2.fillColor) { if (label2.fillColor instanceof Array) { label2.fillColor = new Cesium.Color(label2.fillColor[0] / 255, label2.fillColor[1] / 255, label2.fillColor[2] / 255, label2.fillColor[3]); } else if (typeof label2.fillColor === "string") { label2.fillColor = new Cesium.Color.fromCssColorString(label2.fillColor); } else { label2.fillColor = new Cesium.Color.fromCssColorString("#FFFF00"); } } if (label2.outlineColor) { if (label2.outlineColor instanceof Array) { label2.outlineColor = new Cesium.Color(label2.outlineColor[0] / 255, label2.outlineColor[1] / 255, label2.outlineColor[2] / 255, label2.outlineColor[3]); } else if (typeof label2.outlineColor === "string") { label2.outlineColor = new Cesium.Color.fromCssColorString(label2.outlineColor); } else { label2.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00"); } } label2.outlineWidth = Cesium.defaultValue(label2.outlineWidth, 1); label2.showBackground = Cesium.defaultValue(label2.showBackground, false); if (label2.backgroundColor) { if (label2.backgroundColor instanceof Array) { label2.backgroundColor = new Cesium.Color(label2.backgroundColor[0] / 255, label2.backgroundColor[1] / 255, label2.backgroundColor[2] / 255, label2.backgroundColor[3]); } else if (typeof label2.backgroundColor === "string") { label2.backgroundColor = new Cesium.Color.fromCssColorString(label2.backgroundColor); } else { label2.backgroundColor = new Cesium.Color.fromCssColorString("#FFFF00"); } } label2.pixelOffset = Cesium.defaultValue(label2.pixelOffset, 0); label2.scale = Cesium.defaultValue(label2.scale, 1); label2.near = Cesium.defaultValue(label2.near, 150); label2.nearValue = Cesium.defaultValue(label2.nearValue, 1); label2.far = Cesium.defaultValue(label2.far, 2400); label2.farValue = Cesium.defaultValue(label2.farValue, 0); this.entity.label = { text: label2.text, font: label2.font, fillColor: label2.fillColor, outlineColor: label2.outlineColor, outlineWidth: label2.outlineWidth, style: Cesium.LabelStyle.FILL_AND_OUTLINE, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, showBackground: label2.showBackground, backgroundColor: label2.backgroundColor, backgroundPadding: new Cesium.Cartesian2(6, 6), disableDepthTestDistance: Number.POSITIVE_INFINITY, pixelOffset: new Cesium.Cartesian2(0, label2.pixelOffset), scale: label2.scale }; } this.entity.position.setInterpolationOptions({ interpolationDegree: 5, interpolationAlgorithm: Cesium.LagrangePolynomialApproximation }); this.initRole(this.role); } initRole(role) { let _self = this; if (role == 0) { this.viewer.trackedEntity = void 0; let len = _self.viewer.clock.onTick.numberOfListeners; for (let i2 = 0; i2 < len; i2++) { _self.viewer.clock.onTick.removeEventListener(_self.viewer.clock.onTick._listeners[i2]); } } else if (role == 1) { this.viewer.trackedEntity = this.entity; let len = _self.viewer.clock.onTick.numberOfListeners; for (let i2 = 0; i2 < len; i2++) { _self.viewer.clock.onTick.removeEventListener(_self.viewer.clock.onTick._listeners[i2]); } } else if (role == 2) { this.viewer.trackedEntity = this.entity; let exection = function TimeExecution() { if (_self.viewer.clock.shouldAnimate === true) { let center2 = _self.entity.position.getValue( _self.viewer.clock.currentTime ); let orientation = _self.entity.orientation.getValue( _self.viewer.clock.currentTime ); let transform3 = Cesium.Transforms.eastNorthUpToFixedFrame(center2); transform3 = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation), center2); var transformX = _self.followedX || 50; var transformZ = _self.followedZ || 10; _self.viewer.camera.lookAtTransform(transform3, new Cesium.Cartesian3(transformX, 0, transformZ)); } }; this.viewer.clock.onTick.addEventListener(exection); } else if (role == 3) { this.viewer.trackedEntity = this.entity; let exection = function TimeExecution() { if (_self.viewer.clock.shouldAnimate === true) { let center2 = _self.entity.position.getValue( _self.viewer.clock.currentTime ); _self.viewer.camera.lookAt(center2, new Cesium.Cartesian3(0, 0, 1e3)); } }; this.viewer.clock.onTick.addEventListener(exection); } } PauseOrContinue(state) { this.viewer.clock.shouldAnimate = state; } forwardFly() { var multiplier = this.viewer.clock.multiplier; if (multiplier < 0) { this.viewer.clock.multiplier = -multiplier; } this.viewer.clock.shouldAnimate = true; } backwardsFly() { var multiplier = this.viewer.clock.multiplier; if (multiplier > 0) { this.viewer.clock.multiplier = -multiplier; } this.viewer.clock.shouldAnimate = true; } ChangeRoamingSpeed(value) { this.viewer.clock.multiplier = value; } EndRoaming() { if (this.entity !== void 0) { this.viewer.entities.remove(this.entity); } this.viewer.trackedEntity = void 0; this.viewer.clock.shouldAnimate = false; let len = this.viewer.clock.onTick.numberOfListeners; for (let i2 = 0; i2 < len; i2++) { this.viewer.clock.onTick.removeEventListener(this.viewer.clock.onTick._listeners[i2]); } } } class PolygonObject { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._drawEntities = []; this._polygonEntity = null; } } Object.assign(PolygonObject.prototype, { drawPolygonByGeoJson(geoJsonUrl, options2) { return new Promise((resolve2, reject2) => { let _self = this; if (!Cesium.defined(geoJsonUrl)) { throw new Cesium.DeveloperError("geoJsonUrl is required."); } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); options2.clampToGround = Cesium.defaultValue(options2.clampToGround, true); options2.color = Cesium.defaultValue(options2.color, "#FF0000"); options2.outlineColor = Cesium.defaultValue(options2.outlineColor, "#FFFF00"); options2.outlineWidth = Cesium.defaultValue(options2.outlineWidth, 1); options2.extrudedHeight = Cesium.defaultValue(options2.extrudedHeight, 0); let promise = Cesium.GeoJsonDataSource.load(geoJsonUrl, { clampToGround: true, stroke: Cesium.Color.WHITE, strokeWidth: 3, fill: Cesium.Color.RED.withAlpha(0.5) }); promise.then((dataSource) => { _self._viewer.dataSources.add(dataSource); dataSource.name = options2.id; let entities2 = dataSource.entities.values; for (let index2 = 0; index2 < entities2.length; index2++) { let entity = entities2[index2]; entity.polygon.material = new Cesium.Color.fromCssColorString(color).withAlpha(0.1); entity.polygon.extrudedHeight = options2.extrudedHeight; entity.polygon.fill = false; entity.polygon.outline = false; entity.polygon.outlineWidth = options2.outlineWidth; entity.polygon.outlineColor = options2.outlineColor; entity.polyline = { positions: entity.polygon.hierarchy._value.positions, width: entity.polygon.outlineWidth, material: new Cesium.Color.fromCssColorString(color).withAlpha(0.1) }; if (options2.clampToGround) { entity.polyline.clampToGround = true; } } resolve2(entities2); }); }); }, generatePolygonByPoints(points2, options2) { return new Promise((resolve2, reject2) => { if (!Cesium.defined(points2)) { throw new Cesium.DeveloperError("points is required."); } if (points2.length < 3) { reject2("\u9762\u5BF9\u8C61\uFF0C\u70B9\u6570\u81F3\u5C113\u4E2A"); } let positions = points2.map((point2) => { return Cesium.Cartesian3.fromDegrees(point2[0], point2[1], point2[2] || 0); }); options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); options2.fill = options2.fill || true; if (options2.color) { options2.color = new Cesium.Color(options2.color[0] / 255, options2.color[1] / 255, options2.color[2] / 255, options2.color[3]); } else { options2.color = new Cesium.Color.fromCssColorString("#ff0000"); } options2.outline = options2.outline || false; if (options2.outlineColor) { options2.outlineColor = new Cesium.Color(options2.outlineColor[0] / 255, options2.outlineColor[1] / 255, options2.outlineColor[2] / 255, options2.outlineColor[3]); } else { options2.outlineColor = new Cesium.Color.fromCssColorString("#000"); } options2.outlineWidth = Cesium.defaultValue(options2.outlineWidth, 1); let entity = new Cesium.Entity({ id: options2.id, name: "Generate surfaces based on coordinate points", polygon: { hierarchy: positions, material: options2.color, fill: options2.fill, outline: options2.outline, outlineWidth: options2.outlineWidth, outlineColor: options2.outlineColor } }); if (options2.outline) { entity.polyline = { positions: entity.polygon.hierarchy._value.positions, width: options2.outlineWidth, material: options2.outlineColor, clampToGround: true }; } resolve2(entity); }); } }); class CircleMaterialProperty$1 { constructor(options2) { this._viewer = options2.viewer; this._definitionChanged = new Cesium.Event(); this._color = void 0; this.color = options2.color || Cesium.Color.BLUE; this.count = options2.count || 1; this.duration = options2.duration || 1e3; this._time = new Date().getTime(); this._materialTypeName = "jtCircleMaterial"; this._param = { color: this.color._value.toCssColorString(), duration: this.duration, count: this.count }; Cesium.Material._materialCache.addMaterial(this._materialTypeName, { fabric: { type: this._materialTypeName, uniforms: { time: 0, color: new Cesium.Color(1, 0, 0, 0.5), count: 1 }, source: this._getCircleMaterial() }, translucent: function(material) { return true; } }); } _getCircleMaterial() { let circleMaterial = "czm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n material.diffuse = 1.5 * color.rgb;\n vec2 st = materialInput.st;\n vec3 str = materialInput.str;\n float dis = distance(st, vec2(0.5, 0.5));\n float per = fract(time);\n if (abs(str.z) > 0.001)\n {\n //\u7740\u8272\u5668\u6E32\u67D3\u505C\u6B62\uFF0C\u4E0D\u5728\u7ED8\u5236\u5185\u5BB9 \n discard;\n }\n if (dis > 0.5)\n {\n //\u8D85\u51FA\u534A\u5F84\u8303\u56F4\u65F6\uFF0C\u7740\u8272\u5668\u6E32\u67D3\u505C\u6B62 \n discard;\n } else {\n //\u628A\u534A\u5F84\u5206\u6210count\u4EFD\uFF0C\u6BCF\u4E24\u4EFD\u4E4B\u95F4\u7684\u95F4\u9694\u8DDD\u79BB \n float perDis = 0.5 / count;\n float disNum;\n float bl = 0.0;\n //\u5FAA\u73AF\uFF0C\u6700\u591A999\u4E2A\u73AF \n for (int i = 0; i <= 999; i++)\n {\n //\u5224\u65AD\u662F\u5426\u5C5E\u4E8E\u6570\u91CF\u5185\u7684\u73AF \n if (float(i) <= count)\n {\n disNum = perDis * float(i) - dis + per / count;\n if (disNum > 0.0)\n {\n if (disNum < perDis)\n {\n bl = 1.0 - disNum / perDis;\n } else if (disNum - perDis < perDis) {\n bl = 1.0 - abs(1.0 - disNum / perDis);\n }\n material.alpha = color.a * pow(bl, 3.0);\n }\n }\n }\n }\n return material;\n}\n"; return circleMaterial; } } Object.assign(CircleMaterialProperty$1.prototype, { getType: function(time) { return this._materialTypeName; }, getValue: function(time, result) { if (!Cesium.defined(result)) { result = {}; } result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.BLUE, result.color); result.count = this.count; if (this.duration) { result.time = (new Date().getTime() - this._time) % this.duration / this.duration; } this._viewer.scene.requestRender(); return result; }, equals: function(other) { return this === other || other instanceof CircleMaterialProperty$1 && Cesium.Property.equals(this._color, other._color); } }); Object.defineProperties(CircleMaterialProperty$1.prototype, { isConstant: { get: function() { return false; } }, definitionChanged: { get: function() { return this._definitionChanged; } }, color: Cesium.createPropertyDescriptor("color") }); class CircleRippleMaterialProperty { constructor(options2) { this._definitionChanged = new Cesium.Event(); this._color = void 0; this._speed = void 0; this.color = options2.color; this.speed = options2.speed; this.count = options2.count; this.gradient = options2.gradient; } get isConstant() { return false; } get definitionChanged() { return this._definitionChanged; } getType(time) { return Cesium.Material.CircleRippleMaterialType; } getValue(time, result) { if (!Cesium.defined(result)) { result = {}; } result.color = Cesium.Property.getValueOrDefault(this._color, time, Cesium.Color.RED, result.color); result.speed = Cesium.Property.getValueOrDefault(this._speed, time, 10, result.speed); result.count = this.count; result.gradient = this.gradient; return result; } equals(other) { return this === other || other instanceof CircleRippleMaterialProperty && Cesium.Property.equals(this._color, other._color) && Cesium.Property.equals(this._speed, other._speed) && Cesium.Property.equals(this.count, other.count) && Cesium.Property.equals(this.gradient, other.gradient); } } Object.defineProperties(CircleRippleMaterialProperty.prototype, { color: Cesium.createPropertyDescriptor("color"), speed: Cesium.createPropertyDescriptor("speed"), count: Cesium.createPropertyDescriptor("count"), gradient: Cesium.createPropertyDescriptor("gradient") }); Cesium.CircleRippleMaterialProperty = CircleRippleMaterialProperty; Cesium.Material.CircleRippleMaterialProperty = "CircleRippleMaterialProperty"; Cesium.Material.CircleRippleMaterialType = "CircleRippleMaterialType"; Cesium.Material.CircleRippleMaterialSource = ` uniform vec4 color; uniform float speed; uniform float count; uniform float gradient; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); material.diffuse = 1.5 * color.rgb; vec2 st = materialInput.st; float dis = distance(st, vec2(0.5, 0.5)); float per = fract(czm_frameNumber * speed / 1000.0); if(count == 1.0){ if(dis > per * 0.5){ discard; }else { material.alpha = color.a * dis / per / 2.0; } } else { vec3 str = materialInput.str; if(abs(str.z) > 0.001){ discard; } if(dis > 0.5){ discard; } else { float perDis = 0.5 / count; float disNum; float bl = 0.0; for(int i = 0; i <= 999; i++){ if(float(i) <= count){ disNum = perDis * float(i) - dis + per / count; if(disNum > 0.0){ if(disNum < perDis){ bl = 1.0 - disNum / perDis; } else if(disNum - perDis < perDis){ bl = 1.0 - abs(1.0 - disNum / perDis); } material.alpha = pow(bl,(1.0 + 10.0 * (1.0 - gradient))); } } } } } return material; } `; Cesium.Material._materialCache.addMaterial(Cesium.Material.CircleRippleMaterialType, { fabric: { type: Cesium.Material.CircleRippleMaterialType, uniforms: { color: new Cesium.Color(1, 0, 0, 1), speed: 3, count: 4, gradient: 0.2 }, source: Cesium.Material.CircleRippleMaterialSource }, translucent: function(material) { return true; } }); class CircleObject { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; } } Object.assign(CircleObject.prototype, { drawCircle: function(centerPoint, radius, options2) { return new Promise((resolve2, reject2) => { this._viewer; if (!Cesium.defined(centerPoint)) { throw new Cesium.DeveloperError("centerPoint is required."); } if (!Cesium.defined(radius)) { throw new Cesium.DeveloperError("radius is required."); } let position2; if (centerPoint instanceof Cesium.Cartesian3) { position2 = centerPoint; } else { position2 = Cesium.Cartesian3.fromDegrees(centerPoint[0], centerPoint[1], centerPoint[2] || 0); } if (typeof radius === "number" && radius > 0) { radius = radius; } else { radius = 100; } options2 = options2 || {}; options2.id = options2.id || setSessionid$1(); options2.clampToGround = Cesium.defaultValue(options2.clampToGround, true); options2.CircleType = Cesium.defaultValue(options2.CircleType, "ColorCircle"); options2.duration = Cesium.defaultValue(options2.duration, 3e3); options2.count = Cesium.defaultValue(options2.count, 1); if (options2.color) { if (options2.color instanceof Array) { options2.color = new Cesium.Color(options2.color[0] / 255, options2.color[1] / 255, options2.color[2] / 255, options2.color[3]); } else if (typeof options2.color === "string") { options2.color = new Cesium.Color.fromCssColorString(options2.color); } else { options2.color = new Cesium.Color.fromCssColorString("#FFFF00"); } } if (options2.outlineColor) { if (options2.outlineColor instanceof Array) { options2.outlineColor = new Cesium.Color(options2.outlineColor[0] / 255, options2.outlineColor[1] / 255, options2.outlineColor[2] / 255, options2.outlineColor[3]); } else if (typeof options2.outlineColor === "string") { options2.outlineColor = new Cesium.Color.fromCssColorString(options2.outlineColor); } else { options2.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00"); } } options2.outlineWidth = Cesium.defaultValue(options2.outlineWidth, 0); let polygonMaterial = options2.color; options2.outlineColor; if (options2.CircleType === "DynamicCircle") { polygonMaterial = new Cesium.CircleRippleMaterialProperty({ color: options2.color, speed: options2.duration / 1e3, count: options2.count, gradient: 0.2 }); } let entity = new Cesium.Entity({ id: options2.id, position: position2, ellipse: { semiMinorAxis: radius, semiMajorAxis: radius, material: polygonMaterial, outline: true, outlineColor: options2.outlineColor, outlineWidth: options2.outlineWidth } }); resolve2(entity); }); } }); Cesium.Primitive.prototype.setUseGeometry = function(geometry2) { this._useGeometry = geometry2; }; Cesium.Primitive.prototype.getUseGeometry = function() { return this._useGeometry; }; class SketchViewModel { constructor(viewer2, options2) { this._viewer = viewer2; this._init(options2); } _init(options2) { this._viewer.scene.globe.depthTestAgainstTerrain = true; this._viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); this._entities = this._viewer.entities; this._pointEntitys = []; this._sketchPointImage = void 0; this._iconNormal = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcEAYAAAAinQPXAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAB2FJREFUWMO9mHtQlNcZxn/nW65GxHtEqTEajUxVoLYRSIyipHG4qG0lajtxVIRFubgqXuOI28ZE7FAvCLKLSNKxg/FSIzdvqNE62kaRitqpYMxovBGigo4I4n6nfwjsCrsLrtjnn53vnPe87/Oc9/2+854VdBhCd6ZP6dMHlAXO/lOngrzMLz/8EEQ0ASNGANNY2aOHxYIdfHr3LuBCwPnzQIKcf/AgiJ8pQV99BfmvR4+orHxZVsLxpZFT0qd07gyP7zqrej3IInF47lwQkTLV3d1xv3KXWPT4MYhLzMzIgHpn10+Sk+Gw74w+jx79HwSGnzUYhg4FED4FBcBq/jtokOOC2oSb0FZUgHpKVoeHQ9GtGM/y8lcgMLxf5juDBwNDlOWnTgGvUdWz5wsQ7c179fUWzz9y0tX1BdZPILeqCpTtil9QEOT9c876K1faWqS07XeMzJFuboCXkpaX1w5hqxl14QJIKYRWCzLV5OXtDQXbon3c3c2/TeMoYvncucAgPrl40Y7fA0zv1QtMydKwb58FL7toRwbDYo3/0utB3OD8qlX2hIkLqalwO0b9+fLlUHJOG9vQ0P4EjfyFIdPZGfqsURampIBIlxsWLLBtL/NltF4PhUIrVq92QGDIeEOmpye4pYju164Bq6n29LTiopy8tDTIL48pSExsDq/Oj9is/eAD4CRbli1DMEFUBAYCewnUaJD8jr2lpQjpJ7M2bBBi0+L47Tt2mP2G5xhNaWnAHrLj461tKF1rasA0rW5b//6w/0rigQcPWhrZKVFXP8TkybaFyb3kXbkCbiO6fpyU1Dwq58vNG3U6BJvEiYMHEcwQW8aNA3pT7O4OaPmTiwuCnlwcNQrEDRGYmytloilj5vr1Zv+mNXVhSUnmOFYEVnt6gtM9t+8mTbKlwo5AoWdySIjteWUcIwwG2LX7o6lPnkiZULTlj/7+wEThm5oKbCBeCOANUisqkNRxLCEBSSzrYmOB3jw6c8Yi3kL5K51OyvkZGXUTJz7LSH09CIPwMBpt85CHhMf48Q4IJFPofHzsbMAAJfjIEQtXC9TZWi0wkEuKAmjEyspKpNN2pyVBQULZaIjbvXmzUDb6xF0zGJCqv+no6NGAK5fLyiz8JssVcXEWgQLUsZZxWmGbrLTN057Agfh7eNiefhpRb7h922LgOzFp2DDzxnJXrsvLE0rqOW3sTz+12h4lLfRZhuQybuXmWmQkgPzhwy0o1jlV37ljh+e3/L1LF0cEXqX04UPb0075rlovLwtBHuqZ5845T5Z37UqbEAPkzOfsUvlHXZ35saFnQ4++fe04eIfftv64tEfgdvkXeweprFIvBQaaebJH+f3x4xbPvsRPnixlQlHGtDFjWq2Wuqj0yz4+QKk4FxNjMVXD2998Y0FRKEsCAuzwzBKv2eZpR6DspxQcPWpnvrNYoNNBZOTOnRoN0ilJMzYjA3ibsKoqoIxezs6gLJbpxcVSTbyePurwYSkT76VPKSgAWQslJcAmenTrBszgP7W1wBlRmZICY2SydHIC8ZCvdTo7Ak+ri44dcySDNDTs2mVufluhThoGD4bHp6or4uOb3zWJnoqwMGAVLnfuACHscHJCiFRmhISA0BMcFob52PDC/8EDkLfkR5GRQmycN8/t8mXw8O73WVwctnvdJ3SqrQXNSJeY3bttaWhHJxMxzDh97VqQAwheutR2IC6pm/z8oOBm7LcVFVJNKNo0oUsXhBKmGR0VBfI0vkFBINzExxoNEKP+ePYsktefFmVnC2Vjvm5SZSVEpGUNefNNUH8ti8rKQCziaOfOVuL2563PP4eCjJhxK1a8hMCJJ7NTPDxAXWIaefEi0J2r/ftbMfyryDhxAkZ2u1EaHAx6oReq2rb/JiTLZKkoUHLf2//YMWCGnPf++1YM7zHw+nVQ1mlKhg2DvPeiltr+GLaj2W524Kd6zZ4NhGOQ0ophI6GSkr4Gq61VGyjx7vdZQoIdYY1xVZ06RKttS1gTHLkPLjVmGo3AJZToaCsGjSWrPFBKfH3bvta0uyR3ySlGIxS4a7trte1l244MtoRpT93XSUk0l0oruFDbqROYUtQ9X3xhLr2WaBpX4+WnOTl2hHkw9eZN0Li5dLP6Dehogc1dexslK/7MynffhbNDvZXnWq9GNJWyiKC69TlphvobtWbOHNgnZonq6hdl+xL/yTQhbKUxeOtWEP9melSUFYMWJSv/IAtNprZLUu4Rf9u6FQpdo49bfRXaBQcy2BL1p+XURYtAZrLwhx+sGDSWrDpc3ZeVBbJMPt22zY6wRj/1oep08zXMUXRABpsQFmqcHhICYiLlhw4BBWiFA/5FOXmhoc8u0Pv3vyyrDshgEwqLYnKLi4FO5OfkvPh66UdudnZHCXsFAptQ96XMW7jQTsm2xAF23roFlD6NXLy4o9m8AoHFR7SxNTWgjGOsVovtxqBxXAzEbc4cKCycN+/+/Y7n88oRvjarcNYsCDtprP/+ewjvZ1xz9SpERBp3zpz5qqP/D5zQE33tptaiAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTA0LTA5VDE2OjQyOjI5KzA4OjAwjRBbGwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0wNC0wOVQxNjo0MjoyOSswODowMPxN46cAAABKdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uXzJhcHo1b3VpcnV4L2Rpbmd3ZWkuc3ZncY9vkgAAAABJRU5ErkJggg=="; this._iconBlue = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkEyMUE1MDg3NTAyMTFFREI0RUY4MjBCRjRGRDc0QUIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkEyMUE1MDc3NTAyMTFFREI0RUY4MjBCRjRGRDc0QUIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/grmkAAAhxSURBVHjazFoLUFVFGN49597LBdFUEpEQI0IpyxIfqU1ZkY/pNZg1RZlWY2lW4yMncxq18oHZ0+lhOaWZUo0zPjIr8W1NiubI+AxBIkRQQsQE7us8tv3P7qGL7gXOPRdzZ3bmcnf3+7/v/Lv/+f/lYkIIMpur2yBktQVO5yM7LRybIvsOFKFGCeHyQz/dFO2Ousflcg6UJSlVlqVEjHEMjNMH5tE0vVLT9ZJAQNnn9fm3d+9z3xEYioR9bNcjW9Z8Gtv35l7PUAFjnU5HLytrFUU9TgV9XXD4+PJhoyfV2/GIFO4TGD8my1lVuGXSHYNuPdyhfbv5VkVAgzWwFjAACzAvp0fwoV++uz6lxzXLolzOW1AEmz+gHCwtq3i2z52Pn2jtlgvXI1LpgQ0jeqYm74y0CGiACdjUxkir3KxMlsoKNj6WmNAlV5Kk9qiNGmBTG6vAlhV+rd1aUuGeNSNSeiSuolGo2X1cdDogbThQ79h21CMfP6NKtR4dw/edYiTSK8GhZ/aO0R7KiFV7dnPpzeFQXkppWeWY9MGj8+ifektbqzVC8KbVH6UNHdJvOw2nHUIB7vrDI89df861p0SRsUSjuiSzB4qxyYzx0TVEdBUNTnVqs7I6B4beEKOFwqThuu7X/IJ7hj/yYlGoM9NqIakpSVH7t67c3C4muq8IyKcQ9EpuddSK3xqcSHJR7g7WsSkCm8+YiSEgRuU9gMbd3k5578kufrcTC8U0eLwF/e99anhJ6Sm/HSHSid/Xv5CclJAjAjlXr+GHP6x07z9JZCSDCBfzBJapBomJabJfdKqFCiGa4RkQgrQA6p+MtbVTEn2dY2XhUz956szM6wdkLRFtsVZFrReeeaRTQte46aIxT4DgrA9ABJKRw42QTLsjimqATgUZwpxNO/0OGz3KmMvWuBFgABZgimwBB+ASbtSSp0zIHutyOuNEg9NW/e06UE49YRBi5LFB2NxaMoQg5iGJfza+Y+MwlwlmogALMIXpD+UAXIBTOEKi4rt0zg51sFft8TjN7YQbnzrbVpeeD8Q+w3fYFCQba9ha5kHABGyRTcrlCeBkVQjO/Wxeb3rA00WDb62rcbHzAARML0hBAloK+lyQ4TEHx2B4BragUS69vl06/6aLnk6LQuQ+vdMyRQMHT/ql/D9VGfEQi00PGFDYwqsP8/AsMQyJbTvABhuiFb3TU+8Otb1CCXFd1SF2gGhg/f56Bw4+B9iCJ0J5Bv93fgAbbIimd7yq/UDgZklITLQ7RTSwp9grs7MgBYXYMEQ0OTtBWBR7d5FX+NQ5J0tCHG63K0GYglSpkrklGkXY1GGKMbdo8d+qkBfn5LB0RpwOeDlc2mo9NNYHbyOMIuCRptvNsCGqXxgnS2dEoslhxMrgSDXOSbL0HlFVzSv6vlMMJigorWGpnJ2ymzRdTrENGxY4NSeE+PwBYQ3ds6tDN1IewvvFRMLQwTBMPB2lxTuEaTvnRKwI0S/U1ZeLBganRWtGwteYAOoR8EgQFsUe3DNamNpzTroVIWp1TW2xaCCrf6xKzDScaP89SRKGGBLkCSMjVo1aZRS1IZrOOalWhCgHjxTvEw3ckhylD7rOobF6ghZJphhk1TO80DK8Yab1KgJssCHMKhgnxYqQQM7i5bv9AaVONDh7VFzAqCWMekLhRZIFzzQWWLzIMjAY3qwsii2+YakDTsDNkkdoRVZbXHLyN9EglKdjh8QoUBSBcaIDEYU91cbtRi7yUFCF2OgBha9lBRZg3nWjuPQFLsDJqkfAtfWfr1jzDSHiR/zuk/GBjO5YQyqtQDU/5WYKCjo/Oicd/JmPw1xYA2sBA7AAM8RFBAEuwMnqYTei3Q95vx47U1VzTJj3uDBZNzXRl9EdUTE+SshnECJcFPOWwraNxj0GYo3OyLM1PgQYgAWYIlvAAbgAp3AKK6XyTPXZ56bOm0f3p/BFFEdr7LwZSd5xQ9wKUukUo/u4h8SdecCHzPmwdtOMJF9ciHodbE+cvmA+cAm1rVoSAsD1m3fmH127cfvSUJOiXRh98nS8/8dpXb0DknWNKB5qzsOIKlwYdIULpWMwB+ZunNrVC2tDeQIa2P552+4jfFsROxd0sbRfm5/31dyMPumZLQWkwsqA9EOTCzqCzdTGvKB7MCNWTU9s/oIOWsHh41tvGz5uNv34Fxdi64IOvNaxQ/t2aXvzVixKTUnqezkSRBqhCm4bMW7GhboGuJw7H+qQW7nEBoALFPCvOx8cP+toYUl+W4v4o6h0L9iiNkvBdnNXplYvsSEtOFddc75owLCxc6jLd7aVCMDulzlmDtgCm6FSEju38RAxztJUumTkoy+9faqyqjDSIgDzgezJi6gN+P9Is1HKjpBGz9T+U1cy+ulXZ9XU/lMRKRGABZjUEyeseCJcIY1i6BY4NmHagjlen/+CXREUow6wADMcEeEKQTxxq96wadfvCz9cvpBuBSVcEbCWYuQAFmCGSgrbSojx0qW9KmfxV5u/zP1+MTEqI6vlCNFhLWAAFsdEl1sIvIAgdTn98muL1mzZtXe1VYCtv+xbDWsBg2OR/0OIKaaB9ooHsqcsoXt8h4Uwu+P+xyfD/zwqOIatHw7YFQJvVthSUICVDxs9Kae0rOJwS2vKyk8fgbmwhq/V7fKwLYSLgWLoPLz9s59//c3mwjKMPTZ+5hswl6ceWiQ4REQIF2OE5QOHCo9NfCVndoPHW3vxHPgOxmAOzOVr0BUlhIuB0Hn2+5937p/77hcLgsMyfF7wwbKFMAZz+Fx0RQoJDsvvL8ndYYZlM8y+8/HKbXbDbKgW8ftd+qQJLQcglFZCaE3qFn81wogEh1mYE/F74bb64RnFAm/DDwy6mPdrkJLzKGfLpsj+vwIMACSZzfDJFmOPAAAAAElFTkSuQmCC"; this._iconGreen = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjI1NDIwOUU3NTAyMTFFRDk0MTJGQzhGMTFCQkREODIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjI1NDIwOUQ3NTAyMTFFRDk0MTJGQzhGMTFCQkREODIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgEE4igAAAgKSURBVHjazFoJbFRVFP3L/OlMoQXKImAFm0JbFtFKShEQI6UsggmkGKghIKTIIgZUohIDKEuLaFTQiIKyKKghqSyyF0pZbcHQsJVpoRkKbYFAW+iU2f78/313+qY+hvc78+dPkZfcMJ377rn3/Pve/fe9gVUUhfENY5eBjNbhvlnI6Bmh+KT5NzBhGigg9sb5vX3NpohhRqMwgOe4eJ7nurIsGwl69MDskiRXS7Jc7naLpx1OV/4z/V67CKpw+Gf1ZiQv9/vWyc8lTkMEpgiCIVGLrSh6ShGhX4ovlG5Mz5jToCcjXKhPIGvyOOG2JW/OywNfuBAd1WqFVhIwwAZsAQOwAPNxZoQ9f+yPHnHdn94QYRSeZ8I4XG7xnLWianq/oZOuBrvkQs0IZz27a2RCfLeCcJOAAZiAjXyM0hqblslcRfHuiV07d9zKcVwU00IDsJGPLeBLS3zBLi3O8nfuyLjuXbegKtTsOrY4Ldz22u2GPFue4bL7MlfrqWXh+xhDjNLL2EtOj0r3jI8Z70kyJcnN4aC4RGtF9eSklzIOoD/lQEsrGCLs/m3f9nxlUP98VE6j1QDz6/P5xZWLI06KJ3lGwIWdB2tfZEgkJB4oVwwzWBgsLY1d6hoWPUxSw0Tl2na8sHjYiAnvlKntmaD3SHxcrDG1f9/1aiScspOZYZ1hGm4dHnmSRyRglk+i/ITQwVywAVvAoA3kMyolufc6iEHv0uKuntkxu1ts5xyacY2nhh1TNsZcpBTxjBl2K4AQ2eD8MiITWXFDmULiYJhUNlXak7DH0d7QnvrUr1feWtgjZdxa2hILKiOzp01o1/mp9gtoOrtsZ0eXjjYXMYhEa/RFKyxmLCaCmBF/NhF633xkCxiABZg0XxADxBJq1eLnz8ycYhSE9jTl3Iq5EWeYM/wjwUPQvj1CEwHP8SMFWIBJbX9QDBALzrNmIhGdOsZkqm3sTfWbhKbgTcSSMhBLiiYcMc9I2CMswARsmk8Uy5s4r5qIsFt/WN6nVaQ5iaZcVLkoQjEpjbD++4IM+hFUQniCDMYBTMCm+USxJP6+bkVfFWRVIny/Pj3TaIpiezF3SjzFN619AaNwRLABSwzhnSOWGxLABh80sz5J8a+qLS81IsY20a1TaIrc2lzhoX3A+2Ui6FcxkRn+4f3j9UEZbdtEDcCUgycSaTbF0RQnGk7wTY79S2xIbSvGIDCPNxynPnUckyYiBpPJ2JmmKBVLuSYCXIA9EWxWWAIPYZeJZdS4cEwGTXtEMBhMNEWthHonVieB5gix2Aft/NIYk6Y9wqHmMGzH4HANHBOn6T3i8UgO2vcxfIzibTdI0Tv88Lw+NMTUHBHF6XJTz9CJQqLs7ZdkLHoIkbbyf71YgpBAbdtxTIoWInK9reEGTTGk9RCpqfGTCDJ6skE2kxL2QRk4JlkLEc+dmrorNEVGTIbo7VxFgowUQlYU4oxCnFMAe0LMBJFmgmPyaCEinrt45TRNkRyZLA8SBkleMj5CMvGclCBJMIQdJgAC2OCDZoZjErUQcees3njK5RZtNOWy2GUu1sk2nidcOAiPX2aUAHvC/1yCBDDh1Khyw2KDmLBF8Bkpt1bWXSm/fpKmhOPp9OjpIhyKGCcWHxkPpQj4b2oPQcJnj7AAMy06jbo/IBaISWtGwF3Dj5tzf1PIIyQx1nRf40phUiTmQWMQTaTI/ePx2wPEPvAF7xWEAViAqXIRoUAsEJPWze6tdn8dOF5y63ZNCbXv4SKVvYl7HSkKItPQGMwjpFx+4he8V5AtYAAWYNJ8QQwQC0bQfLASq2/duTvjveXL0fqkvog6GDooR3sdtWdFZomsjW18Xj5SdhXBwYOADdgW9CpwAJbK3nDMWpC9AmJRW1aBiABww8GCwkt/7s5fpzbJzJmZ9XHrnYfiDtkHSgMlph59CSXC9y8phA7m5sXl2cFWLRMwwPe+w6cuYvqKngs6uFp4tvDApmUv9ktKC1RZSxwl3I66HYaD9QcNFtHC+RpAaDuShCR5RPQIz7h24zy9zb3lQFjFF0oPpY6Yuhh9vIaJ6Lqgg6y1jY5q1bPowOZV8XGxyY+jQUQVqjh15NSP6m0P4HLuntom13KJDQD1CPDa0NezFl2ylBe2NInLZdYi8IV8WvGCDJi9YC+JoXDW3qm5V5aSPmUJSnlBS5EA7P5pk5eAL/Cp1pLouY2HinEXtdLlo96Y+3ll9W1LuEkA5tjMeauQD/h9pNkqpYdIU2bq7tvKM976cFFN3f2qcJEALMBEmbiqJROhEmkig5ZAycz3s5c4nK56vSQQhg2wADMUEqESYXCTcWfX/qNnVn6zcSVaCmKoJMAWYeQAFmCqNYUtRYTBTcftnNWbDv68dedqVMZlrQBgA7aAAVgYk3ncRBTcNd189+NVuXlHi7ZpBTh07PQ2sAUMjKX8H0R8ZKB7qhqbOX8tWuNHNJTZI2MmzYPfPKowhq5rDL1E4M0q4w7qRnrGnBxrRdWFQDYVN25ehLlgg21lvXHoJoLJwInjHrz9M9/+5LPmyjLoJmYt/BTm4tZDCkcMYSGCyXjL8tnzlpJZH+QsfmB31PnPge9AB3NgLrZhnigimAyUzrs79xX8s+zLn7LJsgyfs7/esBJ0MAfPZZ5IImRZ/mrt1iO+suwrs1989+thvWVWbYT9fhc9aQUdB6CUVkNpje3SqQPDMgpZZmFO2O+FW+o/niEsyDb8qt7Rd78GLTmucrp80vz/K8AAYAEv1AHM/GwAAAAASUVORK5CYII="; this._iconViolet = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzFDREU3Mjk3NTAyMTFFREE4MThDODBGNzMxNDBCQzEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzFDREU3Mjg3NTAyMTFFREE4MThDODBGNzMxNDBCQzEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppb+WxIAAAhcSURBVHjazFoLcFTVGb6vvdnNY0lEEJOIxhCSKTEFKSC1osIgjqIyA62mZfAxWJU+tC3TVh2lHSGhtNOKOqK0ii+0QwcfFB+IAsKIITpJhUBDHhMiSSBCTMgm2d377PnungubnXOT3L0b6rlzmM2e83/n+87/n/+ecxbeNE3OLvLFV3Fui3KiivNSkhmTNb7EpagQQvzxg++VBvxpc2XZN1MUhEJRFHJ5nk9HO5mwAV03OnTDaFYUtTocie66pOymOjSlYnzeq0d2bn02c9oVxXcTAct8PqnYja2qakeJoFdqDx3dNH/xij4vHhGSnYHlSxf5Out3rrjmqqmHglkZa9yKQIENbIEBLGCeT4/wB/f+c1LBpXkvpsm+73IpLFFF/bKltf2esjl3NI005JL1iNBSs23B5MKJe1ItAgWYwCZj3OiWm5vOQmvt9ttzJ4zbLAhCFjdKBdhkjNcwlht+Iw0tof6zrQsKLs19jWShIeM40hASure3S727O0WloV/QehTeSo/ZsilPzjCC11+k5yzM0/yTs4yhcAgvtaW1Y2nJ7MU7yJ/GcKE1EiH8B1ueLrr2+9N3kXQadAIM7f1abK84LEcOnBFFXuREMpk8TyrHx4jhMQ1OJ5x0U+f8s8boeY9MUbLmjNedMEm6Du2rqp17w5KfNTitmRGvkcKCfHnW9NK/O4kwIjp37JdfpDUv+jSgVw+IASHAofpRef/gSttQ0Rc2sAUGq5Axs2ZM+85GcPAaWkLT528/MDF/QiXLWPtG4Rt/tM+v1vSLMi9zPl4iniCVeASeEPjB82QQj8Az8IjOaZxqapxiKpzvygy9aMs1EekCmTnrX7WdfHjSjEUbWCE2Io88cPeSnAkXjV3J9ERY5xuX7PNrNQOin0/j0kiVUQUI8llVSnjs79FHpjawBQawgMkaCxzAJdmsJT50X/ky2ecby5yllTWy+p9+MY2PkYonb60RUuER1udBoixBMgcsYDK3P4QDuIBTMkLSxo+7oNxpYfe80eaLhZPMSSSkUAU8vPWvFVr2QrdimD7xfWw7nzUZMgdMYLPGJFx+DE5uhfCbn1s9JSM9UMJqbF9TJ5O5tNZEooh48o4Lk66fwWJIJZjAZtkQLsVvbFxTapm7ECKWTSmax2oYONgjRKp7RSluYbsRwRITS9cxQcDGGCybKSWF1zuFl5MQeUwwcwaroXtbmyTRWLdFkJekKxGDwo3nz4nB+iEVY7D6Z4/JmgluroSkB/wFrIa+z7rE2DyeWwfJiEhcO2fXD3n69p9mzjrl5EqI5PfLE5hv0qZ+gach4TacRhJmwFaaB5i8KCfJ1RrxSZKfuW3oUflE8l49kvg3xmCeX2KcXK0RMut8yo7BqSqUk+DqPaJpepjpqmyfaSbs30wPx24WFsZww2koIWYkqjDP0PKkDAO7WOuheyevBRgGxQS2XJjO3LZTTqYbIUZvqO84qyFz9lidyohtzenjRYT92LiZsy9kbocpJ8ONEO1UV3cjqyHn1nxNw+6V1tgsJicmdkaJCbDxgJ1zW77G6k85aW6EqF/WNVYzc3lZtuGfGdQ1sgXHVtwW4zbM4sPJ3tYDE9gYg2VDOaluhCiV6zftjypqiNWY92iponKKdZ7QaHUjJl6EbQ8sYOY+Uqo43LCEwAncXHmkuaWtu7H5q09ZjTieZv/kEhWHIpXURDHx6ydxLcT3OSdCsQ5YwAxeyz76ggs4ufUIXNv3/MtbXzfjj5BxZeK6aYpvaoYetUhECRnVqhoNNyvkTIP5WbNOh7H+sAUGsIDpcBFhggs4uV3sVrb79459R052dh1hGgZEs+hfP4hIU9P1iEUmapFSDGWQqPjnLHlDoQKiHGyBASxgssYCB3ABp2QOVmrHyVOn7/3V6tUkPpkvImlsmln83nXh4NJcNWKGuYgRIxcTpcQIx1fynd2OvrCBbfG710WA5bA2wvevrFgDLk5hNZwQAPd9uKfq8Jvbd210BPCL3GVPfS9a+PbVYWF6QA8bEBSrYYgzI1a1Ptvfk4q+l791dRi2Tp5Awdjvf7y/joaV6eWCLpPUy6p2vPTElWUl84bLSOH6XqHn3Xapd9fXotLUJ+jdmrUBFHMkU56UaQTnkkRxc54WKAkaw2HVHjr60awb7nycfDxGhXi6oIPXsoNZGUUHdry8rrAgf9r52CCSDFU7a8Gdv+sN9eNyrsdpkbu5xAZALwE8NueW5Y8drm+uGm0R/21oOYCxyJgtGHuoK1O3l9jYFnxzqqunYcb8ZauIy/eMlghgT5+3dBXGwphOWxIvt/HIGKfJVrr5xh/+/E9tHZ31qRYBzIXlD64jY+D3kSGzlBchZz3TfSbUvPiu3z7W1X2mPVUigAVM4okmN55IVshZMSQEjtz364pV4Ui016sIghECFjCTEZGsEI5u3E5t++CTz9c+uWktCQU1WRGwJRiVwAKm06ZwtIRYL11SOyvXv/ThC5vfWW/iaOf2PEJsYAsMYFFM7nwLwQsIW5cTv/j9uq07PzmwxS3AR3urt8AWGBTL/H8IscX04zp4YflDG0iM73aRZnfffMeD+M2jnWJ4Ovx7FYI3K0IKB7Dj8xevqGxpbT80nE3r8RN16Asbamt45eFZCBWDw1AP3v7lP330j0OlZbTdvvzhP6Av3XroqeCQEiFUjJWWaw7WH7n/N5WP9w+EuxP74Du0oQ/6UhvuWyWEikHqPP3O+3u+eOIv/6iIT8v4XPG3F9eiDX1oX+5bKSQ+Lf91w+bddlq20+yfn3n1Y69p1qmk/H6XzLRJjgNIpR1IrfkXj7+Q4zkzPs2iT8rvhUfrP54RLHgbv82Ps+/XsCWnWc7TmKzx/yfAAHo1CtU9myPWAAAAAElFTkSuQmCC"; this._sketchEntityName = "sketchEntity"; this._sketchTempPoints = []; this._sketchPoints = []; this._sketchOutputPoints = []; this._sketchTempPolyline = void 0; this._sketchPolyline = void 0; this._sketchTempPolygon = void 0; this._sketchPolygon = void 0; this._sketchTempAltituePolyline = void 0; this._sketchAltitudePolyline = void 0; this._sketchAltitudeInitHeight = 0; this._sketchTempSpatialPolyline = void 0; this._sketchSpatialPolyline = void 0; this._sketchTempCircle = void 0; this._sketchCircle = void 0; this._sketchTempRectangle = void 0; this._sketchRectangle = void 0; this._sketchTempTriangleAltitudePolyline = void 0; this._sketchTriangleAltituePolyline = void 0; this._sketchTempSpatialTriangle = void 0; this._sketchSpatialTriangle = void 0; this._lineLabel = void 0; this._polygonLabel = void 0; options2 = options2 || {}; if (options2.isDrawPoint) { this._isDrawPoint = options2.isDrawPoint; } else { this._isDrawPoint = false; } if (options2.isRetainDrawPoint) { this._isRetainDrawPoint = options2.isRetainDrawPoint; } else { this._isRetainDrawPoint = false; } this._param = { moveLineWidth: 2, lineWidth: 2, moveAltitudeLineWidth: 2, altitudeLineWidth: 2, spatialLineWidth: 2, moveEllipseColor: [0, 255, 0, 0.5], moveEllipseOutline: true, moveEllipseOutlineColor: [255, 0, 0, 0.5], moveEllipseOutlineWidth: 1, spatialLineWidth: 2, ellipseColor: [0, 0, 255, 0.5], ellipseOutline: true, ellipseOutlineColor: [255, 0, 0, 0.5], ellipseOutlineWidth: 1 }; this._setMoveLineStyle(void 0); this._setLineStyle(void 0); this._setMovePolygonStyle(void 0); this._setPolygonStyle(void 0); this._setMoveAltitudeLineStyle(void 0); this._setAltitudeLineStyle(void 0); this._setMoveEllipseStyle(void 0); this._setEllipseStyle(void 0); this._setSpatialLineStyle(void 0); if (options2 && options2.iconType) { switch (options2.iconType) { case SketchViewModel.SketchIconType.Normal: this._sketchPointImage = this._iconNormal; break; case SketchViewModel.SketchIconType.Blue: this._sketchPointImage = this._iconBlue; break; case SketchViewModel.SketchIconType.Green: this._sketchPointImage = this._iconGreen; break; case SketchViewModel.SketchIconType.Violet: this._sketchPointImage = this._iconViolet; break; default: this._sketchPointImage = this._iconNormal; break; } } else { this._sketchPointImage = this._iconNormal; } } _arcToDegree(arc) { return arc / Math.PI * 180; } _toColor(red, green, blue, alpha) { let normalColor = new Cesium.Color(0, 0, 0, 1); if (typeof red != "number") return normalColor; if (typeof green != "number") return normalColor; if (typeof blue != "number") return normalColor; if (typeof alpha != "number") return normalColor; if (red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255 || alpha < 0 || alpha > 1) return normalColor; return new Cesium.Color(red / 255, green / 255, blue / 255, alpha); } _toColorFromArray(array) { if (!array || array.length === void 0 || array.length === 0) return new Cesium.Color(255 / 255, 255 / 255, 255 / 255, 1); let r2 = 255, g = 255, b = 255, a = 1; if (array.length === 1) { r2 = parseInt(array[0]); } else if (array.length === 2) { r2 = parseInt(array[0]); g = parseInt(array[1]); } else if (array.length === 3) { r2 = parseInt(array[0]); g = parseInt(array[1]); b = parseInt(array[2]); } else if (array.length >= 4) { r2 = parseInt(array[0]); g = parseInt(array[1]); b = parseInt(array[2]); a = parseFloat(array[3]); } return new Cesium.Color(r2 / 255, g / 255, b / 255, a); } _updateScene() { this._viewer.scene.requestRender(); } _getScreenClickPosition(screenPosition) { let resCartesian = void 0; let ray = this._viewer.scene.camera.getPickRay(screenPosition); let position2 = this._viewer.scene.globe.pick(ray, this._viewer.scene); Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); if (Cesium.defined(position2)) { resCartesian = { x: position2.x, y: position2.y, z: position2.z }; } return resCartesian; } _getScreenClickPositionAndHeight(screenPoint) { var lng = void 0, lat = void 0, height2 = void 0; var ray = this._viewer.scene.camera.getPickRay(screenPoint); var position2 = this._viewer.scene.globe.pick(ray, this._viewer.scene); var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); var feature2 = this._viewer.scene.pick(screenPoint); if (feature2 == void 0) { lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } else { var cartesian = this._viewer.scene.pickPosition(screenPoint); if (Cesium.defined(cartesian)) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } } return { lng, lat, height: height2 }; } _transfromFromScreenPoint(screenPosition) { let location = this._getScreenClickPositionAndHeight(screenPosition); var cartesian = Cesium.Cartesian3.fromDegrees(location.lng, location.lat, location.height); return { gLocation: location, sLocation: cartesian }; } _removeEntityByName(entityName) { var entities2 = this._entities; if (!entities2 || !entities2.values) return; var delEntitys = []; for (var i2 = 0; i2 < entities2.values.length; i2++) { if (entities2.values[i2].name == entityName) { delEntitys.push(entities2.values[i2]); } } for (var i2 = 0; i2 < delEntitys.length; i2++) { entities2.remove(delEntitys[i2]); } this._updateScene(); } _removeEntityByObject(objEntity) { if (!Cesium.defined(objEntity)) return; this._entities.remove(objEntity); } _createPoint(coord, label2) { let _self = this; let entity = new Cesium.Entity({ name: _self._sketchEntityName + "_Point", position: coord, billboard: { image: _self._sketchPointImage, horizontalOrigin: Cesium.HorizontalOrigin.center, verticalOrigin: Cesium.VerticalOrigin.bottom, scale: 0.5, pixelOffset: new Cesium.Cartesian2(0, -11), disableDepthTestDistance: Number.POSITIVE_INFINITY } }); if (label2) { entity.label = { text: label2, font: "12px sans-serif", fillColor: this._toColor(255, 255, 255, 1), outlineColor: this._toColor(0, 154, 94, 1), style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth: 1, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, pixelOffset: new Cesium.Cartesian2(0, -28), showBackground: true, backgroundColor: this._toColor(0, 0, 0, 0.6), disableDepthTestDistance: Number.POSITIVE_INFINITY }; } this._entities.add(entity); this._pointEntitys.push(entity); this._updateScene(); } _removePointEntitys() { this._removeEntityByName(this._sketchEntityName + "_Point"); this._pointEntitys = []; } _createTempPolyline() { let _self = this; if (!Cesium.defined(this._sketchTempPolyline)) { this._sketchTempPolyline = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: new Cesium.CallbackProperty(function() { return _self._sketchTempPoints; }, false), material: _self._tempLineMaterial, width: _self._param.moveLineWidth, clampToGround: true } }); this._entities.add(this._sketchTempPolyline); this._updateScene(); } } _createPolyline() { let _self = this; if (!Cesium.defined(this._sketchPolyline)) { this._sketchPolyline = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: _self._sketchPoints, material: _self._lineMaterial, width: _self._param.lineWidth, clampToGround: true } }); this._entities.add(this._sketchPolyline); this._updateScene(); } } _createTempSpatialPolyline() { let _self = this; if (!Cesium.defined(this._sketchTempSpatialPolyline)) { this._sketchTempSpatialPolyline = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: new Cesium.CallbackProperty(function() { return _self._sketchTempPoints; }, false), material: _self._tempLineMaterial, width: _self._param.moveLineWidth, clampToGround: false } }); this._entities.add(this._sketchTempSpatialPolyline); this._updateScene(); } } _createSpatialPolyline() { let _self = this; if (!Cesium.defined(this._sketchSpatialPolyline)) { this._sketchSpatialPolyline = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: _self._sketchPoints, material: _self._spatialLineMaterial, width: _self._param.spatialLineWidth, clampToGround: false } }); this._entities.add(this._sketchSpatialPolyline); this._updateScene(); } } _createTempPolygon() { let _self = this; if (!Cesium.defined(this._sketchTempPolygon)) { this._sketchTempPolygon = new Cesium.Entity({ name: _self._sketchEntityName, polygon: { show: true, hierarchy: new Cesium.CallbackProperty(function() { return { positions: _self._sketchTempPoints }; }, false), material: _self._tempPolygonMaterial, classificationType: Cesium.ClassificationType.BOTH } }); this._entities.add(this._sketchTempPolygon); this._updateScene(); } } _createPolygon() { let _self = this; if (!Cesium.defined(this._sketchPolygon)) { this._sketchPoints.push(this._sketchPoints[0]); this._sketchPolygon = new Cesium.Entity({ name: _self._sketchEntityName, polygon: { show: true, hierarchy: { positions: _self._sketchPoints }, material: _self._polygonMaterial, classificationType: Cesium.ClassificationType.BOTH }, polyline: { show: true, positions: _self._sketchPoints, material: _self._lineMaterial, width: _self._param.lineWidth, clampToGround: true } }); this._entities.add(this._sketchPolygon); this._updateScene(); } } _createPolygonBody(options2) { let _self = this; let appendHeight = parseFloat(100); if (options2 && options2.height && typeof options2.height === "number") appendHeight = parseFloat(options2.height); let wallColor = [255, 255, 0, 1]; let polygonColor = [0, 0, 255, 0.65]; if (options2 && options2.color && this._checkColorAndAlpha(options2.color)) polygonColor = this._checkColorAndAlpha(options2.color); if (!Cesium.defined(this._sketchPolygon)) { let shaderSource = "czm_material czm_getMaterial(czm_materialInput materialInput){\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec2 st = materialInput.st;\n vec3 str = materialInput.str;\n material.diffuse = color.rgb;\n material.alpha = color.a;\n return material;\n}"; let wallMaterial = new Cesium.Material({ fabric: { type: "wallMaterial", uniforms: { color: _self._toColorFromArray(wallColor), speed: 100 }, source: shaderSource } }); new Cesium.MaterialAppearance({ material: wallMaterial }); let polygonAppearance = new Cesium.MaterialAppearance({ material: new Cesium.Material({ fabric: { type: "Color", uniforms: { color: _self._toColorFromArray(polygonColor) } } }) }); let wallMinimumHeights = []; let wallMaximumHeights = []; for (let i2 = 0; i2 < _self._sketchOutputPoints.length; i2++) { let height3 = parseFloat(_self._sketchOutputPoints[i2].height); wallMinimumHeights.push(height3); wallMaximumHeights.push(height3 + appendHeight); } let height2 = parseFloat(_self._sketchOutputPoints[0].height); wallMinimumHeights.push(height2); wallMaximumHeights.push(height2 + appendHeight); let tempPoints = []; for (let i2 = 0; i2 < _self._sketchPoints.length; i2++) { tempPoints.push(_self._sketchPoints[i2]); } tempPoints.push(_self._sketchPoints[0]); new Cesium.WallGeometry({ positions: tempPoints, maximumHeights: wallMaximumHeights, minimumHeights: wallMinimumHeights }); let polygonGeometry = new Cesium.PolygonGeometry({ polygonHierarchy: new Cesium.PolygonHierarchy(tempPoints), perPositionHeight: true, extrudedHeight: Math.max.apply(null, wallMaximumHeights) }); let polygonPrimitive = new Cesium.Primitive({ geometryInstances: new Cesium.GeometryInstance({ geometry: polygonGeometry }), appearance: polygonAppearance, releaseGeometryInstances: false }); polygonPrimitive.setUseGeometry({ cPoints: _self._sketchPoints, gPoints: _self._sketchOutputPoints, height: appendHeight, color: polygonColor }); this._viewer.scene.primitives.add(polygonPrimitive); } } _callUpdaeEllipseCenterPosition() { let _self = this; return function() { let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[0]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); _self._sketchEllipseCenterPosition = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(point1cartographic.longitude), Cesium.Math.toDegrees(point1cartographic.latitude), point2cartographic.height); return _self._sketchEllipseCenterPosition; }; } _callUpdateAltitudePolylinePositions() { let _self = this; return function() { _self._sketchAltitudePolylinePostions = []; _self._sketchAltitudePolylinePostions.push(_self._sketchTempPoints[0]); let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[0]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let point_temp = Cesium.Cartesian3.fromDegrees( Cesium.Math.toDegrees( point1cartographic.longitude ), Cesium.Math.toDegrees(point1cartographic.latitude), point2cartographic.height ); _self._sketchAltitudePolylinePostions.push(point_temp); return _self._sketchAltitudePolylinePostions; }; } _callUpdateEllipseMinorAxis() { let _self = this; return function() { let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[0]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); _self._sketchEllipseRadius = geodesic.surfaceDistance; if (_self._sketchEllipseRadius <= 0) _self._sketchEllipseRadius = 1; return _self._sketchEllipseRadius; }; } _callUpdateEllipseHeight() { let _self = this; return function() { let cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[0]); let cartographic1 = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let height_temp = cartographic1.height - cartographic.height; _self._sketchEllipseHeight = height_temp + _self._sketchAltitudeInitHeight; return _self._sketchEllipseHeight; }; } _createTempAltitudePolyline() { let _self = this; if (!Cesium.defined(this._sketchTempAltituePolyline)) { this._sketchTempAltituePolyline = new Cesium.Entity({ name: _self._sketchEntityName, position: new Cesium.CallbackProperty( _self._callUpdaeEllipseCenterPosition(), false ), polyline: { show: true, positions: new Cesium.CallbackProperty( _self._callUpdateAltitudePolylinePositions(), false ), material: _self._tempAlititudeLineMaterial, width: _self._param.moveAltitudeLineWidth, clampToGround: false }, ellipse: { show: true, semiMinorAxis: new Cesium.CallbackProperty(_self._callUpdateEllipseMinorAxis(), false), semiMajorAxis: new Cesium.CallbackProperty(_self._callUpdateEllipseMinorAxis(), false), height: new Cesium.CallbackProperty(_self._callUpdateEllipseHeight(), false), material: _self._toColorFromArray(_self._param.moveEllipseColor), outline: _self._param.moveEllipseOutline, outlineWidth: _self._param.moveEllipseOutlineWidth, outlineColor: _self._toColorFromArray(_self._param.moveEllipseOutlineColor) } }); _self._entities.add(_self._sketchTempAltituePolyline); } } _createAltitudePolyline() { let _self = this; if (!Cesium.defined(this._sketchAltitudePolyline)) { this._sketchAltitudePolyline = new Cesium.Entity({ name: _self._sketchEntityName, position: _self._sketchEllipseCenterPosition, polyline: { show: true, positions: _self._sketchAltitudePolylinePostions, material: _self._altitudeLineMaterial, width: _self._param.altitudeLineWidth, clampToGround: false }, ellipse: { show: true, semiMinorAxis: _self._sketchEllipseRadius, semiMajorAxis: _self._sketchEllipseRadius, height: _self._sketchEllipseHeight, material: _self._toColorFromArray(_self._param.ellipseColor), outline: _self._param.ellipseOutline, outlineWidth: _self._param.ellipseOutlineWidth, outlineColor: _self._toColorFromArray(_self._param.ellipseOutlineColor) } }); _self._entities.add(_self._sketchAltitudePolyline); } } _callEllipseOutlineCoordinate() { let _self = this; return function() { let positionCenter = _self._sketchEllipseCenterPosition; let positionRotate = _self._sketchTempPoints[1]; _self._ellipseOutlineCoordinates = []; for (let angle = 5; angle < 360; ) { let newPosition = _self._rotatedPointByAngle(positionRotate, positionCenter, angle); _self._ellipseOutlineCoordinates.push(newPosition); angle = angle + 5; } _self._ellipseOutlineCoordinates.push(_self._ellipseOutlineCoordinates[0]); return _self._ellipseOutlineCoordinates; }; } _createTempCircle(centerPosition) { let _self = this; if (!Cesium.defined(this._sketchTempCircle)) { _self._sketchEllipseCenterPosition = centerPosition.clone(); this._sketchTempCircle = new Cesium.Entity({ name: _self._sketchEntityName, position: centerPosition, polyline: { show: true, positions: new Cesium.CallbackProperty(_self._callEllipseOutlineCoordinate(), false), material: _self._tempLineMaterial, width: _self._param.moveLineWidth, clampToGround: true }, ellipse: { show: true, semiMinorAxis: new Cesium.CallbackProperty(_self._callUpdateEllipseMinorAxis(), false), semiMajorAxis: new Cesium.CallbackProperty(_self._callUpdateEllipseMinorAxis(), false), material: _self._tempPolygonMaterial, classificationType: Cesium.ClassificationType.BOTH } }); _self._entities.add(_self._sketchTempCircle); } } _rotatedPointByAngle(position_A, position_B, angle) { var localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position_B); var worldToLocal_Matrix = Cesium.Matrix4.inverse(localToWorld_Matrix, new Cesium.Matrix4()); Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, position_B, new Cesium.Cartesian3()); var localPosition_A = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, position_A, new Cesium.Cartesian3()); var new_x = localPosition_A.x * Math.cos(Cesium.Math.toRadians(angle)) + localPosition_A.y * Math.sin(Cesium.Math.toRadians(angle)); var new_y = localPosition_A.y * Math.cos(Cesium.Math.toRadians(angle)) - localPosition_A.x * Math.sin(Cesium.Math.toRadians(angle)); var new_z = localPosition_A.z; return Cesium.Matrix4.multiplyByPoint( localToWorld_Matrix, new Cesium.Cartesian3(new_x, new_y, new_z), new Cesium.Cartesian3() ); } _createCircle() { let _self = this; if (!Cesium.defined(this._sketchCircle)) { this._sketchCircle = new Cesium.Entity({ name: _self._sketchEntityName, position: _self._sketchEllipseCenterPosition, polyline: { show: true, positions: _self._ellipseOutlineCoordinates, material: _self._lineMaterial, width: _self._param.lineWidth, clampToGround: true }, ellipse: { show: true, semiMinorAxis: _self._sketchEllipseRadius, semiMajorAxis: _self._sketchEllipseRadius, material: _self._polygonMaterial, classificationType: Cesium.ClassificationType.BOTH } }); _self._entities.add(_self._sketchCircle); } } _callUpdateRectangleCoordinates() { let _self = this; return function() { let lng0 = parseFloat(_self._sketchTempPoints[0].lng); let lat0 = parseFloat(_self._sketchTempPoints[0].lat); let lng1 = parseFloat(_self._sketchTempPoints[1].lng); let lat1 = parseFloat(_self._sketchTempPoints[1].lat); _self._rectangleCoordinates = [0, 0, 1, 1]; if (lng0 < lng1) { _self._rectangleCoordinates[0] = lng0; _self._rectangleCoordinates[2] = lng1; } else { _self._rectangleCoordinates[0] = lng1; _self._rectangleCoordinates[2] = lng0; } if (lat0 < lat1) { _self._rectangleCoordinates[1] = lat0; _self._rectangleCoordinates[3] = lat1; } else { _self._rectangleCoordinates[1] = lat1; _self._rectangleCoordinates[3] = lat0; } let rectangle = Cesium.Rectangle.fromDegrees( _self._rectangleCoordinates[0], _self._rectangleCoordinates[1], _self._rectangleCoordinates[2], _self._rectangleCoordinates[3] ); let res = _self._calculateRectangleOutlineCoordinates(rectangle); _self._rectangleOutlineCoordinates = res.cPoints; _self._sketchOutputPoints = res.gPoints; return rectangle; }; } _calculateRectangleOutlineCoordinates(rectangle) { let south_east = Cesium.Rectangle.southeast(rectangle); let se2 = Cesium.Cartographic.toCartesian(south_east); let south_west = Cesium.Rectangle.southwest(rectangle); let sw = Cesium.Cartographic.toCartesian(south_west); let north_east = Cesium.Rectangle.northeast(rectangle); let ne2 = Cesium.Cartographic.toCartesian(north_east); let north_west = Cesium.Rectangle.northwest(rectangle); let nw = Cesium.Cartographic.toCartesian(north_west); let gPoints = []; gPoints.push({ lng: Cesium.Math.toDegrees(south_west.longitude), lat: Cesium.Math.toDegrees(south_west.latitude), height: south_west.height }); gPoints.push({ lng: Cesium.Math.toDegrees(south_east.longitude), lat: Cesium.Math.toDegrees(south_east.latitude), height: south_east.height }); gPoints.push({ lng: Cesium.Math.toDegrees(north_east.longitude), lat: Cesium.Math.toDegrees(north_east.latitude), height: north_east.height }); gPoints.push({ lng: Cesium.Math.toDegrees(north_west.longitude), lat: Cesium.Math.toDegrees(north_west.latitude), height: north_west.height }); gPoints.push({ lng: Cesium.Math.toDegrees(south_west.longitude), lat: Cesium.Math.toDegrees(south_west.latitude), height: south_west.height }); return { cPoints: [sw, se2, ne2, nw, sw], gPoints }; } _callUpdateRectangleOutlineCoordinates() { let _self = this; return function() { return _self._rectangleOutlineCoordinates; }; } _createTempRectangle() { let _self = this; if (!Cesium.defined(this._sketchTempRectangle)) { this._sketchTempRectangle = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: new Cesium.CallbackProperty(_self._callUpdateRectangleOutlineCoordinates(), false), material: _self._tempLineMaterial, width: _self._param.moveLineWidth, clampToGround: true }, rectangle: { show: true, coordinates: new Cesium.CallbackProperty(_self._callUpdateRectangleCoordinates(), false), material: _self._tempPolygonMaterial, classificationType: Cesium.ClassificationType.BOTH } }); _self._entities.add(_self._sketchTempRectangle); } } _createRectangle() { let _self = this; if (!Cesium.defined(this._sketchRectangle)) { this._sketchRectangle = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: _self._rectangleOutlineCoordinates, material: _self._lineMaterial, width: _self._param.lineWidth, clampToGround: true }, rectangle: { show: true, coordinates: Cesium.Rectangle.fromDegrees(_self._rectangleCoordinates[0], _self._rectangleCoordinates[1], _self._rectangleCoordinates[2], _self._rectangleCoordinates[3]), material: _self._polygonMaterial, classificationType: Cesium.ClassificationType.BOTH } }); _self._entities.add(_self._sketchRectangle); } } _callUpdaeTriangleEllipseCenterPosition() { let _self = this; return function() { let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[2]); _self._sketchEllipseCenterPosition = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(point1cartographic.longitude), Cesium.Math.toDegrees(point1cartographic.latitude), point2cartographic.height); return _self._sketchEllipseCenterPosition; }; } _callUpdateTriangleAltitudePolylinePositions() { let _self = this; return function() { _self._sketchAltitudePolylinePostions = []; _self._sketchAltitudePolylinePostions.push(_self._sketchTempPoints[1]); let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[2]); let point_temp = Cesium.Cartesian3.fromDegrees( Cesium.Math.toDegrees( point1cartographic.longitude ), Cesium.Math.toDegrees(point1cartographic.latitude), point2cartographic.height ); _self._sketchAltitudePolylinePostions.push(point_temp); return _self._sketchAltitudePolylinePostions; }; } _callUpdateTriangleEllipseMinorAxis() { let _self = this; return function() { let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[2]); let geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); _self._sketchEllipseRadius = geodesic.surfaceDistance; if (_self._sketchEllipseRadius <= 0) _self._sketchEllipseRadius = 1; return _self._sketchEllipseRadius; }; } _callUpdateTriangleEllipseHeight() { let _self = this; return function() { let cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let cartographic1 = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[2]); let height_temp = cartographic1.height - cartographic.height; _self._sketchEllipseHeight = height_temp + _self._sketchAltitudeInitHeight; return _self._sketchEllipseHeight; }; } _callUpdateTriangleSpatialPolylinePositions() { let _self = this; return function() { _self._sketchTriangleSpatialPolylinePositions = []; _self._sketchTriangleSpatialPolylinePositions.push(_self._sketchTempPoints[0]); _self._sketchTriangleSpatialPolylinePositions.push(_self._sketchEllipseCenterPosition); return _self._sketchTriangleSpatialPolylinePositions; }; } _createTriangleSpatialPolyline() { let _self = this; this._sketchSpatialPolyline = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: _self._sketchTriangleSpatialPolylinePositions, material: _self._spatialLineMaterial, width: _self._param.spatialLineWidth, clampToGround: false } }); this._entities.add(this._sketchSpatialPolyline); } _createTempTriangleAltitudePolylineAndSpatialPolyline() { let _self = this; if (!Cesium.defined(this._sketchTempTriangleAltitudePolyline) && !Cesium.defined(this._sketchTempSpatialPolyline)) { this._sketchTempTriangleAltitudePolyline = new Cesium.Entity({ name: _self._sketchEntityName, position: new Cesium.CallbackProperty( _self._callUpdaeTriangleEllipseCenterPosition(), false ), polyline: { show: true, positions: new Cesium.CallbackProperty( _self._callUpdateTriangleAltitudePolylinePositions(), false ), material: _self._tempAlititudeLineMaterial, width: _self._param.moveAltitudeLineWidth, clampToGround: false }, ellipse: { show: true, semiMinorAxis: new Cesium.CallbackProperty(_self._callUpdateTriangleEllipseMinorAxis(), false), semiMajorAxis: new Cesium.CallbackProperty(_self._callUpdateTriangleEllipseMinorAxis(), false), height: new Cesium.CallbackProperty(_self._callUpdateTriangleEllipseHeight(), false), material: _self._toColorFromArray(_self._param.moveEllipseColor), outline: _self._param.moveEllipseOutline, outlineWidth: _self._param.moveEllipseOutlineWidth, outlineColor: _self._toColorFromArray(_self._param.moveEllipseOutlineColor) } }); _self._entities.add(_self._sketchTempTriangleAltitudePolyline); _self._sketchTempSpatialPolyline = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: new Cesium.CallbackProperty(_self._callUpdateTriangleSpatialPolylinePositions(), false), material: _self._tempLineMaterial, width: _self._param.moveLineWidth, clampToGround: false } }); _self._entities.add(_self._sketchTempSpatialPolyline); } } _createTempSpatialTriangle() { let _self = this; if (!Cesium.defined(this._sketchTempSpatialTriangle)) { this._sketchTempSpatialTriangle = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: new Cesium.CallbackProperty(function() { _self._sketchSpatialTrianglePositions = []; _self._sketchSpatialTrianglePositions.push(_self._sketchTempPoints[0].clone()); _self._sketchSpatialTrianglePositions.push(_self._sketchTempPoints[1].clone()); let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[0]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let point_temp = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(point1cartographic.longitude), Cesium.Math.toDegrees(point1cartographic.latitude), point2cartographic.height); _self._sketchSpatialTrianglePositions.push(point_temp); _self._sketchSpatialTrianglePositions.push(_self._sketchTempPoints[0].clone()); return _self._sketchSpatialTrianglePositions; }, false), material: _self._tempLineMaterial, width: _self._param.moveLineWidth, clampToGround: false } }); this._entities.add(this._sketchTempSpatialTriangle); this._updateScene(); } } _createSpatialTriangle() { let _self = this; if (!Cesium.defined(this._sketchSpatialTriangle)) { this._sketchSpatialTriangle = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: _self._sketchSpatialTrianglePositions, material: _self._lineMaterial, width: _self._param.lineWidth, clampToGround: false } }); this._entities.add(this._sketchSpatialTriangle); this._updateScene(); } } _setMoveLineStyle(options2) { let _self = this; let color2 = [255, 255, 255, 1]; let lineWidth = 3; let isOutline = false; let power = 0.2; let outlineColor = [255, 0, 0, 1]; let outlineWidth = 1; if (options2 && options2.color && options2.color.length === 4) color2 = options2.color; if (options2 && options2.outline && typeof options2.outline === "boolean") isOutline = options2.outline; if (options2 && options2.outlineColor && options2.outlineColor.length === 4) outlineColor = options2.outlineColor; if (options2 && options2.outlineWidth && typeof options2.outlineWidth === "number") outlineWidth = options2.outlineWidth; if (options2 && options2.lineWidth && typeof options2.lineWidth === "number") lineWidth = options2.lineWidth; if (options2 && options2.power) power = options2.power; if (isOutline) { this._tempLineMaterial = new Cesium.PolylineOutlineMaterialProperty({ color: _self._toColorFromArray(color2), outlineColor: _self._toColorFromArray(outlineColor), outlineWidth }); } else { if (power === void 0) { this._tempLineMaterial = new Cesium.PolylineDashMaterialProperty({ color: _self._toColorFromArray(color2) }); } else { this._tempLineMaterial = new Cesium.PolylineGlowMaterialProperty({ color: _self._toColorFromArray(color2), glowPower: power }); } } this._param.moveLineWidth = lineWidth; } _setLineStyle(options2) { let _self = this; let color2 = [255, 255, 255, 1]; let lineWidth = 2; let outlineColor = [0, 255, 0, 0.6]; let outlineWidth = 1; if (options2 && options2.color && options2.color.length === 4) color2 = options2.color; if (options2 && options2.outlineColor && options2.outlineColor.length === 4) outlineColor = options2.outlineColor; if (options2 && options2.outlineWidth && typeof options2.outlineWidth === "number") outlineWidth = options2.outlineWidth; if (options2 && options2.lineWidth && typeof options2.lineWidth === "number") lineWidth = options2.lineWidth; this._lineMaterial = new Cesium.PolylineOutlineMaterialProperty({ color: _self._toColorFromArray(color2), outlineColor: _self._toColorFromArray(outlineColor), outlineWidth }); this._param.lineWidth = lineWidth; } _setSpatialLineStyle(options2) { let _self = this; let color2 = [255, 255, 0, 1]; let lineWidth = 2; let outlineColor = [255, 255, 255, 1]; let outlineWidth = 1; if (options2 && options2.color && options2.color.length === 4) color2 = options2.color; if (options2 && options2.outlineColor && options2.outlineColor.length === 4) outlineColor = options2.outlineColor; if (options2 && options2.outlineWidth && typeof options2.outlineWidth === "number") outlineWidth = options2.outlineWidth; if (options2 && options2.lineWidth && typeof options2.lineWidth === "number") lineWidth = options2.lineWidth; this._spatialLineMaterial = new Cesium.PolylineOutlineMaterialProperty({ color: _self._toColorFromArray(color2), outlineColor: _self._toColorFromArray(outlineColor), outlineWidth }); this._param.spatialLineWidth = lineWidth; } _setMovePolygonStyle(options2) { let polygonColor = [255, 0, 0, 0.3]; if (options2 && options2.color && options2.color.length === 4) polygonColor = options2.color; this._tempPolygonMaterial = new Cesium.ColorMaterialProperty(this._toColorFromArray(polygonColor)); } _setPolygonStyle(options2) { let polygonColor = [0, 0, 255, 0.3]; if (options2 && options2.color && options2.color.length === 4) polygonColor = options2.color; this._polygonMaterial = new Cesium.ColorMaterialProperty(this._toColorFromArray(polygonColor)); } _setMoveAltitudeLineStyle(options2) { let _self = this; let color2 = [255, 255, 255, 1]; let lineWidth = 2; let isOutline = true; let outlineColor = [255, 255, 0, 1]; let outlineWidth = 1; if (options2 && options2.color && options2.color.length === 4) color2 = options2.color; if (options2 && options2.outline && typeof options2.outline === "boolean") isOutline = options2.outline; if (options2 && options2.outlineColor && options2.outlineColor.length === 4) outlineColor = options2.outlineColor; if (options2 && options2.outlineWidth && typeof options2.outlineWidth === "number") outlineWidth = options2.outlineWidth; if (options2 && options2.lineWidth && typeof options2.lineWidth === "number") lineWidth = options2.lineWidth; if (isOutline) { this._tempAlititudeLineMaterial = new Cesium.PolylineOutlineMaterialProperty({ color: _self._toColorFromArray(color2), outlineColor: _self._toColorFromArray(outlineColor), outlineWidth }); } else { this._tempAlititudeLineMaterial = new Cesium.PolylineDashMaterialProperty({ color: _self._toColorFromArray(color2) }); } this._param.moveAltitudeLineWidth = lineWidth; } _setAltitudeLineStyle(options2) { let _self = this; let color2 = [255, 255, 255, 1]; let lineWidth = 2; let outlineColor = [0, 0, 255, 1]; let outlineWidth = 1; if (options2 && options2.color && options2.color.length === 4) color2 = options2.color; if (options2 && options2.outlineColor && options2.outlineColor.length === 4) outlineColor = options2.outlineColor; if (options2 && options2.outlineWidth && typeof options2.outlineWidth === "number") outlineWidth = options2.outlineWidth; if (options2 && options2.lineWidth && typeof options2.lineWidth === "number") lineWidth = options2.lineWidth; this._altitudeLineMaterial = new Cesium.PolylineOutlineMaterialProperty({ color: _self._toColorFromArray(color2), outlineColor: _self._toColorFromArray(outlineColor), outlineWidth }); this._param.altitudeLineWidth = lineWidth; } _setMoveEllipseStyle(options2) { if (options2 && options2.color && options2.color.length === 4) this._param.moveEllipseColor = options2.color; if (options2 && options2.outlineWidth && typeof options2.outlineWidth === "number") this._param.moveEllipseOutlineWidth = options2.outlineWidth; if (options2 && options2.outline && typeof options2.outline === "boolean") this._param.moveEllipseOutline = options2.outline; if (options2 && options2.outlineColor && options2.outlineColor.length === 4) this._param.moveEllipseOutlineColor = options2.outlineColor; } _setEllipseStyle(options2) { if (options2 && options2.color && options2.color.length === 4) this._param.ellipseColor = options2.color; if (options2 && options2.outlineWidth && typeof options2.outlineWidth === "number") this._param.ellipseOutlineWidth = options2.outlineWidth; if (options2 && options2.outline && typeof options2.outline === "boolean") this._param.ellipseOutline = options2.outline; if (options2 && options2.outlineColor && options2.outlineColor.length === 4) this._param.ellipseOutlineColor = options2.outlineColor; } _clear(isAll) { if (isAll != void 0 && isAll === true) { this._removeEntityByName(this._sketchEntityName); this._removePointEntitys(); } this._sketchTempPoints = []; this._sketchPoints = []; this._sketchOutputPoints = []; this._sketchTempPolyline = void 0; this._sketchPolyline = void 0; this._sketchTempPolygon = void 0; this._sketchPolygon = void 0; this._sketchTempAltituePolyline = void 0; this._sketchAltitudePolyline = void 0; this._sketchTempSpatialPolyline = void 0; this._sketchSpatialPolyline = void 0; this._sketchTempCircle = void 0; this._sketchCircle = void 0; this._sketchTempRectangle = void 0; this._sketchRectangle = void 0; this._sketchTempTriangleAltitudePolyline = void 0; this._sketchTriangleAltituePolyline = void 0; this._sketchTempSpatialTriangle = void 0; this._sketchSpatialTriangle = void 0; } _checkAppOrWeb() { if (window.navigator.userAgent.match( /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i )) { return SketchViewModel.RuntimeEnvironment.App; } else { return SketchViewModel.RuntimeEnvironment.Web; } } _isRuntimeApp() { if (this._checkAppOrWeb() === SketchViewModel.RuntimeEnvironment.App) { return true; } return false; } } Object.assign(SketchViewModel.prototype, { setMoveLineStyle: function(options2) { this._setMoveLineStyle(options2); }, setLineStyle: function(options2) { this._setLineStyle(options2); }, setSpatialLineStyle: function() { this._setSpatialLineStyle(options); }, setMovePolygonStyle: function(options2) { this._setMovePolygonStyle(options2); }, setPolygonStyle: function(options2) { this._setPolygonStyle(options2); }, setMoveAltitudeLineStyle: function(options2) { this._setMoveAltitudeLineStyle(options2); }, setAltitudeLineStyle: function(options2) { this._setAltitudeLineStyle(options2); }, setMoveEllipseStyle: function(options2) { this._setMoveEllipseStyle(options2); }, setEllipseStyle: function(options2) { this._setEllipseStyle(options2); }, setLabel: function(options2) { if (!options2) { options2 = { lineLabel: void 0, polygonLabel: void 0 }; } if (options2.lineLabel) this._lineLabel = options2.lineLabel; if (options2.polygonLabel) this._lineLabel = options2.polygonLabel; } }); Object.assign(SketchViewModel.prototype, { _registerLeftClickEvent: function(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { _self._lock = true; if (_self._timer != null) clearTimeout(_self._timer); _self._timer = setTimeout(function() { if (callChange) callChange(event2); _self._lock = false; }, 200); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); }, _registerLeftDoubleClickEvent: function(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { if (_self._timer != null) clearTimeout(_self._timer); _self._lock = false; if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); }, _registerMouseMoveEvent: function(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { if (_self._lock === void 0 || _self._lock === false) { if (callChange) callChange(event2); } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); }, _registerRightClickEvent: function(handler, callChange) { if (!handler) return; handler.setInputAction(function(event2) { if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); }, _clearEvent: function(handler) { if (!handler) return; handler.destroy(); handler = null; } }); Object.assign(SketchViewModel.prototype, { _sketchDrawPoint(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(loc2.sLocation, loc2.gLocation); }); }, _sketchDrawMultiplePoint(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } _self._sketchPoints.push(loc2.sLocation); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(loc2.sLocation, loc2.gLocation); }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchPoints.length > 0) { _self._sketchPoints.pop(); _self._sketchOutputPoints.pop(); if (options2.onUndo) options2.onUndo(); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { _self._clearEvent(); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); }, _sketchDrawPolyline(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._sketchTempPoints.length === 0) { _self._createTempPolyline(); _self._sketchTempPoints.push(loc2.sLocation.clone()); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(_self._sketchPoints, _self._sketchOutputPoints); }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (Cesium.defined(_self._sketchTempPolyline)) { _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); if (options2.onMoving) options2.onMoving(loc2.sLocation); } }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchTempPoints.length > 2) { _self._sketchPoints.pop(); _self._sketchTempPoints.splice(_self._sketchTempPoints.length - 2, 1); if (_self._isDrawPoint) { let lastPointEntity = _self._pointEntitys[_self._pointEntitys.length - 1]; _self._entities.remove(lastPointEntity); _self._pointEntitys.pop(); } if (options2.onUndo) options2.onUndo(); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; if (_self._sketchPoints.length < 2) { if (options2.onError) options2.onError("\u70B9\u6570\u5C11\u4E8E\u4E24\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._removeEntityByObject(_self._sketchTempPolyline); _self._createPolyline(); if (!_self._isRetainDrawPoint) _self._removePointEntitys(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); }, _sketchDrawSpatialPolyline(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._sketchTempPoints.length === 0) { _self._createTempSpatialPolyline(); _self._sketchTempPoints.push(loc2.sLocation.clone()); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(_self._sketchPoints, _self._sketchOutputPoints); }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (Cesium.defined(_self._sketchTempSpatialPolyline)) { _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); if (options2.onMoving) options2.onMoving(loc2.sLocation); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; if (_self._sketchPoints.length < 2) { if (options2.onError) options2.onError("\u7ED8\u5236\u70B9\u5C11\u4E8E2\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._removeEntityByObject(_self._sketchTempSpatialPolyline); _self._createSpatialPolyline(); _self._removePointEntitys(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchTempPoints.length > 2) { _self._sketchPoints.pop(); _self._sketchTempPoints.splice(_self._sketchTempPoints.length - 2, 1); if (options2.onUndo) options2.onUndo(); } }); }, _sketchDrawPolygon(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._sketchTempPoints.length === 0) { _self._createTempPolygon(); _self._createTempPolyline(); _self._sketchTempPoints.push(loc2.sLocation.clone()); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(_self._sketchPoints, _self._sketchOutputPoints); }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (Cesium.defined(_self._sketchTempPolygon)) { _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); if (options2.onMoving) options2.onMoving(loc2.sLocation); } }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchTempPoints.length > 2) { _self._sketchPoints.pop(); _self._sketchTempPoints.splice(_self._sketchTempPoints.length - 2, 1); if (_self._isDrawPoint) { let lastPointEntity = _self._pointEntitys[_self._pointEntitys.length - 1]; _self._entities.remove(lastPointEntity); _self._pointEntitys.pop(); } if (options2.onUndo) options2.onUndo(); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; if (_self._sketchPoints.length < 3) { if (options2.onError) options2.onError("\u70B9\u6570\u5C11\u4E8E3\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._removeEntityByObject(_self._sketchTempPolygon); _self._removeEntityByObject(_self._sketchTempPolyline); _self._createPolygon(); if (!_self._isRetainDrawPoint) _self._removePointEntitys(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); }, _sketchDrawCircle: function(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchTempPoints.length === 0) { if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, "\u8D77\u70B9"); } _self._sketchTempPoints.push(loc2.sLocation.clone()); _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); _self._createTempCircle(loc2.sLocation); if (options2.onAdded) options2.onAdded(loc2.sLocation); } else { if (_self._isRuntimeApp()) { _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); let positionCenter = _self._sketchEllipseCenterPosition; let positionRotate = _self._sketchTempPoints[1]; _self._ellipseOutlineCoordinates = []; for (let angle = 5; angle < 360; ) { let newPosition = _self._rotatedPointByAngle(positionRotate, positionCenter, angle); _self._ellipseOutlineCoordinates.push(newPosition); angle = angle + 5; } _self._ellipseOutlineCoordinates.push(_self._ellipseOutlineCoordinates[0]); let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[0]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); _self._sketchEllipseRadius = geodesic.surfaceDistance; if (_self._sketchEllipseRadius <= 0) _self._sketchEllipseRadius = 1; } _self._removePointEntitys(); _self._removeEntityByObject(_self._sketchTempCircle); _self._createCircle(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchOutputPoints[0], _self._sketchEllipseRadius); } }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; if (!Cesium.defined(_self._sketchTempCircle)) return; var cartesian = _self._viewer.scene.pickPosition(event2.endPosition); if (cartesian == void 0) return; _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(cartesian); }); }, _sketchDrawHeightPolyline: function(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchTempPoints.length === 0) { if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, "\u8D77\u70B9"); } _self._sketchAltitudeInitHeight = loc2.gLocation.height; _self._sketchTempPoints.push(loc2.sLocation.clone()); _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); if (options2.onAdded) options2.onAdded(loc2.sLocation); } else { if (_self._isRuntimeApp()) { _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[0]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); _self._sketchEllipseCenterPosition = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(point1cartographic.longitude), Cesium.Math.toDegrees(point1cartographic.latitude), point2cartographic.height); _self._sketchAltitudePolylinePostions = []; _self._sketchAltitudePolylinePostions.push(_self._sketchTempPoints[0]); let point_temp = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(point1cartographic.longitude), Cesium.Math.toDegrees(point1cartographic.latitude), point2cartographic.height); _self._sketchAltitudePolylinePostions.push(point_temp); let geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); _self._sketchEllipseRadius = geodesic.surfaceDistance; if (_self._sketchEllipseRadius <= 0) _self._sketchEllipseRadius = 1; let height_temp = point2cartographic.height - point1cartographic.height; _self._sketchEllipseHeight = height_temp + _self._sketchAltitudeInitHeight; } _self._removePointEntitys(); _self._removeEntityByObject(_self._sketchTempAltituePolyline); _self._createAltitudePolyline(); _self._clearEvent(handler); if (options2.onComplete) { options2.onComplete(_self._sketchAltitudePolylinePostions, _self._sketchEllipseCenterPosition); } } }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; if (_self._sketchTempPoints == void 0 || _self._sketchTempPoints.length == 0) return; var cartesian = _self._viewer.scene.pickPosition(event2.endPosition); if (cartesian == void 0) return; if (_self._sketchTempPoints.length >= 2) { if (!Cesium.defined(_self._sketchTempAltituePolyline)) { _self._createTempAltitudePolyline(); } else { _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(cartesian); } if (options2.onMoving) { options2.onMoving(_self._sketchAltitudePolylinePostions, _self._sketchEllipseCenterPosition); } } }); }, _sketchDrawRectangle: function(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchTempPoints.length === 0) { if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, "\u8D77\u70B9"); } _self._sketchTempPoints.push(loc2.gLocation); _self._sketchTempPoints.push(loc2.gLocation); _self._sketchPoints.push(loc2.gLocation); _self._createTempRectangle(); if (options2.onAdded) options2.onAdded(loc2.sLocation); } else { if (_self._isRuntimeApp()) { _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.gLocation); let lng0 = parseFloat(_self._sketchTempPoints[0].lng); let lat0 = parseFloat(_self._sketchTempPoints[0].lat); let lng1 = parseFloat(_self._sketchTempPoints[1].lng); let lat1 = parseFloat(_self._sketchTempPoints[1].lat); _self._rectangleCoordinates = [0, 0, 1, 1]; if (lng0 < lng1) { _self._rectangleCoordinates[0] = lng0; _self._rectangleCoordinates[2] = lng1; } else { _self._rectangleCoordinates[0] = lng1; _self._rectangleCoordinates[2] = lng0; } if (lat0 < lat1) { _self._rectangleCoordinates[1] = lat0; _self._rectangleCoordinates[3] = lat1; } else { _self._rectangleCoordinates[1] = lat1; _self._rectangleCoordinates[3] = lat0; } let rectangle = Cesium.Rectangle.fromDegrees(_self._rectangleCoordinates[0], _self._rectangleCoordinates[1], _self._rectangleCoordinates[2], _self._rectangleCoordinates[3]); let res = _self._calculateRectangleOutlineCoordinates(rectangle); _self._rectangleOutlineCoordinates = res.cPoints; _self._sketchOutputPoints = res.gPoints; } _self._removePointEntitys(); _self._removeEntityByObject(_self._sketchTempRectangle); _self._createRectangle(); handler.destroy(); handler = null; if (options2.onComplete) options2.onComplete(_self._sketchOutputPoints); } }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; if (!Cesium.defined(_self._sketchTempRectangle)) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.gLocation); }); }, _sketchDrawTriangle: function(handler, options2) { let _self = this; handler.setInputAction(function(event2) { if (Cesium.defined(_self._sketchTempAltituePolyline)) return; let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchPoints.length == 0) { _self._createPoint(loc2.sLocation, "\u8D77\u70B9"); _self._sketchTempPoints.push(loc2.sLocation.clone()); _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation); _self._createTempPolyline(); } else if (_self._sketchPoints.length === 1) { _self._createPoint(loc2.sLocation, "\u9AD8\u5EA6\u8D77\u70B9"); _self._entities.remove(_self._sketchTempPolyline); _self._sketchPoints.push(loc2.sLocation); _self._createPolyline(); _self._sketchTempPoints.push(loc2.sLocation.clone()); _self._sketchPoints.push(loc2.sLocation); _self._sketchAltitudeInitHeight = loc2.gLocation.height; _self._createTempTriangleAltitudePolylineAndSpatialPolyline(); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); handler.setInputAction(function(event2) { if (_self._sketchPoints === void 0 || _self._sketchPoints.length === 0) return; var cartesian = _self._viewer.scene.pickPosition(event2.endPosition); if (cartesian == void 0) return; _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(cartesian); }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); handler.setInputAction(function(event2) { if (_self._sketchPoints.length < 2) { if (options2.onError) options2.onError("\u7ED8\u5236\u56FE\u5F62\u4E0D\u5B8C\u6574\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._removePointEntitys(); _self._removeEntityByObject(_self._sketchTempTriangleAltitudePolyline); _self._removeEntityByObject(_self._sketchTempSpatialPolyline); _self._createAltitudePolyline(); _self._createTriangleSpatialPolyline(); handler.destroy(); handler = null; options2.onComplete( _self._sketchPoints, _self._sketchTriangleSpatialPolylinePositions, _self._sketchAltitudePolylinePostions, _self._sketchEllipseCenterPosition ); }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); }, _sketchDrawPolygonBody(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._sketchTempPoints.length === 0) { _self._createTempPolygon(); _self._createTempPolyline(); _self._sketchTempPoints.push(loc2.sLocation.clone()); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(_self._sketchPoints, _self._sketchOutputPoints); }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (Cesium.defined(_self._sketchTempPolygon)) { _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); if (options2.onMoving) options2.onMoving(loc2.sLocation); } }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchTempPoints.length > 2) { _self._sketchPoints.pop(); _self._sketchOutputPoints.pop(); _self._sketchTempPoints.splice(_self._sketchTempPoints.length - 2, 1); if (options2.onUndo) options2.onUndo(_self._sketchPoints); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; if (_self._sketchPoints.length < 3) { if (options2.onError) options2.onError("\u70B9\u6570\u5C11\u4E8E3\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._removeEntityByObject(_self._sketchTempPolygon); _self._removeEntityByObject(_self._sketchTempPolyline); _self._createPolygonBody({ height: 30, color: [255, 255, 0, 0.9] }); _self._removePointEntitys(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); }, _sketchDrawTriangleA: function(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { if (Cesium.defined(_self._sketchTempAltituePolyline)) return; let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchPoints.length == 0) { if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, "\u8D77\u70B9"); } _self._sketchTempPoints.push(loc2.sLocation.clone()); _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation); _self._createTempSpatialTriangle(); if (options2.onAdded) options2.onAdded(loc2.sLocation); } else if (_self._sketchPoints.length > 0) { if (_self._isRuntimeApp()) { _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); _self._sketchSpatialTrianglePositions = []; _self._sketchSpatialTrianglePositions.push(_self._sketchTempPoints[0].clone()); _self._sketchSpatialTrianglePositions.push(_self._sketchTempPoints[1].clone()); let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[0]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); let point_temp = Cesium.Cartesian3.fromDegrees(Cesium.Math.toDegrees(point1cartographic.longitude), Cesium.Math.toDegrees(point1cartographic.latitude), point2cartographic.height); _self._sketchSpatialTrianglePositions.push(point_temp); _self._sketchSpatialTrianglePositions.push(_self._sketchTempPoints[0].clone()); } _self._removePointEntitys(); _self._removeEntityByObject(_self._sketchTempSpatialTriangle); _self._createSpatialTriangle(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchSpatialTrianglePositions); } }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; if (_self._sketchPoints === void 0 || _self._sketchPoints.length === 0) return; var cartesian = _self._viewer.scene.pickPosition(event2.endPosition); if (cartesian == void 0) return; _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(cartesian); if (options2.onMoving) options2.onMoving(cartesian); }); }, sketchTools: function(toolsType, options2) { let _self = this; this._clear(); _self._sketchEventHandler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); switch (toolsType) { case SketchViewModel.SketchType.Point: _self._sketchDrawPoint(_self._sketchEventHandler, options2); break; case SketchViewModel.SketchType.Line: _self._sketchDrawPolyline(_self._sketchEventHandler, options2); break; case SketchViewModel.SketchType.Polygon: _self._sketchDrawPolygon(_self._sketchEventHandler, options2); break; case SketchViewModel.SketchType.Height: _self._sketchDrawHeightPolyline(_self._sketchEventHandler, options2); break; case SketchViewModel.SketchType.Spatial: _self._sketchDrawSpatialPolyline(_self._sketchEventHandler, options2); break; case SketchViewModel.SketchType.Circle: _self._sketchDrawCircle(_self._sketchEventHandler, options2); break; case SketchViewModel.SketchType.Rectangle: _self._sketchDrawRectangle(_self._sketchEventHandler, options2); break; case SketchViewModel.SketchType.Triangle: _self._sketchDrawTriangleA(_self._sketchEventHandler, options2); break; case SketchViewModel.SketchType.PolygonBody: _self._sketchDrawPolygonBody(_self._sketchEventHandler, options2); break; case SketchViewModel.SketchType.MultiplePoint: _self._sketchDrawMultiplePoint(_self._sketchEventHandler, options2); break; } }, sketchDrawFeacture: function(points2, type2, options2) { let _self = this; if (points2 === void 0 || points2.length === void 0 || points2.length < 2) { if (options2 && options2.onError) options2.onError("\u8F93\u5165\u7684\u5750\u6807\u96C6\u5408\u5F02\u5E38\uFF01"); return; } this._sketchPoints = []; for (let i2 = 0; i2 < points2.length; ) { this._sketchPoints.push(Cesium.Cartesian3.fromDegrees(points2[i2], points2[i2 + 1], points2[i2 + 2])); i2 = i2 + 3; } switch (type2) { case SketchViewModel.SketchType.DrawPoint: _self._createPoint(_self._sketchPoints[0], _self._lineLabel); if (options2 && options2.onComplete) options2.onComplete(_self._pointEntitys); break; case SketchViewModel.SketchType.DrawMultiplePoint: for (let i2 = 0; i2 < _self._sketchPoints.length; i2++) { _self._createPoint(_self._sketchPoints[i2], _self._lineLabel); } if (options2 && options2.onComplete) options2.onComplete(_self._pointEntitys); break; case SketchViewModel.SketchType.DrawPolyline: if (_self._sketchPoints.length < 2) { if (options2 && options2.onError) options2.onError("\u70B9\u6570\u5C11\u4E8E2\u4E2A\uFF0C\u65E0\u6CD5\u7ED8\u5236\uFF01"); } else { _self._createPolyline(); if (options2 && options2.onComplete) options2.onComplete(_self._sketchPolyline); } break; case SketchViewModel.SketchType.DrawPolygon: if (_self._sketchPoints.length < 3) { if (options2 && options2.onError) options2.onError("\u70B9\u6570\u5C11\u4E8E3\u4E2A\uFF0C\u65E0\u6CD5\u7ED8\u5236\uFF01"); } else { _self._createPolygon(); if (options2 && options2.onComplete) options2.onComplete(_self._sketchPolygon); } break; default: if (options2 && options2.onError) options2.onError("\u7ED8\u5236\u7C7B\u578B\u5F02\u5E38\uFF01"); break; } }, sketchClear: function() { this._clear(true); this._clearEvent(this._sketchEventHandler); }, sketchInit: function() { this._clear(false); } }); Object.assign(SketchViewModel.prototype, { _checkColor: function(color2) { if (color2 === void 0 || color2 === null) return false; if (typeof color2 != "number") return false; let intColor = parseInt(color2); if (intColor < 0 || intColor > 255) return false; return true; }, _checkAlpha: function(alpha) { if (alpha === void 0 || alpha === null) return false; if (typeof alpha != "number") return false; let floatAlpha = parseFloat(alpha); if (floatAlpha < 0 || floatAlpha > 1) return false; return true; }, _checkColorAndAlpha: function(colorAndAlpah) { let setColor = void 0; if (!colorAndAlpah || colorAndAlpah.length === void 0 || colorAndAlpah.length === 0) return void 0; if (colorAndAlpah.length === 1 && this._checkColor(colorAndAlpah[0])) { setColor = [colorAndAlpah[0], 0, 0, 1]; } else if (colorAndAlpah.length === 2 && this._checkColor(colorAndAlpah[0]) && this._checkColor( colorAndAlpah[1] )) { setColor = [colorAndAlpah[0], colorAndAlpah[1], 0, 1]; } else if (colorAndAlpah.length === 3 && this._checkColor(colorAndAlpah[0]) && this._checkColor( colorAndAlpah[1] ) && this._checkColor(colorAndAlpah[2])) { setColor = [colorAndAlpah[0], colorAndAlpah[1], colorAndAlpah[2], 1]; } else if (colorAndAlpah.length === 4 && this._checkColor(colorAndAlpah[0]) && this._checkColor( colorAndAlpah[1] ) && this._checkColor(colorAndAlpah[2]) && this._checkAlpha( colorAndAlpah[3] )) { setColor = [colorAndAlpah[0], colorAndAlpah[1], colorAndAlpah[2], colorAndAlpah[3]]; } return setColor; }, sketchEditPickPolygonBody: function(options2) { let _self = this; let primitive = _self._sketchPickPolygonBody; if (primitive === void 0) { if (options2.onComplete) options2.onComplete("\u672A\u62FE\u53D6\u5BF9\u8C61\u6216\u62FE\u53D6\u7684\u5BF9\u8C61\u4E0D\u7B26\u5408\u8981\u6C42\uFF01"); return; } let color2 = primitive._useGeometry.color; let height2 = primitive._useGeometry.height; this._sketchPoints = primitive._useGeometry.cPoints; this._sketchOutputPoints = primitive._useGeometry.gPoints; if (options2 && options2.height && typeof options2.height === "number") height2 = parseInt(options2.height); if (options2 && options2.color && this._checkColorAndAlpha(options2.color)) color2 = this._checkColorAndAlpha(options2.color); this._viewer.scene.primitives.remove(primitive); this._createPolygonBody({ color: color2, height: height2 }); if (options2.onComplete) options2.onComplete(void 0); }, sketchRemovePickPolygonBody: function(onComplete) { let _self = this; let primitive = _self._sketchPickPolygonBody; if (primitive === void 0) { if (onComplete) onComplete("\u672A\u62FE\u53D6\u5BF9\u8C61\u6216\u62FE\u53D6\u7684\u5BF9\u8C61\u4E0D\u7B26\u5408\u8981\u6C42\uFF01"); return; } this._viewer.scene.primitives.remove(primitive); if (onComplete) onComplete(void 0); }, sketchPick: function(onComplete) { let _self = this; let handler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); handler.setInputAction(function(event2) { let pickObj = _self._viewer.scene.pick(event2.position); if (pickObj && pickObj.primitive && pickObj.primitive._useGeometry != void 0) { _self._sketchPickPolygonBody = pickObj.primitive; if (onComplete) onComplete({ color: pickObj.primitive._useGeometry.color, height: pickObj.primitive._useGeometry.height }); } else { _self._sketchPickPolygonBody = void 0; if (onComplete) onComplete(void 0); } handler.destroy(); handler = null; }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } }); SketchViewModel.SketchType = Object.freeze({ Point: "point", MultiplePoint: "multiplePoint", Line: "line", Polygon: "polygon", Height: "height", Spatial: "spatial", Circle: "circle", Rectangle: "rectangle", Triangle: "triangle", PolygonBody: "polygonBody", DrawPoint: "drawPoint", DrawMultiplePoint: "drawMultiplePoint", DrawPolyline: "drawPolyline", DrawPolygon: "drawPolygon" }); SketchViewModel.SketchIconType = Object.freeze({ Normal: "normal", Blue: "blue", Green: "green", Violet: "violter" }); SketchViewModel.RuntimeEnvironment = Object.freeze({ App: "app", Web: "web" }); class CommonTools { constructor(viewer2, options2) { this._viewer = viewer2; options2 = options2 || {}; if (options2.isDrawPoint) { this._isDrawPoint = options2.isDrawPoint; } else { this._isDrawPoint = false; } if (options2.isRetainDrawPoint) { this._isRetainDrawPoint = options2.isRetainDrawPoint; } else { this._isRetainDrawPoint = false; } if (options2.isClear) { this._isClear = options2.isClear; } else { this._isClear = false; } this._sketchViewModel = new SketchViewModel(viewer2, { iconType: SketchViewModel.SketchIconType.Blue, isDrawPoint: this._isDrawPoint, isRetainDrawPoint: this._isRetainDrawPoint }); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } this._init(); } _init() { this._measureEntityName = "MeasureEntity"; this._entities = this._viewer.entities; this._measurePointImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcEAYAAAAinQPXAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAB2FJREFUWMO9mHtQlNcZxn/nW65GxHtEqTEajUxVoLYRSIyipHG4qG0lajtxVIRFubgqXuOI28ZE7FAvCLKLSNKxg/FSIzdvqNE62kaRitqpYMxovBGigo4I4n6nfwjsCrsLrtjnn53vnPe87/Oc9/2+854VdBhCd6ZP6dMHlAXO/lOngrzMLz/8EEQ0ASNGANNY2aOHxYIdfHr3LuBCwPnzQIKcf/AgiJ8pQV99BfmvR4+orHxZVsLxpZFT0qd07gyP7zqrej3IInF47lwQkTLV3d1xv3KXWPT4MYhLzMzIgHpn10+Sk+Gw74w+jx79HwSGnzUYhg4FED4FBcBq/jtokOOC2oSb0FZUgHpKVoeHQ9GtGM/y8lcgMLxf5juDBwNDlOWnTgGvUdWz5wsQ7c179fUWzz9y0tX1BdZPILeqCpTtil9QEOT9c876K1faWqS07XeMzJFuboCXkpaX1w5hqxl14QJIKYRWCzLV5OXtDQXbon3c3c2/TeMoYvncucAgPrl40Y7fA0zv1QtMydKwb58FL7toRwbDYo3/0utB3OD8qlX2hIkLqalwO0b9+fLlUHJOG9vQ0P4EjfyFIdPZGfqsURampIBIlxsWLLBtL/NltF4PhUIrVq92QGDIeEOmpye4pYju164Bq6n29LTiopy8tDTIL48pSExsDq/Oj9is/eAD4CRbli1DMEFUBAYCewnUaJD8jr2lpQjpJ7M2bBBi0+L47Tt2mP2G5xhNaWnAHrLj461tKF1rasA0rW5b//6w/0rigQcPWhrZKVFXP8TkybaFyb3kXbkCbiO6fpyU1Dwq58vNG3U6BJvEiYMHEcwQW8aNA3pT7O4OaPmTiwuCnlwcNQrEDRGYmytloilj5vr1Zv+mNXVhSUnmOFYEVnt6gtM9t+8mTbKlwo5AoWdySIjteWUcIwwG2LX7o6lPnkiZULTlj/7+wEThm5oKbCBeCOANUisqkNRxLCEBSSzrYmOB3jw6c8Yi3kL5K51OyvkZGXUTJz7LSH09CIPwMBpt85CHhMf48Q4IJFPofHzsbMAAJfjIEQtXC9TZWi0wkEuKAmjEyspKpNN2pyVBQULZaIjbvXmzUDb6xF0zGJCqv+no6NGAK5fLyiz8JssVcXEWgQLUsZZxWmGbrLTN057Agfh7eNiefhpRb7h922LgOzFp2DDzxnJXrsvLE0rqOW3sTz+12h4lLfRZhuQybuXmWmQkgPzhwy0o1jlV37ljh+e3/L1LF0cEXqX04UPb0075rlovLwtBHuqZ5845T5Z37UqbEAPkzOfsUvlHXZ35saFnQ4++fe04eIfftv64tEfgdvkXeweprFIvBQaaebJH+f3x4xbPvsRPnixlQlHGtDFjWq2Wuqj0yz4+QKk4FxNjMVXD2998Y0FRKEsCAuzwzBKv2eZpR6DspxQcPWpnvrNYoNNBZOTOnRoN0ilJMzYjA3ibsKoqoIxezs6gLJbpxcVSTbyePurwYSkT76VPKSgAWQslJcAmenTrBszgP7W1wBlRmZICY2SydHIC8ZCvdTo7Ak+ri44dcySDNDTs2mVufluhThoGD4bHp6or4uOb3zWJnoqwMGAVLnfuACHscHJCiFRmhISA0BMcFob52PDC/8EDkLfkR5GRQmycN8/t8mXw8O73WVwctnvdJ3SqrQXNSJeY3bttaWhHJxMxzDh97VqQAwheutR2IC6pm/z8oOBm7LcVFVJNKNo0oUsXhBKmGR0VBfI0vkFBINzExxoNEKP+ePYsktefFmVnC2Vjvm5SZSVEpGUNefNNUH8ti8rKQCziaOfOVuL2563PP4eCjJhxK1a8hMCJJ7NTPDxAXWIaefEi0J2r/ftbMfyryDhxAkZ2u1EaHAx6oReq2rb/JiTLZKkoUHLf2//YMWCGnPf++1YM7zHw+nVQ1mlKhg2DvPeiltr+GLaj2W524Kd6zZ4NhGOQ0ophI6GSkr4Gq61VGyjx7vdZQoIdYY1xVZ06RKttS1gTHLkPLjVmGo3AJZToaCsGjSWrPFBKfH3bvta0uyR3ySlGIxS4a7trte1l244MtoRpT93XSUk0l0oruFDbqROYUtQ9X3xhLr2WaBpX4+WnOTl2hHkw9eZN0Li5dLP6Dehogc1dexslK/7MynffhbNDvZXnWq9GNJWyiKC69TlphvobtWbOHNgnZonq6hdl+xL/yTQhbKUxeOtWEP9melSUFYMWJSv/IAtNprZLUu4Rf9u6FQpdo49bfRXaBQcy2BL1p+XURYtAZrLwhx+sGDSWrDpc3ZeVBbJMPt22zY6wRj/1oep08zXMUXRABpsQFmqcHhICYiLlhw4BBWiFA/5FOXmhoc8u0Pv3vyyrDshgEwqLYnKLi4FO5OfkvPh66UdudnZHCXsFAptQ96XMW7jQTsm2xAF23roFlD6NXLy4o9m8AoHFR7SxNTWgjGOsVovtxqBxXAzEbc4cKCycN+/+/Y7n88oRvjarcNYsCDtprP/+ewjvZ1xz9SpERBp3zpz5qqP/D5zQE33tptaiAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTA0LTA5VDE2OjQyOjI5KzA4OjAwjRBbGwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0wNC0wOVQxNjo0MjoyOSswODowMPxN46cAAABKdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uXzJhcHo1b3VpcnV4L2Rpbmd3ZWkuc3ZncY9vkgAAAABJRU5ErkJggg=="; this._iconBlue = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkEyMUE1MDg3NTAyMTFFREI0RUY4MjBCRjRGRDc0QUIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkEyMUE1MDc3NTAyMTFFREI0RUY4MjBCRjRGRDc0QUIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/grmkAAAhxSURBVHjazFoLUFVFGN49597LBdFUEpEQI0IpyxIfqU1ZkY/pNZg1RZlWY2lW4yMncxq18oHZ0+lhOaWZUo0zPjIr8W1NiubI+AxBIkRQQsQE7us8tv3P7qGL7gXOPRdzZ3bmcnf3+7/v/Lv/+f/lYkIIMpur2yBktQVO5yM7LRybIvsOFKFGCeHyQz/dFO2Ousflcg6UJSlVlqVEjHEMjNMH5tE0vVLT9ZJAQNnn9fm3d+9z3xEYioR9bNcjW9Z8Gtv35l7PUAFjnU5HLytrFUU9TgV9XXD4+PJhoyfV2/GIFO4TGD8my1lVuGXSHYNuPdyhfbv5VkVAgzWwFjAACzAvp0fwoV++uz6lxzXLolzOW1AEmz+gHCwtq3i2z52Pn2jtlgvXI1LpgQ0jeqYm74y0CGiACdjUxkir3KxMlsoKNj6WmNAlV5Kk9qiNGmBTG6vAlhV+rd1aUuGeNSNSeiSuolGo2X1cdDogbThQ79h21CMfP6NKtR4dw/edYiTSK8GhZ/aO0R7KiFV7dnPpzeFQXkppWeWY9MGj8+ifektbqzVC8KbVH6UNHdJvOw2nHUIB7vrDI89df861p0SRsUSjuiSzB4qxyYzx0TVEdBUNTnVqs7I6B4beEKOFwqThuu7X/IJ7hj/yYlGoM9NqIakpSVH7t67c3C4muq8IyKcQ9EpuddSK3xqcSHJR7g7WsSkCm8+YiSEgRuU9gMbd3k5578kufrcTC8U0eLwF/e99anhJ6Sm/HSHSid/Xv5CclJAjAjlXr+GHP6x07z9JZCSDCBfzBJapBomJabJfdKqFCiGa4RkQgrQA6p+MtbVTEn2dY2XhUz956szM6wdkLRFtsVZFrReeeaRTQte46aIxT4DgrA9ABJKRw42QTLsjimqATgUZwpxNO/0OGz3KmMvWuBFgABZgimwBB+ASbtSSp0zIHutyOuNEg9NW/e06UE49YRBi5LFB2NxaMoQg5iGJfza+Y+MwlwlmogALMIXpD+UAXIBTOEKi4rt0zg51sFft8TjN7YQbnzrbVpeeD8Q+w3fYFCQba9ha5kHABGyRTcrlCeBkVQjO/Wxeb3rA00WDb62rcbHzAARML0hBAloK+lyQ4TEHx2B4BragUS69vl06/6aLnk6LQuQ+vdMyRQMHT/ql/D9VGfEQi00PGFDYwqsP8/AsMQyJbTvABhuiFb3TU+8Otb1CCXFd1SF2gGhg/f56Bw4+B9iCJ0J5Bv93fgAbbIimd7yq/UDgZklITLQ7RTSwp9grs7MgBYXYMEQ0OTtBWBR7d5FX+NQ5J0tCHG63K0GYglSpkrklGkXY1GGKMbdo8d+qkBfn5LB0RpwOeDlc2mo9NNYHbyOMIuCRptvNsCGqXxgnS2dEoslhxMrgSDXOSbL0HlFVzSv6vlMMJigorWGpnJ2ymzRdTrENGxY4NSeE+PwBYQ3ds6tDN1IewvvFRMLQwTBMPB2lxTuEaTvnRKwI0S/U1ZeLBganRWtGwteYAOoR8EgQFsUe3DNamNpzTroVIWp1TW2xaCCrf6xKzDScaP89SRKGGBLkCSMjVo1aZRS1IZrOOalWhCgHjxTvEw3ckhylD7rOobF6ghZJphhk1TO80DK8Yab1KgJssCHMKhgnxYqQQM7i5bv9AaVONDh7VFzAqCWMekLhRZIFzzQWWLzIMjAY3qwsii2+YakDTsDNkkdoRVZbXHLyN9EglKdjh8QoUBSBcaIDEYU91cbtRi7yUFCF2OgBha9lBRZg3nWjuPQFLsDJqkfAtfWfr1jzDSHiR/zuk/GBjO5YQyqtQDU/5WYKCjo/Oicd/JmPw1xYA2sBA7AAM8RFBAEuwMnqYTei3Q95vx47U1VzTJj3uDBZNzXRl9EdUTE+SshnECJcFPOWwraNxj0GYo3OyLM1PgQYgAWYIlvAAbgAp3AKK6XyTPXZ56bOm0f3p/BFFEdr7LwZSd5xQ9wKUukUo/u4h8SdecCHzPmwdtOMJF9ciHodbE+cvmA+cAm1rVoSAsD1m3fmH127cfvSUJOiXRh98nS8/8dpXb0DknWNKB5qzsOIKlwYdIULpWMwB+ZunNrVC2tDeQIa2P552+4jfFsROxd0sbRfm5/31dyMPumZLQWkwsqA9EOTCzqCzdTGvKB7MCNWTU9s/oIOWsHh41tvGz5uNv34Fxdi64IOvNaxQ/t2aXvzVixKTUnqezkSRBqhCm4bMW7GhboGuJw7H+qQW7nEBoALFPCvOx8cP+toYUl+W4v4o6h0L9iiNkvBdnNXplYvsSEtOFddc75owLCxc6jLd7aVCMDulzlmDtgCm6FSEju38RAxztJUumTkoy+9faqyqjDSIgDzgezJi6gN+P9Is1HKjpBGz9T+U1cy+ulXZ9XU/lMRKRGABZjUEyeseCJcIY1i6BY4NmHagjlen/+CXREUow6wADMcEeEKQTxxq96wadfvCz9cvpBuBSVcEbCWYuQAFmCGSgrbSojx0qW9KmfxV5u/zP1+MTEqI6vlCNFhLWAAFsdEl1sIvIAgdTn98muL1mzZtXe1VYCtv+xbDWsBg2OR/0OIKaaB9ooHsqcsoXt8h4Uwu+P+xyfD/zwqOIatHw7YFQJvVthSUICVDxs9Kae0rOJwS2vKyk8fgbmwhq/V7fKwLYSLgWLoPLz9s59//c3mwjKMPTZ+5hswl6ceWiQ4REQIF2OE5QOHCo9NfCVndoPHW3vxHPgOxmAOzOVr0BUlhIuB0Hn2+5937p/77hcLgsMyfF7wwbKFMAZz+Fx0RQoJDsvvL8ndYYZlM8y+8/HKbXbDbKgW8ftd+qQJLQcglFZCaE3qFn81wogEh1mYE/F74bb64RnFAm/DDwy6mPdrkJLzKGfLpsj+vwIMACSZzfDJFmOPAAAAAElFTkSuQmCC"; this._iconGreen = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjI1NDIwOUU3NTAyMTFFRDk0MTJGQzhGMTFCQkREODIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjI1NDIwOUQ3NTAyMTFFRDk0MTJGQzhGMTFCQkREODIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgEE4igAAAgKSURBVHjazFoJbFRVFP3L/OlMoQXKImAFm0JbFtFKShEQI6UsggmkGKghIKTIIgZUohIDKEuLaFTQiIKyKKghqSyyF0pZbcHQsJVpoRkKbYFAW+iU2f78/313+qY+hvc78+dPkZfcMJ377rn3/Pve/fe9gVUUhfENY5eBjNbhvlnI6Bmh+KT5NzBhGigg9sb5vX3NpohhRqMwgOe4eJ7nurIsGwl69MDskiRXS7Jc7naLpx1OV/4z/V67CKpw+Gf1ZiQv9/vWyc8lTkMEpgiCIVGLrSh6ShGhX4ovlG5Mz5jToCcjXKhPIGvyOOG2JW/OywNfuBAd1WqFVhIwwAZsAQOwAPNxZoQ9f+yPHnHdn94QYRSeZ8I4XG7xnLWianq/oZOuBrvkQs0IZz27a2RCfLeCcJOAAZiAjXyM0hqblslcRfHuiV07d9zKcVwU00IDsJGPLeBLS3zBLi3O8nfuyLjuXbegKtTsOrY4Ldz22u2GPFue4bL7MlfrqWXh+xhDjNLL2EtOj0r3jI8Z70kyJcnN4aC4RGtF9eSklzIOoD/lQEsrGCLs/m3f9nxlUP98VE6j1QDz6/P5xZWLI06KJ3lGwIWdB2tfZEgkJB4oVwwzWBgsLY1d6hoWPUxSw0Tl2na8sHjYiAnvlKntmaD3SHxcrDG1f9/1aiScspOZYZ1hGm4dHnmSRyRglk+i/ITQwVywAVvAoA3kMyolufc6iEHv0uKuntkxu1ts5xyacY2nhh1TNsZcpBTxjBl2K4AQ2eD8MiITWXFDmULiYJhUNlXak7DH0d7QnvrUr1feWtgjZdxa2hILKiOzp01o1/mp9gtoOrtsZ0eXjjYXMYhEa/RFKyxmLCaCmBF/NhF633xkCxiABZg0XxADxBJq1eLnz8ycYhSE9jTl3Iq5EWeYM/wjwUPQvj1CEwHP8SMFWIBJbX9QDBALzrNmIhGdOsZkqm3sTfWbhKbgTcSSMhBLiiYcMc9I2CMswARsmk8Uy5s4r5qIsFt/WN6nVaQ5iaZcVLkoQjEpjbD++4IM+hFUQniCDMYBTMCm+USxJP6+bkVfFWRVIny/Pj3TaIpiezF3SjzFN619AaNwRLABSwzhnSOWGxLABh80sz5J8a+qLS81IsY20a1TaIrc2lzhoX3A+2Ui6FcxkRn+4f3j9UEZbdtEDcCUgycSaTbF0RQnGk7wTY79S2xIbSvGIDCPNxynPnUckyYiBpPJ2JmmKBVLuSYCXIA9EWxWWAIPYZeJZdS4cEwGTXtEMBhMNEWthHonVieB5gix2Aft/NIYk6Y9wqHmMGzH4HANHBOn6T3i8UgO2vcxfIzibTdI0Tv88Lw+NMTUHBHF6XJTz9CJQqLs7ZdkLHoIkbbyf71YgpBAbdtxTIoWInK9reEGTTGk9RCpqfGTCDJ6skE2kxL2QRk4JlkLEc+dmrorNEVGTIbo7VxFgowUQlYU4oxCnFMAe0LMBJFmgmPyaCEinrt45TRNkRyZLA8SBkleMj5CMvGclCBJMIQdJgAC2OCDZoZjErUQcees3njK5RZtNOWy2GUu1sk2nidcOAiPX2aUAHvC/1yCBDDh1Khyw2KDmLBF8Bkpt1bWXSm/fpKmhOPp9OjpIhyKGCcWHxkPpQj4b2oPQcJnj7AAMy06jbo/IBaISWtGwF3Dj5tzf1PIIyQx1nRf40phUiTmQWMQTaTI/ePx2wPEPvAF7xWEAViAqXIRoUAsEJPWze6tdn8dOF5y63ZNCbXv4SKVvYl7HSkKItPQGMwjpFx+4he8V5AtYAAWYNJ8QQwQC0bQfLASq2/duTvjveXL0fqkvog6GDooR3sdtWdFZomsjW18Xj5SdhXBwYOADdgW9CpwAJbK3nDMWpC9AmJRW1aBiABww8GCwkt/7s5fpzbJzJmZ9XHrnYfiDtkHSgMlph59CSXC9y8phA7m5sXl2cFWLRMwwPe+w6cuYvqKngs6uFp4tvDApmUv9ktKC1RZSxwl3I66HYaD9QcNFtHC+RpAaDuShCR5RPQIz7h24zy9zb3lQFjFF0oPpY6Yuhh9vIaJ6Lqgg6y1jY5q1bPowOZV8XGxyY+jQUQVqjh15NSP6m0P4HLuntom13KJDQD1CPDa0NezFl2ylBe2NInLZdYi8IV8WvGCDJi9YC+JoXDW3qm5V5aSPmUJSnlBS5EA7P5pk5eAL/Cp1pLouY2HinEXtdLlo96Y+3ll9W1LuEkA5tjMeauQD/h9pNkqpYdIU2bq7tvKM976cFFN3f2qcJEALMBEmbiqJROhEmkig5ZAycz3s5c4nK56vSQQhg2wADMUEqESYXCTcWfX/qNnVn6zcSVaCmKoJMAWYeQAFmCqNYUtRYTBTcftnNWbDv68dedqVMZlrQBgA7aAAVgYk3ncRBTcNd189+NVuXlHi7ZpBTh07PQ2sAUMjKX8H0R8ZKB7qhqbOX8tWuNHNJTZI2MmzYPfPKowhq5rDL1E4M0q4w7qRnrGnBxrRdWFQDYVN25ehLlgg21lvXHoJoLJwInjHrz9M9/+5LPmyjLoJmYt/BTm4tZDCkcMYSGCyXjL8tnzlpJZH+QsfmB31PnPge9AB3NgLrZhnigimAyUzrs79xX8s+zLn7LJsgyfs7/esBJ0MAfPZZ5IImRZ/mrt1iO+suwrs1989+thvWVWbYT9fhc9aQUdB6CUVkNpje3SqQPDMgpZZmFO2O+FW+o/niEsyDb8qt7Rd78GLTmucrp80vz/K8AAYAEv1AHM/GwAAAAASUVORK5CYII="; this._iconViolet = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzFDREU3Mjk3NTAyMTFFREE4MThDODBGNzMxNDBCQzEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzFDREU3Mjg3NTAyMTFFREE4MThDODBGNzMxNDBCQzEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppb+WxIAAAhcSURBVHjazFoLcFTVGb6vvdnNY0lEEJOIxhCSKTEFKSC1osIgjqIyA62mZfAxWJU+tC3TVh2lHSGhtNOKOqK0ii+0QwcfFB+IAsKIITpJhUBDHhMiSSBCTMgm2d377PnungubnXOT3L0b6rlzmM2e83/n+87/n/+ecxbeNE3OLvLFV3Fui3KiivNSkhmTNb7EpagQQvzxg++VBvxpc2XZN1MUhEJRFHJ5nk9HO5mwAV03OnTDaFYUtTocie66pOymOjSlYnzeq0d2bn02c9oVxXcTAct8PqnYja2qakeJoFdqDx3dNH/xij4vHhGSnYHlSxf5Out3rrjmqqmHglkZa9yKQIENbIEBLGCeT4/wB/f+c1LBpXkvpsm+73IpLFFF/bKltf2esjl3NI005JL1iNBSs23B5MKJe1ItAgWYwCZj3OiWm5vOQmvt9ttzJ4zbLAhCFjdKBdhkjNcwlht+Iw0tof6zrQsKLs19jWShIeM40hASure3S727O0WloV/QehTeSo/ZsilPzjCC11+k5yzM0/yTs4yhcAgvtaW1Y2nJ7MU7yJ/GcKE1EiH8B1ueLrr2+9N3kXQadAIM7f1abK84LEcOnBFFXuREMpk8TyrHx4jhMQ1OJ5x0U+f8s8boeY9MUbLmjNedMEm6Du2rqp17w5KfNTitmRGvkcKCfHnW9NK/O4kwIjp37JdfpDUv+jSgVw+IASHAofpRef/gSttQ0Rc2sAUGq5Axs2ZM+85GcPAaWkLT528/MDF/QiXLWPtG4Rt/tM+v1vSLMi9zPl4iniCVeASeEPjB82QQj8Az8IjOaZxqapxiKpzvygy9aMs1EekCmTnrX7WdfHjSjEUbWCE2Io88cPeSnAkXjV3J9ERY5xuX7PNrNQOin0/j0kiVUQUI8llVSnjs79FHpjawBQawgMkaCxzAJdmsJT50X/ky2ecby5yllTWy+p9+MY2PkYonb60RUuER1udBoixBMgcsYDK3P4QDuIBTMkLSxo+7oNxpYfe80eaLhZPMSSSkUAU8vPWvFVr2QrdimD7xfWw7nzUZMgdMYLPGJFx+DE5uhfCbn1s9JSM9UMJqbF9TJ5O5tNZEooh48o4Lk66fwWJIJZjAZtkQLsVvbFxTapm7ECKWTSmax2oYONgjRKp7RSluYbsRwRITS9cxQcDGGCybKSWF1zuFl5MQeUwwcwaroXtbmyTRWLdFkJekKxGDwo3nz4nB+iEVY7D6Z4/JmgluroSkB/wFrIa+z7rE2DyeWwfJiEhcO2fXD3n69p9mzjrl5EqI5PfLE5hv0qZ+gach4TacRhJmwFaaB5i8KCfJ1RrxSZKfuW3oUflE8l49kvg3xmCeX2KcXK0RMut8yo7BqSqUk+DqPaJpepjpqmyfaSbs30wPx24WFsZww2koIWYkqjDP0PKkDAO7WOuheyevBRgGxQS2XJjO3LZTTqYbIUZvqO84qyFz9lidyohtzenjRYT92LiZsy9kbocpJ8ONEO1UV3cjqyHn1nxNw+6V1tgsJicmdkaJCbDxgJ1zW77G6k85aW6EqF/WNVYzc3lZtuGfGdQ1sgXHVtwW4zbM4sPJ3tYDE9gYg2VDOaluhCiV6zftjypqiNWY92iponKKdZ7QaHUjJl6EbQ8sYOY+Uqo43LCEwAncXHmkuaWtu7H5q09ZjTieZv/kEhWHIpXURDHx6ydxLcT3OSdCsQ5YwAxeyz76ggs4ufUIXNv3/MtbXzfjj5BxZeK6aYpvaoYetUhECRnVqhoNNyvkTIP5WbNOh7H+sAUGsIDpcBFhggs4uV3sVrb79459R052dh1hGgZEs+hfP4hIU9P1iEUmapFSDGWQqPjnLHlDoQKiHGyBASxgssYCB3ABp2QOVmrHyVOn7/3V6tUkPpkvImlsmln83nXh4NJcNWKGuYgRIxcTpcQIx1fynd2OvrCBbfG710WA5bA2wvevrFgDLk5hNZwQAPd9uKfq8Jvbd210BPCL3GVPfS9a+PbVYWF6QA8bEBSrYYgzI1a1Ptvfk4q+l791dRi2Tp5Awdjvf7y/joaV6eWCLpPUy6p2vPTElWUl84bLSOH6XqHn3Xapd9fXotLUJ+jdmrUBFHMkU56UaQTnkkRxc54WKAkaw2HVHjr60awb7nycfDxGhXi6oIPXsoNZGUUHdry8rrAgf9r52CCSDFU7a8Gdv+sN9eNyrsdpkbu5xAZALwE8NueW5Y8drm+uGm0R/21oOYCxyJgtGHuoK1O3l9jYFnxzqqunYcb8ZauIy/eMlghgT5+3dBXGwphOWxIvt/HIGKfJVrr5xh/+/E9tHZ31qRYBzIXlD64jY+D3kSGzlBchZz3TfSbUvPiu3z7W1X2mPVUigAVM4okmN55IVshZMSQEjtz364pV4Ui016sIghECFjCTEZGsEI5u3E5t++CTz9c+uWktCQU1WRGwJRiVwAKm06ZwtIRYL11SOyvXv/ThC5vfWW/iaOf2PEJsYAsMYFFM7nwLwQsIW5cTv/j9uq07PzmwxS3AR3urt8AWGBTL/H8IscX04zp4YflDG0iM73aRZnfffMeD+M2jnWJ4Ovx7FYI3K0IKB7Dj8xevqGxpbT80nE3r8RN16Asbamt45eFZCBWDw1AP3v7lP330j0OlZbTdvvzhP6Av3XroqeCQEiFUjJWWaw7WH7n/N5WP9w+EuxP74Du0oQ/6UhvuWyWEikHqPP3O+3u+eOIv/6iIT8v4XPG3F9eiDX1oX+5bKSQ+Lf91w+bddlq20+yfn3n1Y69p1qmk/H6XzLRJjgNIpR1IrfkXj7+Q4zkzPs2iT8rvhUfrP54RLHgbv82Ps+/XsCWnWc7TmKzx/yfAAHo1CtU9myPWAAAAAElFTkSuQmCC"; this._measureTempPoints = []; } _updateScene() { this._viewer.scene.requestRender(); } _removeEntityByName(entityName) { let entities2 = this._entities; if (!entities2 || !entities2.values) return; let delEntitys = []; for (let i2 = 0; i2 < entities2.values.length; i2++) { if (entities2.values[i2].name == entityName) { delEntitys.push(entities2.values[i2]); } } for (let i2 = 0; i2 < delEntitys.length; i2++) { entities2.remove(delEntitys[i2]); } this._updateScene(); } _clear(isAll) { if (isAll != void 0 && isAll === true) { this._removeEntityByName(this._measureEntityName); if (this._sketchViewModel != void 0) { this._sketchViewModel.sketchClear(); } } this._measureTempPoints = []; this._altitudeDynamicLabel = void 0; this._tooltipRemove(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } } _toColor(red, green, blue, alpha) { return new Cesium.Color(red / 255, green / 255, blue / 255, alpha); } _cartesianToGeography(cartesian) { let ellipsoid = Cesium.Ellipsoid.WGS84; let cartographic = ellipsoid.cartesianToCartographic(cartesian); let latitude = Cesium.Math.toDegrees(cartographic.latitude); let longitude = Cesium.Math.toDegrees(cartographic.longitude); let altitude = cartographic.height; return { lon: longitude, lat: latitude, hei: altitude }; } _createPoint(coord, label2) { let _self = this; let entity = new Cesium.Entity({ name: _self._measureEntityName, position: coord, billboard: { image: _self._iconBlue, horizontalOrigin: Cesium.HorizontalOrigin.center, verticalOrigin: Cesium.VerticalOrigin.bottom, scale: 0.5, pixelOffset: new Cesium.Cartesian2(0, -11), disableDepthTestDistance: Number.POSITIVE_INFINITY } }); if (label2) { entity.label = { text: label2, font: "30px SimHei", scale: 0.5, fillColor: this._toColor(255, 255, 255, 1), outlineColor: this._toColor(14, 30, 79, 1), style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth: 2, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, showBackground: true, backgroundColor: _self._toColor(0, 0, 0, 0.6), disableDepthTestDistance: Number.POSITIVE_INFINITY, pixelOffset: new Cesium.Cartesian2(0, -28) }; } this._entities.add(entity); this._updateScene(); return entity; } _createLabel(coord, label2) { let _self = this; let entity = new Cesium.Entity({ name: _self._measureEntityName, position: coord, label: { text: label2, font: "30px SimHei", scale: 0.5, fillColor: this._toColor(255, 255, 255, 1), outlineColor: this._toColor(14, 30, 79, 1), style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth: 2, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, showBackground: true, backgroundColor: _self._toColor(0, 0, 0, 0.6), disableDepthTestDistance: Number.POSITIVE_INFINITY, pixelOffset: new Cesium.Cartesian2(0, -14) } }); this._entities.add(entity); this._updateScene(); } _createAltitudeDynamicLabel() { let _self = this; this._altitudeDynamicLabel = new Cesium.Entity({ name: _self._measureEntityName, position: new Cesium.CallbackProperty(function() { return _self._altitudeLabelPosition; }, false), label: { text: new Cesium.CallbackProperty(function() { return _self._altitudeLabelText; }, false), font: "12px sans-serif", fillColor: this._toColor(255, 255, 255, 1), outlineColor: this._toColor(0, 154, 94, 1), style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth: 1, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, pixelOffset: new Cesium.Cartesian2(0, -28), showBackground: true, backgroundColor: this._toColor(0, 0, 0, 0.6), disableDepthTestDistance: Number.POSITIVE_INFINITY } }); this._entities.add(this._altitudeDynamicLabel); this._updateScene(); } _measureDistance(positions) { let distance2 = 0; for (let i2 = 0; i2 < positions.length - 1; i2++) { let point1cartographic = Cesium.Cartographic.fromCartesian(positions[i2]); let point2cartographic = Cesium.Cartographic.fromCartesian(positions[i2 + 1]); let geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); let s = geodesic.surfaceDistance; s = Math.sqrt(Math.pow(s, 2) + Math.pow( point2cartographic.height - point1cartographic.height, 2 )); distance2 = distance2 + s; } if (distance2 < 1e3) return distance2.toFixed(2) + "\u7C73"; else return (distance2 / 1e3).toFixed(2) + "\u516C\u91CC"; } _measureSpaceDistance(positions) { let distance2 = 0; for (let i2 = 0; i2 < positions.length - 1; i2++) { let point1 = positions[i2]; let point2 = positions[i2 + 1]; let sx = Math.abs(point1.x - point2.x); let sy = Math.abs(point1.y - point2.y); let sz = Math.abs(point1.z - point2.z); let s = Math.sqrt(Math.pow(sx, 2) + Math.pow(sy, 2) + Math.pow(sz, 2)); distance2 = distance2 + s; } if (distance2 < 1e3) return distance2.toFixed(2) + "\u7C73"; else return (distance2 / 1e3).toFixed(2) + "\u516C\u91CC"; } _measureAreaBearing(from3, to) { let radiansPerDegree = Math.PI / 180; let degreesPerRadian = 180 / Math.PI; let lat1 = from3.lat * radiansPerDegree; let lon1 = from3.lon * radiansPerDegree; let lat2 = to.lat * radiansPerDegree; let lon2 = to.lon * radiansPerDegree; let angle = -Math.atan2(Math.sin(lon1 - lon2) * Math.cos(lat2), Math.cos(lat1) * Math.sin( lat2 ) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2)); if (angle < 0) { angle += Math.PI * 2; } angle = angle * degreesPerRadian; return angle; } _calculateAreaAngle(p1, p2, p3) { let bearing21 = this._measureAreaBearing(p2, p1); let bearing23 = this._measureAreaBearing(p2, p3); let angle = bearing21 - bearing23; if (angle < 0) { angle += 360; } return angle; } _calculateDistance(point1, point2) { let point1cartographic = Cesium.Cartographic.fromCartesian(point1); let point2cartographic = Cesium.Cartographic.fromCartesian(point2); let geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); let s = geodesic.surfaceDistance; s = Math.sqrt(Math.pow(s, 2) + Math.pow(point2cartographic.height - point1cartographic.height, 2)); return s; } _measureArea(points2, cartesianPoints) { let self2 = this; let res = 0; for (let i2 = 0; i2 < points2.length - 2; i2++) { let j = (i2 + 1) % points2.length; let k = (i2 + 2) % points2.length; let totalAngle = self2._calculateAreaAngle(points2[i2], points2[j], points2[k]); let dis_temp1 = self2._calculateDistance(cartesianPoints[i2], cartesianPoints[j]); let dis_temp2 = self2._calculateDistance(cartesianPoints[j], cartesianPoints[k]); res += dis_temp1 * dis_temp2 * Math.abs(Math.sin(totalAngle)); } return res; } _calculatePolylineAltitudeHeight(points2) { if (points2 === void 0 || points2.length < 2) return -1; let cartographic = Cesium.Cartographic.fromCartesian(points2[0]); let cartographic1 = Cesium.Cartographic.fromCartesian(points2[1]); let height_temp = cartographic1.height - cartographic.height; return Math.abs(height_temp).toFixed(2) + "\u7C73"; } _setMousePointerStyle() { document.querySelector("body").style.cursor = "crosshair"; } _initMousePointerStyle() { document.querySelector("body").style.cursor = "default"; } _checkAppOrWeb() { if (window.navigator.userAgent.match( /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i )) { return CommonTools.RuntimeEnvironment.App; } else { return CommonTools.RuntimeEnvironment.Web; } } _isRuntimeApp() { if (this._checkAppOrWeb() === CommonTools.RuntimeEnvironment.App) { return true; } return false; } _isRuntimeWeb() { if (this._checkAppOrWeb() === CommonTools.RuntimeEnvironment.Web) { return true; } return false; } _createOperationMainDom() { let buttonDiv = document.createElement("div"); buttonDiv.id = "drawButtonDiv"; buttonDiv.style.width = "80px"; buttonDiv.style.backgroundColor = "rgba(5, 45, 155, 0.7)"; buttonDiv.style.borderRadius = "5px"; buttonDiv.style.display = "flex"; buttonDiv.style.flexDirection = "column"; buttonDiv.style.padding = "8px"; buttonDiv.style.justifyContent = "center"; buttonDiv.style.position = "absolute"; buttonDiv.style.bottom = "150px"; buttonDiv.style.right = "10px"; let btnUndo = document.createElement("button"); btnUndo.id = "btnDrawBackout"; btnUndo.style.height = "30px"; btnUndo.style.marginBottom = "8px"; btnUndo.style.backgroundColor = "rgba(52, 137, 255, 1.0)"; btnUndo.style.color = "rgb(255, 255, 255)"; btnUndo.style.border = "0px solid red"; btnUndo.style.borderRadius = "5px"; btnUndo.innerHTML = "\u56DE\u9000"; btnUndo.style.fontSize = "13px"; btnUndo.style.cursor = "pointer"; buttonDiv.appendChild(btnUndo); let btnCompletion = document.createElement("button"); btnCompletion.id = "btnDrawComplete"; btnCompletion.style.height = "30px"; btnCompletion.style.backgroundColor = "rgba(88, 185, 45, 1.0)"; btnCompletion.style.color = "rgb(255, 255, 255)"; btnCompletion.style.border = "0px solid red"; btnCompletion.style.borderRadius = "5px"; btnCompletion.innerHTML = "\u5B8C\u6210"; btnCompletion.style.fontSize = "13px"; btnCompletion.style.cursor = "pointer"; buttonDiv.appendChild(btnCompletion); document.body.appendChild(buttonDiv); } _showTooltipMessage(message) { let msgMainDom = document.getElementById("messageMainDom"); if (msgMainDom !== null && msgMainDom !== void 0) { document.body.removeChild(msgMainDom); } msgMainDom = document.createElement("div"); msgMainDom.style.width = "30%"; msgMainDom.style.backgroundColor = "rgba(237, 248, 230, 1.0)"; msgMainDom.style.height = "45px"; msgMainDom.style.border = "solid 2px rgb(219, 241, 208)"; msgMainDom.style.borderRadius = "8px"; msgMainDom.style.display = "flex"; msgMainDom.style.alignItems = "center"; msgMainDom.style.paddingLeft = "10px"; msgMainDom.style.color = "rgb(91, 188, 48)"; msgMainDom.style.fontSize = "14px"; msgMainDom.style.fontWeight = "600"; msgMainDom.style.position = "absolute"; msgMainDom.style.left = "35%"; msgMainDom.style.transition = "transform 1s"; msgMainDom.style.transform = "translateY(-90px)"; msgMainDom.style.top = "0px"; msgMainDom.style.zIndex = 1e3; document.body.appendChild(msgMainDom); let strHtml = ""; strHtml += "
"; strHtml += "
" + message + "
"; msgMainDom.innerHTML = strHtml; msgMainDom.addEventListener("transitionend", function() { setTimeout(function() { document.body.removeChild(msgMainDom); }, 1e3); }, false); setTimeout(function() { msgMainDom.style.transform = "translateY(50px)"; }, 100); } } Object.assign(CommonTools.prototype, { _tooltipInit: function(text) { this._tooltipId = "tooltipJt"; let tooltipObj = document.getElementById(this._tooltipId); if (tooltipObj === null) { tooltipObj = document.createElement("div"); tooltipObj.id = this._tooltipId; document.body.appendChild(tooltipObj); let divStyle = ""; divStyle += "top: 30px;"; divStyle += "left: 30px;"; divStyle += "position: absolute;"; divStyle += "display: flex;"; divStyle += "align-items: center;"; divStyle += "width: 12x0px;"; divStyle += "height: auto;"; divStyle += "background-color: rgba(0, 0, 0, 0.65);"; divStyle += "border-radius: 5px;"; divStyle += "color: rgb(255, 255, 255);"; divStyle += "font-size: 12px;"; divStyle += "font-family: 'Alimama_ShuHeiTi_Bold';"; divStyle += "padding: 8px;"; divStyle += "border:solid 1px rgb(255,0,0);"; tooltipObj.setAttribute("style", divStyle); } if (text != void 0) tooltipObj.innerHTML = text; document.onmousemove = function(event2) { tooltipObj.style.left = event2.clientX + 10 + "px"; tooltipObj.style.top = event2.clientY - tooltipObj.offsetHeight / 2 + "px"; }; }, _tooltipRemove: function() { let tooltipObj = document.getElementById(this._tooltipId); if (tooltipObj != null) { document.body.removeChild(tooltipObj); } }, _tooltipSetText: function(text) { let tooltipObj = document.getElementById(this._tooltipId); if (tooltipObj != null) { tooltipObj.innerHTML = text; } } }); Object.assign(CommonTools.prototype, { clear: function() { this._clear(true); this._initMousePointerStyle(); } }); Object.assign(CommonTools.prototype, { measureLength: function(callError) { let _self = this; this._tempEntitys = []; this._clear(this._isClear); this._setMousePointerStyle(); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u6D4B\u91CF"); } else { this._tooltipInit("\u70B9\u51FB\u5F00\u59CB\u6D4B\u91CF"); } if (this._isRuntimeWeb()) { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Line, { onAdded: function(cPoints, gPoints) { if (cPoints.length === 1) { _self._createPoint(cPoints[0], "\u8D77\u70B9"); } else { let distince = _self._measureDistance(cPoints); let tempPoints = [cPoints[cPoints.length - 2], cPoints[cPoints.length - 1]]; distince += " +" + _self._measureDistance(tempPoints); _self._tempEntitys.push(_self._createPoint( cPoints[cPoints.length - 1], distince )); } }, onUndo: function() { _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length - 1]); _self._tempEntitys.pop(); }, onMoving: function(cPoint, scPoint) { _self._tooltipSetText("\u53F3\u952E\u5355\u51FB\u56DE\u9000
\u5DE6\u952E\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); }, onError: function(error) { if (callError) callError(error); }, onComplete: function(cPoints, gPoints) { _self._initMousePointerStyle(); _self._tooltipRemove(); } }); } else { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Line, { onAdded: function(cPoints, gPoints) { if (cPoints.length === 1) { _self._tooltipRemove(); _self._createPoint(cPoints[0], "\u8D77\u70B9"); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv == null) { _self._createOperationMainDom(); document.getElementById("btnDrawBackout").onclick = () => { if (_self._sketchViewModel._sketchTempPoints.length > 2) { _self._sketchViewModel._sketchPoints.pop(); _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1); if (_self._sketchViewModel._isDrawPoint) { let lastPointEntity = _self._sketchViewModel._pointEntitys[_self._sketchViewModel._pointEntitys.length - 1]; _self._sketchViewModel._entities.remove(lastPointEntity); _self._sketchViewModel._pointEntitys.pop(); } _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length - 1]); _self._tempEntitys.pop(); } }; document.getElementById("btnDrawComplete").onclick = () => { if (_self._sketchViewModel._sketchPoints.length < 2) { if (callError) callError("\u70B9\u6570\u5C11\u4E8E\u4E24\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolyline); _self._sketchViewModel._createPolyline(); if (!_self._sketchViewModel._isRetainDrawPoint) _self._sketchViewModel._removePointEntitys(); _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler); _self._initMousePointerStyle(); _self._tooltipRemove(); let buttonDiv2 = document.getElementById("drawButtonDiv"); if (buttonDiv2) { document.body.removeChild(buttonDiv2); } }; } } else { let distince = _self._measureDistance(cPoints); let tempPoints = [cPoints[cPoints.length - 2], cPoints[cPoints.length - 1]]; distince += " +" + _self._measureDistance(tempPoints); _self._tempEntitys.push(_self._createPoint(cPoints[cPoints.length - 1], distince)); } } }); } }, measureSpatialLength: function(callError) { let _self = this; this._clear(this._isClear); this._setMousePointerStyle(); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u6D4B\u91CF"); } else { this._tooltipInit("\u70B9\u51FB\u5F00\u59CB\u6D4B\u91CF"); } this._tempEntitys = []; if (this._isRuntimeWeb()) { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Spatial, { onAdded: function(cPoints, gPoints) { if (cPoints.length === 1) { _self._createPoint(cPoints[0], "\u8D77\u70B9"); } else { let distince = _self._measureSpaceDistance(cPoints); _self._tempEntitys.push(_self._createPoint( cPoints[cPoints.length - 1], distince )); } }, onUndo: function() { _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length - 1]); _self._tempEntitys.pop(); }, onMoving: function(cPoint, scPoint) { _self._tooltipSetText("\u53F3\u952E\u5355\u51FB\u56DE\u9000
\u5DE6\u952E\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); }, onError: function(error) { if (callError) callError(error); }, onComplete: function(cPoints, gPoints) { _self._initMousePointerStyle(); _self._tooltipRemove(); } }); } else { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Spatial, { onAdded: function(cPoints, gPoints) { if (cPoints.length === 1) { _self._tooltipRemove(); _self._createPoint(cPoints[0], "\u8D77\u70B9"); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv == null) { _self._createOperationMainDom(); document.getElementById("btnDrawBackout").onclick = () => { if (_self._sketchViewModel._sketchTempPoints.length > 2) { _self._sketchViewModel._sketchPoints.pop(); _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1); _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length - 1]); _self._tempEntitys.pop(); } }; document.getElementById("btnDrawComplete").onclick = () => { if (_self._sketchViewModel._sketchPoints.length < 2) { if (callError) callError("\u70B9\u6570\u5C11\u4E8E\u4E24\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempSpatialPolyline); _self._sketchViewModel._createSpatialPolyline(); _self._sketchViewModel._removePointEntitys(); _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler); _self._initMousePointerStyle(); _self._tooltipRemove(); let buttonDiv2 = document.getElementById("drawButtonDiv"); if (buttonDiv2) { document.body.removeChild(buttonDiv2); } }; } } else { let distince = _self._measureSpaceDistance(cPoints); _self._tempEntitys.push(_self._createPoint(cPoints[cPoints.length - 1], distince)); } } }); } }, measureArea: function(callError) { let _self = this; this._clear(this._isClear); this._setMousePointerStyle(); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u6D4B\u91CF"); } else { this._tooltipInit("\u70B9\u51FB\u5F00\u59CB\u6D4B\u91CF"); } var _areaLabel = ""; if (this._isRuntimeWeb()) { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Polygon, { onAdded: function(cPoints, gPoints) { _self._measureTempPoints.push(_self._cartesianToGeography(cPoints[cPoints.length - 1])); if (cPoints.length === 1) { _areaLabel = "\u8D77\u70B9"; _self._createPoint(cPoints[0], new Cesium.CallbackProperty(function() { var lable = _areaLabel; return lable; }, false)); } else if (cPoints.length >= 3) { let area = _self._measureArea(_self._measureTempPoints, cPoints); if (area > 1e5) { _areaLabel = (area / 1e5).toFixed(2) + "km\xB2"; } else { _areaLabel = area.toFixed(2) + "m\xB2"; } } }, onUndo: function() { _self._measureTempPoints.pop(); if (_self._measureTempPoints.length === 1) _self._areaLabel = "\u8D77\u70B9"; }, onMoving: function(cPoint, scPoint) { _self._tooltipSetText("\u53F3\u952E\u5355\u51FB\u56DE\u9000
\u5DE6\u952E\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); }, onError: function(error) { if (callError) callError(error); }, onComplete: function(cPoints, gPoints) { _self._initMousePointerStyle(); _self._tooltipRemove(); } }); } else { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Polygon, { onAdded: function(cPoints, gPoints) { _self._measureTempPoints.push(_self._cartesianToGeography(cPoints[cPoints.length - 1])); if (cPoints.length === 1) { _self._tooltipRemove(); _areaLabel = "\u8D77\u70B9"; _self._createPoint(cPoints[0], new Cesium.CallbackProperty(function() { var lable = _areaLabel; return lable; }, false)); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv == null) { _self._createOperationMainDom(); document.getElementById("btnDrawBackout").onclick = () => { if (_self._sketchViewModel._sketchTempPoints.length > 2) { _self._sketchViewModel._sketchPoints.pop(); _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1); if (_self._sketchViewModel._isDrawPoint) { let lastPointEntity = _self._sketchViewModel._pointEntitys[_self._sketchViewModel._pointEntitys.length - 1]; _self._entities.remove(lastPointEntity); _self._sketchViewModel._pointEntitys.pop(); } _self._measureTempPoints.pop(); if (_self._measureTempPoints.length === 1) _self._areaLabel = "\u8D77\u70B9"; } }; document.getElementById("btnDrawComplete").onclick = () => { if (_self._sketchViewModel._sketchPoints.length < 3) { if (callError) callError("\u70B9\u6570\u5C11\u4E8E3\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolygon); _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolyline); _self._sketchViewModel._createPolygon(); if (!_self._sketchViewModel._isRetainDrawPoint) _self._sketchViewModel._removePointEntitys(); _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler); _self._initMousePointerStyle(); _self._tooltipRemove(); let buttonDiv2 = document.getElementById("drawButtonDiv"); if (buttonDiv2) { document.body.removeChild(buttonDiv2); } }; } } else if (cPoints.length >= 3) { let area = _self._measureArea(_self._measureTempPoints, cPoints); if (area > 1e5) { _areaLabel = (area / 1e5).toFixed(2) + "km\xB2"; } else { _areaLabel = area.toFixed(2) + "m\xB2"; } } } }); } }, measureHeight: function(callError) { let _self = this; this._clear(this._isClear); this._setMousePointerStyle(); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236\u7EBF"); } else { this._tooltipInit("\u5355\u51FB\u5F00\u59CB\u7ED8\u5236\u7EBF"); } this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Height, { onAdded: function(cPoint) { if (_self._isRuntimeApp()) { _self._showTooltipMessage("\u518D\u6B21\u70B9\u51FB\u7ED3\u675F\u6D4B\u91CF"); } else { _self._tooltipSetText("\u518D\u6B21\u5355\u51FB\u7ED3\u675F\u6D4B\u91CF"); } }, onMoving: function(cPoints, centerPoint) { let height2 = _self._calculatePolylineAltitudeHeight(cPoints); _self._altitudeLabelPosition = centerPoint; _self._altitudeLabelText = height2; if (_self._altitudeDynamicLabel === void 0) { _self._createAltitudeDynamicLabel(); } }, onError: function(error) { if (callError) callError(error); }, onComplete: function(cPoints, centerPoint) { let height2 = _self._calculatePolylineAltitudeHeight(cPoints); _self._entities.remove(_self._altitudeDynamicLabel); _self._createLabel(centerPoint, height2); _self._initMousePointerStyle(); _self._tooltipRemove(); } }); }, measureTriangle: function(callError) { let _self = this; this._clear(this._isClear); this._setMousePointerStyle(); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236\u7EBF"); } else { this._tooltipInit("\u5355\u51FB\u5F00\u59CB\u7ED8\u5236\u7EBF"); } this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Triangle, { onAdded: function(cPoint) { if (_self._isRuntimeApp()) { _self._showTooltipMessage("\u518D\u6B21\u70B9\u51FB\u7ED3\u675F\u6D4B\u91CF"); } else { _self._tooltipSetText("\u518D\u6B21\u5355\u51FB\u7ED3\u675F\u6D4B\u91CF"); } }, onMoving: function(cPoint) { _self._tooltipSetText("\u518D\u6B21\u5355\u51FB\u7ED3\u675F\u6D4B\u91CF"); }, onError: function(error) { if (callError) callError(error); }, onComplete: function(positions) { _self._initMousePointerStyle(); _self._tooltipRemove(); let sPoints = [positions[0], positions[1]]; let sDistince = _self._measureSpaceDistance(sPoints); let hPoints = [positions[1], positions[2]]; let hDistince = _self._measureSpaceDistance(hPoints); let hePoints = [positions[2], positions[0]]; let height2 = _self._calculatePolylineAltitudeHeight(hePoints); _self._createLabel(positions[0], "\u659C\u8DDD:" + sDistince); _self._createLabel(positions[1], "\u5E73\u8DDD:" + hDistince); _self._createLabel(positions[2], "\u9AD8\u5EA6:" + height2); } }); } }); Object.assign(CommonTools.prototype, { queryByPoint: function(callComplete) { let _self = this; this._setMousePointerStyle(); this._clear(this._isClear); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u4F4D\u7F6E\u8FDB\u884C\u67E5\u8BE2"); } else { this._tooltipInit("\u5355\u51FB\u4F4D\u7F6E\u8FDB\u884C\u67E5\u8BE2"); } this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Point, { onComplete: function(cPoint, gPoint) { _self._initMousePointerStyle(); _self._tooltipRemove(); _self._createPoint(cPoint); let coordinates = gPoint.lng + "," + gPoint.lat; if (callComplete) callComplete(coordinates); } }); }, queryByMultiplePoint: function(callComplete) { let _self = this; this._setMousePointerStyle(); this._clear(this._isClear); this._tooltipInit("\u70B9\u51FB\u4F4D\u7F6E\u7ED8\u5236
\u5DE6\u952E\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); this._tempEntitys = []; this._sketchViewModel.sketchTools(SketchViewModel.SketchType.MultiplePoint, { onAdded: function(cPoint, gPoint) { let res = gPoint.lng.toFixed(6) + "," + gPoint.lat.toFixed(6); _self._tempEntitys.push(_self._createPoint(cPoint, res)); }, onUndo: function() { _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length - 1]); _self._tempEntitys.pop(); }, onComplete: function(cPoints, gPoints) { _self._initMousePointerStyle(); _self._tooltipRemove(); let res = []; for (let i2 = 0; i2 < gPoints.length; i2++) { res.push(gPoints[i2].lng); res.push(gPoints[i2].lat); } if (callComplete) callComplete(res); } }); }, queryByLine: function(callComplete, callError) { let _self = this; this._clear(this._isClear); this._setMousePointerStyle(); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236\u7EBF"); } else { this._tooltipInit("\u5355\u51FB\u5F00\u59CB\u7ED8\u5236\u7EBF"); } if (this._isRuntimeWeb()) { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Line, { onAdded: function(cPoints, gPoints) { }, onMoving: function(cPoint, scPoint) { _self._tooltipSetText("\u53F3\u952E\u5355\u51FB\u56DE\u9000
\u5DE6\u952E\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236\u5F00\u59CB\u67E5\u8BE2"); }, onError: function(error) { if (callError) callError(error); }, onComplete: function(cPoints, gPoints) { _self._initMousePointerStyle(); _self._tooltipRemove(); let coordinates = void 0; for (let i2 = 0; i2 < gPoints.length; i2++) { let point2 = gPoints[i2]; if (coordinates === void 0) coordinates = point2.lng + "," + point2.lat; else coordinates += "," + point2.lng + "," + point2.lat; } if (callComplete) callComplete(coordinates); } }); } else { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Line, { onAdded: function(cPoints, gPoints) { if (cPoints.length === 1) { _self._tooltipRemove(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv == null) { _self._createOperationMainDom(); document.getElementById("btnDrawBackout").onclick = () => { if (_self._sketchViewModel._sketchTempPoints.length > 2) { _self._sketchViewModel._sketchPoints.pop(); _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1); if (_self._sketchViewModel._isDrawPoint) { let lastPointEntity = _self._sketchViewModel._pointEntitys[_self._sketchViewModel._pointEntitys.length - 1]; _self._sketchViewModel._entities.remove(lastPointEntity); _self._sketchViewModel._pointEntitys.pop(); } } }; document.getElementById("btnDrawComplete").onclick = () => { if (_self._sketchViewModel._sketchPoints.length < 2) { if (callError) callError("\u70B9\u6570\u5C11\u4E8E\u4E24\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolyline); _self._sketchViewModel._createPolyline(); if (!_self._sketchViewModel._isRetainDrawPoint) _self._sketchViewModel._removePointEntitys(); _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler); _self._initMousePointerStyle(); _self._tooltipRemove(); let coordinates = void 0; for (let i2 = 0; i2 < gPoints.length; i2++) { let point2 = gPoints[i2]; if (coordinates === void 0) coordinates = point2.lng + "," + point2.lat; else coordinates += "," + point2.lng + "," + point2.lat; } let buttonDiv2 = document.getElementById("drawButtonDiv"); if (buttonDiv2) { document.body.removeChild(buttonDiv2); } if (callComplete) callComplete(coordinates); }; } } } }); } }, queryByPolygon: function(callComplete, callError) { let _self = this; this._clear(this._isClear); this._setMousePointerStyle(); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236\u533A\u57DF"); } else { this._tooltipInit("\u5355\u51FB\u5F00\u59CB\u7ED8\u5236\u533A\u57DF"); } if (this._isRuntimeWeb()) { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Polygon, { onMoving: function(cPoint, scPoint) { _self._tooltipSetText("\u53F3\u952E\u5355\u51FB\u56DE\u9000
\u5DE6\u952E\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236\u5F00\u59CB\u67E5\u8BE2"); }, onError: function(error) { if (callError) callError(error); }, onComplete: function(cPoints, gPoints) { _self._initMousePointerStyle(); _self._tooltipRemove(); let coordinates = void 0; for (let i2 = 0; i2 < gPoints.length; i2++) { let point2 = gPoints[i2]; if (coordinates === void 0) coordinates = point2.lng + "," + point2.lat; else coordinates += "," + point2.lng + "," + point2.lat; } coordinates += "," + gPoints[0].lng + "," + gPoints[0].lat; if (callComplete) callComplete(coordinates); } }); } else { this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Polygon, { onAdded: function(cPoints, gPoints) { if (cPoints.length === 1) { _self._tooltipRemove(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv == null) { _self._createOperationMainDom(); document.getElementById("btnDrawBackout").onclick = () => { if (_self._sketchViewModel._sketchTempPoints.length > 2) { _self._sketchViewModel._sketchPoints.pop(); _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1); if (_self._sketchViewModel._isDrawPoint) { let lastPointEntity = _self._sketchViewModel._pointEntitys[_self._sketchViewModel._pointEntitys.length - 1]; _self._entities.remove(lastPointEntity); _self._sketchViewModel._pointEntitys.pop(); } } }; document.getElementById("btnDrawComplete").onclick = () => { if (_self._sketchViewModel._sketchPoints.length < 3) { if (callError) callError("\u70B9\u6570\u5C11\u4E8E3\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolygon); _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolyline); _self._sketchViewModel._createPolygon(); if (!_self._sketchViewModel._isRetainDrawPoint) _self._sketchViewModel._removePointEntitys(); _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler); _self._initMousePointerStyle(); _self._tooltipRemove(); let coordinates = void 0; for (let i2 = 0; i2 < gPoints.length; i2++) { let point2 = gPoints[i2]; if (coordinates === void 0) coordinates = point2.lng + "," + point2.lat; else coordinates += "," + point2.lng + "," + point2.lat; } coordinates += "," + gPoints[0].lng + "," + gPoints[0].lat; let buttonDiv2 = document.getElementById("drawButtonDiv"); if (buttonDiv2) { document.body.removeChild(buttonDiv2); } if (callComplete) callComplete(coordinates); }; } } } }); } }, queryByCircle: function(callComplete) { let _self = this; this._clear(this._isClear); this._setMousePointerStyle(); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236\u5706"); } else { this._tooltipInit("\u5355\u51FB\u5F00\u59CB\u7ED8\u5236\u5706"); } this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Circle, { onAdded: function(center2) { if (_self._isRuntimeApp()) { _self._showTooltipMessage("\u518D\u6B21\u70B9\u51FB\u7ED3\u675F\u7ED8\u5236"); } else { _self._tooltipInit("\u518D\u6B21\u5355\u51FB\u7ED3\u675F\u7ED8\u5236"); } }, onComplete: function(center2, radius) { _self._initMousePointerStyle(); _self._tooltipRemove(); if (callComplete) callComplete(center2.lng + "," + center2.lat, radius); } }); }, queryByRectangle: function(callComplete) { let _self = this; this._clear(this._isClear); this._setMousePointerStyle(); if (this._isRuntimeApp()) { this._showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236\u77E9\u5F62"); } else { this._tooltipInit("\u5355\u51FB\u5F00\u59CB\u7ED8\u5236\u77E9\u5F62"); } this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Rectangle, { onAdded: function(center2) { if (_self._isRuntimeApp()) { _self._showTooltipMessage("\u518D\u6B21\u70B9\u51FB\u7ED3\u675F\u7ED8\u5236"); } else { _self._tooltipInit("\u518D\u6B21\u5355\u51FB\u7ED3\u675F\u7ED8\u5236"); } }, onComplete: function(gPoints) { _self._initMousePointerStyle(); _self._tooltipRemove(); let coordinates = void 0; for (let i2 = 0; i2 < gPoints.length; i2++) { let point2 = gPoints[i2]; if (coordinates === void 0) coordinates = point2.lng + "," + point2.lat; else coordinates += "," + point2.lng + "," + point2.lat; } if (callComplete) callComplete(coordinates); } }); } }); Object.assign(CommonTools.prototype, { drawPolygonBody: function(callComplete) { let _self = this; this._clear(this._isClear); this._setMousePointerStyle(); this._tooltipInit("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); this._sketchViewModel.sketchTools(SketchViewModel.SketchType.PolygonBody, { onAdded: function(cPoints, gPoints) { if (cPoints.length === 0) { _self._tooltipInit("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } else if (cPoints.length < 3) { _self._tooltipInit("\u53F3\u952E\u5355\u51FB\u56DE\u9000"); } else { _self._tooltipInit("\u53F3\u952E\u5355\u51FB\u56DE\u9000
\u5DE6\u952E\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); } }, onUndo: function(cPoints) { if (cPoints.length === 0) { _self._tooltipInit("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } else if (cPoints.length < 3) { _self._tooltipInit("\u53F3\u952E\u5355\u51FB\u56DE\u9000"); } else { _self._tooltipInit("\u53F3\u952E\u5355\u51FB\u56DE\u9000
\u5DE6\u952E\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); } }, onComplete: function(cPoints, gPoints) { _self._initMousePointerStyle(); _self._tooltipRemove(); if (callComplete) callComplete(); } }); }, drawPointFeacture: function(points2, options2) { this._sketchViewModel.sketchDrawFeacture(points2, SketchViewModel.SketchType.DrawPoint, options2); }, drawMultiplePointFeacture: function(points2, options2) { this._sketchViewModel.sketchDrawFeacture(points2, SketchViewModel.SketchType.DrawMultiplePoint, options2); }, drawPolylineFeacture: function(points2, options2) { this._sketchViewModel.sketchDrawFeacture(points2, SketchViewModel.SketchType.DrawPolyline, options2); }, drawPolygonFeacture: function(points2, options2) { this._sketchViewModel.sketchDrawFeacture(points2, SketchViewModel.SketchType.DrawPolygon, options2); } }); Object.assign(CommonTools.prototype, { tooltipInit: function(text) { this._tooltipInit(text); }, tooltipRemove: function() { this._tooltipRemove(); }, tooltipSetText: function(text) { this._tooltipSetText(text); } }); Object.assign(CommonTools.prototype, { pickPolygonBody: function(callComplete) { this._sketchViewModel.sketchPick(function(options2) { if (options2 === void 0) { if (callComplete) callComplete(void 0); } else { if (callComplete) callComplete({ color: options2.color, height: options2.height }); } }); }, setPolygonBody: function(options2) { this._sketchViewModel.sketchEditPickPolygonBody({ color: options2.color, height: options2.height, onComplete: options2.onComplete }); }, removePolygonBody: function(onComplete) { this._sketchViewModel.sketchRemovePickPolygonBody(onComplete); } }); CommonTools.RuntimeEnvironment = Object.freeze({ App: "app", Web: "web" }); const composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => { const handleEvent = (event2) => { const shouldPrevent = theirsHandler == null ? void 0 : theirsHandler(event2); if (checkForDefaultPrevented === false || !shouldPrevent) { return oursHandler == null ? void 0 : oursHandler(event2); } }; return handleEvent; }; var _a; const isClient = typeof window !== "undefined"; const isString$1 = (val) => typeof val === "string"; const noop$3 = () => { }; const isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent); function resolveUnref(r2) { return typeof r2 === "function" ? r2() : unref(r2); } function identity(arg) { return arg; } function tryOnScopeDispose(fn2) { if (getCurrentScope()) { onScopeDispose(fn2); return true; } return false; } function tryOnMounted(fn2, sync = true) { if (getCurrentInstance()) onMounted(fn2); else if (sync) fn2(); else nextTick(fn2); } function useTimeoutFn(cb, interval, options2 = {}) { const { immediate = true } = options2; const isPending = ref(false); let timer = null; function clear() { if (timer) { clearTimeout(timer); timer = null; } } function stop() { isPending.value = false; clear(); } function start2(...args) { clear(); isPending.value = true; timer = setTimeout(() => { isPending.value = false; timer = null; cb(...args); }, resolveUnref(interval)); } if (immediate) { isPending.value = true; if (isClient) start2(); } tryOnScopeDispose(stop); return { isPending: readonly(isPending), start: start2, stop }; } function unrefElement(elRef) { var _a2; const plain = resolveUnref(elRef); return (_a2 = plain == null ? void 0 : plain.$el) != null ? _a2 : plain; } const defaultWindow = isClient ? window : void 0; function useEventListener(...args) { let target; let events; let listeners; let options2; if (isString$1(args[0]) || Array.isArray(args[0])) { [events, listeners, options2] = args; target = defaultWindow; } else { [target, events, listeners, options2] = args; } if (!target) return noop$3; if (!Array.isArray(events)) events = [events]; if (!Array.isArray(listeners)) listeners = [listeners]; const cleanups = []; const cleanup = () => { cleanups.forEach((fn2) => fn2()); cleanups.length = 0; }; const register = (el, event2, listener, options22) => { el.addEventListener(event2, listener, options22); return () => el.removeEventListener(event2, listener, options22); }; const stopWatch = watch(() => [unrefElement(target), resolveUnref(options2)], ([el, options22]) => { cleanup(); if (!el) return; cleanups.push(...events.flatMap((event2) => { return listeners.map((listener) => register(el, event2, listener, options22)); })); }, { immediate: true, flush: "post" }); const stop = () => { stopWatch(); cleanup(); }; tryOnScopeDispose(stop); return stop; } let _iOSWorkaround = false; function onClickOutside(target, handler, options2 = {}) { const { window: window2 = defaultWindow, ignore = [], capture = true, detectIframe = false } = options2; if (!window2) return; if (isIOS && !_iOSWorkaround) { _iOSWorkaround = true; Array.from(window2.document.body.children).forEach((el) => el.addEventListener("click", noop$3)); } let shouldListen = true; const shouldIgnore = (event2) => { return ignore.some((target2) => { if (typeof target2 === "string") { return Array.from(window2.document.querySelectorAll(target2)).some((el) => el === event2.target || event2.composedPath().includes(el)); } else { const el = unrefElement(target2); return el && (event2.target === el || event2.composedPath().includes(el)); } }); }; const listener = (event2) => { const el = unrefElement(target); if (!el || el === event2.target || event2.composedPath().includes(el)) return; if (event2.detail === 0) shouldListen = !shouldIgnore(event2); if (!shouldListen) { shouldListen = true; return; } handler(event2); }; const cleanup = [ useEventListener(window2, "click", listener, { passive: true, capture }), useEventListener(window2, "pointerdown", (e) => { const el = unrefElement(target); if (el) shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e); }, { passive: true }), detectIframe && useEventListener(window2, "blur", (event2) => { var _a2; const el = unrefElement(target); if (((_a2 = window2.document.activeElement) == null ? void 0 : _a2.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window2.document.activeElement))) handler(event2); }) ].filter(Boolean); const stop = () => cleanup.forEach((fn2) => fn2()); return stop; } function useSupported(callback2, sync = false) { const isSupported = ref(); const update = () => isSupported.value = Boolean(callback2()); update(); tryOnMounted(update, sync); return isSupported; } const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; const globalKey = "__vueuse_ssr_handlers__"; _global[globalKey] = _global[globalKey] || {}; _global[globalKey]; var __getOwnPropSymbols$g = Object.getOwnPropertySymbols; var __hasOwnProp$g = Object.prototype.hasOwnProperty; var __propIsEnum$g = Object.prototype.propertyIsEnumerable; var __objRest$2 = (source, exclude) => { var target = {}; for (var prop in source) if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0) target[prop] = source[prop]; if (source != null && __getOwnPropSymbols$g) for (var prop of __getOwnPropSymbols$g(source)) { if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop)) target[prop] = source[prop]; } return target; }; function useResizeObserver(target, callback2, options2 = {}) { const _a2 = options2, { window: window2 = defaultWindow } = _a2, observerOptions = __objRest$2(_a2, ["window"]); let observer; const isSupported = useSupported(() => window2 && "ResizeObserver" in window2); const cleanup = () => { if (observer) { observer.disconnect(); observer = void 0; } }; const stopWatch = watch(() => unrefElement(target), (el) => { cleanup(); if (isSupported.value && window2 && el) { observer = new ResizeObserver(callback2); observer.observe(el, observerOptions); } }, { immediate: true, flush: "post" }); const stop = () => { cleanup(); stopWatch(); }; tryOnScopeDispose(stop); return { isSupported, stop }; } var SwipeDirection; (function(SwipeDirection2) { SwipeDirection2["UP"] = "UP"; SwipeDirection2["RIGHT"] = "RIGHT"; SwipeDirection2["DOWN"] = "DOWN"; SwipeDirection2["LEFT"] = "LEFT"; SwipeDirection2["NONE"] = "NONE"; })(SwipeDirection || (SwipeDirection = {})); var __defProp2 = Object.defineProperty; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp2(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp2(a, prop, b[prop]); } return a; }; const _TransitionPresets = { easeInSine: [0.12, 0, 0.39, 0], easeOutSine: [0.61, 1, 0.88, 1], easeInOutSine: [0.37, 0, 0.63, 1], easeInQuad: [0.11, 0, 0.5, 0], easeOutQuad: [0.5, 1, 0.89, 1], easeInOutQuad: [0.45, 0, 0.55, 1], easeInCubic: [0.32, 0, 0.67, 0], easeOutCubic: [0.33, 1, 0.68, 1], easeInOutCubic: [0.65, 0, 0.35, 1], easeInQuart: [0.5, 0, 0.75, 0], easeOutQuart: [0.25, 1, 0.5, 1], easeInOutQuart: [0.76, 0, 0.24, 1], easeInQuint: [0.64, 0, 0.78, 0], easeOutQuint: [0.22, 1, 0.36, 1], easeInOutQuint: [0.83, 0, 0.17, 1], easeInExpo: [0.7, 0, 0.84, 0], easeOutExpo: [0.16, 1, 0.3, 1], easeInOutExpo: [0.87, 0, 0.13, 1], easeInCirc: [0.55, 0, 1, 0.45], easeOutCirc: [0, 0.55, 0.45, 1], easeInOutCirc: [0.85, 0, 0.15, 1], easeInBack: [0.36, 0, 0.66, -0.56], easeOutBack: [0.34, 1.56, 0.64, 1], easeInOutBack: [0.68, -0.6, 0.32, 1.6] }; __spreadValues({ linear: identity }, _TransitionPresets); const isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent); const getClientXY = (event2) => { let clientX; let clientY; if (event2.type === "touchend") { clientY = event2.changedTouches[0].clientY; clientX = event2.changedTouches[0].clientX; } else if (event2.type.startsWith("touch")) { clientY = event2.touches[0].clientY; clientX = event2.touches[0].clientX; } else { clientY = event2.clientY; clientX = event2.clientX; } return { clientX, clientY }; }; const NOOP = () => { }; const hasOwnProperty$9 = Object.prototype.hasOwnProperty; const hasOwn = (val, key) => hasOwnProperty$9.call(val, key); const isArray$2 = Array.isArray; const isFunction$3 = (val) => typeof val === "function"; const isString = (val) => typeof val === "string"; const isObject$5 = (val) => val !== null && typeof val === "object"; const isPromise$2 = (val) => { return isObject$5(val) && isFunction$3(val.then) && isFunction$3(val.catch); }; const objectToString$1 = Object.prototype.toString; const toTypeString = (value) => objectToString$1.call(value); const toRawType = (value) => { return toTypeString(value).slice(8, -1); }; const cacheStringFunction = (fn2) => { const cache = /* @__PURE__ */ Object.create(null); return (str) => { const hit = cache[str]; return hit || (cache[str] = fn2(str)); }; }; const camelizeRE = /-(\w)/g; const camelize = cacheStringFunction((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); }); var freeGlobal = typeof global == "object" && global && global.Object === Object && global; var freeGlobal$1 = freeGlobal; var freeSelf = typeof self == "object" && self && self.Object === Object && self; var root = freeGlobal$1 || freeSelf || Function("return this")(); var root$1 = root; var Symbol$1 = root$1.Symbol; var Symbol$2 = Symbol$1; var objectProto$b = Object.prototype; var hasOwnProperty$8 = objectProto$b.hasOwnProperty; var nativeObjectToString$1 = objectProto$b.toString; var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0; function getRawTag(value) { var isOwn = hasOwnProperty$8.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { value[symToStringTag$1] = void 0; var unmasked = true; } catch (e) { } var result = nativeObjectToString$1.call(value); if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; } else { delete value[symToStringTag$1]; } } return result; } var objectProto$a = Object.prototype; var nativeObjectToString = objectProto$a.toString; function objectToString(value) { return nativeObjectToString.call(value); } var nullTag = "[object Null]", undefinedTag = "[object Undefined]"; var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : void 0; function baseGetTag(value) { if (value == null) { return value === void 0 ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } function isObjectLike(value) { return value != null && typeof value == "object"; } var symbolTag$1 = "[object Symbol]"; function isSymbol(value) { return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$1; } function arrayMap(array, iteratee) { var index2 = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index2 < length) { result[index2] = iteratee(array[index2], index2, array); } return result; } var isArray = Array.isArray; var isArray$1 = isArray; var INFINITY$1 = 1 / 0; var symbolProto$1 = Symbol$2 ? Symbol$2.prototype : void 0, symbolToString = symbolProto$1 ? symbolProto$1.toString : void 0; function baseToString(value) { if (typeof value == "string") { return value; } if (isArray$1(value)) { return arrayMap(value, baseToString) + ""; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ""; } var result = value + ""; return result == "0" && 1 / value == -INFINITY$1 ? "-0" : result; } var reWhitespace = /\s/; function trimmedEndIndex(string) { var index2 = string.length; while (index2-- && reWhitespace.test(string.charAt(index2))) { } return index2; } var reTrimStart = /^\s+/; function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string; } function isObject$4(value) { var type2 = typeof value; return value != null && (type2 == "object" || type2 == "function"); } var NAN = 0 / 0; var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; var reIsBinary = /^0b[01]+$/i; var reIsOctal = /^0o[0-7]+$/i; var freeParseInt = parseInt; function toNumber(value) { if (typeof value == "number") { return value; } if (isSymbol(value)) { return NAN; } if (isObject$4(value)) { var other = typeof value.valueOf == "function" ? value.valueOf() : value; value = isObject$4(other) ? other + "" : other; } if (typeof value != "string") { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; } var asyncTag = "[object AsyncFunction]", funcTag$1 = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]"; function isFunction$2(value) { if (!isObject$4(value)) { return false; } var tag = baseGetTag(value); return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; } var coreJsData = root$1["__core-js_shared__"]; var coreJsData$1 = coreJsData; var maskSrcKey = function() { var uid = /[^.]+$/.exec(coreJsData$1 && coreJsData$1.keys && coreJsData$1.keys.IE_PROTO || ""); return uid ? "Symbol(src)_1." + uid : ""; }(); function isMasked(func) { return !!maskSrcKey && maskSrcKey in func; } var funcProto$1 = Function.prototype; var funcToString$1 = funcProto$1.toString; function toSource(func) { if (func != null) { try { return funcToString$1.call(func); } catch (e) { } try { return func + ""; } catch (e) { } } return ""; } var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; var reIsHostCtor = /^\[object .+?Constructor\]$/; var funcProto = Function.prototype, objectProto$9 = Object.prototype; var funcToString = funcProto.toString; var hasOwnProperty$7 = objectProto$9.hasOwnProperty; var reIsNative = RegExp( "^" + funcToString.call(hasOwnProperty$7).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ); function baseIsNative(value) { if (!isObject$4(value) || isMasked(value)) { return false; } var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } function getValue(object, key) { return object == null ? void 0 : object[key]; } function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : void 0; } var WeakMap$1 = getNative(root$1, "WeakMap"); var WeakMap$2 = WeakMap$1; var MAX_SAFE_INTEGER$1 = 9007199254740991; var reIsUint = /^(?:0|[1-9]\d*)$/; function isIndex(value, length) { var type2 = typeof value; length = length == null ? MAX_SAFE_INTEGER$1 : length; return !!length && (type2 == "number" || type2 != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); } function eq(value, other) { return value === other || value !== value && other !== other; } var MAX_SAFE_INTEGER = 9007199254740991; function isLength(value) { return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction$2(value); } var objectProto$8 = Object.prototype; function isPrototype(value) { var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$8; return value === proto; } function baseTimes(n, iteratee) { var index2 = -1, result = Array(n); while (++index2 < n) { result[index2] = iteratee(index2); } return result; } var argsTag$2 = "[object Arguments]"; function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag$2; } var objectProto$7 = Object.prototype; var hasOwnProperty$6 = objectProto$7.hasOwnProperty; var propertyIsEnumerable$1 = objectProto$7.propertyIsEnumerable; var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty$6.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee"); }; var isArguments$1 = isArguments; function stubFalse() { return false; } var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module; var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; var Buffer$1 = moduleExports$1 ? root$1.Buffer : void 0; var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : void 0; var isBuffer = nativeIsBuffer || stubFalse; var isBuffer$1 = isBuffer; var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", errorTag$1 = "[object Error]", funcTag = "[object Function]", mapTag$2 = "[object Map]", numberTag$1 = "[object Number]", objectTag$2 = "[object Object]", regexpTag$1 = "[object RegExp]", setTag$2 = "[object Set]", stringTag$1 = "[object String]", weakMapTag$1 = "[object WeakMap]"; var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$2 = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$2] = typedArrayTags[regexpTag$1] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = typedArrayTags[weakMapTag$1] = false; function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } function baseUnary(func) { return function(value) { return func(value); }; } var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; var moduleExports = freeModule && freeModule.exports === freeExports; var freeProcess = moduleExports && freeGlobal$1.process; var nodeUtil = function() { try { var types = freeModule && freeModule.require && freeModule.require("util").types; if (types) { return types; } return freeProcess && freeProcess.binding && freeProcess.binding("util"); } catch (e) { } }(); var nodeUtil$1 = nodeUtil; var nodeIsTypedArray = nodeUtil$1 && nodeUtil$1.isTypedArray; var isTypedArray$2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; var isTypedArray$3 = isTypedArray$2; var objectProto$6 = Object.prototype; var hasOwnProperty$5 = objectProto$6.hasOwnProperty; function arrayLikeKeys(value, inherited) { var isArr = isArray$1(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$3(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty$5.call(value, key)) && !(skipIndexes && (key == "length" || isBuff && (key == "offset" || key == "parent") || isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || isIndex(key, length)))) { result.push(key); } } return result; } function overArg(func, transform3) { return function(arg) { return func(transform3(arg)); }; } var nativeKeys = overArg(Object.keys, Object); var nativeKeys$1 = nativeKeys; var objectProto$5 = Object.prototype; var hasOwnProperty$4 = objectProto$5.hasOwnProperty; function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys$1(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty$4.call(object, key) && key != "constructor") { result.push(key); } } return result; } function keys$2(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; function isKey(value, object) { if (isArray$1(value)) { return false; } var type2 = typeof value; if (type2 == "number" || type2 == "symbol" || type2 == "boolean" || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); } var nativeCreate = getNative(Object, "create"); var nativeCreate$1 = nativeCreate; function hashClear() { this.__data__ = nativeCreate$1 ? nativeCreate$1(null) : {}; this.size = 0; } function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } var HASH_UNDEFINED$2 = "__lodash_hash_undefined__"; var objectProto$4 = Object.prototype; var hasOwnProperty$3 = objectProto$4.hasOwnProperty; function hashGet(key) { var data = this.__data__; if (nativeCreate$1) { var result = data[key]; return result === HASH_UNDEFINED$2 ? void 0 : result; } return hasOwnProperty$3.call(data, key) ? data[key] : void 0; } var objectProto$3 = Object.prototype; var hasOwnProperty$2 = objectProto$3.hasOwnProperty; function hashHas(key) { var data = this.__data__; return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$2.call(data, key); } var HASH_UNDEFINED$1 = "__lodash_hash_undefined__"; function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = nativeCreate$1 && value === void 0 ? HASH_UNDEFINED$1 : value; return this; } function Hash(entries) { var index2 = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index2 < length) { var entry = entries[index2]; this.set(entry[0], entry[1]); } } Hash.prototype.clear = hashClear; Hash.prototype["delete"] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; function listCacheClear() { this.__data__ = []; this.size = 0; } function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } var arrayProto = Array.prototype; var splice = arrayProto.splice; function listCacheDelete(key) { var data = this.__data__, index2 = assocIndexOf(data, key); if (index2 < 0) { return false; } var lastIndex = data.length - 1; if (index2 == lastIndex) { data.pop(); } else { splice.call(data, index2, 1); } --this.size; return true; } function listCacheGet(key) { var data = this.__data__, index2 = assocIndexOf(data, key); return index2 < 0 ? void 0 : data[index2][1]; } function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } function listCacheSet(key, value) { var data = this.__data__, index2 = assocIndexOf(data, key); if (index2 < 0) { ++this.size; data.push([key, value]); } else { data[index2][1] = value; } return this; } function ListCache(entries) { var index2 = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index2 < length) { var entry = entries[index2]; this.set(entry[0], entry[1]); } } ListCache.prototype.clear = listCacheClear; ListCache.prototype["delete"] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; var Map$2 = getNative(root$1, "Map"); var Map$3 = Map$2; function mapCacheClear() { this.size = 0; this.__data__ = { "hash": new Hash(), "map": new (Map$3 || ListCache)(), "string": new Hash() }; } function isKeyable(value) { var type2 = typeof value; return type2 == "string" || type2 == "number" || type2 == "symbol" || type2 == "boolean" ? value !== "__proto__" : value === null; } function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; } function mapCacheDelete(key) { var result = getMapData(this, key)["delete"](key); this.size -= result ? 1 : 0; return result; } function mapCacheGet(key) { return getMapData(this, key).get(key); } function mapCacheHas(key) { return getMapData(this, key).has(key); } function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } function MapCache(entries) { var index2 = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index2 < length) { var entry = entries[index2]; this.set(entry[0], entry[1]); } } MapCache.prototype.clear = mapCacheClear; MapCache.prototype["delete"] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; var FUNC_ERROR_TEXT$1 = "Expected a function"; function memoize(func, resolver) { if (typeof func != "function" || resolver != null && typeof resolver != "function") { throw new TypeError(FUNC_ERROR_TEXT$1); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || MapCache)(); return memoized; } memoize.Cache = MapCache; var MAX_MEMOIZE_SIZE = 500; function memoizeCapped(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; var reEscapeChar = /\\(\\)?/g; var stringToPath = memoizeCapped(function(string) { var result = []; if (string.charCodeAt(0) === 46) { result.push(""); } string.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match); }); return result; }); var stringToPath$1 = stringToPath; function toString$3(value) { return value == null ? "" : baseToString(value); } function castPath(value, object) { if (isArray$1(value)) { return value; } return isKey(value, object) ? [value] : stringToPath$1(toString$3(value)); } var INFINITY = 1 / 0; function toKey(value) { if (typeof value == "string" || isSymbol(value)) { return value; } var result = value + ""; return result == "0" && 1 / value == -INFINITY ? "-0" : result; } function baseGet(object, path) { path = castPath(path, object); var index2 = 0, length = path.length; while (object != null && index2 < length) { object = object[toKey(path[index2++])]; } return index2 && index2 == length ? object : void 0; } function get$2(object, path, defaultValue2) { var result = object == null ? void 0 : baseGet(object, path); return result === void 0 ? defaultValue2 : result; } function arrayPush(array, values3) { var index2 = -1, length = values3.length, offset = array.length; while (++index2 < length) { array[offset + index2] = values3[index2]; } return array; } function castArray() { if (!arguments.length) { return []; } var value = arguments[0]; return isArray$1(value) ? value : [value]; } function stackClear() { this.__data__ = new ListCache(); this.size = 0; } function stackDelete(key) { var data = this.__data__, result = data["delete"](key); this.size = data.size; return result; } function stackGet(key) { return this.__data__.get(key); } function stackHas(key) { return this.__data__.has(key); } var LARGE_ARRAY_SIZE = 200; function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map$3 || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } Stack.prototype.clear = stackClear; Stack.prototype["delete"] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; function arrayFilter(array, predicate) { var index2 = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index2 < length) { var value = array[index2]; if (predicate(value, index2, array)) { result[resIndex++] = value; } } return result; } function stubArray() { return []; } var objectProto$2 = Object.prototype; var propertyIsEnumerable = objectProto$2.propertyIsEnumerable; var nativeGetSymbols = Object.getOwnPropertySymbols; var getSymbols = !nativeGetSymbols ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; var getSymbols$1 = getSymbols; function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object)); } function getAllKeys(object) { return baseGetAllKeys(object, keys$2, getSymbols$1); } var DataView$1 = getNative(root$1, "DataView"); var DataView$2 = DataView$1; var Promise$1 = getNative(root$1, "Promise"); var Promise$2 = Promise$1; var Set$2 = getNative(root$1, "Set"); var Set$3 = Set$2; var mapTag$1 = "[object Map]", objectTag$1 = "[object Object]", promiseTag = "[object Promise]", setTag$1 = "[object Set]", weakMapTag = "[object WeakMap]"; var dataViewTag$1 = "[object DataView]"; var dataViewCtorString = toSource(DataView$2), mapCtorString = toSource(Map$3), promiseCtorString = toSource(Promise$2), setCtorString = toSource(Set$3), weakMapCtorString = toSource(WeakMap$2); var getTag = baseGetTag; if (DataView$2 && getTag(new DataView$2(new ArrayBuffer(1))) != dataViewTag$1 || Map$3 && getTag(new Map$3()) != mapTag$1 || Promise$2 && getTag(Promise$2.resolve()) != promiseTag || Set$3 && getTag(new Set$3()) != setTag$1 || WeakMap$2 && getTag(new WeakMap$2()) != weakMapTag) { getTag = function(value) { var result = baseGetTag(value), Ctor = result == objectTag$1 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag$1; case mapCtorString: return mapTag$1; case promiseCtorString: return promiseTag; case setCtorString: return setTag$1; case weakMapCtorString: return weakMapTag; } } return result; }; } var getTag$1 = getTag; var Uint8Array$1 = root$1.Uint8Array; var Uint8Array$2 = Uint8Array$1; var HASH_UNDEFINED = "__lodash_hash_undefined__"; function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } function setCacheHas(value) { return this.__data__.has(value); } function SetCache(values3) { var index2 = -1, length = values3 == null ? 0 : values3.length; this.__data__ = new MapCache(); while (++index2 < length) { this.add(values3[index2]); } } SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; function arraySome(array, predicate) { var index2 = -1, length = array == null ? 0 : array.length; while (++index2 < length) { if (predicate(array[index2], index2, array)) { return true; } } return false; } function cacheHas(cache, key) { return cache.has(key); } var COMPARE_PARTIAL_FLAG$3 = 1, COMPARE_UNORDERED_FLAG$1 = 2; function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$1 ? new SetCache() : void 0; stack.set(array, other); stack.set(other, array); while (++index2 < arrLength) { var arrValue = array[index2], othValue = other[index2]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index2, other, array, stack) : customizer(arrValue, othValue, index2, array, other, stack); } if (compared !== void 0) { if (compared) { continue; } result = false; break; } if (seen) { if (!arraySome(other, function(othValue2, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { result = false; break; } } stack["delete"](array); stack["delete"](other); return result; } function mapToArray(map) { var index2 = -1, result = Array(map.size); map.forEach(function(value, key) { result[++index2] = [key, value]; }); return result; } function setToArray(set4) { var index2 = -1, result = Array(set4.size); set4.forEach(function(value) { result[++index2] = value; }); return result; } var COMPARE_PARTIAL_FLAG$2 = 1, COMPARE_UNORDERED_FLAG = 2; var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag = "[object Map]", numberTag = "[object Number]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]"; var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]"; var symbolProto = Symbol$2 ? Symbol$2.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$2(object), new Uint8Array$2(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: return object == other + ""; case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG; stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack["delete"](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } var COMPARE_PARTIAL_FLAG$1 = 1; var objectProto$1 = Object.prototype; var hasOwnProperty$1 = objectProto$1.hasOwnProperty; function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index2 = objLength; while (index2--) { var key = objProps[index2]; if (!(isPartial ? key in other : hasOwnProperty$1.call(other, key))) { return false; } } var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index2 < objLength) { key = objProps[index2]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { result = false; break; } skipCtor || (skipCtor = key == "constructor"); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { result = false; } } stack["delete"](object); stack["delete"](other); return result; } var COMPARE_PARTIAL_FLAG = 1; var argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]"; var objectProto = Object.prototype; var hasOwnProperty = objectProto.hasOwnProperty; function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray$1(object), othIsArr = isArray$1(other), objTag = objIsArr ? arrayTag : getTag$1(object), othTag = othIsArr ? arrayTag : getTag$1(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer$1(object)) { if (!isBuffer$1(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack()); return objIsArr || isTypedArray$3(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__"); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack()); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack()); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } var now = function() { return root$1.Date.now(); }; var now$1 = now; var FUNC_ERROR_TEXT = "Expected a function"; var nativeMax = Math.max, nativeMin = Math.min; function debounce$2(func, wait, options2) { var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT); } wait = toNumber(wait) || 0; if (isObject$4(options2)) { leading = !!options2.leading; maxing = "maxWait" in options2; maxWait = maxing ? nativeMax(toNumber(options2.maxWait) || 0, wait) : maxWait; trailing = "trailing" in options2 ? !!options2.trailing : trailing; } function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = void 0; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } function leadingEdge(time) { lastInvokeTime = time; timerId = setTimeout(timerExpired, wait); return leading ? invokeFunc(time) : result; } function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; } function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; } function timerExpired() { var time = now$1(); if (shouldInvoke(time)) { return trailingEdge(time); } timerId = setTimeout(timerExpired, remainingWait(time)); } function trailingEdge(time) { timerId = void 0; if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = void 0; return result; } function cancel() { if (timerId !== void 0) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = void 0; } function flush() { return timerId === void 0 ? result : trailingEdge(now$1()); } function debounced() { var time = now$1(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === void 0) { return leadingEdge(lastCallTime); } if (maxing) { clearTimeout(timerId); timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === void 0) { timerId = setTimeout(timerExpired, wait); } return result; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } function fromPairs(pairs) { var index2 = -1, length = pairs == null ? 0 : pairs.length, result = {}; while (++index2 < length) { var pair = pairs[index2]; result[pair[0]] = pair[1]; } return result; } function isEqual(value, other) { return baseIsEqual(value, other); } function isNil(value) { return value == null; } function isUndefined$1(value) { return value === void 0; } const isUndefined = (val) => val === void 0; const isBoolean = (val) => typeof val === "boolean"; const isNumber = (val) => typeof val === "number"; const isElement = (e) => { if (typeof Element === "undefined") return false; return e instanceof Element; }; const isStringNumber = (val) => { if (!isString(val)) { return false; } return !Number.isNaN(Number(val)); }; const escapeStringRegexp = (string = "") => string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); const keysOf = (arr) => Object.keys(arr); class ElementPlusError extends Error { constructor(m) { super(m); this.name = "ElementPlusError"; } } function throwError(scope, m) { throw new ElementPlusError(`[${scope}] ${m}`); } function debugWarn(scope, message) { } const classNameToArray = (cls = "") => cls.split(" ").filter((item) => !!item.trim()); const hasClass$2 = (el, cls) => { if (!el || !cls) return false; if (cls.includes(" ")) throw new Error("className should not contain space."); return el.classList.contains(cls); }; const addClass$2 = (el, cls) => { if (!el || !cls.trim()) return; el.classList.add(...classNameToArray(cls)); }; const removeClass$2 = (el, cls) => { if (!el || !cls.trim()) return; el.classList.remove(...classNameToArray(cls)); }; const getStyle = (element, styleName) => { var _a2; if (!isClient || !element || !styleName) return ""; let key = camelize(styleName); if (key === "float") key = "cssFloat"; try { const style = element.style[key]; if (style) return style; const computed2 = (_a2 = document.defaultView) == null ? void 0 : _a2.getComputedStyle(element, ""); return computed2 ? computed2[key] : ""; } catch (e) { return element.style[key]; } }; function addUnit(value, defaultUnit = "px") { if (!value) return ""; if (isNumber(value) || isStringNumber(value)) { return `${value}${defaultUnit}`; } else if (isString(value)) { return value; } } let scrollBarWidth; const getScrollBarWidth = (namespace) => { var _a2; if (!isClient) return 0; if (scrollBarWidth !== void 0) return scrollBarWidth; const outer = document.createElement("div"); outer.className = `${namespace}-scrollbar__wrap`; outer.style.visibility = "hidden"; outer.style.width = "100px"; outer.style.position = "absolute"; outer.style.top = "-9999px"; document.body.appendChild(outer); const widthNoScroll = outer.offsetWidth; outer.style.overflow = "scroll"; const inner = document.createElement("div"); inner.style.width = "100%"; outer.appendChild(inner); const widthWithScroll = inner.offsetWidth; (_a2 = outer.parentNode) == null ? void 0 : _a2.removeChild(outer); scrollBarWidth = widthNoScroll - widthWithScroll; return scrollBarWidth; }; function scrollIntoView(container, selected) { if (!isClient) return; if (!selected) { container.scrollTop = 0; return; } const offsetParents = []; let pointer = selected.offsetParent; while (pointer !== null && container !== pointer && container.contains(pointer)) { offsetParents.push(pointer); pointer = pointer.offsetParent; } const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0); const bottom = top + selected.offsetHeight; const viewRectTop = container.scrollTop; const viewRectBottom = viewRectTop + container.clientHeight; if (top < viewRectTop) { container.scrollTop = top; } else if (bottom > viewRectBottom) { container.scrollTop = bottom - container.clientHeight; } } /*! Element Plus Icons Vue v2.1.0 */ var export_helper_default = (sfc, props) => { let target = sfc.__vccOpts || sfc; for (let [key, val] of props) target[key] = val; return target; }; var arrow_down_vue_vue_type_script_lang_default = { name: "ArrowDown" }; var _hoisted_16$2 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_26$2 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z" }, null, -1 ), _hoisted_36$2 = [ _hoisted_26$2 ]; function _sfc_render6(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_16$2, _hoisted_36$2); } var arrow_down_default = /* @__PURE__ */ export_helper_default(arrow_down_vue_vue_type_script_lang_default, [["render", _sfc_render6], ["__file", "arrow-down.vue"]]); var arrow_right_vue_vue_type_script_lang_default = { name: "ArrowRight" }; var _hoisted_110 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_210 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z" }, null, -1 ), _hoisted_310 = [ _hoisted_210 ]; function _sfc_render10(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_110, _hoisted_310); } var arrow_right_default = /* @__PURE__ */ export_helper_default(arrow_right_vue_vue_type_script_lang_default, [["render", _sfc_render10], ["__file", "arrow-right.vue"]]); var arrow_up_vue_vue_type_script_lang_default = { name: "ArrowUp" }; var _hoisted_112 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_212 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0z" }, null, -1 ), _hoisted_312 = [ _hoisted_212 ]; function _sfc_render12(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_112, _hoisted_312); } var arrow_up_default = /* @__PURE__ */ export_helper_default(arrow_up_vue_vue_type_script_lang_default, [["render", _sfc_render12], ["__file", "arrow-up.vue"]]); var circle_check_vue_vue_type_script_lang_default = { name: "CircleCheck" }; var _hoisted_149 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_249 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768zm0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896z" }, null, -1 ), _hoisted_348 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z" }, null, -1 ), _hoisted_415 = [ _hoisted_249, _hoisted_348 ]; function _sfc_render49(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_149, _hoisted_415); } var circle_check_default = /* @__PURE__ */ export_helper_default(circle_check_vue_vue_type_script_lang_default, [["render", _sfc_render49], ["__file", "circle-check.vue"]]); var circle_close_vue_vue_type_script_lang_default = { name: "CircleClose" }; var _hoisted_151 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_251 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248L466.752 512z" }, null, -1 ), _hoisted_350 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768zm0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896z" }, null, -1 ), _hoisted_416 = [ _hoisted_251, _hoisted_350 ]; function _sfc_render51(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_151, _hoisted_416); } var circle_close_default = /* @__PURE__ */ export_helper_default(circle_close_vue_vue_type_script_lang_default, [["render", _sfc_render51], ["__file", "circle-close.vue"]]); var close_vue_vue_type_script_lang_default = { name: "Close" }; var _hoisted_156 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_256 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z" }, null, -1 ), _hoisted_355 = [ _hoisted_256 ]; function _sfc_render56(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_156, _hoisted_355); } var close_default = /* @__PURE__ */ export_helper_default(close_vue_vue_type_script_lang_default, [["render", _sfc_render56], ["__file", "close.vue"]]); var delete_vue_vue_type_script_lang_default = { name: "Delete" }; var _hoisted_180 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_280 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V256zm448-64v-64H416v64h192zM224 896h576V256H224v640zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32zm192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32z" }, null, -1 ), _hoisted_379 = [ _hoisted_280 ]; function _sfc_render80(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_180, _hoisted_379); } var delete_default = /* @__PURE__ */ export_helper_default(delete_vue_vue_type_script_lang_default, [["render", _sfc_render80], ["__file", "delete.vue"]]); var edit_vue_vue_type_script_lang_default = { name: "Edit" }; var _hoisted_194 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_294 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640V512z" }, null, -1 ), _hoisted_393 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088L436.8 623.68a32 32 0 0 1-36.224-36.224l15.104-105.6a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.744 0z" }, null, -1 ), _hoisted_431 = [ _hoisted_294, _hoisted_393 ]; function _sfc_render94(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_194, _hoisted_431); } var edit_default = /* @__PURE__ */ export_helper_default(edit_vue_vue_type_script_lang_default, [["render", _sfc_render94], ["__file", "edit.vue"]]); var hide_vue_vue_type_script_lang_default = { name: "Hide" }; var _hoisted_1133 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_2133 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2L371.2 588.8ZM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z" }, null, -1 ), _hoisted_3132 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z" }, null, -1 ), _hoisted_438 = [ _hoisted_2133, _hoisted_3132 ]; function _sfc_render133(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_1133, _hoisted_438); } var hide_default = /* @__PURE__ */ export_helper_default(hide_vue_vue_type_script_lang_default, [["render", _sfc_render133], ["__file", "hide.vue"]]); var loading_vue_vue_type_script_lang_default = { name: "Loading" }; var _hoisted_1150 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_2150 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32zM195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0zm-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z" }, null, -1 ), _hoisted_3149 = [ _hoisted_2150 ]; function _sfc_render150(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_1150, _hoisted_3149); } var loading_default = /* @__PURE__ */ export_helper_default(loading_vue_vue_type_script_lang_default, [["render", _sfc_render150], ["__file", "loading.vue"]]); var minus_vue_vue_type_script_lang_default = { name: "Minus" }; var _hoisted_1169 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_2169 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64z" }, null, -1 ), _hoisted_3168 = [ _hoisted_2169 ]; function _sfc_render169(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_1169, _hoisted_3168); } var minus_default = /* @__PURE__ */ export_helper_default(minus_vue_vue_type_script_lang_default, [["render", _sfc_render169], ["__file", "minus.vue"]]); var plus_vue_vue_type_script_lang_default = { name: "Plus" }; var _hoisted_1201 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_2201 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z" }, null, -1 ), _hoisted_3200 = [ _hoisted_2201 ]; function _sfc_render201(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_1201, _hoisted_3200); } var plus_default = /* @__PURE__ */ export_helper_default(plus_vue_vue_type_script_lang_default, [["render", _sfc_render201], ["__file", "plus.vue"]]); var setting_vue_vue_type_script_lang_default = { name: "Setting" }; var _hoisted_1231 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_2231 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296l112.32 24.256c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384zm0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256z" }, null, -1 ), _hoisted_3230 = [ _hoisted_2231 ]; function _sfc_render231(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_1231, _hoisted_3230); } var setting_default = /* @__PURE__ */ export_helper_default(setting_vue_vue_type_script_lang_default, [["render", _sfc_render231], ["__file", "setting.vue"]]); var view_vue_vue_type_script_lang_default = { name: "View" }; var _hoisted_1283 = { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 1024 1024" }, _hoisted_2283 = /* @__PURE__ */ createElementVNode( "path", { fill: "currentColor", d: "M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352zm0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448zm0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160z" }, null, -1 ), _hoisted_3282 = [ _hoisted_2283 ]; function _sfc_render283(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("svg", _hoisted_1283, _hoisted_3282); } var view_default = /* @__PURE__ */ export_helper_default(view_vue_vue_type_script_lang_default, [["render", _sfc_render283], ["__file", "view.vue"]]); const epPropKey = "__epPropKey"; const definePropType = (val) => val; const isEpProp = (val) => isObject$5(val) && !!val[epPropKey]; const buildProp = (prop, key) => { if (!isObject$5(prop) || isEpProp(prop)) return prop; const { values: values3, required, default: defaultValue2, type: type2, validator } = prop; const _validator = values3 || validator ? (val) => { let valid = false; let allowedValues = []; if (values3) { allowedValues = Array.from(values3); if (hasOwn(prop, "default")) { allowedValues.push(defaultValue2); } valid || (valid = allowedValues.includes(val)); } if (validator) valid || (valid = validator(val)); if (!valid && allowedValues.length > 0) { const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(", "); warn(`Invalid prop: validation failed${key ? ` for prop "${key}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`); } return valid; } : void 0; const epProp = { type: type2, required: !!required, validator: _validator, [epPropKey]: true }; if (hasOwn(prop, "default")) epProp.default = defaultValue2; return epProp; }; const buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [ key, buildProp(option, key) ])); const iconPropType = definePropType([ String, Object, Function ]); const CloseComponents = { Close: close_default }; const ValidateComponentsMap = { validating: loading_default, success: circle_check_default, error: circle_close_default }; const withInstall = (main, extra) => { main.install = (app) => { for (const comp of [main, ...Object.values(extra != null ? extra : {})]) { app.component(comp.name, comp); } }; if (extra) { for (const [key, comp] of Object.entries(extra)) { main[key] = comp; } } return main; }; const withNoopInstall = (component) => { component.install = NOOP; return component; }; const composeRefs = (...refs) => { return (el) => { refs.forEach((ref2) => { if (isFunction$3(ref2)) { ref2(el); } else { ref2.value = el; } }); }; }; const EVENT_CODE = { tab: "Tab", enter: "Enter", space: "Space", left: "ArrowLeft", up: "ArrowUp", right: "ArrowRight", down: "ArrowDown", esc: "Escape", delete: "Delete", backspace: "Backspace", numpadEnter: "NumpadEnter", pageUp: "PageUp", pageDown: "PageDown", home: "Home", end: "End" }; const UPDATE_MODEL_EVENT = "update:modelValue"; const CHANGE_EVENT = "change"; const INPUT_EVENT = "input"; const componentSizes = ["", "default", "small", "large"]; const componentSizeMap = { large: 40, default: 32, small: 24 }; const getComponentSize = (size) => { return componentSizeMap[size || "default"]; }; const isValidComponentSize = (val) => ["", ...componentSizes].includes(val); var PatchFlags = /* @__PURE__ */ ((PatchFlags2) => { PatchFlags2[PatchFlags2["TEXT"] = 1] = "TEXT"; PatchFlags2[PatchFlags2["CLASS"] = 2] = "CLASS"; PatchFlags2[PatchFlags2["STYLE"] = 4] = "STYLE"; PatchFlags2[PatchFlags2["PROPS"] = 8] = "PROPS"; PatchFlags2[PatchFlags2["FULL_PROPS"] = 16] = "FULL_PROPS"; PatchFlags2[PatchFlags2["HYDRATE_EVENTS"] = 32] = "HYDRATE_EVENTS"; PatchFlags2[PatchFlags2["STABLE_FRAGMENT"] = 64] = "STABLE_FRAGMENT"; PatchFlags2[PatchFlags2["KEYED_FRAGMENT"] = 128] = "KEYED_FRAGMENT"; PatchFlags2[PatchFlags2["UNKEYED_FRAGMENT"] = 256] = "UNKEYED_FRAGMENT"; PatchFlags2[PatchFlags2["NEED_PATCH"] = 512] = "NEED_PATCH"; PatchFlags2[PatchFlags2["DYNAMIC_SLOTS"] = 1024] = "DYNAMIC_SLOTS"; PatchFlags2[PatchFlags2["HOISTED"] = -1] = "HOISTED"; PatchFlags2[PatchFlags2["BAIL"] = -2] = "BAIL"; return PatchFlags2; })(PatchFlags || {}); const isKorean = (text) => /([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(text); const generateId = () => Math.floor(Math.random() * 1e4); const mutable = (val) => val; const DEFAULT_EXCLUDE_KEYS = ["class", "style"]; const LISTENER_PREFIX = /^on[A-Z]/; const useAttrs = (params = {}) => { const { excludeListeners = false, excludeKeys } = params; const allExcludeKeys = computed$1(() => { return ((excludeKeys == null ? void 0 : excludeKeys.value) || []).concat(DEFAULT_EXCLUDE_KEYS); }); const instance = getCurrentInstance(); if (!instance) { return computed$1(() => ({})); } return computed$1(() => { var _a2; return fromPairs(Object.entries((_a2 = instance.proxy) == null ? void 0 : _a2.$attrs).filter(([key]) => !allExcludeKeys.value.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key)))); }); }; const useDeprecated = ({ from: from3, replacement, scope, version: version2, ref: ref2, type: type2 = "API" }, condition) => { watch(() => unref(condition), (val) => { }, { immediate: true }); }; const useDraggable = (targetRef, dragRef, draggable2) => { let transform3 = { offsetX: 0, offsetY: 0 }; const onMousedown = (e) => { const downX = e.clientX; const downY = e.clientY; const { offsetX, offsetY } = transform3; const targetRect = targetRef.value.getBoundingClientRect(); const targetLeft = targetRect.left; const targetTop = targetRect.top; const targetWidth = targetRect.width; const targetHeight = targetRect.height; const clientWidth = document.documentElement.clientWidth; const clientHeight = document.documentElement.clientHeight; const minLeft = -targetLeft + offsetX; const minTop = -targetTop + offsetY; const maxLeft = clientWidth - targetLeft - targetWidth + offsetX; const maxTop = clientHeight - targetTop - targetHeight + offsetY; const onMousemove = (e2) => { const moveX = Math.min(Math.max(offsetX + e2.clientX - downX, minLeft), maxLeft); const moveY = Math.min(Math.max(offsetY + e2.clientY - downY, minTop), maxTop); transform3 = { offsetX: moveX, offsetY: moveY }; targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(moveY)})`; }; const onMouseup = () => { document.removeEventListener("mousemove", onMousemove); document.removeEventListener("mouseup", onMouseup); }; document.addEventListener("mousemove", onMousemove); document.addEventListener("mouseup", onMouseup); }; const onDraggable = () => { if (dragRef.value && targetRef.value) { dragRef.value.addEventListener("mousedown", onMousedown); } }; const offDraggable = () => { if (dragRef.value && targetRef.value) { dragRef.value.removeEventListener("mousedown", onMousedown); } }; onMounted(() => { watchEffect(() => { if (draggable2.value) { onDraggable(); } else { offDraggable(); } }); }); onBeforeUnmount(() => { offDraggable(); }); }; const useFocus = (el) => { return { focus: () => { var _a2, _b; (_b = (_a2 = el.value) == null ? void 0 : _a2.focus) == null ? void 0 : _b.call(_a2); } }; }; var English = { name: "en", el: { colorpicker: { confirm: "OK", clear: "Clear", defaultLabel: "color picker", description: "current color is {color}. press enter to select a new color." }, datepicker: { now: "Now", today: "Today", cancel: "Cancel", clear: "Clear", confirm: "OK", dateTablePrompt: "Use the arrow keys and enter to select the day of the month", monthTablePrompt: "Use the arrow keys and enter to select the month", yearTablePrompt: "Use the arrow keys and enter to select the year", selectedDate: "Selected date", selectDate: "Select date", selectTime: "Select time", startDate: "Start Date", startTime: "Start Time", endDate: "End Date", endTime: "End Time", prevYear: "Previous Year", nextYear: "Next Year", prevMonth: "Previous Month", nextMonth: "Next Month", year: "", month1: "January", month2: "February", month3: "March", month4: "April", month5: "May", month6: "June", month7: "July", month8: "August", month9: "September", month10: "October", month11: "November", month12: "December", week: "week", weeks: { sun: "Sun", mon: "Mon", tue: "Tue", wed: "Wed", thu: "Thu", fri: "Fri", sat: "Sat" }, weeksFull: { sun: "Sunday", mon: "Monday", tue: "Tuesday", wed: "Wednesday", thu: "Thursday", fri: "Friday", sat: "Saturday" }, months: { jan: "Jan", feb: "Feb", mar: "Mar", apr: "Apr", may: "May", jun: "Jun", jul: "Jul", aug: "Aug", sep: "Sep", oct: "Oct", nov: "Nov", dec: "Dec" } }, inputNumber: { decrease: "decrease number", increase: "increase number" }, select: { loading: "Loading", noMatch: "No matching data", noData: "No data", placeholder: "Select" }, dropdown: { toggleDropdown: "Toggle Dropdown" }, cascader: { noMatch: "No matching data", loading: "Loading", placeholder: "Select", noData: "No data" }, pagination: { goto: "Go to", pagesize: "/page", total: "Total {total}", pageClassifier: "", page: "Page", prev: "Go to previous page", next: "Go to next page", currentPage: "page {pager}", prevPages: "Previous {pager} pages", nextPages: "Next {pager} pages", deprecationWarning: "Deprecated usages detected, please refer to the el-pagination documentation for more details" }, dialog: { close: "Close this dialog" }, drawer: { close: "Close this dialog" }, messagebox: { title: "Message", confirm: "OK", cancel: "Cancel", error: "Illegal input", close: "Close this dialog" }, upload: { deleteTip: "press delete to remove", delete: "Delete", preview: "Preview", continue: "Continue" }, slider: { defaultLabel: "slider between {min} and {max}", defaultRangeStartLabel: "pick start value", defaultRangeEndLabel: "pick end value" }, table: { emptyText: "No Data", confirmFilter: "Confirm", resetFilter: "Reset", clearFilter: "All", sumText: "Sum" }, tree: { emptyText: "No Data" }, transfer: { noMatch: "No matching data", noData: "No data", titles: ["List 1", "List 2"], filterPlaceholder: "Enter keyword", noCheckedFormat: "{total} items", hasCheckedFormat: "{checked}/{total} checked" }, image: { error: "FAILED" }, pageHeader: { title: "Back" }, popconfirm: { confirmButtonText: "Yes", cancelButtonText: "No" } } }; const buildTranslator = (locale) => (path, option) => translate(path, option, unref(locale)); const translate = (path, option, locale) => get$2(locale, path, path).replace(/\{(\w+)\}/g, (_, key) => { var _a2; return `${(_a2 = option == null ? void 0 : option[key]) != null ? _a2 : `{${key}}`}`; }); const buildLocaleContext = (locale) => { const lang = computed$1(() => unref(locale).name); const localeRef = isRef(locale) ? locale : ref(locale); return { lang, locale: localeRef, t: buildTranslator(locale) }; }; const localeContextKey = Symbol("localeContextKey"); const useLocale = (localeOverrides) => { const locale = localeOverrides || inject(localeContextKey, ref()); return buildLocaleContext(computed$1(() => locale.value || English)); }; let activeEffectScope; function recordEffectScope(effect, scope = activeEffectScope) { if (scope && scope.active) { scope.effects.push(effect); } } const createDep = (effects) => { const dep = new Set(effects); dep.w = 0; dep.n = 0; return dep; }; const wasTracked = (dep) => (dep.w & trackOpBit) > 0; const newTracked = (dep) => (dep.n & trackOpBit) > 0; const initDepMarkers = ({ deps }) => { if (deps.length) { for (let i2 = 0; i2 < deps.length; i2++) { deps[i2].w |= trackOpBit; } } }; const finalizeDepMarkers = (effect) => { const { deps } = effect; if (deps.length) { let ptr = 0; for (let i2 = 0; i2 < deps.length; i2++) { const dep = deps[i2]; if (wasTracked(dep) && !newTracked(dep)) { dep.delete(effect); } else { deps[ptr++] = dep; } dep.w &= ~trackOpBit; dep.n &= ~trackOpBit; } deps.length = ptr; } }; let effectTrackDepth = 0; let trackOpBit = 1; const maxMarkerBits = 30; let activeEffect; class ReactiveEffect { constructor(fn2, scheduler = null, scope) { this.fn = fn2; this.scheduler = scheduler; this.active = true; this.deps = []; this.parent = void 0; recordEffectScope(this, scope); } run() { if (!this.active) { return this.fn(); } let parent = activeEffect; let lastShouldTrack = shouldTrack; while (parent) { if (parent === this) { return; } parent = parent.parent; } try { this.parent = activeEffect; activeEffect = this; shouldTrack = true; trackOpBit = 1 << ++effectTrackDepth; if (effectTrackDepth <= maxMarkerBits) { initDepMarkers(this); } else { cleanupEffect(this); } return this.fn(); } finally { if (effectTrackDepth <= maxMarkerBits) { finalizeDepMarkers(this); } trackOpBit = 1 << --effectTrackDepth; activeEffect = this.parent; shouldTrack = lastShouldTrack; this.parent = void 0; if (this.deferStop) { this.stop(); } } } stop() { if (activeEffect === this) { this.deferStop = true; } else if (this.active) { cleanupEffect(this); if (this.onStop) { this.onStop(); } this.active = false; } } } function cleanupEffect(effect2) { const { deps } = effect2; if (deps.length) { for (let i2 = 0; i2 < deps.length; i2++) { deps[i2].delete(effect2); } deps.length = 0; } } let shouldTrack = true; function trackEffects(dep, debuggerEventExtraInfo) { let shouldTrack2 = false; if (effectTrackDepth <= maxMarkerBits) { if (!newTracked(dep)) { dep.n |= trackOpBit; shouldTrack2 = !wasTracked(dep); } } else { shouldTrack2 = !dep.has(activeEffect); } if (shouldTrack2) { dep.add(activeEffect); activeEffect.deps.push(dep); } } function triggerEffects(dep, debuggerEventExtraInfo) { const effects = isArray$2(dep) ? dep : [...dep]; for (const effect2 of effects) { if (effect2.computed) { triggerEffect(effect2); } } for (const effect2 of effects) { if (!effect2.computed) { triggerEffect(effect2); } } } function triggerEffect(effect2, debuggerEventExtraInfo) { if (effect2 !== activeEffect || effect2.allowRecurse) { if (effect2.scheduler) { effect2.scheduler(); } else { effect2.run(); } } } function toRaw(observed) { const raw = observed && observed["__v_raw"]; return raw ? toRaw(raw) : observed; } function trackRefValue(ref2) { if (shouldTrack && activeEffect) { ref2 = toRaw(ref2); { trackEffects(ref2.dep || (ref2.dep = createDep())); } } } function triggerRefValue(ref2, newVal) { ref2 = toRaw(ref2); const dep = ref2.dep; if (dep) { { triggerEffects(dep); } } } class ComputedRefImpl { constructor(getter, _setter, isReadonly, isSSR) { this._setter = _setter; this.dep = void 0; this.__v_isRef = true; this["__v_isReadonly"] = false; this._dirty = true; this.effect = new ReactiveEffect(getter, () => { if (!this._dirty) { this._dirty = true; triggerRefValue(this); } }); this.effect.computed = this; this.effect.active = this._cacheable = !isSSR; this["__v_isReadonly"] = isReadonly; } get value() { const self2 = toRaw(this); trackRefValue(self2); if (self2._dirty || !self2._cacheable) { self2._dirty = false; self2._value = self2.effect.run(); } return self2._value; } set value(newValue) { this._setter(newValue); } } function computed(getterOrOptions, debugOptions, isSSR = false) { let getter; let setter; const onlyGetter = isFunction$3(getterOrOptions); if (onlyGetter) { getter = getterOrOptions; setter = NOOP; } else { getter = getterOrOptions.get; setter = getterOrOptions.set; } const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR); return cRef; } const defaultNamespace = "el"; const statePrefix = "is-"; const _bem = (namespace, block, blockSuffix, element, modifier) => { let cls = `${namespace}-${block}`; if (blockSuffix) { cls += `-${blockSuffix}`; } if (element) { cls += `__${element}`; } if (modifier) { cls += `--${modifier}`; } return cls; }; const namespaceContextKey = Symbol("namespaceContextKey"); const useGetDerivedNamespace = (namespaceOverrides) => { const derivedNamespace = namespaceOverrides || inject(namespaceContextKey, ref(defaultNamespace)); const namespace = computed$1(() => { return unref(derivedNamespace) || defaultNamespace; }); return namespace; }; const useNamespace = (block, namespaceOverrides) => { const namespace = useGetDerivedNamespace(namespaceOverrides); const b = (blockSuffix = "") => _bem(namespace.value, block, blockSuffix, "", ""); const e = (element) => element ? _bem(namespace.value, block, "", element, "") : ""; const m = (modifier) => modifier ? _bem(namespace.value, block, "", "", modifier) : ""; const be2 = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, "") : ""; const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, "", element, modifier) : ""; const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, "", modifier) : ""; const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : ""; const is = (name, ...args) => { const state = args.length >= 1 ? args[0] : true; return name && state ? `${statePrefix}${name}` : ""; }; const cssVar = (object) => { const styles = {}; for (const key in object) { if (object[key]) { styles[`--${namespace.value}-${key}`] = object[key]; } } return styles; }; const cssVarBlock = (object) => { const styles = {}; for (const key in object) { if (object[key]) { styles[`--${namespace.value}-${block}-${key}`] = object[key]; } } return styles; }; const cssVarName = (name) => `--${namespace.value}-${name}`; const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`; return { namespace, b, e, m, be: be2, em, bm, bem, is, cssVar, cssVarName, cssVarBlock, cssVarBlockName }; }; const useLockscreen = (trigger2, options2 = {}) => { if (!isRef(trigger2)) { throwError("[useLockscreen]", "You need to pass a ref param to this function"); } const ns = options2.ns || useNamespace("popup"); const hiddenCls = computed(() => ns.bm("parent", "hidden")); if (!isClient || hasClass$2(document.body, hiddenCls.value)) { return; } let scrollBarWidth2 = 0; let withoutHiddenClass = false; let bodyWidth = "0"; const cleanup = () => { setTimeout(() => { removeClass$2(document == null ? void 0 : document.body, hiddenCls.value); if (withoutHiddenClass && document) { document.body.style.width = bodyWidth; } }, 200); }; watch(trigger2, (val) => { if (!val) { cleanup(); return; } withoutHiddenClass = !hasClass$2(document.body, hiddenCls.value); if (withoutHiddenClass) { bodyWidth = document.body.style.width; } scrollBarWidth2 = getScrollBarWidth(ns.namespace.value); const bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight; const bodyOverflowY = getStyle(document.body, "overflowY"); if (scrollBarWidth2 > 0 && (bodyHasOverflow || bodyOverflowY === "scroll") && withoutHiddenClass) { document.body.style.width = `calc(100% - ${scrollBarWidth2}px)`; } addClass$2(document.body, hiddenCls.value); }); onScopeDispose(() => cleanup()); }; const _prop = buildProp({ type: definePropType(Boolean), default: null }); const _event = buildProp({ type: definePropType(Function) }); const createModelToggleComposable = (name) => { const updateEventKey = `update:${name}`; const updateEventKeyRaw = `onUpdate:${name}`; const useModelToggleEmits2 = [updateEventKey]; const useModelToggleProps2 = { [name]: _prop, [updateEventKeyRaw]: _event }; const useModelToggle2 = ({ indicator, toggleReason, shouldHideWhenRouteChanges, shouldProceed, onShow, onHide }) => { const instance = getCurrentInstance(); const { emit } = instance; const props = instance.props; const hasUpdateHandler = computed$1(() => isFunction$3(props[updateEventKeyRaw])); const isModelBindingAbsent = computed$1(() => props[name] === null); const doShow = (event2) => { if (indicator.value === true) { return; } indicator.value = true; if (toggleReason) { toggleReason.value = event2; } if (isFunction$3(onShow)) { onShow(event2); } }; const doHide = (event2) => { if (indicator.value === false) { return; } indicator.value = false; if (toggleReason) { toggleReason.value = event2; } if (isFunction$3(onHide)) { onHide(event2); } }; const show = (event2) => { if (props.disabled === true || isFunction$3(shouldProceed) && !shouldProceed()) return; const shouldEmit = hasUpdateHandler.value && isClient; if (shouldEmit) { emit(updateEventKey, true); } if (isModelBindingAbsent.value || !shouldEmit) { doShow(event2); } }; const hide = (event2) => { if (props.disabled === true || !isClient) return; const shouldEmit = hasUpdateHandler.value && isClient; if (shouldEmit) { emit(updateEventKey, false); } if (isModelBindingAbsent.value || !shouldEmit) { doHide(event2); } }; const onChange = (val) => { if (!isBoolean(val)) return; if (props.disabled && val) { if (hasUpdateHandler.value) { emit(updateEventKey, false); } } else if (indicator.value !== val) { if (val) { doShow(); } else { doHide(); } } }; const toggle = () => { if (indicator.value) { hide(); } else { show(); } }; watch(() => props[name], onChange); if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) { watch(() => ({ ...instance.proxy.$route }), () => { if (shouldHideWhenRouteChanges.value && indicator.value) { hide(); } }); } onMounted(() => { onChange(props[name]); }); return { hide, show, toggle, hasUpdateHandler }; }; return { useModelToggle: useModelToggle2, useModelToggleProps: useModelToggleProps2, useModelToggleEmits: useModelToggleEmits2 }; }; const useProp = (name) => { const vm = getCurrentInstance(); return computed$1(() => { var _a2, _b; return (_b = (_a2 = vm == null ? void 0 : vm.proxy) == null ? void 0 : _a2.$props) == null ? void 0 : _b[name]; }); }; var E = "top", R = "bottom", W = "right", P = "left", me = "auto", G = [E, R, W, P], U = "start", J = "end", Xe = "clippingParents", je = "viewport", K = "popper", Ye = "reference", De = G.reduce(function(t2, e) { return t2.concat([e + "-" + U, e + "-" + J]); }, []), Ee = [].concat(G, [me]).reduce(function(t2, e) { return t2.concat([e, e + "-" + U, e + "-" + J]); }, []), Ge = "beforeRead", Je = "read", Ke = "afterRead", Qe = "beforeMain", Ze = "main", et = "afterMain", tt = "beforeWrite", nt = "write", rt = "afterWrite", ot = [Ge, Je, Ke, Qe, Ze, et, tt, nt, rt]; function C(t2) { return t2 ? (t2.nodeName || "").toLowerCase() : null; } function H(t2) { if (t2 == null) return window; if (t2.toString() !== "[object Window]") { var e = t2.ownerDocument; return e && e.defaultView || window; } return t2; } function Q(t2) { var e = H(t2).Element; return t2 instanceof e || t2 instanceof Element; } function B(t2) { var e = H(t2).HTMLElement; return t2 instanceof e || t2 instanceof HTMLElement; } function Pe(t2) { if (typeof ShadowRoot == "undefined") return false; var e = H(t2).ShadowRoot; return t2 instanceof e || t2 instanceof ShadowRoot; } function Mt(t2) { var e = t2.state; Object.keys(e.elements).forEach(function(n) { var r2 = e.styles[n] || {}, o = e.attributes[n] || {}, i2 = e.elements[n]; !B(i2) || !C(i2) || (Object.assign(i2.style, r2), Object.keys(o).forEach(function(a) { var s = o[a]; s === false ? i2.removeAttribute(a) : i2.setAttribute(a, s === true ? "" : s); })); }); } function Rt(t2) { var e = t2.state, n = { popper: { position: e.options.strategy, left: "0", top: "0", margin: "0" }, arrow: { position: "absolute" }, reference: {} }; return Object.assign(e.elements.popper.style, n.popper), e.styles = n, e.elements.arrow && Object.assign(e.elements.arrow.style, n.arrow), function() { Object.keys(e.elements).forEach(function(r2) { var o = e.elements[r2], i2 = e.attributes[r2] || {}, a = Object.keys(e.styles.hasOwnProperty(r2) ? e.styles[r2] : n[r2]), s = a.reduce(function(f, c) { return f[c] = "", f; }, {}); !B(o) || !C(o) || (Object.assign(o.style, s), Object.keys(i2).forEach(function(f) { o.removeAttribute(f); })); }); }; } var Ae = { name: "applyStyles", enabled: true, phase: "write", fn: Mt, effect: Rt, requires: ["computeStyles"] }; function q(t2) { return t2.split("-")[0]; } var X = Math.max, ve = Math.min, Z = Math.round; function ee(t2, e) { e === void 0 && (e = false); var n = t2.getBoundingClientRect(), r2 = 1, o = 1; if (B(t2) && e) { var i2 = t2.offsetHeight, a = t2.offsetWidth; a > 0 && (r2 = Z(n.width) / a || 1), i2 > 0 && (o = Z(n.height) / i2 || 1); } return { width: n.width / r2, height: n.height / o, top: n.top / o, right: n.right / r2, bottom: n.bottom / o, left: n.left / r2, x: n.left / r2, y: n.top / o }; } function ke(t2) { var e = ee(t2), n = t2.offsetWidth, r2 = t2.offsetHeight; return Math.abs(e.width - n) <= 1 && (n = e.width), Math.abs(e.height - r2) <= 1 && (r2 = e.height), { x: t2.offsetLeft, y: t2.offsetTop, width: n, height: r2 }; } function it(t2, e) { var n = e.getRootNode && e.getRootNode(); if (t2.contains(e)) return true; if (n && Pe(n)) { var r2 = e; do { if (r2 && t2.isSameNode(r2)) return true; r2 = r2.parentNode || r2.host; } while (r2); } return false; } function N(t2) { return H(t2).getComputedStyle(t2); } function Wt(t2) { return ["table", "td", "th"].indexOf(C(t2)) >= 0; } function I(t2) { return ((Q(t2) ? t2.ownerDocument : t2.document) || window.document).documentElement; } function ge(t2) { return C(t2) === "html" ? t2 : t2.assignedSlot || t2.parentNode || (Pe(t2) ? t2.host : null) || I(t2); } function at(t2) { return !B(t2) || N(t2).position === "fixed" ? null : t2.offsetParent; } function Bt(t2) { var e = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1, n = navigator.userAgent.indexOf("Trident") !== -1; if (n && B(t2)) { var r2 = N(t2); if (r2.position === "fixed") return null; } var o = ge(t2); for (Pe(o) && (o = o.host); B(o) && ["html", "body"].indexOf(C(o)) < 0; ) { var i2 = N(o); if (i2.transform !== "none" || i2.perspective !== "none" || i2.contain === "paint" || ["transform", "perspective"].indexOf(i2.willChange) !== -1 || e && i2.willChange === "filter" || e && i2.filter && i2.filter !== "none") return o; o = o.parentNode; } return null; } function se(t2) { for (var e = H(t2), n = at(t2); n && Wt(n) && N(n).position === "static"; ) n = at(n); return n && (C(n) === "html" || C(n) === "body" && N(n).position === "static") ? e : n || Bt(t2) || e; } function Le(t2) { return ["top", "bottom"].indexOf(t2) >= 0 ? "x" : "y"; } function fe(t2, e, n) { return X(t2, ve(e, n)); } function St(t2, e, n) { var r2 = fe(t2, e, n); return r2 > n ? n : r2; } function st() { return { top: 0, right: 0, bottom: 0, left: 0 }; } function ft(t2) { return Object.assign({}, st(), t2); } function ct(t2, e) { return e.reduce(function(n, r2) { return n[r2] = t2, n; }, {}); } var Tt = function(t2, e) { return t2 = typeof t2 == "function" ? t2(Object.assign({}, e.rects, { placement: e.placement })) : t2, ft(typeof t2 != "number" ? t2 : ct(t2, G)); }; function Ht(t2) { var e, n = t2.state, r2 = t2.name, o = t2.options, i2 = n.elements.arrow, a = n.modifiersData.popperOffsets, s = q(n.placement), f = Le(s), c = [P, W].indexOf(s) >= 0, u = c ? "height" : "width"; if (!(!i2 || !a)) { var m = Tt(o.padding, n), v = ke(i2), l = f === "y" ? E : P, h2 = f === "y" ? R : W, p = n.rects.reference[u] + n.rects.reference[f] - a[f] - n.rects.popper[u], g = a[f] - n.rects.reference[f], x = se(i2), y = x ? f === "y" ? x.clientHeight || 0 : x.clientWidth || 0 : 0, $2 = p / 2 - g / 2, d2 = m[l], b = y - v[u] - m[h2], w = y / 2 - v[u] / 2 + $2, O = fe(d2, w, b), j = f; n.modifiersData[r2] = (e = {}, e[j] = O, e.centerOffset = O - w, e); } } function Ct(t2) { var e = t2.state, n = t2.options, r2 = n.element, o = r2 === void 0 ? "[data-popper-arrow]" : r2; o != null && (typeof o == "string" && (o = e.elements.popper.querySelector(o), !o) || !it(e.elements.popper, o) || (e.elements.arrow = o)); } var pt = { name: "arrow", enabled: true, phase: "main", fn: Ht, effect: Ct, requires: ["popperOffsets"], requiresIfExists: ["preventOverflow"] }; function te(t2) { return t2.split("-")[1]; } var qt = { top: "auto", right: "auto", bottom: "auto", left: "auto" }; function Vt(t2) { var e = t2.x, n = t2.y, r2 = window, o = r2.devicePixelRatio || 1; return { x: Z(e * o) / o || 0, y: Z(n * o) / o || 0 }; } function ut(t2) { var e, n = t2.popper, r2 = t2.popperRect, o = t2.placement, i2 = t2.variation, a = t2.offsets, s = t2.position, f = t2.gpuAcceleration, c = t2.adaptive, u = t2.roundOffsets, m = t2.isFixed, v = a.x, l = v === void 0 ? 0 : v, h2 = a.y, p = h2 === void 0 ? 0 : h2, g = typeof u == "function" ? u({ x: l, y: p }) : { x: l, y: p }; l = g.x, p = g.y; var x = a.hasOwnProperty("x"), y = a.hasOwnProperty("y"), $2 = P, d2 = E, b = window; if (c) { var w = se(n), O = "clientHeight", j = "clientWidth"; if (w === H(n) && (w = I(n), N(w).position !== "static" && s === "absolute" && (O = "scrollHeight", j = "scrollWidth")), w = w, o === E || (o === P || o === W) && i2 === J) { d2 = R; var A = m && w === b && b.visualViewport ? b.visualViewport.height : w[O]; p -= A - r2.height, p *= f ? 1 : -1; } if (o === P || (o === E || o === R) && i2 === J) { $2 = W; var k = m && w === b && b.visualViewport ? b.visualViewport.width : w[j]; l -= k - r2.width, l *= f ? 1 : -1; } } var D = Object.assign({ position: s }, c && qt), S = u === true ? Vt({ x: l, y: p }) : { x: l, y: p }; if (l = S.x, p = S.y, f) { var L; return Object.assign({}, D, (L = {}, L[d2] = y ? "0" : "", L[$2] = x ? "0" : "", L.transform = (b.devicePixelRatio || 1) <= 1 ? "translate(" + l + "px, " + p + "px)" : "translate3d(" + l + "px, " + p + "px, 0)", L)); } return Object.assign({}, D, (e = {}, e[d2] = y ? p + "px" : "", e[$2] = x ? l + "px" : "", e.transform = "", e)); } function Nt(t2) { var e = t2.state, n = t2.options, r2 = n.gpuAcceleration, o = r2 === void 0 ? true : r2, i2 = n.adaptive, a = i2 === void 0 ? true : i2, s = n.roundOffsets, f = s === void 0 ? true : s, c = { placement: q(e.placement), variation: te(e.placement), popper: e.elements.popper, popperRect: e.rects.popper, gpuAcceleration: o, isFixed: e.options.strategy === "fixed" }; e.modifiersData.popperOffsets != null && (e.styles.popper = Object.assign({}, e.styles.popper, ut(Object.assign({}, c, { offsets: e.modifiersData.popperOffsets, position: e.options.strategy, adaptive: a, roundOffsets: f })))), e.modifiersData.arrow != null && (e.styles.arrow = Object.assign({}, e.styles.arrow, ut(Object.assign({}, c, { offsets: e.modifiersData.arrow, position: "absolute", adaptive: false, roundOffsets: f })))), e.attributes.popper = Object.assign({}, e.attributes.popper, { "data-popper-placement": e.placement }); } var Me = { name: "computeStyles", enabled: true, phase: "beforeWrite", fn: Nt, data: {} }, ye = { passive: true }; function It(t2) { var e = t2.state, n = t2.instance, r2 = t2.options, o = r2.scroll, i2 = o === void 0 ? true : o, a = r2.resize, s = a === void 0 ? true : a, f = H(e.elements.popper), c = [].concat(e.scrollParents.reference, e.scrollParents.popper); return i2 && c.forEach(function(u) { u.addEventListener("scroll", n.update, ye); }), s && f.addEventListener("resize", n.update, ye), function() { i2 && c.forEach(function(u) { u.removeEventListener("scroll", n.update, ye); }), s && f.removeEventListener("resize", n.update, ye); }; } var Re = { name: "eventListeners", enabled: true, phase: "write", fn: function() { }, effect: It, data: {} }, _t = { left: "right", right: "left", bottom: "top", top: "bottom" }; function be(t2) { return t2.replace(/left|right|bottom|top/g, function(e) { return _t[e]; }); } var zt = { start: "end", end: "start" }; function lt(t2) { return t2.replace(/start|end/g, function(e) { return zt[e]; }); } function We(t2) { var e = H(t2), n = e.pageXOffset, r2 = e.pageYOffset; return { scrollLeft: n, scrollTop: r2 }; } function Be(t2) { return ee(I(t2)).left + We(t2).scrollLeft; } function Ft(t2) { var e = H(t2), n = I(t2), r2 = e.visualViewport, o = n.clientWidth, i2 = n.clientHeight, a = 0, s = 0; return r2 && (o = r2.width, i2 = r2.height, /^((?!chrome|android).)*safari/i.test(navigator.userAgent) || (a = r2.offsetLeft, s = r2.offsetTop)), { width: o, height: i2, x: a + Be(t2), y: s }; } function Ut(t2) { var e, n = I(t2), r2 = We(t2), o = (e = t2.ownerDocument) == null ? void 0 : e.body, i2 = X(n.scrollWidth, n.clientWidth, o ? o.scrollWidth : 0, o ? o.clientWidth : 0), a = X(n.scrollHeight, n.clientHeight, o ? o.scrollHeight : 0, o ? o.clientHeight : 0), s = -r2.scrollLeft + Be(t2), f = -r2.scrollTop; return N(o || n).direction === "rtl" && (s += X(n.clientWidth, o ? o.clientWidth : 0) - i2), { width: i2, height: a, x: s, y: f }; } function Se(t2) { var e = N(t2), n = e.overflow, r2 = e.overflowX, o = e.overflowY; return /auto|scroll|overlay|hidden/.test(n + o + r2); } function dt(t2) { return ["html", "body", "#document"].indexOf(C(t2)) >= 0 ? t2.ownerDocument.body : B(t2) && Se(t2) ? t2 : dt(ge(t2)); } function ce(t2, e) { var n; e === void 0 && (e = []); var r2 = dt(t2), o = r2 === ((n = t2.ownerDocument) == null ? void 0 : n.body), i2 = H(r2), a = o ? [i2].concat(i2.visualViewport || [], Se(r2) ? r2 : []) : r2, s = e.concat(a); return o ? s : s.concat(ce(ge(a))); } function Te(t2) { return Object.assign({}, t2, { left: t2.x, top: t2.y, right: t2.x + t2.width, bottom: t2.y + t2.height }); } function Xt(t2) { var e = ee(t2); return e.top = e.top + t2.clientTop, e.left = e.left + t2.clientLeft, e.bottom = e.top + t2.clientHeight, e.right = e.left + t2.clientWidth, e.width = t2.clientWidth, e.height = t2.clientHeight, e.x = e.left, e.y = e.top, e; } function ht(t2, e) { return e === je ? Te(Ft(t2)) : Q(e) ? Xt(e) : Te(Ut(I(t2))); } function Yt(t2) { var e = ce(ge(t2)), n = ["absolute", "fixed"].indexOf(N(t2).position) >= 0, r2 = n && B(t2) ? se(t2) : t2; return Q(r2) ? e.filter(function(o) { return Q(o) && it(o, r2) && C(o) !== "body"; }) : []; } function Gt(t2, e, n) { var r2 = e === "clippingParents" ? Yt(t2) : [].concat(e), o = [].concat(r2, [n]), i2 = o[0], a = o.reduce(function(s, f) { var c = ht(t2, f); return s.top = X(c.top, s.top), s.right = ve(c.right, s.right), s.bottom = ve(c.bottom, s.bottom), s.left = X(c.left, s.left), s; }, ht(t2, i2)); return a.width = a.right - a.left, a.height = a.bottom - a.top, a.x = a.left, a.y = a.top, a; } function mt(t2) { var e = t2.reference, n = t2.element, r2 = t2.placement, o = r2 ? q(r2) : null, i2 = r2 ? te(r2) : null, a = e.x + e.width / 2 - n.width / 2, s = e.y + e.height / 2 - n.height / 2, f; switch (o) { case E: f = { x: a, y: e.y - n.height }; break; case R: f = { x: a, y: e.y + e.height }; break; case W: f = { x: e.x + e.width, y: s }; break; case P: f = { x: e.x - n.width, y: s }; break; default: f = { x: e.x, y: e.y }; } var c = o ? Le(o) : null; if (c != null) { var u = c === "y" ? "height" : "width"; switch (i2) { case U: f[c] = f[c] - (e[u] / 2 - n[u] / 2); break; case J: f[c] = f[c] + (e[u] / 2 - n[u] / 2); break; } } return f; } function ne(t2, e) { e === void 0 && (e = {}); var n = e, r2 = n.placement, o = r2 === void 0 ? t2.placement : r2, i2 = n.boundary, a = i2 === void 0 ? Xe : i2, s = n.rootBoundary, f = s === void 0 ? je : s, c = n.elementContext, u = c === void 0 ? K : c, m = n.altBoundary, v = m === void 0 ? false : m, l = n.padding, h2 = l === void 0 ? 0 : l, p = ft(typeof h2 != "number" ? h2 : ct(h2, G)), g = u === K ? Ye : K, x = t2.rects.popper, y = t2.elements[v ? g : u], $2 = Gt(Q(y) ? y : y.contextElement || I(t2.elements.popper), a, f), d2 = ee(t2.elements.reference), b = mt({ reference: d2, element: x, strategy: "absolute", placement: o }), w = Te(Object.assign({}, x, b)), O = u === K ? w : d2, j = { top: $2.top - O.top + p.top, bottom: O.bottom - $2.bottom + p.bottom, left: $2.left - O.left + p.left, right: O.right - $2.right + p.right }, A = t2.modifiersData.offset; if (u === K && A) { var k = A[o]; Object.keys(j).forEach(function(D) { var S = [W, R].indexOf(D) >= 0 ? 1 : -1, L = [E, R].indexOf(D) >= 0 ? "y" : "x"; j[D] += k[L] * S; }); } return j; } function Jt(t2, e) { e === void 0 && (e = {}); var n = e, r2 = n.placement, o = n.boundary, i2 = n.rootBoundary, a = n.padding, s = n.flipVariations, f = n.allowedAutoPlacements, c = f === void 0 ? Ee : f, u = te(r2), m = u ? s ? De : De.filter(function(h2) { return te(h2) === u; }) : G, v = m.filter(function(h2) { return c.indexOf(h2) >= 0; }); v.length === 0 && (v = m); var l = v.reduce(function(h2, p) { return h2[p] = ne(t2, { placement: p, boundary: o, rootBoundary: i2, padding: a })[q(p)], h2; }, {}); return Object.keys(l).sort(function(h2, p) { return l[h2] - l[p]; }); } function Kt(t2) { if (q(t2) === me) return []; var e = be(t2); return [lt(t2), e, lt(e)]; } function Qt(t2) { var e = t2.state, n = t2.options, r2 = t2.name; if (!e.modifiersData[r2]._skip) { for (var o = n.mainAxis, i2 = o === void 0 ? true : o, a = n.altAxis, s = a === void 0 ? true : a, f = n.fallbackPlacements, c = n.padding, u = n.boundary, m = n.rootBoundary, v = n.altBoundary, l = n.flipVariations, h2 = l === void 0 ? true : l, p = n.allowedAutoPlacements, g = e.options.placement, x = q(g), y = x === g, $2 = f || (y || !h2 ? [be(g)] : Kt(g)), d2 = [g].concat($2).reduce(function(z, V) { return z.concat(q(V) === me ? Jt(e, { placement: V, boundary: u, rootBoundary: m, padding: c, flipVariations: h2, allowedAutoPlacements: p }) : V); }, []), b = e.rects.reference, w = e.rects.popper, O = /* @__PURE__ */ new Map(), j = true, A = d2[0], k = 0; k < d2.length; k++) { var D = d2[k], S = q(D), L = te(D) === U, re = [E, R].indexOf(S) >= 0, oe = re ? "width" : "height", M = ne(e, { placement: D, boundary: u, rootBoundary: m, altBoundary: v, padding: c }), T = re ? L ? W : P : L ? R : E; b[oe] > w[oe] && (T = be(T)); var pe = be(T), _ = []; if (i2 && _.push(M[S] <= 0), s && _.push(M[T] <= 0, M[pe] <= 0), _.every(function(z) { return z; })) { A = D, j = false; break; } O.set(D, _); } if (j) for (var ue = h2 ? 3 : 1, xe = function(z) { var V = d2.find(function(de) { var ae = O.get(de); if (ae) return ae.slice(0, z).every(function(Y) { return Y; }); }); if (V) return A = V, "break"; }, ie = ue; ie > 0; ie--) { var le = xe(ie); if (le === "break") break; } e.placement !== A && (e.modifiersData[r2]._skip = true, e.placement = A, e.reset = true); } } var vt = { name: "flip", enabled: true, phase: "main", fn: Qt, requiresIfExists: ["offset"], data: { _skip: false } }; function gt(t2, e, n) { return n === void 0 && (n = { x: 0, y: 0 }), { top: t2.top - e.height - n.y, right: t2.right - e.width + n.x, bottom: t2.bottom - e.height + n.y, left: t2.left - e.width - n.x }; } function yt(t2) { return [E, W, R, P].some(function(e) { return t2[e] >= 0; }); } function Zt(t2) { var e = t2.state, n = t2.name, r2 = e.rects.reference, o = e.rects.popper, i2 = e.modifiersData.preventOverflow, a = ne(e, { elementContext: "reference" }), s = ne(e, { altBoundary: true }), f = gt(a, r2), c = gt(s, o, i2), u = yt(f), m = yt(c); e.modifiersData[n] = { referenceClippingOffsets: f, popperEscapeOffsets: c, isReferenceHidden: u, hasPopperEscaped: m }, e.attributes.popper = Object.assign({}, e.attributes.popper, { "data-popper-reference-hidden": u, "data-popper-escaped": m }); } var bt = { name: "hide", enabled: true, phase: "main", requiresIfExists: ["preventOverflow"], fn: Zt }; function en$1(t2, e, n) { var r2 = q(t2), o = [P, E].indexOf(r2) >= 0 ? -1 : 1, i2 = typeof n == "function" ? n(Object.assign({}, e, { placement: t2 })) : n, a = i2[0], s = i2[1]; return a = a || 0, s = (s || 0) * o, [P, W].indexOf(r2) >= 0 ? { x: s, y: a } : { x: a, y: s }; } function tn(t2) { var e = t2.state, n = t2.options, r2 = t2.name, o = n.offset, i2 = o === void 0 ? [0, 0] : o, a = Ee.reduce(function(u, m) { return u[m] = en$1(m, e.rects, i2), u; }, {}), s = a[e.placement], f = s.x, c = s.y; e.modifiersData.popperOffsets != null && (e.modifiersData.popperOffsets.x += f, e.modifiersData.popperOffsets.y += c), e.modifiersData[r2] = a; } var wt = { name: "offset", enabled: true, phase: "main", requires: ["popperOffsets"], fn: tn }; function nn(t2) { var e = t2.state, n = t2.name; e.modifiersData[n] = mt({ reference: e.rects.reference, element: e.rects.popper, strategy: "absolute", placement: e.placement }); } var He = { name: "popperOffsets", enabled: true, phase: "read", fn: nn, data: {} }; function rn(t2) { return t2 === "x" ? "y" : "x"; } function on$2(t2) { var e = t2.state, n = t2.options, r2 = t2.name, o = n.mainAxis, i2 = o === void 0 ? true : o, a = n.altAxis, s = a === void 0 ? false : a, f = n.boundary, c = n.rootBoundary, u = n.altBoundary, m = n.padding, v = n.tether, l = v === void 0 ? true : v, h2 = n.tetherOffset, p = h2 === void 0 ? 0 : h2, g = ne(e, { boundary: f, rootBoundary: c, padding: m, altBoundary: u }), x = q(e.placement), y = te(e.placement), $2 = !y, d2 = Le(x), b = rn(d2), w = e.modifiersData.popperOffsets, O = e.rects.reference, j = e.rects.popper, A = typeof p == "function" ? p(Object.assign({}, e.rects, { placement: e.placement })) : p, k = typeof A == "number" ? { mainAxis: A, altAxis: A } : Object.assign({ mainAxis: 0, altAxis: 0 }, A), D = e.modifiersData.offset ? e.modifiersData.offset[e.placement] : null, S = { x: 0, y: 0 }; if (w) { if (i2) { var L, re = d2 === "y" ? E : P, oe = d2 === "y" ? R : W, M = d2 === "y" ? "height" : "width", T = w[d2], pe = T + g[re], _ = T - g[oe], ue = l ? -j[M] / 2 : 0, xe = y === U ? O[M] : j[M], ie = y === U ? -j[M] : -O[M], le = e.elements.arrow, z = l && le ? ke(le) : { width: 0, height: 0 }, V = e.modifiersData["arrow#persistent"] ? e.modifiersData["arrow#persistent"].padding : st(), de = V[re], ae = V[oe], Y = fe(0, O[M], z[M]), jt = $2 ? O[M] / 2 - ue - Y - de - k.mainAxis : xe - Y - de - k.mainAxis, Dt = $2 ? -O[M] / 2 + ue + Y + ae + k.mainAxis : ie + Y + ae + k.mainAxis, Oe = e.elements.arrow && se(e.elements.arrow), Et = Oe ? d2 === "y" ? Oe.clientTop || 0 : Oe.clientLeft || 0 : 0, Ce = (L = D == null ? void 0 : D[d2]) != null ? L : 0, Pt = T + jt - Ce - Et, At = T + Dt - Ce, qe = fe(l ? ve(pe, Pt) : pe, T, l ? X(_, At) : _); w[d2] = qe, S[d2] = qe - T; } if (s) { var Ve, kt = d2 === "x" ? E : P, Lt = d2 === "x" ? R : W, F = w[b], he = b === "y" ? "height" : "width", Ne = F + g[kt], Ie = F - g[Lt], $e = [E, P].indexOf(x) !== -1, _e = (Ve = D == null ? void 0 : D[b]) != null ? Ve : 0, ze = $e ? Ne : F - O[he] - j[he] - _e + k.altAxis, Fe = $e ? F + O[he] + j[he] - _e - k.altAxis : Ie, Ue = l && $e ? St(ze, F, Fe) : fe(l ? ze : Ne, F, l ? Fe : Ie); w[b] = Ue, S[b] = Ue - F; } e.modifiersData[r2] = S; } } var xt = { name: "preventOverflow", enabled: true, phase: "main", fn: on$2, requiresIfExists: ["offset"] }; function an(t2) { return { scrollLeft: t2.scrollLeft, scrollTop: t2.scrollTop }; } function sn(t2) { return t2 === H(t2) || !B(t2) ? We(t2) : an(t2); } function fn(t2) { var e = t2.getBoundingClientRect(), n = Z(e.width) / t2.offsetWidth || 1, r2 = Z(e.height) / t2.offsetHeight || 1; return n !== 1 || r2 !== 1; } function cn(t2, e, n) { n === void 0 && (n = false); var r2 = B(e), o = B(e) && fn(e), i2 = I(e), a = ee(t2, o), s = { scrollLeft: 0, scrollTop: 0 }, f = { x: 0, y: 0 }; return (r2 || !r2 && !n) && ((C(e) !== "body" || Se(i2)) && (s = sn(e)), B(e) ? (f = ee(e, true), f.x += e.clientLeft, f.y += e.clientTop) : i2 && (f.x = Be(i2))), { x: a.left + s.scrollLeft - f.x, y: a.top + s.scrollTop - f.y, width: a.width, height: a.height }; } function pn(t2) { var e = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Set(), r2 = []; t2.forEach(function(i2) { e.set(i2.name, i2); }); function o(i2) { n.add(i2.name); var a = [].concat(i2.requires || [], i2.requiresIfExists || []); a.forEach(function(s) { if (!n.has(s)) { var f = e.get(s); f && o(f); } }), r2.push(i2); } return t2.forEach(function(i2) { n.has(i2.name) || o(i2); }), r2; } function un(t2) { var e = pn(t2); return ot.reduce(function(n, r2) { return n.concat(e.filter(function(o) { return o.phase === r2; })); }, []); } function ln(t2) { var e; return function() { return e || (e = new Promise(function(n) { Promise.resolve().then(function() { e = void 0, n(t2()); }); })), e; }; } function dn(t2) { var e = t2.reduce(function(n, r2) { var o = n[r2.name]; return n[r2.name] = o ? Object.assign({}, o, r2, { options: Object.assign({}, o.options, r2.options), data: Object.assign({}, o.data, r2.data) }) : r2, n; }, {}); return Object.keys(e).map(function(n) { return e[n]; }); } var Ot = { placement: "bottom", modifiers: [], strategy: "absolute" }; function $t() { for (var t2 = arguments.length, e = new Array(t2), n = 0; n < t2; n++) e[n] = arguments[n]; return !e.some(function(r2) { return !(r2 && typeof r2.getBoundingClientRect == "function"); }); } function we(t2) { t2 === void 0 && (t2 = {}); var e = t2, n = e.defaultModifiers, r2 = n === void 0 ? [] : n, o = e.defaultOptions, i2 = o === void 0 ? Ot : o; return function(a, s, f) { f === void 0 && (f = i2); var c = { placement: "bottom", orderedModifiers: [], options: Object.assign({}, Ot, i2), modifiersData: {}, elements: { reference: a, popper: s }, attributes: {}, styles: {} }, u = [], m = false, v = { state: c, setOptions: function(p) { var g = typeof p == "function" ? p(c.options) : p; h2(), c.options = Object.assign({}, i2, c.options, g), c.scrollParents = { reference: Q(a) ? ce(a) : a.contextElement ? ce(a.contextElement) : [], popper: ce(s) }; var x = un(dn([].concat(r2, c.options.modifiers))); return c.orderedModifiers = x.filter(function(y) { return y.enabled; }), l(), v.update(); }, forceUpdate: function() { if (!m) { var p = c.elements, g = p.reference, x = p.popper; if ($t(g, x)) { c.rects = { reference: cn(g, se(x), c.options.strategy === "fixed"), popper: ke(x) }, c.reset = false, c.placement = c.options.placement, c.orderedModifiers.forEach(function(j) { return c.modifiersData[j.name] = Object.assign({}, j.data); }); for (var y = 0; y < c.orderedModifiers.length; y++) { if (c.reset === true) { c.reset = false, y = -1; continue; } var $2 = c.orderedModifiers[y], d2 = $2.fn, b = $2.options, w = b === void 0 ? {} : b, O = $2.name; typeof d2 == "function" && (c = d2({ state: c, options: w, name: O, instance: v }) || c); } } } }, update: ln(function() { return new Promise(function(p) { v.forceUpdate(), p(c); }); }), destroy: function() { h2(), m = true; } }; if (!$t(a, s)) return v; v.setOptions(f).then(function(p) { !m && f.onFirstUpdate && f.onFirstUpdate(p); }); function l() { c.orderedModifiers.forEach(function(p) { var g = p.name, x = p.options, y = x === void 0 ? {} : x, $2 = p.effect; if (typeof $2 == "function") { var d2 = $2({ state: c, name: g, instance: v, options: y }), b = function() { }; u.push(d2 || b); } }); } function h2() { u.forEach(function(p) { return p(); }), u = []; } return v; }; } we(); var mn = [Re, He, Me, Ae]; we({ defaultModifiers: mn }); var gn = [Re, He, Me, Ae, wt, vt, xt, pt, bt], yn = we({ defaultModifiers: gn }); const usePopper = (referenceElementRef, popperElementRef, opts = {}) => { const stateUpdater = { name: "updateState", enabled: true, phase: "write", fn: ({ state }) => { const derivedState = deriveState(state); Object.assign(states.value, derivedState); }, requires: ["computeStyles"] }; const options2 = computed$1(() => { const { onFirstUpdate, placement, strategy, modifiers } = unref(opts); return { onFirstUpdate, placement: placement || "bottom", strategy: strategy || "absolute", modifiers: [ ...modifiers || [], stateUpdater, { name: "applyStyles", enabled: false } ] }; }); const instanceRef = shallowRef(); const states = ref({ styles: { popper: { position: unref(options2).strategy, left: "0", top: "0" }, arrow: { position: "absolute" } }, attributes: {} }); const destroy = () => { if (!instanceRef.value) return; instanceRef.value.destroy(); instanceRef.value = void 0; }; watch(options2, (newOptions) => { const instance = unref(instanceRef); if (instance) { instance.setOptions(newOptions); } }, { deep: true }); watch([referenceElementRef, popperElementRef], ([referenceElement, popperElement]) => { destroy(); if (!referenceElement || !popperElement) return; instanceRef.value = yn(referenceElement, popperElement, unref(options2)); }); onBeforeUnmount(() => { destroy(); }); return { state: computed$1(() => { var _a2; return { ...((_a2 = unref(instanceRef)) == null ? void 0 : _a2.state) || {} }; }), styles: computed$1(() => unref(states).styles), attributes: computed$1(() => unref(states).attributes), update: () => { var _a2; return (_a2 = unref(instanceRef)) == null ? void 0 : _a2.update(); }, forceUpdate: () => { var _a2; return (_a2 = unref(instanceRef)) == null ? void 0 : _a2.forceUpdate(); }, instanceRef: computed$1(() => unref(instanceRef)) }; }; function deriveState(state) { const elements = Object.keys(state.elements); const styles = fromPairs(elements.map((element) => [element, state.styles[element] || {}])); const attributes = fromPairs(elements.map((element) => [element, state.attributes[element]])); return { styles, attributes }; } const useSameTarget = (handleClick) => { if (!handleClick) { return { onClick: NOOP, onMousedown: NOOP, onMouseup: NOOP }; } let mousedownTarget = false; let mouseupTarget = false; const onClick = (e) => { if (mousedownTarget && mouseupTarget) { handleClick(e); } mousedownTarget = mouseupTarget = false; }; const onMousedown = (e) => { mousedownTarget = e.target === e.currentTarget; }; const onMouseup = (e) => { mouseupTarget = e.target === e.currentTarget; }; return { onClick, onMousedown, onMouseup }; }; function useTimeout() { let timeoutHandle; const registerTimeout = (fn2, delay) => { cancelTimeout(); timeoutHandle = window.setTimeout(fn2, delay); }; const cancelTimeout = () => window.clearTimeout(timeoutHandle); tryOnScopeDispose(() => cancelTimeout()); return { registerTimeout, cancelTimeout }; } const defaultIdInjection = { prefix: Math.floor(Math.random() * 1e4), current: 0 }; const ID_INJECTION_KEY = Symbol("elIdInjection"); const useIdInjection = () => { return getCurrentInstance() ? inject(ID_INJECTION_KEY, defaultIdInjection) : defaultIdInjection; }; const useId = (deterministicId) => { const idInjection = useIdInjection(); const namespace = useGetDerivedNamespace(); const idRef = computed$1(() => unref(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`); return idRef; }; let registeredEscapeHandlers = []; const cachedHandler = (e) => { const event2 = e; if (event2.key === EVENT_CODE.esc) { registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event2)); } }; const useEscapeKeydown = (handler) => { onMounted(() => { if (registeredEscapeHandlers.length === 0) { document.addEventListener("keydown", cachedHandler); } if (isClient) registeredEscapeHandlers.push(handler); }); onBeforeUnmount(() => { registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler); if (registeredEscapeHandlers.length === 0) { if (isClient) document.removeEventListener("keydown", cachedHandler); } }); }; let cachedContainer; const usePopperContainerId = () => { const namespace = useGetDerivedNamespace(); const idInjection = useIdInjection(); const id = computed$1(() => { return `${namespace.value}-popper-container-${idInjection.prefix}`; }); const selector = computed$1(() => `#${id.value}`); return { id, selector }; }; const createContainer = (id) => { const container = document.createElement("div"); container.id = id; document.body.appendChild(container); return container; }; const usePopperContainer = () => { const { id, selector } = usePopperContainerId(); onBeforeMount(() => { if (!isClient) return; if (!cachedContainer && !document.body.querySelector(selector.value)) { cachedContainer = createContainer(id.value); } }); return { id, selector }; }; const useDelayedToggleProps = buildProps({ showAfter: { type: Number, default: 0 }, hideAfter: { type: Number, default: 200 }, autoClose: { type: Number, default: 0 } }); const useDelayedToggle = ({ showAfter, hideAfter, autoClose, open, close }) => { const { registerTimeout } = useTimeout(); const { registerTimeout: registerTimeoutForAutoClose, cancelTimeout: cancelTimeoutForAutoClose } = useTimeout(); const onOpen = (event2) => { registerTimeout(() => { open(event2); const _autoClose = unref(autoClose); if (isNumber(_autoClose) && _autoClose > 0) { registerTimeoutForAutoClose(() => { close(event2); }, _autoClose); } }, unref(showAfter)); }; const onClose = (event2) => { cancelTimeoutForAutoClose(); registerTimeout(() => { close(event2); }, unref(hideAfter)); }; return { onOpen, onClose }; }; const FORWARD_REF_INJECTION_KEY = Symbol("elForwardRef"); const useForwardRef = (forwardRef) => { const setForwardRef = (el) => { forwardRef.value = el; }; provide(FORWARD_REF_INJECTION_KEY, { setForwardRef }); }; const useForwardRefDirective = (setForwardRef) => { return { mounted(el) { setForwardRef(el); }, updated(el) { setForwardRef(el); }, unmounted() { setForwardRef(null); } }; }; const zIndex = ref(0); const defaultInitialZIndex = 2e3; const zIndexContextKey = Symbol("zIndexContextKey"); const useZIndex = (zIndexOverrides) => { const zIndexInjection = zIndexOverrides || inject(zIndexContextKey, void 0); const initialZIndex = computed$1(() => { const zIndexFromInjection = unref(zIndexInjection); return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex; }); const currentZIndex = computed$1(() => initialZIndex.value + zIndex.value); const nextZIndex = () => { zIndex.value++; return currentZIndex.value; }; return { initialZIndex, currentZIndex, nextZIndex }; }; function useCursor(input) { const selectionRef = ref(); function recordCursor() { if (input.value == void 0) return; const { selectionStart, selectionEnd, value } = input.value; if (selectionStart == null || selectionEnd == null) return; const beforeTxt = value.slice(0, Math.max(0, selectionStart)); const afterTxt = value.slice(Math.max(0, selectionEnd)); selectionRef.value = { selectionStart, selectionEnd, value, beforeTxt, afterTxt }; } function setCursor() { if (input.value == void 0 || selectionRef.value == void 0) return; const { value } = input.value; const { beforeTxt, afterTxt, selectionStart } = selectionRef.value; if (beforeTxt == void 0 || afterTxt == void 0 || selectionStart == void 0) return; let startPos = value.length; if (value.endsWith(afterTxt)) { startPos = value.length - afterTxt.length; } else if (value.startsWith(beforeTxt)) { startPos = beforeTxt.length; } else { const beforeLastChar = beforeTxt[selectionStart - 1]; const newIndex = value.indexOf(beforeLastChar, selectionStart - 1); if (newIndex !== -1) { startPos = newIndex + 1; } } input.value.setSelectionRange(startPos, startPos); } return [recordCursor, setCursor]; } const useSizeProp = buildProp({ type: String, values: componentSizes, required: false }); const SIZE_INJECTION_KEY = Symbol("size"); const useGlobalSize = () => { const injectedSize = inject(SIZE_INJECTION_KEY, {}); return computed$1(() => { return unref(injectedSize.size) || ""; }); }; const configProviderContextKey = Symbol(); const globalConfig = ref(); function useGlobalConfig(key, defaultValue2 = void 0) { const config = getCurrentInstance() ? inject(configProviderContextKey, globalConfig) : globalConfig; if (key) { return computed$1(() => { var _a2, _b; return (_b = (_a2 = config.value) == null ? void 0 : _a2[key]) != null ? _b : defaultValue2; }); } else { return config; } } const provideGlobalConfig = (config, app, global2 = false) => { var _a2; const inSetup = !!getCurrentInstance(); const oldConfig = inSetup ? useGlobalConfig() : void 0; const provideFn = (_a2 = app == null ? void 0 : app.provide) != null ? _a2 : inSetup ? provide : void 0; if (!provideFn) { return; } const context = computed$1(() => { const cfg = unref(config); if (!(oldConfig == null ? void 0 : oldConfig.value)) return cfg; return mergeConfig(oldConfig.value, cfg); }); provideFn(configProviderContextKey, context); provideFn(localeContextKey, computed$1(() => context.value.locale)); provideFn(namespaceContextKey, computed$1(() => context.value.namespace)); provideFn(zIndexContextKey, computed$1(() => context.value.zIndex)); provideFn(SIZE_INJECTION_KEY, { size: computed$1(() => context.value.size || "") }); if (global2 || !globalConfig.value) { globalConfig.value = context.value; } return context; }; const mergeConfig = (a, b) => { var _a2; const keys3 = [.../* @__PURE__ */ new Set([...keysOf(a), ...keysOf(b)])]; const obj = {}; for (const key of keys3) { obj[key] = (_a2 = b[key]) != null ? _a2 : a[key]; } return obj; }; const configProviderProps = buildProps({ a11y: { type: Boolean, default: true }, locale: { type: definePropType(Object) }, size: useSizeProp, button: { type: definePropType(Object) }, experimentalFeatures: { type: definePropType(Object) }, keyboardNavigation: { type: Boolean, default: true }, message: { type: definePropType(Object) }, zIndex: Number, namespace: { type: String, default: "el" } }); const messageConfig = {}; const ConfigProvider = defineComponent({ name: "ElConfigProvider", props: configProviderProps, setup(props, { slots }) { watch(() => props.message, (val) => { Object.assign(messageConfig, val != null ? val : {}); }, { immediate: true, deep: true }); const config = provideGlobalConfig(props); return () => renderSlot(slots, "default", { config: config == null ? void 0 : config.value }); } }); const ElConfigProvider = withInstall(ConfigProvider); var _export_sfc$1 = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const iconProps = buildProps({ size: { type: definePropType([Number, String]) }, color: { type: String } }); const __default__$o = defineComponent({ name: "ElIcon", inheritAttrs: false }); const _sfc_main$B = /* @__PURE__ */ defineComponent({ ...__default__$o, props: iconProps, setup(__props) { const props = __props; const ns = useNamespace("icon"); const style = computed$1(() => { const { size, color: color2 } = props; if (!size && !color2) return {}; return { fontSize: isUndefined(size) ? void 0 : addUnit(size), "--color": color2 }; }); return (_ctx, _cache) => { return openBlock(), createElementBlock("i", mergeProps({ class: unref(ns).b(), style: unref(style) }, _ctx.$attrs), [ renderSlot(_ctx.$slots, "default") ], 16); }; } }); var Icon = /* @__PURE__ */ _export_sfc$1(_sfc_main$B, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/icon/src/icon.vue"]]); const ElIcon = withInstall(Icon); const formContextKey = Symbol("formContextKey"); const formItemContextKey = Symbol("formItemContextKey"); const useFormSize = (fallback, ignore = {}) => { const emptyRef = ref(void 0); const size = ignore.prop ? emptyRef : useProp("size"); const globalConfig2 = ignore.global ? emptyRef : useGlobalSize(); const form = ignore.form ? { size: void 0 } : inject(formContextKey, void 0); const formItem = ignore.formItem ? { size: void 0 } : inject(formItemContextKey, void 0); return computed$1(() => size.value || unref(fallback) || (formItem == null ? void 0 : formItem.size) || (form == null ? void 0 : form.size) || globalConfig2.value || ""); }; const useFormDisabled = (fallback) => { const disabled = useProp("disabled"); const form = inject(formContextKey, void 0); return computed$1(() => disabled.value || unref(fallback) || (form == null ? void 0 : form.disabled) || false); }; const useFormItem = () => { const form = inject(formContextKey, void 0); const formItem = inject(formItemContextKey, void 0); return { form, formItem }; }; const useFormItemInputId = (props, { formItemContext, disableIdGeneration, disableIdManagement }) => { if (!disableIdGeneration) { disableIdGeneration = ref(false); } if (!disableIdManagement) { disableIdManagement = ref(false); } const inputId = ref(); let idUnwatch = void 0; const isLabeledByFormItem = computed$1(() => { var _a2; return !!(!props.label && formItemContext && formItemContext.inputIds && ((_a2 = formItemContext.inputIds) == null ? void 0 : _a2.length) <= 1); }); onMounted(() => { idUnwatch = watch([toRef(props, "id"), disableIdGeneration], ([id, disableIdGeneration2]) => { const newId = id != null ? id : !disableIdGeneration2 ? useId().value : void 0; if (newId !== inputId.value) { if (formItemContext == null ? void 0 : formItemContext.removeInputId) { inputId.value && formItemContext.removeInputId(inputId.value); if (!(disableIdManagement == null ? void 0 : disableIdManagement.value) && !disableIdGeneration2 && newId) { formItemContext.addInputId(newId); } } inputId.value = newId; } }, { immediate: true }); }); onUnmounted(() => { idUnwatch && idUnwatch(); if (formItemContext == null ? void 0 : formItemContext.removeInputId) { inputId.value && formItemContext.removeInputId(inputId.value); } }); return { isLabeledByFormItem, inputId }; }; let hiddenTextarea = void 0; const HIDDEN_STYLE = ` height:0 !important; visibility:hidden !important; ${isFirefox() ? "" : "overflow:hidden !important;"} position:absolute !important; z-index:-1000 !important; top:0 !important; right:0 !important; `; const CONTEXT_STYLE = [ "letter-spacing", "line-height", "padding-top", "padding-bottom", "font-family", "font-weight", "font-size", "text-rendering", "text-transform", "width", "text-indent", "padding-left", "padding-right", "border-width", "box-sizing" ]; function calculateNodeStyling(targetElement) { const style = window.getComputedStyle(targetElement); const boxSizing = style.getPropertyValue("box-sizing"); const paddingSize = Number.parseFloat(style.getPropertyValue("padding-bottom")) + Number.parseFloat(style.getPropertyValue("padding-top")); const borderSize = Number.parseFloat(style.getPropertyValue("border-bottom-width")) + Number.parseFloat(style.getPropertyValue("border-top-width")); const contextStyle = CONTEXT_STYLE.map((name) => `${name}:${style.getPropertyValue(name)}`).join(";"); return { contextStyle, paddingSize, borderSize, boxSizing }; } function calcTextareaHeight(targetElement, minRows = 1, maxRows) { var _a2; if (!hiddenTextarea) { hiddenTextarea = document.createElement("textarea"); document.body.appendChild(hiddenTextarea); } const { paddingSize, borderSize, boxSizing, contextStyle } = calculateNodeStyling(targetElement); hiddenTextarea.setAttribute("style", `${contextStyle};${HIDDEN_STYLE}`); hiddenTextarea.value = targetElement.value || targetElement.placeholder || ""; let height2 = hiddenTextarea.scrollHeight; const result = {}; if (boxSizing === "border-box") { height2 = height2 + borderSize; } else if (boxSizing === "content-box") { height2 = height2 - paddingSize; } hiddenTextarea.value = ""; const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize; if (isNumber(minRows)) { let minHeight = singleRowHeight * minRows; if (boxSizing === "border-box") { minHeight = minHeight + paddingSize + borderSize; } height2 = Math.max(minHeight, height2); result.minHeight = `${minHeight}px`; } if (isNumber(maxRows)) { let maxHeight = singleRowHeight * maxRows; if (boxSizing === "border-box") { maxHeight = maxHeight + paddingSize + borderSize; } height2 = Math.min(maxHeight, height2); } result.height = `${height2}px`; (_a2 = hiddenTextarea.parentNode) == null ? void 0 : _a2.removeChild(hiddenTextarea); hiddenTextarea = void 0; return result; } const inputProps = buildProps({ id: { type: String, default: void 0 }, size: useSizeProp, disabled: Boolean, modelValue: { type: definePropType([ String, Number, Object ]), default: "" }, type: { type: String, default: "text" }, resize: { type: String, values: ["none", "both", "horizontal", "vertical"] }, autosize: { type: definePropType([Boolean, Object]), default: false }, autocomplete: { type: String, default: "off" }, formatter: { type: Function }, parser: { type: Function }, placeholder: { type: String }, form: { type: String }, readonly: { type: Boolean, default: false }, clearable: { type: Boolean, default: false }, showPassword: { type: Boolean, default: false }, showWordLimit: { type: Boolean, default: false }, suffixIcon: { type: iconPropType }, prefixIcon: { type: iconPropType }, containerRole: { type: String, default: void 0 }, label: { type: String, default: void 0 }, tabindex: { type: [String, Number], default: 0 }, validateEvent: { type: Boolean, default: true }, inputStyle: { type: definePropType([Object, Array, String]), default: () => mutable({}) } }); const inputEmits = { [UPDATE_MODEL_EVENT]: (value) => isString(value), input: (value) => isString(value), change: (value) => isString(value), focus: (evt) => evt instanceof FocusEvent, blur: (evt) => evt instanceof FocusEvent, clear: () => true, mouseleave: (evt) => evt instanceof MouseEvent, mouseenter: (evt) => evt instanceof MouseEvent, keydown: (evt) => evt instanceof Event, compositionstart: (evt) => evt instanceof CompositionEvent, compositionupdate: (evt) => evt instanceof CompositionEvent, compositionend: (evt) => evt instanceof CompositionEvent }; const _hoisted_1$g = ["role"]; const _hoisted_2$a = ["id", "type", "disabled", "formatter", "parser", "readonly", "autocomplete", "tabindex", "aria-label", "placeholder", "form"]; const _hoisted_3$6 = ["id", "tabindex", "disabled", "readonly", "autocomplete", "aria-label", "placeholder", "form"]; const __default__$n = defineComponent({ name: "ElInput", inheritAttrs: false }); const _sfc_main$A = /* @__PURE__ */ defineComponent({ ...__default__$n, props: inputProps, emits: inputEmits, setup(__props, { expose, emit }) { const props = __props; const rawAttrs = useAttrs$1(); const slots = useSlots(); const containerAttrs = computed$1(() => { const comboBoxAttrs = {}; if (props.containerRole === "combobox") { comboBoxAttrs["aria-haspopup"] = rawAttrs["aria-haspopup"]; comboBoxAttrs["aria-owns"] = rawAttrs["aria-owns"]; comboBoxAttrs["aria-expanded"] = rawAttrs["aria-expanded"]; } return comboBoxAttrs; }); const containerKls = computed$1(() => [ props.type === "textarea" ? nsTextarea.b() : nsInput.b(), nsInput.m(inputSize.value), nsInput.is("disabled", inputDisabled.value), nsInput.is("exceed", inputExceed.value), { [nsInput.b("group")]: slots.prepend || slots.append, [nsInput.bm("group", "append")]: slots.append, [nsInput.bm("group", "prepend")]: slots.prepend, [nsInput.m("prefix")]: slots.prefix || props.prefixIcon, [nsInput.m("suffix")]: slots.suffix || props.suffixIcon || props.clearable || props.showPassword, [nsInput.bm("suffix", "password-clear")]: showClear.value && showPwdVisible.value }, rawAttrs.class ]); const wrapperKls = computed$1(() => [ nsInput.e("wrapper"), nsInput.is("focus", focused.value) ]); const attrs = useAttrs({ excludeKeys: computed$1(() => { return Object.keys(containerAttrs.value); }) }); const { form, formItem } = useFormItem(); const { inputId } = useFormItemInputId(props, { formItemContext: formItem }); const inputSize = useFormSize(); const inputDisabled = useFormDisabled(); const nsInput = useNamespace("input"); const nsTextarea = useNamespace("textarea"); const input = shallowRef(); const textarea = shallowRef(); const focused = ref(false); const hovering = ref(false); const isComposing = ref(false); const passwordVisible = ref(false); const countStyle = ref(); const textareaCalcStyle = shallowRef(props.inputStyle); const _ref = computed$1(() => input.value || textarea.value); const needStatusIcon = computed$1(() => { var _a2; return (_a2 = form == null ? void 0 : form.statusIcon) != null ? _a2 : false; }); const validateState = computed$1(() => (formItem == null ? void 0 : formItem.validateState) || ""); const validateIcon = computed$1(() => validateState.value && ValidateComponentsMap[validateState.value]); const passwordIcon = computed$1(() => passwordVisible.value ? view_default : hide_default); const containerStyle = computed$1(() => [ rawAttrs.style, props.inputStyle ]); const textareaStyle = computed$1(() => [ props.inputStyle, textareaCalcStyle.value, { resize: props.resize } ]); const nativeInputValue = computed$1(() => isNil(props.modelValue) ? "" : String(props.modelValue)); const showClear = computed$1(() => props.clearable && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (focused.value || hovering.value)); const showPwdVisible = computed$1(() => props.showPassword && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (!!nativeInputValue.value || focused.value)); const isWordLimitVisible = computed$1(() => props.showWordLimit && !!attrs.value.maxlength && (props.type === "text" || props.type === "textarea") && !inputDisabled.value && !props.readonly && !props.showPassword); const textLength = computed$1(() => nativeInputValue.value.length); const inputExceed = computed$1(() => !!isWordLimitVisible.value && textLength.value > Number(attrs.value.maxlength)); const suffixVisible = computed$1(() => !!slots.suffix || !!props.suffixIcon || showClear.value || props.showPassword || isWordLimitVisible.value || !!validateState.value && needStatusIcon.value); const [recordCursor, setCursor] = useCursor(input); useResizeObserver(textarea, (entries) => { onceInitSizeTextarea(); if (!isWordLimitVisible.value || props.resize !== "both") return; const entry = entries[0]; const { width: width2 } = entry.contentRect; countStyle.value = { right: `calc(100% - ${width2 + 15 + 6}px)` }; }); const resizeTextarea = () => { const { type: type2, autosize } = props; if (!isClient || type2 !== "textarea" || !textarea.value) return; if (autosize) { const minRows = isObject$5(autosize) ? autosize.minRows : void 0; const maxRows = isObject$5(autosize) ? autosize.maxRows : void 0; const textareaStyle2 = calcTextareaHeight(textarea.value, minRows, maxRows); textareaCalcStyle.value = { overflowY: "hidden", ...textareaStyle2 }; nextTick(() => { textarea.value.offsetHeight; textareaCalcStyle.value = textareaStyle2; }); } else { textareaCalcStyle.value = { minHeight: calcTextareaHeight(textarea.value).minHeight }; } }; const createOnceInitResize = (resizeTextarea2) => { let isInit = false; return () => { var _a2; if (isInit || !props.autosize) return; const isElHidden = ((_a2 = textarea.value) == null ? void 0 : _a2.offsetParent) === null; if (!isElHidden) { resizeTextarea2(); isInit = true; } }; }; const onceInitSizeTextarea = createOnceInitResize(resizeTextarea); const setNativeInputValue = () => { const input2 = _ref.value; if (!input2 || input2.value === nativeInputValue.value) return; input2.value = nativeInputValue.value; }; const handleInput = async (event2) => { recordCursor(); let { value } = event2.target; if (props.formatter) { value = props.parser ? props.parser(value) : value; value = props.formatter(value); } if (isComposing.value) return; if (value === nativeInputValue.value) { setNativeInputValue(); return; } emit(UPDATE_MODEL_EVENT, value); emit("input", value); await nextTick(); setNativeInputValue(); setCursor(); }; const handleChange = (event2) => { emit("change", event2.target.value); }; const handleCompositionStart = (event2) => { emit("compositionstart", event2); isComposing.value = true; }; const handleCompositionUpdate = (event2) => { var _a2; emit("compositionupdate", event2); const text = (_a2 = event2.target) == null ? void 0 : _a2.value; const lastCharacter = text[text.length - 1] || ""; isComposing.value = !isKorean(lastCharacter); }; const handleCompositionEnd = (event2) => { emit("compositionend", event2); if (isComposing.value) { isComposing.value = false; handleInput(event2); } }; const handlePasswordVisible = () => { passwordVisible.value = !passwordVisible.value; focus(); }; const focus = async () => { var _a2; await nextTick(); (_a2 = _ref.value) == null ? void 0 : _a2.focus(); }; const blur = () => { var _a2; return (_a2 = _ref.value) == null ? void 0 : _a2.blur(); }; const handleFocus = (event2) => { focused.value = true; emit("focus", event2); }; const handleBlur = (event2) => { var _a2; focused.value = false; emit("blur", event2); if (props.validateEvent) { (_a2 = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a2.call(formItem, "blur").catch((err) => debugWarn()); } }; const handleMouseLeave = (evt) => { hovering.value = false; emit("mouseleave", evt); }; const handleMouseEnter = (evt) => { hovering.value = true; emit("mouseenter", evt); }; const handleKeydown = (evt) => { emit("keydown", evt); }; const select = () => { var _a2; (_a2 = _ref.value) == null ? void 0 : _a2.select(); }; const clear = () => { emit(UPDATE_MODEL_EVENT, ""); emit("change", ""); emit("clear"); emit("input", ""); }; watch(() => props.modelValue, () => { var _a2; nextTick(() => resizeTextarea()); if (props.validateEvent) { (_a2 = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a2.call(formItem, "change").catch((err) => debugWarn()); } }); watch(nativeInputValue, () => setNativeInputValue()); watch(() => props.type, async () => { await nextTick(); setNativeInputValue(); resizeTextarea(); }); onMounted(() => { if (!props.formatter && props.parser) ; setNativeInputValue(); nextTick(resizeTextarea); }); expose({ input, textarea, ref: _ref, textareaStyle, autosize: toRef(props, "autosize"), focus, blur, select, clear, resizeTextarea }); return (_ctx, _cache) => { return withDirectives((openBlock(), createElementBlock("div", mergeProps(unref(containerAttrs), { class: unref(containerKls), style: unref(containerStyle), role: _ctx.containerRole, onMouseenter: handleMouseEnter, onMouseleave: handleMouseLeave }), [ createCommentVNode(" input "), _ctx.type !== "textarea" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ createCommentVNode(" prepend slot "), _ctx.$slots.prepend ? (openBlock(), createElementBlock("div", { key: 0, class: normalizeClass(unref(nsInput).be("group", "prepend")) }, [ renderSlot(_ctx.$slots, "prepend") ], 2)) : createCommentVNode("v-if", true), createElementVNode("div", { class: normalizeClass(unref(wrapperKls)) }, [ createCommentVNode(" prefix slot "), _ctx.$slots.prefix || _ctx.prefixIcon ? (openBlock(), createElementBlock("span", { key: 0, class: normalizeClass(unref(nsInput).e("prefix")) }, [ createElementVNode("span", { class: normalizeClass(unref(nsInput).e("prefix-inner")), onClick: focus }, [ renderSlot(_ctx.$slots, "prefix"), _ctx.prefixIcon ? (openBlock(), createBlock(unref(ElIcon), { key: 0, class: normalizeClass(unref(nsInput).e("icon")) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.prefixIcon))) ]), _: 1 }, 8, ["class"])) : createCommentVNode("v-if", true) ], 2) ], 2)) : createCommentVNode("v-if", true), createElementVNode("input", mergeProps({ id: unref(inputId), ref_key: "input", ref: input, class: unref(nsInput).e("inner") }, unref(attrs), { type: _ctx.showPassword ? passwordVisible.value ? "text" : "password" : _ctx.type, disabled: unref(inputDisabled), formatter: _ctx.formatter, parser: _ctx.parser, readonly: _ctx.readonly, autocomplete: _ctx.autocomplete, tabindex: _ctx.tabindex, "aria-label": _ctx.label, placeholder: _ctx.placeholder, style: _ctx.inputStyle, form: props.form, onCompositionstart: handleCompositionStart, onCompositionupdate: handleCompositionUpdate, onCompositionend: handleCompositionEnd, onInput: handleInput, onFocus: handleFocus, onBlur: handleBlur, onChange: handleChange, onKeydown: handleKeydown }), null, 16, _hoisted_2$a), createCommentVNode(" suffix slot "), unref(suffixVisible) ? (openBlock(), createElementBlock("span", { key: 1, class: normalizeClass(unref(nsInput).e("suffix")) }, [ createElementVNode("span", { class: normalizeClass(unref(nsInput).e("suffix-inner")), onClick: focus }, [ !unref(showClear) || !unref(showPwdVisible) || !unref(isWordLimitVisible) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ renderSlot(_ctx.$slots, "suffix"), _ctx.suffixIcon ? (openBlock(), createBlock(unref(ElIcon), { key: 0, class: normalizeClass(unref(nsInput).e("icon")) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.suffixIcon))) ]), _: 1 }, 8, ["class"])) : createCommentVNode("v-if", true) ], 64)) : createCommentVNode("v-if", true), unref(showClear) ? (openBlock(), createBlock(unref(ElIcon), { key: 1, class: normalizeClass([unref(nsInput).e("icon"), unref(nsInput).e("clear")]), onMousedown: withModifiers(unref(NOOP), ["prevent"]), onClick: clear }, { default: withCtx(() => [ createVNode(unref(circle_close_default)) ]), _: 1 }, 8, ["class", "onMousedown"])) : createCommentVNode("v-if", true), unref(showPwdVisible) ? (openBlock(), createBlock(unref(ElIcon), { key: 2, class: normalizeClass([unref(nsInput).e("icon"), unref(nsInput).e("password")]), onClick: handlePasswordVisible }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(unref(passwordIcon)))) ]), _: 1 }, 8, ["class"])) : createCommentVNode("v-if", true), unref(isWordLimitVisible) ? (openBlock(), createElementBlock("span", { key: 3, class: normalizeClass(unref(nsInput).e("count")) }, [ createElementVNode("span", { class: normalizeClass(unref(nsInput).e("count-inner")) }, toDisplayString(unref(textLength)) + " / " + toDisplayString(unref(attrs).maxlength), 3) ], 2)) : createCommentVNode("v-if", true), unref(validateState) && unref(validateIcon) && unref(needStatusIcon) ? (openBlock(), createBlock(unref(ElIcon), { key: 4, class: normalizeClass([ unref(nsInput).e("icon"), unref(nsInput).e("validateIcon"), unref(nsInput).is("loading", unref(validateState) === "validating") ]) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(unref(validateIcon)))) ]), _: 1 }, 8, ["class"])) : createCommentVNode("v-if", true) ], 2) ], 2)) : createCommentVNode("v-if", true) ], 2), createCommentVNode(" append slot "), _ctx.$slots.append ? (openBlock(), createElementBlock("div", { key: 1, class: normalizeClass(unref(nsInput).be("group", "append")) }, [ renderSlot(_ctx.$slots, "append") ], 2)) : createCommentVNode("v-if", true) ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [ createCommentVNode(" textarea "), createElementVNode("textarea", mergeProps({ id: unref(inputId), ref_key: "textarea", ref: textarea, class: unref(nsTextarea).e("inner") }, unref(attrs), { tabindex: _ctx.tabindex, disabled: unref(inputDisabled), readonly: _ctx.readonly, autocomplete: _ctx.autocomplete, style: unref(textareaStyle), "aria-label": _ctx.label, placeholder: _ctx.placeholder, form: props.form, onCompositionstart: handleCompositionStart, onCompositionupdate: handleCompositionUpdate, onCompositionend: handleCompositionEnd, onInput: handleInput, onFocus: handleFocus, onBlur: handleBlur, onChange: handleChange, onKeydown: handleKeydown }), null, 16, _hoisted_3$6), unref(isWordLimitVisible) ? (openBlock(), createElementBlock("span", { key: 0, style: normalizeStyle(countStyle.value), class: normalizeClass(unref(nsInput).e("count")) }, toDisplayString(unref(textLength)) + " / " + toDisplayString(unref(attrs).maxlength), 7)) : createCommentVNode("v-if", true) ], 64)) ], 16, _hoisted_1$g)), [ [vShow, _ctx.type !== "hidden"] ]); }; } }); var Input = /* @__PURE__ */ _export_sfc$1(_sfc_main$A, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/input/src/input.vue"]]); const ElInput = withInstall(Input); const GAP = 4; const BAR_MAP = { vertical: { offset: "offsetHeight", scroll: "scrollTop", scrollSize: "scrollHeight", size: "height", key: "vertical", axis: "Y", client: "clientY", direction: "top" }, horizontal: { offset: "offsetWidth", scroll: "scrollLeft", scrollSize: "scrollWidth", size: "width", key: "horizontal", axis: "X", client: "clientX", direction: "left" } }; const renderThumbStyle = ({ move, size, bar }) => ({ [bar.size]: size, transform: `translate${bar.axis}(${move}%)` }); const scrollbarContextKey = Symbol("scrollbarContextKey"); const thumbProps = buildProps({ vertical: Boolean, size: String, move: Number, ratio: { type: Number, required: true }, always: Boolean }); const COMPONENT_NAME$4 = "Thumb"; const _sfc_main$z = /* @__PURE__ */ defineComponent({ __name: "thumb", props: thumbProps, setup(__props) { const props = __props; const scrollbar = inject(scrollbarContextKey); const ns = useNamespace("scrollbar"); if (!scrollbar) throwError(COMPONENT_NAME$4, "can not inject scrollbar context"); const instance = ref(); const thumb = ref(); const thumbState = ref({}); const visible = ref(false); let cursorDown = false; let cursorLeave = false; let originalOnSelectStart = isClient ? document.onselectstart : null; const bar = computed$1(() => BAR_MAP[props.vertical ? "vertical" : "horizontal"]); const thumbStyle = computed$1(() => renderThumbStyle({ size: props.size, move: props.move, bar: bar.value })); const offsetRatio = computed$1(() => instance.value[bar.value.offset] ** 2 / scrollbar.wrapElement[bar.value.scrollSize] / props.ratio / thumb.value[bar.value.offset]); const clickThumbHandler = (e) => { var _a2; e.stopPropagation(); if (e.ctrlKey || [1, 2].includes(e.button)) return; (_a2 = window.getSelection()) == null ? void 0 : _a2.removeAllRanges(); startDrag(e); const el = e.currentTarget; if (!el) return; thumbState.value[bar.value.axis] = el[bar.value.offset] - (e[bar.value.client] - el.getBoundingClientRect()[bar.value.direction]); }; const clickTrackHandler = (e) => { if (!thumb.value || !instance.value || !scrollbar.wrapElement) return; const offset = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]); const thumbHalf = thumb.value[bar.value.offset] / 2; const thumbPositionPercentage = (offset - thumbHalf) * 100 * offsetRatio.value / instance.value[bar.value.offset]; scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100; }; const startDrag = (e) => { e.stopImmediatePropagation(); cursorDown = true; document.addEventListener("mousemove", mouseMoveDocumentHandler); document.addEventListener("mouseup", mouseUpDocumentHandler); originalOnSelectStart = document.onselectstart; document.onselectstart = () => false; }; const mouseMoveDocumentHandler = (e) => { if (!instance.value || !thumb.value) return; if (cursorDown === false) return; const prevPage = thumbState.value[bar.value.axis]; if (!prevPage) return; const offset = (instance.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1; const thumbClickPosition = thumb.value[bar.value.offset] - prevPage; const thumbPositionPercentage = (offset - thumbClickPosition) * 100 * offsetRatio.value / instance.value[bar.value.offset]; scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100; }; const mouseUpDocumentHandler = () => { cursorDown = false; thumbState.value[bar.value.axis] = 0; document.removeEventListener("mousemove", mouseMoveDocumentHandler); document.removeEventListener("mouseup", mouseUpDocumentHandler); restoreOnselectstart(); if (cursorLeave) visible.value = false; }; const mouseMoveScrollbarHandler = () => { cursorLeave = false; visible.value = !!props.size; }; const mouseLeaveScrollbarHandler = () => { cursorLeave = true; visible.value = cursorDown; }; onBeforeUnmount(() => { restoreOnselectstart(); document.removeEventListener("mouseup", mouseUpDocumentHandler); }); const restoreOnselectstart = () => { if (document.onselectstart !== originalOnSelectStart) document.onselectstart = originalOnSelectStart; }; useEventListener(toRef(scrollbar, "scrollbarElement"), "mousemove", mouseMoveScrollbarHandler); useEventListener(toRef(scrollbar, "scrollbarElement"), "mouseleave", mouseLeaveScrollbarHandler); return (_ctx, _cache) => { return openBlock(), createBlock(Transition, { name: unref(ns).b("fade"), persisted: "" }, { default: withCtx(() => [ withDirectives(createElementVNode("div", { ref_key: "instance", ref: instance, class: normalizeClass([unref(ns).e("bar"), unref(ns).is(unref(bar).key)]), onMousedown: clickTrackHandler }, [ createElementVNode("div", { ref_key: "thumb", ref: thumb, class: normalizeClass(unref(ns).e("thumb")), style: normalizeStyle(unref(thumbStyle)), onMousedown: clickThumbHandler }, null, 38) ], 34), [ [vShow, _ctx.always || visible.value] ]) ]), _: 1 }, 8, ["name"]); }; } }); var Thumb = /* @__PURE__ */ _export_sfc$1(_sfc_main$z, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/scrollbar/src/thumb.vue"]]); const barProps = buildProps({ always: { type: Boolean, default: true }, width: String, height: String, ratioX: { type: Number, default: 1 }, ratioY: { type: Number, default: 1 } }); const _sfc_main$y = /* @__PURE__ */ defineComponent({ __name: "bar", props: barProps, setup(__props, { expose }) { const props = __props; const moveX = ref(0); const moveY = ref(0); const handleScroll = (wrap) => { if (wrap) { const offsetHeight = wrap.offsetHeight - GAP; const offsetWidth = wrap.offsetWidth - GAP; moveY.value = wrap.scrollTop * 100 / offsetHeight * props.ratioY; moveX.value = wrap.scrollLeft * 100 / offsetWidth * props.ratioX; } }; expose({ handleScroll }); return (_ctx, _cache) => { return openBlock(), createElementBlock(Fragment, null, [ createVNode(Thumb, { move: moveX.value, ratio: _ctx.ratioX, size: _ctx.width, always: _ctx.always }, null, 8, ["move", "ratio", "size", "always"]), createVNode(Thumb, { move: moveY.value, ratio: _ctx.ratioY, size: _ctx.height, vertical: "", always: _ctx.always }, null, 8, ["move", "ratio", "size", "always"]) ], 64); }; } }); var Bar = /* @__PURE__ */ _export_sfc$1(_sfc_main$y, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/scrollbar/src/bar.vue"]]); const scrollbarProps = buildProps({ height: { type: [String, Number], default: "" }, maxHeight: { type: [String, Number], default: "" }, native: { type: Boolean, default: false }, wrapStyle: { type: definePropType([String, Object, Array]), default: "" }, wrapClass: { type: [String, Array], default: "" }, viewClass: { type: [String, Array], default: "" }, viewStyle: { type: [String, Array, Object], default: "" }, noresize: Boolean, tag: { type: String, default: "div" }, always: Boolean, minSize: { type: Number, default: 20 } }); const scrollbarEmits = { scroll: ({ scrollTop, scrollLeft }) => [scrollTop, scrollLeft].every(isNumber) }; const COMPONENT_NAME$3 = "ElScrollbar"; const __default__$m = defineComponent({ name: COMPONENT_NAME$3 }); const _sfc_main$x = /* @__PURE__ */ defineComponent({ ...__default__$m, props: scrollbarProps, emits: scrollbarEmits, setup(__props, { expose, emit }) { const props = __props; const ns = useNamespace("scrollbar"); let stopResizeObserver = void 0; let stopResizeListener = void 0; const scrollbarRef = ref(); const wrapRef = ref(); const resizeRef = ref(); const sizeWidth = ref("0"); const sizeHeight = ref("0"); const barRef = ref(); const ratioY = ref(1); const ratioX = ref(1); const style = computed$1(() => { const style2 = {}; if (props.height) style2.height = addUnit(props.height); if (props.maxHeight) style2.maxHeight = addUnit(props.maxHeight); return [props.wrapStyle, style2]; }); const wrapKls = computed$1(() => { return [ props.wrapClass, ns.e("wrap"), { [ns.em("wrap", "hidden-default")]: !props.native } ]; }); const resizeKls = computed$1(() => { return [ns.e("view"), props.viewClass]; }); const handleScroll = () => { var _a2; if (wrapRef.value) { (_a2 = barRef.value) == null ? void 0 : _a2.handleScroll(wrapRef.value); emit("scroll", { scrollTop: wrapRef.value.scrollTop, scrollLeft: wrapRef.value.scrollLeft }); } }; function scrollTo(arg1, arg2) { if (isObject$5(arg1)) { wrapRef.value.scrollTo(arg1); } else if (isNumber(arg1) && isNumber(arg2)) { wrapRef.value.scrollTo(arg1, arg2); } } const setScrollTop = (value) => { if (!isNumber(value)) { return; } wrapRef.value.scrollTop = value; }; const setScrollLeft = (value) => { if (!isNumber(value)) { return; } wrapRef.value.scrollLeft = value; }; const update = () => { if (!wrapRef.value) return; const offsetHeight = wrapRef.value.offsetHeight - GAP; const offsetWidth = wrapRef.value.offsetWidth - GAP; const originalHeight = offsetHeight ** 2 / wrapRef.value.scrollHeight; const originalWidth = offsetWidth ** 2 / wrapRef.value.scrollWidth; const height2 = Math.max(originalHeight, props.minSize); const width2 = Math.max(originalWidth, props.minSize); ratioY.value = originalHeight / (offsetHeight - originalHeight) / (height2 / (offsetHeight - height2)); ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width2 / (offsetWidth - width2)); sizeHeight.value = height2 + GAP < offsetHeight ? `${height2}px` : ""; sizeWidth.value = width2 + GAP < offsetWidth ? `${width2}px` : ""; }; watch(() => props.noresize, (noresize) => { if (noresize) { stopResizeObserver == null ? void 0 : stopResizeObserver(); stopResizeListener == null ? void 0 : stopResizeListener(); } else { ({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update)); stopResizeListener = useEventListener("resize", update); } }, { immediate: true }); watch(() => [props.maxHeight, props.height], () => { if (!props.native) nextTick(() => { var _a2; update(); if (wrapRef.value) { (_a2 = barRef.value) == null ? void 0 : _a2.handleScroll(wrapRef.value); } }); }); provide(scrollbarContextKey, reactive({ scrollbarElement: scrollbarRef, wrapElement: wrapRef })); onMounted(() => { if (!props.native) nextTick(() => { update(); }); }); onUpdated(() => update()); expose({ wrapRef, update, scrollTo, setScrollTop, setScrollLeft, handleScroll }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { ref_key: "scrollbarRef", ref: scrollbarRef, class: normalizeClass(unref(ns).b()) }, [ createElementVNode("div", { ref_key: "wrapRef", ref: wrapRef, class: normalizeClass(unref(wrapKls)), style: normalizeStyle(unref(style)), onScroll: handleScroll }, [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), { ref_key: "resizeRef", ref: resizeRef, class: normalizeClass(unref(resizeKls)), style: normalizeStyle(_ctx.viewStyle) }, { default: withCtx(() => [ renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["class", "style"])) ], 38), !_ctx.native ? (openBlock(), createBlock(Bar, { key: 0, ref_key: "barRef", ref: barRef, height: sizeHeight.value, width: sizeWidth.value, always: _ctx.always, "ratio-x": ratioX.value, "ratio-y": ratioY.value }, null, 8, ["height", "width", "always", "ratio-x", "ratio-y"])) : createCommentVNode("v-if", true) ], 2); }; } }); var Scrollbar = /* @__PURE__ */ _export_sfc$1(_sfc_main$x, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/scrollbar/src/scrollbar.vue"]]); const ElScrollbar = withInstall(Scrollbar); const POPPER_INJECTION_KEY = Symbol("popper"); const POPPER_CONTENT_INJECTION_KEY = Symbol("popperContent"); const roleTypes = [ "dialog", "grid", "group", "listbox", "menu", "navigation", "tooltip", "tree" ]; const popperProps = buildProps({ role: { type: String, values: roleTypes, default: "tooltip" } }); const __default__$l = defineComponent({ name: "ElPopper", inheritAttrs: false }); const _sfc_main$w = /* @__PURE__ */ defineComponent({ ...__default__$l, props: popperProps, setup(__props, { expose }) { const props = __props; const triggerRef2 = ref(); const popperInstanceRef = ref(); const contentRef = ref(); const referenceRef = ref(); const role = computed$1(() => props.role); const popperProvides = { triggerRef: triggerRef2, popperInstanceRef, contentRef, referenceRef, role }; expose(popperProvides); provide(POPPER_INJECTION_KEY, popperProvides); return (_ctx, _cache) => { return renderSlot(_ctx.$slots, "default"); }; } }); var Popper = /* @__PURE__ */ _export_sfc$1(_sfc_main$w, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/popper/src/popper.vue"]]); const popperArrowProps = buildProps({ arrowOffset: { type: Number, default: 5 } }); const __default__$k = defineComponent({ name: "ElPopperArrow", inheritAttrs: false }); const _sfc_main$v = /* @__PURE__ */ defineComponent({ ...__default__$k, props: popperArrowProps, setup(__props, { expose }) { const props = __props; const ns = useNamespace("popper"); const { arrowOffset, arrowRef, arrowStyle } = inject(POPPER_CONTENT_INJECTION_KEY, void 0); watch(() => props.arrowOffset, (val) => { arrowOffset.value = val; }); onBeforeUnmount(() => { arrowRef.value = void 0; }); expose({ arrowRef }); return (_ctx, _cache) => { return openBlock(), createElementBlock("span", { ref_key: "arrowRef", ref: arrowRef, class: normalizeClass(unref(ns).e("arrow")), style: normalizeStyle(unref(arrowStyle)), "data-popper-arrow": "" }, null, 6); }; } }); var ElPopperArrow = /* @__PURE__ */ _export_sfc$1(_sfc_main$v, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/popper/src/arrow.vue"]]); const NAME = "ElOnlyChild"; const OnlyChild = defineComponent({ name: NAME, setup(_, { slots, attrs }) { var _a2; const forwardRefInjection = inject(FORWARD_REF_INJECTION_KEY); const forwardRefDirective = useForwardRefDirective((_a2 = forwardRefInjection == null ? void 0 : forwardRefInjection.setForwardRef) != null ? _a2 : NOOP); return () => { var _a22; const defaultSlot = (_a22 = slots.default) == null ? void 0 : _a22.call(slots, attrs); if (!defaultSlot) return null; if (defaultSlot.length > 1) { return null; } const firstLegitNode = findFirstLegitChild(defaultSlot); if (!firstLegitNode) { return null; } return withDirectives(cloneVNode(firstLegitNode, attrs), [[forwardRefDirective]]); }; } }); function findFirstLegitChild(node) { if (!node) return null; const children = node; for (const child of children) { if (isObject$5(child)) { switch (child.type) { case Comment$1: continue; case Text$1: case "svg": return wrapTextContent(child); case Fragment: return findFirstLegitChild(child.children); default: return child; } } return wrapTextContent(child); } return null; } function wrapTextContent(s) { const ns = useNamespace("only-child"); return createVNode("span", { "class": ns.e("content") }, [s]); } const popperTriggerProps = buildProps({ virtualRef: { type: definePropType(Object) }, virtualTriggering: Boolean, onMouseenter: { type: definePropType(Function) }, onMouseleave: { type: definePropType(Function) }, onClick: { type: definePropType(Function) }, onKeydown: { type: definePropType(Function) }, onFocus: { type: definePropType(Function) }, onBlur: { type: definePropType(Function) }, onContextmenu: { type: definePropType(Function) }, id: String, open: Boolean }); const __default__$j = defineComponent({ name: "ElPopperTrigger", inheritAttrs: false }); const _sfc_main$u = /* @__PURE__ */ defineComponent({ ...__default__$j, props: popperTriggerProps, setup(__props, { expose }) { const props = __props; const { role, triggerRef: triggerRef2 } = inject(POPPER_INJECTION_KEY, void 0); useForwardRef(triggerRef2); const ariaControls = computed$1(() => { return ariaHaspopup.value ? props.id : void 0; }); const ariaDescribedby = computed$1(() => { if (role && role.value === "tooltip") { return props.open && props.id ? props.id : void 0; } return void 0; }); const ariaHaspopup = computed$1(() => { if (role && role.value !== "tooltip") { return role.value; } return void 0; }); const ariaExpanded = computed$1(() => { return ariaHaspopup.value ? `${props.open}` : void 0; }); let virtualTriggerAriaStopWatch = void 0; onMounted(() => { watch(() => props.virtualRef, (virtualEl) => { if (virtualEl) { triggerRef2.value = unrefElement(virtualEl); } }, { immediate: true }); watch(triggerRef2, (el, prevEl) => { virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch(); virtualTriggerAriaStopWatch = void 0; if (isElement(el)) { [ "onMouseenter", "onMouseleave", "onClick", "onKeydown", "onFocus", "onBlur", "onContextmenu" ].forEach((eventName) => { var _a2; const handler = props[eventName]; if (handler) { el.addEventListener(eventName.slice(2).toLowerCase(), handler); (_a2 = prevEl == null ? void 0 : prevEl.removeEventListener) == null ? void 0 : _a2.call(prevEl, eventName.slice(2).toLowerCase(), handler); } }); virtualTriggerAriaStopWatch = watch([ariaControls, ariaDescribedby, ariaHaspopup, ariaExpanded], (watches) => { [ "aria-controls", "aria-describedby", "aria-haspopup", "aria-expanded" ].forEach((key, idx) => { isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]); }); }, { immediate: true }); } if (isElement(prevEl)) { [ "aria-controls", "aria-describedby", "aria-haspopup", "aria-expanded" ].forEach((key) => prevEl.removeAttribute(key)); } }, { immediate: true }); }); onBeforeUnmount(() => { virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch(); virtualTriggerAriaStopWatch = void 0; }); expose({ triggerRef: triggerRef2 }); return (_ctx, _cache) => { return !_ctx.virtualTriggering ? (openBlock(), createBlock(unref(OnlyChild), mergeProps({ key: 0 }, _ctx.$attrs, { "aria-controls": unref(ariaControls), "aria-describedby": unref(ariaDescribedby), "aria-expanded": unref(ariaExpanded), "aria-haspopup": unref(ariaHaspopup) }), { default: withCtx(() => [ renderSlot(_ctx.$slots, "default") ]), _: 3 }, 16, ["aria-controls", "aria-describedby", "aria-expanded", "aria-haspopup"])) : createCommentVNode("v-if", true); }; } }); var ElPopperTrigger = /* @__PURE__ */ _export_sfc$1(_sfc_main$u, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/popper/src/trigger.vue"]]); const FOCUS_AFTER_TRAPPED = "focus-trap.focus-after-trapped"; const FOCUS_AFTER_RELEASED = "focus-trap.focus-after-released"; const FOCUSOUT_PREVENTED = "focus-trap.focusout-prevented"; const FOCUS_AFTER_TRAPPED_OPTS = { cancelable: true, bubbles: false }; const FOCUSOUT_PREVENTED_OPTS = { cancelable: true, bubbles: false }; const ON_TRAP_FOCUS_EVT = "focusAfterTrapped"; const ON_RELEASE_FOCUS_EVT = "focusAfterReleased"; const FOCUS_TRAP_INJECTION_KEY = Symbol("elFocusTrap"); const focusReason = ref(); const lastUserFocusTimestamp = ref(0); const lastAutomatedFocusTimestamp = ref(0); let focusReasonUserCount = 0; const obtainAllFocusableElements = (element) => { const nodes = []; const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, { acceptNode: (node) => { const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden"; if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP; return node.tabIndex >= 0 || node === document.activeElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; } }); while (walker.nextNode()) nodes.push(walker.currentNode); return nodes; }; const getVisibleElement = (elements, container) => { for (const element of elements) { if (!isHidden(element, container)) return element; } }; const isHidden = (element, container) => { if (getComputedStyle(element).visibility === "hidden") return true; while (element) { if (container && element === container) return false; if (getComputedStyle(element).display === "none") return true; element = element.parentElement; } return false; }; const getEdges = (container) => { const focusable = obtainAllFocusableElements(container); const first = getVisibleElement(focusable, container); const last = getVisibleElement(focusable.reverse(), container); return [first, last]; }; const isSelectable = (element) => { return element instanceof HTMLInputElement && "select" in element; }; const tryFocus = (element, shouldSelect) => { if (element && element.focus) { const prevFocusedElement = document.activeElement; element.focus({ preventScroll: true }); lastAutomatedFocusTimestamp.value = window.performance.now(); if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) { element.select(); } } }; function removeFromStack(list, item) { const copy2 = [...list]; const idx = list.indexOf(item); if (idx !== -1) { copy2.splice(idx, 1); } return copy2; } const createFocusableStack = () => { let stack = []; const push = (layer) => { const currentLayer = stack[0]; if (currentLayer && layer !== currentLayer) { currentLayer.pause(); } stack = removeFromStack(stack, layer); stack.unshift(layer); }; const remove2 = (layer) => { var _a2, _b; stack = removeFromStack(stack, layer); (_b = (_a2 = stack[0]) == null ? void 0 : _a2.resume) == null ? void 0 : _b.call(_a2); }; return { push, remove: remove2 }; }; const focusFirstDescendant = (elements, shouldSelect = false) => { const prevFocusedElement = document.activeElement; for (const element of elements) { tryFocus(element, shouldSelect); if (document.activeElement !== prevFocusedElement) return; } }; const focusableStack = createFocusableStack(); const isFocusCausedByUserEvent = () => { return lastUserFocusTimestamp.value > lastAutomatedFocusTimestamp.value; }; const notifyFocusReasonPointer = () => { focusReason.value = "pointer"; lastUserFocusTimestamp.value = window.performance.now(); }; const notifyFocusReasonKeydown = () => { focusReason.value = "keyboard"; lastUserFocusTimestamp.value = window.performance.now(); }; const useFocusReason = () => { onMounted(() => { if (focusReasonUserCount === 0) { document.addEventListener("mousedown", notifyFocusReasonPointer); document.addEventListener("touchstart", notifyFocusReasonPointer); document.addEventListener("keydown", notifyFocusReasonKeydown); } focusReasonUserCount++; }); onBeforeUnmount(() => { focusReasonUserCount--; if (focusReasonUserCount <= 0) { document.removeEventListener("mousedown", notifyFocusReasonPointer); document.removeEventListener("touchstart", notifyFocusReasonPointer); document.removeEventListener("keydown", notifyFocusReasonKeydown); } }); return { focusReason, lastUserFocusTimestamp, lastAutomatedFocusTimestamp }; }; const createFocusOutPreventedEvent = (detail) => { return new CustomEvent(FOCUSOUT_PREVENTED, { ...FOCUSOUT_PREVENTED_OPTS, detail }); }; const _sfc_main$t = defineComponent({ name: "ElFocusTrap", inheritAttrs: false, props: { loop: Boolean, trapped: Boolean, focusTrapEl: Object, focusStartEl: { type: [Object, String], default: "first" } }, emits: [ ON_TRAP_FOCUS_EVT, ON_RELEASE_FOCUS_EVT, "focusin", "focusout", "focusout-prevented", "release-requested" ], setup(props, { emit }) { const forwardRef = ref(); let lastFocusBeforeTrapped; let lastFocusAfterTrapped; const { focusReason: focusReason2 } = useFocusReason(); useEscapeKeydown((event2) => { if (props.trapped && !focusLayer.paused) { emit("release-requested", event2); } }); const focusLayer = { paused: false, pause() { this.paused = true; }, resume() { this.paused = false; } }; const onKeydown = (e) => { if (!props.loop && !props.trapped) return; if (focusLayer.paused) return; const { key, altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e; const { loop } = props; const isTabbing = key === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey; const currentFocusingEl = document.activeElement; if (isTabbing && currentFocusingEl) { const container = currentTarget; const [first, last] = getEdges(container); const isTabbable = first && last; if (!isTabbable) { if (currentFocusingEl === container) { const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason2.value }); emit("focusout-prevented", focusoutPreventedEvent); if (!focusoutPreventedEvent.defaultPrevented) { e.preventDefault(); } } } else { if (!shiftKey && currentFocusingEl === last) { const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason2.value }); emit("focusout-prevented", focusoutPreventedEvent); if (!focusoutPreventedEvent.defaultPrevented) { e.preventDefault(); if (loop) tryFocus(first, true); } } else if (shiftKey && [first, container].includes(currentFocusingEl)) { const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason2.value }); emit("focusout-prevented", focusoutPreventedEvent); if (!focusoutPreventedEvent.defaultPrevented) { e.preventDefault(); if (loop) tryFocus(last, true); } } } } }; provide(FOCUS_TRAP_INJECTION_KEY, { focusTrapRef: forwardRef, onKeydown }); watch(() => props.focusTrapEl, (focusTrapEl) => { if (focusTrapEl) { forwardRef.value = focusTrapEl; } }, { immediate: true }); watch([forwardRef], ([forwardRef2], [oldForwardRef]) => { if (forwardRef2) { forwardRef2.addEventListener("keydown", onKeydown); forwardRef2.addEventListener("focusin", onFocusIn); forwardRef2.addEventListener("focusout", onFocusOut); } if (oldForwardRef) { oldForwardRef.removeEventListener("keydown", onKeydown); oldForwardRef.removeEventListener("focusin", onFocusIn); oldForwardRef.removeEventListener("focusout", onFocusOut); } }); const trapOnFocus = (e) => { emit(ON_TRAP_FOCUS_EVT, e); }; const releaseOnFocus = (e) => emit(ON_RELEASE_FOCUS_EVT, e); const onFocusIn = (e) => { const trapContainer = unref(forwardRef); if (!trapContainer) return; const target = e.target; const relatedTarget = e.relatedTarget; const isFocusedInTrap = target && trapContainer.contains(target); if (!props.trapped) { const isPrevFocusedInTrap = relatedTarget && trapContainer.contains(relatedTarget); if (!isPrevFocusedInTrap) { lastFocusBeforeTrapped = relatedTarget; } } if (isFocusedInTrap) emit("focusin", e); if (focusLayer.paused) return; if (props.trapped) { if (isFocusedInTrap) { lastFocusAfterTrapped = target; } else { tryFocus(lastFocusAfterTrapped, true); } } }; const onFocusOut = (e) => { const trapContainer = unref(forwardRef); if (focusLayer.paused || !trapContainer) return; if (props.trapped) { const relatedTarget = e.relatedTarget; if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) { setTimeout(() => { if (!focusLayer.paused && props.trapped) { const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason2.value }); emit("focusout-prevented", focusoutPreventedEvent); if (!focusoutPreventedEvent.defaultPrevented) { tryFocus(lastFocusAfterTrapped, true); } } }, 0); } } else { const target = e.target; const isFocusedInTrap = target && trapContainer.contains(target); if (!isFocusedInTrap) emit("focusout", e); } }; async function startTrap() { await nextTick(); const trapContainer = unref(forwardRef); if (trapContainer) { focusableStack.push(focusLayer); const prevFocusedElement = trapContainer.contains(document.activeElement) ? lastFocusBeforeTrapped : document.activeElement; lastFocusBeforeTrapped = prevFocusedElement; const isPrevFocusContained = trapContainer.contains(prevFocusedElement); if (!isPrevFocusContained) { const focusEvent = new Event(FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS); trapContainer.addEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus); trapContainer.dispatchEvent(focusEvent); if (!focusEvent.defaultPrevented) { nextTick(() => { let focusStartEl = props.focusStartEl; if (!isString(focusStartEl)) { tryFocus(focusStartEl); if (document.activeElement !== focusStartEl) { focusStartEl = "first"; } } if (focusStartEl === "first") { focusFirstDescendant(obtainAllFocusableElements(trapContainer), true); } if (document.activeElement === prevFocusedElement || focusStartEl === "container") { tryFocus(trapContainer); } }); } } } } function stopTrap() { const trapContainer = unref(forwardRef); if (trapContainer) { trapContainer.removeEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus); const releasedEvent = new CustomEvent(FOCUS_AFTER_RELEASED, { ...FOCUS_AFTER_TRAPPED_OPTS, detail: { focusReason: focusReason2.value } }); trapContainer.addEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus); trapContainer.dispatchEvent(releasedEvent); if (!releasedEvent.defaultPrevented && (focusReason2.value == "keyboard" || !isFocusCausedByUserEvent() || trapContainer.contains(document.activeElement))) { tryFocus(lastFocusBeforeTrapped != null ? lastFocusBeforeTrapped : document.body); } trapContainer.removeEventListener(FOCUS_AFTER_RELEASED, trapOnFocus); focusableStack.remove(focusLayer); } } onMounted(() => { if (props.trapped) { startTrap(); } watch(() => props.trapped, (trapped) => { if (trapped) { startTrap(); } else { stopTrap(); } }); }); onBeforeUnmount(() => { if (props.trapped) { stopTrap(); } }); return { onKeydown }; } }); function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) { return renderSlot(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown }); } var ElFocusTrap = /* @__PURE__ */ _export_sfc$1(_sfc_main$t, [["render", _sfc_render$7], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/focus-trap/src/focus-trap.vue"]]); const POSITIONING_STRATEGIES = ["fixed", "absolute"]; const popperCoreConfigProps = buildProps({ boundariesPadding: { type: Number, default: 0 }, fallbackPlacements: { type: definePropType(Array), default: void 0 }, gpuAcceleration: { type: Boolean, default: true }, offset: { type: Number, default: 12 }, placement: { type: String, values: Ee, default: "bottom" }, popperOptions: { type: definePropType(Object), default: () => ({}) }, strategy: { type: String, values: POSITIONING_STRATEGIES, default: "absolute" } }); const popperContentProps = buildProps({ ...popperCoreConfigProps, id: String, style: { type: definePropType([String, Array, Object]) }, className: { type: definePropType([String, Array, Object]) }, effect: { type: String, default: "dark" }, visible: Boolean, enterable: { type: Boolean, default: true }, pure: Boolean, focusOnShow: { type: Boolean, default: false }, trapping: { type: Boolean, default: false }, popperClass: { type: definePropType([String, Array, Object]) }, popperStyle: { type: definePropType([String, Array, Object]) }, referenceEl: { type: definePropType(Object) }, triggerTargetEl: { type: definePropType(Object) }, stopPopperMouseEvent: { type: Boolean, default: true }, ariaLabel: { type: String, default: void 0 }, virtualTriggering: Boolean, zIndex: Number }); const popperContentEmits = { mouseenter: (evt) => evt instanceof MouseEvent, mouseleave: (evt) => evt instanceof MouseEvent, focus: () => true, blur: () => true, close: () => true }; const buildPopperOptions = (props, modifiers = []) => { const { placement, strategy, popperOptions } = props; const options2 = { placement, strategy, ...popperOptions, modifiers: [...genModifiers(props), ...modifiers] }; deriveExtraModifiers(options2, popperOptions == null ? void 0 : popperOptions.modifiers); return options2; }; const unwrapMeasurableEl = ($el) => { if (!isClient) return; return unrefElement($el); }; function genModifiers(options2) { const { offset, gpuAcceleration, fallbackPlacements } = options2; return [ { name: "offset", options: { offset: [0, offset != null ? offset : 12] } }, { name: "preventOverflow", options: { padding: { top: 2, bottom: 2, left: 5, right: 5 } } }, { name: "flip", options: { padding: 5, fallbackPlacements } }, { name: "computeStyles", options: { gpuAcceleration } } ]; } function deriveExtraModifiers(options2, modifiers) { if (modifiers) { options2.modifiers = [...options2.modifiers, ...modifiers != null ? modifiers : []]; } } const DEFAULT_ARROW_OFFSET = 0; const usePopperContent = (props) => { const { popperInstanceRef, contentRef, triggerRef: triggerRef2, role } = inject(POPPER_INJECTION_KEY, void 0); const arrowRef = ref(); const arrowOffset = ref(); const eventListenerModifier = computed$1(() => { return { name: "eventListeners", enabled: !!props.visible }; }); const arrowModifier = computed$1(() => { var _a2; const arrowEl = unref(arrowRef); const offset = (_a2 = unref(arrowOffset)) != null ? _a2 : DEFAULT_ARROW_OFFSET; return { name: "arrow", enabled: !isUndefined$1(arrowEl), options: { element: arrowEl, padding: offset } }; }); const options2 = computed$1(() => { return { onFirstUpdate: () => { update(); }, ...buildPopperOptions(props, [ unref(arrowModifier), unref(eventListenerModifier) ]) }; }); const computedReference = computed$1(() => unwrapMeasurableEl(props.referenceEl) || unref(triggerRef2)); const { attributes, state, styles, update, forceUpdate, instanceRef } = usePopper(computedReference, contentRef, options2); watch(instanceRef, (instance) => popperInstanceRef.value = instance); onMounted(() => { watch(() => { var _a2; return (_a2 = unref(computedReference)) == null ? void 0 : _a2.getBoundingClientRect(); }, () => { update(); }); }); return { attributes, arrowRef, contentRef, instanceRef, state, styles, role, forceUpdate, update }; }; const usePopperContentDOM = (props, { attributes, styles, role }) => { const { nextZIndex } = useZIndex(); const ns = useNamespace("popper"); const contentAttrs = computed$1(() => unref(attributes).popper); const contentZIndex = ref(props.zIndex || nextZIndex()); const contentClass = computed$1(() => [ ns.b(), ns.is("pure", props.pure), ns.is(props.effect), props.popperClass ]); const contentStyle = computed$1(() => { return [ { zIndex: unref(contentZIndex) }, props.popperStyle || {}, unref(styles).popper ]; }); const ariaModal = computed$1(() => role.value === "dialog" ? "false" : void 0); const arrowStyle = computed$1(() => unref(styles).arrow || {}); const updateZIndex = () => { contentZIndex.value = props.zIndex || nextZIndex(); }; return { ariaModal, arrowStyle, contentAttrs, contentClass, contentStyle, contentZIndex, updateZIndex }; }; const usePopperContentFocusTrap = (props, emit) => { const trapped = ref(false); const focusStartRef = ref(); const onFocusAfterTrapped = () => { emit("focus"); }; const onFocusAfterReleased = (event2) => { var _a2; if (((_a2 = event2.detail) == null ? void 0 : _a2.focusReason) !== "pointer") { focusStartRef.value = "first"; emit("blur"); } }; const onFocusInTrap = (event2) => { if (props.visible && !trapped.value) { if (event2.target) { focusStartRef.value = event2.target; } trapped.value = true; } }; const onFocusoutPrevented = (event2) => { if (!props.trapping) { if (event2.detail.focusReason === "pointer") { event2.preventDefault(); } trapped.value = false; } }; const onReleaseRequested = () => { trapped.value = false; emit("close"); }; return { focusStartRef, trapped, onFocusAfterReleased, onFocusAfterTrapped, onFocusInTrap, onFocusoutPrevented, onReleaseRequested }; }; const __default__$i = defineComponent({ name: "ElPopperContent" }); const _sfc_main$s = /* @__PURE__ */ defineComponent({ ...__default__$i, props: popperContentProps, emits: popperContentEmits, setup(__props, { expose, emit }) { const props = __props; const { focusStartRef, trapped, onFocusAfterReleased, onFocusAfterTrapped, onFocusInTrap, onFocusoutPrevented, onReleaseRequested } = usePopperContentFocusTrap(props, emit); const { attributes, arrowRef, contentRef, styles, instanceRef, role, update } = usePopperContent(props); const { ariaModal, arrowStyle, contentAttrs, contentClass, contentStyle, updateZIndex } = usePopperContentDOM(props, { styles, attributes, role }); const formItemContext = inject(formItemContextKey, void 0); const arrowOffset = ref(); provide(POPPER_CONTENT_INJECTION_KEY, { arrowStyle, arrowRef, arrowOffset }); if (formItemContext && (formItemContext.addInputId || formItemContext.removeInputId)) { provide(formItemContextKey, { ...formItemContext, addInputId: NOOP, removeInputId: NOOP }); } let triggerTargetAriaStopWatch = void 0; const updatePopper = (shouldUpdateZIndex = true) => { update(); shouldUpdateZIndex && updateZIndex(); }; const togglePopperAlive = () => { updatePopper(false); if (props.visible && props.focusOnShow) { trapped.value = true; } else if (props.visible === false) { trapped.value = false; } }; onMounted(() => { watch(() => props.triggerTargetEl, (triggerTargetEl, prevTriggerTargetEl) => { triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch(); triggerTargetAriaStopWatch = void 0; const el = unref(triggerTargetEl || contentRef.value); const prevEl = unref(prevTriggerTargetEl || contentRef.value); if (isElement(el)) { triggerTargetAriaStopWatch = watch([role, () => props.ariaLabel, ariaModal, () => props.id], (watches) => { ["role", "aria-label", "aria-modal", "id"].forEach((key, idx) => { isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]); }); }, { immediate: true }); } if (prevEl !== el && isElement(prevEl)) { ["role", "aria-label", "aria-modal", "id"].forEach((key) => { prevEl.removeAttribute(key); }); } }, { immediate: true }); watch(() => props.visible, togglePopperAlive, { immediate: true }); }); onBeforeUnmount(() => { triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch(); triggerTargetAriaStopWatch = void 0; }); expose({ popperContentRef: contentRef, popperInstanceRef: instanceRef, updatePopper, contentStyle }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", mergeProps({ ref_key: "contentRef", ref: contentRef }, unref(contentAttrs), { style: unref(contentStyle), class: unref(contentClass), tabindex: "-1", onMouseenter: _cache[0] || (_cache[0] = (e) => _ctx.$emit("mouseenter", e)), onMouseleave: _cache[1] || (_cache[1] = (e) => _ctx.$emit("mouseleave", e)) }), [ createVNode(unref(ElFocusTrap), { trapped: unref(trapped), "trap-on-focus-in": true, "focus-trap-el": unref(contentRef), "focus-start-el": unref(focusStartRef), onFocusAfterTrapped: unref(onFocusAfterTrapped), onFocusAfterReleased: unref(onFocusAfterReleased), onFocusin: unref(onFocusInTrap), onFocusoutPrevented: unref(onFocusoutPrevented), onReleaseRequested: unref(onReleaseRequested) }, { default: withCtx(() => [ renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["trapped", "focus-trap-el", "focus-start-el", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusin", "onFocusoutPrevented", "onReleaseRequested"]) ], 16); }; } }); var ElPopperContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$s, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/popper/src/content.vue"]]); const ElPopper = withInstall(Popper); const TOOLTIP_INJECTION_KEY = Symbol("elTooltip"); const useTooltipContentProps = buildProps({ ...useDelayedToggleProps, ...popperContentProps, appendTo: { type: definePropType([String, Object]) }, content: { type: String, default: "" }, rawContent: { type: Boolean, default: false }, persistent: Boolean, ariaLabel: String, visible: { type: definePropType(Boolean), default: null }, transition: String, teleported: { type: Boolean, default: true }, disabled: Boolean }); const useTooltipTriggerProps = buildProps({ ...popperTriggerProps, disabled: Boolean, trigger: { type: definePropType([String, Array]), default: "hover" }, triggerKeys: { type: definePropType(Array), default: () => [EVENT_CODE.enter, EVENT_CODE.space] } }); const { useModelToggleProps: useTooltipModelToggleProps, useModelToggleEmits: useTooltipModelToggleEmits, useModelToggle: useTooltipModelToggle } = createModelToggleComposable("visible"); const useTooltipProps = buildProps({ ...popperProps, ...useTooltipModelToggleProps, ...useTooltipContentProps, ...useTooltipTriggerProps, ...popperArrowProps, showArrow: { type: Boolean, default: true } }); const tooltipEmits = [ ...useTooltipModelToggleEmits, "before-show", "before-hide", "show", "hide", "open", "close" ]; const isTriggerType = (trigger2, type2) => { if (isArray$2(trigger2)) { return trigger2.includes(type2); } return trigger2 === type2; }; const whenTrigger = (trigger2, type2, handler) => { return (e) => { isTriggerType(unref(trigger2), type2) && handler(e); }; }; const __default__$h = defineComponent({ name: "ElTooltipTrigger" }); const _sfc_main$r = /* @__PURE__ */ defineComponent({ ...__default__$h, props: useTooltipTriggerProps, setup(__props, { expose }) { const props = __props; const ns = useNamespace("tooltip"); const { controlled, id, open, onOpen, onClose, onToggle } = inject(TOOLTIP_INJECTION_KEY, void 0); const triggerRef2 = ref(null); const stopWhenControlledOrDisabled = () => { if (unref(controlled) || props.disabled) { return true; } }; const trigger2 = toRef(props, "trigger"); const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger2, "hover", onOpen)); const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger2, "hover", onClose)); const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger2, "click", (e) => { if (e.button === 0) { onToggle(e); } })); const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger2, "focus", onOpen)); const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger2, "focus", onClose)); const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger2, "contextmenu", (e) => { e.preventDefault(); onToggle(e); })); const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => { const { code } = e; if (props.triggerKeys.includes(code)) { e.preventDefault(); onToggle(e); } }); expose({ triggerRef: triggerRef2 }); return (_ctx, _cache) => { return openBlock(), createBlock(unref(ElPopperTrigger), { id: unref(id), "virtual-ref": _ctx.virtualRef, open: unref(open), "virtual-triggering": _ctx.virtualTriggering, class: normalizeClass(unref(ns).e("trigger")), onBlur: unref(onBlur), onClick: unref(onClick), onContextmenu: unref(onContextMenu), onFocus: unref(onFocus), onMouseenter: unref(onMouseenter), onMouseleave: unref(onMouseleave), onKeydown: unref(onKeydown) }, { default: withCtx(() => [ renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["id", "virtual-ref", "open", "virtual-triggering", "class", "onBlur", "onClick", "onContextmenu", "onFocus", "onMouseenter", "onMouseleave", "onKeydown"]); }; } }); var ElTooltipTrigger = /* @__PURE__ */ _export_sfc$1(_sfc_main$r, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/tooltip/src/trigger.vue"]]); const __default__$g = defineComponent({ name: "ElTooltipContent", inheritAttrs: false }); const _sfc_main$q = /* @__PURE__ */ defineComponent({ ...__default__$g, props: useTooltipContentProps, setup(__props, { expose }) { const props = __props; const { selector } = usePopperContainerId(); const ns = useNamespace("tooltip"); const contentRef = ref(null); const destroyed = ref(false); const { controlled, id, open, trigger: trigger2, onClose, onOpen, onShow, onHide, onBeforeShow, onBeforeHide } = inject(TOOLTIP_INJECTION_KEY, void 0); const transitionClass = computed$1(() => { return props.transition || `${ns.namespace.value}-fade-in-linear`; }); const persistentRef = computed$1(() => { return props.persistent; }); onBeforeUnmount(() => { destroyed.value = true; }); const shouldRender = computed$1(() => { return unref(persistentRef) ? true : unref(open); }); const shouldShow = computed$1(() => { return props.disabled ? false : unref(open); }); const appendTo = computed$1(() => { return props.appendTo || selector.value; }); const contentStyle = computed$1(() => { var _a2; return (_a2 = props.style) != null ? _a2 : {}; }); const ariaHidden = computed$1(() => !unref(open)); const onTransitionLeave = () => { onHide(); }; const stopWhenControlled = () => { if (unref(controlled)) return true; }; const onContentEnter = composeEventHandlers(stopWhenControlled, () => { if (props.enterable && unref(trigger2) === "hover") { onOpen(); } }); const onContentLeave = composeEventHandlers(stopWhenControlled, () => { if (unref(trigger2) === "hover") { onClose(); } }); const onBeforeEnter = () => { var _a2, _b; (_b = (_a2 = contentRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); onBeforeShow == null ? void 0 : onBeforeShow(); }; const onBeforeLeave = () => { onBeforeHide == null ? void 0 : onBeforeHide(); }; const onAfterShow = () => { onShow(); stopHandle = onClickOutside(computed$1(() => { var _a2; return (_a2 = contentRef.value) == null ? void 0 : _a2.popperContentRef; }), () => { if (unref(controlled)) return; const $trigger = unref(trigger2); if ($trigger !== "hover") { onClose(); } }); }; const onBlur = () => { if (!props.virtualTriggering) { onClose(); } }; let stopHandle; watch(() => unref(open), (val) => { if (!val) { stopHandle == null ? void 0 : stopHandle(); } }, { flush: "post" }); watch(() => props.content, () => { var _a2, _b; (_b = (_a2 = contentRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); }); expose({ contentRef }); return (_ctx, _cache) => { return openBlock(), createBlock(Teleport, { disabled: !_ctx.teleported, to: unref(appendTo) }, [ createVNode(Transition, { name: unref(transitionClass), onAfterLeave: onTransitionLeave, onBeforeEnter, onAfterEnter: onAfterShow, onBeforeLeave }, { default: withCtx(() => [ unref(shouldRender) ? withDirectives((openBlock(), createBlock(unref(ElPopperContent), mergeProps({ key: 0, id: unref(id), ref_key: "contentRef", ref: contentRef }, _ctx.$attrs, { "aria-label": _ctx.ariaLabel, "aria-hidden": unref(ariaHidden), "boundaries-padding": _ctx.boundariesPadding, "fallback-placements": _ctx.fallbackPlacements, "gpu-acceleration": _ctx.gpuAcceleration, offset: _ctx.offset, placement: _ctx.placement, "popper-options": _ctx.popperOptions, strategy: _ctx.strategy, effect: _ctx.effect, enterable: _ctx.enterable, pure: _ctx.pure, "popper-class": _ctx.popperClass, "popper-style": [_ctx.popperStyle, unref(contentStyle)], "reference-el": _ctx.referenceEl, "trigger-target-el": _ctx.triggerTargetEl, visible: unref(shouldShow), "z-index": _ctx.zIndex, onMouseenter: unref(onContentEnter), onMouseleave: unref(onContentLeave), onBlur, onClose: unref(onClose) }), { default: withCtx(() => [ !destroyed.value ? renderSlot(_ctx.$slots, "default", { key: 0 }) : createCommentVNode("v-if", true) ]), _: 3 }, 16, ["id", "aria-label", "aria-hidden", "boundaries-padding", "fallback-placements", "gpu-acceleration", "offset", "placement", "popper-options", "strategy", "effect", "enterable", "pure", "popper-class", "popper-style", "reference-el", "trigger-target-el", "visible", "z-index", "onMouseenter", "onMouseleave", "onClose"])), [ [vShow, unref(shouldShow)] ]) : createCommentVNode("v-if", true) ]), _: 3 }, 8, ["name"]) ], 8, ["disabled", "to"]); }; } }); var ElTooltipContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$q, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/tooltip/src/content.vue"]]); const _hoisted_1$f = ["innerHTML"]; const _hoisted_2$9 = { key: 1 }; const __default__$f = defineComponent({ name: "ElTooltip" }); const _sfc_main$p = /* @__PURE__ */ defineComponent({ ...__default__$f, props: useTooltipProps, emits: tooltipEmits, setup(__props, { expose, emit }) { const props = __props; usePopperContainer(); const id = useId(); const popperRef = ref(); const contentRef = ref(); const updatePopper = () => { var _a2; const popperComponent = unref(popperRef); if (popperComponent) { (_a2 = popperComponent.popperInstanceRef) == null ? void 0 : _a2.update(); } }; const open = ref(false); const toggleReason = ref(); const { show, hide, hasUpdateHandler } = useTooltipModelToggle({ indicator: open, toggleReason }); const { onOpen, onClose } = useDelayedToggle({ showAfter: toRef(props, "showAfter"), hideAfter: toRef(props, "hideAfter"), autoClose: toRef(props, "autoClose"), open: show, close: hide }); const controlled = computed$1(() => isBoolean(props.visible) && !hasUpdateHandler.value); provide(TOOLTIP_INJECTION_KEY, { controlled, id, open: readonly(open), trigger: toRef(props, "trigger"), onOpen: (event2) => { onOpen(event2); }, onClose: (event2) => { onClose(event2); }, onToggle: (event2) => { if (unref(open)) { onClose(event2); } else { onOpen(event2); } }, onShow: () => { emit("show", toggleReason.value); }, onHide: () => { emit("hide", toggleReason.value); }, onBeforeShow: () => { emit("before-show", toggleReason.value); }, onBeforeHide: () => { emit("before-hide", toggleReason.value); }, updatePopper }); watch(() => props.disabled, (disabled) => { if (disabled && open.value) { open.value = false; } }); const isFocusInsideContent = () => { var _a2, _b; const popperContent = (_b = (_a2 = contentRef.value) == null ? void 0 : _a2.contentRef) == null ? void 0 : _b.popperContentRef; return popperContent && popperContent.contains(document.activeElement); }; onDeactivated(() => open.value && hide()); expose({ popperRef, contentRef, isFocusInsideContent, updatePopper, onOpen, onClose, hide }); return (_ctx, _cache) => { return openBlock(), createBlock(unref(ElPopper), { ref_key: "popperRef", ref: popperRef, role: _ctx.role }, { default: withCtx(() => [ createVNode(ElTooltipTrigger, { disabled: _ctx.disabled, trigger: _ctx.trigger, "trigger-keys": _ctx.triggerKeys, "virtual-ref": _ctx.virtualRef, "virtual-triggering": _ctx.virtualTriggering }, { default: withCtx(() => [ _ctx.$slots.default ? renderSlot(_ctx.$slots, "default", { key: 0 }) : createCommentVNode("v-if", true) ]), _: 3 }, 8, ["disabled", "trigger", "trigger-keys", "virtual-ref", "virtual-triggering"]), createVNode(ElTooltipContent, { ref_key: "contentRef", ref: contentRef, "aria-label": _ctx.ariaLabel, "boundaries-padding": _ctx.boundariesPadding, content: _ctx.content, disabled: _ctx.disabled, effect: _ctx.effect, enterable: _ctx.enterable, "fallback-placements": _ctx.fallbackPlacements, "hide-after": _ctx.hideAfter, "gpu-acceleration": _ctx.gpuAcceleration, offset: _ctx.offset, persistent: _ctx.persistent, "popper-class": _ctx.popperClass, "popper-style": _ctx.popperStyle, placement: _ctx.placement, "popper-options": _ctx.popperOptions, pure: _ctx.pure, "raw-content": _ctx.rawContent, "reference-el": _ctx.referenceEl, "trigger-target-el": _ctx.triggerTargetEl, "show-after": _ctx.showAfter, strategy: _ctx.strategy, teleported: _ctx.teleported, transition: _ctx.transition, "virtual-triggering": _ctx.virtualTriggering, "z-index": _ctx.zIndex, "append-to": _ctx.appendTo }, { default: withCtx(() => [ renderSlot(_ctx.$slots, "content", {}, () => [ _ctx.rawContent ? (openBlock(), createElementBlock("span", { key: 0, innerHTML: _ctx.content }, null, 8, _hoisted_1$f)) : (openBlock(), createElementBlock("span", _hoisted_2$9, toDisplayString(_ctx.content), 1)) ]), _ctx.showArrow ? (openBlock(), createBlock(unref(ElPopperArrow), { key: 0, "arrow-offset": _ctx.arrowOffset }, null, 8, ["arrow-offset"])) : createCommentVNode("v-if", true) ]), _: 3 }, 8, ["aria-label", "boundaries-padding", "content", "disabled", "effect", "enterable", "fallback-placements", "hide-after", "gpu-acceleration", "offset", "persistent", "popper-class", "popper-style", "placement", "popper-options", "pure", "raw-content", "reference-el", "trigger-target-el", "show-after", "strategy", "teleported", "transition", "virtual-triggering", "z-index", "append-to"]) ]), _: 3 }, 8, ["role"]); }; } }); var Tooltip = /* @__PURE__ */ _export_sfc$1(_sfc_main$p, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/tooltip/src/tooltip.vue"]]); const ElTooltip = withInstall(Tooltip); const buttonGroupContextKey = Symbol("buttonGroupContextKey"); const useButton = (props, emit) => { useDeprecated({ from: "type.text", replacement: "link", version: "3.0.0", scope: "props", ref: "https://element-plus.org/en-US/component/button.html#button-attributes" }, computed$1(() => props.type === "text")); const buttonGroupContext = inject(buttonGroupContextKey, void 0); const globalConfig2 = useGlobalConfig("button"); const { form } = useFormItem(); const _size = useFormSize(computed$1(() => buttonGroupContext == null ? void 0 : buttonGroupContext.size)); const _disabled = useFormDisabled(); const _ref = ref(); const slots = useSlots(); const _type = computed$1(() => props.type || (buttonGroupContext == null ? void 0 : buttonGroupContext.type) || ""); const autoInsertSpace = computed$1(() => { var _a2, _b, _c; return (_c = (_b = props.autoInsertSpace) != null ? _b : (_a2 = globalConfig2.value) == null ? void 0 : _a2.autoInsertSpace) != null ? _c : false; }); const _props = computed$1(() => { if (props.tag === "button") { return { ariaDisabled: _disabled.value || props.loading, disabled: _disabled.value || props.loading, autofocus: props.autofocus, type: props.nativeType }; } return {}; }); const shouldAddSpace = computed$1(() => { var _a2; const defaultSlot = (_a2 = slots.default) == null ? void 0 : _a2.call(slots); if (autoInsertSpace.value && (defaultSlot == null ? void 0 : defaultSlot.length) === 1) { const slot = defaultSlot[0]; if ((slot == null ? void 0 : slot.type) === Text$1) { const text = slot.children; return /^\p{Unified_Ideograph}{2}$/u.test(text.trim()); } } return false; }); const handleClick = (evt) => { if (props.nativeType === "reset") { form == null ? void 0 : form.resetFields(); } emit("click", evt); }; return { _disabled, _size, _type, _ref, _props, shouldAddSpace, handleClick }; }; const buttonTypes = [ "default", "primary", "success", "warning", "info", "danger", "text", "" ]; const buttonNativeTypes = ["button", "submit", "reset"]; const buttonProps = buildProps({ size: useSizeProp, disabled: Boolean, type: { type: String, values: buttonTypes, default: "" }, icon: { type: iconPropType }, nativeType: { type: String, values: buttonNativeTypes, default: "button" }, loading: Boolean, loadingIcon: { type: iconPropType, default: () => loading_default }, plain: Boolean, text: Boolean, link: Boolean, bg: Boolean, autofocus: Boolean, round: Boolean, circle: Boolean, color: String, dark: Boolean, autoInsertSpace: { type: Boolean, default: void 0 }, tag: { type: definePropType([String, Object]), default: "button" } }); const buttonEmits = { click: (evt) => evt instanceof MouseEvent }; function bound01$1(n, max2) { if (isOnePointZero$1(n)) { n = "100%"; } var isPercent = isPercentage$1(n); n = max2 === 360 ? n : Math.min(max2, Math.max(0, parseFloat(n))); if (isPercent) { n = parseInt(String(n * max2), 10) / 100; } if (Math.abs(n - max2) < 1e-6) { return 1; } if (max2 === 360) { n = (n < 0 ? n % max2 + max2 : n % max2) / parseFloat(String(max2)); } else { n = n % max2 / parseFloat(String(max2)); } return n; } function clamp01(val) { return Math.min(1, Math.max(0, val)); } function isOnePointZero$1(n) { return typeof n === "string" && n.indexOf(".") !== -1 && parseFloat(n) === 1; } function isPercentage$1(n) { return typeof n === "string" && n.indexOf("%") !== -1; } function boundAlpha(a) { a = parseFloat(a); if (isNaN(a) || a < 0 || a > 1) { a = 1; } return a; } function convertToPercentage(n) { if (n <= 1) { return "".concat(Number(n) * 100, "%"); } return n; } function pad2(c) { return c.length === 1 ? "0" + c : String(c); } function rgbToRgb(r2, g, b) { return { r: bound01$1(r2, 255) * 255, g: bound01$1(g, 255) * 255, b: bound01$1(b, 255) * 255 }; } function rgbToHsl(r2, g, b) { r2 = bound01$1(r2, 255); g = bound01$1(g, 255); b = bound01$1(b, 255); var max2 = Math.max(r2, g, b); var min2 = Math.min(r2, g, b); var h2 = 0; var s = 0; var l = (max2 + min2) / 2; if (max2 === min2) { s = 0; h2 = 0; } else { var d2 = max2 - min2; s = l > 0.5 ? d2 / (2 - max2 - min2) : d2 / (max2 + min2); switch (max2) { case r2: h2 = (g - b) / d2 + (g < b ? 6 : 0); break; case g: h2 = (b - r2) / d2 + 2; break; case b: h2 = (r2 - g) / d2 + 4; break; } h2 /= 6; } return { h: h2, s, l }; } function hue2rgb(p, q2, t2) { if (t2 < 0) { t2 += 1; } if (t2 > 1) { t2 -= 1; } if (t2 < 1 / 6) { return p + (q2 - p) * (6 * t2); } if (t2 < 1 / 2) { return q2; } if (t2 < 2 / 3) { return p + (q2 - p) * (2 / 3 - t2) * 6; } return p; } function hslToRgb(h2, s, l) { var r2; var g; var b; h2 = bound01$1(h2, 360); s = bound01$1(s, 100); l = bound01$1(l, 100); if (s === 0) { g = l; b = l; r2 = l; } else { var q2 = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q2; r2 = hue2rgb(p, q2, h2 + 1 / 3); g = hue2rgb(p, q2, h2); b = hue2rgb(p, q2, h2 - 1 / 3); } return { r: r2 * 255, g: g * 255, b: b * 255 }; } function rgbToHsv(r2, g, b) { r2 = bound01$1(r2, 255); g = bound01$1(g, 255); b = bound01$1(b, 255); var max2 = Math.max(r2, g, b); var min2 = Math.min(r2, g, b); var h2 = 0; var v = max2; var d2 = max2 - min2; var s = max2 === 0 ? 0 : d2 / max2; if (max2 === min2) { h2 = 0; } else { switch (max2) { case r2: h2 = (g - b) / d2 + (g < b ? 6 : 0); break; case g: h2 = (b - r2) / d2 + 2; break; case b: h2 = (r2 - g) / d2 + 4; break; } h2 /= 6; } return { h: h2, s, v }; } function hsvToRgb(h2, s, v) { h2 = bound01$1(h2, 360) * 6; s = bound01$1(s, 100); v = bound01$1(v, 100); var i2 = Math.floor(h2); var f = h2 - i2; var p = v * (1 - s); var q2 = v * (1 - f * s); var t2 = v * (1 - (1 - f) * s); var mod = i2 % 6; var r2 = [v, q2, p, p, t2, v][mod]; var g = [t2, v, v, q2, p, p][mod]; var b = [p, p, t2, v, v, q2][mod]; return { r: r2 * 255, g: g * 255, b: b * 255 }; } function rgbToHex(r2, g, b, allow3Char) { var hex = [ pad2(Math.round(r2).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)) ]; if (allow3Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1))) { return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); } return hex.join(""); } function rgbaToHex(r2, g, b, a, allow4Char) { var hex = [ pad2(Math.round(r2).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a)) ]; if (allow4Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1)) && hex[3].startsWith(hex[3].charAt(1))) { return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); } return hex.join(""); } function convertDecimalToHex(d2) { return Math.round(parseFloat(d2) * 255).toString(16); } function convertHexToDecimal(h2) { return parseIntFromHex(h2) / 255; } function parseIntFromHex(val) { return parseInt(val, 16); } function numberInputToObject(color2) { return { r: color2 >> 16, g: (color2 & 65280) >> 8, b: color2 & 255 }; } var names = { aliceblue: "#f0f8ff", antiquewhite: "#faebd7", aqua: "#00ffff", aquamarine: "#7fffd4", azure: "#f0ffff", beige: "#f5f5dc", bisque: "#ffe4c4", black: "#000000", blanchedalmond: "#ffebcd", blue: "#0000ff", blueviolet: "#8a2be2", brown: "#a52a2a", burlywood: "#deb887", cadetblue: "#5f9ea0", chartreuse: "#7fff00", chocolate: "#d2691e", coral: "#ff7f50", cornflowerblue: "#6495ed", cornsilk: "#fff8dc", crimson: "#dc143c", cyan: "#00ffff", darkblue: "#00008b", darkcyan: "#008b8b", darkgoldenrod: "#b8860b", darkgray: "#a9a9a9", darkgreen: "#006400", darkgrey: "#a9a9a9", darkkhaki: "#bdb76b", darkmagenta: "#8b008b", darkolivegreen: "#556b2f", darkorange: "#ff8c00", darkorchid: "#9932cc", darkred: "#8b0000", darksalmon: "#e9967a", darkseagreen: "#8fbc8f", darkslateblue: "#483d8b", darkslategray: "#2f4f4f", darkslategrey: "#2f4f4f", darkturquoise: "#00ced1", darkviolet: "#9400d3", deeppink: "#ff1493", deepskyblue: "#00bfff", dimgray: "#696969", dimgrey: "#696969", dodgerblue: "#1e90ff", firebrick: "#b22222", floralwhite: "#fffaf0", forestgreen: "#228b22", fuchsia: "#ff00ff", gainsboro: "#dcdcdc", ghostwhite: "#f8f8ff", goldenrod: "#daa520", gold: "#ffd700", gray: "#808080", green: "#008000", greenyellow: "#adff2f", grey: "#808080", honeydew: "#f0fff0", hotpink: "#ff69b4", indianred: "#cd5c5c", indigo: "#4b0082", ivory: "#fffff0", khaki: "#f0e68c", lavenderblush: "#fff0f5", lavender: "#e6e6fa", lawngreen: "#7cfc00", lemonchiffon: "#fffacd", lightblue: "#add8e6", lightcoral: "#f08080", lightcyan: "#e0ffff", lightgoldenrodyellow: "#fafad2", lightgray: "#d3d3d3", lightgreen: "#90ee90", lightgrey: "#d3d3d3", lightpink: "#ffb6c1", lightsalmon: "#ffa07a", lightseagreen: "#20b2aa", lightskyblue: "#87cefa", lightslategray: "#778899", lightslategrey: "#778899", lightsteelblue: "#b0c4de", lightyellow: "#ffffe0", lime: "#00ff00", limegreen: "#32cd32", linen: "#faf0e6", magenta: "#ff00ff", maroon: "#800000", mediumaquamarine: "#66cdaa", mediumblue: "#0000cd", mediumorchid: "#ba55d3", mediumpurple: "#9370db", mediumseagreen: "#3cb371", mediumslateblue: "#7b68ee", mediumspringgreen: "#00fa9a", mediumturquoise: "#48d1cc", mediumvioletred: "#c71585", midnightblue: "#191970", mintcream: "#f5fffa", mistyrose: "#ffe4e1", moccasin: "#ffe4b5", navajowhite: "#ffdead", navy: "#000080", oldlace: "#fdf5e6", olive: "#808000", olivedrab: "#6b8e23", orange: "#ffa500", orangered: "#ff4500", orchid: "#da70d6", palegoldenrod: "#eee8aa", palegreen: "#98fb98", paleturquoise: "#afeeee", palevioletred: "#db7093", papayawhip: "#ffefd5", peachpuff: "#ffdab9", peru: "#cd853f", pink: "#ffc0cb", plum: "#dda0dd", powderblue: "#b0e0e6", purple: "#800080", rebeccapurple: "#663399", red: "#ff0000", rosybrown: "#bc8f8f", royalblue: "#4169e1", saddlebrown: "#8b4513", salmon: "#fa8072", sandybrown: "#f4a460", seagreen: "#2e8b57", seashell: "#fff5ee", sienna: "#a0522d", silver: "#c0c0c0", skyblue: "#87ceeb", slateblue: "#6a5acd", slategray: "#708090", slategrey: "#708090", snow: "#fffafa", springgreen: "#00ff7f", steelblue: "#4682b4", tan: "#d2b48c", teal: "#008080", thistle: "#d8bfd8", tomato: "#ff6347", turquoise: "#40e0d0", violet: "#ee82ee", wheat: "#f5deb3", white: "#ffffff", whitesmoke: "#f5f5f5", yellow: "#ffff00", yellowgreen: "#9acd32" }; function inputToRGB(color2) { var rgb = { r: 0, g: 0, b: 0 }; var a = 1; var s = null; var v = null; var l = null; var ok = false; var format = false; if (typeof color2 === "string") { color2 = stringInputToObject(color2); } if (typeof color2 === "object") { if (isValidCSSUnit(color2.r) && isValidCSSUnit(color2.g) && isValidCSSUnit(color2.b)) { rgb = rgbToRgb(color2.r, color2.g, color2.b); ok = true; format = String(color2.r).substr(-1) === "%" ? "prgb" : "rgb"; } else if (isValidCSSUnit(color2.h) && isValidCSSUnit(color2.s) && isValidCSSUnit(color2.v)) { s = convertToPercentage(color2.s); v = convertToPercentage(color2.v); rgb = hsvToRgb(color2.h, s, v); ok = true; format = "hsv"; } else if (isValidCSSUnit(color2.h) && isValidCSSUnit(color2.s) && isValidCSSUnit(color2.l)) { s = convertToPercentage(color2.s); l = convertToPercentage(color2.l); rgb = hslToRgb(color2.h, s, l); ok = true; format = "hsl"; } if (Object.prototype.hasOwnProperty.call(color2, "a")) { a = color2.a; } } a = boundAlpha(a); return { ok, format: color2.format || format, r: Math.min(255, Math.max(rgb.r, 0)), g: Math.min(255, Math.max(rgb.g, 0)), b: Math.min(255, Math.max(rgb.b, 0)), a }; } var CSS_INTEGER = "[-\\+]?\\d+%?"; var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; var CSS_UNIT = "(?:".concat(CSS_NUMBER, ")|(?:").concat(CSS_INTEGER, ")"); var PERMISSIVE_MATCH3 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?"); var PERMISSIVE_MATCH4 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?"); var matchers = { CSS_UNIT: new RegExp(CSS_UNIT), rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ }; function stringInputToObject(color2) { color2 = color2.trim().toLowerCase(); if (color2.length === 0) { return false; } var named = false; if (names[color2]) { color2 = names[color2]; named = true; } else if (color2 === "transparent") { return { r: 0, g: 0, b: 0, a: 0, format: "name" }; } var match = matchers.rgb.exec(color2); if (match) { return { r: match[1], g: match[2], b: match[3] }; } match = matchers.rgba.exec(color2); if (match) { return { r: match[1], g: match[2], b: match[3], a: match[4] }; } match = matchers.hsl.exec(color2); if (match) { return { h: match[1], s: match[2], l: match[3] }; } match = matchers.hsla.exec(color2); if (match) { return { h: match[1], s: match[2], l: match[3], a: match[4] }; } match = matchers.hsv.exec(color2); if (match) { return { h: match[1], s: match[2], v: match[3] }; } match = matchers.hsva.exec(color2); if (match) { return { h: match[1], s: match[2], v: match[3], a: match[4] }; } match = matchers.hex8.exec(color2); if (match) { return { r: parseIntFromHex(match[1]), g: parseIntFromHex(match[2]), b: parseIntFromHex(match[3]), a: convertHexToDecimal(match[4]), format: named ? "name" : "hex8" }; } match = matchers.hex6.exec(color2); if (match) { return { r: parseIntFromHex(match[1]), g: parseIntFromHex(match[2]), b: parseIntFromHex(match[3]), format: named ? "name" : "hex" }; } match = matchers.hex4.exec(color2); if (match) { return { r: parseIntFromHex(match[1] + match[1]), g: parseIntFromHex(match[2] + match[2]), b: parseIntFromHex(match[3] + match[3]), a: convertHexToDecimal(match[4] + match[4]), format: named ? "name" : "hex8" }; } match = matchers.hex3.exec(color2); if (match) { return { r: parseIntFromHex(match[1] + match[1]), g: parseIntFromHex(match[2] + match[2]), b: parseIntFromHex(match[3] + match[3]), format: named ? "name" : "hex" }; } return false; } function isValidCSSUnit(color2) { return Boolean(matchers.CSS_UNIT.exec(String(color2))); } var TinyColor = function() { function TinyColor2(color2, opts) { if (color2 === void 0) { color2 = ""; } if (opts === void 0) { opts = {}; } var _a2; if (color2 instanceof TinyColor2) { return color2; } if (typeof color2 === "number") { color2 = numberInputToObject(color2); } this.originalInput = color2; var rgb = inputToRGB(color2); this.originalInput = color2; this.r = rgb.r; this.g = rgb.g; this.b = rgb.b; this.a = rgb.a; this.roundA = Math.round(100 * this.a) / 100; this.format = (_a2 = opts.format) !== null && _a2 !== void 0 ? _a2 : rgb.format; this.gradientType = opts.gradientType; if (this.r < 1) { this.r = Math.round(this.r); } if (this.g < 1) { this.g = Math.round(this.g); } if (this.b < 1) { this.b = Math.round(this.b); } this.isValid = rgb.ok; } TinyColor2.prototype.isDark = function() { return this.getBrightness() < 128; }; TinyColor2.prototype.isLight = function() { return !this.isDark(); }; TinyColor2.prototype.getBrightness = function() { var rgb = this.toRgb(); return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1e3; }; TinyColor2.prototype.getLuminance = function() { var rgb = this.toRgb(); var R2; var G2; var B2; var RsRGB = rgb.r / 255; var GsRGB = rgb.g / 255; var BsRGB = rgb.b / 255; if (RsRGB <= 0.03928) { R2 = RsRGB / 12.92; } else { R2 = Math.pow((RsRGB + 0.055) / 1.055, 2.4); } if (GsRGB <= 0.03928) { G2 = GsRGB / 12.92; } else { G2 = Math.pow((GsRGB + 0.055) / 1.055, 2.4); } if (BsRGB <= 0.03928) { B2 = BsRGB / 12.92; } else { B2 = Math.pow((BsRGB + 0.055) / 1.055, 2.4); } return 0.2126 * R2 + 0.7152 * G2 + 0.0722 * B2; }; TinyColor2.prototype.getAlpha = function() { return this.a; }; TinyColor2.prototype.setAlpha = function(alpha) { this.a = boundAlpha(alpha); this.roundA = Math.round(100 * this.a) / 100; return this; }; TinyColor2.prototype.isMonochrome = function() { var s = this.toHsl().s; return s === 0; }; TinyColor2.prototype.toHsv = function() { var hsv = rgbToHsv(this.r, this.g, this.b); return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a }; }; TinyColor2.prototype.toHsvString = function() { var hsv = rgbToHsv(this.r, this.g, this.b); var h2 = Math.round(hsv.h * 360); var s = Math.round(hsv.s * 100); var v = Math.round(hsv.v * 100); return this.a === 1 ? "hsv(".concat(h2, ", ").concat(s, "%, ").concat(v, "%)") : "hsva(".concat(h2, ", ").concat(s, "%, ").concat(v, "%, ").concat(this.roundA, ")"); }; TinyColor2.prototype.toHsl = function() { var hsl = rgbToHsl(this.r, this.g, this.b); return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a }; }; TinyColor2.prototype.toHslString = function() { var hsl = rgbToHsl(this.r, this.g, this.b); var h2 = Math.round(hsl.h * 360); var s = Math.round(hsl.s * 100); var l = Math.round(hsl.l * 100); return this.a === 1 ? "hsl(".concat(h2, ", ").concat(s, "%, ").concat(l, "%)") : "hsla(".concat(h2, ", ").concat(s, "%, ").concat(l, "%, ").concat(this.roundA, ")"); }; TinyColor2.prototype.toHex = function(allow3Char) { if (allow3Char === void 0) { allow3Char = false; } return rgbToHex(this.r, this.g, this.b, allow3Char); }; TinyColor2.prototype.toHexString = function(allow3Char) { if (allow3Char === void 0) { allow3Char = false; } return "#" + this.toHex(allow3Char); }; TinyColor2.prototype.toHex8 = function(allow4Char) { if (allow4Char === void 0) { allow4Char = false; } return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char); }; TinyColor2.prototype.toHex8String = function(allow4Char) { if (allow4Char === void 0) { allow4Char = false; } return "#" + this.toHex8(allow4Char); }; TinyColor2.prototype.toHexShortString = function(allowShortChar) { if (allowShortChar === void 0) { allowShortChar = false; } return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar); }; TinyColor2.prototype.toRgb = function() { return { r: Math.round(this.r), g: Math.round(this.g), b: Math.round(this.b), a: this.a }; }; TinyColor2.prototype.toRgbString = function() { var r2 = Math.round(this.r); var g = Math.round(this.g); var b = Math.round(this.b); return this.a === 1 ? "rgb(".concat(r2, ", ").concat(g, ", ").concat(b, ")") : "rgba(".concat(r2, ", ").concat(g, ", ").concat(b, ", ").concat(this.roundA, ")"); }; TinyColor2.prototype.toPercentageRgb = function() { var fmt = function(x) { return "".concat(Math.round(bound01$1(x, 255) * 100), "%"); }; return { r: fmt(this.r), g: fmt(this.g), b: fmt(this.b), a: this.a }; }; TinyColor2.prototype.toPercentageRgbString = function() { var rnd = function(x) { return Math.round(bound01$1(x, 255) * 100); }; return this.a === 1 ? "rgb(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%)") : "rgba(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%, ").concat(this.roundA, ")"); }; TinyColor2.prototype.toName = function() { if (this.a === 0) { return "transparent"; } if (this.a < 1) { return false; } var hex = "#" + rgbToHex(this.r, this.g, this.b, false); for (var _i = 0, _a2 = Object.entries(names); _i < _a2.length; _i++) { var _b = _a2[_i], key = _b[0], value = _b[1]; if (hex === value) { return key; } } return false; }; TinyColor2.prototype.toString = function(format) { var formatSet = Boolean(format); format = format !== null && format !== void 0 ? format : this.format; var formattedString = false; var hasAlpha = this.a < 1 && this.a >= 0; var needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith("hex") || format === "name"); if (needsAlphaFormat) { if (format === "name" && this.a === 0) { return this.toName(); } return this.toRgbString(); } if (format === "rgb") { formattedString = this.toRgbString(); } if (format === "prgb") { formattedString = this.toPercentageRgbString(); } if (format === "hex" || format === "hex6") { formattedString = this.toHexString(); } if (format === "hex3") { formattedString = this.toHexString(true); } if (format === "hex4") { formattedString = this.toHex8String(true); } if (format === "hex8") { formattedString = this.toHex8String(); } if (format === "name") { formattedString = this.toName(); } if (format === "hsl") { formattedString = this.toHslString(); } if (format === "hsv") { formattedString = this.toHsvString(); } return formattedString || this.toHexString(); }; TinyColor2.prototype.toNumber = function() { return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b); }; TinyColor2.prototype.clone = function() { return new TinyColor2(this.toString()); }; TinyColor2.prototype.lighten = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.l += amount / 100; hsl.l = clamp01(hsl.l); return new TinyColor2(hsl); }; TinyColor2.prototype.brighten = function(amount) { if (amount === void 0) { amount = 10; } var rgb = this.toRgb(); rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100)))); rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100)))); rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100)))); return new TinyColor2(rgb); }; TinyColor2.prototype.darken = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.l -= amount / 100; hsl.l = clamp01(hsl.l); return new TinyColor2(hsl); }; TinyColor2.prototype.tint = function(amount) { if (amount === void 0) { amount = 10; } return this.mix("white", amount); }; TinyColor2.prototype.shade = function(amount) { if (amount === void 0) { amount = 10; } return this.mix("black", amount); }; TinyColor2.prototype.desaturate = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.s -= amount / 100; hsl.s = clamp01(hsl.s); return new TinyColor2(hsl); }; TinyColor2.prototype.saturate = function(amount) { if (amount === void 0) { amount = 10; } var hsl = this.toHsl(); hsl.s += amount / 100; hsl.s = clamp01(hsl.s); return new TinyColor2(hsl); }; TinyColor2.prototype.greyscale = function() { return this.desaturate(100); }; TinyColor2.prototype.spin = function(amount) { var hsl = this.toHsl(); var hue = (hsl.h + amount) % 360; hsl.h = hue < 0 ? 360 + hue : hue; return new TinyColor2(hsl); }; TinyColor2.prototype.mix = function(color2, amount) { if (amount === void 0) { amount = 50; } var rgb1 = this.toRgb(); var rgb2 = new TinyColor2(color2).toRgb(); var p = amount / 100; var rgba = { r: (rgb2.r - rgb1.r) * p + rgb1.r, g: (rgb2.g - rgb1.g) * p + rgb1.g, b: (rgb2.b - rgb1.b) * p + rgb1.b, a: (rgb2.a - rgb1.a) * p + rgb1.a }; return new TinyColor2(rgba); }; TinyColor2.prototype.analogous = function(results, slices) { if (results === void 0) { results = 6; } if (slices === void 0) { slices = 30; } var hsl = this.toHsl(); var part = 360 / slices; var ret = [this]; for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results; ) { hsl.h = (hsl.h + part) % 360; ret.push(new TinyColor2(hsl)); } return ret; }; TinyColor2.prototype.complement = function() { var hsl = this.toHsl(); hsl.h = (hsl.h + 180) % 360; return new TinyColor2(hsl); }; TinyColor2.prototype.monochromatic = function(results) { if (results === void 0) { results = 6; } var hsv = this.toHsv(); var h2 = hsv.h; var s = hsv.s; var v = hsv.v; var res = []; var modification = 1 / results; while (results--) { res.push(new TinyColor2({ h: h2, s, v })); v = (v + modification) % 1; } return res; }; TinyColor2.prototype.splitcomplement = function() { var hsl = this.toHsl(); var h2 = hsl.h; return [ this, new TinyColor2({ h: (h2 + 72) % 360, s: hsl.s, l: hsl.l }), new TinyColor2({ h: (h2 + 216) % 360, s: hsl.s, l: hsl.l }) ]; }; TinyColor2.prototype.onBackground = function(background) { var fg = this.toRgb(); var bg = new TinyColor2(background).toRgb(); var alpha = fg.a + bg.a * (1 - fg.a); return new TinyColor2({ r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha, g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha, b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha, a: alpha }); }; TinyColor2.prototype.triad = function() { return this.polyad(3); }; TinyColor2.prototype.tetrad = function() { return this.polyad(4); }; TinyColor2.prototype.polyad = function(n) { var hsl = this.toHsl(); var h2 = hsl.h; var result = [this]; var increment = 360 / n; for (var i2 = 1; i2 < n; i2++) { result.push(new TinyColor2({ h: (h2 + i2 * increment) % 360, s: hsl.s, l: hsl.l })); } return result; }; TinyColor2.prototype.equals = function(color2) { return this.toRgbString() === new TinyColor2(color2).toRgbString(); }; return TinyColor2; }(); function darken(color2, amount = 20) { return color2.mix("#141414", amount).toString(); } function useButtonCustomStyle(props) { const _disabled = useFormDisabled(); const ns = useNamespace("button"); return computed$1(() => { let styles = {}; const buttonColor = props.color; if (buttonColor) { const color2 = new TinyColor(buttonColor); const activeBgColor = props.dark ? color2.tint(20).toString() : darken(color2, 20); if (props.plain) { styles = ns.cssVarBlock({ "bg-color": props.dark ? darken(color2, 90) : color2.tint(90).toString(), "text-color": buttonColor, "border-color": props.dark ? darken(color2, 50) : color2.tint(50).toString(), "hover-text-color": `var(${ns.cssVarName("color-white")})`, "hover-bg-color": buttonColor, "hover-border-color": buttonColor, "active-bg-color": activeBgColor, "active-text-color": `var(${ns.cssVarName("color-white")})`, "active-border-color": activeBgColor }); if (_disabled.value) { styles[ns.cssVarBlockName("disabled-bg-color")] = props.dark ? darken(color2, 90) : color2.tint(90).toString(); styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? darken(color2, 50) : color2.tint(50).toString(); styles[ns.cssVarBlockName("disabled-border-color")] = props.dark ? darken(color2, 80) : color2.tint(80).toString(); } } else { const hoverBgColor = props.dark ? darken(color2, 30) : color2.tint(30).toString(); const textColor = color2.isDark() ? `var(${ns.cssVarName("color-white")})` : `var(${ns.cssVarName("color-black")})`; styles = ns.cssVarBlock({ "bg-color": buttonColor, "text-color": textColor, "border-color": buttonColor, "hover-bg-color": hoverBgColor, "hover-text-color": textColor, "hover-border-color": hoverBgColor, "active-bg-color": activeBgColor, "active-border-color": activeBgColor }); if (_disabled.value) { const disabledButtonColor = props.dark ? darken(color2, 50) : color2.tint(50).toString(); styles[ns.cssVarBlockName("disabled-bg-color")] = disabledButtonColor; styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? "rgba(255, 255, 255, 0.5)" : `var(${ns.cssVarName("color-white")})`; styles[ns.cssVarBlockName("disabled-border-color")] = disabledButtonColor; } } } return styles; }); } const __default__$e = defineComponent({ name: "ElButton" }); const _sfc_main$o = /* @__PURE__ */ defineComponent({ ...__default__$e, props: buttonProps, emits: buttonEmits, setup(__props, { expose, emit }) { const props = __props; const buttonStyle = useButtonCustomStyle(props); const ns = useNamespace("button"); const { _ref, _size, _type, _disabled, _props, shouldAddSpace, handleClick } = useButton(props, emit); expose({ ref: _ref, size: _size, type: _type, disabled: _disabled, shouldAddSpace }); return (_ctx, _cache) => { return openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), mergeProps({ ref_key: "_ref", ref: _ref }, unref(_props), { class: [ unref(ns).b(), unref(ns).m(unref(_type)), unref(ns).m(unref(_size)), unref(ns).is("disabled", unref(_disabled)), unref(ns).is("loading", _ctx.loading), unref(ns).is("plain", _ctx.plain), unref(ns).is("round", _ctx.round), unref(ns).is("circle", _ctx.circle), unref(ns).is("text", _ctx.text), unref(ns).is("link", _ctx.link), unref(ns).is("has-bg", _ctx.bg) ], style: unref(buttonStyle), onClick: unref(handleClick) }), { default: withCtx(() => [ _ctx.loading ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ _ctx.$slots.loading ? renderSlot(_ctx.$slots, "loading", { key: 0 }) : (openBlock(), createBlock(unref(ElIcon), { key: 1, class: normalizeClass(unref(ns).is("loading")) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.loadingIcon))) ]), _: 1 }, 8, ["class"])) ], 64)) : _ctx.icon || _ctx.$slots.icon ? (openBlock(), createBlock(unref(ElIcon), { key: 1 }, { default: withCtx(() => [ _ctx.icon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.icon), { key: 0 })) : renderSlot(_ctx.$slots, "icon", { key: 1 }) ]), _: 3 })) : createCommentVNode("v-if", true), _ctx.$slots.default ? (openBlock(), createElementBlock("span", { key: 2, class: normalizeClass({ [unref(ns).em("text", "expand")]: unref(shouldAddSpace) }) }, [ renderSlot(_ctx.$slots, "default") ], 2)) : createCommentVNode("v-if", true) ]), _: 3 }, 16, ["class", "style", "onClick"]); }; } }); var Button$2 = /* @__PURE__ */ _export_sfc$1(_sfc_main$o, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/button/src/button.vue"]]); const buttonGroupProps = { size: buttonProps.size, type: buttonProps.type }; const __default__$d = defineComponent({ name: "ElButtonGroup" }); const _sfc_main$n = /* @__PURE__ */ defineComponent({ ...__default__$d, props: buttonGroupProps, setup(__props) { const props = __props; provide(buttonGroupContextKey, reactive({ size: toRef(props, "size"), type: toRef(props, "type") })); const ns = useNamespace("button"); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass(`${unref(ns).b("group")}`) }, [ renderSlot(_ctx.$slots, "default") ], 2); }; } }); var ButtonGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$n, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/button/src/button-group.vue"]]); const ElButton = withInstall(Button$2, { ButtonGroup }); const ElButtonGroup = withNoopInstall(ButtonGroup); const nodeList = /* @__PURE__ */ new Map(); let startClick; if (isClient) { document.addEventListener("mousedown", (e) => startClick = e); document.addEventListener("mouseup", (e) => { for (const handlers of nodeList.values()) { for (const { documentHandler } of handlers) { documentHandler(e, startClick); } } }); } function createDocumentHandler(el, binding) { let excludes = []; if (Array.isArray(binding.arg)) { excludes = binding.arg; } else if (isElement(binding.arg)) { excludes.push(binding.arg); } return function(mouseup, mousedown) { const popperRef = binding.instance.popperRef; const mouseUpTarget = mouseup.target; const mouseDownTarget = mousedown == null ? void 0 : mousedown.target; const isBound = !binding || !binding.instance; const isTargetExists = !mouseUpTarget || !mouseDownTarget; const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget); const isSelf = el === mouseUpTarget; const isTargetExcluded = excludes.length && excludes.some((item) => item == null ? void 0 : item.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget); const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget)); if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) { return; } binding.value(mouseup, mousedown); }; } const ClickOutside = { beforeMount(el, binding) { if (!nodeList.has(el)) { nodeList.set(el, []); } nodeList.get(el).push({ documentHandler: createDocumentHandler(el, binding), bindingFn: binding.value }); }, updated(el, binding) { if (!nodeList.has(el)) { nodeList.set(el, []); } const handlers = nodeList.get(el); const oldHandlerIndex = handlers.findIndex((item) => item.bindingFn === binding.oldValue); const newHandler = { documentHandler: createDocumentHandler(el, binding), bindingFn: binding.value }; if (oldHandlerIndex >= 0) { handlers.splice(oldHandlerIndex, 1, newHandler); } else { handlers.push(newHandler); } }, unmounted(el) { nodeList.delete(el); } }; const REPEAT_INTERVAL = 100; const REPEAT_DELAY = 600; const vRepeatClick = { beforeMount(el, binding) { const value = binding.value; const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = isFunction$3(value) ? {} : value; let intervalId; let delayId; const handler = () => isFunction$3(value) ? value() : value.handler(); const clear = () => { if (delayId) { clearTimeout(delayId); delayId = void 0; } if (intervalId) { clearInterval(intervalId); intervalId = void 0; } }; el.addEventListener("mousedown", (evt) => { if (evt.button !== 0) return; clear(); handler(); document.addEventListener("mouseup", () => clear(), { once: true }); delayId = setTimeout(() => { intervalId = setInterval(() => { handler(); }, interval); }, delay); }); } }; const radioPropsBase = buildProps({ size: useSizeProp, disabled: Boolean, label: { type: [String, Number, Boolean], default: "" } }); const radioProps = buildProps({ ...radioPropsBase, modelValue: { type: [String, Number, Boolean], default: "" }, name: { type: String, default: "" }, border: Boolean }); const radioEmits = { [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val), [CHANGE_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val) }; const radioGroupKey = Symbol("radioGroupKey"); const useRadio = (props, emit) => { const radioRef = ref(); const radioGroup = inject(radioGroupKey, void 0); const isGroup = computed$1(() => !!radioGroup); const modelValue = computed$1({ get() { return isGroup.value ? radioGroup.modelValue : props.modelValue; }, set(val) { if (isGroup.value) { radioGroup.changeEvent(val); } else { emit && emit(UPDATE_MODEL_EVENT, val); } radioRef.value.checked = props.modelValue === props.label; } }); const size = useFormSize(computed$1(() => radioGroup == null ? void 0 : radioGroup.size)); const disabled = useFormDisabled(computed$1(() => radioGroup == null ? void 0 : radioGroup.disabled)); const focus = ref(false); const tabIndex = computed$1(() => { return disabled.value || isGroup.value && modelValue.value !== props.label ? -1 : 0; }); return { radioRef, isGroup, radioGroup, focus, size, disabled, tabIndex, modelValue }; }; const _hoisted_1$e = ["value", "name", "disabled"]; const __default__$c = defineComponent({ name: "ElRadio" }); const _sfc_main$m = /* @__PURE__ */ defineComponent({ ...__default__$c, props: radioProps, emits: radioEmits, setup(__props, { emit }) { const props = __props; const ns = useNamespace("radio"); const { radioRef, radioGroup, focus, size, disabled, modelValue } = useRadio(props, emit); function handleChange() { nextTick(() => emit("change", modelValue.value)); } return (_ctx, _cache) => { var _a2; return openBlock(), createElementBlock("label", { class: normalizeClass([ unref(ns).b(), unref(ns).is("disabled", unref(disabled)), unref(ns).is("focus", unref(focus)), unref(ns).is("bordered", _ctx.border), unref(ns).is("checked", unref(modelValue) === _ctx.label), unref(ns).m(unref(size)) ]) }, [ createElementVNode("span", { class: normalizeClass([ unref(ns).e("input"), unref(ns).is("disabled", unref(disabled)), unref(ns).is("checked", unref(modelValue) === _ctx.label) ]) }, [ withDirectives(createElementVNode("input", { ref_key: "radioRef", ref: radioRef, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(modelValue) ? modelValue.value = $event : null), class: normalizeClass(unref(ns).e("original")), value: _ctx.label, name: _ctx.name || ((_a2 = unref(radioGroup)) == null ? void 0 : _a2.name), disabled: unref(disabled), type: "radio", onFocus: _cache[1] || (_cache[1] = ($event) => focus.value = true), onBlur: _cache[2] || (_cache[2] = ($event) => focus.value = false), onChange: handleChange }, null, 42, _hoisted_1$e), [ [vModelRadio, unref(modelValue)] ]), createElementVNode("span", { class: normalizeClass(unref(ns).e("inner")) }, null, 2) ], 2), createElementVNode("span", { class: normalizeClass(unref(ns).e("label")), onKeydown: _cache[3] || (_cache[3] = withModifiers(() => { }, ["stop"])) }, [ renderSlot(_ctx.$slots, "default", {}, () => [ createTextVNode(toDisplayString(_ctx.label), 1) ]) ], 34) ], 2); }; } }); var Radio = /* @__PURE__ */ _export_sfc$1(_sfc_main$m, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/radio/src/radio.vue"]]); const radioButtonProps = buildProps({ ...radioPropsBase, name: { type: String, default: "" } }); const _hoisted_1$d = ["value", "name", "disabled"]; const __default__$b = defineComponent({ name: "ElRadioButton" }); const _sfc_main$l = /* @__PURE__ */ defineComponent({ ...__default__$b, props: radioButtonProps, setup(__props) { const props = __props; const ns = useNamespace("radio"); const { radioRef, focus, size, disabled, modelValue, radioGroup } = useRadio(props); const activeStyle = computed$1(() => { return { backgroundColor: (radioGroup == null ? void 0 : radioGroup.fill) || "", borderColor: (radioGroup == null ? void 0 : radioGroup.fill) || "", boxShadow: (radioGroup == null ? void 0 : radioGroup.fill) ? `-1px 0 0 0 ${radioGroup.fill}` : "", color: (radioGroup == null ? void 0 : radioGroup.textColor) || "" }; }); return (_ctx, _cache) => { var _a2; return openBlock(), createElementBlock("label", { class: normalizeClass([ unref(ns).b("button"), unref(ns).is("active", unref(modelValue) === _ctx.label), unref(ns).is("disabled", unref(disabled)), unref(ns).is("focus", unref(focus)), unref(ns).bm("button", unref(size)) ]) }, [ withDirectives(createElementVNode("input", { ref_key: "radioRef", ref: radioRef, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(modelValue) ? modelValue.value = $event : null), class: normalizeClass(unref(ns).be("button", "original-radio")), value: _ctx.label, type: "radio", name: _ctx.name || ((_a2 = unref(radioGroup)) == null ? void 0 : _a2.name), disabled: unref(disabled), onFocus: _cache[1] || (_cache[1] = ($event) => focus.value = true), onBlur: _cache[2] || (_cache[2] = ($event) => focus.value = false) }, null, 42, _hoisted_1$d), [ [vModelRadio, unref(modelValue)] ]), createElementVNode("span", { class: normalizeClass(unref(ns).be("button", "inner")), style: normalizeStyle(unref(modelValue) === _ctx.label ? unref(activeStyle) : {}), onKeydown: _cache[3] || (_cache[3] = withModifiers(() => { }, ["stop"])) }, [ renderSlot(_ctx.$slots, "default", {}, () => [ createTextVNode(toDisplayString(_ctx.label), 1) ]) ], 38) ], 2); }; } }); var RadioButton = /* @__PURE__ */ _export_sfc$1(_sfc_main$l, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/radio/src/radio-button.vue"]]); const radioGroupProps = buildProps({ id: { type: String, default: void 0 }, size: useSizeProp, disabled: Boolean, modelValue: { type: [String, Number, Boolean], default: "" }, fill: { type: String, default: "" }, label: { type: String, default: void 0 }, textColor: { type: String, default: "" }, name: { type: String, default: void 0 }, validateEvent: { type: Boolean, default: true } }); const radioGroupEmits = radioEmits; const _hoisted_1$c = ["id", "aria-label", "aria-labelledby"]; const __default__$a = defineComponent({ name: "ElRadioGroup" }); const _sfc_main$k = /* @__PURE__ */ defineComponent({ ...__default__$a, props: radioGroupProps, emits: radioGroupEmits, setup(__props, { emit }) { const props = __props; const ns = useNamespace("radio"); const radioId = useId(); const radioGroupRef = ref(); const { formItem } = useFormItem(); const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem }); const changeEvent = (value) => { emit(UPDATE_MODEL_EVENT, value); nextTick(() => emit("change", value)); }; onMounted(() => { const radios = radioGroupRef.value.querySelectorAll("[type=radio]"); const firstLabel = radios[0]; if (!Array.from(radios).some((radio) => radio.checked) && firstLabel) { firstLabel.tabIndex = 0; } }); const name = computed$1(() => { return props.name || radioId.value; }); provide(radioGroupKey, reactive({ ...toRefs(props), changeEvent, name })); watch(() => props.modelValue, () => { if (props.validateEvent) { formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); } }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { id: unref(groupId), ref_key: "radioGroupRef", ref: radioGroupRef, class: normalizeClass(unref(ns).b("group")), role: "radiogroup", "aria-label": !unref(isLabeledByFormItem) ? _ctx.label || "radio-group" : void 0, "aria-labelledby": unref(isLabeledByFormItem) ? unref(formItem).labelId : void 0 }, [ renderSlot(_ctx.$slots, "default") ], 10, _hoisted_1$c); }; } }); var RadioGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$k, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/radio/src/radio-group.vue"]]); withInstall(Radio, { RadioButton, RadioGroup }); const ElRadioGroup = withNoopInstall(RadioGroup); const ElRadioButton = withNoopInstall(RadioButton); const tagProps = buildProps({ closable: Boolean, type: { type: String, values: ["success", "info", "warning", "danger", ""], default: "" }, hit: Boolean, disableTransitions: Boolean, color: { type: String, default: "" }, size: { type: String, values: componentSizes, default: "" }, effect: { type: String, values: ["dark", "light", "plain"], default: "light" }, round: Boolean }); const tagEmits = { close: (evt) => evt instanceof MouseEvent, click: (evt) => evt instanceof MouseEvent }; const __default__$9 = defineComponent({ name: "ElTag" }); const _sfc_main$j = /* @__PURE__ */ defineComponent({ ...__default__$9, props: tagProps, emits: tagEmits, setup(__props, { emit }) { const props = __props; const tagSize = useFormSize(); const ns = useNamespace("tag"); const classes = computed$1(() => { const { type: type2, hit, effect, closable, round: round2 } = props; return [ ns.b(), ns.is("closable", closable), ns.m(type2), ns.m(tagSize.value), ns.m(effect), ns.is("hit", hit), ns.is("round", round2) ]; }); const handleClose = (event2) => { emit("close", event2); }; const handleClick = (event2) => { emit("click", event2); }; return (_ctx, _cache) => { return _ctx.disableTransitions ? (openBlock(), createElementBlock("span", { key: 0, class: normalizeClass(unref(classes)), style: normalizeStyle({ backgroundColor: _ctx.color }), onClick: handleClick }, [ createElementVNode("span", { class: normalizeClass(unref(ns).e("content")) }, [ renderSlot(_ctx.$slots, "default") ], 2), _ctx.closable ? (openBlock(), createBlock(unref(ElIcon), { key: 0, class: normalizeClass(unref(ns).e("close")), onClick: withModifiers(handleClose, ["stop"]) }, { default: withCtx(() => [ createVNode(unref(close_default)) ]), _: 1 }, 8, ["class", "onClick"])) : createCommentVNode("v-if", true) ], 6)) : (openBlock(), createBlock(Transition, { key: 1, name: `${unref(ns).namespace.value}-zoom-in-center`, appear: "" }, { default: withCtx(() => [ createElementVNode("span", { class: normalizeClass(unref(classes)), style: normalizeStyle({ backgroundColor: _ctx.color }), onClick: handleClick }, [ createElementVNode("span", { class: normalizeClass(unref(ns).e("content")) }, [ renderSlot(_ctx.$slots, "default") ], 2), _ctx.closable ? (openBlock(), createBlock(unref(ElIcon), { key: 0, class: normalizeClass(unref(ns).e("close")), onClick: withModifiers(handleClose, ["stop"]) }, { default: withCtx(() => [ createVNode(unref(close_default)) ]), _: 1 }, 8, ["class", "onClick"])) : createCommentVNode("v-if", true) ], 6) ]), _: 3 }, 8, ["name"])); }; } }); var Tag = /* @__PURE__ */ _export_sfc$1(_sfc_main$j, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/tag/src/tag.vue"]]); const ElTag = withInstall(Tag); const emitChangeFn = (value) => typeof isNumber(value); const collapseProps = buildProps({ accordion: Boolean, modelValue: { type: definePropType([Array, String, Number]), default: () => mutable([]) } }); const collapseEmits = { [UPDATE_MODEL_EVENT]: emitChangeFn, [CHANGE_EVENT]: emitChangeFn }; const collapseContextKey = Symbol("collapseContextKey"); const useCollapse = (props, emit) => { const activeNames = ref(castArray(props.modelValue)); const setActiveNames = (_activeNames) => { activeNames.value = _activeNames; const value = props.accordion ? activeNames.value[0] : activeNames.value; emit(UPDATE_MODEL_EVENT, value); emit(CHANGE_EVENT, value); }; const handleItemClick = (name) => { if (props.accordion) { setActiveNames([activeNames.value[0] === name ? "" : name]); } else { const _activeNames = [...activeNames.value]; const index2 = _activeNames.indexOf(name); if (index2 > -1) { _activeNames.splice(index2, 1); } else { _activeNames.push(name); } setActiveNames(_activeNames); } }; watch(() => props.modelValue, () => activeNames.value = castArray(props.modelValue), { deep: true }); provide(collapseContextKey, { activeNames, handleItemClick }); return { activeNames, setActiveNames }; }; const useCollapseDOM = () => { const ns = useNamespace("collapse"); const rootKls = computed$1(() => ns.b()); return { rootKls }; }; const __default__$8 = defineComponent({ name: "ElCollapse" }); const _sfc_main$i = /* @__PURE__ */ defineComponent({ ...__default__$8, props: collapseProps, emits: collapseEmits, setup(__props, { expose, emit }) { const props = __props; const { activeNames, setActiveNames } = useCollapse(props, emit); const { rootKls } = useCollapseDOM(); expose({ activeNames, setActiveNames }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass(unref(rootKls)), role: "tablist", "aria-multiselectable": "true" }, [ renderSlot(_ctx.$slots, "default") ], 2); }; } }); var Collapse = /* @__PURE__ */ _export_sfc$1(_sfc_main$i, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/collapse/src/collapse.vue"]]); const __default__$7 = defineComponent({ name: "ElCollapseTransition" }); const _sfc_main$h = /* @__PURE__ */ defineComponent({ ...__default__$7, setup(__props) { const ns = useNamespace("collapse-transition"); const on3 = { beforeEnter(el) { if (!el.dataset) el.dataset = {}; el.dataset.oldPaddingTop = el.style.paddingTop; el.dataset.oldPaddingBottom = el.style.paddingBottom; el.style.maxHeight = 0; el.style.paddingTop = 0; el.style.paddingBottom = 0; }, enter(el) { el.dataset.oldOverflow = el.style.overflow; if (el.scrollHeight !== 0) { el.style.maxHeight = `${el.scrollHeight}px`; el.style.paddingTop = el.dataset.oldPaddingTop; el.style.paddingBottom = el.dataset.oldPaddingBottom; } else { el.style.maxHeight = 0; el.style.paddingTop = el.dataset.oldPaddingTop; el.style.paddingBottom = el.dataset.oldPaddingBottom; } el.style.overflow = "hidden"; }, afterEnter(el) { el.style.maxHeight = ""; el.style.overflow = el.dataset.oldOverflow; }, beforeLeave(el) { if (!el.dataset) el.dataset = {}; el.dataset.oldPaddingTop = el.style.paddingTop; el.dataset.oldPaddingBottom = el.style.paddingBottom; el.dataset.oldOverflow = el.style.overflow; el.style.maxHeight = `${el.scrollHeight}px`; el.style.overflow = "hidden"; }, leave(el) { if (el.scrollHeight !== 0) { el.style.maxHeight = 0; el.style.paddingTop = 0; el.style.paddingBottom = 0; } }, afterLeave(el) { el.style.maxHeight = ""; el.style.overflow = el.dataset.oldOverflow; el.style.paddingTop = el.dataset.oldPaddingTop; el.style.paddingBottom = el.dataset.oldPaddingBottom; } }; return (_ctx, _cache) => { return openBlock(), createBlock(Transition, mergeProps({ name: unref(ns).b() }, toHandlers(on3)), { default: withCtx(() => [ renderSlot(_ctx.$slots, "default") ]), _: 3 }, 16, ["name"]); }; } }); var CollapseTransition = /* @__PURE__ */ _export_sfc$1(_sfc_main$h, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/collapse-transition/src/collapse-transition.vue"]]); CollapseTransition.install = (app) => { app.component(CollapseTransition.name, CollapseTransition); }; const _CollapseTransition = CollapseTransition; const collapseItemProps = buildProps({ title: { type: String, default: "" }, name: { type: definePropType([String, Number]), default: () => generateId() }, disabled: Boolean }); const useCollapseItem = (props) => { const collapse = inject(collapseContextKey); const focusing = ref(false); const isClick = ref(false); const id = ref(generateId()); const isActive = computed$1(() => collapse == null ? void 0 : collapse.activeNames.value.includes(props.name)); const handleFocus = () => { setTimeout(() => { if (!isClick.value) { focusing.value = true; } else { isClick.value = false; } }, 50); }; const handleHeaderClick = () => { if (props.disabled) return; collapse == null ? void 0 : collapse.handleItemClick(props.name); focusing.value = false; isClick.value = true; }; const handleEnterClick = () => { collapse == null ? void 0 : collapse.handleItemClick(props.name); }; return { focusing, id, isActive, handleFocus, handleHeaderClick, handleEnterClick }; }; const useCollapseItemDOM = (props, { focusing, isActive, id }) => { const ns = useNamespace("collapse"); const rootKls = computed$1(() => [ ns.b("item"), ns.is("active", unref(isActive)), ns.is("disabled", props.disabled) ]); const headKls = computed$1(() => [ ns.be("item", "header"), ns.is("active", unref(isActive)), { focusing: unref(focusing) && !props.disabled } ]); const arrowKls = computed$1(() => [ ns.be("item", "arrow"), ns.is("active", unref(isActive)) ]); const itemWrapperKls = computed$1(() => ns.be("item", "wrap")); const itemContentKls = computed$1(() => ns.be("item", "content")); const scopedContentId = computed$1(() => ns.b(`content-${unref(id)}`)); const scopedHeadId = computed$1(() => ns.b(`head-${unref(id)}`)); return { arrowKls, headKls, rootKls, itemWrapperKls, itemContentKls, scopedContentId, scopedHeadId }; }; const _hoisted_1$b = ["aria-expanded", "aria-controls", "aria-describedby"]; const _hoisted_2$8 = ["id", "tabindex"]; const _hoisted_3$5 = ["id", "aria-hidden", "aria-labelledby"]; const __default__$6 = defineComponent({ name: "ElCollapseItem" }); const _sfc_main$g = /* @__PURE__ */ defineComponent({ ...__default__$6, props: collapseItemProps, setup(__props, { expose }) { const props = __props; const { focusing, id, isActive, handleFocus, handleHeaderClick, handleEnterClick } = useCollapseItem(props); const { arrowKls, headKls, rootKls, itemWrapperKls, itemContentKls, scopedContentId, scopedHeadId } = useCollapseItemDOM(props, { focusing, isActive, id }); expose({ isActive }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass(unref(rootKls)) }, [ createElementVNode("div", { role: "tab", "aria-expanded": unref(isActive), "aria-controls": unref(scopedContentId), "aria-describedby": unref(scopedContentId) }, [ createElementVNode("div", { id: unref(scopedHeadId), class: normalizeClass(unref(headKls)), role: "button", tabindex: _ctx.disabled ? -1 : 0, onClick: _cache[0] || (_cache[0] = (...args) => unref(handleHeaderClick) && unref(handleHeaderClick)(...args)), onKeypress: _cache[1] || (_cache[1] = withKeys(withModifiers((...args) => unref(handleEnterClick) && unref(handleEnterClick)(...args), ["stop", "prevent"]), ["space", "enter"])), onFocus: _cache[2] || (_cache[2] = (...args) => unref(handleFocus) && unref(handleFocus)(...args)), onBlur: _cache[3] || (_cache[3] = ($event) => focusing.value = false) }, [ renderSlot(_ctx.$slots, "title", {}, () => [ createTextVNode(toDisplayString(_ctx.title), 1) ]), createVNode(unref(ElIcon), { class: normalizeClass(unref(arrowKls)) }, { default: withCtx(() => [ createVNode(unref(arrow_right_default)) ]), _: 1 }, 8, ["class"]) ], 42, _hoisted_2$8) ], 8, _hoisted_1$b), createVNode(unref(_CollapseTransition), null, { default: withCtx(() => [ withDirectives(createElementVNode("div", { id: unref(scopedContentId), class: normalizeClass(unref(itemWrapperKls)), role: "tabpanel", "aria-hidden": !unref(isActive), "aria-labelledby": unref(scopedHeadId) }, [ createElementVNode("div", { class: normalizeClass(unref(itemContentKls)) }, [ renderSlot(_ctx.$slots, "default") ], 2) ], 10, _hoisted_3$5), [ [vShow, unref(isActive)] ]) ]), _: 3 }) ], 2); }; } }); var CollapseItem = /* @__PURE__ */ _export_sfc$1(_sfc_main$g, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/collapse/src/collapse-item.vue"]]); const ElCollapse = withInstall(Collapse, { CollapseItem }); const ElCollapseItem = withNoopInstall(CollapseItem); const alphaSliderProps = buildProps({ color: { type: definePropType(Object), required: true }, vertical: { type: Boolean, default: false } }); let isDragging = false; function draggable(element, options2) { if (!isClient) return; const moveFn = function(event2) { var _a2; (_a2 = options2.drag) == null ? void 0 : _a2.call(options2, event2); }; const upFn = function(event2) { var _a2; document.removeEventListener("mousemove", moveFn); document.removeEventListener("mouseup", upFn); document.removeEventListener("touchmove", moveFn); document.removeEventListener("touchend", upFn); document.onselectstart = null; document.ondragstart = null; isDragging = false; (_a2 = options2.end) == null ? void 0 : _a2.call(options2, event2); }; const downFn = function(event2) { var _a2; if (isDragging) return; event2.preventDefault(); document.onselectstart = () => false; document.ondragstart = () => false; document.addEventListener("mousemove", moveFn); document.addEventListener("mouseup", upFn); document.addEventListener("touchmove", moveFn); document.addEventListener("touchend", upFn); isDragging = true; (_a2 = options2.start) == null ? void 0 : _a2.call(options2, event2); }; element.addEventListener("mousedown", downFn); element.addEventListener("touchstart", downFn); } const useAlphaSlider = (props) => { const instance = getCurrentInstance(); const thumb = shallowRef(); const bar = shallowRef(); function handleClick(event2) { const target = event2.target; if (target !== thumb.value) { handleDrag(event2); } } function handleDrag(event2) { if (!bar.value || !thumb.value) return; const el = instance.vnode.el; const rect = el.getBoundingClientRect(); const { clientX, clientY } = getClientXY(event2); if (!props.vertical) { let left = clientX - rect.left; left = Math.max(thumb.value.offsetWidth / 2, left); left = Math.min(left, rect.width - thumb.value.offsetWidth / 2); props.color.set("alpha", Math.round((left - thumb.value.offsetWidth / 2) / (rect.width - thumb.value.offsetWidth) * 100)); } else { let top = clientY - rect.top; top = Math.max(thumb.value.offsetHeight / 2, top); top = Math.min(top, rect.height - thumb.value.offsetHeight / 2); props.color.set("alpha", Math.round((top - thumb.value.offsetHeight / 2) / (rect.height - thumb.value.offsetHeight) * 100)); } } return { thumb, bar, handleDrag, handleClick }; }; const useAlphaSliderDOM = (props, { bar, thumb, handleDrag }) => { const instance = getCurrentInstance(); const ns = useNamespace("color-alpha-slider"); const thumbLeft = ref(0); const thumbTop = ref(0); const background = ref(); function getThumbLeft() { if (!thumb.value) return 0; if (props.vertical) return 0; const el = instance.vnode.el; const alpha = props.color.get("alpha"); if (!el) return 0; return Math.round(alpha * (el.offsetWidth - thumb.value.offsetWidth / 2) / 100); } function getThumbTop() { if (!thumb.value) return 0; const el = instance.vnode.el; if (!props.vertical) return 0; const alpha = props.color.get("alpha"); if (!el) return 0; return Math.round(alpha * (el.offsetHeight - thumb.value.offsetHeight / 2) / 100); } function getBackground() { if (props.color && props.color.value) { const { r: r2, g, b } = props.color.toRgb(); return `linear-gradient(to right, rgba(${r2}, ${g}, ${b}, 0) 0%, rgba(${r2}, ${g}, ${b}, 1) 100%)`; } return ""; } function update() { thumbLeft.value = getThumbLeft(); thumbTop.value = getThumbTop(); background.value = getBackground(); } onMounted(() => { if (!bar.value || !thumb.value) return; const dragConfig = { drag: (event2) => { handleDrag(event2); }, end: (event2) => { handleDrag(event2); } }; draggable(bar.value, dragConfig); draggable(thumb.value, dragConfig); update(); }); watch(() => props.color.get("alpha"), () => update()); watch(() => props.color.value, () => update()); const rootKls = computed$1(() => [ns.b(), ns.is("vertical", props.vertical)]); const barKls = computed$1(() => ns.e("bar")); const thumbKls = computed$1(() => ns.e("thumb")); const barStyle = computed$1(() => ({ background: background.value })); const thumbStyle = computed$1(() => ({ left: addUnit(thumbLeft.value), top: addUnit(thumbTop.value) })); return { rootKls, barKls, barStyle, thumbKls, thumbStyle, update }; }; const COMPONENT_NAME$2 = "ElColorAlphaSlider"; const __default__$5 = defineComponent({ name: COMPONENT_NAME$2 }); const _sfc_main$f = /* @__PURE__ */ defineComponent({ ...__default__$5, props: alphaSliderProps, setup(__props, { expose }) { const props = __props; const { bar, thumb, handleDrag, handleClick } = useAlphaSlider(props); const { rootKls, barKls, barStyle, thumbKls, thumbStyle, update } = useAlphaSliderDOM(props, { bar, thumb, handleDrag }); expose({ update, bar, thumb }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass(unref(rootKls)) }, [ createElementVNode("div", { ref_key: "bar", ref: bar, class: normalizeClass(unref(barKls)), style: normalizeStyle(unref(barStyle)), onClick: _cache[0] || (_cache[0] = (...args) => unref(handleClick) && unref(handleClick)(...args)) }, null, 6), createElementVNode("div", { ref_key: "thumb", ref: thumb, class: normalizeClass(unref(thumbKls)), style: normalizeStyle(unref(thumbStyle)) }, null, 6) ], 2); }; } }); var AlphaSlider = /* @__PURE__ */ _export_sfc$1(_sfc_main$f, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/color-picker/src/components/alpha-slider.vue"]]); const _sfc_main$e = defineComponent({ name: "ElColorHueSlider", props: { color: { type: Object, required: true }, vertical: Boolean }, setup(props) { const ns = useNamespace("color-hue-slider"); const instance = getCurrentInstance(); const thumb = ref(); const bar = ref(); const thumbLeft = ref(0); const thumbTop = ref(0); const hueValue = computed$1(() => { return props.color.get("hue"); }); watch(() => hueValue.value, () => { update(); }); function handleClick(event2) { const target = event2.target; if (target !== thumb.value) { handleDrag(event2); } } function handleDrag(event2) { if (!bar.value || !thumb.value) return; const el = instance.vnode.el; const rect = el.getBoundingClientRect(); const { clientX, clientY } = getClientXY(event2); let hue; if (!props.vertical) { let left = clientX - rect.left; left = Math.min(left, rect.width - thumb.value.offsetWidth / 2); left = Math.max(thumb.value.offsetWidth / 2, left); hue = Math.round((left - thumb.value.offsetWidth / 2) / (rect.width - thumb.value.offsetWidth) * 360); } else { let top = clientY - rect.top; top = Math.min(top, rect.height - thumb.value.offsetHeight / 2); top = Math.max(thumb.value.offsetHeight / 2, top); hue = Math.round((top - thumb.value.offsetHeight / 2) / (rect.height - thumb.value.offsetHeight) * 360); } props.color.set("hue", hue); } function getThumbLeft() { if (!thumb.value) return 0; const el = instance.vnode.el; if (props.vertical) return 0; const hue = props.color.get("hue"); if (!el) return 0; return Math.round(hue * (el.offsetWidth - thumb.value.offsetWidth / 2) / 360); } function getThumbTop() { if (!thumb.value) return 0; const el = instance.vnode.el; if (!props.vertical) return 0; const hue = props.color.get("hue"); if (!el) return 0; return Math.round(hue * (el.offsetHeight - thumb.value.offsetHeight / 2) / 360); } function update() { thumbLeft.value = getThumbLeft(); thumbTop.value = getThumbTop(); } onMounted(() => { if (!bar.value || !thumb.value) return; const dragConfig = { drag: (event2) => { handleDrag(event2); }, end: (event2) => { handleDrag(event2); } }; draggable(bar.value, dragConfig); draggable(thumb.value, dragConfig); update(); }); return { bar, thumb, thumbLeft, thumbTop, hueValue, handleClick, update, ns }; } }); function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", { class: normalizeClass([_ctx.ns.b(), _ctx.ns.is("vertical", _ctx.vertical)]) }, [ createElementVNode("div", { ref: "bar", class: normalizeClass(_ctx.ns.e("bar")), onClick: _cache[0] || (_cache[0] = (...args) => _ctx.handleClick && _ctx.handleClick(...args)) }, null, 2), createElementVNode("div", { ref: "thumb", class: normalizeClass(_ctx.ns.e("thumb")), style: normalizeStyle({ left: _ctx.thumbLeft + "px", top: _ctx.thumbTop + "px" }) }, null, 6) ], 2); } var HueSlider = /* @__PURE__ */ _export_sfc$1(_sfc_main$e, [["render", _sfc_render$6], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/color-picker/src/components/hue-slider.vue"]]); const colorPickerProps = buildProps({ modelValue: String, id: String, showAlpha: Boolean, colorFormat: String, disabled: Boolean, size: useSizeProp, popperClass: { type: String, default: "" }, label: { type: String, default: void 0 }, tabindex: { type: [String, Number], default: 0 }, predefine: { type: definePropType(Array) }, validateEvent: { type: Boolean, default: true } }); const colorPickerEmits = { [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNil(val), [CHANGE_EVENT]: (val) => isString(val) || isNil(val), activeChange: (val) => isString(val) || isNil(val) }; const colorPickerContextKey = Symbol("colorPickerContextKey"); const hsv2hsl = function(hue, sat, val) { return [ hue, sat * val / ((hue = (2 - sat) * val) < 1 ? hue : 2 - hue) || 0, hue / 2 ]; }; const isOnePointZero = function(n) { return typeof n === "string" && n.includes(".") && Number.parseFloat(n) === 1; }; const isPercentage = function(n) { return typeof n === "string" && n.includes("%"); }; const bound01 = function(value, max2) { if (isOnePointZero(value)) value = "100%"; const processPercent = isPercentage(value); value = Math.min(max2, Math.max(0, Number.parseFloat(`${value}`))); if (processPercent) { value = Number.parseInt(`${value * max2}`, 10) / 100; } if (Math.abs(value - max2) < 1e-6) { return 1; } return value % max2 / Number.parseFloat(max2); }; const INT_HEX_MAP = { 10: "A", 11: "B", 12: "C", 13: "D", 14: "E", 15: "F" }; const hexOne = (value) => { value = Math.min(Math.round(value), 255); const high = Math.floor(value / 16); const low = value % 16; return `${INT_HEX_MAP[high] || high}${INT_HEX_MAP[low] || low}`; }; const toHex = function({ r: r2, g, b }) { if (Number.isNaN(+r2) || Number.isNaN(+g) || Number.isNaN(+b)) return ""; return `#${hexOne(r2)}${hexOne(g)}${hexOne(b)}`; }; const HEX_INT_MAP = { A: 10, B: 11, C: 12, D: 13, E: 14, F: 15 }; const parseHexChannel = function(hex) { if (hex.length === 2) { return (HEX_INT_MAP[hex[0].toUpperCase()] || +hex[0]) * 16 + (HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]); } return HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]; }; const hsl2hsv = function(hue, sat, light) { sat = sat / 100; light = light / 100; let smin = sat; const lmin = Math.max(light, 0.01); light *= 2; sat *= light <= 1 ? light : 2 - light; smin *= lmin <= 1 ? lmin : 2 - lmin; const v = (light + sat) / 2; const sv = light === 0 ? 2 * smin / (lmin + smin) : 2 * sat / (light + sat); return { h: hue, s: sv * 100, v: v * 100 }; }; const rgb2hsv = (r2, g, b) => { r2 = bound01(r2, 255); g = bound01(g, 255); b = bound01(b, 255); const max2 = Math.max(r2, g, b); const min2 = Math.min(r2, g, b); let h2; const v = max2; const d2 = max2 - min2; const s = max2 === 0 ? 0 : d2 / max2; if (max2 === min2) { h2 = 0; } else { switch (max2) { case r2: { h2 = (g - b) / d2 + (g < b ? 6 : 0); break; } case g: { h2 = (b - r2) / d2 + 2; break; } case b: { h2 = (r2 - g) / d2 + 4; break; } } h2 /= 6; } return { h: h2 * 360, s: s * 100, v: v * 100 }; }; const hsv2rgb = function(h2, s, v) { h2 = bound01(h2, 360) * 6; s = bound01(s, 100); v = bound01(v, 100); const i2 = Math.floor(h2); const f = h2 - i2; const p = v * (1 - s); const q2 = v * (1 - f * s); const t2 = v * (1 - (1 - f) * s); const mod = i2 % 6; const r2 = [v, q2, p, p, t2, v][mod]; const g = [t2, v, v, q2, p, p][mod]; const b = [p, p, t2, v, v, q2][mod]; return { r: Math.round(r2 * 255), g: Math.round(g * 255), b: Math.round(b * 255) }; }; class Color$1 { constructor(options2 = {}) { this._hue = 0; this._saturation = 100; this._value = 100; this._alpha = 100; this.enableAlpha = false; this.format = "hex"; this.value = ""; for (const option in options2) { if (hasOwn(options2, option)) { this[option] = options2[option]; } } if (options2.value) { this.fromString(options2.value); } else { this.doOnChange(); } } set(prop, value) { if (arguments.length === 1 && typeof prop === "object") { for (const p in prop) { if (hasOwn(prop, p)) { this.set(p, prop[p]); } } return; } this[`_${prop}`] = value; this.doOnChange(); } get(prop) { if (prop === "alpha") { return Math.floor(this[`_${prop}`]); } return this[`_${prop}`]; } toRgb() { return hsv2rgb(this._hue, this._saturation, this._value); } fromString(value) { if (!value) { this._hue = 0; this._saturation = 100; this._value = 100; this.doOnChange(); return; } const fromHSV = (h2, s, v) => { this._hue = Math.max(0, Math.min(360, h2)); this._saturation = Math.max(0, Math.min(100, s)); this._value = Math.max(0, Math.min(100, v)); this.doOnChange(); }; if (value.includes("hsl")) { const parts = value.replace(/hsla|hsl|\(|\)/gm, "").split(/\s|,/g).filter((val) => val !== "").map((val, index2) => index2 > 2 ? Number.parseFloat(val) : Number.parseInt(val, 10)); if (parts.length === 4) { this._alpha = Number.parseFloat(parts[3]) * 100; } else if (parts.length === 3) { this._alpha = 100; } if (parts.length >= 3) { const { h: h2, s, v } = hsl2hsv(parts[0], parts[1], parts[2]); fromHSV(h2, s, v); } } else if (value.includes("hsv")) { const parts = value.replace(/hsva|hsv|\(|\)/gm, "").split(/\s|,/g).filter((val) => val !== "").map((val, index2) => index2 > 2 ? Number.parseFloat(val) : Number.parseInt(val, 10)); if (parts.length === 4) { this._alpha = Number.parseFloat(parts[3]) * 100; } else if (parts.length === 3) { this._alpha = 100; } if (parts.length >= 3) { fromHSV(parts[0], parts[1], parts[2]); } } else if (value.includes("rgb")) { const parts = value.replace(/rgba|rgb|\(|\)/gm, "").split(/\s|,/g).filter((val) => val !== "").map((val, index2) => index2 > 2 ? Number.parseFloat(val) : Number.parseInt(val, 10)); if (parts.length === 4) { this._alpha = Number.parseFloat(parts[3]) * 100; } else if (parts.length === 3) { this._alpha = 100; } if (parts.length >= 3) { const { h: h2, s, v } = rgb2hsv(parts[0], parts[1], parts[2]); fromHSV(h2, s, v); } } else if (value.includes("#")) { const hex = value.replace("#", "").trim(); if (!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$|^[0-9a-fA-F]{8}$/.test(hex)) return; let r2, g, b; if (hex.length === 3) { r2 = parseHexChannel(hex[0] + hex[0]); g = parseHexChannel(hex[1] + hex[1]); b = parseHexChannel(hex[2] + hex[2]); } else if (hex.length === 6 || hex.length === 8) { r2 = parseHexChannel(hex.slice(0, 2)); g = parseHexChannel(hex.slice(2, 4)); b = parseHexChannel(hex.slice(4, 6)); } if (hex.length === 8) { this._alpha = parseHexChannel(hex.slice(6)) / 255 * 100; } else if (hex.length === 3 || hex.length === 6) { this._alpha = 100; } const { h: h2, s, v } = rgb2hsv(r2, g, b); fromHSV(h2, s, v); } } compare(color2) { return Math.abs(color2._hue - this._hue) < 2 && Math.abs(color2._saturation - this._saturation) < 1 && Math.abs(color2._value - this._value) < 1 && Math.abs(color2._alpha - this._alpha) < 1; } doOnChange() { const { _hue, _saturation, _value, _alpha, format } = this; if (this.enableAlpha) { switch (format) { case "hsl": { const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100); this.value = `hsla(${_hue}, ${Math.round(hsl[1] * 100)}%, ${Math.round(hsl[2] * 100)}%, ${this.get("alpha") / 100})`; break; } case "hsv": { this.value = `hsva(${_hue}, ${Math.round(_saturation)}%, ${Math.round(_value)}%, ${this.get("alpha") / 100})`; break; } case "hex": { this.value = `${toHex(hsv2rgb(_hue, _saturation, _value))}${hexOne(_alpha * 255 / 100)}`; break; } default: { const { r: r2, g, b } = hsv2rgb(_hue, _saturation, _value); this.value = `rgba(${r2}, ${g}, ${b}, ${this.get("alpha") / 100})`; } } } else { switch (format) { case "hsl": { const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100); this.value = `hsl(${_hue}, ${Math.round(hsl[1] * 100)}%, ${Math.round(hsl[2] * 100)}%)`; break; } case "hsv": { this.value = `hsv(${_hue}, ${Math.round(_saturation)}%, ${Math.round(_value)}%)`; break; } case "rgb": { const { r: r2, g, b } = hsv2rgb(_hue, _saturation, _value); this.value = `rgb(${r2}, ${g}, ${b})`; break; } default: { this.value = toHex(hsv2rgb(_hue, _saturation, _value)); } } } } } const _sfc_main$d = defineComponent({ props: { colors: { type: Array, required: true }, color: { type: Object, required: true } }, setup(props) { const ns = useNamespace("color-predefine"); const { currentColor } = inject(colorPickerContextKey); const rgbaColors = ref(parseColors(props.colors, props.color)); watch(() => currentColor.value, (val) => { const color2 = new Color$1(); color2.fromString(val); rgbaColors.value.forEach((item) => { item.selected = color2.compare(item); }); }); watchEffect(() => { rgbaColors.value = parseColors(props.colors, props.color); }); function handleSelect(index2) { props.color.fromString(props.colors[index2]); } function parseColors(colors, color2) { return colors.map((value) => { const c = new Color$1(); c.enableAlpha = true; c.format = "rgba"; c.fromString(value); c.selected = c.value === color2.value; return c; }); } return { rgbaColors, handleSelect, ns }; } }); const _hoisted_1$a = ["onClick"]; function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.ns.b()) }, [ createElementVNode("div", { class: normalizeClass(_ctx.ns.e("colors")) }, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.rgbaColors, (item, index2) => { return openBlock(), createElementBlock("div", { key: _ctx.colors[index2], class: normalizeClass([ _ctx.ns.e("color-selector"), _ctx.ns.is("alpha", item._alpha < 100), { selected: item.selected } ]), onClick: ($event) => _ctx.handleSelect(index2) }, [ createElementVNode("div", { style: normalizeStyle({ backgroundColor: item.value }) }, null, 4) ], 10, _hoisted_1$a); }), 128)) ], 2) ], 2); } var Predefine = /* @__PURE__ */ _export_sfc$1(_sfc_main$d, [["render", _sfc_render$5], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/color-picker/src/components/predefine.vue"]]); const _sfc_main$c = defineComponent({ name: "ElSlPanel", props: { color: { type: Object, required: true } }, setup(props) { const ns = useNamespace("color-svpanel"); const instance = getCurrentInstance(); const cursorTop = ref(0); const cursorLeft = ref(0); const background = ref("hsl(0, 100%, 50%)"); const colorValue = computed$1(() => { const hue = props.color.get("hue"); const value = props.color.get("value"); return { hue, value }; }); function update() { const saturation = props.color.get("saturation"); const value = props.color.get("value"); const el = instance.vnode.el; const { clientWidth: width2, clientHeight: height2 } = el; cursorLeft.value = saturation * width2 / 100; cursorTop.value = (100 - value) * height2 / 100; background.value = `hsl(${props.color.get("hue")}, 100%, 50%)`; } function handleDrag(event2) { const el = instance.vnode.el; const rect = el.getBoundingClientRect(); const { clientX, clientY } = getClientXY(event2); let left = clientX - rect.left; let top = clientY - rect.top; left = Math.max(0, left); left = Math.min(left, rect.width); top = Math.max(0, top); top = Math.min(top, rect.height); cursorLeft.value = left; cursorTop.value = top; props.color.set({ saturation: left / rect.width * 100, value: 100 - top / rect.height * 100 }); } watch(() => colorValue.value, () => { update(); }); onMounted(() => { draggable(instance.vnode.el, { drag: (event2) => { handleDrag(event2); }, end: (event2) => { handleDrag(event2); } }); update(); }); return { cursorTop, cursorLeft, background, colorValue, handleDrag, update, ns }; } }); const _hoisted_1$9 = /* @__PURE__ */ createElementVNode("div", null, null, -1); const _hoisted_2$7 = [ _hoisted_1$9 ]; function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.ns.b()), style: normalizeStyle({ backgroundColor: _ctx.background }) }, [ createElementVNode("div", { class: normalizeClass(_ctx.ns.e("white")) }, null, 2), createElementVNode("div", { class: normalizeClass(_ctx.ns.e("black")) }, null, 2), createElementVNode("div", { class: normalizeClass(_ctx.ns.e("cursor")), style: normalizeStyle({ top: _ctx.cursorTop + "px", left: _ctx.cursorLeft + "px" }) }, _hoisted_2$7, 6) ], 6); } var SvPanel = /* @__PURE__ */ _export_sfc$1(_sfc_main$c, [["render", _sfc_render$4], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/color-picker/src/components/sv-panel.vue"]]); const _hoisted_1$8 = ["id", "aria-label", "aria-labelledby", "aria-description", "tabindex", "onKeydown"]; const __default__$4 = defineComponent({ name: "ElColorPicker" }); const _sfc_main$b = /* @__PURE__ */ defineComponent({ ...__default__$4, props: colorPickerProps, emits: colorPickerEmits, setup(__props, { expose, emit }) { const props = __props; const { t: t2 } = useLocale(); const ns = useNamespace("color"); const { formItem } = useFormItem(); const colorSize = useFormSize(); const colorDisabled = useFormDisabled(); const { inputId: buttonId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem }); const hue = ref(); const sv = ref(); const alpha = ref(); const popper = ref(); let shouldActiveChange = true; const color2 = reactive(new Color$1({ enableAlpha: props.showAlpha, format: props.colorFormat || "", value: props.modelValue })); const showPicker = ref(false); const showPanelColor = ref(false); const customInput = ref(""); const displayedColor = computed$1(() => { if (!props.modelValue && !showPanelColor.value) { return "transparent"; } return displayedRgb(color2, props.showAlpha); }); const currentColor = computed$1(() => { return !props.modelValue && !showPanelColor.value ? "" : color2.value; }); const buttonAriaLabel = computed$1(() => { return !isLabeledByFormItem.value ? props.label || t2("el.colorpicker.defaultLabel") : void 0; }); const buttonAriaLabelledby = computed$1(() => { return isLabeledByFormItem.value ? formItem == null ? void 0 : formItem.labelId : void 0; }); const btnKls = computed$1(() => { return [ ns.b("picker"), ns.is("disabled", colorDisabled.value), ns.bm("picker", colorSize.value) ]; }); function displayedRgb(color22, showAlpha) { if (!(color22 instanceof Color$1)) { throw new TypeError("color should be instance of _color Class"); } const { r: r2, g, b } = color22.toRgb(); return showAlpha ? `rgba(${r2}, ${g}, ${b}, ${color22.get("alpha") / 100})` : `rgb(${r2}, ${g}, ${b})`; } function setShowPicker(value) { showPicker.value = value; } const debounceSetShowPicker = debounce$2(setShowPicker, 100); function show() { if (colorDisabled.value) return; setShowPicker(true); } function hide() { debounceSetShowPicker(false); resetColor(); } function resetColor() { nextTick(() => { if (props.modelValue) { color2.fromString(props.modelValue); } else { color2.value = ""; nextTick(() => { showPanelColor.value = false; }); } }); } function handleTrigger() { if (colorDisabled.value) return; debounceSetShowPicker(!showPicker.value); } function handleConfirm() { color2.fromString(customInput.value); } function confirmValue() { const value = color2.value; emit(UPDATE_MODEL_EVENT, value); emit("change", value); if (props.validateEvent) { formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); } debounceSetShowPicker(false); nextTick(() => { const newColor = new Color$1({ enableAlpha: props.showAlpha, format: props.colorFormat || "", value: props.modelValue }); if (!color2.compare(newColor)) { resetColor(); } }); } function clear() { debounceSetShowPicker(false); emit(UPDATE_MODEL_EVENT, null); emit("change", null); if (props.modelValue !== null && props.validateEvent) { formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); } resetColor(); } onMounted(() => { if (props.modelValue) { customInput.value = currentColor.value; } }); watch(() => props.modelValue, (newVal) => { if (!newVal) { showPanelColor.value = false; } else if (newVal && newVal !== color2.value) { shouldActiveChange = false; color2.fromString(newVal); } }); watch(() => currentColor.value, (val) => { customInput.value = val; shouldActiveChange && emit("activeChange", val); shouldActiveChange = true; }); watch(() => color2.value, () => { if (!props.modelValue && !showPanelColor.value) { showPanelColor.value = true; } }); watch(() => showPicker.value, () => { nextTick(() => { var _a2, _b, _c; (_a2 = hue.value) == null ? void 0 : _a2.update(); (_b = sv.value) == null ? void 0 : _b.update(); (_c = alpha.value) == null ? void 0 : _c.update(); }); }); provide(colorPickerContextKey, { currentColor }); expose({ color: color2, show, hide }); return (_ctx, _cache) => { return openBlock(), createBlock(unref(ElTooltip), { ref_key: "popper", ref: popper, visible: showPicker.value, "show-arrow": false, "fallback-placements": ["bottom", "top", "right", "left"], offset: 0, "gpu-acceleration": false, "popper-class": [unref(ns).be("picker", "panel"), unref(ns).b("dropdown"), _ctx.popperClass], "stop-popper-mouse-event": false, effect: "light", trigger: "click", transition: `${unref(ns).namespace.value}-zoom-in-top`, persistent: "" }, { content: withCtx(() => [ withDirectives((openBlock(), createElementBlock("div", null, [ createElementVNode("div", { class: normalizeClass(unref(ns).be("dropdown", "main-wrapper")) }, [ createVNode(HueSlider, { ref_key: "hue", ref: hue, class: "hue-slider", color: unref(color2), vertical: "" }, null, 8, ["color"]), createVNode(SvPanel, { ref: "svPanel", color: unref(color2) }, null, 8, ["color"]) ], 2), _ctx.showAlpha ? (openBlock(), createBlock(AlphaSlider, { key: 0, ref_key: "alpha", ref: alpha, color: unref(color2) }, null, 8, ["color"])) : createCommentVNode("v-if", true), _ctx.predefine ? (openBlock(), createBlock(Predefine, { key: 1, ref: "predefine", color: unref(color2), colors: _ctx.predefine }, null, 8, ["color", "colors"])) : createCommentVNode("v-if", true), createElementVNode("div", { class: normalizeClass(unref(ns).be("dropdown", "btns")) }, [ createElementVNode("span", { class: normalizeClass(unref(ns).be("dropdown", "value")) }, [ createVNode(unref(ElInput), { modelValue: customInput.value, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => customInput.value = $event), "validate-event": false, size: "small", onKeyup: withKeys(handleConfirm, ["enter"]), onBlur: handleConfirm }, null, 8, ["modelValue", "onKeyup"]) ], 2), createVNode(unref(ElButton), { class: normalizeClass(unref(ns).be("dropdown", "link-btn")), text: "", size: "small", onClick: clear }, { default: withCtx(() => [ createTextVNode(toDisplayString(unref(t2)("el.colorpicker.clear")), 1) ]), _: 1 }, 8, ["class"]), createVNode(unref(ElButton), { plain: "", size: "small", class: normalizeClass(unref(ns).be("dropdown", "btn")), onClick: confirmValue }, { default: withCtx(() => [ createTextVNode(toDisplayString(unref(t2)("el.colorpicker.confirm")), 1) ]), _: 1 }, 8, ["class"]) ], 2) ])), [ [unref(ClickOutside), hide] ]) ]), default: withCtx(() => [ createElementVNode("div", { id: unref(buttonId), class: normalizeClass(unref(btnKls)), role: "button", "aria-label": unref(buttonAriaLabel), "aria-labelledby": unref(buttonAriaLabelledby), "aria-description": unref(t2)("el.colorpicker.description", { color: _ctx.modelValue || "" }), tabindex: _ctx.tabindex, onKeydown: withKeys(handleTrigger, ["enter"]) }, [ unref(colorDisabled) ? (openBlock(), createElementBlock("div", { key: 0, class: normalizeClass(unref(ns).be("picker", "mask")) }, null, 2)) : createCommentVNode("v-if", true), createElementVNode("div", { class: normalizeClass(unref(ns).be("picker", "trigger")), onClick: handleTrigger }, [ createElementVNode("span", { class: normalizeClass([unref(ns).be("picker", "color"), unref(ns).is("alpha", _ctx.showAlpha)]) }, [ createElementVNode("span", { class: normalizeClass(unref(ns).be("picker", "color-inner")), style: normalizeStyle({ backgroundColor: unref(displayedColor) }) }, [ withDirectives(createVNode(unref(ElIcon), { class: normalizeClass([unref(ns).be("picker", "icon"), unref(ns).is("icon-arrow-down")]) }, { default: withCtx(() => [ createVNode(unref(arrow_down_default)) ]), _: 1 }, 8, ["class"]), [ [vShow, _ctx.modelValue || showPanelColor.value] ]), !_ctx.modelValue && !showPanelColor.value ? (openBlock(), createBlock(unref(ElIcon), { key: 0, class: normalizeClass([unref(ns).be("picker", "empty"), unref(ns).is("icon-close")]) }, { default: withCtx(() => [ createVNode(unref(close_default)) ]), _: 1 }, 8, ["class"])) : createCommentVNode("v-if", true) ], 6) ], 2) ], 2) ], 42, _hoisted_1$8) ]), _: 1 }, 8, ["visible", "popper-class", "transition"]); }; } }); var ColorPicker = /* @__PURE__ */ _export_sfc$1(_sfc_main$b, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/color-picker/src/color-picker.vue"]]); const ElColorPicker = withInstall(ColorPicker); const overlayProps = buildProps({ mask: { type: Boolean, default: true }, customMaskEvent: { type: Boolean, default: false }, overlayClass: { type: definePropType([ String, Array, Object ]) }, zIndex: { type: definePropType([String, Number]) } }); const overlayEmits = { click: (evt) => evt instanceof MouseEvent }; const BLOCK = "overlay"; var Overlay = defineComponent({ name: "ElOverlay", props: overlayProps, emits: overlayEmits, setup(props, { slots, emit }) { const ns = useNamespace(BLOCK); const onMaskClick = (e) => { emit("click", e); }; const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? void 0 : onMaskClick); return () => { return props.mask ? createVNode("div", { class: [ns.b(), props.overlayClass], style: { zIndex: props.zIndex }, onClick, onMousedown, onMouseup }, [renderSlot(slots, "default")], PatchFlags.STYLE | PatchFlags.CLASS | PatchFlags.PROPS, ["onClick", "onMouseup", "onMousedown"]) : h("div", { class: props.overlayClass, style: { zIndex: props.zIndex, position: "fixed", top: "0px", right: "0px", bottom: "0px", left: "0px" } }, [renderSlot(slots, "default")]); }; } }); const ElOverlay = Overlay; const dialogInjectionKey = Symbol("dialogInjectionKey"); const dialogContentProps = buildProps({ center: { type: Boolean, default: false }, alignCenter: { type: Boolean, default: false }, closeIcon: { type: iconPropType }, customClass: { type: String, default: "" }, draggable: { type: Boolean, default: false }, fullscreen: { type: Boolean, default: false }, showClose: { type: Boolean, default: true }, title: { type: String, default: "" } }); const dialogContentEmits = { close: () => true }; const _hoisted_1$7 = ["aria-label"]; const _hoisted_2$6 = ["id"]; const __default__$3 = defineComponent({ name: "ElDialogContent" }); const _sfc_main$a = /* @__PURE__ */ defineComponent({ ...__default__$3, props: dialogContentProps, emits: dialogContentEmits, setup(__props) { const props = __props; const { t: t2 } = useLocale(); const { Close } = CloseComponents; const { dialogRef, headerRef, bodyId, ns, style } = inject(dialogInjectionKey); const { focusTrapRef } = inject(FOCUS_TRAP_INJECTION_KEY); const composedDialogRef = composeRefs(focusTrapRef, dialogRef); const draggable2 = computed$1(() => props.draggable); useDraggable(dialogRef, headerRef, draggable2); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { ref: unref(composedDialogRef), class: normalizeClass([ unref(ns).b(), unref(ns).is("fullscreen", _ctx.fullscreen), unref(ns).is("draggable", unref(draggable2)), unref(ns).is("align-center", _ctx.alignCenter), { [unref(ns).m("center")]: _ctx.center }, _ctx.customClass ]), style: normalizeStyle(unref(style)), tabindex: "-1" }, [ createElementVNode("header", { ref_key: "headerRef", ref: headerRef, class: normalizeClass(unref(ns).e("header")) }, [ renderSlot(_ctx.$slots, "header", {}, () => [ createElementVNode("span", { role: "heading", class: normalizeClass(unref(ns).e("title")) }, toDisplayString(_ctx.title), 3) ]), _ctx.showClose ? (openBlock(), createElementBlock("button", { key: 0, "aria-label": unref(t2)("el.dialog.close"), class: normalizeClass(unref(ns).e("headerbtn")), type: "button", onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("close")) }, [ createVNode(unref(ElIcon), { class: normalizeClass(unref(ns).e("close")) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.closeIcon || unref(Close)))) ]), _: 1 }, 8, ["class"]) ], 10, _hoisted_1$7)) : createCommentVNode("v-if", true) ], 2), createElementVNode("div", { id: unref(bodyId), class: normalizeClass(unref(ns).e("body")) }, [ renderSlot(_ctx.$slots, "default") ], 10, _hoisted_2$6), _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", { key: 0, class: normalizeClass(unref(ns).e("footer")) }, [ renderSlot(_ctx.$slots, "footer") ], 2)) : createCommentVNode("v-if", true) ], 6); }; } }); var ElDialogContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$a, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/dialog/src/dialog-content.vue"]]); const dialogProps = buildProps({ ...dialogContentProps, appendToBody: { type: Boolean, default: false }, beforeClose: { type: definePropType(Function) }, destroyOnClose: { type: Boolean, default: false }, closeOnClickModal: { type: Boolean, default: true }, closeOnPressEscape: { type: Boolean, default: true }, lockScroll: { type: Boolean, default: true }, modal: { type: Boolean, default: true }, openDelay: { type: Number, default: 0 }, closeDelay: { type: Number, default: 0 }, top: { type: String }, modelValue: { type: Boolean, default: false }, modalClass: String, width: { type: [String, Number] }, zIndex: { type: Number }, trapFocus: { type: Boolean, default: false } }); const dialogEmits = { open: () => true, opened: () => true, close: () => true, closed: () => true, [UPDATE_MODEL_EVENT]: (value) => isBoolean(value), openAutoFocus: () => true, closeAutoFocus: () => true }; const useDialog = (props, targetRef) => { const instance = getCurrentInstance(); const emit = instance.emit; const { nextZIndex } = useZIndex(); let lastPosition = ""; const titleId = useId(); const bodyId = useId(); const visible = ref(false); const closed = ref(false); const rendered = ref(false); const zIndex2 = ref(props.zIndex || nextZIndex()); let openTimer = void 0; let closeTimer = void 0; const namespace = useGlobalConfig("namespace", defaultNamespace); const style = computed$1(() => { const style2 = {}; const varPrefix = `--${namespace.value}-dialog`; if (!props.fullscreen) { if (props.top) { style2[`${varPrefix}-margin-top`] = props.top; } if (props.width) { style2[`${varPrefix}-width`] = addUnit(props.width); } } return style2; }); const overlayDialogStyle = computed$1(() => { if (props.alignCenter) { return { display: "flex" }; } return {}; }); function afterEnter() { emit("opened"); } function afterLeave() { emit("closed"); emit(UPDATE_MODEL_EVENT, false); if (props.destroyOnClose) { rendered.value = false; } } function beforeLeave() { emit("close"); } function open() { closeTimer == null ? void 0 : closeTimer(); openTimer == null ? void 0 : openTimer(); if (props.openDelay && props.openDelay > 0) { ({ stop: openTimer } = useTimeoutFn(() => doOpen(), props.openDelay)); } else { doOpen(); } } function close() { openTimer == null ? void 0 : openTimer(); closeTimer == null ? void 0 : closeTimer(); if (props.closeDelay && props.closeDelay > 0) { ({ stop: closeTimer } = useTimeoutFn(() => doClose(), props.closeDelay)); } else { doClose(); } } function handleClose() { function hide(shouldCancel) { if (shouldCancel) return; closed.value = true; visible.value = false; } if (props.beforeClose) { props.beforeClose(hide); } else { close(); } } function onModalClick() { if (props.closeOnClickModal) { handleClose(); } } function doOpen() { if (!isClient) return; visible.value = true; } function doClose() { visible.value = false; } function onOpenAutoFocus() { emit("openAutoFocus"); } function onCloseAutoFocus() { emit("closeAutoFocus"); } function onFocusoutPrevented(event2) { var _a2; if (((_a2 = event2.detail) == null ? void 0 : _a2.focusReason) === "pointer") { event2.preventDefault(); } } if (props.lockScroll) { useLockscreen(visible); } function onCloseRequested() { if (props.closeOnPressEscape) { handleClose(); } } watch(() => props.modelValue, (val) => { if (val) { closed.value = false; open(); rendered.value = true; zIndex2.value = props.zIndex ? zIndex2.value++ : nextZIndex(); nextTick(() => { emit("open"); if (targetRef.value) { targetRef.value.scrollTop = 0; } }); } else { if (visible.value) { close(); } } }); watch(() => props.fullscreen, (val) => { if (!targetRef.value) return; if (val) { lastPosition = targetRef.value.style.transform; targetRef.value.style.transform = ""; } else { targetRef.value.style.transform = lastPosition; } }); onMounted(() => { if (props.modelValue) { visible.value = true; rendered.value = true; open(); } }); return { afterEnter, afterLeave, beforeLeave, handleClose, onModalClick, close, doClose, onOpenAutoFocus, onCloseAutoFocus, onCloseRequested, onFocusoutPrevented, titleId, bodyId, closed, style, overlayDialogStyle, rendered, visible, zIndex: zIndex2 }; }; const _hoisted_1$6 = ["aria-label", "aria-labelledby", "aria-describedby"]; const __default__$2 = defineComponent({ name: "ElDialog", inheritAttrs: false }); const _sfc_main$9 = /* @__PURE__ */ defineComponent({ ...__default__$2, props: dialogProps, emits: dialogEmits, setup(__props, { expose }) { const props = __props; const slots = useSlots(); useDeprecated({ scope: "el-dialog", from: "the title slot", replacement: "the header slot", version: "3.0.0", ref: "https://element-plus.org/en-US/component/dialog.html#slots" }, computed$1(() => !!slots.title)); useDeprecated({ scope: "el-dialog", from: "custom-class", replacement: "class", version: "2.3.0", ref: "https://element-plus.org/en-US/component/dialog.html#attributes", type: "Attribute" }, computed$1(() => !!props.customClass)); const ns = useNamespace("dialog"); const dialogRef = ref(); const headerRef = ref(); const dialogContentRef = ref(); const { visible, titleId, bodyId, style, overlayDialogStyle, rendered, zIndex: zIndex2, afterEnter, afterLeave, beforeLeave, handleClose, onModalClick, onOpenAutoFocus, onCloseAutoFocus, onCloseRequested, onFocusoutPrevented } = useDialog(props, dialogRef); provide(dialogInjectionKey, { dialogRef, headerRef, bodyId, ns, rendered, style }); const overlayEvent = useSameTarget(onModalClick); const draggable2 = computed$1(() => props.draggable && !props.fullscreen); expose({ visible, dialogContentRef }); return (_ctx, _cache) => { return openBlock(), createBlock(Teleport, { to: "body", disabled: !_ctx.appendToBody }, [ createVNode(Transition, { name: "dialog-fade", onAfterEnter: unref(afterEnter), onAfterLeave: unref(afterLeave), onBeforeLeave: unref(beforeLeave), persisted: "" }, { default: withCtx(() => [ withDirectives(createVNode(unref(ElOverlay), { "custom-mask-event": "", mask: _ctx.modal, "overlay-class": _ctx.modalClass, "z-index": unref(zIndex2) }, { default: withCtx(() => [ createElementVNode("div", { role: "dialog", "aria-modal": "true", "aria-label": _ctx.title || void 0, "aria-labelledby": !_ctx.title ? unref(titleId) : void 0, "aria-describedby": unref(bodyId), class: normalizeClass(`${unref(ns).namespace.value}-overlay-dialog`), style: normalizeStyle(unref(overlayDialogStyle)), onClick: _cache[0] || (_cache[0] = (...args) => unref(overlayEvent).onClick && unref(overlayEvent).onClick(...args)), onMousedown: _cache[1] || (_cache[1] = (...args) => unref(overlayEvent).onMousedown && unref(overlayEvent).onMousedown(...args)), onMouseup: _cache[2] || (_cache[2] = (...args) => unref(overlayEvent).onMouseup && unref(overlayEvent).onMouseup(...args)) }, [ createVNode(unref(ElFocusTrap), { loop: "", trapped: unref(visible), "focus-start-el": "container", onFocusAfterTrapped: unref(onOpenAutoFocus), onFocusAfterReleased: unref(onCloseAutoFocus), onFocusoutPrevented: unref(onFocusoutPrevented), onReleaseRequested: unref(onCloseRequested) }, { default: withCtx(() => [ unref(rendered) ? (openBlock(), createBlock(ElDialogContent, mergeProps({ key: 0, ref_key: "dialogContentRef", ref: dialogContentRef }, _ctx.$attrs, { "custom-class": _ctx.customClass, center: _ctx.center, "align-center": _ctx.alignCenter, "close-icon": _ctx.closeIcon, draggable: unref(draggable2), fullscreen: _ctx.fullscreen, "show-close": _ctx.showClose, title: _ctx.title, onClose: unref(handleClose) }), createSlots({ header: withCtx(() => [ !_ctx.$slots.title ? renderSlot(_ctx.$slots, "header", { key: 0, close: unref(handleClose), titleId: unref(titleId), titleClass: unref(ns).e("title") }) : renderSlot(_ctx.$slots, "title", { key: 1 }) ]), default: withCtx(() => [ renderSlot(_ctx.$slots, "default") ]), _: 2 }, [ _ctx.$slots.footer ? { name: "footer", fn: withCtx(() => [ renderSlot(_ctx.$slots, "footer") ]) } : void 0 ]), 1040, ["custom-class", "center", "align-center", "close-icon", "draggable", "fullscreen", "show-close", "title", "onClose"])) : createCommentVNode("v-if", true) ]), _: 3 }, 8, ["trapped", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusoutPrevented", "onReleaseRequested"]) ], 46, _hoisted_1$6) ]), _: 3 }, 8, ["mask", "overlay-class", "z-index"]), [ [vShow, unref(visible)] ]) ]), _: 3 }, 8, ["onAfterEnter", "onAfterLeave", "onBeforeLeave"]) ], 8, ["disabled"]); }; } }); var Dialog = /* @__PURE__ */ _export_sfc$1(_sfc_main$9, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/dialog/src/dialog.vue"]]); const ElDialog = withInstall(Dialog); const inputNumberProps = buildProps({ id: { type: String, default: void 0 }, step: { type: Number, default: 1 }, stepStrictly: Boolean, max: { type: Number, default: Number.POSITIVE_INFINITY }, min: { type: Number, default: Number.NEGATIVE_INFINITY }, modelValue: Number, readonly: Boolean, disabled: Boolean, size: useSizeProp, controls: { type: Boolean, default: true }, controlsPosition: { type: String, default: "", values: ["", "right"] }, valueOnClear: { type: [String, Number, null], validator: (val) => val === null || isNumber(val) || ["min", "max"].includes(val), default: null }, name: String, label: String, placeholder: String, precision: { type: Number, validator: (val) => val >= 0 && val === Number.parseInt(`${val}`, 10) }, validateEvent: { type: Boolean, default: true } }); const inputNumberEmits = { [CHANGE_EVENT]: (cur, prev) => prev !== cur, blur: (e) => e instanceof FocusEvent, focus: (e) => e instanceof FocusEvent, [INPUT_EVENT]: (val) => isNumber(val) || isNil(val), [UPDATE_MODEL_EVENT]: (val) => isNumber(val) || isNil(val) }; const _hoisted_1$5 = ["aria-label", "onKeydown"]; const _hoisted_2$5 = ["aria-label", "onKeydown"]; const __default__$1 = defineComponent({ name: "ElInputNumber" }); const _sfc_main$8 = /* @__PURE__ */ defineComponent({ ...__default__$1, props: inputNumberProps, emits: inputNumberEmits, setup(__props, { expose, emit }) { const props = __props; const { t: t2 } = useLocale(); const ns = useNamespace("input-number"); const input = ref(); const data = reactive({ currentValue: props.modelValue, userInput: null }); const { formItem } = useFormItem(); const minDisabled = computed$1(() => isNumber(props.modelValue) && props.modelValue <= props.min); const maxDisabled = computed$1(() => isNumber(props.modelValue) && props.modelValue >= props.max); const numPrecision = computed$1(() => { const stepPrecision = getPrecision(props.step); if (!isUndefined(props.precision)) { if (stepPrecision > props.precision) ; return props.precision; } else { return Math.max(getPrecision(props.modelValue), stepPrecision); } }); const controlsAtRight = computed$1(() => { return props.controls && props.controlsPosition === "right"; }); const inputNumberSize = useFormSize(); const inputNumberDisabled = useFormDisabled(); const displayValue = computed$1(() => { if (data.userInput !== null) { return data.userInput; } let currentValue = data.currentValue; if (isNil(currentValue)) return ""; if (isNumber(currentValue)) { if (Number.isNaN(currentValue)) return ""; if (!isUndefined(props.precision)) { currentValue = currentValue.toFixed(props.precision); } } return currentValue; }); const toPrecision = (num, pre) => { if (isUndefined(pre)) pre = numPrecision.value; if (pre === 0) return Math.round(num); let snum = String(num); const pointPos = snum.indexOf("."); if (pointPos === -1) return num; const nums = snum.replace(".", "").split(""); const datum = nums[pointPos + pre]; if (!datum) return num; const length = snum.length; if (snum.charAt(length - 1) === "5") { snum = `${snum.slice(0, Math.max(0, length - 1))}6`; } return Number.parseFloat(Number(snum).toFixed(pre)); }; const getPrecision = (value) => { if (isNil(value)) return 0; const valueString = value.toString(); const dotPosition = valueString.indexOf("."); let precision = 0; if (dotPosition !== -1) { precision = valueString.length - dotPosition - 1; } return precision; }; const ensurePrecision = (val, coefficient = 1) => { if (!isNumber(val)) return data.currentValue; return toPrecision(val + props.step * coefficient); }; const increase = () => { if (props.readonly || inputNumberDisabled.value || maxDisabled.value) return; const value = Number(displayValue.value) || 0; const newVal = ensurePrecision(value); setCurrentValue(newVal); emit(INPUT_EVENT, data.currentValue); }; const decrease = () => { if (props.readonly || inputNumberDisabled.value || minDisabled.value) return; const value = Number(displayValue.value) || 0; const newVal = ensurePrecision(value, -1); setCurrentValue(newVal); emit(INPUT_EVENT, data.currentValue); }; const verifyValue = (value, update) => { const { max: max2, min: min2, step, precision, stepStrictly, valueOnClear } = props; let newVal = Number(value); if (isNil(value) || Number.isNaN(newVal)) { return null; } if (value === "") { if (valueOnClear === null) { return null; } newVal = isString(valueOnClear) ? { min: min2, max: max2 }[valueOnClear] : valueOnClear; } if (stepStrictly) { newVal = toPrecision(Math.round(newVal / step) * step, precision); } if (!isUndefined(precision)) { newVal = toPrecision(newVal, precision); } if (newVal > max2 || newVal < min2) { newVal = newVal > max2 ? max2 : min2; update && emit(UPDATE_MODEL_EVENT, newVal); } return newVal; }; const setCurrentValue = (value, emitChange = true) => { var _a2; const oldVal = data.currentValue; const newVal = verifyValue(value); if (!emitChange) { emit(UPDATE_MODEL_EVENT, newVal); return; } if (oldVal === newVal) return; data.userInput = null; emit(UPDATE_MODEL_EVENT, newVal); emit(CHANGE_EVENT, newVal, oldVal); if (props.validateEvent) { (_a2 = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a2.call(formItem, "change").catch((err) => debugWarn()); } data.currentValue = newVal; }; const handleInput = (value) => { data.userInput = value; const newVal = value === "" ? null : Number(value); emit(INPUT_EVENT, newVal); setCurrentValue(newVal, false); }; const handleInputChange = (value) => { const newVal = value !== "" ? Number(value) : ""; if (isNumber(newVal) && !Number.isNaN(newVal) || value === "") { setCurrentValue(newVal); } data.userInput = null; }; const focus = () => { var _a2, _b; (_b = (_a2 = input.value) == null ? void 0 : _a2.focus) == null ? void 0 : _b.call(_a2); }; const blur = () => { var _a2, _b; (_b = (_a2 = input.value) == null ? void 0 : _a2.blur) == null ? void 0 : _b.call(_a2); }; const handleFocus = (event2) => { emit("focus", event2); }; const handleBlur = (event2) => { var _a2; emit("blur", event2); if (props.validateEvent) { (_a2 = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a2.call(formItem, "blur").catch((err) => debugWarn()); } }; watch(() => props.modelValue, (value) => { const userInput = verifyValue(data.userInput); const newValue = verifyValue(value, true); if (!isNumber(userInput) && (!userInput || userInput !== newValue)) { data.currentValue = newValue; data.userInput = null; } }, { immediate: true }); onMounted(() => { var _a2; const { min: min2, max: max2, modelValue } = props; const innerInput = (_a2 = input.value) == null ? void 0 : _a2.input; innerInput.setAttribute("role", "spinbutton"); if (Number.isFinite(max2)) { innerInput.setAttribute("aria-valuemax", String(max2)); } else { innerInput.removeAttribute("aria-valuemax"); } if (Number.isFinite(min2)) { innerInput.setAttribute("aria-valuemin", String(min2)); } else { innerInput.removeAttribute("aria-valuemin"); } innerInput.setAttribute("aria-valuenow", String(data.currentValue)); innerInput.setAttribute("aria-disabled", String(inputNumberDisabled.value)); if (!isNumber(modelValue) && modelValue != null) { let val = Number(modelValue); if (Number.isNaN(val)) { val = null; } emit(UPDATE_MODEL_EVENT, val); } }); onUpdated(() => { var _a2; const innerInput = (_a2 = input.value) == null ? void 0 : _a2.input; innerInput == null ? void 0 : innerInput.setAttribute("aria-valuenow", `${data.currentValue}`); }); expose({ focus, blur }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass([ unref(ns).b(), unref(ns).m(unref(inputNumberSize)), unref(ns).is("disabled", unref(inputNumberDisabled)), unref(ns).is("without-controls", !_ctx.controls), unref(ns).is("controls-right", unref(controlsAtRight)) ]), onDragstart: _cache[1] || (_cache[1] = withModifiers(() => { }, ["prevent"])) }, [ _ctx.controls ? withDirectives((openBlock(), createElementBlock("span", { key: 0, role: "button", "aria-label": unref(t2)("el.inputNumber.decrease"), class: normalizeClass([unref(ns).e("decrease"), unref(ns).is("disabled", unref(minDisabled))]), onKeydown: withKeys(decrease, ["enter"]) }, [ createVNode(unref(ElIcon), null, { default: withCtx(() => [ unref(controlsAtRight) ? (openBlock(), createBlock(unref(arrow_down_default), { key: 0 })) : (openBlock(), createBlock(unref(minus_default), { key: 1 })) ]), _: 1 }) ], 42, _hoisted_1$5)), [ [unref(vRepeatClick), decrease] ]) : createCommentVNode("v-if", true), _ctx.controls ? withDirectives((openBlock(), createElementBlock("span", { key: 1, role: "button", "aria-label": unref(t2)("el.inputNumber.increase"), class: normalizeClass([unref(ns).e("increase"), unref(ns).is("disabled", unref(maxDisabled))]), onKeydown: withKeys(increase, ["enter"]) }, [ createVNode(unref(ElIcon), null, { default: withCtx(() => [ unref(controlsAtRight) ? (openBlock(), createBlock(unref(arrow_up_default), { key: 0 })) : (openBlock(), createBlock(unref(plus_default), { key: 1 })) ]), _: 1 }) ], 42, _hoisted_2$5)), [ [unref(vRepeatClick), increase] ]) : createCommentVNode("v-if", true), createVNode(unref(ElInput), { id: _ctx.id, ref_key: "input", ref: input, type: "number", step: _ctx.step, "model-value": unref(displayValue), placeholder: _ctx.placeholder, readonly: _ctx.readonly, disabled: unref(inputNumberDisabled), size: unref(inputNumberSize), max: _ctx.max, min: _ctx.min, name: _ctx.name, label: _ctx.label, "validate-event": false, onWheel: _cache[0] || (_cache[0] = withModifiers(() => { }, ["prevent"])), onKeydown: [ withKeys(withModifiers(increase, ["prevent"]), ["up"]), withKeys(withModifiers(decrease, ["prevent"]), ["down"]) ], onBlur: handleBlur, onFocus: handleFocus, onInput: handleInput, onChange: handleInputChange }, null, 8, ["id", "step", "model-value", "placeholder", "readonly", "disabled", "size", "max", "min", "name", "label", "onKeydown"]) ], 34); }; } }); var InputNumber = /* @__PURE__ */ _export_sfc$1(_sfc_main$8, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/input-number/src/input-number.vue"]]); const ElInputNumber = withInstall(InputNumber); const selectGroupKey = Symbol("ElSelectGroup"); const selectKey = Symbol("ElSelect"); function useOption(props, states) { const select = inject(selectKey); const selectGroup = inject(selectGroupKey, { disabled: false }); const isObject3 = computed$1(() => { return Object.prototype.toString.call(props.value).toLowerCase() === "[object object]"; }); const itemSelected = computed$1(() => { if (!select.props.multiple) { return isEqual2(props.value, select.props.modelValue); } else { return contains(select.props.modelValue, props.value); } }); const limitReached = computed$1(() => { if (select.props.multiple) { const modelValue = select.props.modelValue || []; return !itemSelected.value && modelValue.length >= select.props.multipleLimit && select.props.multipleLimit > 0; } else { return false; } }); const currentLabel = computed$1(() => { return props.label || (isObject3.value ? "" : props.value); }); const currentValue = computed$1(() => { return props.value || props.label || ""; }); const isDisabled3 = computed$1(() => { return props.disabled || states.groupDisabled || limitReached.value; }); const instance = getCurrentInstance(); const contains = (arr = [], target) => { if (!isObject3.value) { return arr && arr.includes(target); } else { const valueKey = select.props.valueKey; return arr && arr.some((item) => { return toRaw$1(get$2(item, valueKey)) === get$2(target, valueKey); }); } }; const isEqual2 = (a, b) => { if (!isObject3.value) { return a === b; } else { const { valueKey } = select.props; return get$2(a, valueKey) === get$2(b, valueKey); } }; const hoverItem = () => { if (!props.disabled && !selectGroup.disabled) { select.hoverIndex = select.optionsArray.indexOf(instance.proxy); } }; watch(() => currentLabel.value, () => { if (!props.created && !select.props.remote) select.setSelected(); }); watch(() => props.value, (val, oldVal) => { const { remote, valueKey } = select.props; if (!Object.is(val, oldVal)) { select.onOptionDestroy(oldVal, instance.proxy); select.onOptionCreate(instance.proxy); } if (!props.created && !remote) { if (valueKey && typeof val === "object" && typeof oldVal === "object" && val[valueKey] === oldVal[valueKey]) { return; } select.setSelected(); } }); watch(() => selectGroup.disabled, () => { states.groupDisabled = selectGroup.disabled; }, { immediate: true }); const { queryChange } = toRaw$1(select); watch(queryChange, (changes) => { const { query } = unref(changes); const regexp = new RegExp(escapeStringRegexp(query), "i"); states.visible = regexp.test(currentLabel.value) || props.created; if (!states.visible) { select.filteredOptionsCount--; } }, { immediate: true }); return { select, currentLabel, currentValue, itemSelected, isDisabled: isDisabled3, hoverItem }; } const _sfc_main$7 = defineComponent({ name: "ElOption", componentName: "ElOption", props: { value: { required: true, type: [String, Number, Boolean, Object] }, label: [String, Number], created: Boolean, disabled: { type: Boolean, default: false } }, setup(props) { const ns = useNamespace("select"); const states = reactive({ index: -1, groupDisabled: false, visible: true, hitState: false, hover: false }); const { currentLabel, itemSelected, isDisabled: isDisabled3, select, hoverItem } = useOption(props, states); const { visible, hover } = toRefs(states); const vm = getCurrentInstance().proxy; select.onOptionCreate(vm); onBeforeUnmount(() => { const key = vm.value; const { selected } = select; const selectedOptions = select.props.multiple ? selected : [selected]; const doesSelected = selectedOptions.some((item) => { return item.value === vm.value; }); nextTick(() => { if (select.cachedOptions.get(key) === vm && !doesSelected) { select.cachedOptions.delete(key); } }); select.onOptionDestroy(key, vm); }); function selectOptionClick() { if (props.disabled !== true && states.groupDisabled !== true) { select.handleOptionSelect(vm, true); } } return { ns, currentLabel, itemSelected, isDisabled: isDisabled3, select, hoverItem, visible, hover, selectOptionClick, states }; } }); function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) { return withDirectives((openBlock(), createElementBlock("li", { class: normalizeClass([ _ctx.ns.be("dropdown", "item"), _ctx.ns.is("disabled", _ctx.isDisabled), { selected: _ctx.itemSelected, hover: _ctx.hover } ]), onMouseenter: _cache[0] || (_cache[0] = (...args) => _ctx.hoverItem && _ctx.hoverItem(...args)), onClick: _cache[1] || (_cache[1] = withModifiers((...args) => _ctx.selectOptionClick && _ctx.selectOptionClick(...args), ["stop"])) }, [ renderSlot(_ctx.$slots, "default", {}, () => [ createElementVNode("span", null, toDisplayString(_ctx.currentLabel), 1) ]) ], 34)), [ [vShow, _ctx.visible] ]); } var Option = /* @__PURE__ */ _export_sfc$1(_sfc_main$7, [["render", _sfc_render$3], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/select/src/option.vue"]]); const _sfc_main$6 = defineComponent({ name: "ElSelectDropdown", componentName: "ElSelectDropdown", setup() { const select = inject(selectKey); const ns = useNamespace("select"); const popperClass = computed$1(() => select.props.popperClass); const isMultiple = computed$1(() => select.props.multiple); const isFitInputWidth = computed$1(() => select.props.fitInputWidth); const minWidth = ref(""); function updateMinWidth() { var _a2; minWidth.value = `${(_a2 = select.selectWrapper) == null ? void 0 : _a2.offsetWidth}px`; } onMounted(() => { updateMinWidth(); useResizeObserver(select.selectWrapper, updateMinWidth); }); return { ns, minWidth, popperClass, isMultiple, isFitInputWidth }; } }); function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", { class: normalizeClass([_ctx.ns.b("dropdown"), _ctx.ns.is("multiple", _ctx.isMultiple), _ctx.popperClass]), style: normalizeStyle({ [_ctx.isFitInputWidth ? "width" : "minWidth"]: _ctx.minWidth }) }, [ renderSlot(_ctx.$slots, "default") ], 6); } var ElSelectMenu = /* @__PURE__ */ _export_sfc$1(_sfc_main$6, [["render", _sfc_render$2], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/select/src/select-dropdown.vue"]]); function useSelectStates(props) { const { t: t2 } = useLocale(); return reactive({ options: /* @__PURE__ */ new Map(), cachedOptions: /* @__PURE__ */ new Map(), createdLabel: null, createdSelected: false, selected: props.multiple ? [] : {}, inputLength: 20, inputWidth: 0, optionsCount: 0, filteredOptionsCount: 0, visible: false, softFocus: false, selectedLabel: "", hoverIndex: -1, query: "", previousQuery: null, inputHovering: false, cachedPlaceHolder: "", currentPlaceholder: t2("el.select.placeholder"), menuVisibleOnFocus: false, isOnComposition: false, isSilentBlur: false, prefixWidth: 11, tagInMultiLine: false, mouseEnter: false }); } const useSelect = (props, states, ctx) => { const { t: t2 } = useLocale(); const ns = useNamespace("select"); useDeprecated({ from: "suffixTransition", replacement: "override style scheme", version: "2.3.0", scope: "props", ref: "https://element-plus.org/en-US/component/select.html#select-attributes" }, computed$1(() => props.suffixTransition === false)); const reference = ref(null); const input = ref(null); const iOSInput = ref(null); const tooltipRef = ref(null); const tags = ref(null); const selectWrapper = ref(null); const scrollbar = ref(null); const hoverOption = ref(-1); const queryChange = shallowRef({ query: "" }); const groupQueryChange = shallowRef(""); const optionList = ref([]); let originClientHeight = 0; const { form, formItem } = useFormItem(); const readonly2 = computed$1(() => !props.filterable || props.multiple || !states.visible); const selectDisabled = computed$1(() => props.disabled || (form == null ? void 0 : form.disabled)); const showClose = computed$1(() => { const hasValue = props.multiple ? Array.isArray(props.modelValue) && props.modelValue.length > 0 : props.modelValue !== void 0 && props.modelValue !== null && props.modelValue !== ""; const criteria = props.clearable && !selectDisabled.value && states.inputHovering && hasValue; return criteria; }); const iconComponent = computed$1(() => props.remote && props.filterable && !props.remoteShowSuffix ? "" : props.suffixIcon); const iconReverse = computed$1(() => ns.is("reverse", iconComponent.value && states.visible && props.suffixTransition)); const debounce$12 = computed$1(() => props.remote ? 300 : 0); const emptyText = computed$1(() => { if (props.loading) { return props.loadingText || t2("el.select.loading"); } else { if (props.remote && states.query === "" && states.options.size === 0) return false; if (props.filterable && states.query && states.options.size > 0 && states.filteredOptionsCount === 0) { return props.noMatchText || t2("el.select.noMatch"); } if (states.options.size === 0) { return props.noDataText || t2("el.select.noData"); } } return null; }); const optionsArray = computed$1(() => { const list = Array.from(states.options.values()); const newList = []; optionList.value.forEach((item) => { const index2 = list.findIndex((i2) => i2.currentLabel === item); if (index2 > -1) { newList.push(list[index2]); } }); return newList.length ? newList : list; }); const cachedOptionsArray = computed$1(() => Array.from(states.cachedOptions.values())); const showNewOption = computed$1(() => { const hasExistingOption = optionsArray.value.filter((option) => { return !option.created; }).some((option) => { return option.currentLabel === states.query; }); return props.filterable && props.allowCreate && states.query !== "" && !hasExistingOption; }); const selectSize = useFormSize(); const collapseTagSize = computed$1(() => ["small"].includes(selectSize.value) ? "small" : "default"); const dropMenuVisible = computed$1({ get() { return states.visible && emptyText.value !== false; }, set(val) { states.visible = val; } }); watch([() => selectDisabled.value, () => selectSize.value, () => form == null ? void 0 : form.size], () => { nextTick(() => { resetInputHeight(); }); }); watch(() => props.placeholder, (val) => { states.cachedPlaceHolder = states.currentPlaceholder = val; }); watch(() => props.modelValue, (val, oldVal) => { if (props.multiple) { resetInputHeight(); if (val && val.length > 0 || input.value && states.query !== "") { states.currentPlaceholder = ""; } else { states.currentPlaceholder = states.cachedPlaceHolder; } if (props.filterable && !props.reserveKeyword) { states.query = ""; handleQueryChange(states.query); } } setSelected(); if (props.filterable && !props.multiple) { states.inputLength = 20; } if (!isEqual(val, oldVal) && props.validateEvent) { formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); } }, { flush: "post", deep: true }); watch(() => states.visible, (val) => { var _a2, _b, _c, _d, _e; if (!val) { if (props.filterable) { if (isFunction$3(props.filterMethod)) { props.filterMethod(""); } if (isFunction$3(props.remoteMethod)) { props.remoteMethod(""); } } input.value && input.value.blur(); states.query = ""; states.previousQuery = null; states.selectedLabel = ""; states.inputLength = 20; states.menuVisibleOnFocus = false; resetHoverIndex(); nextTick(() => { if (input.value && input.value.value === "" && states.selected.length === 0) { states.currentPlaceholder = states.cachedPlaceHolder; } }); if (!props.multiple) { if (states.selected) { if (props.filterable && props.allowCreate && states.createdSelected && states.createdLabel) { states.selectedLabel = states.createdLabel; } else { states.selectedLabel = states.selected.currentLabel; } if (props.filterable) states.query = states.selectedLabel; } if (props.filterable) { states.currentPlaceholder = states.cachedPlaceHolder; } } } else { (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); if (props.filterable) { states.filteredOptionsCount = states.optionsCount; states.query = props.remote ? "" : states.selectedLabel; (_d = (_c = iOSInput.value) == null ? void 0 : _c.focus) == null ? void 0 : _d.call(_c); if (props.multiple) { (_e = input.value) == null ? void 0 : _e.focus(); } else { if (states.selectedLabel) { states.currentPlaceholder = `${states.selectedLabel}`; states.selectedLabel = ""; } } handleQueryChange(states.query); if (!props.multiple && !props.remote) { queryChange.value.query = ""; triggerRef(queryChange); triggerRef(groupQueryChange); } } } ctx.emit("visible-change", val); }); watch(() => states.options.entries(), () => { var _a2, _b, _c; if (!isClient) return; (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); if (props.multiple) { resetInputHeight(); } const inputs = ((_c = selectWrapper.value) == null ? void 0 : _c.querySelectorAll("input")) || []; if (!Array.from(inputs).includes(document.activeElement)) { setSelected(); } if (props.defaultFirstOption && (props.filterable || props.remote) && states.filteredOptionsCount) { checkDefaultFirstOption(); } }, { flush: "post" }); watch(() => states.hoverIndex, (val) => { if (isNumber(val) && val > -1) { hoverOption.value = optionsArray.value[val] || {}; } else { hoverOption.value = {}; } optionsArray.value.forEach((option) => { option.hover = hoverOption.value === option; }); }); const resetInputHeight = () => { nextTick(() => { var _a2, _b; if (!reference.value) return; const input2 = reference.value.$el.querySelector("input"); originClientHeight = originClientHeight || (input2.clientHeight > 0 ? input2.clientHeight + 2 : 0); const _tags = tags.value; const gotSize = getComponentSize(selectSize.value || (form == null ? void 0 : form.size)); const sizeInMap = selectSize.value || gotSize === originClientHeight || originClientHeight <= 0 ? gotSize : originClientHeight; const isElHidden = input2.offsetParent === null; !isElHidden && (input2.style.height = `${(states.selected.length === 0 ? sizeInMap : Math.max(_tags ? _tags.clientHeight + (_tags.clientHeight > sizeInMap ? 6 : 0) : 0, sizeInMap)) - 2}px`); states.tagInMultiLine = Number.parseFloat(input2.style.height) >= sizeInMap; if (states.visible && emptyText.value !== false) { (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); } }); }; const handleQueryChange = async (val) => { if (states.previousQuery === val || states.isOnComposition) return; if (states.previousQuery === null && (isFunction$3(props.filterMethod) || isFunction$3(props.remoteMethod))) { states.previousQuery = val; return; } states.previousQuery = val; nextTick(() => { var _a2, _b; if (states.visible) (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); }); states.hoverIndex = -1; if (props.multiple && props.filterable) { nextTick(() => { const length = input.value.value.length * 15 + 20; states.inputLength = props.collapseTags ? Math.min(50, length) : length; managePlaceholder(); resetInputHeight(); }); } if (props.remote && isFunction$3(props.remoteMethod)) { states.hoverIndex = -1; props.remoteMethod(val); } else if (isFunction$3(props.filterMethod)) { props.filterMethod(val); triggerRef(groupQueryChange); } else { states.filteredOptionsCount = states.optionsCount; queryChange.value.query = val; triggerRef(queryChange); triggerRef(groupQueryChange); } if (props.defaultFirstOption && (props.filterable || props.remote) && states.filteredOptionsCount) { await nextTick(); checkDefaultFirstOption(); } }; const managePlaceholder = () => { if (states.currentPlaceholder !== "") { states.currentPlaceholder = input.value.value ? "" : states.cachedPlaceHolder; } }; const checkDefaultFirstOption = () => { const optionsInDropdown = optionsArray.value.filter((n) => n.visible && !n.disabled && !n.states.groupDisabled); const userCreatedOption = optionsInDropdown.find((n) => n.created); const firstOriginOption = optionsInDropdown[0]; states.hoverIndex = getValueIndex(optionsArray.value, userCreatedOption || firstOriginOption); }; const setSelected = () => { var _a2; if (!props.multiple) { const option = getOption(props.modelValue); if ((_a2 = option.props) == null ? void 0 : _a2.created) { states.createdLabel = option.props.value; states.createdSelected = true; } else { states.createdSelected = false; } states.selectedLabel = option.currentLabel; states.selected = option; if (props.filterable) states.query = states.selectedLabel; return; } else { states.selectedLabel = ""; } const result = []; if (Array.isArray(props.modelValue)) { props.modelValue.forEach((value) => { result.push(getOption(value)); }); } states.selected = result; nextTick(() => { resetInputHeight(); }); }; const getOption = (value) => { let option; const isObjectValue = toRawType(value).toLowerCase() === "object"; const isNull = toRawType(value).toLowerCase() === "null"; const isUndefined2 = toRawType(value).toLowerCase() === "undefined"; for (let i2 = states.cachedOptions.size - 1; i2 >= 0; i2--) { const cachedOption = cachedOptionsArray.value[i2]; const isEqualValue = isObjectValue ? get$2(cachedOption.value, props.valueKey) === get$2(value, props.valueKey) : cachedOption.value === value; if (isEqualValue) { option = { value, currentLabel: cachedOption.currentLabel, isDisabled: cachedOption.isDisabled }; break; } } if (option) return option; const label2 = isObjectValue ? value.label : !isNull && !isUndefined2 ? value : ""; const newOption = { value, currentLabel: label2 }; if (props.multiple) { newOption.hitState = false; } return newOption; }; const resetHoverIndex = () => { setTimeout(() => { const valueKey = props.valueKey; if (!props.multiple) { states.hoverIndex = optionsArray.value.findIndex((item) => { return getValueKey(item) === getValueKey(states.selected); }); } else { if (states.selected.length > 0) { states.hoverIndex = Math.min.apply(null, states.selected.map((selected) => { return optionsArray.value.findIndex((item) => { return get$2(item, valueKey) === get$2(selected, valueKey); }); })); } else { states.hoverIndex = -1; } } }, 300); }; const handleResize = () => { var _a2, _b; resetInputWidth(); (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.updatePopper) == null ? void 0 : _b.call(_a2); if (props.multiple) resetInputHeight(); }; const resetInputWidth = () => { var _a2; states.inputWidth = (_a2 = reference.value) == null ? void 0 : _a2.$el.offsetWidth; }; const onInputChange = () => { if (props.filterable && states.query !== states.selectedLabel) { states.query = states.selectedLabel; handleQueryChange(states.query); } }; const debouncedOnInputChange = debounce$2(() => { onInputChange(); }, debounce$12.value); const debouncedQueryChange = debounce$2((e) => { handleQueryChange(e.target.value); }, debounce$12.value); const emitChange = (val) => { if (!isEqual(props.modelValue, val)) { ctx.emit(CHANGE_EVENT, val); } }; const deletePrevTag = (e) => { if (e.code === EVENT_CODE.delete) return; if (e.target.value.length <= 0 && !toggleLastOptionHitState()) { const value = props.modelValue.slice(); value.pop(); ctx.emit(UPDATE_MODEL_EVENT, value); emitChange(value); } if (e.target.value.length === 1 && props.modelValue.length === 0) { states.currentPlaceholder = states.cachedPlaceHolder; } }; const deleteTag = (event2, tag) => { const index2 = states.selected.indexOf(tag); if (index2 > -1 && !selectDisabled.value) { const value = props.modelValue.slice(); value.splice(index2, 1); ctx.emit(UPDATE_MODEL_EVENT, value); emitChange(value); ctx.emit("remove-tag", tag.value); } event2.stopPropagation(); }; const deleteSelected = (event2) => { event2.stopPropagation(); const value = props.multiple ? [] : ""; if (!isString(value)) { for (const item of states.selected) { if (item.isDisabled) value.push(item.value); } } ctx.emit(UPDATE_MODEL_EVENT, value); emitChange(value); states.hoverIndex = -1; states.visible = false; ctx.emit("clear"); }; const handleOptionSelect = (option, byClick) => { var _a2; if (props.multiple) { const value = (props.modelValue || []).slice(); const optionIndex = getValueIndex(value, option.value); if (optionIndex > -1) { value.splice(optionIndex, 1); } else if (props.multipleLimit <= 0 || value.length < props.multipleLimit) { value.push(option.value); } ctx.emit(UPDATE_MODEL_EVENT, value); emitChange(value); if (option.created) { states.query = ""; handleQueryChange(""); states.inputLength = 20; } if (props.filterable) (_a2 = input.value) == null ? void 0 : _a2.focus(); } else { ctx.emit(UPDATE_MODEL_EVENT, option.value); emitChange(option.value); states.visible = false; } states.isSilentBlur = byClick; setSoftFocus(); if (states.visible) return; nextTick(() => { scrollToOption(option); }); }; const getValueIndex = (arr = [], value) => { if (!isObject$5(value)) return arr.indexOf(value); const valueKey = props.valueKey; let index2 = -1; arr.some((item, i2) => { if (toRaw$1(get$2(item, valueKey)) === get$2(value, valueKey)) { index2 = i2; return true; } return false; }); return index2; }; const setSoftFocus = () => { states.softFocus = true; const _input = input.value || reference.value; if (_input) { _input == null ? void 0 : _input.focus(); } }; const scrollToOption = (option) => { var _a2, _b, _c, _d, _e; const targetOption = Array.isArray(option) ? option[0] : option; let target = null; if (targetOption == null ? void 0 : targetOption.value) { const options2 = optionsArray.value.filter((item) => item.value === targetOption.value); if (options2.length > 0) { target = options2[0].$el; } } if (tooltipRef.value && target) { const menu = (_d = (_c = (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.popperRef) == null ? void 0 : _b.contentRef) == null ? void 0 : _c.querySelector) == null ? void 0 : _d.call(_c, `.${ns.be("dropdown", "wrap")}`); if (menu) { scrollIntoView(menu, target); } } (_e = scrollbar.value) == null ? void 0 : _e.handleScroll(); }; const onOptionCreate = (vm) => { states.optionsCount++; states.filteredOptionsCount++; states.options.set(vm.value, vm); states.cachedOptions.set(vm.value, vm); }; const onOptionDestroy = (key, vm) => { if (states.options.get(key) === vm) { states.optionsCount--; states.filteredOptionsCount--; states.options.delete(key); } }; const resetInputState = (e) => { if (e.code !== EVENT_CODE.backspace) toggleLastOptionHitState(false); states.inputLength = input.value.value.length * 15 + 20; resetInputHeight(); }; const toggleLastOptionHitState = (hit) => { if (!Array.isArray(states.selected)) return; const option = states.selected[states.selected.length - 1]; if (!option) return; if (hit === true || hit === false) { option.hitState = hit; return hit; } option.hitState = !option.hitState; return option.hitState; }; const handleComposition = (event2) => { const text = event2.target.value; if (event2.type === "compositionend") { states.isOnComposition = false; nextTick(() => handleQueryChange(text)); } else { const lastCharacter = text[text.length - 1] || ""; states.isOnComposition = !isKorean(lastCharacter); } }; const handleMenuEnter = () => { nextTick(() => scrollToOption(states.selected)); }; const handleFocus = (event2) => { if (!states.softFocus) { if (props.automaticDropdown || props.filterable) { if (props.filterable && !states.visible) { states.menuVisibleOnFocus = true; } states.visible = true; } ctx.emit("focus", event2); } else { states.softFocus = false; } }; const blur = () => { var _a2, _b, _c; states.visible = false; (_a2 = reference.value) == null ? void 0 : _a2.blur(); (_c = (_b = iOSInput.value) == null ? void 0 : _b.blur) == null ? void 0 : _c.call(_b); }; const handleBlur = (event2) => { nextTick(() => { if (states.isSilentBlur) { states.isSilentBlur = false; } else { ctx.emit("blur", event2); } }); states.softFocus = false; }; const handleClearClick = (event2) => { deleteSelected(event2); }; const handleClose = () => { states.visible = false; }; const handleKeydownEscape = (event2) => { if (states.visible) { event2.preventDefault(); event2.stopPropagation(); states.visible = false; } }; const toggleMenu = (e) => { var _a2; if (e && !states.mouseEnter) { return; } if (!selectDisabled.value) { if (states.menuVisibleOnFocus) { states.menuVisibleOnFocus = false; } else { if (!tooltipRef.value || !tooltipRef.value.isFocusInsideContent()) { states.visible = !states.visible; } } if (states.visible) { (_a2 = input.value || reference.value) == null ? void 0 : _a2.focus(); } } }; const selectOption = () => { if (!states.visible) { toggleMenu(); } else { if (optionsArray.value[states.hoverIndex]) { handleOptionSelect(optionsArray.value[states.hoverIndex], void 0); } } }; const getValueKey = (item) => { return isObject$5(item.value) ? get$2(item.value, props.valueKey) : item.value; }; const optionsAllDisabled = computed$1(() => optionsArray.value.filter((option) => option.visible).every((option) => option.disabled)); const showTagList = computed$1(() => states.selected.slice(0, props.maxCollapseTags)); const collapseTagList = computed$1(() => states.selected.slice(props.maxCollapseTags)); const navigateOptions = (direction) => { if (!states.visible) { states.visible = true; return; } if (states.options.size === 0 || states.filteredOptionsCount === 0) return; if (states.isOnComposition) return; if (!optionsAllDisabled.value) { if (direction === "next") { states.hoverIndex++; if (states.hoverIndex === states.options.size) { states.hoverIndex = 0; } } else if (direction === "prev") { states.hoverIndex--; if (states.hoverIndex < 0) { states.hoverIndex = states.options.size - 1; } } const option = optionsArray.value[states.hoverIndex]; if (option.disabled === true || option.states.groupDisabled === true || !option.visible) { navigateOptions(direction); } nextTick(() => scrollToOption(hoverOption.value)); } }; const handleMouseEnter = () => { states.mouseEnter = true; }; const handleMouseLeave = () => { states.mouseEnter = false; }; return { optionList, optionsArray, selectSize, handleResize, debouncedOnInputChange, debouncedQueryChange, deletePrevTag, deleteTag, deleteSelected, handleOptionSelect, scrollToOption, readonly: readonly2, resetInputHeight, showClose, iconComponent, iconReverse, showNewOption, collapseTagSize, setSelected, managePlaceholder, selectDisabled, emptyText, toggleLastOptionHitState, resetInputState, handleComposition, onOptionCreate, onOptionDestroy, handleMenuEnter, handleFocus, blur, handleBlur, handleClearClick, handleClose, handleKeydownEscape, toggleMenu, selectOption, getValueKey, navigateOptions, dropMenuVisible, queryChange, groupQueryChange, showTagList, collapseTagList, reference, input, iOSInput, tooltipRef, tags, selectWrapper, scrollbar, handleMouseEnter, handleMouseLeave }; }; var ElOptions = defineComponent({ name: "ElOptions", emits: ["update-options"], setup(_, { slots, emit }) { let cachedOptions = []; function isSameOptions(a, b) { if (a.length !== b.length) return false; for (const [index2] of a.entries()) { if (a[index2] != b[index2]) { return false; } } return true; } return () => { var _a2, _b; const children = (_a2 = slots.default) == null ? void 0 : _a2.call(slots); const filteredOptions = []; function filterOptions(children2) { if (!Array.isArray(children2)) return; children2.forEach((item) => { var _a22, _b2, _c, _d; const name = (_a22 = (item == null ? void 0 : item.type) || {}) == null ? void 0 : _a22.name; if (name === "ElOptionGroup") { filterOptions(!isString(item.children) && !Array.isArray(item.children) && isFunction$3((_b2 = item.children) == null ? void 0 : _b2.default) ? (_c = item.children) == null ? void 0 : _c.default() : item.children); } else if (name === "ElOption") { filteredOptions.push((_d = item.props) == null ? void 0 : _d.label); } else if (Array.isArray(item.children)) { filterOptions(item.children); } }); } if (children.length) { filterOptions((_b = children[0]) == null ? void 0 : _b.children); } if (!isSameOptions(filteredOptions, cachedOptions)) { cachedOptions = filteredOptions; emit("update-options", filteredOptions); } return children; }; } }); const COMPONENT_NAME$1 = "ElSelect"; const _sfc_main$5 = defineComponent({ name: COMPONENT_NAME$1, componentName: COMPONENT_NAME$1, components: { ElInput, ElSelectMenu, ElOption: Option, ElOptions, ElTag, ElScrollbar, ElTooltip, ElIcon }, directives: { ClickOutside }, props: { name: String, id: String, modelValue: { type: [Array, String, Number, Boolean, Object], default: void 0 }, autocomplete: { type: String, default: "off" }, automaticDropdown: Boolean, size: { type: String, validator: isValidComponentSize }, effect: { type: String, default: "light" }, disabled: Boolean, clearable: Boolean, filterable: Boolean, allowCreate: Boolean, loading: Boolean, popperClass: { type: String, default: "" }, popperOptions: { type: Object, default: () => ({}) }, remote: Boolean, loadingText: String, noMatchText: String, noDataText: String, remoteMethod: Function, filterMethod: Function, multiple: Boolean, multipleLimit: { type: Number, default: 0 }, placeholder: { type: String }, defaultFirstOption: Boolean, reserveKeyword: { type: Boolean, default: true }, valueKey: { type: String, default: "value" }, collapseTags: Boolean, collapseTagsTooltip: { type: Boolean, default: false }, maxCollapseTags: { type: Number, default: 1 }, teleported: useTooltipContentProps.teleported, persistent: { type: Boolean, default: true }, clearIcon: { type: iconPropType, default: circle_close_default }, fitInputWidth: { type: Boolean, default: false }, suffixIcon: { type: iconPropType, default: arrow_down_default }, tagType: { ...tagProps.type, default: "info" }, validateEvent: { type: Boolean, default: true }, remoteShowSuffix: { type: Boolean, default: false }, suffixTransition: { type: Boolean, default: true }, placement: { type: String, values: Ee, default: "bottom-start" } }, emits: [ UPDATE_MODEL_EVENT, CHANGE_EVENT, "remove-tag", "clear", "visible-change", "focus", "blur" ], setup(props, ctx) { const nsSelect = useNamespace("select"); const nsInput = useNamespace("input"); const { t: t2 } = useLocale(); const states = useSelectStates(props); const { optionList, optionsArray, selectSize, readonly: readonly2, handleResize, collapseTagSize, debouncedOnInputChange, debouncedQueryChange, deletePrevTag, deleteTag, deleteSelected, handleOptionSelect, scrollToOption, setSelected, resetInputHeight, managePlaceholder, showClose, selectDisabled, iconComponent, iconReverse, showNewOption, emptyText, toggleLastOptionHitState, resetInputState, handleComposition, onOptionCreate, onOptionDestroy, handleMenuEnter, handleFocus, blur, handleBlur, handleClearClick, handleClose, handleKeydownEscape, toggleMenu, selectOption, getValueKey, navigateOptions, dropMenuVisible, reference, input, iOSInput, tooltipRef, tags, selectWrapper, scrollbar, queryChange, groupQueryChange, handleMouseEnter, handleMouseLeave, showTagList, collapseTagList } = useSelect(props, states, ctx); const { focus } = useFocus(reference); const { inputWidth, selected, inputLength, filteredOptionsCount, visible, softFocus, selectedLabel, hoverIndex, query, inputHovering, currentPlaceholder, menuVisibleOnFocus, isOnComposition, isSilentBlur, options: options2, cachedOptions, optionsCount, prefixWidth, tagInMultiLine } = toRefs(states); const wrapperKls = computed$1(() => { const classList = [nsSelect.b()]; const _selectSize = unref(selectSize); if (_selectSize) { classList.push(nsSelect.m(_selectSize)); } if (props.disabled) { classList.push(nsSelect.m("disabled")); } return classList; }); const selectTagsStyle = computed$1(() => ({ maxWidth: `${unref(inputWidth) - 32}px`, width: "100%" })); const tagTextStyle = computed$1(() => { const maxWidth = unref(inputWidth) > 123 ? unref(inputWidth) - 123 : unref(inputWidth) - 75; return { maxWidth: `${maxWidth}px` }; }); provide(selectKey, reactive({ props, options: options2, optionsArray, cachedOptions, optionsCount, filteredOptionsCount, hoverIndex, handleOptionSelect, onOptionCreate, onOptionDestroy, selectWrapper, selected, setSelected, queryChange, groupQueryChange })); onMounted(() => { states.cachedPlaceHolder = currentPlaceholder.value = props.placeholder || (() => t2("el.select.placeholder")); if (props.multiple && Array.isArray(props.modelValue) && props.modelValue.length > 0) { currentPlaceholder.value = ""; } useResizeObserver(selectWrapper, handleResize); if (props.remote && props.multiple) { resetInputHeight(); } nextTick(() => { const refEl = reference.value && reference.value.$el; if (!refEl) return; inputWidth.value = refEl.getBoundingClientRect().width; if (ctx.slots.prefix) { const prefix = refEl.querySelector(`.${nsInput.e("prefix")}`); prefixWidth.value = Math.max(prefix.getBoundingClientRect().width + 5, 30); } }); setSelected(); }); if (props.multiple && !Array.isArray(props.modelValue)) { ctx.emit(UPDATE_MODEL_EVENT, []); } if (!props.multiple && Array.isArray(props.modelValue)) { ctx.emit(UPDATE_MODEL_EVENT, ""); } const popperPaneRef = computed$1(() => { var _a2, _b; return (_b = (_a2 = tooltipRef.value) == null ? void 0 : _a2.popperRef) == null ? void 0 : _b.contentRef; }); const onOptionsRendered = (v) => { optionList.value = v; }; return { isIOS, onOptionsRendered, tagInMultiLine, prefixWidth, selectSize, readonly: readonly2, handleResize, collapseTagSize, debouncedOnInputChange, debouncedQueryChange, deletePrevTag, deleteTag, deleteSelected, handleOptionSelect, scrollToOption, inputWidth, selected, inputLength, filteredOptionsCount, visible, softFocus, selectedLabel, hoverIndex, query, inputHovering, currentPlaceholder, menuVisibleOnFocus, isOnComposition, isSilentBlur, options: options2, resetInputHeight, managePlaceholder, showClose, selectDisabled, iconComponent, iconReverse, showNewOption, emptyText, toggleLastOptionHitState, resetInputState, handleComposition, handleMenuEnter, handleFocus, blur, handleBlur, handleClearClick, handleClose, handleKeydownEscape, toggleMenu, selectOption, getValueKey, navigateOptions, dropMenuVisible, focus, reference, input, iOSInput, tooltipRef, popperPaneRef, tags, selectWrapper, scrollbar, wrapperKls, selectTagsStyle, nsSelect, tagTextStyle, handleMouseEnter, handleMouseLeave, showTagList, collapseTagList }; } }); const _hoisted_1$4 = ["disabled", "autocomplete"]; const _hoisted_2$4 = ["disabled"]; const _hoisted_3$4 = { style: { "height": "100%", "display": "flex", "justify-content": "center", "align-items": "center" } }; function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) { const _component_el_tag = resolveComponent("el-tag"); const _component_el_tooltip = resolveComponent("el-tooltip"); const _component_el_icon = resolveComponent("el-icon"); const _component_el_input = resolveComponent("el-input"); const _component_el_option = resolveComponent("el-option"); const _component_el_options = resolveComponent("el-options"); const _component_el_scrollbar = resolveComponent("el-scrollbar"); const _component_el_select_menu = resolveComponent("el-select-menu"); const _directive_click_outside = resolveDirective("click-outside"); return withDirectives((openBlock(), createElementBlock("div", { ref: "selectWrapper", class: normalizeClass(_ctx.wrapperKls), onMouseenter: _cache[21] || (_cache[21] = (...args) => _ctx.handleMouseEnter && _ctx.handleMouseEnter(...args)), onMouseleave: _cache[22] || (_cache[22] = (...args) => _ctx.handleMouseLeave && _ctx.handleMouseLeave(...args)), onClick: _cache[23] || (_cache[23] = withModifiers((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["stop"])) }, [ createVNode(_component_el_tooltip, { ref: "tooltipRef", visible: _ctx.dropMenuVisible, placement: _ctx.placement, teleported: _ctx.teleported, "popper-class": [_ctx.nsSelect.e("popper"), _ctx.popperClass], "popper-options": _ctx.popperOptions, "fallback-placements": ["bottom-start", "top-start", "right", "left"], effect: _ctx.effect, pure: "", trigger: "click", transition: `${_ctx.nsSelect.namespace.value}-zoom-in-top`, "stop-popper-mouse-event": false, "gpu-acceleration": false, persistent: _ctx.persistent, onShow: _ctx.handleMenuEnter }, { default: withCtx(() => [ createElementVNode("div", { class: "select-trigger", onMouseenter: _cache[19] || (_cache[19] = ($event) => _ctx.inputHovering = true), onMouseleave: _cache[20] || (_cache[20] = ($event) => _ctx.inputHovering = false) }, [ _ctx.multiple ? (openBlock(), createElementBlock("div", { key: 0, ref: "tags", class: normalizeClass([ _ctx.nsSelect.e("tags"), _ctx.nsSelect.is("disabled", _ctx.selectDisabled) ]), style: normalizeStyle(_ctx.selectTagsStyle) }, [ _ctx.collapseTags && _ctx.selected.length ? (openBlock(), createBlock(Transition, { key: 0, onAfterLeave: _ctx.resetInputHeight }, { default: withCtx(() => [ createElementVNode("span", { class: normalizeClass([ _ctx.nsSelect.b("tags-wrapper"), { "has-prefix": _ctx.prefixWidth && _ctx.selected.length } ]) }, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.showTagList, (item) => { return openBlock(), createBlock(_component_el_tag, { key: _ctx.getValueKey(item), closable: !_ctx.selectDisabled && !item.isDisabled, size: _ctx.collapseTagSize, hit: item.hitState, type: _ctx.tagType, "disable-transitions": "", onClose: ($event) => _ctx.deleteTag($event, item) }, { default: withCtx(() => [ createElementVNode("span", { class: normalizeClass(_ctx.nsSelect.e("tags-text")), style: normalizeStyle(_ctx.tagTextStyle) }, toDisplayString(item.currentLabel), 7) ]), _: 2 }, 1032, ["closable", "size", "hit", "type", "onClose"]); }), 128)), _ctx.selected.length > _ctx.maxCollapseTags ? (openBlock(), createBlock(_component_el_tag, { key: 0, closable: false, size: _ctx.collapseTagSize, type: _ctx.tagType, "disable-transitions": "" }, { default: withCtx(() => [ _ctx.collapseTagsTooltip ? (openBlock(), createBlock(_component_el_tooltip, { key: 0, disabled: _ctx.dropMenuVisible, "fallback-placements": ["bottom", "top", "right", "left"], effect: _ctx.effect, placement: "bottom", teleported: _ctx.teleported }, { default: withCtx(() => [ createElementVNode("span", { class: normalizeClass(_ctx.nsSelect.e("tags-text")) }, "+ " + toDisplayString(_ctx.selected.length - _ctx.maxCollapseTags), 3) ]), content: withCtx(() => [ createElementVNode("div", { class: normalizeClass(_ctx.nsSelect.e("collapse-tags")) }, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.collapseTagList, (item) => { return openBlock(), createElementBlock("div", { key: _ctx.getValueKey(item), class: normalizeClass(_ctx.nsSelect.e("collapse-tag")) }, [ createVNode(_component_el_tag, { class: "in-tooltip", closable: !_ctx.selectDisabled && !item.isDisabled, size: _ctx.collapseTagSize, hit: item.hitState, type: _ctx.tagType, "disable-transitions": "", style: { margin: "2px" }, onClose: ($event) => _ctx.deleteTag($event, item) }, { default: withCtx(() => [ createElementVNode("span", { class: normalizeClass(_ctx.nsSelect.e("tags-text")), style: normalizeStyle({ maxWidth: _ctx.inputWidth - 75 + "px" }) }, toDisplayString(item.currentLabel), 7) ]), _: 2 }, 1032, ["closable", "size", "hit", "type", "onClose"]) ], 2); }), 128)) ], 2) ]), _: 1 }, 8, ["disabled", "effect", "teleported"])) : (openBlock(), createElementBlock("span", { key: 1, class: normalizeClass(_ctx.nsSelect.e("tags-text")) }, "+ " + toDisplayString(_ctx.selected.length - _ctx.maxCollapseTags), 3)) ]), _: 1 }, 8, ["size", "type"])) : createCommentVNode("v-if", true) ], 2) ]), _: 1 }, 8, ["onAfterLeave"])) : createCommentVNode("v-if", true), !_ctx.collapseTags ? (openBlock(), createBlock(Transition, { key: 1, onAfterLeave: _ctx.resetInputHeight }, { default: withCtx(() => [ createElementVNode("span", { class: normalizeClass([ _ctx.nsSelect.b("tags-wrapper"), { "has-prefix": _ctx.prefixWidth && _ctx.selected.length } ]) }, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.selected, (item) => { return openBlock(), createBlock(_component_el_tag, { key: _ctx.getValueKey(item), closable: !_ctx.selectDisabled && !item.isDisabled, size: _ctx.collapseTagSize, hit: item.hitState, type: _ctx.tagType, "disable-transitions": "", onClose: ($event) => _ctx.deleteTag($event, item) }, { default: withCtx(() => [ createElementVNode("span", { class: normalizeClass(_ctx.nsSelect.e("tags-text")), style: normalizeStyle({ maxWidth: _ctx.inputWidth - 75 + "px" }) }, toDisplayString(item.currentLabel), 7) ]), _: 2 }, 1032, ["closable", "size", "hit", "type", "onClose"]); }), 128)) ], 2) ]), _: 1 }, 8, ["onAfterLeave"])) : createCommentVNode("v-if", true), _ctx.filterable ? withDirectives((openBlock(), createElementBlock("input", { key: 2, ref: "input", "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.query = $event), type: "text", class: normalizeClass([ _ctx.nsSelect.e("input"), _ctx.nsSelect.is(_ctx.selectSize), _ctx.nsSelect.is("disabled", _ctx.selectDisabled) ]), disabled: _ctx.selectDisabled, autocomplete: _ctx.autocomplete, style: normalizeStyle({ marginLeft: _ctx.prefixWidth && !_ctx.selected.length || _ctx.tagInMultiLine ? `${_ctx.prefixWidth}px` : "", flexGrow: 1, width: `${_ctx.inputLength / (_ctx.inputWidth - 32)}%`, maxWidth: `${_ctx.inputWidth - 42}px` }), onFocus: _cache[1] || (_cache[1] = (...args) => _ctx.handleFocus && _ctx.handleFocus(...args)), onBlur: _cache[2] || (_cache[2] = (...args) => _ctx.handleBlur && _ctx.handleBlur(...args)), onKeyup: _cache[3] || (_cache[3] = (...args) => _ctx.managePlaceholder && _ctx.managePlaceholder(...args)), onKeydown: [ _cache[4] || (_cache[4] = (...args) => _ctx.resetInputState && _ctx.resetInputState(...args)), _cache[5] || (_cache[5] = withKeys(withModifiers(($event) => _ctx.navigateOptions("next"), ["prevent"]), ["down"])), _cache[6] || (_cache[6] = withKeys(withModifiers(($event) => _ctx.navigateOptions("prev"), ["prevent"]), ["up"])), _cache[7] || (_cache[7] = withKeys((...args) => _ctx.handleKeydownEscape && _ctx.handleKeydownEscape(...args), ["esc"])), _cache[8] || (_cache[8] = withKeys(withModifiers((...args) => _ctx.selectOption && _ctx.selectOption(...args), ["stop", "prevent"]), ["enter"])), _cache[9] || (_cache[9] = withKeys((...args) => _ctx.deletePrevTag && _ctx.deletePrevTag(...args), ["delete"])), _cache[10] || (_cache[10] = withKeys(($event) => _ctx.visible = false, ["tab"])) ], onCompositionstart: _cache[11] || (_cache[11] = (...args) => _ctx.handleComposition && _ctx.handleComposition(...args)), onCompositionupdate: _cache[12] || (_cache[12] = (...args) => _ctx.handleComposition && _ctx.handleComposition(...args)), onCompositionend: _cache[13] || (_cache[13] = (...args) => _ctx.handleComposition && _ctx.handleComposition(...args)), onInput: _cache[14] || (_cache[14] = (...args) => _ctx.debouncedQueryChange && _ctx.debouncedQueryChange(...args)) }, null, 46, _hoisted_1$4)), [ [vModelText, _ctx.query] ]) : createCommentVNode("v-if", true) ], 6)) : createCommentVNode("v-if", true), createCommentVNode(" fix: https://github.com/element-plus/element-plus/issues/11415 "), _ctx.isIOS && !_ctx.multiple && _ctx.filterable && _ctx.readonly ? (openBlock(), createElementBlock("input", { key: 1, ref: "iOSInput", class: normalizeClass([ _ctx.nsSelect.e("input"), _ctx.nsSelect.is(_ctx.selectSize), _ctx.nsSelect.em("input", "iOS") ]), disabled: _ctx.selectDisabled, type: "text" }, null, 10, _hoisted_2$4)) : createCommentVNode("v-if", true), createVNode(_component_el_input, { id: _ctx.id, ref: "reference", modelValue: _ctx.selectedLabel, "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => _ctx.selectedLabel = $event), type: "text", placeholder: typeof _ctx.currentPlaceholder === "function" ? _ctx.currentPlaceholder() : _ctx.currentPlaceholder, name: _ctx.name, autocomplete: _ctx.autocomplete, size: _ctx.selectSize, disabled: _ctx.selectDisabled, readonly: _ctx.readonly, "validate-event": false, class: normalizeClass([_ctx.nsSelect.is("focus", _ctx.visible)]), tabindex: _ctx.multiple && _ctx.filterable ? -1 : void 0, onFocus: _ctx.handleFocus, onBlur: _ctx.handleBlur, onInput: _ctx.debouncedOnInputChange, onPaste: _ctx.debouncedOnInputChange, onCompositionstart: _ctx.handleComposition, onCompositionupdate: _ctx.handleComposition, onCompositionend: _ctx.handleComposition, onKeydown: [ _cache[16] || (_cache[16] = withKeys(withModifiers(($event) => _ctx.navigateOptions("next"), ["stop", "prevent"]), ["down"])), _cache[17] || (_cache[17] = withKeys(withModifiers(($event) => _ctx.navigateOptions("prev"), ["stop", "prevent"]), ["up"])), withKeys(withModifiers(_ctx.selectOption, ["stop", "prevent"]), ["enter"]), withKeys(_ctx.handleKeydownEscape, ["esc"]), _cache[18] || (_cache[18] = withKeys(($event) => _ctx.visible = false, ["tab"])) ] }, createSlots({ suffix: withCtx(() => [ _ctx.iconComponent && !_ctx.showClose ? (openBlock(), createBlock(_component_el_icon, { key: 0, class: normalizeClass([_ctx.nsSelect.e("caret"), _ctx.nsSelect.e("icon"), _ctx.iconReverse]) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.iconComponent))) ]), _: 1 }, 8, ["class"])) : createCommentVNode("v-if", true), _ctx.showClose && _ctx.clearIcon ? (openBlock(), createBlock(_component_el_icon, { key: 1, class: normalizeClass([_ctx.nsSelect.e("caret"), _ctx.nsSelect.e("icon")]), onClick: _ctx.handleClearClick }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.clearIcon))) ]), _: 1 }, 8, ["class", "onClick"])) : createCommentVNode("v-if", true) ]), _: 2 }, [ _ctx.$slots.prefix ? { name: "prefix", fn: withCtx(() => [ createElementVNode("div", _hoisted_3$4, [ renderSlot(_ctx.$slots, "prefix") ]) ]) } : void 0 ]), 1032, ["id", "modelValue", "placeholder", "name", "autocomplete", "size", "disabled", "readonly", "class", "tabindex", "onFocus", "onBlur", "onInput", "onPaste", "onCompositionstart", "onCompositionupdate", "onCompositionend", "onKeydown"]) ], 32) ]), content: withCtx(() => [ createVNode(_component_el_select_menu, null, { default: withCtx(() => [ withDirectives(createVNode(_component_el_scrollbar, { ref: "scrollbar", tag: "ul", "wrap-class": _ctx.nsSelect.be("dropdown", "wrap"), "view-class": _ctx.nsSelect.be("dropdown", "list"), class: normalizeClass([ _ctx.nsSelect.is("empty", !_ctx.allowCreate && Boolean(_ctx.query) && _ctx.filteredOptionsCount === 0) ]) }, { default: withCtx(() => [ _ctx.showNewOption ? (openBlock(), createBlock(_component_el_option, { key: 0, value: _ctx.query, created: true }, null, 8, ["value"])) : createCommentVNode("v-if", true), createVNode(_component_el_options, { onUpdateOptions: _ctx.onOptionsRendered }, { default: withCtx(() => [ renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["onUpdateOptions"]) ]), _: 3 }, 8, ["wrap-class", "view-class", "class"]), [ [vShow, _ctx.options.size > 0 && !_ctx.loading] ]), _ctx.emptyText && (!_ctx.allowCreate || _ctx.loading || _ctx.allowCreate && _ctx.options.size === 0) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ _ctx.$slots.empty ? renderSlot(_ctx.$slots, "empty", { key: 0 }) : (openBlock(), createElementBlock("p", { key: 1, class: normalizeClass(_ctx.nsSelect.be("dropdown", "empty")) }, toDisplayString(_ctx.emptyText), 3)) ], 64)) : createCommentVNode("v-if", true) ]), _: 3 }) ]), _: 3 }, 8, ["visible", "placement", "teleported", "popper-class", "popper-options", "effect", "transition", "persistent", "onShow"]) ], 34)), [ [_directive_click_outside, _ctx.handleClose, _ctx.popperPaneRef] ]); } var Select = /* @__PURE__ */ _export_sfc$1(_sfc_main$5, [["render", _sfc_render$1], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/select/src/select.vue"]]); const _sfc_main$4 = defineComponent({ name: "ElOptionGroup", componentName: "ElOptionGroup", props: { label: String, disabled: { type: Boolean, default: false } }, setup(props) { const ns = useNamespace("select"); const visible = ref(true); const instance = getCurrentInstance(); const children = ref([]); provide(selectGroupKey, reactive({ ...toRefs(props) })); const select = inject(selectKey); onMounted(() => { children.value = flattedChildren(instance.subTree); }); const flattedChildren = (node) => { const children2 = []; if (Array.isArray(node.children)) { node.children.forEach((child) => { var _a2; if (child.type && child.type.name === "ElOption" && child.component && child.component.proxy) { children2.push(child.component.proxy); } else if ((_a2 = child.children) == null ? void 0 : _a2.length) { children2.push(...flattedChildren(child)); } }); } return children2; }; const { groupQueryChange } = toRaw$1(select); watch(groupQueryChange, () => { visible.value = children.value.some((option) => option.visible === true); }, { flush: "post" }); return { visible, ns }; } }); function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return withDirectives((openBlock(), createElementBlock("ul", { class: normalizeClass(_ctx.ns.be("group", "wrap")) }, [ createElementVNode("li", { class: normalizeClass(_ctx.ns.be("group", "title")) }, toDisplayString(_ctx.label), 3), createElementVNode("li", null, [ createElementVNode("ul", { class: normalizeClass(_ctx.ns.b("group")) }, [ renderSlot(_ctx.$slots, "default") ], 2) ]) ], 2)), [ [vShow, _ctx.visible] ]); } var OptionGroup = /* @__PURE__ */ _export_sfc$1(_sfc_main$4, [["render", _sfc_render], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/select/src/option-group.vue"]]); const ElSelect = withInstall(Select, { Option, OptionGroup }); const ElOption = withNoopInstall(Option); withNoopInstall(OptionGroup); const switchProps = buildProps({ modelValue: { type: [Boolean, String, Number], default: false }, value: { type: [Boolean, String, Number], default: false }, disabled: { type: Boolean, default: false }, width: { type: [String, Number], default: "" }, inlinePrompt: { type: Boolean, default: false }, activeIcon: { type: iconPropType }, inactiveIcon: { type: iconPropType }, activeText: { type: String, default: "" }, inactiveText: { type: String, default: "" }, activeColor: { type: String, default: "" }, inactiveColor: { type: String, default: "" }, borderColor: { type: String, default: "" }, activeValue: { type: [Boolean, String, Number], default: true }, inactiveValue: { type: [Boolean, String, Number], default: false }, name: { type: String, default: "" }, validateEvent: { type: Boolean, default: true }, id: String, loading: { type: Boolean, default: false }, beforeChange: { type: definePropType(Function) }, size: { type: String, validator: isValidComponentSize }, tabindex: { type: [String, Number] } }); const switchEmits = { [UPDATE_MODEL_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val), [CHANGE_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val), [INPUT_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val) }; const _hoisted_1$3 = ["onClick"]; const _hoisted_2$3 = ["id", "aria-checked", "aria-disabled", "name", "true-value", "false-value", "disabled", "tabindex", "onKeydown"]; const _hoisted_3$3 = ["aria-hidden"]; const _hoisted_4$3 = ["aria-hidden"]; const _hoisted_5$3 = ["aria-hidden"]; const COMPONENT_NAME = "ElSwitch"; const __default__ = defineComponent({ name: COMPONENT_NAME }); const _sfc_main$3 = /* @__PURE__ */ defineComponent({ ...__default__, props: switchProps, emits: switchEmits, setup(__props, { expose, emit }) { const props = __props; const vm = getCurrentInstance(); const { formItem } = useFormItem(); const switchSize = useFormSize(); const ns = useNamespace("switch"); useDeprecated({ from: '"value"', replacement: '"model-value" or "v-model"', scope: COMPONENT_NAME, version: "2.3.0", ref: "https://element-plus.org/en-US/component/switch.html#attributes", type: "Attribute" }, computed$1(() => { var _a2; return !!((_a2 = vm.vnode.props) == null ? void 0 : _a2.value); })); const { inputId } = useFormItemInputId(props, { formItemContext: formItem }); const switchDisabled = useFormDisabled(computed$1(() => props.loading)); const isControlled = ref(props.modelValue !== false); const input = ref(); const core = ref(); const switchKls = computed$1(() => [ ns.b(), ns.m(switchSize.value), ns.is("disabled", switchDisabled.value), ns.is("checked", checked.value) ]); const coreStyle = computed$1(() => ({ width: addUnit(props.width) })); watch(() => props.modelValue, () => { isControlled.value = true; }); watch(() => props.value, () => { isControlled.value = false; }); const actualValue = computed$1(() => { return isControlled.value ? props.modelValue : props.value; }); const checked = computed$1(() => actualValue.value === props.activeValue); if (![props.activeValue, props.inactiveValue].includes(actualValue.value)) { emit(UPDATE_MODEL_EVENT, props.inactiveValue); emit(CHANGE_EVENT, props.inactiveValue); emit(INPUT_EVENT, props.inactiveValue); } watch(checked, (val) => { var _a2; input.value.checked = val; if (props.validateEvent) { (_a2 = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a2.call(formItem, "change").catch((err) => debugWarn()); } }); const handleChange = () => { const val = checked.value ? props.inactiveValue : props.activeValue; emit(UPDATE_MODEL_EVENT, val); emit(CHANGE_EVENT, val); emit(INPUT_EVENT, val); nextTick(() => { input.value.checked = checked.value; }); }; const switchValue = () => { if (switchDisabled.value) return; const { beforeChange } = props; if (!beforeChange) { handleChange(); return; } const shouldChange = beforeChange(); const isPromiseOrBool = [ isPromise$2(shouldChange), isBoolean(shouldChange) ].includes(true); if (!isPromiseOrBool) { throwError(COMPONENT_NAME, "beforeChange must return type `Promise` or `boolean`"); } if (isPromise$2(shouldChange)) { shouldChange.then((result) => { if (result) { handleChange(); } }).catch((e) => { }); } else if (shouldChange) { handleChange(); } }; const styles = computed$1(() => { return ns.cssVarBlock({ ...props.activeColor ? { "on-color": props.activeColor } : null, ...props.inactiveColor ? { "off-color": props.inactiveColor } : null, ...props.borderColor ? { "border-color": props.borderColor } : null }); }); const focus = () => { var _a2, _b; (_b = (_a2 = input.value) == null ? void 0 : _a2.focus) == null ? void 0 : _b.call(_a2); }; onMounted(() => { input.value.checked = checked.value; }); expose({ focus, checked }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass(unref(switchKls)), style: normalizeStyle(unref(styles)), onClick: withModifiers(switchValue, ["prevent"]) }, [ createElementVNode("input", { id: unref(inputId), ref_key: "input", ref: input, class: normalizeClass(unref(ns).e("input")), type: "checkbox", role: "switch", "aria-checked": unref(checked), "aria-disabled": unref(switchDisabled), name: _ctx.name, "true-value": _ctx.activeValue, "false-value": _ctx.inactiveValue, disabled: unref(switchDisabled), tabindex: _ctx.tabindex, onChange: handleChange, onKeydown: withKeys(switchValue, ["enter"]) }, null, 42, _hoisted_2$3), !_ctx.inlinePrompt && (_ctx.inactiveIcon || _ctx.inactiveText) ? (openBlock(), createElementBlock("span", { key: 0, class: normalizeClass([ unref(ns).e("label"), unref(ns).em("label", "left"), unref(ns).is("active", !unref(checked)) ]) }, [ _ctx.inactiveIcon ? (openBlock(), createBlock(unref(ElIcon), { key: 0 }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.inactiveIcon))) ]), _: 1 })) : createCommentVNode("v-if", true), !_ctx.inactiveIcon && _ctx.inactiveText ? (openBlock(), createElementBlock("span", { key: 1, "aria-hidden": unref(checked) }, toDisplayString(_ctx.inactiveText), 9, _hoisted_3$3)) : createCommentVNode("v-if", true) ], 2)) : createCommentVNode("v-if", true), createElementVNode("span", { ref_key: "core", ref: core, class: normalizeClass(unref(ns).e("core")), style: normalizeStyle(unref(coreStyle)) }, [ _ctx.inlinePrompt ? (openBlock(), createElementBlock("div", { key: 0, class: normalizeClass(unref(ns).e("inner")) }, [ _ctx.activeIcon || _ctx.inactiveIcon ? (openBlock(), createBlock(unref(ElIcon), { key: 0, class: normalizeClass(unref(ns).is("icon")) }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(unref(checked) ? _ctx.activeIcon : _ctx.inactiveIcon))) ]), _: 1 }, 8, ["class"])) : _ctx.activeText || _ctx.inactiveText ? (openBlock(), createElementBlock("span", { key: 1, class: normalizeClass(unref(ns).is("text")), "aria-hidden": !unref(checked) }, toDisplayString(unref(checked) ? _ctx.activeText : _ctx.inactiveText), 11, _hoisted_4$3)) : createCommentVNode("v-if", true) ], 2)) : createCommentVNode("v-if", true), createElementVNode("div", { class: normalizeClass(unref(ns).e("action")) }, [ _ctx.loading ? (openBlock(), createBlock(unref(ElIcon), { key: 0, class: normalizeClass(unref(ns).is("loading")) }, { default: withCtx(() => [ createVNode(unref(loading_default)) ]), _: 1 }, 8, ["class"])) : createCommentVNode("v-if", true) ], 2) ], 6), !_ctx.inlinePrompt && (_ctx.activeIcon || _ctx.activeText) ? (openBlock(), createElementBlock("span", { key: 1, class: normalizeClass([ unref(ns).e("label"), unref(ns).em("label", "right"), unref(ns).is("active", unref(checked)) ]) }, [ _ctx.activeIcon ? (openBlock(), createBlock(unref(ElIcon), { key: 0 }, { default: withCtx(() => [ (openBlock(), createBlock(resolveDynamicComponent(_ctx.activeIcon))) ]), _: 1 })) : createCommentVNode("v-if", true), !_ctx.activeIcon && _ctx.activeText ? (openBlock(), createElementBlock("span", { key: 1, "aria-hidden": !unref(checked) }, toDisplayString(_ctx.activeText), 9, _hoisted_5$3)) : createCommentVNode("v-if", true) ], 2)) : createCommentVNode("v-if", true) ], 14, _hoisted_1$3); }; } }); var Switch = /* @__PURE__ */ _export_sfc$1(_sfc_main$3, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/switch/src/switch.vue"]]); const ElSwitch = withInstall(Switch); /*! Element Plus v2.3.4 */ var zhCn = { name: "zh-cn", el: { colorpicker: { confirm: "\u786E\u5B9A", clear: "\u6E05\u7A7A" }, datepicker: { now: "\u6B64\u523B", today: "\u4ECA\u5929", cancel: "\u53D6\u6D88", clear: "\u6E05\u7A7A", confirm: "\u786E\u5B9A", selectDate: "\u9009\u62E9\u65E5\u671F", selectTime: "\u9009\u62E9\u65F6\u95F4", startDate: "\u5F00\u59CB\u65E5\u671F", startTime: "\u5F00\u59CB\u65F6\u95F4", endDate: "\u7ED3\u675F\u65E5\u671F", endTime: "\u7ED3\u675F\u65F6\u95F4", prevYear: "\u524D\u4E00\u5E74", nextYear: "\u540E\u4E00\u5E74", prevMonth: "\u4E0A\u4E2A\u6708", nextMonth: "\u4E0B\u4E2A\u6708", year: "\u5E74", month1: "1 \u6708", month2: "2 \u6708", month3: "3 \u6708", month4: "4 \u6708", month5: "5 \u6708", month6: "6 \u6708", month7: "7 \u6708", month8: "8 \u6708", month9: "9 \u6708", month10: "10 \u6708", month11: "11 \u6708", month12: "12 \u6708", weeks: { sun: "\u65E5", mon: "\u4E00", tue: "\u4E8C", wed: "\u4E09", thu: "\u56DB", fri: "\u4E94", sat: "\u516D" }, months: { jan: "\u4E00\u6708", feb: "\u4E8C\u6708", mar: "\u4E09\u6708", apr: "\u56DB\u6708", may: "\u4E94\u6708", jun: "\u516D\u6708", jul: "\u4E03\u6708", aug: "\u516B\u6708", sep: "\u4E5D\u6708", oct: "\u5341\u6708", nov: "\u5341\u4E00\u6708", dec: "\u5341\u4E8C\u6708" } }, select: { loading: "\u52A0\u8F7D\u4E2D", noMatch: "\u65E0\u5339\u914D\u6570\u636E", noData: "\u65E0\u6570\u636E", placeholder: "\u8BF7\u9009\u62E9" }, cascader: { noMatch: "\u65E0\u5339\u914D\u6570\u636E", loading: "\u52A0\u8F7D\u4E2D", placeholder: "\u8BF7\u9009\u62E9", noData: "\u6682\u65E0\u6570\u636E" }, pagination: { goto: "\u524D\u5F80", pagesize: "\u6761/\u9875", total: "\u5171 {total} \u6761", pageClassifier: "\u9875", page: "\u9875", prev: "\u4E0A\u4E00\u9875", next: "\u4E0B\u4E00\u9875", currentPage: "\u7B2C {pager} \u9875", prevPages: "\u5411\u524D {pager} \u9875", nextPages: "\u5411\u540E {pager} \u9875", deprecationWarning: "\u4F60\u4F7F\u7528\u4E86\u4E00\u4E9B\u5DF2\u88AB\u5E9F\u5F03\u7684\u7528\u6CD5\uFF0C\u8BF7\u53C2\u8003 el-pagination \u7684\u5B98\u65B9\u6587\u6863" }, messagebox: { title: "\u63D0\u793A", confirm: "\u786E\u5B9A", cancel: "\u53D6\u6D88", error: "\u8F93\u5165\u7684\u6570\u636E\u4E0D\u5408\u6CD5!" }, upload: { deleteTip: "\u6309 delete \u952E\u53EF\u5220\u9664", delete: "\u5220\u9664", preview: "\u67E5\u770B\u56FE\u7247", continue: "\u7EE7\u7EED\u4E0A\u4F20" }, table: { emptyText: "\u6682\u65E0\u6570\u636E", confirmFilter: "\u7B5B\u9009", resetFilter: "\u91CD\u7F6E", clearFilter: "\u5168\u90E8", sumText: "\u5408\u8BA1" }, tree: { emptyText: "\u6682\u65E0\u6570\u636E" }, transfer: { noMatch: "\u65E0\u5339\u914D\u6570\u636E", noData: "\u65E0\u6570\u636E", titles: ["\u5217\u8868 1", "\u5217\u8868 2"], filterPlaceholder: "\u8BF7\u8F93\u5165\u641C\u7D22\u5185\u5BB9", noCheckedFormat: "\u5171 {total} \u9879", hasCheckedFormat: "\u5DF2\u9009 {checked}/{total} \u9879" }, image: { error: "\u52A0\u8F7D\u5931\u8D25" }, pageHeader: { title: "\u8FD4\u56DE" }, popconfirm: { confirmButtonText: "\u786E\u5B9A", cancelButtonText: "\u53D6\u6D88" } } }; /*! Element Plus v2.3.4 */ var en = { name: "en", el: { colorpicker: { confirm: "OK", clear: "Clear", defaultLabel: "color picker", description: "current color is {color}. press enter to select a new color." }, datepicker: { now: "Now", today: "Today", cancel: "Cancel", clear: "Clear", confirm: "OK", dateTablePrompt: "Use the arrow keys and enter to select the day of the month", monthTablePrompt: "Use the arrow keys and enter to select the month", yearTablePrompt: "Use the arrow keys and enter to select the year", selectedDate: "Selected date", selectDate: "Select date", selectTime: "Select time", startDate: "Start Date", startTime: "Start Time", endDate: "End Date", endTime: "End Time", prevYear: "Previous Year", nextYear: "Next Year", prevMonth: "Previous Month", nextMonth: "Next Month", year: "", month1: "January", month2: "February", month3: "March", month4: "April", month5: "May", month6: "June", month7: "July", month8: "August", month9: "September", month10: "October", month11: "November", month12: "December", week: "week", weeks: { sun: "Sun", mon: "Mon", tue: "Tue", wed: "Wed", thu: "Thu", fri: "Fri", sat: "Sat" }, weeksFull: { sun: "Sunday", mon: "Monday", tue: "Tuesday", wed: "Wednesday", thu: "Thursday", fri: "Friday", sat: "Saturday" }, months: { jan: "Jan", feb: "Feb", mar: "Mar", apr: "Apr", may: "May", jun: "Jun", jul: "Jul", aug: "Aug", sep: "Sep", oct: "Oct", nov: "Nov", dec: "Dec" } }, inputNumber: { decrease: "decrease number", increase: "increase number" }, select: { loading: "Loading", noMatch: "No matching data", noData: "No data", placeholder: "Select" }, dropdown: { toggleDropdown: "Toggle Dropdown" }, cascader: { noMatch: "No matching data", loading: "Loading", placeholder: "Select", noData: "No data" }, pagination: { goto: "Go to", pagesize: "/page", total: "Total {total}", pageClassifier: "", page: "Page", prev: "Go to previous page", next: "Go to next page", currentPage: "page {pager}", prevPages: "Previous {pager} pages", nextPages: "Next {pager} pages", deprecationWarning: "Deprecated usages detected, please refer to the el-pagination documentation for more details" }, dialog: { close: "Close this dialog" }, drawer: { close: "Close this dialog" }, messagebox: { title: "Message", confirm: "OK", cancel: "Cancel", error: "Illegal input", close: "Close this dialog" }, upload: { deleteTip: "press delete to remove", delete: "Delete", preview: "Preview", continue: "Continue" }, slider: { defaultLabel: "slider between {min} and {max}", defaultRangeStartLabel: "pick start value", defaultRangeEndLabel: "pick end value" }, table: { emptyText: "No Data", confirmFilter: "Confirm", resetFilter: "Reset", clearFilter: "All", sumText: "Sum" }, tree: { emptyText: "No Data" }, transfer: { noMatch: "No matching data", noData: "No data", titles: ["List 1", "List 2"], filterPlaceholder: "Enter keyword", noCheckedFormat: "{total} items", hasCheckedFormat: "{checked}/{total} checked" }, image: { error: "FAILED" }, pageHeader: { title: "Back" }, popconfirm: { confirmButtonText: "Yes", cancelButtonText: "No" } } }; var _style_0$2 = `@charset "UTF-8";:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","\\5fae\\8f6f\\96c5\\9ed1",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .32, 1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px}:root{color-scheme:light;--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0, 0, 0, .04),0px 8px 20px rgba(0, 0, 0, .08);--el-box-shadow-light:0px 0px 12px rgba(0, 0, 0, .12);--el-box-shadow-lighter:0px 0px 6px rgba(0, 0, 0, .12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0, 0, 0, .08),0px 12px 32px rgba(0, 0, 0, .12),0px 8px 16px -8px rgba(0, 0, 0, .16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0, 0, 0, .8);--el-overlay-color-light:rgba(0, 0, 0, .7);--el-overlay-color-lighter:rgba(0, 0, 0, .5);--el-mask-color:rgba(255, 255, 255, .9);--el-mask-color-extra-light:rgba(255, 255, 255, .3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center top}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center bottom}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transition:var(--el-transition-md-fade);transform-origin:top left}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;height:1em;width:1em;line-height:1em;display:inline-flex;justify-content:center;align-items:center;position:relative;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}.el-affix--fixed{position:fixed}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:13px;--el-alert-description-font-size:12px;--el-alert-close-font-size:12px;--el-alert-close-customed-font-size:13px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;width:100%;padding:var(--el-alert-padding);margin:0;box-sizing:border-box;border-radius:var(--el-alert-border-radius-base);position:relative;background-color:var(--el-color-white);overflow:hidden;opacity:1;display:flex;align-items:center;transition:opacity var(--el-transition-duration-fast)}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-success)}.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-info)}.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-warning)}.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-error)}.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:table-cell;padding:0 8px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:18px;vertical-align:text-top}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:5px 0 0}.el-alert .el-alert__close-btn{font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert .el-alert__close-btn.is-customed{font-style:normal;font-size:var(--el-alert-close-customed-font-size);top:9px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{overflow:auto;box-sizing:border-box;flex-shrink:0;width:var(--el-aside-width,300px)}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-autocomplete__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-autocomplete__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);list-style:none;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li:hover,.el-autocomplete-suggestion li.highlighted{background-color:var(--el-fill-color-light)}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid var(--el-color-black)}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:var(--el-text-color-secondary)}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size-small:24px;--el-avatar-size:40px;display:inline-flex;justify-content:center;align-items:center;box-sizing:border-box;text-align:center;overflow:hidden;color:var(--el-avatar-text-color);background:var(--el-avatar-bg-color);width:var(--el-avatar-size);height:var(--el-avatar-size);font-size:var(--el-avatar-text-size)}.el-avatar>img{display:block;height:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.el-backtop{--el-backtop-bg-color:var(--el-bg-color-overlay);--el-backtop-text-color:var(--el-color-primary);--el-backtop-hover-bg-color:var(--el-border-color-extra-light);position:fixed;background-color:var(--el-backtop-bg-color);width:40px;height:40px;border-radius:50%;color:var(--el-backtop-text-color);display:flex;align-items:center;justify-content:center;font-size:20px;box-shadow:var(--el-box-shadow-lighter);cursor:pointer;z-index:5}.el-backtop:hover{background-color:var(--el-backtop-hover-bg-color)}.el-backtop__icon{font-size:20px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;position:relative;vertical-align:middle;display:inline-block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;justify-content:center;align-items:center;font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color)}.el-badge__content.is-fixed{position:absolute;top:0;right:calc(1px + var(--el-badge-size)/ 2);transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:var(--el-text-color-placeholder)}.el-breadcrumb__separator.el-icon{margin:0 6px;font-weight:400}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{float:left;display:inline-flex;align-items:center}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;transition:var(--el-transition-color);color:var(--el-text-color-primary)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:var(--el-text-color-regular);cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:rgba(255, 255, 255, .5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-color-info);--el-button-active-color:var(--el-text-color-primary)}.el-button{display:inline-flex;justify-content:center;align-items:center;line-height:1;height:32px;white-space:nowrap;cursor:pointer;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;outline:0;transition:.1s;font-weight:var(--el-button-font-weight);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);padding:8px 15px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button:focus,.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:0}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:0}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px}.el-button>span{display:inline-flex;align-items:center}.el-button+.el-button{margin-left:12px}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:var(--el-mask-color-extra-light)}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{border-radius:50%;padding:8px}.el-button.is-text{color:var(--el-button-text-color);border:0 solid transparent;background-color:transparent}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important}.el-button.is-text:not(.is-disabled):focus,.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:focus,.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{border-color:transparent;color:var(--el-button-text-color);background:0 0;padding:2px;height:auto}.el-button.is-link:focus,.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button.is-link:not(.is-disabled):focus,.el-button.is-link:not(.is-disabled):hover{border-color:transparent;background-color:transparent}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);border-color:transparent;background-color:transparent}.el-button--text{border-color:transparent;background:0 0;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button--text:not(.is-disabled):focus,.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);border-color:transparent;background-color:transparent}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);border-color:transparent;background-color:transparent}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-link,.el-button--primary.is-plain,.el-button--primary.is-text{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:active,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:hover{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-link,.el-button--success.is-plain,.el-button--success.is-text{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:active,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:active,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:hover{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-link,.el-button--warning.is-plain,.el-button--warning.is-text{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:active,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:hover{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-link,.el-button--danger.is-plain,.el-button--danger.is-text{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:active,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:hover{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-link,.el-button--info.is-plain,.el-button--info.is-text{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:active,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:active,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:hover{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--large{--el-button-size:40px;height:var(--el-button-size);padding:12px 19px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.el-button--small{--el-button-size:24px;height:var(--el-button-size);padding:5px 11px;font-size:12px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.el-calendar{--el-calendar-border:var(--el-table-border, 1px solid var(--el-border-color-lighter));--el-calendar-header-border-bottom:var(--el-calendar-border);--el-calendar-selected-bg-color:var(--el-color-primary-light-9);--el-calendar-cell-width:85px;background-color:var(--el-fill-color-blank)}.el-calendar__header{display:flex;justify-content:space-between;padding:12px 20px;border-bottom:var(--el-calendar-header-border-bottom)}.el-calendar__title{color:var(--el-text-color);align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:var(--el-text-color-regular);font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);vertical-align:top;transition:background-color var(--el-transition-duration-fast) ease}.el-calendar-table td.is-selected{background-color:var(--el-calendar-selected-bg-color)}.el-calendar-table td.is-today{color:var(--el-color-primary)}.el-calendar-table tr:first-child td{border-top:var(--el-calendar-border)}.el-calendar-table tr td:first-child{border-left:var(--el-calendar-border)}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;padding:8px;height:var(--el-calendar-cell-width)}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:var(--el-calendar-selected-bg-color)}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank)}.el-card{border-radius:var(--el-card-border-radius);border:1px solid var(--el-card-border-color);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration)}.el-card.is-always-shadow{box-shadow:var(--el-box-shadow-light)}.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding);border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box}.el-card__body{padding:var(--el-card-padding)}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%;transition:transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:calc(var(--el-index-normal) + 1)}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:var(--el-color-white);opacity:.24;transition:var(--el-transition-duration-fast)}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:rgba(31, 45, 61, .11);--el-carousel-arrow-hover-background:rgba(31, 45, 61, .23);--el-carousel-indicator-width:30px;--el-carousel-indicator-height:2px;--el-carousel-indicator-padding-horizontal:4px;--el-carousel-indicator-padding-vertical:12px;--el-carousel-indicator-out-color:var(--el-border-color-hover);position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:var(--el-carousel-arrow-size);width:var(--el-carousel-arrow-size);cursor:pointer;transition:var(--el-transition-duration);border-radius:50%;background-color:var(--el-carousel-arrow-background);color:#fff;position:absolute;top:50%;z-index:10;transform:translateY(-50%);text-align:center;font-size:var(--el-carousel-arrow-font-size);display:inline-flex;justify-content:center;align-items:center}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:var(--el-carousel-arrow-hover-background)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:calc(var(--el-index-normal) + 1)}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translate(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:calc(var(--el-carousel-indicator-height) + var(--el-carousel-indicator-padding-vertical) * 2);text-align:center;position:static;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:var(--el-carousel-indicator-out-color);opacity:.24}.el-carousel__indicators--labels{left:0;right:0;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px;color:#000}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal)}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{width:var(--el-carousel-indicator-height);height:calc(var(--el-carousel-indicator-width)/ 2)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:var(--el-carousel-indicator-width);height:var(--el-carousel-indicator-height);background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;transition:var(--el-transition-duration)}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{transform:translateY(-50%) translate(-10px);opacity:0}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{transform:translateY(-50%) translate(10px);opacity:0}.el-cascader-panel{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color)}.el-cascader-panel{display:flex;border-radius:var(--el-cascader-menu-radius);font-size:var(--el-cascader-menu-font-size)}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{min-width:180px;box-sizing:border-box;color:var(--el-cascader-menu-text-color);border-right:var(--el-cascader-menu-border)}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap.el-scrollbar__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;align-items:center;color:var(--el-cascader-color-empty)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{position:relative;display:flex;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:var(--el-cascader-menu-text-color)}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:var(--el-cascader-node-background-hover)}.el-cascader-node.is-disabled{color:var(--el-cascader-node-color-disabled);cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{flex:1;text-align:left;padding:0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-checkbox{margin-right:0}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);display:inline-block;vertical-align:middle;position:relative;font-size:var(--el-font-size-base);line-height:32px;outline:0}.el-cascader:not(.is-disabled):hover .el-input__wrapper{cursor:pointer;box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-cascader .el-input{display:flex;cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis;cursor:pointer}.el-cascader .el-input .el-input__suffix-inner .el-icon{height:calc(100% - 2px)}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{transition:transform var(--el-transition-duration);font-size:14px}.el-cascader .el-input .icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .icon-circle-close:hover{color:var(--el-input-clear-hover-color,var(--el-text-color-secondary))}.el-cascader .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-cascader--large{font-size:14px;line-height:40px}.el-cascader--small{font-size:12px;line-height:24px}.el-cascader.is-disabled .el-cascader__label{z-index:calc(var(--el-index-normal) + 1);color:var(--el-disabled-text-color)}.el-cascader__dropdown{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color)}.el-cascader__dropdown{font-size:var(--el-cascader-menu-font-size);border-radius:var(--el-cascader-menu-radius)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill);border:var(--el-cascader-menu-border);box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__dropdown.el-popper .el-popper__arrow:before{border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;transform:translateY(-50%);display:flex;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:inline-flex;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:var(--el-cascader-tag-background)}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{flex:none;background-color:var(--el-text-color-placeholder);color:var(--el-color-white)}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__collapse-tags{white-space:normal;z-index:var(--el-index-normal)}.el-cascader__collapse-tags .el-tag{display:inline-flex;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:var(--el-fill-color)}.el-cascader__collapse-tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__collapse-tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag .el-icon-close{flex:none;background-color:var(--el-text-color-placeholder);color:var(--el-color-white)}.el-cascader__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:var(--el-font-size-base);color:var(--el-cascader-menu-text-color);text-align:center}.el-cascader__suggestion-item{display:flex;justify-content:space-between;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:var(--el-cascader-color-empty)}.el-cascader__search-input{flex:1;height:24px;min-width:60px;margin:2px 0 2px 11px;padding:0;color:var(--el-cascader-menu-text-color);border:none;outline:0;box-sizing:border-box;background:0 0}.el-cascader__search-input::-moz-placeholder{color:transparent}.el-cascader__search-input:-ms-input-placeholder{color:transparent}.el-cascader__search-input::placeholder{color:transparent}.el-check-tag{background-color:var(--el-color-info-light-9);border-radius:var(--el-border-radius-base);color:var(--el-color-info);cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);line-height:var(--el-font-size-base);padding:7px 15px;transition:var(--el-transition-all);font-weight:700}.el-check-tag:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.is-checked{background-color:var(--el-color-primary-light-8);color:var(--el-color-primary)}.el-check-tag.is-checked:hover{background-color:var(--el-color-primary-light-7)}.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary)}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:var(--el-checkbox-font-weight);white-space:nowrap;vertical-align:middle;cursor:pointer;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left:0;color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;position:relative;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:8px 15px;font-size:var(--el-font-size-base);border-radius:0}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:var(--el-checkbox-button-checked-text-color);background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:var(--el-border);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{padding:12px 19px;font-size:var(--el-font-size-base);border-radius:0}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{padding:5px 11px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}.el-checkbox-group{font-size:0;line-height:0}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary)}.el-checkbox{color:var(--el-checkbox-text-color);font-weight:var(--el-checkbox-font-weight);font-size:var(--el-font-size-base);position:relative;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px;height:32px}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{padding:0 15px 0 9px;border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{padding:0 19px 0 11px;border-radius:var(--el-border-radius-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:0 11px 0 7px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--el-checkbox-border-radius)}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-flex;position:relative}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:var(--el-checkbox-disabled-icon-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:var(--el-checkbox-checked-icon-color);height:2px;transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;width:var(--el-checkbox-input-width);height:var(--el-checkbox-input-height);background-color:var(--el-checkbox-bg-color);z-index:var(--el-index-normal);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{box-sizing:content-box;content:"";border:1px solid var(--el-checkbox-checked-icon-color);border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:3px;transition:transform .15s ease-in 50ms;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:8px;line-height:1;font-size:var(--el-checkbox-font-size)}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{width:14px;height:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{width:12px;height:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{display:block;min-height:1px}.el-col-0,.el-col-0.is-guttered{display:none}.el-col-0{max-width:0%;flex:0 0 0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{position:relative;left:0}.el-col-1{max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-offset-1{margin-left:4.1666666667%}.el-col-pull-1{position:relative;right:4.1666666667%}.el-col-push-1{position:relative;left:4.1666666667%}.el-col-2{max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-offset-2{margin-left:8.3333333333%}.el-col-pull-2{position:relative;right:8.3333333333%}.el-col-push-2{position:relative;left:8.3333333333%}.el-col-3{max-width:12.5%;flex:0 0 12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-offset-4{margin-left:16.6666666667%}.el-col-pull-4{position:relative;right:16.6666666667%}.el-col-push-4{position:relative;left:16.6666666667%}.el-col-5{max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-offset-5{margin-left:20.8333333333%}.el-col-pull-5{position:relative;right:20.8333333333%}.el-col-push-5{position:relative;left:20.8333333333%}.el-col-6{max-width:25%;flex:0 0 25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-offset-7{margin-left:29.1666666667%}.el-col-pull-7{position:relative;right:29.1666666667%}.el-col-push-7{position:relative;left:29.1666666667%}.el-col-8{max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-offset-8{margin-left:33.3333333333%}.el-col-pull-8{position:relative;right:33.3333333333%}.el-col-push-8{position:relative;left:33.3333333333%}.el-col-9{max-width:37.5%;flex:0 0 37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-offset-10{margin-left:41.6666666667%}.el-col-pull-10{position:relative;right:41.6666666667%}.el-col-push-10{position:relative;left:41.6666666667%}.el-col-11{max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-offset-11{margin-left:45.8333333333%}.el-col-pull-11{position:relative;right:45.8333333333%}.el-col-push-11{position:relative;left:45.8333333333%}.el-col-12{max-width:50%;flex:0 0 50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-offset-13{margin-left:54.1666666667%}.el-col-pull-13{position:relative;right:54.1666666667%}.el-col-push-13{position:relative;left:54.1666666667%}.el-col-14{max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-offset-14{margin-left:58.3333333333%}.el-col-pull-14{position:relative;right:58.3333333333%}.el-col-push-14{position:relative;left:58.3333333333%}.el-col-15{max-width:62.5%;flex:0 0 62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-offset-16{margin-left:66.6666666667%}.el-col-pull-16{position:relative;right:66.6666666667%}.el-col-push-16{position:relative;left:66.6666666667%}.el-col-17{max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-offset-17{margin-left:70.8333333333%}.el-col-pull-17{position:relative;right:70.8333333333%}.el-col-push-17{position:relative;left:70.8333333333%}.el-col-18{max-width:75%;flex:0 0 75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-offset-19{margin-left:79.1666666667%}.el-col-pull-19{position:relative;right:79.1666666667%}.el-col-push-19{position:relative;left:79.1666666667%}.el-col-20{max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-offset-20{margin-left:83.3333333333%}.el-col-pull-20{position:relative;right:83.3333333333%}.el-col-push-20{position:relative;left:83.3333333333%}.el-col-21{max-width:87.5%;flex:0 0 87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-offset-22{margin-left:91.6666666667%}.el-col-pull-22{position:relative;right:91.6666666667%}.el-col-push-22{position:relative;left:91.6666666667%}.el-col-23{max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-offset-23{margin-left:95.8333333333%}.el-col-pull-23{position:relative;right:95.8333333333%}.el-col-push-23{position:relative;left:95.8333333333%}.el-col-24{max-width:100%;flex:0 0 100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:768px){.el-col-xs-0,.el-col-xs-0.is-guttered{display:none}.el-col-xs-0{max-width:0%;flex:0 0 0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-xs-offset-1{margin-left:4.1666666667%}.el-col-xs-pull-1{position:relative;right:4.1666666667%}.el-col-xs-push-1{position:relative;left:4.1666666667%}.el-col-xs-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-xs-offset-2{margin-left:8.3333333333%}.el-col-xs-pull-2{position:relative;right:8.3333333333%}.el-col-xs-push-2{position:relative;left:8.3333333333%}.el-col-xs-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-xs-offset-4{margin-left:16.6666666667%}.el-col-xs-pull-4{position:relative;right:16.6666666667%}.el-col-xs-push-4{position:relative;left:16.6666666667%}.el-col-xs-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-xs-offset-5{margin-left:20.8333333333%}.el-col-xs-pull-5{position:relative;right:20.8333333333%}.el-col-xs-push-5{position:relative;left:20.8333333333%}.el-col-xs-6{display:block;max-width:25%;flex:0 0 25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-xs-offset-7{margin-left:29.1666666667%}.el-col-xs-pull-7{position:relative;right:29.1666666667%}.el-col-xs-push-7{position:relative;left:29.1666666667%}.el-col-xs-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-xs-offset-8{margin-left:33.3333333333%}.el-col-xs-pull-8{position:relative;right:33.3333333333%}.el-col-xs-push-8{position:relative;left:33.3333333333%}.el-col-xs-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-xs-offset-10{margin-left:41.6666666667%}.el-col-xs-pull-10{position:relative;right:41.6666666667%}.el-col-xs-push-10{position:relative;left:41.6666666667%}.el-col-xs-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-xs-offset-11{margin-left:45.8333333333%}.el-col-xs-pull-11{position:relative;right:45.8333333333%}.el-col-xs-push-11{position:relative;left:45.8333333333%}.el-col-xs-12{display:block;max-width:50%;flex:0 0 50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-xs-offset-13{margin-left:54.1666666667%}.el-col-xs-pull-13{position:relative;right:54.1666666667%}.el-col-xs-push-13{position:relative;left:54.1666666667%}.el-col-xs-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-xs-offset-14{margin-left:58.3333333333%}.el-col-xs-pull-14{position:relative;right:58.3333333333%}.el-col-xs-push-14{position:relative;left:58.3333333333%}.el-col-xs-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-xs-offset-16{margin-left:66.6666666667%}.el-col-xs-pull-16{position:relative;right:66.6666666667%}.el-col-xs-push-16{position:relative;left:66.6666666667%}.el-col-xs-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-xs-offset-17{margin-left:70.8333333333%}.el-col-xs-pull-17{position:relative;right:70.8333333333%}.el-col-xs-push-17{position:relative;left:70.8333333333%}.el-col-xs-18{display:block;max-width:75%;flex:0 0 75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-xs-offset-19{margin-left:79.1666666667%}.el-col-xs-pull-19{position:relative;right:79.1666666667%}.el-col-xs-push-19{position:relative;left:79.1666666667%}.el-col-xs-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-xs-offset-20{margin-left:83.3333333333%}.el-col-xs-pull-20{position:relative;right:83.3333333333%}.el-col-xs-push-20{position:relative;left:83.3333333333%}.el-col-xs-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-xs-offset-22{margin-left:91.6666666667%}.el-col-xs-pull-22{position:relative;right:91.6666666667%}.el-col-xs-push-22{position:relative;left:91.6666666667%}.el-col-xs-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-xs-offset-23{margin-left:95.8333333333%}.el-col-xs-pull-23{position:relative;right:95.8333333333%}.el-col-xs-push-23{position:relative;left:95.8333333333%}.el-col-xs-24{display:block;max-width:100%;flex:0 0 100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0,.el-col-sm-0.is-guttered{display:none}.el-col-sm-0{max-width:0%;flex:0 0 0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-sm-offset-1{margin-left:4.1666666667%}.el-col-sm-pull-1{position:relative;right:4.1666666667%}.el-col-sm-push-1{position:relative;left:4.1666666667%}.el-col-sm-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-sm-offset-2{margin-left:8.3333333333%}.el-col-sm-pull-2{position:relative;right:8.3333333333%}.el-col-sm-push-2{position:relative;left:8.3333333333%}.el-col-sm-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-sm-offset-4{margin-left:16.6666666667%}.el-col-sm-pull-4{position:relative;right:16.6666666667%}.el-col-sm-push-4{position:relative;left:16.6666666667%}.el-col-sm-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-sm-offset-5{margin-left:20.8333333333%}.el-col-sm-pull-5{position:relative;right:20.8333333333%}.el-col-sm-push-5{position:relative;left:20.8333333333%}.el-col-sm-6{display:block;max-width:25%;flex:0 0 25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-sm-offset-7{margin-left:29.1666666667%}.el-col-sm-pull-7{position:relative;right:29.1666666667%}.el-col-sm-push-7{position:relative;left:29.1666666667%}.el-col-sm-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-sm-offset-8{margin-left:33.3333333333%}.el-col-sm-pull-8{position:relative;right:33.3333333333%}.el-col-sm-push-8{position:relative;left:33.3333333333%}.el-col-sm-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-sm-offset-10{margin-left:41.6666666667%}.el-col-sm-pull-10{position:relative;right:41.6666666667%}.el-col-sm-push-10{position:relative;left:41.6666666667%}.el-col-sm-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-sm-offset-11{margin-left:45.8333333333%}.el-col-sm-pull-11{position:relative;right:45.8333333333%}.el-col-sm-push-11{position:relative;left:45.8333333333%}.el-col-sm-12{display:block;max-width:50%;flex:0 0 50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-sm-offset-13{margin-left:54.1666666667%}.el-col-sm-pull-13{position:relative;right:54.1666666667%}.el-col-sm-push-13{position:relative;left:54.1666666667%}.el-col-sm-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-sm-offset-14{margin-left:58.3333333333%}.el-col-sm-pull-14{position:relative;right:58.3333333333%}.el-col-sm-push-14{position:relative;left:58.3333333333%}.el-col-sm-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-sm-offset-16{margin-left:66.6666666667%}.el-col-sm-pull-16{position:relative;right:66.6666666667%}.el-col-sm-push-16{position:relative;left:66.6666666667%}.el-col-sm-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-sm-offset-17{margin-left:70.8333333333%}.el-col-sm-pull-17{position:relative;right:70.8333333333%}.el-col-sm-push-17{position:relative;left:70.8333333333%}.el-col-sm-18{display:block;max-width:75%;flex:0 0 75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-sm-offset-19{margin-left:79.1666666667%}.el-col-sm-pull-19{position:relative;right:79.1666666667%}.el-col-sm-push-19{position:relative;left:79.1666666667%}.el-col-sm-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-sm-offset-20{margin-left:83.3333333333%}.el-col-sm-pull-20{position:relative;right:83.3333333333%}.el-col-sm-push-20{position:relative;left:83.3333333333%}.el-col-sm-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-sm-offset-22{margin-left:91.6666666667%}.el-col-sm-pull-22{position:relative;right:91.6666666667%}.el-col-sm-push-22{position:relative;left:91.6666666667%}.el-col-sm-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-sm-offset-23{margin-left:95.8333333333%}.el-col-sm-pull-23{position:relative;right:95.8333333333%}.el-col-sm-push-23{position:relative;left:95.8333333333%}.el-col-sm-24{display:block;max-width:100%;flex:0 0 100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0,.el-col-md-0.is-guttered{display:none}.el-col-md-0{max-width:0%;flex:0 0 0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-md-offset-1{margin-left:4.1666666667%}.el-col-md-pull-1{position:relative;right:4.1666666667%}.el-col-md-push-1{position:relative;left:4.1666666667%}.el-col-md-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-md-offset-2{margin-left:8.3333333333%}.el-col-md-pull-2{position:relative;right:8.3333333333%}.el-col-md-push-2{position:relative;left:8.3333333333%}.el-col-md-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-md-offset-4{margin-left:16.6666666667%}.el-col-md-pull-4{position:relative;right:16.6666666667%}.el-col-md-push-4{position:relative;left:16.6666666667%}.el-col-md-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-md-offset-5{margin-left:20.8333333333%}.el-col-md-pull-5{position:relative;right:20.8333333333%}.el-col-md-push-5{position:relative;left:20.8333333333%}.el-col-md-6{display:block;max-width:25%;flex:0 0 25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-md-offset-7{margin-left:29.1666666667%}.el-col-md-pull-7{position:relative;right:29.1666666667%}.el-col-md-push-7{position:relative;left:29.1666666667%}.el-col-md-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-md-offset-8{margin-left:33.3333333333%}.el-col-md-pull-8{position:relative;right:33.3333333333%}.el-col-md-push-8{position:relative;left:33.3333333333%}.el-col-md-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-md-offset-10{margin-left:41.6666666667%}.el-col-md-pull-10{position:relative;right:41.6666666667%}.el-col-md-push-10{position:relative;left:41.6666666667%}.el-col-md-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-md-offset-11{margin-left:45.8333333333%}.el-col-md-pull-11{position:relative;right:45.8333333333%}.el-col-md-push-11{position:relative;left:45.8333333333%}.el-col-md-12{display:block;max-width:50%;flex:0 0 50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-md-offset-13{margin-left:54.1666666667%}.el-col-md-pull-13{position:relative;right:54.1666666667%}.el-col-md-push-13{position:relative;left:54.1666666667%}.el-col-md-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-md-offset-14{margin-left:58.3333333333%}.el-col-md-pull-14{position:relative;right:58.3333333333%}.el-col-md-push-14{position:relative;left:58.3333333333%}.el-col-md-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-md-offset-16{margin-left:66.6666666667%}.el-col-md-pull-16{position:relative;right:66.6666666667%}.el-col-md-push-16{position:relative;left:66.6666666667%}.el-col-md-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-md-offset-17{margin-left:70.8333333333%}.el-col-md-pull-17{position:relative;right:70.8333333333%}.el-col-md-push-17{position:relative;left:70.8333333333%}.el-col-md-18{display:block;max-width:75%;flex:0 0 75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-md-offset-19{margin-left:79.1666666667%}.el-col-md-pull-19{position:relative;right:79.1666666667%}.el-col-md-push-19{position:relative;left:79.1666666667%}.el-col-md-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-md-offset-20{margin-left:83.3333333333%}.el-col-md-pull-20{position:relative;right:83.3333333333%}.el-col-md-push-20{position:relative;left:83.3333333333%}.el-col-md-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-md-offset-22{margin-left:91.6666666667%}.el-col-md-pull-22{position:relative;right:91.6666666667%}.el-col-md-push-22{position:relative;left:91.6666666667%}.el-col-md-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-md-offset-23{margin-left:95.8333333333%}.el-col-md-pull-23{position:relative;right:95.8333333333%}.el-col-md-push-23{position:relative;left:95.8333333333%}.el-col-md-24{display:block;max-width:100%;flex:0 0 100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0,.el-col-lg-0.is-guttered{display:none}.el-col-lg-0{max-width:0%;flex:0 0 0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-lg-offset-1{margin-left:4.1666666667%}.el-col-lg-pull-1{position:relative;right:4.1666666667%}.el-col-lg-push-1{position:relative;left:4.1666666667%}.el-col-lg-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-lg-offset-2{margin-left:8.3333333333%}.el-col-lg-pull-2{position:relative;right:8.3333333333%}.el-col-lg-push-2{position:relative;left:8.3333333333%}.el-col-lg-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-lg-offset-4{margin-left:16.6666666667%}.el-col-lg-pull-4{position:relative;right:16.6666666667%}.el-col-lg-push-4{position:relative;left:16.6666666667%}.el-col-lg-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-lg-offset-5{margin-left:20.8333333333%}.el-col-lg-pull-5{position:relative;right:20.8333333333%}.el-col-lg-push-5{position:relative;left:20.8333333333%}.el-col-lg-6{display:block;max-width:25%;flex:0 0 25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-lg-offset-7{margin-left:29.1666666667%}.el-col-lg-pull-7{position:relative;right:29.1666666667%}.el-col-lg-push-7{position:relative;left:29.1666666667%}.el-col-lg-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-lg-offset-8{margin-left:33.3333333333%}.el-col-lg-pull-8{position:relative;right:33.3333333333%}.el-col-lg-push-8{position:relative;left:33.3333333333%}.el-col-lg-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-lg-offset-10{margin-left:41.6666666667%}.el-col-lg-pull-10{position:relative;right:41.6666666667%}.el-col-lg-push-10{position:relative;left:41.6666666667%}.el-col-lg-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-lg-offset-11{margin-left:45.8333333333%}.el-col-lg-pull-11{position:relative;right:45.8333333333%}.el-col-lg-push-11{position:relative;left:45.8333333333%}.el-col-lg-12{display:block;max-width:50%;flex:0 0 50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-lg-offset-13{margin-left:54.1666666667%}.el-col-lg-pull-13{position:relative;right:54.1666666667%}.el-col-lg-push-13{position:relative;left:54.1666666667%}.el-col-lg-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-lg-offset-14{margin-left:58.3333333333%}.el-col-lg-pull-14{position:relative;right:58.3333333333%}.el-col-lg-push-14{position:relative;left:58.3333333333%}.el-col-lg-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-lg-offset-16{margin-left:66.6666666667%}.el-col-lg-pull-16{position:relative;right:66.6666666667%}.el-col-lg-push-16{position:relative;left:66.6666666667%}.el-col-lg-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-lg-offset-17{margin-left:70.8333333333%}.el-col-lg-pull-17{position:relative;right:70.8333333333%}.el-col-lg-push-17{position:relative;left:70.8333333333%}.el-col-lg-18{display:block;max-width:75%;flex:0 0 75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-lg-offset-19{margin-left:79.1666666667%}.el-col-lg-pull-19{position:relative;right:79.1666666667%}.el-col-lg-push-19{position:relative;left:79.1666666667%}.el-col-lg-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-lg-offset-20{margin-left:83.3333333333%}.el-col-lg-pull-20{position:relative;right:83.3333333333%}.el-col-lg-push-20{position:relative;left:83.3333333333%}.el-col-lg-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-lg-offset-22{margin-left:91.6666666667%}.el-col-lg-pull-22{position:relative;right:91.6666666667%}.el-col-lg-push-22{position:relative;left:91.6666666667%}.el-col-lg-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-lg-offset-23{margin-left:95.8333333333%}.el-col-lg-pull-23{position:relative;right:95.8333333333%}.el-col-lg-push-23{position:relative;left:95.8333333333%}.el-col-lg-24{display:block;max-width:100%;flex:0 0 100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0,.el-col-xl-0.is-guttered{display:none}.el-col-xl-0{max-width:0%;flex:0 0 0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-xl-offset-1{margin-left:4.1666666667%}.el-col-xl-pull-1{position:relative;right:4.1666666667%}.el-col-xl-push-1{position:relative;left:4.1666666667%}.el-col-xl-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-xl-offset-2{margin-left:8.3333333333%}.el-col-xl-pull-2{position:relative;right:8.3333333333%}.el-col-xl-push-2{position:relative;left:8.3333333333%}.el-col-xl-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-xl-offset-4{margin-left:16.6666666667%}.el-col-xl-pull-4{position:relative;right:16.6666666667%}.el-col-xl-push-4{position:relative;left:16.6666666667%}.el-col-xl-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-xl-offset-5{margin-left:20.8333333333%}.el-col-xl-pull-5{position:relative;right:20.8333333333%}.el-col-xl-push-5{position:relative;left:20.8333333333%}.el-col-xl-6{display:block;max-width:25%;flex:0 0 25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-xl-offset-7{margin-left:29.1666666667%}.el-col-xl-pull-7{position:relative;right:29.1666666667%}.el-col-xl-push-7{position:relative;left:29.1666666667%}.el-col-xl-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-xl-offset-8{margin-left:33.3333333333%}.el-col-xl-pull-8{position:relative;right:33.3333333333%}.el-col-xl-push-8{position:relative;left:33.3333333333%}.el-col-xl-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-xl-offset-10{margin-left:41.6666666667%}.el-col-xl-pull-10{position:relative;right:41.6666666667%}.el-col-xl-push-10{position:relative;left:41.6666666667%}.el-col-xl-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-xl-offset-11{margin-left:45.8333333333%}.el-col-xl-pull-11{position:relative;right:45.8333333333%}.el-col-xl-push-11{position:relative;left:45.8333333333%}.el-col-xl-12{display:block;max-width:50%;flex:0 0 50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-xl-offset-13{margin-left:54.1666666667%}.el-col-xl-pull-13{position:relative;right:54.1666666667%}.el-col-xl-push-13{position:relative;left:54.1666666667%}.el-col-xl-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-xl-offset-14{margin-left:58.3333333333%}.el-col-xl-pull-14{position:relative;right:58.3333333333%}.el-col-xl-push-14{position:relative;left:58.3333333333%}.el-col-xl-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-xl-offset-16{margin-left:66.6666666667%}.el-col-xl-pull-16{position:relative;right:66.6666666667%}.el-col-xl-push-16{position:relative;left:66.6666666667%}.el-col-xl-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-xl-offset-17{margin-left:70.8333333333%}.el-col-xl-pull-17{position:relative;right:70.8333333333%}.el-col-xl-push-17{position:relative;left:70.8333333333%}.el-col-xl-18{display:block;max-width:75%;flex:0 0 75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-xl-offset-19{margin-left:79.1666666667%}.el-col-xl-pull-19{position:relative;right:79.1666666667%}.el-col-xl-push-19{position:relative;left:79.1666666667%}.el-col-xl-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-xl-offset-20{margin-left:83.3333333333%}.el-col-xl-pull-20{position:relative;right:83.3333333333%}.el-col-xl-push-20{position:relative;left:83.3333333333%}.el-col-xl-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-xl-offset-22{margin-left:91.6666666667%}.el-col-xl-pull-22{position:relative;right:91.6666666667%}.el-col-xl-push-22{position:relative;left:91.6666666667%}.el-col-xl-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-xl-offset-23{margin-left:95.8333333333%}.el-col-xl-pull-23{position:relative;right:95.8333333333%}.el-col-xl-push-23{position:relative;left:95.8333333333%}.el-col-xl-24{display:block;max-width:100%;flex:0 0 100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-top:1px solid var(--el-collapse-border-color);border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{display:flex;align-items:center;height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);background-color:var(--el-collapse-header-bg-color);color:var(--el-collapse-header-text-color);cursor:pointer;border-bottom:1px solid var(--el-collapse-border-color);font-size:var(--el-collapse-header-font-size);font-weight:500;transition:border-bottom-color var(--el-transition-duration);outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:transform var(--el-transition-duration);font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:var(--el-collapse-content-bg-color);overflow:hidden;box-sizing:border-box;border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-item__content{padding-bottom:25px;font-size:var(--el-collapse-content-font-size);color:var(--el-collapse-content-text-color);line-height:1.7692307692}.el-collapse-item:last-child{margin-bottom:-1px}.el-color-predefine{display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:flex;flex:1;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector>div{display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px;float:right}.el-color-hue-slider__bar{position:relative;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid var(--el-border-color-lighter);box-shadow:0 0 2px #0009;z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;border-radius:50%;transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-size:12px 12px;background-position:0 0,6px 0,6px -6px,0 6px}.el-color-alpha-slider__bar{position:relative;background:linear-gradient(to right,rgba(255,255,255,0) 0,var(--el-bg-color) 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid var(--el-border-color-lighter);box-shadow:0 0 2px #0009;z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:12px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-picker{display:inline-block;position:relative;line-height:normal;outline:0}.el-color-picker:hover:not(.is-disabled) .el-color-picker__trigger{border:1px solid var(--el-border-color-hover)}.el-color-picker:focus-visible:not(.is-disabled) .el-color-picker__trigger{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--large{height:40px}.el-color-picker--large .el-color-picker__trigger{height:40px;width:40px}.el-color-picker--large .el-color-picker__mask{height:38px;width:38px}.el-color-picker--small{height:24px}.el-color-picker--small .el-color-picker__trigger{height:24px;width:24px}.el-color-picker--small .el-color-picker__mask{height:22px;width:22px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:scale(.8)}.el-color-picker__mask{height:30px;width:30px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:#ffffffb3}.el-color-picker__trigger{display:inline-flex;justify-content:center;align-items:center;box-sizing:border-box;height:32px;width:32px;padding:4px;border:1px solid var(--el-border-color);border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;box-sizing:border-box;border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-size:12px 12px;background-position:0 0,6px 0,6px -6px,0 6px}.el-color-picker__color-inner{display:inline-flex;justify-content:center;align-items:center;width:100%;height:100%}.el-color-picker .el-color-picker__empty{font-size:12px;color:var(--el-text-color-secondary)}.el-color-picker .el-color-picker__icon{display:inline-flex;justify-content:center;align-items:center;color:#fff;font-size:12px}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;box-sizing:content-box;background-color:#fff;border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light)}.el-color-picker__panel.el-popper{border:1px solid var(--el-border-color-lighter)}.el-color-picker,.el-color-picker__panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker,.dark .el-color-picker__panel{--el-color-picker-alpha-bg-a:#333333}.el-container{display:flex;flex-direction:row;flex:1;flex-basis:auto;box-sizing:border-box;min-width:0}.el-container.is-vertical{flex-direction:column}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:var(--el-datepicker-text-color)}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child .el-date-table-cell{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child .el-date-table-cell{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table.is-week-mode .el-date-table__row.current .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td{width:32px;height:30px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td .el-date-table-cell{height:30px;padding:3px 0;box-sizing:border-box}.el-date-table td .el-date-table-cell .el-date-table-cell__text{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;transform:translate(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:var(--el-datepicker-off-text-color)}.el-date-table td.today{position:relative}.el-date-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-date-table td.today.end-date .el-date-table-cell__text,.el-date-table td.today.start-date .el-date-table-cell__text{color:#fff}.el-date-table td.available:hover{color:var(--el-datepicker-hover-text-color)}.el-date-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-date-table td.current:not(.disabled):focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-date-table td.end-date .el-date-table-cell,.el-date-table td.start-date .el-date-table-cell{color:#fff}.el-date-table td.end-date .el-date-table-cell__text,.el-date-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date .el-date-table-cell{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);opacity:1;cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-date-table td.selected .el-date-table-cell{margin-left:5px;margin-right:5px;background-color:var(--el-datepicker-inrange-bg-color);border-radius:15px}.el-date-table td.selected .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.selected .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:var(--el-datepicker-header-text-color)}.el-date-table td:focus{outline:0}.el-date-table th{padding:5px;color:var(--el-datepicker-header-text-color);font-weight:400;border-bottom:solid 1px var(--el-border-color-lighter)}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;box-sizing:border-box}.el-month-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-month-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:var(--el-datepicker-text-color);margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-month-table td.in-range div{background-color:var(--el-datepicker-inrange-bg-color)}.el-month-table td.in-range div:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:var(--el-datepicker-active-color)}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:var(--el-datepicker-active-color)}.el-month-table td:focus-visible{outline:0}.el-month-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color)}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-year-table td.disabled .cell{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-year-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-year-table td .cell{width:48px;height:36px;display:block;line-height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto}.el-year-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-year-table td.current:not(.disabled) .cell{color:var(--el-datepicker-active-color)}.el-year-table td:focus-visible{outline:0}.el-year-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color)}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:192px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper.el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:default}.el-time-spinner__arrow{font-size:12px;color:var(--el-text-color-secondary);position:absolute;left:0;width:100%;z-index:var(--el-index-normal);text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:var(--el-color-primary)}.el-time-spinner__arrow.arrow-up{top:10px}.el-time-spinner__arrow.arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center}.el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:var(--el-text-color-regular)}.el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:pointer}.el-time-spinner__item.is-active:not(.is-disabled){color:var(--el-text-color-primary);font-weight:700}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light)}.el-picker__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-datepicker-border-color)}.el-picker__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-date-editor{--el-date-editor-width:220px;--el-date-editor-monthrange-width:300px;--el-date-editor-daterange-width:350px;--el-date-editor-datetimerange-width:400px;--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);position:relative;display:inline-block;text-align:left}.el-date-editor.el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-date-editor.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{width:var(--el-date-editor-width);height:var(--el-input-height,var(--el-component-size))}.el-date-editor--monthrange{--el-date-editor-width:var(--el-date-editor-monthrange-width)}.el-date-editor--daterange,.el-date-editor--timerange{--el-date-editor-width:var(--el-date-editor-daterange-width)}.el-date-editor--datetimerange{--el-date-editor-width:var(--el-date-editor-datetimerange-width)}.el-date-editor--dates .el-input__wrapper{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .close-icon,.el-date-editor .clear-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__icon{height:inherit;font-size:14px;color:var(--el-text-color-placeholder);float:left}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:30px;line-height:30px;margin:0;padding:0;width:39%;text-align:center;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);background-color:transparent}.el-date-editor .el-range-input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{flex:1;display:inline-flex;justify-content:center;align-items:center;height:100%;padding:0 5px;margin:0;font-size:14px;word-break:keep-all;color:var(--el-text-color-primary)}.el-date-editor .el-range__close-icon{font-size:14px;color:var(--el-text-color-placeholder);height:inherit;width:unset;cursor:pointer}.el-date-editor .el-range__close-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__close-icon svg{vertical-align:middle}.el-date-editor .el-range__close-icon--hidden{opacity:0;visibility:hidden}.el-range-editor.el-input__wrapper{display:inline-flex;align-items:center;padding:0 10px}.el-range-editor.is-active,.el-range-editor.is-active:hover{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-range-editor--large{line-height:var(--el-component-size-large)}.el-range-editor--large.el-input__wrapper{height:var(--el-component-size-large)}.el-range-editor--large .el-range-separator{line-height:40px;font-size:14px}.el-range-editor--large .el-range-input{height:38px;line-height:38px;font-size:14px}.el-range-editor--small{line-height:var(--el-component-size-small)}.el-range-editor--small.el-input__wrapper{height:var(--el-component-size-small)}.el-range-editor--small .el-range-separator{line-height:24px;font-size:12px}.el-range-editor--small .el-range-input{height:22px;line-height:22px;font-size:12px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:var(--el-disabled-border-color)}.el-range-editor.is-disabled input{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{color:var(--el-text-color-regular);background:var(--el-bg-color-overlay);border-radius:var(--el-border-radius-base);line-height:30px}.el-picker-panel .el-time-panel{margin:5px 0;border:solid 1px var(--el-datepicker-border-color);background-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid var(--el-datepicker-inner-border-color);padding:4px 12px;text-align:right;background-color:var(--el-bg-color-overlay);position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:var(--el-datepicker-text-color);padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:var(--el-datepicker-active-color)}.el-picker-panel__btn{border:1px solid var(--el-fill-color-darker);color:var(--el-text-color-primary);line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:var(--el-datepicker-icon-color);border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn:focus-visible{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn.is-disabled{color:var(--el-text-color-disabled)}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;padding-top:6px;background-color:var(--el-bg-color-overlay);overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary)}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid var(--el-datepicker-inner-border-color);font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px var(--el-border-color-lighter)}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:var(--el-text-color-regular)}.el-date-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label:focus-visible{outline:0;color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.el-date-picker .el-time-panel{position:absolute}.el-date-range-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary)}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid var(--el-datepicker-inner-border-color)}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid var(--el-datepicker-inner-border-color);font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:var(--el-datepicker-icon-color)}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px;z-index:1}.el-time-range-picker__cell{box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid var(--el-datepicker-border-color)}.el-time-panel{border-radius:2px;position:relative;width:180px;left:0;z-index:var(--el-index-top);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-16px;height:32px;z-index:-1;left:0;right:0;box-sizing:border-box;padding-top:6px;text-align:left}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%;border-top:1px solid var(--el-border-color-light);border-bottom:1px solid var(--el-border-color-light)}.el-time-panel__content.has-seconds:after{left:66.6666666667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333333333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));padding:4px;height:36px;line-height:25px;text-align:right;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:var(--el-text-color-primary)}.el-time-panel__btn.confirm{font-weight:800;color:var(--el-timepicker-active-color,var(--el-color-primary))}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;font-size:var(--el-font-size-base);color:var(--el-text-color-primary)}.el-descriptions__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;text-align:left;font-weight:400;line-height:23px;font-size:14px}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{font-weight:700;color:var(--el-text-color-regular);background:var(--el-descriptions-item-bordered-label-background)}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{-webkit-animation:v-modal-in var(--el-transition-duration-fast) ease;animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{-webkit-animation:v-modal-out var(--el-transition-duration-fast) ease forwards;animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color)}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:20px;--el-dialog-border-radius:var(--el-border-radius-small);position:relative;margin:var(--el-dialog-margin-top,15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:0!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-dialog__header{padding:var(--el-dialog-padding-primary);padding-bottom:10px;margin-right:16px}.el-dialog__headerbtn{position:absolute;top:6px;right:0;padding:0;width:54px;height:54px;background:0 0;border:none;outline:0;cursor:pointer;font-size:var(--el-message-close-size,16px)}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{padding:calc(var(--el-dialog-padding-primary) + 10px) var(--el-dialog-padding-primary);color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding:var(--el-dialog-padding-primary);padding-top:10px;text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px calc(var(--el-dialog-padding-primary) + 5px) 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto}.dialog-fade-enter-active{-webkit-animation:modal-fade-in var(--el-transition-duration);animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{-webkit-animation:dialog-fade-in var(--el-transition-duration);animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{-webkit-animation:modal-fade-out var(--el-transition-duration);animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{-webkit-animation:dialog-fade-out var(--el-transition-duration);animation:dialog-fade-out var(--el-transition-duration)}@-webkit-keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@-webkit-keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-divider{position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0;border-top:1px var(--el-border-color) var(--el-border-style)}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative;border-left:1px var(--el-border-color) var(--el-border-style)}.el-divider__text{position:absolute;background-color:var(--el-bg-color);padding:0 20px;font-weight:500;color:var(--el-text-color-primary);font-size:14px}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color, var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary, 20px)}.el-drawer{position:absolute;box-sizing:border-box;background-color:var(--el-drawer-bg-color);display:flex;flex-direction:column;box-shadow:var(--el-box-shadow-dark);overflow:hidden;transition:all var(--el-transition-duration)}.el-drawer .rtl,.el-drawer .ltr,.el-drawer .ttb,.el-drawer .btt{transform:translate(0)}.el-drawer__sr-focus:focus{outline:0!important}.el-drawer__header{align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{margin:0;flex:1;line-height:inherit;font-size:1rem}.el-drawer__footer{padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{display:inline-flex;border:none;cursor:pointer;font-size:var(--el-font-size-extra-large);color:inherit;background-color:transparent;outline:0}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;padding:var(--el-drawer-padding-primary);overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{opacity:0}.el-drawer-fade-enter-to,.el-drawer-fade-leave-from{opacity:1}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;display:inline-flex;position:relative;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);line-height:1;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:0}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{list-style:none;padding:0;margin:0;box-sizing:border-box}.el-dropdown .el-dropdown__caret-button{padding-left:0;padding-right:0;display:inline-flex;justify-content:center;align-items:center;width:32px;border-left:none}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:-1px;bottom:-1px;left:0;background:var(--el-overlay-color-lighter)}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:0}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{position:relative;top:0;left:0;z-index:var(--el-dropdown-menu-index);padding:5px 0;margin:0;background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;list-style:none}.el-dropdown-menu__item{display:flex;align-items:center;white-space:nowrap;list-style:none;line-height:22px;padding:5px 16px;margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);cursor:pointer;outline:0}.el-dropdown-menu__item:not(.is-disabled):focus{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{margin:6px 0;border-top:1px solid var(--el-border-color-lighter)}.el-dropdown-menu__item.is-disabled{cursor:not-allowed;color:var(--el-text-color-disabled)}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{padding:7px 20px;line-height:22px;font-size:14px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{padding:2px 12px;line-height:20px;font-size:12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.el-empty{--el-empty-padding:40px 0;--el-empty-image-width:160px;--el-empty-description-margin-top:20px;--el-empty-bottom-margin-top:20px;--el-empty-fill-color-0:var(--el-color-white);--el-empty-fill-color-1:#fcfcfd;--el-empty-fill-color-2:#f8f9fb;--el-empty-fill-color-3:#f7f8fc;--el-empty-fill-color-4:#eeeff3;--el-empty-fill-color-5:#edeef2;--el-empty-fill-color-6:#e9ebef;--el-empty-fill-color-7:#e5e7e9;--el-empty-fill-color-8:#e0e3e9;--el-empty-fill-color-9:#d5d7de;display:flex;justify-content:center;align-items:center;flex-direction:column;text-align:center;box-sizing:border-box;padding:var(--el-empty-padding)}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:100%;height:100%;vertical-align:top}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-secondary)}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;padding:var(--el-footer-padding);box-sizing:border-box;flex-shrink:0;height:var(--el-footer-height)}.el-form{--el-form-label-font-size:var(--el-font-size-base)}.el-form--label-left .el-form-item__label{justify-content:flex-start}.el-form--label-top .el-form-item{display:block}.el-form--label-top .el-form-item .el-form-item__label{display:block;height:auto;text-align:left;margin-bottom:8px;line-height:22px}.el-form--inline .el-form-item{display:inline-flex;vertical-align:middle;margin-right:32px}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form--large.el-form--label-top .el-form-item .el-form-item__label{margin-bottom:12px;line-height:22px}.el-form--default.el-form--label-top .el-form-item .el-form-item__label{margin-bottom:8px;line-height:22px}.el-form--small.el-form--label-top .el-form-item .el-form-item__label{margin-bottom:4px;line-height:20px}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item__label-wrap{display:flex}.el-form-item__label{display:inline-flex;justify-content:flex-end;align-items:flex-start;flex:0 0 auto;font-size:var(--el-form-label-font-size);color:var(--el-text-color-regular);height:32px;line-height:32px;padding:0 12px 0 0;box-sizing:border-box}.el-form-item__content{display:flex;flex-wrap:wrap;align-items:center;flex:1;line-height:32px;position:relative;font-size:var(--font-size);min-width:0}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;line-height:1;padding-top:2px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{content:"*";color:var(--el-color-danger);margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{content:"*";color:var(--el-color-danger);margin-left:4px}.el-form-item.is-error .el-select-v2__wrapper,.el-form-item.is-error .el-select-v2__wrapper:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-input-group__prepend .el-input__wrapper{box-shadow:0 0 0 1px transparent inset}.el-form-item.is-error .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-header{--el-header-padding:0 20px;--el-header-height:60px;padding:var(--el-header-padding);box-sizing:border-box;flex-shrink:0;height:var(--el-header-height)}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:flex;align-items:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__btn .el-icon{font-size:inherit;cursor:pointer}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{position:static;width:100%;height:100%;display:flex;justify-content:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__actions{left:50%;bottom:30px;transform:translate(-50%);width:282px;height:44px;padding:0 23px;background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:flex;align-items:center;justify-content:space-around}.el-image-viewer__prev{top:50%;transform:translateY(-50%);left:40px;width:44px;height:44px;font-size:24px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff}.el-image-viewer__next{top:50%;transform:translateY(-50%);right:40px;text-indent:2px;width:44px;height:44px;font-size:24px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff}.el-image-viewer__close{width:44px;height:44px;font-size:24px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in var(--el-transition-duration);animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out var(--el-transition-duration);animation:viewer-fade-out var(--el-transition-duration)}@-webkit-keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top;opacity:1}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{position:absolute;top:0;left:0}.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{display:flex;justify-content:center;align-items:center;font-size:14px;background:var(--el-fill-color-light);color:var(--el-text-color-placeholder);vertical-align:middle}.el-image__preview{cursor:pointer}.el-input-number{position:relative;display:inline-flex;width:150px;line-height:30px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.el-input-number__decrease,.el-input-number__increase{display:flex;justify-content:center;align-items:center;height:auto;position:absolute;z-index:1;top:1px;bottom:1px;width:32px;background:var(--el-fill-color-light);color:var(--el-text-color-regular);cursor:pointer;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input_wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input_wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border)}.el-input-number__decrease{left:1px;border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border)}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{width:40px;font-size:14px}.el-input-number--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{width:120px;line-height:22px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:24px;font-size:12px}.el-input-number--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{bottom:auto;left:auto;border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border)}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;top:auto;left:auto;border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:var(--el-font-size-base)}.el-textarea__inner{position:relative;display:block;resize:vertical;padding:5px 11px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;font-family:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);border:none}.el-textarea__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{outline:0;box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);position:absolute;font-size:12px;line-height:14px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary)}.el-input{--el-input-height:var(--el-component-size);position:relative;font-size:var(--el-font-size-base);display:inline-flex;width:100%;line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:var(--el-text-color-disabled)}.el-input::-webkit-scrollbar-corner{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);font-size:14px;cursor:pointer}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{height:100%;display:inline-flex;align-items:center;color:var(--el-color-info);font-size:12px}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;display:inline-block;padding-left:8px}.el-input__wrapper{display:inline-flex;flex-grow:1;align-items:center;justify-content:center;padding:1px 11px;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);transform:translateZ(0);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 32px) - 2px);width:100%;flex-grow:1;-webkit-appearance:none;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);padding:0;outline:0;border:none;background:0 0;box-sizing:border-box}.el-input__inner:focus{outline:0}.el-input__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__prefix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__prefix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__suffix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;display:flex;justify-content:center;align-items:center;transition:all var(--el-transition-duration);margin-left:8px}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color,) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 24px) - 2px)}.el-input-group{display:inline-flex;width:100%;align-items:stretch}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:100%;border-radius:var(--el-input-border-radius);padding:0 20px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-input__wrapper,.el-input-group__append div.el-select:hover .el-input__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-input__wrapper,.el-input-group__prepend div.el-select:hover .el-input__wrapper{border-color:transparent;background-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-input .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select .el-input .el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__wrapper{box-shadow:1px 0 0 0 var(--el-input-focus-border-color) inset,1px 0 0 0 var(--el-input-focus-border-color),0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important;z-index:2}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__wrapper:focus{outline:0;z-index:2;box-shadow:1px 0 0 0 var(--el-input-focus-border-color) inset,1px 0 0 0 var(--el-input-focus-border-color),0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important}.el-input-group--prepend .el-input-group__prepend .el-select:hover .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select:hover .el-input__wrapper{z-index:1;box-shadow:1px 0 0 0 var(--el-input-hover-border-color) inset,1px 0 0 0 var(--el-input-hover-border-color),0 1px 0 0 var(--el-input-hover-border-color) inset,0 -1px 0 0 var(--el-input-hover-border-color) inset!important}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-input .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select .el-input .el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--append .el-input-group__append .el-select .el-input.is-focus .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select .el-input.is-focus .el-input__wrapper{z-index:2;box-shadow:-1px 0 0 0 var(--el-input-focus-border-color),-1px 0 0 0 var(--el-input-focus-border-color) inset,0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important}.el-input-group--append .el-input-group__append .el-select:hover .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select:hover .el-input__wrapper{z-index:1;box-shadow:-1px 0 0 0 var(--el-input-hover-border-color),-1px 0 0 0 var(--el-input-hover-border-color) inset,0 1px 0 0 var(--el-input-hover-border-color) inset,0 -1px 0 0 var(--el-input-hover-border-color) inset!important}.el-link{--el-link-font-size:var(--el-font-size-base);--el-link-font-weight:var(--el-font-weight-primary);--el-link-text-color:var(--el-text-color-regular);--el-link-hover-text-color:var(--el-color-primary);--el-link-disabled-text-color:var(--el-text-color-placeholder)}.el-link{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;cursor:pointer;padding:0;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);color:var(--el-link-text-color)}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid var(--el-link-hover-text-color)}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default:after{border-color:var(--el-link-hover-text-color)}.el-link__inner{display:inline-flex;justify-content:center;align-items:center}.el-link.el-link--primary{--el-link-text-color:var(--el-color-primary);--el-link-hover-text-color:var(--el-color-primary-light-3);--el-link-disabled-text-color:var(--el-color-primary-light-5)}.el-link.el-link--primary:after{border-color:var(--el-link-text-color)}.el-link.el-link--primary.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--success{--el-link-text-color:var(--el-color-success);--el-link-hover-text-color:var(--el-color-success-light-3);--el-link-disabled-text-color:var(--el-color-success-light-5)}.el-link.el-link--success:after{border-color:var(--el-link-text-color)}.el-link.el-link--success.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning{--el-link-text-color:var(--el-color-warning);--el-link-hover-text-color:var(--el-color-warning-light-3);--el-link-disabled-text-color:var(--el-color-warning-light-5)}.el-link.el-link--warning:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger{--el-link-text-color:var(--el-color-danger);--el-link-hover-text-color:var(--el-color-danger-light-3);--el-link-disabled-text-color:var(--el-color-danger-light-5)}.el-link.el-link--danger:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--error{--el-link-text-color:var(--el-color-error);--el-link-hover-text-color:var(--el-color-error-light-3);--el-link-disabled-text-color:var(--el-color-error-light-5)}.el-link.el-link--error:after{border-color:var(--el-link-text-color)}.el-link.el-link--error.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--info{--el-link-text-color:var(--el-color-info);--el-link-hover-text-color:var(--el-color-info-light-3);--el-link-disabled-text-color:var(--el-color-info-light-5)}.el-link.el-link--info:after{border-color:var(--el-link-text-color)}.el-link.el-link--info.is-underline:hover:after{border-color:var(--el-link-text-color)}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:var(--el-mask-color);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity var(--el-transition-duration)}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/ 2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{top:50%;margin-top:calc((0px - var(--el-loading-spinner-size))/ 2);width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@-webkit-keyframes loading-rotate{to{transform:rotate(360deg)}}@keyframes loading-rotate{to{transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-main{--el-main-padding:20px;display:block;flex:1;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:var(--el-main-padding)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{border-right:solid 1px var(--el-menu-border-color);list-style:none;position:relative;margin:0;padding-left:0;background-color:var(--el-menu-bg-color);box-sizing:border-box}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title{white-space:nowrap;padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level) * var(--el-menu-level-padding))}.el-menu--horizontal{display:flex;flex-wrap:nowrap;border-bottom:solid 1px var(--el-menu-border-color);border-right:none}.el-menu--horizontal>.el-menu-item{display:inline-flex;justify-content:center;align-items:center;height:100%;margin:0;border-bottom:2px solid transparent;color:var(--el-menu-text-color)}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover{background-color:#fff}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:0}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{height:100%;border-bottom:2px solid transparent;color:var(--el-menu-text-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-bg-color-overlay)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{background-color:var(--el-menu-bg-color);display:flex;align-items:center;height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);padding:0 10px;color:var(--el-menu-text-color)}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:var(--el-menu-hover-text-color);background-color:var(--el-menu-hover-bg-color)}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding) * 2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{margin:0;vertical-align:middle;width:var(--el-menu-icon-width);text-align:center}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:var(--el-border-radius-small);box-shadow:var(--el-box-shadow-light)}.el-menu .el-icon{flex-shrink:0}.el-menu-item{display:flex;align-items:center;height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);list-style:none;cursor:pointer;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:focus,.el-menu-item:hover{outline:0}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon]{margin-right:5px;width:var(--el-menu-icon-width);text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{position:absolute;left:0;top:0;height:100%;width:100%;display:inline-flex;align-items:center;box-sizing:border-box;padding:0 var(--el-menu-base-level-padding)}.el-sub-menu{list-style:none;margin:0;padding-left:0}.el-sub-menu__title{display:flex;align-items:center;height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);list-style:none;cursor:pointer;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:focus,.el-sub-menu__title:hover{outline:0}.el-sub-menu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-menu-item,.el-sub-menu.is-disabled .el-sub-menu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu .el-icon{vertical-align:middle;margin-right:5px;width:var(--el-menu-icon-width);text-align:center;font-size:18px}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{position:absolute;top:50%;right:var(--el-menu-base-level-padding);margin-top:-6px;transition:transform var(--el-transition-duration);font-size:12px;margin-right:0;width:inherit}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px var(--el-menu-base-level-padding);line-height:normal;font-size:12px;color:var(--el-text-color-secondary)}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{transition:var(--el-transition-duration-fast);opacity:0}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:15px}.el-message-box{display:inline-block;max-width:var(--el-messagebox-width);width:100%;padding-bottom:10px;vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);border:1px solid var(--el-border-color-lighter);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-box-shadow-light);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box}.el-message-box:focus{outline:0!important}.el-overlay.is-message-box .el-overlay-message-box{text-align:center;position:fixed;top:0;right:0;bottom:0;left:0;padding:16px;overflow:auto}.el-overlay.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-message-box__header{position:relative;padding:var(--el-messagebox-padding-primary);padding-bottom:10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:var(--el-messagebox-font-size);line-height:1;color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{position:absolute;top:var(--el-messagebox-padding-primary);right:var(--el-messagebox-padding-primary);padding:0;border:none;outline:0;background:0 0;font-size:var(--el-message-close-size,16px);cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{padding:10px var(--el-messagebox-padding-primary);color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input div.invalid>input{border-color:var(--el-color-error)}.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{position:absolute;top:50%;transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status.el-icon{position:absolute}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px;word-break:break-word}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{flex-direction:row-reverse}.el-message-box--center .el-message-box__title{position:relative;display:flex;align-items:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns{justify-content:center}.el-message-box--center .el-message-box__content{padding-left:calc(var(--el-messagebox-padding-primary) + 12px);padding-right:calc(var(--el-messagebox-padding-primary) + 12px);text-align:center}.fade-in-linear-enter-active .el-overlay-message-box{-webkit-animation:msgbox-fade-in var(--el-transition-duration);animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@-webkit-keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:15px 19px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary)}.el-message{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;max-width:calc(100% - 32px);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);position:fixed;left:50%;top:20px;transform:translate(-50%);background-color:var(--el-message-bg-color);transition:opacity var(--el-transition-duration),transform .4s,top .4s;padding:var(--el-message-padding);display:flex;align-items:center}.el-message.is-center{justify-content:center}.el-message.is-closable .el-message__content{padding-right:31px}.el-message p{margin:0}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message__icon{margin-right:10px}.el-message .el-message__badge{position:absolute;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{position:absolute;top:50%;right:19px;transform:translateY(-50%);cursor:pointer;color:var(--el-message-close-icon-color);font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}.el-notification{--el-notification-width:330px;--el-notification-padding:14px 26px 14px 13px;--el-notification-radius:8px;--el-notification-shadow:var(--el-box-shadow-light);--el-notification-border-color:var(--el-border-color-lighter);--el-notification-icon-size:24px;--el-notification-close-font-size:var(--el-message-close-size, 16px);--el-notification-group-margin-left:13px;--el-notification-group-margin-right:8px;--el-notification-content-font-size:var(--el-font-size-base);--el-notification-content-color:var(--el-text-color-regular);--el-notification-title-font-size:16px;--el-notification-title-color:var(--el-text-color-primary);--el-notification-close-color:var(--el-text-color-secondary);--el-notification-close-hover-color:var(--el-text-color-regular)}.el-notification{display:flex;width:var(--el-notification-width);padding:var(--el-notification-padding);border-radius:var(--el-notification-radius);box-sizing:border-box;border:1px solid var(--el-notification-border-color);position:fixed;background-color:var(--el-bg-color-overlay);box-shadow:var(--el-notification-shadow);transition:opacity var(--el-transition-duration),transform var(--el-transition-duration),left var(--el-transition-duration),right var(--el-transition-duration),top .4s,bottom var(--el-transition-duration);overflow-wrap:anywhere;overflow:hidden;z-index:9999}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right)}.el-notification__title{font-weight:700;font-size:var(--el-notification-title-font-size);line-height:var(--el-notification-icon-size);color:var(--el-notification-title-color);margin:0}.el-notification__content{font-size:var(--el-notification-content-font-size);line-height:24px;margin:6px 0 0;color:var(--el-notification-content-color);text-align:justify}.el-notification__content p{margin:0}.el-notification .el-notification__icon{height:var(--el-notification-icon-size);width:var(--el-notification-icon-size);font-size:var(--el-notification-icon-size)}.el-notification .el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:var(--el-notification-close-color);font-size:var(--el-notification-close-font-size)}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--success{--el-notification-icon-color:var(--el-color-success);color:var(--el-notification-icon-color)}.el-notification .el-notification--info{--el-notification-icon-color:var(--el-color-info);color:var(--el-notification-icon-color)}.el-notification .el-notification--warning{--el-notification-icon-color:var(--el-color-warning);color:var(--el-notification-icon-color)}.el-notification .el-notification--error{--el-notification-icon-color:var(--el-color-error);color:var(--el-notification-icon-color)}.el-notification-fade-enter-from.right{right:0;transform:translate(100%)}.el-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.el-notification-fade-leave-to{opacity:0}.el-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;height:100%;background-color:var(--el-overlay-color-lighter);overflow:auto}.el-overlay .el-overlay-root{height:0}.el-page-header.is-contentful .el-page-header__main{border-top:1px solid var(--el-border-color-light);margin-top:16px}.el-page-header__header{display:flex;align-items:center;justify-content:space-between;line-height:24px}.el-page-header__left{display:flex;align-items:center;margin-right:40px;position:relative}.el-page-header__back{display:flex;align-items:center;cursor:pointer}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{font-size:16px;margin-right:10px;display:flex;align-items:center}.el-page-header__icon .el-icon{font-size:inherit}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:var(--el-text-color-primary)}.el-page-header__breadcrumb{margin-bottom:16px}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-item-gap:16px;white-space:nowrap;color:var(--el-pagination-text-color);font-size:var(--el-pagination-font-size);font-weight:400;display:flex;align-items:center}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield}.el-pagination .el-select .el-input{width:128px}.el-pagination button{display:flex;justify-content:center;align-items:center;font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);padding:0 4px;border:none;border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box}.el-pagination button *{pointer-events:none}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:var(--el-pagination-hover-color)}.el-pagination button.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination button.is-active.is-disabled{font-weight:700;color:var(--el-text-color-secondary)}.el-pagination button.is-disabled,.el-pagination button:disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pagination button:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{margin-left:var(--el-pagination-item-gap);font-weight:400;color:var(--el-text-color-regular)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{display:flex;align-items:center;margin-left:var(--el-pagination-item-gap);font-weight:400;color:var(--el-text-color-regular)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{text-align:center;box-sizing:border-box}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{flex:1;display:flex;align-items:center;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 4px;background-color:var(--el-pagination-button-bg-color)}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{color:var(--el-text-color-placeholder);background-color:var(--el-disabled-bg-color)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{color:var(--el-text-color-secondary);background-color:var(--el-fill-color-dark)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);font-size:var(--el-pagination-font-size-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select .el-input{width:100px}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0;padding:0;margin:0;display:flex;align-items:center}.el-pager li{display:flex;justify-content:center;align-items:center;font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);padding:0 4px;border:none;border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:0}.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{font-weight:700;color:var(--el-text-color-secondary)}.el-pager li.is-disabled,.el-pager li:disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-popconfirm__main{display:flex;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin-top:8px}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);min-width:150px;border-radius:var(--el-popover-border-radius);border:1px solid var(--el-popover-border-color);padding:var(--el-popover-padding);z-index:var(--el-index-popper);color:var(--el-text-color-regular);line-height:1.4;text-align:justify;font-size:var(--el-popover-font-size);box-shadow:var(--el-box-shadow-light);word-break:break-all;box-sizing:border-box}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.el-progress{position:relative;line-height:1;display:flex;align-items:center}.el-progress__text{font-size:14px;color:var(--el-text-color-regular);margin-left:5px;min-width:50px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{flex-grow:1;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:var(--el-border-color-lighter);overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:var(--el-color-primary);text-align:right;border-radius:100px;line-height:1;white-space:nowrap;transition:width .6s ease}.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{transform:translateZ(0);-webkit-animation:indeterminate 3s infinite;animation:indeterminate 3s infinite}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{-webkit-animation:striped-flow 3s linear infinite;animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@-webkit-keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@-webkit-keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light)}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));border-left:0;color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:8px 15px;font-size:var(--el-font-size-base);border-radius:0}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:var(--el-border);border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button__original-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__original-radio:checked+.el-radio-button__inner{color:var(--el-radio-button-checked-text-color,var(--el-color-white));background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary))}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2;border-radius:var(--el-border-radius-base);box-shadow:none}.el-radio-button__original-radio:disabled+.el-radio-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{padding:12px 19px;font-size:var(--el-font-size-base);border-radius:0}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{padding:5px 11px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{display:inline-flex;align-items:center;flex-wrap:wrap;font-size:0}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary)}.el-radio{color:var(--el-radio-text-color);font-weight:var(--el-radio-font-weight);position:relative;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;outline:0;font-size:var(--el-font-size-base);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:32px;height:32px}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{padding:0 15px 0 9px;border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:var(--el-border-color-lighter)}.el-radio.is-bordered.el-radio--large{padding:0 19px 0 11px;border-radius:var(--el-border-radius-base)}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{padding:0 11px 0 7px;border-radius:var(--el-border-radius-base)}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-flex;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:var(--el-color-primary);background:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);width:var(--el-radio-input-width);height:var(--el-radio-input-height);background-color:var(--el-radio-input-bg-color);position:relative;cursor:pointer;display:inline-block;box-sizing:border-box}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{width:4px;height:4px;border-radius:var(--el-radio-input-border-radius);background-color:var(--el-color-white);content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio__original:focus-visible+.el-radio__inner{outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px;border-radius:var(--el-radio-input-border-radius)}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{width:14px;height:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{width:12px;height:12px}.el-rate{--el-rate-height:20px;--el-rate-font-size:var(--el-font-size-base);--el-rate-icon-size:18px;--el-rate-icon-margin:6px;--el-rate-void-color:var(--el-border-color-darker);--el-rate-fill-color:#f7ba2a;--el-rate-disabled-void-color:var(--el-fill-color);--el-rate-text-color:var(--el-text-color-primary)}.el-rate{display:inline-flex;align-items:center;height:32px}.el-rate:active,.el-rate:focus{outline:0}.el-rate__item{cursor:pointer;display:inline-block;position:relative;font-size:0;vertical-align:middle;color:var(--el-rate-void-color);line-height:normal}.el-rate .el-rate__icon{position:relative;display:inline-block;font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);transition:var(--el-transition-duration)}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{position:absolute;left:0;top:0}.el-rate .el-rate__icon.is-active{color:var(--el-rate-fill-color)}.el-rate__decimal{position:absolute;top:0;left:0;display:inline-block;overflow:hidden;color:var(--el-rate-fill-color)}.el-rate__text{font-size:var(--el-rate-font-size);vertical-align:middle;color:var(--el-rate-text-color)}.el-rate--large{height:40px}.el-rate--small{height:24px}.el-rate--small .el-rate__icon{font-size:14px}.el-rate.is-disabled .el-rate__item{cursor:auto;color:var(--el-rate-disabled-void-color)}.el-result{--el-result-padding:40px 30px;--el-result-icon-font-size:64px;--el-result-title-font-size:20px;--el-result-title-margin-top:20px;--el-result-subtitle-margin-top:10px;--el-result-extra-margin-top:30px}.el-result{display:flex;justify-content:center;align-items:center;flex-direction:column;text-align:center;box-sizing:border-box;padding:var(--el-result-padding)}.el-result__icon svg{width:var(--el-result-icon-font-size);height:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{margin:0;font-size:var(--el-result-title-font-size);color:var(--el-text-color-primary);line-height:1.3}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);line-height:1.3}.el-result__extra{margin-top:var(--el-result-extra-margin-top)}.el-result .icon-primary{--el-result-color:var(--el-color-primary);color:var(--el-result-color)}.el-result .icon-success{--el-result-color:var(--el-color-success);color:var(--el-result-color)}.el-result .icon-warning{--el-result-color:var(--el-color-warning);color:var(--el-result-color)}.el-result .icon-danger{--el-result-color:var(--el-color-danger);color:var(--el-result-color)}.el-result .icon-error{--el-result-color:var(--el-color-error);color:var(--el-result-color)}.el-result .icon-info{--el-result-color:var(--el-color-info);color:var(--el-result-color)}.el-row{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary)}.el-scrollbar{overflow:hidden;position:relative;height:100%}.el-scrollbar__wrap{overflow:auto;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3)}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__option-item.is-selected:not(.is-multiple).is-disabled{color:var(--el-text-color-disabled)}.el-select-dropdown__option-item.is-selected:not(.is-multiple).is-disabled:after{background-color:var(--el-text-color-disabled)}.el-select-dropdown__option-item:hover:not(.hover){background-color:transparent}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-disabled.is-selected{color:var(--el-text-color-disabled)}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size)}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;margin:6px 0!important;padding:0!important;box-sizing:border-box}.el-select-dropdown__option-item{font-size:var(--el-select-font-size);padding:0 32px 0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--el-text-color-regular);height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__option-item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown__option-item.is-disabled:hover{background-color:var(--el-bg-color)}.el-select-dropdown__option-item.is-selected{background-color:var(--el-fill-color-light);font-weight:700}.el-select-dropdown__option-item.is-selected:not(.is-multiple){color:var(--el-color-primary)}.el-select-dropdown__option-item.hover{background-color:var(--el-fill-color-light)!important}.el-select-dropdown__option-item:hover{background-color:var(--el-fill-color-light)}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-selected{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay)}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-selected .el-icon{position:absolute;right:20px;top:0;height:inherit;font-size:12px}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-selected .el-icon svg{height:inherit;vertical-align:middle}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:var(--el-border-color-light)}.el-select-group__split-dash{position:absolute;left:20px;right:20px;height:1px;background:var(--el-border-color-light)}.el-select-group__title{padding-left:20px;font-size:12px;color:var(--el-color-info);line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-v2{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px}.el-select-v2{display:inline-block;position:relative;vertical-align:middle;font-size:14px}.el-select-v2__wrapper{display:flex;align-items:center;flex-wrap:wrap;position:relative;box-sizing:border-box;cursor:pointer;padding:1px 30px 1px 0;border:1px solid var(--el-border-color);border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);transition:var(--el-transition-duration)}.el-select-v2__wrapper:hover{border-color:var(--el-text-color-placeholder)}.el-select-v2__wrapper.is-filterable{cursor:text}.el-select-v2__wrapper.is-focused{border-color:var(--el-color-primary)}.el-select-v2__wrapper.is-hovering:not(.is-focused){border-color:var(--el-border-color-hover)}.el-select-v2__wrapper.is-disabled{cursor:not-allowed;background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);border-color:var(--el-select-disabled-border)}.el-select-v2__wrapper.is-disabled:hover{border-color:var(--el-select-disabled-border)}.el-select-v2__wrapper.is-disabled.is-focus{border-color:var(--el-input-focus-border-color)}.el-select-v2__wrapper.is-disabled .is-transparent{opacity:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-select-v2__wrapper.is-disabled .el-select-v2__caret,.el-select-v2__wrapper.is-disabled .el-select-v2__combobox-input{cursor:not-allowed}.el-select-v2__wrapper .el-select-v2__input-wrapper{box-sizing:border-box;position:relative;-webkit-margin-start:12px;margin-inline-start:12px;max-width:100%;overflow:hidden}.el-select-v2__wrapper,.el-select-v2__wrapper .el-select-v2__input-wrapper{line-height:32px}.el-select-v2__wrapper .el-select-v2__input-wrapper input{--el-input-inner-height:calc(var(--el-component-size, 32px) - 8px);height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);min-width:4px;width:100%;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:none;margin:2px 0;outline:0;padding:0}.el-select-v2 .el-select-v2__tags-text{display:inline-block;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select-v2__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:14px}.el-select-v2__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select-v2__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select-v2__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-select-v2__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select-v2__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-select-v2__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select-v2--large .el-select-v2__wrapper .el-select-v2__combobox-input{height:32px}.el-select-v2--large .el-select-v2__caret,.el-select-v2--large .el-select-v2__suffix{height:40px}.el-select-v2--large .el-select-v2__placeholder{font-size:14px;line-height:40px}.el-select-v2--small .el-select-v2__wrapper .el-select-v2__combobox-input{height:16px}.el-select-v2--small .el-select-v2__caret,.el-select-v2--small .el-select-v2__suffix{height:24px}.el-select-v2--small .el-select-v2__placeholder{font-size:12px;line-height:24px}.el-select-v2 .el-select-v2__selection>span{display:inline-block}.el-select-v2:hover .el-select-v2__combobox-input{border-color:var(--el-select-border-color-hover)}.el-select-v2 .el-select__selection-text{text-overflow:ellipsis;display:inline-block;overflow-x:hidden;vertical-align:bottom}.el-select-v2 .el-select-v2__combobox-input{padding-right:35px;display:block;color:var(--el-text-color-regular)}.el-select-v2 .el-select-v2__combobox-input:focus{border-color:var(--el-select-input-focus-border-color)}.el-select-v2__input{border:none;outline:0;padding:0;margin-left:15px;color:var(--el-select-multiple-input-color);font-size:var(--el-select-font-size);-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px}.el-select-v2__input.is-small{height:14px}.el-select-v2__close{cursor:pointer;position:absolute;top:8px;z-index:var(--el-index-top);right:25px;color:var(--el-select-input-color);line-height:18px;font-size:var(--el-select-input-font-size)}.el-select-v2__close:hover{color:var(--el-select-close-hover-color)}.el-select-v2__suffix{display:inline-flex;position:absolute;right:12px;height:32px;top:50%;transform:translateY(-50%);color:var(--el-input-icon-color,var(--el-text-color-placeholder))}.el-select-v2__suffix .el-input__icon{height:inherit}.el-select-v2__suffix .el-input__icon:not(:first-child){margin-left:8px}.el-select-v2__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:var(--el-transition-duration);transform:rotate(180deg);cursor:pointer}.el-select-v2__caret.is-reverse{transform:rotate(0)}.el-select-v2__caret.is-show-close{font-size:var(--el-select-font-size);text-align:center;transform:rotate(180deg);border-radius:var(--el-border-radius-circle);color:var(--el-select-input-color);transition:var(--el-transition-color)}.el-select-v2__caret.is-show-close:hover{color:var(--el-select-close-hover-color)}.el-select-v2__caret.el-icon{height:inherit}.el-select-v2__caret.el-icon svg{vertical-align:middle}.el-select-v2__selection{white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;width:100%}.el-select-v2__input-calculator{left:0;position:absolute;top:0;visibility:hidden;white-space:pre;z-index:999}.el-select-v2__selected-item{line-height:inherit;height:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-wrap:wrap}.el-select-v2__placeholder{position:absolute;top:50%;transform:translateY(-50%);-webkit-margin-start:12px;margin-inline-start:12px;width:calc(100% - 52px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--el-input-text-color,var(--el-text-color-regular))}.el-select-v2__placeholder.is-transparent{color:var(--el-text-color-placeholder)}.el-select-v2 .el-select-v2__selection .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:var(--el-fill-color)}.el-select-v2 .el-select-v2__selection .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;color:var(--el-color-white)}.el-select-v2 .el-select-v2__selection .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select-v2 .el-select-v2__selection .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select-v2.el-select-v2--small .el-select-v2__selection .el-tag{margin:1px 0 1px 6px;height:18px}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:var(--el-fill-color-light)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.is-disabled:after{background-color:var(--el-text-color-disabled)}.el-select-dropdown .el-select-dropdown__option-item.is-selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown .el-select-dropdown__item.is-disabled:hover{background-color:unset}.el-select-dropdown .el-select-dropdown__item.is-disabled.selected{color:var(--el-text-color-disabled)}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size)}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px}.el-select{display:inline-block;position:relative;vertical-align:middle;line-height:32px}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select .el-select-tags-wrapper.has-prefix{margin-left:6px}.el-select--large{line-height:40px}.el-select--large .el-select-tags-wrapper.has-prefix{margin-left:8px}.el-select--small{line-height:24px}.el-select--small .el-select-tags-wrapper.has-prefix{margin-left:4px}.el-select .el-select__tags>span{display:inline-block}.el-select:hover:not(.el-select--disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-select-border-color-hover) inset}.el-select .el-select__tags-text{display:inline-block;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select .el-input__wrapper{cursor:pointer}.el-select .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-select-input-focus-border-color) inset!important}.el-select .el-input__inner{cursor:pointer}.el-select .el-input{display:flex}.el-select .el-input .el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:transform var(--el-transition-duration);transform:rotate(0);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{transform:rotate(-180deg)}.el-select .el-input .el-select__caret.is-show-close{font-size:var(--el-select-font-size);text-align:center;transform:rotate(0);border-radius:var(--el-border-radius-circle);color:var(--el-select-input-color);transition:var(--el-transition-color)}.el-select .el-input .el-select__caret.is-show-close:hover{color:var(--el-select-close-hover-color)}.el-select .el-input .el-select__caret.el-icon{position:relative;height:inherit;z-index:2}.el-select .el-input.is-disabled .el-input__wrapper{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select .el-input.is-disabled .el-input__inner,.el-select .el-input.is-disabled .el-select__caret{cursor:not-allowed}.el-select .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-select-input-focus-border-color) inset!important}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:var(--el-select-multiple-input-color);font-size:var(--el-select-font-size);-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-disabled{cursor:not-allowed}.el-select__input--iOS{position:absolute;left:0;top:0;z-index:6}.el-select__input.is-small{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:var(--el-index-top);right:25px;color:var(--el-select-input-color);line-height:18px;font-size:var(--el-select-input-font-size)}.el-select__close:hover{color:var(--el-select-close-hover-color)}.el-select__tags{position:absolute;line-height:normal;top:50%;transform:translateY(-50%);white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;cursor:pointer}.el-select__tags .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 6px 2px 0}.el-select__tags .el-tag:last-child{margin-right:0}.el-select__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;top:0;color:#fff}.el-select__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select__tags .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select__tags .el-tag--info{background-color:var(--el-fill-color)}.el-select__tags.is-disabled{cursor:not-allowed}.el-select__collapse-tags{white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;cursor:pointer}.el-select__collapse-tags .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 6px 2px 0}.el-select__collapse-tags .el-tag:last-child{margin-right:0}.el-select__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;top:0;color:#fff}.el-select__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select__collapse-tags .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select__collapse-tags .el-tag--info{background-color:var(--el-fill-color)}.el-select__collapse-tag{line-height:inherit;height:inherit;display:flex}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);display:inline-block;height:16px;border-radius:var(--el-border-radius-base);width:100%}.el-skeleton__circle{border-radius:50%;width:var(--el-skeleton-circle-size);height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size)}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:var(--el-font-size-small)}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{width:unset;display:flex;align-items:center;justify-content:center;border-radius:0}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:22%;height:22%}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:var(--el-skeleton-color)}.el-skeleton.is-animated .el-skeleton__item{background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px}.el-slider{width:100%;height:32px;display:flex;align-items:center}.el-slider__runway{flex:1;height:var(--el-slider-height);background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);position:relative;cursor:pointer}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{height:var(--el-slider-height);background-color:var(--el-slider-main-bg-color);border-top-left-radius:var(--el-slider-border-radius);border-bottom-left-radius:var(--el-slider-border-radius);position:absolute}.el-slider__button-wrapper{height:var(--el-slider-button-wrapper-size);width:var(--el-slider-button-wrapper-size);position:absolute;z-index:1;top:var(--el-slider-button-wrapper-offset);transform:translate(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;outline:0}.el-slider__button-wrapper:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{display:inline-block;width:var(--el-slider-button-size);height:var(--el-slider-button-size);vertical-align:middle;border:solid 2px var(--el-slider-main-bg-color);background-color:var(--el-color-white);border-radius:50%;box-sizing:border-box;transition:var(--el-transition-duration-fast);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:var(--el-slider-height);width:var(--el-slider-height);border-radius:var(--el-border-radius-circle);background-color:var(--el-slider-stop-bg-color);transform:translate(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;transform:translate(-50%);font-size:14px;color:var(--el-color-info);margin-top:15px;white-space:pre}.el-slider.is-vertical{position:relative;display:inline-flex;width:auto;height:100%;flex:0}.el-slider.is-vertical .el-slider__runway{width:var(--el-slider-height);height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:var(--el-slider-height);height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:var(--el-slider-button-wrapper-offset);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{display:inline-flex;vertical-align:top}.el-space__item{display:flex;flex-wrap:wrap}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{transform:rotate(360deg)}}@keyframes rotate{to{transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-step{position:relative;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-basis:auto!important;flex-shrink:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:var(--el-text-color-primary);border-color:var(--el-text-color-primary)}.el-step__head.is-wait{color:var(--el-text-color-placeholder);border-color:var(--el-text-color-placeholder)}.el-step__head.is-success{color:var(--el-color-success);border-color:var(--el-color-success)}.el-step__head.is-error{color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-step__head.is-finish{color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-step__icon{position:relative;z-index:1;display:inline-flex;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;box-sizing:border-box;background:var(--el-bg-color);transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:var(--el-text-color-placeholder)}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:.15s ease-out;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:var(--el-text-color-primary)}.el-step__title.is-wait{color:var(--el-text-color-placeholder)}.el-step__title.is-success{color:var(--el-color-success)}.el-step__title.is-error{color:var(--el-color-danger)}.el-step__title.is-finish{color:var(--el-color-primary)}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:var(--el-text-color-primary)}.el-step__description.is-wait{color:var(--el-text-color-placeholder)}.el-step__description.is-success{color:var(--el-color-success)}.el-step__description.is-error{color:var(--el-color-danger)}.el-step__description.is-finish{color:var(--el-color-primary)}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:flex;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:flex;align-items:stretch;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{flex-grow:1;display:flex;align-items:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:var(--el-text-color-placeholder)}.el-step.is-simple .el-step__arrow:before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:var(--el-fill-color-light)}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;flex-flow:column}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color)}.el-switch{display:inline-flex;align-items:center;position:relative;font-size:14px;line-height:20px;height:32px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:var(--el-transition-duration-fast);height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:var(--el-text-color-primary)}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{display:inline-flex;position:relative;align-items:center;min-width:40px;height:20px;border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));outline:0;border-radius:10px;box-sizing:border-box;background:var(--el-switch-off-color);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{width:100%;transition:all var(--el-transition-duration);height:16px;display:flex;justify-content:center;align-items:center;overflow:hidden;padding:0 4px 0 18px}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{font-size:12px;color:var(--el-color-white);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-switch__core .el-switch__action{position:absolute;left:1px;border-radius:var(--el-border-radius-circle);transition:all var(--el-transition-duration);width:16px;height:16px;background-color:var(--el-color-white);display:flex;justify-content:center;align-items:center;color:var(--el-switch-off-color)}.el-switch.is-checked .el-switch__core{border-color:var(--el-switch-border-color,var(--el-switch-on-color));background-color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__action{left:calc(100% - 17px);color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;line-height:24px;height:40px}.el-switch--large .el-switch__label{height:24px;font-size:14px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{min-width:50px;height:24px;border-radius:12px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{width:20px;height:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;line-height:16px;height:24px}.el-switch--small .el-switch__label{height:16px;font-size:12px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{min-width:30px;height:16px;border-radius:8px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{width:12px;height:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:solid 1px var(--el-border-color-lighter);border-radius:2px;background-color:#fff;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:var(--el-font-size-base)}.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:flex;align-items:center;margin-right:5px;margin-bottom:12px;margin-left:5px;height:unset}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0, 0, 0, .15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0, 0, 0, .15)}.el-table{position:relative;overflow:hidden;box-sizing:border-box;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;width:100%;max-width:100%;background-color:var(--el-table-bg-color);font-size:14px;color:var(--el-table-text-color)}.el-table__inner-wrapper{position:relative;display:flex;flex-direction:column;height:100%}.el-table__inner-wrapper:before{left:0;bottom:0;width:100%;height:1px}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{position:-webkit-sticky;position:sticky;left:0;min-height:60px;text-align:center;width:100%;display:flex;justify-content:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:var(--el-text-color-secondary)}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table__expand-icon{position:relative;cursor:pointer;color:var(--el-text-color-regular);font-size:12px;transition:transform var(--el-transition-duration-fast) ease-in-out;height:20px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table thead{color:var(--el-table-header-text-color);font-weight:500}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{padding:8px 0;min-width:0;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left;z-index:1}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding:0 12px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:14px}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table__footer-wrapper{border-top:var(--el-table-border)}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{content:"";position:absolute;background-color:var(--el-table-border-color);z-index:3}.el-table--border .el-table__inner-wrapper:after{left:0;top:0;width:100%;height:1px}.el-table--border:before{top:-1px;left:0;width:1px;height:100%}.el-table--border:after{top:-1px;right:0;width:1px;height:100%}.el-table--border .el-table__inner-wrapper{border-right:none;border-bottom:none}.el-table--border .el-table__footer-wrapper{position:relative;flex-shrink:0}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{position:-webkit-sticky!important;position:sticky!important;z-index:2;background:var(--el-bg-color)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{content:"";position:absolute;top:0;width:10px;bottom:-1px;overflow-x:hidden;overflow-y:hidden;box-shadow:none;touch-action:none;pointer-events:none}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px;box-shadow:none}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{position:-webkit-sticky!important;position:sticky!important;z-index:2;background:#fff;right:0}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{display:inline-flex;align-items:center;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{overflow:hidden;position:relative;flex:1}.el-table__body-wrapper .el-scrollbar__bar{z-index:2}.el-table .caret-wrapper{display:inline-flex;flex-direction:column;align-items:center;height:14px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:solid 5px transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:var(--el-table-border);z-index:10}.el-table__column-filter-trigger{display:inline-block;cursor:pointer}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{top:0;left:0;width:1px;height:100%;z-index:3;position:absolute;background-color:var(--el-table-border-color)}.el-table__border-bottom-patch{left:0;height:1px;z-index:3;position:absolute;background-color:var(--el-table-border-color)}.el-table__border-right-patch{top:0;height:100%;width:1px;z-index:3;position:absolute;background-color:var(--el-table-border-color)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:12px;line-height:12px;height:12px;text-align:center;margin-right:8px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-v2{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0, 0, 0, .15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0, 0, 0, .15)}.el-table-v2{font-size:14px}.el-table-v2 *{box-sizing:border-box}.el-table-v2__root{position:relative}.el-table-v2__root:hover .el-table-v2__main .el-virtual-scrollbar{opacity:1}.el-table-v2__main{display:flex;flex-direction:column-reverse;position:absolute;overflow:hidden;top:0;background-color:var(--el-bg-color);left:0}.el-table-v2__main .el-vl__horizontal,.el-table-v2__main .el-vl__vertical{z-index:2}.el-table-v2__left{display:flex;flex-direction:column-reverse;position:absolute;overflow:hidden;top:0;background-color:var(--el-bg-color);left:0;box-shadow:2px 0 4px #0000000f}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__horizontal,.el-table-v2__left .el-vl__vertical{z-index:-1}.el-table-v2__right{display:flex;flex-direction:column-reverse;position:absolute;overflow:hidden;top:0;background-color:var(--el-bg-color);right:0;box-shadow:-2px 0 4px #0000000f}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__horizontal,.el-table-v2__right .el-vl__vertical{z-index:-1}.el-table-v2__header-row,.el-table-v2__row{-webkit-padding-end:var(--el-table-scrollbar-size);padding-inline-end:var(--el-table-scrollbar-size)}.el-table-v2__header-wrapper{overflow:hidden}.el-table-v2__header{position:relative;overflow:hidden}.el-table-v2__footer{position:absolute;left:0;right:0;bottom:0;overflow:hidden}.el-table-v2__empty{position:absolute;left:0}.el-table-v2__overlay{position:absolute;left:0;right:0;top:0;bottom:0;z-index:9999}.el-table-v2__header-row{display:flex;border-bottom:var(--el-table-border)}.el-table-v2__header-cell{display:flex;align-items:center;padding:0 8px;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;background-color:var(--el-table-header-bg-color);color:var(--el-table-header-text-color);font-weight:700}.el-table-v2__header-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__header-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{transition:opacity,display var(--el-transition-duration);opacity:.6;display:none}.el-table-v2__sort-icon.is-sorting{display:block;opacity:1}.el-table-v2__row{border-bottom:var(--el-table-border);display:flex;align-items:center;transition:background-color var(--el-transition-duration)}.el-table-v2__row.is-hovered,.el-table-v2__row:hover{background-color:var(--el-table-row-hover-bg-color)}.el-table-v2__row-cell{height:100%;overflow:hidden;display:flex;align-items:center;padding:0 8px}.el-table-v2__row-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__row-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__expand-icon{margin:0 4px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table-v2__expand-icon svg{transition:transform var(--el-transition-duration)}.el-table-v2__expand-icon.is-expanded svg{transform:rotate(90deg)}.el-table-v2:not(.is-dynamic) .el-table-v2__cell-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-table-v2.is-dynamic .el-table-v2__row{overflow:hidden;align-items:stretch}.el-table-v2.is-dynamic .el-table-v2__row .el-table-v2__row-cell{word-break:break-all}.el-tabs{--el-tabs-header-height:40px}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:var(--el-color-primary);z-index:1;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);list-style:none}.el-tabs__new-tab{display:flex;align-items:center;justify-content:center;float:right;border:1px solid var(--el-border-color);height:20px;width:20px;line-height:20px;margin:10px 0 10px 10px;border-radius:3px;text-align:center;font-size:12px;color:var(--el-text-color-primary);cursor:pointer;transition:all .15s}.el-tabs__new-tab .is-icon-plus{height:inherit;width:inherit;transform:scale(.8)}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:var(--el-border-color-light);z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:var(--el-text-color-secondary);width:20px;text-align:center}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;white-space:nowrap;position:relative;transition:transform var(--el-transition-duration);float:left;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:var(--el-tabs-header-height);box-sizing:border-box;display:flex;align-items:center;justify-content:center;list-style:none;font-size:var(--el-font-size-base);font-weight:500;color:var(--el-text-color-primary);position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus-visible{box-shadow:0 0 2px 2px var(--el-color-primary) inset;border-radius:3px}.el-tabs__item .is-icon-close{border-radius:50%;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);margin-left:5px}.el-tabs__item .is-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{position:relative;font-size:12px;width:0;height:14px;overflow:hidden;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);border:1px solid transparent;margin-top:-1px;color:var(--el-text-color-secondary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay);border-right-color:var(--el-border-color);border-left-color:var(--el-border-color)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover{padding-left:13px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover{padding-right:13px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__active-bar.is-left{right:0;left:auto}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid var(--el-border-color-light);border-bottom:none;border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid var(--el-border-color-light);border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid var(--el-border-color-light);border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter var(--el-transition-duration);animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave var(--el-transition-duration);animation:slideInRight-leave var(--el-transition-duration)}.slideInLeft-enter{-webkit-animation:slideInLeft-enter var(--el-transition-duration);animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave var(--el-transition-duration);animation:slideInLeft-leave var(--el-transition-duration)}@-webkit-keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@-webkit-keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(100%);opacity:0}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@-webkit-keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(-100%);opacity:0}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px}.el-tag{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary);--el-tag-text-color:var(--el-color-primary);background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);display:inline-flex;justify-content:center;align-items:center;height:24px;padding:0 9px;font-size:var(--el-tag-font-size);line-height:1;border-width:1px;border-style:solid;border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px}.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color)}.el-tag .el-tag__close:hover{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.el-tag .el-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{margin-left:6px}.el-tag--dark{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3);--el-tag-text-color:var(--el-color-white)}.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--el-tag-text-color:var(--el-color-white)}.el-tag--plain{--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary);--el-tag-bg-color:var(--el-fill-color-blank)}.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{padding:0 11px;height:32px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{padding:0 7px;height:20px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular)}.el-text{align-self:center;margin:0;padding:0;font-size:var(--el-text-font-size);color:var(--el-text-color);word-break:break-all}.el-text.is-truncated{display:inline-block;max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.disabled{color:var(--el-datepicker-border-color);cursor:not-allowed}.time-select-item:hover{background-color:var(--el-fill-color-light);font-weight:700;cursor:pointer}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:700}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid var(--el-timeline-node-color)}.el-timeline-item .el-timeline-item__icon{color:var(--el-color-white);font-size:var(--el-font-size-small)}.el-timeline-item__node{position:absolute;background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);border-radius:50%;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.el-timeline-item__node--normal{left:-1px;width:var(--el-timeline-node-size-normal);height:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{left:-2px;width:var(--el-timeline-node-size-large);height:var(--el-timeline-node-size-large)}.el-timeline-item__node.is-hollow{background:var(--el-color-white);border-style:solid;border-width:2px}.el-timeline-item__node--primary{background-color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-timeline-item__node--success{background-color:var(--el-color-success);border-color:var(--el-color-success)}.el-timeline-item__node--warning{background-color:var(--el-color-warning);border-color:var(--el-color-warning)}.el-timeline-item__node--danger{background-color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-timeline-item__node--info{background-color:var(--el-color-info);border-color:var(--el-color-info)}.el-timeline-item__dot{position:absolute;display:flex;justify-content:center;align-items:center}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);line-height:1;font-size:var(--el-font-size-small)}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline{--el-timeline-node-size-normal:12px;--el-timeline-node-size-large:14px;--el-timeline-node-color:var(--el-border-color-light)}.el-timeline{margin:0;font-size:var(--el-font-size-base);list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline .el-timeline-item__center{display:flex;align-items:center}.el-timeline .el-timeline-item__center .el-timeline-item__wrapper{width:100%}.el-timeline .el-timeline-item__center .el-timeline-item__tail{top:0}.el-timeline .el-timeline-item__center:first-child .el-timeline-item__tail{height:calc(50% + 10px);top:calc(50% - 10px)}.el-timeline .el-timeline-item__center:last-child .el-timeline-item__tail{display:block;height:calc(50% - 10px)}.el-tooltip-v2__content{--el-tooltip-v2-padding:5px 10px;--el-tooltip-v2-border-radius:4px;--el-tooltip-v2-border-color:var(--el-border-color);border-radius:var(--el-tooltip-v2-border-radius);color:var(--el-color-black);background-color:var(--el-color-white);padding:var(--el-tooltip-v2-padding);border:1px solid var(--el-border-color)}.el-tooltip-v2__arrow{position:absolute;color:var(--el-color-white);width:var(--el-tooltip-v2-arrow-width);height:var(--el-tooltip-v2-arrow-height);pointer-events:none;left:var(--el-tooltip-v2-arrow-x);top:var(--el-tooltip-v2-arrow-y)}.el-tooltip-v2__arrow:before{content:"";width:0;height:0;border:var(--el-tooltip-v2-arrow-border-width) solid transparent;position:absolute}.el-tooltip-v2__arrow:after{content:"";width:0;height:0;border:var(--el-tooltip-v2-arrow-border-width) solid transparent;position:absolute}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow{bottom:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:before{border-top-color:var(--el-color-white);border-top-width:var(--el-tooltip-v2-arrow-border-width);border-bottom:0;top:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:after{border-top-color:var(--el-border-color);border-top-width:var(--el-tooltip-v2-arrow-border-width);border-bottom:0;top:100%;z-index:-1}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow{top:0}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:before{border-bottom-color:var(--el-color-white);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:after{border-bottom-color:var(--el-border-color);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:100%;z-index:-1}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow{right:0}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:before{border-left-color:var(--el-color-white);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:after{border-left-color:var(--el-border-color);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:100%;z-index:-1}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow{left:0}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:before{border-right-color:var(--el-color-white);border-right-width:var(--el-tooltip-v2-arrow-border-width);border-left:0;right:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:after{border-right-color:var(--el-border-color);border-right-width:var(--el-tooltip-v2-arrow-border-width);border-left:0;right:100%;z-index:-1}.el-tooltip-v2__content.is-dark{--el-tooltip-v2-border-color:transparent;background-color:var(--el-color-black);color:var(--el-color-white);border-color:transparent}.el-tooltip-v2__content.is-dark .el-tooltip-v2__arrow{background-color:var(--el-color-black);border-color:transparent}.el-transfer{--el-transfer-border-color:var(--el-border-color-lighter);--el-transfer-border-radius:var(--el-border-radius-base);--el-transfer-panel-width:200px;--el-transfer-panel-header-height:40px;--el-transfer-panel-header-bg-color:var(--el-fill-color-light);--el-transfer-panel-footer-height:40px;--el-transfer-panel-body-height:278px;--el-transfer-item-height:30px;--el-transfer-filter-height:32px}.el-transfer{font-size:var(--el-font-size-base)}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{vertical-align:top}.el-transfer__button:nth-child(2){margin:0 0 0 10px}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button .el-icon+span{margin-left:0}.el-transfer-panel{overflow:hidden;background:var(--el-bg-color-overlay);display:inline-block;text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width);max-height:100%;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:var(--el-transfer-panel-body-height);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);border-bottom:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:var(--el-transfer-panel-body-height);overflow:auto;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular)}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;box-sizing:border-box;padding-left:22px;line-height:var(--el-transfer-item-height)}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;padding:15px;box-sizing:border-box}.el-transfer-panel__filter .el-input__inner{height:var(--el-transfer-filter-height);width:100%;font-size:12px;display:inline-block;box-sizing:border-box;border-radius:calc(var(--el-transfer-filter-height)/ 2)}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{display:flex;align-items:center;height:var(--el-transfer-panel-header-height);background:var(--el-transfer-panel-header-bg-color);margin:0;padding-left:15px;border:1px solid var(--el-transfer-border-color);border-top-left-radius:var(--el-transfer-border-radius);border-top-right-radius:var(--el-transfer-border-radius);box-sizing:border-box;color:var(--el-color-black)}.el-transfer-panel .el-transfer-panel__header .el-checkbox{position:relative;display:flex;width:100%;align-items:center}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:var(--el-text-color-primary);font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;top:50%;transform:translate3d(0,-50%,0);color:var(--el-text-color-secondary);font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:var(--el-transfer-panel-footer-height);background:var(--el-bg-color-overlay);margin:0;padding:0;border:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius)}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:var(--el-text-color-regular)}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding:6px 15px 0;color:var(--el-text-color-secondary);text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-tree{--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree{position:relative;cursor:default;background:var(--el-fill-color-blank);color:var(--el-tree-text-color);font-size:var(--el-font-size-base)}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:var(--el-text-color-secondary);font-size:var(--el-font-size-base)}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:var(--el-color-primary)}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{display:flex;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px;box-sizing:content-box}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:var(--el-tree-expand-icon-color);font-size:12px;transform:rotate(0);transition:transform var(--el-transition-duration) ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{margin-right:8px;font-size:var(--el-font-size-base);color:var(--el-tree-expand-icon-color)}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-tree-select{--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected:after{content:none}.el-tree-select__popper .el-select-dropdown__item{flex:1;background:0 0!important;padding-left:0;height:20px;line-height:20px}.el-upload{--el-upload-dragger-padding-horizontal:40px;--el-upload-dragger-padding-vertical:10px}.el-upload{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:var(--el-text-color-regular);margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0}.el-upload--picture-card{--el-upload-picture-card-size:148px;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;width:var(--el-upload-picture-card-size);height:var(--el-upload-picture-card-size);cursor:pointer;vertical-align:top;display:inline-flex;justify-content:center;align-items:center}.el-upload--picture-card i{font-size:28px;color:var(--el-text-color-secondary)}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{padding:var(--el-upload-dragger-padding-horizontal) var(--el-upload-dragger-padding-vertical);background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;text-align:center;cursor:pointer;position:relative;overflow:hidden}.el-upload-dragger .el-icon--upload{font-size:67px;color:var(--el-text-color-placeholder);margin-bottom:16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{padding:calc(var(--el-upload-dragger-padding-horizontal) - 1px) calc(var(--el-upload-dragger-padding-vertical) - 1px);background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary)}.el-upload-list{margin:10px 0 0;padding:0;list-style:none;position:relative}.el-upload-list__item{transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:var(--el-text-color-regular);margin-bottom:5px;position:relative;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{display:none;position:absolute;right:5px;top:50%;cursor:pointer;opacity:.75;color:var(--el-text-color-regular);transition:opacity var(--el-transition-duration);transform:translateY(-50%)}.el-upload-list__item .el-icon--close:hover{opacity:1;color:var(--el-color-primary)}.el-upload-list__item .el-icon--close-tip{display:none;position:absolute;top:1px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:var(--el-color-primary);font-style:normal}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;justify-content:center;flex-direction:column;width:calc(100% - 30px);margin-left:4px}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{color:var(--el-text-color-regular);display:inline-flex;text-align:center;align-items:center;padding:0 4px;transition:color var(--el-transition-duration);font-size:var(--el-font-size-base)}.el-upload-list__item-name .el-icon{margin-right:6px;color:var(--el-text-color-secondary)}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none;height:100%;justify-content:center;align-items:center;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:var(--el-text-color-regular);display:none}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{--el-upload-list-picture-card-size:148px;display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;width:var(--el-upload-list-picture-card-size);height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;padding:0;display:inline-flex}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:block}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.el-upload-list--picture-card .el-upload-list__item-status-label{right:-15px;top:-6px;width:40px;height:24px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;display:inline-flex;justify-content:center;align-items:center;color:#fff;opacity:0;font-size:20px;background-color:var(--el-overlay-color-lighter);transition:opacity var(--el-transition-duration)}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:1rem}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{top:50%;left:50%;transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;margin-top:10px;padding:10px;display:flex;align-items:center}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:inline-flex}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{display:inline-flex;justify-content:center;align-items:center;width:70px;height:70px;-o-object-fit:contain;object-fit:contain;position:relative;z-index:1;background-color:var(--el-color-white)}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{right:-15px;top:-6px;width:40px;height:24px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-cover__label i{font-size:12px;margin-top:11px;transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:var(--el-overlay-color-light);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;transition:var(--el-transition-md-fade);margin-top:60px}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:var(--el-text-color-primary)}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-vl__wrapper{position:relative}.el-vl__wrapper:hover .el-virtual-scrollbar,.el-vl__wrapper.always-on .el-virtual-scrollbar{opacity:1}.el-vl__window{scrollbar-width:none}.el-vl__window::-webkit-scrollbar{display:none}.el-virtual-scrollbar{opacity:0;transition:opacity .34s ease-out}.el-virtual-scrollbar.always-on{opacity:1}.el-vg__wrapper{position:relative}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius, 4px)}.el-popper{position:absolute;border-radius:var(--el-popper-border-radius);padding:5px 11px;z-index:2000;font-size:12px;line-height:20px;min-width:10px;word-wrap:break-word;visibility:visible}.el-popper.is-dark{color:var(--el-bg-color);background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark .el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-text-color-primary);right:0}.el-popper.is-light{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light .el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-bg-color-overlay);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{position:absolute;width:10px;height:10px;z-index:-1}.el-popper__arrow:before{position:absolute;width:10px;height:10px;z-index:-1;content:" ";transform:rotate(45deg);background:var(--el-text-color-primary);box-sizing:border-box}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent!important;border-bottom-color:transparent!important}.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-select-dropdown__item{font-size:var(--el-font-size-base);padding:0 32px 0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--el-text-color-regular);height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.selected{color:var(--el-color-primary);font-weight:700}.el-statistic{--el-statistic-title-font-weight:400;--el-statistic-title-font-size:var(--el-font-size-extra-small);--el-statistic-title-color:var(--el-text-color-regular);--el-statistic-content-font-weight:400;--el-statistic-content-font-size:var(--el-font-size-extra-large);--el-statistic-content-color:var(--el-text-color-primary)}.el-statistic__head{font-weight:var(--el-statistic-title-font-weight);font-size:var(--el-statistic-title-font-size);color:var(--el-statistic-title-color);line-height:20px;margin-bottom:4px}.el-statistic__content{font-weight:var(--el-statistic-content-font-weight);font-size:var(--el-statistic-content-font-size);color:var(--el-statistic-content-color)}.el-statistic__value{display:inline-block}.el-statistic__prefix{margin-right:4px;display:inline-block}.el-statistic__suffix{margin-left:4px;display:inline-block}.el-button{height:32rem!important;padding:8rem 15rem!important;font-size:14rem!important}.el-input__wrapper{padding:1rem 11rem!important}.el-input{height:32rem!important;font-size:14rem!important}.jt-wall-row .col-left{font-size:14rem!important}.el-color-picker__trigger{height:32rem!important;padding:4rem!important}.el-radio-button__inner{padding:8rem 15rem!important;font-size:14rem}.el-textarea__inner{padding:5rem 11rem!important;font-size:14rem}.el-input__inner{height:32rem!important;font-size:14rem!important}.jt-wall-row{display:flex;flex-direction:row;height:40rem;align-items:center}.jt-wall-row .col-left{display:flex;align-items:center;justify-content:right;width:60rem;font-family:Alimama_ShuHeiTi_Bold;font-weight:700;margin-right:8rem}.jt-wall-row .col-main{flex:1;display:flex;flex-direction:row}.jt-wall-row .col-main .el-input--suffix{background-color:#fff0}.jt-wall-row .col-main .el-input--suffix *{background-color:#fff0;color:#fff}.jt-wall-row .col-main .el-input-number__decrease,.jt-wall-row .col-main .el-input-number__increase{background-color:#3489ff;color:#fff}.jt-wall-dialog{pointer-events:none}.jt-wall-dialog .el-dialog{pointer-events:auto;position:absolute!important;background:rgba(5,45,155,.7);min-width:280rem;overflow:hidden;margin-top:0rem}.jt-wall-dialog .el-dialog .el-dialog__header{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAAyCAIAAAD9fhrKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NTc1YTY2Yi1hY2U5LTUyNDctODM5MS01MGJjMjM4MDkxMDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDY4MTUxMzk2RDM1MTFFRDkzM0JDNEQ5N0IwQTIxRjYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDY4MTUxMzg2RDM1MTFFRDkzM0JDNEQ5N0IwQTIxRjYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YjZlNTUzODYtMzRjZC02NDQyLWI4OTktODY4YTdiYTNkMzgyIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjg1NzVhNjZiLWFjZTktNTI0Ny04MzkxLTUwYmMyMzgwOTEwOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po+VQtwAACdUSURBVHja7H1bluM4kiUMfEjuHpFZtY4+/TGLmQ3MmTMbnf1MdUX6QyIJ2MAAAjC8+JB7ZHZXh7LKQ6IoECSBy2sXFwb4/X/+X2FfEqDv5dh35mXeC+k2CzD/+XfxL72BeVbv04KI7uP6ByD7pZTy6ToMnUTwv3f7rgWG/cNXrhz7AcVtUfOiwP/kOg6mLGRVoq1JUewjsAoLWJQ2RdlTg7CD+y+eJW3MziVU1dfK/wV2LIhXJpQJ/nQhOUFWWxDJRYjnwnfItkB2Z8w/yC7sr9fnXpj8Y/9d27hw/2D4zm/0/4V92EcRtq+bMP9J+AX98UdadxN8oy/D/tXdBeWAvsBQM7/FvwklxzemJ0xyfrflu6JG1T+Hc1mrhKEA/wfTQ9BfAD119x9Ca2R1ZjuEqwdq/Kb7C9vO3oQzZJ9AKdAzqDuoGVC5r3r3j8Gp62XoJaT9g3WBDK3crwwIdfB+mxUmyJP0HXNGAj/uM1zNQWTs8MChMOvJEQYMuDxdepBAQGM7810t2MHIioItnEqwbOx66GBadMSXHHQiCgBHFmDV8h+rJcQPEUaLk+WIFi5YDnyQXPoUs0R+oyTfEWvdkKFaskPYju0t1RLCDrxM/luoHejIm+0qbZ9g6+P2/snOBWDRQVPAggLOgMEBFRh7PoY+DPaJvUIYIvjeb3eG9b39tH6zFoL0Q9eHzVt6A1qOKMdYE7cD+lsBDCtdya7B2QINBEj1YZqMxSAwIKL7J3DVdI0WHbWgY4HdyIp2Z7d+lvreTa+hfHep/M/ZhZS9Gr7pbthqXsmtsdXpepS9MHXTi5xf5XIzX3XXf/tfBkmer2MHkPKdGr0SOckyXGzoO60IYIGBUcEdYFZKSuikFMBLT7pxQprYwXrifAZwtfto3pi9bVEcXVKSVcKtPYT5lSnMlOAaQMKKUobEv2UXF9a7kx4vbkRWnGsxAKxnAIRnrPAtg9FFYM8l93Pg/YA9A31zZCeJfOOBv3znykOv2KG6W/YVpu+xtlHUjlvWXGzu3Dqd6rflx/ZRkH+0vEFofssYCXAbtSNB7O6gxylGfNhRGFFJOdT6jbbFR4jEcHa4EqKrlkOsD2LKs2J9AlGKdVtucv4I9TdQpftrrH88BUSO3QVHI7RaboRWiJW7zy+zoW/jd4Ie0b472y+Q2F+AwHXuXv79f39/GiHr3pCgXQpSxaMeYOx7cxYGBHIKkHIKQhxJ6MOimxQI25jVdWBCy0Up941DSE4JAfKQtUURDcqawrT21YUUnVHkUVoJfByheE0DCGLysIiwkiEX6zwZctkHb3JHofU0ivee7aJx/QoxOTT6b2OVMCmE/0RU0SctOfsqnOz6rS9KszI5Umh2dJHWNjsFXSsw+7nIcCEtKuys2VfILxcWwIf8TdGrI3wxQpQHU/zi5JEjD8HWclhMxX4ecMHgi4ZesOgyBGsZWokCrWD5kPM9otXwbOLK9OphesYiOWvWFA3qddNbivHFc81iq7r8ZrrvJ2Jz/zjuRqnuvQm46rtmsFO0Yaql4w7U4fH5YuJD+JiWsB3Dj9HRYdp0J81LGE7nySMmPZfxflbAemw6wGW42RLMj+bZHEtcL1145NmiPEMWGKmNAwOMkYchZyaenRYiWmgpLx0xcGfXrjwXdMw5xSG/3ZJ/5LKXa0D++I4+R9gKVwwtuVrpNzj6HS7syt/Fuj+E5ghJAAblHeFxG2rhzyWNfgRrZ2HPNDDCVjQm2P4ltPk9kZUfRRmssXRMgzGIhftL7zdCpBuClYxYi02LC7KWwK+JSH4Yj5tEhZiyjLwfBaiq4lSKGonKgzUBK5xdQr5C9wfT/5HCfx5vJhcRkQtYKVrN77BMnjtJPT5pGHK4LCCKHSBidDe/rzQt2S+7CEINL4bBsX7XiNURcTdot5/18NIPXVfiFK8GNB/tGZYhiWBSvt/n8gnN7+9kEccCJSSH4Ai4fsG+stU3BzDI+OEPMS/K7GXgz0foAf6wgVkiYIkJMk2F7/NimBayADDClrZIJDCHLUQBGTdCcKAsPXcKWqODsqABuJPFJApGpx+sskHE20jmINK6KFuAbxvgmR2cCoTE3le5KAoeODNymG7ZKP/IcbdjNrEZTmzVfzMaySEojcE3QeokTnEoYVCFCSxGAT4e3uCU7i/oxMokDCzQKq8MFeTRyv1OquEZoU/pURFgisp1oFhnfiWaxgYCkkEGH8SZMJDi1kBadlvEEcol+x6q4tQ2TwMGw8ClHzF2snu6vN0nFx4mwOUAyILQNNPY4tN1WKUeKDAr/Cj/Cg3QPBnMmhxm4bKoD1PUSML8SmcCZmCmC+dUCwizumlWobYFbEWUs3o8psoXijTeElqsCBeCVE+4wFcEIQsVg9IZNC3hyZhgI7AY1LUVv9KWFJhM/SZioY23iHN1O6bsJGd2lS1VZra/AzY0/HatTsQXG6Vl75MOhoySNjhIHlCzvq6xxMEmVCXH4sSms9wKMmLFeA0bHMxEK9Nl5jehZrEerTM8BUHmaIU5WvHzCvWW06u0NC2pJSZohXJQw3eUXfOZggX1wYMwhn1xU2EfqjZfHYhv1/F9MhGbZjw9xIkrAM0GJG6zoUs5ZhUHRR+PhWCKMGscDDlaNPUUgzcf9+V6IUVLJFSLUSp+ahC3m/9f+v6+UHDoQ9EYCAewWu81rILXyrY4cYMkdHfEyjNNYONMPOLDVd3L1MqVeWGmSqVgiyJ1j2AYptSYtACA2Haz94jN1gOprhSLFbEThhIAErkEIO7TIkOhwPA3+6EQ9cNhUUnEdAvW+0A4SnYdmCiZGhdwHfZCkTMpjlDZD9t8KtlFp+4ATNSuyJjcc1T2KC/rOGQmtIs04uc7uC+0MtxK6GVFFei14VY0QFiEfZipdpiVCajl/RXU1Azi7DaS2HoCRNzlVOmFzTt949XvwlMlKqzoWYnqZIDjZRxvcrkZJiWYkuUwa90NDUi836fn67h2X4dZWHKi+JMANJIMWf1tMphlbj4obTFr7GjokGNSEo95LMIUtgAvfTct2haFERQgYAF6FuMxCDzaoR+rDvQOfIQc+6Af0XaCFPjWYDvV+pEPVmCizfvxv3DqfqgA07sb9sRjARdgfVS/UoLHR31svBBwn/aHa8WPlf8Q07rh1pM6KZBHytXSMB1cx1z+YnQoFYOygQjMhB6RGaZ4ed6jkIRgmuNUihYrWg0erdoxYM7+AlotFAnqZQUxOej+2QNfDa0QK5aOiFZ/gKVp6eGTM9Xjt5UJihpdrYfsFbjKHxWHAAtqStYeyUKv0Zj+dB36DoCcpVHAQd+DV2xaFnz7mEyIZ5AmpeWV2DCQHS8rCcOzDGaZkI7uDmEW6Vl2FBIjI8mU+IxFetgiRZ94n2LUA1Cu5peAm8IjUgA17nnx7qqIXLGXeG0fU9sHYm5eozMNJg9kmldiOsn516qC4TGjS/JgwEQWxYY0iqWqDbVYK2tnpddKJPeCl4O1nbG0TImKmSyOdWJxUuXZ8aFMVp9Ej6/7G3MWUIv4ivFELH7H+UsyIBf0b3qZzt8NmPC1TaiKLlZBZkuDVqjWAcFuxP4pRSseyWJlWNAfjmxQ0ysQTcvFdX6t1OW3fMyxQZ8OhO/YstLtM6xtLEuCAshgEkcDWXbo0KBJMnDDBHIb0M3Xceh7mQwacg0+CEAx1lsDNYN1Xn2nb2/3ZRz70WEWRHaUR4jZaVgY6SU5/KdZRRjSvDH7wUR/wyCQJe/bWI9WQ66oka8RIUMAiD67YDFksV6ira3UD6E+BhLHBDBvIomCE4Ij1vigaFbY3hh/y0+zRLBsH5Ect8nUjo0MZKcTY3NMj4gN8QsTXplrzFgPUhKvQC42p0JVWVobpxjbWiFNWrOVzmkIYhEAZo4EZw1dPhC1R6sLmv8hVAc9c90qPTUTA8r5DbQSVZP/GjF1epXYGSVtaZen4WsHsA4oVbgl0kc6Zv8MUkrrRZiUghSzwqGUJiv8FXuac4NxxKuCWVl4aPe72LlE93mxCIP3aca+uww976xHYMsAUkeeMhMeLkyLYtw1nUyUMAQdmVGIFpPBO0g4R2YchsTXtQ5HYsmngY0JZJxLeDK4WiYgC+fdxvVvwTggMW/7UNmF6aLYjuxYfh+Moj/E5p55rzBy8Ky1MLkwfw85ugh+UrGqaRzBL0V5IhBHNzBUOF6ZFmxhJU5JFHRRM3ChyKV0kUlOLFa0rZogBvpV6joCVWzqDCw3WO4GrcRqtnrScvScvDaMkGIU307AZ2mawIo1awW6/qJ6O+aYjH4WV6+lTNQC9w0w6wvqdHjcBWqerHwECq0MDzS9ZobJYgp3ZoEnSuZBcrPB42iBJlItZM5xfmUhkhZYA7r+Ns3OFzUtNPPIY9YGbHE6sApMvZ1UeafpRrhq2SH049okePiARMLw4lIAL2+CwGAYxSihQxwKTQbbgJ011EZTEmoAcVQxzo7wY4eiFo1gHtIhYh7YAVblTxRYcehAnYwgYJPwM+kzfx/tEsmbvLbpr4oZfuifDeysoer+wvwnDfE3g5u8f2Y6OvPclsyljPKCkkWRoOhyt0DFXZXSGdcXlg+DVqFwsi/IIYw9J7/dGBB0bUfdOppvqEVuTGWiVfesB6ptKwKsq1e1GL3p0jrAsKLWzW9wLmPhASeE35nG9WiqItzmmd/LBLNMQDfRCRPQ+EaZ+rASfYYNLNJbwiwraaEdXnHOCRNpMmBKzYIJT0oIlzWoyvuiHacOdxWCuB4mzMTJW4nOFWLGCF7pYBRzKXD+hWGnAsICPEM6oue9W7w34THCvTHf5SxZx5PbDz5Rsb3bkXrioYd2qz6lnbIYjShoVKmgi9b0acyIp30nSbSGrjL8V8BNIue75mDYkJoCoBDxkSNW5nLvo5UkT/yHcEpO6hwL2K/6b6K/rA6JClDhgYaHVVfABnj1BzlU3XNQkqzcDRBVGYrdCFTgY55pvJYZHSJh0po8oQ5ooPSOlkJLgAp6axDxeumtFZ5uyETWCXwaRyjHgJyzPM4ByglXJ+DSy7stAeIMU4xhIvg5oOEmQp6IghEBhBBCCREjx/wWOgTiJ4pMiq8RaEgTNZz1JW37m6pTnOEMhMGmEWx746PGmkdk2WzAZ2e0HUuUryBUVfAqQS3wF9nbSLDjc4MqlIr7DxjsyOkN1OIIEUppw7Qh82okgSd/yKVfyflNqpufv5Wq7KsPVSJNZh7Z3Kl8TAL3BpMfe/WfuvEbnsAc19ZJ3yOZ4ccPa9bkGBSAyZIjUtBX/3qCSpXRw2yH3lK526Jc+cus3jWNQoJzfmKpH6/IVRAuh1n95CxagkndGI0O6wgiJBHOqnuDV6OK0EzkdlAGupzeBh7lpHRZPLggxqxRAn+AFlV9KgcF8W0sOGhiP96yP9no8djVEJsUoKQPmDHcAqRSllZKQuQ5IPtCJ1JOk5ujcs+XC9A0KU1q9o/VTnWJqFSyqhaxstbQN7ncc6s741ZU1eEbTWbG2nAg7t2kDXp1GrCSYReoh4TbjyYW9jByxNUW4kHP43BfFhqP416H4KhEpOk7Gp+crbROtZpsy7C4a9/d7Pij2dcAzjtSUVIyACiTiTCsCFFXZxX9SSwmvgRgNIrxRwZegXn5CxbAy2teXCjn/IsBNwsMRRxQDUOWaazPGJmom+MqTKe1s6i5FHaHXDAxdjSfZAefbdtjO9sqRHV/qPgudmgjxqmKUNGxMm6CdUcRZrQMc5BiGKENBHQOrbASVWFuSk06vFYWrRYvufc2Euwy2wH3WGEWikZzAxVl0UpkM28i3HVXbcvPoRMrcWc9Kj/+9Dnnwzry5IQ2Zomq+LXyF8KUwZAheZ/mKOMB8PDQORWeiJJBMhWw9D2kwz8UgUthMOtu0MoG4d450TtbaUKpMoWLcS53LHPwsTO332b+g6hkIRTBMpefgcdqq8GCtTsoc/ghcNMApn6FypjgCvIC6mmudjnLKennBCU5ecQjT1k8+ZOW4HWcNmI+Oo9lbFUFstT/WTHxYq4cYTcSt0KZKWIlXytN8zZRFFlDPfe5rBK4LghdVgBmDIuK6pwEJnJraMA7pMnMV+2n9TTQCnG/gT3Ok0+EhFsToUVNzCoHiZidU4LBLJK0bjQrMEkesMIWwEqOKAuqDIbPQoxnT1X2OLVW+O4+WS+ozWxDVvih7zvws5UxyWNTm0kQQjea9oNioudYbpVKfVJ8XF9wR3Uy5TKQMiZrMU9DRClg4335nYYGSgFUmkU546r8Nkxtyaa5ZGUC7Nz96v6t7aIyKbV+lPIn6cDpVgnVw7X2wdzqpetDXylyYdkVOWyl7CiOsl3IyM5mHdVxKnMMrKN4s1wMWik/zc9wn6sFvtKBgQW3S6bjmKI6MlstCUtMJHZJLvZ+jLkLt9Fq+/nBc5N8FrCwkavveGBYbC80+FWutvP4ZCfHt/uEGvPgyB5LUeIr7CqD+QXbKgY3zR+DiQagboasadPs1IfWhmcNfZdoWJlchKkRwu9mqJ6JESfL+9bWHow/btoKBPk+72+BOsYLBd51EHP9CZ6lETMuloBYDIErwyDVprDdPrI5vVgkOWq9P/IIPVjO9semovRogYjtjRW2VSFVWCN+WAwL5mN03BNwNWhFG3RuW03izAwf3SieJoeUWHO6CdU/CWlzOeRDmY0AUGS2We2Cyhx2HHEzR7v8roNoVUrseKxl7KpX+ABgcR4koFQNEsxqznfnuVFCT8x+yNKzZVZk5hd9smb5vDLMLs/dAbnt3v4ldjarkAQFsOEVcbmrWrTL/mS0ye7vk4rPniwNRGqPggihMXrlwI18HDAHKEhd2lAMswtRptvHhgiFNcnpSBIF3EztUOYthk0hbEM/2tCnWukcoK277Ra7e5VEKyVKYbMSMQNaBZ5SM0FoDXp4sjmOM3cw1jTskrqhz4bqDi0RHPepCVVZYIiVM6P8CuPzmuU9y7EVjG8t/MdCad/RCo6hFZ4OCc8PIO8NG5eYdZvUnXIuhPAoWpjJDHXpx76LFwViGJVJrPlIov/e8CE7P9qlVKYg0TCudlDJ8CZNehXwC8Is1liLkGwP02uHmIOsiIlmipCk9HGJIidpYV/AChAkOUiTjIgs711mCYN0lLNIQ1oLlwW3rSTWxNp2URwUoTEqB7VsL1D0lXTkBCE95W37FbsgmOUmbJAsgaK0QebyFFZOByu2hyhKlOGeaKf6ZMRHw4D9C9lEcTE8S06vujcIOKSzeEoZqyqHU0NE+YSDpDmD2WIZ1K5VN/3Q3RNl46tEvXhC2dyXT/FhDasJPznuiE2exakWwywT6H3cab5OktvXN8K+k7Q6Tj4jmvdkyJNGBsnMZz2YFj3Ns7K4YOK5y2BFdxS5vsZM862Hc8gX6JKUQvZcTrCWJXthaQCAz5CJxApZsIciW0YIc7isdKZKVFjLebCT/a6aL6GWGXd3GgXUdJzyPWw0zloNoWa5Fzmgi329t9WxzgUplVwCmOdbqIANf5Dod+gvdtLMBkhhbXzAcy8YoAfKdaUXsUw03a9/CtOPMZsSVD/v5DsNF4NZ3fSHsGJWUn2tpDIHUoRZ0InD8nqJ4J/0pRxjWHjU0d4IHDDDLEN8XJaFJE+m7+WDW8JnYzA7S7fHx/j80/U2zwawHFEywHexqSO22l8ZWjKVyZRzV2omHwYKkSZ9BagkFUe+gg3E7HcpdeISdAWReQIErmQlEnLE3Gya3iMv/MS3x/cR5+1U+BPK3H7I46Z81p6+k/OxQujxd3ghkVsqaxaVB0Eqe2Bo0RHPwndKqqdMgW+yWwwVQoBK1dpQxeynvRq/Ww/qvWCUKOcPA4uqt8FsKwzcGhHG/cv+IGDt+WgSHf3Qz6O6ZEiKiQSVc/1DYByr/D0OPVkZoKmF1YplUAVonjS3ZVkIXOzSXkN3GX1i1Wpa8SQzShYJWkVT4X1Wi8s8k156nhVUlOv1IE+7VxqF0gm5KVEFwGRr1jSgblKqDMtycnTKCYXHrOdiM4dnS9jaaGDbrvcjVqwjRxENh1ruvMIkC01xZXErCMIKVPGWa5q+fpdEW+J0nJyLYK3HJ8I5YRaSt/2D0vVpO25oMCtbpWYTp/hhNPQ4fpMTgLpVfrvcpV7IimXqvE2jTyVmOOxceSQkPB0bhmtheMq83OcF+SoyEH95HbqrAxcshr22YCsSk2XBm4nc1LryoCnQzabO5ihB3gqbwa8piuA1DCqloniZHymP5yCBLpHYqlBUkoqKQn7HjTpCNjdxe07fWSfU2TmJu213e4mn4673I/U5mPm9PtbHODSyYBObqCU2+EbT1uCm/N0Is9zKXfVflzJ/VhqgzczXLR/W9X4HpZUT9RvCXAlVKcBKZTBr7uJiq5we6MWEjdrAljkEdIemamJtXtmW2vDJkPAx3T0Fl0Vpw1MmZ78sVFiyTQ09raZTldghs97Uqzk5CV+vdIfQqu8SjZytiZPKQ9kzdd3bxICGrPFlXIJ7NZtIA4xUlY2YLQ+RZrKCjWud5bfL3sY1Lb4+KPr1arCPkvI0o5qG36IeFS0zmIDOhFrdRbQTrOLm0hhIijjYbDAa1NQh6U0GB7cEsupEGj+mQY55w9+Wd9TlUdFimbKu92FniAPxAUf7YwyrETqJzdiwHCo2UKJMGOgn5XGvlX3XSfl06Ya+q1A2n4evrulCSMsviLstyolWPZBoZTX7QqHHVB1PleCgYZmazospcEGsqeDFslIY85pm05DrRIyFnGno1zDBQf4M2EjP8cCz5fO9G35m+X8BWNXPBkUtrKqB3J7PO0cKraV+050yoda6jncp7Vdni7LPWl7FADC909ChWqR+FR3BFgpZ54QNW1l4q4dn4hKL85TmR5XLjXyS4zMdt41Wpy82PgBYZ6bLb9vfHZTcbLKXPGSyb/uOsmX1UlbCTN4OIGUUTJNSdIh5nZloE4f6RMkF2c2MEal2HhoIha6TmgMZLBJyYmEyh4L05USswqegGjnklzcTs1p3B44/sHiEA5sL11eZelWmqu5/ZK345orxj76gfeiNyYQHw0aWB34/LK3pXFk3jhEomKck6HehFeUyZpLWIe+431XDKAbZza+gZ1vgm9XI7OzCwzjFi9X9BcDZHWZRRA9mY3f/Q/SuzrIJzQcHOg60gv44MLW+qpMsu4lWxpkWytvX8JTaAUGPVjG/diW3ZKbVBPVn1vo+LbNPwWxiwKdxoOmH22pXJtUzVFpIYrcqmEi9YZgDZco+sSRighsgdtOmQyaOQ1yTFFpaSQZtojqvqJiXgmxjdVXBZHSKz9sJBB8gtka2Q2Uwvz2T50S2qnLWULtwTGtbXTMxmdBbu0QHKMF2KpVKYFjrnLEeIafVTSpF4Vg3tPVEbFaHWkuvhu9SvIKdxgzzh8EsNbxg1MiwyYGwgriUV/7yrfNDh8U56lXS6l+i0i+OORjw6ODgkZDwXARQMqN50WsamYokj26yyxNN0gOBVb26mNaTA6JBFn2b5yBaDUP/vGr2KAAqFxfaiqmFuHnSVgXLGBmnL1AfWhJ1CzqKRk2iEgk5LysXXqjhWnEfYGM2S2aPxWxNp222EYxumoVFNYnmgUlBTQ5X3DinJCazTnGr8Gq1N/bE0hNbUiRo3sdC1cYd6G3zOJrZp/6gUIskLWhL+yV8+V1BquGbFNKuz2xiECdpvawZrNp8qv7coL49WLuDlMtH9daa7WCo3PBijWAHiBUbADuFWUcWoajj04aehda78GHgJNONg2nIoNXQPV+GZtNOO3nJuQykGGL1MS1hcayL9UM0L3uJGmn9tc3DdbNJnKHiVQ2F5E0tXdXmKJAxRoQbD+forirjTcECT8RzefV2Ap9jfOin6UWHdI1Thi98qFolHOoDkCRaeYLZt43RRr4GDS2r1S+pAlU3SDTwizALSYanoUOhlFR/iOHJurTkgcGFgsFBZzCLlkxf3vMUo+tk7KnTCw7fRHfRZXh4JBh8XMP6xEtR1lCS2JM6MBphut86ILg1fQxbQGPAS9tI826Xt6GpmTZpHy2fkyQ2SDt5uawmbx2UnXmenQoGdcjn+dmrpyYKrYy5w6pcCXfVQww+1a2ui4fUzUPyT4KPWJH095+HrX2SpSK+6JWtT5EVDnztyXz1sc9VBvER2N0FiLRYks8NBHQ81MJ2eZVy7EKE0i57o0mUn96sDP9sC9yoRusj0JLOVOA7CFXjerq7/9DDM5Dj4euxZQ+wiuG8xrfxtVjX0ryoFiOTkhZtNvRquxwhapqXAxdafpXSgLrfdlIaptb3sBHrVfwB7GLPBH8+dG3oDlUU8ws0ayhWOcuJD1ak5nwAYaOVAx7puzvi44EYP1mlAo49Dzf2Sd2bmKX4hXOaQ6N1NNa/SD+2ltIol7eoD0VUq3cojT3iQcirajqmdvNdmqZpuJKVtHD7oVWNU8nZAHJ6FZp6JSzW9jW+RNvXSdg1oSUtezC/0lhkRfgSNkWXUiNTzeoaIB5F+UcZViM29AIQpa8yYaBuNva+k08XP0Nwo6OCaA032MWi55CfyBT4fLVzbtLHbHuIh0MYwYC13S+6EbXBtk4BqbyYS0pBs2jEKNC8SblJO2eLmyu+PUZfHo65Ho7IPj8N6EvqeTz7YO74PXB8bPbJ0k5fy6jlJS39TxPf6f4iBGzDU7XZazni+BuN9Nn8fLTU4E0Jg1mmQISj15P7J8iaL+X0B+i53oDVvbstNoXWRZTDcY+ilXl1f/8f/+fQo7uJJS60x2kitEJs7mxw6sUm/dwOglrfart41/stHsKU9Xwdu2q0DBUqlNeZbPcktCFurrN4dBvDISzoVmNqFWD726zc/6KWpn/JF+7lLMd16cA85MS2nrWj5KAd8gM78bg+utLy2fuZ0pI4GhkdLM8y4aG6U5sysSHA+cCWfPVCjiZidQXW+og5xI26nuxESFL6uQcPoDobZ1biN7cManQtFVWg8bu+f74OsL1OQftbskcEp5WdczN23ZMpsFS7anythHMT0X9MNDs616NKqo9Qj4ZbQNZSlPJhr4biDq1blYW3B7D+1+vLEOpAXFwfIdWPcMSGhEQ5ZPSC/bOQ/S5C1YLNTo2/CfFKsw4tdJKkZYf2cr3piOuV3O4dXn43PIsvWpH92ESOAhfdf3My3Ofly/7Q5awjEdgw0MRok9bYCusMulyG7skPCDYDt3ZU6MJA5Z1WNk9p/3Tpd5577eeGKertvkTRih0RK1DUQKeaAoV7UAK7T+m6hgWNFAK/wOunw9ODPOtIqZtTqutaLrm0KNQK8hCeOwtSzUnSIncCtX/rVl/U5TdaE0wcwqm0E0h1+V3AD1OOKNF5lbToEHr8rkiGg58PWO1TuM+LgZKNLiMNWo1+hmBDmm3mXLZ/5sVFmhgKvI6DHRDc66hY84zbRXTephmx6kwvbnViJoQWfxQbcJaVcyYchlN949c8wv9UyIbtBz9ugtg2sKGVtG7/VG15aLcyZHcgBeqN1qAn3jH3t3+o4beiQDzYuAxxQ+i6+U20GKVe5O0fOH5HK379fMAqerehVB/TdPcpXCrhonMbXNIBwRZXrSEXUk6r5WOKgNjR+mDjMMidltFAAeu0IutWGcU14WKbaycCaGvZLAH7I0rH0O0Xk/oLkQmOjR5ud/At/wmeePCg6u7/BPWih+fcVAWHRjN090wJv0k1t92B7Aj/Afgtc2kdfwiauJLmBJsCUbVmi6+G+PEFoXv4Qds/cO9MMPV2CzFarmqtKUMNuDiJ/fgQNUMujWiIVZgeKOyA4MuVkqrvx0Glux1dgtPZ5oqAY0/JDZ0bjksHtWRKsF3j3Zw+p3EL/nT+Be2nAB77yfbHLyz50PXBnbykR4ZNTtPhHdGAco3ioofvO/2/UQwlDrx0BviEXjkBTK/QKcwA5ThmUYYs2U0/nN2hqunZZX4mikDlg+HhOcBy67+/TxPiltA1kNvAgstDUsuiVHRa2V/0fWfQSsIBbKrdYFLBDMLyyR01negw48cDJwJnpIttgBON9RK+WpT5E4Kl40s6f2YtQnGyKPyiM8SvukxHi5LLfVWgilTLW304TAQ1+HT5m7z/sHYHl4Dhw3Audflet1Dt1Ra7UV3/1q0FNhq4XvqPf5hDGDb3AGYdsDUEBEVhSArFaLglKhta9e3pIuWBqtQggjSmSN/sgODQPz8NUC5ceuxKzrZAvfEQ3C0Pzj8K4Iv3+/X6VxK4HgG4RgMGJIOCgRo7DAe7vy3GwIHyMZh/9ZIUCJ1N8ACn6k9eDvJPXIJ/onWSZKqgSSrDqc51wtagNL7ZjFZ5XdOEwmPfv1yHo1ZlzMWg+7x8cBUf8DoOmWZfzrHYuMW3UOCGnWo/1sDTcIYPNesvgK9treVsOAQNEotbttctblhmkoF2lpvqQbEotrry9cEz/dLkNp9nsrsOr/p2bSM7ZdNXPZDREdZJgiG/KGlk/yHwe1lgC6dSEHRDh3/YqddNKmoN8bMaf09yPHw+JAwkBbGd2Mx2WwMuT2N/JlqL+66L6Ni5x2FlwKeLHRA8pnyVtz5RwfCEHHTunuNJV+fGI+ULYjc8GZKd9ZufNdTjsXL2AkKopk/HM+e1a4v8OZHzTxjhrfq27OQb63h4SIFyQ4edKcRXuLOSfCwQT/Q+KnAFwbfqLBGPlHN/+39qLAYoHwYscwjDULKZzOVOkiT2YV1DsFlSs0KLxne7LkVS4MXEgg+OgCbzDc83lyPmg0+kJv6ijgH/ncLJv9C0keXi+vk1x0eLIlOVVqcVqKD59M800nf/4ewOlgRZSWv8LSvwoP/TgmDfTT/EhoHWDVDqFzV+O4JZWxqWpjAwGaqrXyYJ3wy56rozcU3cycSZbx+TinmjaT7zt6dLZRJPK85IX4YPvt5mrfVfoBnBA/X9RB8+wjAOrb/0ic6En/7JLh3ELzovPEDpML28eIC2HrsAcNa39VgDjApU/0AtDb5gdwE1gYeYtUDZafkIcbMFDrBMsIn1JjaUlJdiFJsuLVrStQVY86JfOetpMbSuDS4HOqjhbm+3iZ/KYDX7TsJDV4eSZL3f5p+COn8F0ok9XefX68+hd3AcVfBPq1TzK5rEBwI3nOXtBTpJNe+vJJmjih1ruQk3G/GBChr07A0IzrA5UcmAEc2XlP0G1DZF948pEb9bL0OrXi4jwIFLCnWN6e5EK7/rZbBTDh+6gYaivVNSK/VpFMIvw5gvPSb+Jf3i1+vPu9rngHEn7pleBU2I+W3XWV7JvQNyuf7eTa8kw4e4Z/pheJAev+8UiHWepa5/l5OdwbNNoG7/EON3sqG2GFK5JI9hKNOidq8IgctlAHjksUPB5n3KNKansb9eBmhGyFsAobNBzPI3B1dmgD+hDVeHun69/lWZGZ4Zf8RzrW+zYC9p/a7lA1owOFGJZi/HAp1L63e3pMU5LyBITVOvIUmyXFWpbNYaC7WVAcr/L8AA+dSd3OMf2BsAAAAASUVORK5CYII=) no-repeat;background-size:100%;margin-right:0rem;padding:6rem;text-align:center}.jt-wall-dialog .el-dialog .el-dialog__headerbtn{height:34rem}.jt-wall-dialog .el-dialog .el-dialog__body{padding:10rem;color:#fff}.jt-wall-dialog .el-dialog .el-color-picker__trigger{width:120rem}.jt-wall-dialog .el-dialog .el-body-foot{position:absolute;bottom:8rem;right:8rem;width:calc(100% - 16rem)}.jt-wall-dialog .el-dialog .el-body-foot .el-button-group{display:flex}.jt-wall-dialog .el-dialog .el-body-foot .el-button-group .el-button{border:solid 0rem rgb(255,0,0);flex:1} `; var _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const _hoisted_1$2 = { class: "jt-wall-dialog" }; const _hoisted_2$2 = { slot: "title", class: "header-title" }; const _hoisted_3$2 = { style: { "line-height": "24rem", "font-size": "16rem", "color": "#fff", "font-family": "'Alimama_ShuHeiTi_Bold'" } }; const _hoisted_4$2 = { class: "odin-dialog__content" }; const _hoisted_5$2 = { class: "jt-wall-row" }; const _hoisted_6$2 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u9AD8\u5EA6", -1); const _hoisted_7$2 = { class: "col-main" }; const _hoisted_8$2 = { class: "jt-wall-row" }; const _hoisted_9$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u5F2F\u66F2\u5EA6", -1); const _hoisted_10$1 = { class: "col-main" }; const _hoisted_11$1 = { class: "jt-wall-row" }; const _hoisted_12$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u7EBF\u5BBD", -1); const _hoisted_13$1 = { class: "col-main" }; const _hoisted_14$1 = { class: "jt-wall-row" }; const _hoisted_15$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u53D1\u5149\u5F3A\u5EA6", -1); const _hoisted_16$1 = { class: "col-main" }; const _hoisted_17$1 = { class: "jt-wall-row" }; const _hoisted_18$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u989C\u8272", -1); const _hoisted_19$1 = { class: "col-main" }; const _hoisted_20$1 = { class: "jt-wall-row" }; const _hoisted_21$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u6D41\u52A8\u65B9\u5411", -1); const _hoisted_22$1 = { class: "col-main" }; const _hoisted_23$1 = { class: "jt-wall-row" }; const _hoisted_24$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u6D41\u52A8\u987A\u5E8F", -1); const _hoisted_25$1 = { class: "col-main" }; const _hoisted_26$1 = { class: "jt-wall-row" }; const _hoisted_27$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u6D41\u52A8\u65F6\u95F4", -1); const _hoisted_28$1 = { class: "col-main" }; const _hoisted_29$1 = { class: "col-main" }; const _hoisted_30$1 = { class: "jt-wall-row" }; const _hoisted_31$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u91CD\u590D\u6570\u91CF", -1); const _hoisted_32$1 = { class: "col-main" }; const _hoisted_33$1 = { class: "jt-wall-row", style: { "height": "60rem" } }; const _hoisted_34$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u6587\u5B57\u5185\u5BB9", -1); const _hoisted_35$1 = { class: "col-main" }; const _hoisted_36$1 = { class: "jt-wall-row" }; const _hoisted_37$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u63CF\u8FB9\u5BBD\u5EA6", -1); const _hoisted_38$1 = { class: "col-main" }; const _hoisted_39$1 = { class: "jt-wall-row" }; const _hoisted_40$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u63CF\u8FB9\u989C\u8272", -1); const _hoisted_41$1 = { class: "col-main" }; const _hoisted_42$1 = { class: "jt-wall-row", style: { "height": "100rem" } }; const _hoisted_43$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u89C6\u9891\u5730\u5740", -1); const _hoisted_44$1 = { class: "col-main" }; const _hoisted_45$1 = { class: "jt-wall-row" }; const _hoisted_46$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "X\u8F74\u5E73\u79FB", -1); const _hoisted_47$1 = { class: "col-main" }; const _hoisted_48$1 = { class: "jt-wall-row" }; const _hoisted_49$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "Y\u8F74\u5E73\u79FB", -1); const _hoisted_50$1 = { class: "col-main" }; const _hoisted_51$1 = { class: "jt-wall-row" }; const _hoisted_52$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "Z\u8F74\u5E73\u79FB", -1); const _hoisted_53$1 = { class: "col-main" }; const _hoisted_54$1 = { class: "el-body-foot" }; const _sfc_main$2 = { __name: "CrEditProperty.ce", props: { params: { id: { type: String, default: () => void 0 }, height: { type: Number, default: () => 13 }, bottomHeight: { type: Number, default: () => 0 }, color: { type: String, default: () => "255,255,0,0.9" }, direction: { type: String, default: () => "horizontal" }, order: { type: String, default: () => "+" }, count: { type: Number, default: () => 2 }, text: { type: String, default: () => "" }, lineWidth: { type: Number, default: () => 2 }, glowPower: { type: Number, default: () => 0.25 }, outlineWidth: { type: Number, default: () => 0 }, outlineColor: { type: String, default: () => "255,255,0,0.9" }, speed: { type: Number, default: () => 1.5 }, videoUrl: { type: String, default: () => "" }, arcHeight: { type: Number, default: () => 1e3 }, axisX: { type: Number, default: () => 0 }, axisY: { type: Number, default: () => 0 }, axisZ: { type: Number, default: () => 0 } }, showDialog: { type: Boolean, default: () => false } }, emits: ["submit", "update:showDialog", "update:params", "remove"], setup(__props, { expose: __expose, emit }) { const props = __props; const language = ref("zh-cn"); const locale = computed$1(() => language.value === "zh-cn" ? zhCn : en); const { proxy } = getCurrentInstance(); const predefineColors = ref([ "#ff4500", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", "#1e90ff", "#c71585", "rgba(255, 69, 0, 0.68)", "rgb(255, 120, 0)", "hsv(51, 100, 98)", "hsva(120, 40, 94, 0.5)", "hsl(181, 100%, 37%)", "hsla(209, 100%, 56%, 0.73)", "#c7158577" ]); const isShowColor = ref(false); const isShowText = ref(false); const isShowHeight = ref(false); const isShowDirection = ref(false); const isShowOrder = ref(false); const isShowCount = ref(false); ref(false); const isShowLineWidth = ref(false); const isShowGlowpower = ref(false); const isShowOutlineWidth = ref(false); const isShowOutlineColor = ref(false); const isShowSpeed = ref(false); const isShowVideoUrl = ref(false); const isShowArcHeight = ref(false); const isShowAxis = ref(false); const color2 = ref(props.params.color); const title = ref("\u5C5E\u6027\u7F16\u8F91"); const dialogVisible = ref(props.showDialog); const directions = reactive([{ key: "\u5DE6\u53F3", value: "horizontal" }, { key: "\u4E0A\u4E0B", value: "vertical" }]); const orders = reactive([]); const radioDirection = ref(""); const radioOrder = ref(""); const wallHeight = ref(0); const yCount = ref(0); const txtContent = ref(""); const lineWidth = ref(0); const glowPower = ref(0.25); const outlineWidth = ref(0); const outlineColor = ref(props.params.outlineColor); const speed = ref(1.5); const txtVideoUrl = ref(""); const arcHeight = ref(1e3); const axisX = ref(0); const axisY = ref(0); const axisZ = ref(0); updateParams(props.params); function updateParams(params) { proxy._params = params; _setShowControls(false); if (params.id === DrawTools.DrawType.TextWall) { title.value = "\u5E7F\u544A\u724C\u7F16\u8F91"; isShowColor.value = true; isShowText.value = true; isShowHeight.value = true; } else if (params.id === DrawTools.DrawType.DynamicWall) { title.value = "\u52A8\u6001\u56F4\u680F\u7F16\u8F91"; isShowColor.value = true; isShowDirection.value = true; isShowOrder.value = true; isShowCount.value = true; isShowHeight.value = true; isShowSpeed.value = true; } else if (params.id === DrawTools.DrawType.NormalWall) { title.value = "\u666E\u901A\u56F4\u680F\u7F16\u8F91"; isShowColor.value = true; isShowHeight.value = true; } else if (params.id === DrawTools.DrawType.Circle) { title.value = "\u8D34\u5730\u5706\u7F16\u8F91"; isShowColor.value = true; isShowOutlineColor.value = true; isShowOutlineWidth.value = true; } else if (params.id === DrawTools.DrawType.DynamicCircle) { title.value = "\u6269\u6563\u5706\u7F16\u8F91"; isShowColor.value = true; isShowCount.value = true; isShowSpeed.value = true; } else if (params.id === DrawTools.DrawType.House) { title.value = "\u623F\u5C4B\u7F16\u8F91"; isShowColor.value = true; isShowHeight.value = true; } else if (params.id === DrawTools.DrawType.VideoWall) { title.value = "\u89C6\u9891\u5899\u7F16\u8F91"; isShowHeight.value = true; isShowVideoUrl.value = true; isShowAxis.value = true; } else if (params.id === DrawTools.DrawType.Polyline) { title.value = "\u8D34\u5730\u7EBF\u7F16\u8F91"; isShowColor.value = true; isShowLineWidth.value = true; } else if (params.id === DrawTools.DrawType.ArrowPolyline) { title.value = "\u7BAD\u5934\u7EBF\u7F16\u8F91"; isShowColor.value = true; isShowLineWidth.value = true; } else if (params.id === DrawTools.DrawType.DynamicPolyline) { title.value = "\u52A8\u6001\u7EBF\u7F16\u8F91"; isShowColor.value = true; isShowOrder.value = true; isShowCount.value = true; isShowLineWidth.value = true; isShowSpeed.value = true; } else if (params.id === DrawTools.DrawType.GrowPolyline) { title.value = "\u53D1\u5149\u7EBF\u7F16\u8F91"; isShowColor.value = true; isShowLineWidth.value = true; isShowGlowpower.value = true; } else if (params.id === DrawTools.DrawType.OutlinePolyline) { title.value = "\u63CF\u8FB9\u7EBF\u7F16\u8F91"; isShowColor.value = true; isShowLineWidth.value = true; isShowOutlineColor.value = true; isShowOutlineWidth.value = true; } else if (params.id === DrawTools.DrawType.Polygon) { title.value = "\u8D34\u5730\u9762\u7F16\u8F91"; isShowColor.value = true; isShowOutlineColor.value = true; isShowOutlineWidth.value = true; } else if (params.id === DrawTools.DrawType.Rectangle) { title.value = "\u77E9\u5F62\u7F16\u8F91"; isShowColor.value = true; isShowOutlineColor.value = true; isShowOutlineWidth.value = true; } else if (params.id === DrawTools.DrawType.SpatialLine) { title.value = "\u7A7A\u95F4\u7EBF\u7F16\u8F91"; isShowColor.value = true; isShowLineWidth.value = true; } else if (params.id === DrawTools.DrawType.OdLine) { title.value = "OD\u7EBF\u7F16\u8F91"; isShowSpeed.value = true; isShowColor.value = true; isShowLineWidth.value = true; isShowOrder.value = true; isShowArcHeight.value = true; } else { _setShowControls(false); } color2.value = params.color; if (params.direction === "horizontal") { radioDirection.value = directions[0].key; Object.assign(orders, [{ key: "\u81EA\u5DE6\u81F3\u53F3", value: "-" }, { key: "\u81EA\u53F3\u81F3\u5DE6", value: "+" }]); if (params.order === "-") { radioOrder.value = orders[0].key; } else { radioOrder.value = orders[1].key; } } else { radioDirection.value = directions[1].key; Object.assign(orders, [{ key: "\u81EA\u4E0A\u81F3\u4E0B", value: "+" }, { key: "\u81EA\u4E0B\u81F3\u4E0A", value: "-" }]); if (params.order === "+") { radioOrder.value = orders[0].key; } else { radioOrder.value = orders[1].key; } } if (params.id === DrawTools.DrawType.OdLine) { Object.assign(orders, [{ key: "\u6C47\u805A", value: "+" }, { key: "\u6269\u6563", value: "-" }]); if (params.order === "+") { radioOrder.value = orders[0].key; } else { radioOrder.value = orders[1].key; } } wallHeight.value = parseFloat(params.height).toFixed(2); yCount.value = params.count; txtContent.value = params.text; lineWidth.value = params.lineWidth; glowPower.value = params.power; outlineColor.value = params.outlineColor; outlineWidth.value = params.outlineWidth; speed.value = (parseFloat(params.duration) / 1e3).toFixed(2); txtVideoUrl.value = params.videoUrl; arcHeight.value = params.odlineHeight; axisX.value = params.axisX; axisY.value = params.axisY; axisZ.value = params.axisZ; } function _setShowControls(isShow) { isShowColor.value = isShow; isShowText.value = isShow; isShowDirection.value = isShow; isShowOrder.value = isShow; isShowCount.value = isShow; isShowHeight.value = isShow; isShowLineWidth.value = isShow; isShowGlowpower.value = isShow; isShowOutlineColor.value = isShow; isShowOutlineWidth.value = isShow; isShowSpeed.value = isShow; isShowVideoUrl.value = isShow; isShowArcHeight.value = isShow; isShowAxis.value = isShow; } __expose({}); function submit() { let outParam = proxy._params; outParam.height = wallHeight.value; outParam.color = color2.value; outParam.direction = directions.filter((item) => { return item.key === radioDirection.value; })[0].value; outParam.order = orders.filter((item) => { return item.key === radioOrder.value; })[0].value; outParam.count = yCount.value; outParam.text = txtContent.value; outParam.lineWidth = lineWidth.value; outParam.power = glowPower.value; outParam.outlineColor = outlineColor.value; outParam.outlineWidth = outlineWidth.value; outParam.duration = speed.value * 1e3; outParam.videoUrl = txtVideoUrl.value; outParam.odlineHeight = arcHeight.value; outParam.bottomHeight = props.params.bottomHeight; outParam.axisX = axisX.value; outParam.axisY = axisY.value; outParam.axisZ = axisZ.value; emit("submit", outParam); axisX.value = axisY.value = axisZ.value = 0; } function close() { dialogVisible.value = false; } function remove2() { emit("remove", {}); dialogVisible.value = false; } function directionChange(e) { if (e.target.value === directions[0].key) { Object.assign(orders, [{ key: "\u81EA\u5DE6\u81F3\u53F3", value: "-" }, { key: "\u81EA\u53F3\u81F3\u5DE6", value: "+" }]); radioOrder.value = orders[0].key; } else if (e.target.value === directions[1].key) { Object.assign(orders, [{ key: "\u81EA\u4E0A\u81F3\u4E0B", value: "-" }, { key: "\u81EA\u4E0B\u81F3\u4E0A", value: "+" }]); radioOrder.value = orders[0].key; } } function closeDialog() { emit("update:showDialog", false); } function openDialog() { updateParams(props.params); } return (_ctx, _cache) => { return openBlock(), createElementBlock("div", _hoisted_1$2, [ createVNode(unref(ElDialog), { modal: false, "destroy-on-close": false, modelValue: dialogVisible.value, "onUpdate:modelValue": _cache[19] || (_cache[19] = ($event) => dialogVisible.value = $event), title: title.value, style: normalizeStyle({ left: "10rem", background: "rgb(0 44 126 / 68%)", height: "calc(100% - 175rem)", width: "180rem", top: "125rem" }), onClose: closeDialog, onOpen: openDialog, "show-close": false }, { header: withCtx(() => [ createElementVNode("div", _hoisted_2$2, [ createElementVNode("span", _hoisted_3$2, toDisplayString(title.value), 1) ]) ]), default: withCtx(() => [ createElementVNode("div", _hoisted_4$2, [ withDirectives(createElementVNode("div", _hoisted_5$2, [ _hoisted_6$2, createElementVNode("div", _hoisted_7$2, [ createVNode(unref(ElInput), { modelValue: wallHeight.value, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => wallHeight.value = $event), placeholder: "\u8F93\u5165\u9AD8\u5EA6\u503C", clearable: "" }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowHeight.value] ]), withDirectives(createElementVNode("div", _hoisted_8$2, [ _hoisted_9$1, createElementVNode("div", _hoisted_10$1, [ createVNode(unref(ElInput), { modelValue: arcHeight.value, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => arcHeight.value = $event), placeholder: "\u8F93\u5165\u5F2F\u66F2\u5EA60\uFF5E9000", clearable: "" }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowArcHeight.value] ]), withDirectives(createElementVNode("div", _hoisted_11$1, [ _hoisted_12$1, createElementVNode("div", _hoisted_13$1, [ createVNode(unref(ElInput), { modelValue: lineWidth.value, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => lineWidth.value = $event), placeholder: "\u8F93\u5165\u5BBD\u5EA6\u503C", clearable: "" }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowLineWidth.value] ]), withDirectives(createElementVNode("div", _hoisted_14$1, [ _hoisted_15$1, createElementVNode("div", _hoisted_16$1, [ createVNode(unref(ElInput), { modelValue: glowPower.value, "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => glowPower.value = $event), placeholder: "\u8F93\u5165\u53D1\u5149\u5F3A\u5EA60\uFF5E1", clearable: "" }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowGlowpower.value] ]), withDirectives(createElementVNode("div", _hoisted_17$1, [ _hoisted_18$1, createElementVNode("div", _hoisted_19$1, [ createVNode(unref(ElConfigProvider), { locale: locale.value }, { default: withCtx(() => [ createVNode(unref(ElColorPicker), { modelValue: color2.value, "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => color2.value = $event), "show-alpha": "", predefine: predefineColors.value, label: "12" }, null, 8, ["modelValue", "predefine"]) ]), _: 1 }, 8, ["locale"]) ]) ], 512), [ [vShow, isShowColor.value] ]), withDirectives(createElementVNode("div", _hoisted_20$1, [ _hoisted_21$1, createElementVNode("div", _hoisted_22$1, [ createVNode(unref(ElRadioGroup), { modelValue: radioDirection.value, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => radioDirection.value = $event) }, { default: withCtx(() => [ (openBlock(true), createElementBlock(Fragment, null, renderList(directions, (item, index2) => { return openBlock(), createBlock(unref(ElRadioButton), { label: item.key, modelValue: item.value, "onUpdate:modelValue": ($event) => item.value = $event, onChange: directionChange }, null, 8, ["label", "modelValue", "onUpdate:modelValue"]); }), 256)) ]), _: 1 }, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowDirection.value] ]), withDirectives(createElementVNode("div", _hoisted_23$1, [ _hoisted_24$1, createElementVNode("div", _hoisted_25$1, [ createVNode(unref(ElRadioGroup), { modelValue: radioOrder.value, "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => radioOrder.value = $event) }, { default: withCtx(() => [ (openBlock(true), createElementBlock(Fragment, null, renderList(orders, (item, index2) => { return openBlock(), createBlock(unref(ElRadioButton), { label: item.key, modelValue: item.value, "onUpdate:modelValue": ($event) => item.value = $event }, null, 8, ["label", "modelValue", "onUpdate:modelValue"]); }), 256)) ]), _: 1 }, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowOrder.value] ]), withDirectives(createElementVNode("div", _hoisted_26$1, [ _hoisted_27$1, createElementVNode("div", _hoisted_28$1, [ createElementVNode("div", _hoisted_29$1, [ createVNode(unref(ElInput), { modelValue: speed.value, "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => speed.value = $event), placeholder: "\u8F93\u5165\u6D41\u52A8\u65F6\u95F40\uFF5E10", clearable: "" }, null, 8, ["modelValue"]) ]) ]) ], 512), [ [vShow, isShowSpeed.value] ]), withDirectives(createElementVNode("div", _hoisted_30$1, [ _hoisted_31$1, createElementVNode("div", _hoisted_32$1, [ createVNode(unref(ElInput), { modelValue: yCount.value, "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => yCount.value = $event), placeholder: "\u8F93\u51651\uFF5E100", clearable: "" }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowCount.value] ]), withDirectives(createElementVNode("div", _hoisted_33$1, [ _hoisted_34$1, createElementVNode("div", _hoisted_35$1, [ createVNode(unref(ElInput), { modelValue: txtContent.value, "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => txtContent.value = $event), placeholder: "\u8F93\u5165\u663E\u793A\u7684\u6587\u5B57\u5185\u5BB9", clearable: "", type: "textarea", rows: 2 }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowText.value] ]), withDirectives(createElementVNode("div", _hoisted_36$1, [ _hoisted_37$1, createElementVNode("div", _hoisted_38$1, [ createVNode(unref(ElInput), { modelValue: outlineWidth.value, "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => outlineWidth.value = $event), placeholder: "\u8F93\u5165\u5BBD\u5EA6\u503C", clearable: "" }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowOutlineWidth.value] ]), withDirectives(createElementVNode("div", _hoisted_39$1, [ _hoisted_40$1, createElementVNode("div", _hoisted_41$1, [ createVNode(unref(ElConfigProvider), { locale: locale.value }, { default: withCtx(() => [ createVNode(unref(ElColorPicker), { modelValue: outlineColor.value, "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => outlineColor.value = $event), "show-alpha": "", predefine: predefineColors.value, label: "12" }, null, 8, ["modelValue", "predefine"]) ]), _: 1 }, 8, ["locale"]) ]) ], 512), [ [vShow, isShowOutlineColor.value] ]), withDirectives(createElementVNode("div", _hoisted_42$1, [ _hoisted_43$1, createElementVNode("div", _hoisted_44$1, [ createVNode(unref(ElInput), { modelValue: txtVideoUrl.value, "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => txtVideoUrl.value = $event), placeholder: "\u8F93\u5165\u64AD\u653E\u89C6\u9891\u7684\u5730\u5740", clearable: "", type: "textarea", rows: 4 }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowVideoUrl.value] ]), withDirectives(createElementVNode("div", _hoisted_45$1, [ _hoisted_46$1, createElementVNode("div", _hoisted_47$1, [ createVNode(unref(ElInputNumber), { modelValue: axisX.value, "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => axisX.value = $event), precision: 2, step: 0.1, max: 10 }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowAxis.value] ]), withDirectives(createElementVNode("div", _hoisted_48$1, [ _hoisted_49$1, createElementVNode("div", _hoisted_50$1, [ createVNode(unref(ElInputNumber), { modelValue: axisY.value, "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => axisY.value = $event), precision: 2, step: 0.1, max: 10 }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowAxis.value] ]), withDirectives(createElementVNode("div", _hoisted_51$1, [ _hoisted_52$1, createElementVNode("div", _hoisted_53$1, [ createVNode(unref(ElInputNumber), { modelValue: axisZ.value, "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => axisZ.value = $event), precision: 2, step: 0.1, max: 10 }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, isShowAxis.value] ]), createElementVNode("div", _hoisted_54$1, [ createVNode(unref(ElButtonGroup), null, { default: withCtx(() => [ createVNode(unref(ElButton), { type: "primary", icon: unref(edit_default), onClick: _cache[16] || (_cache[16] = ($event) => submit()) }, { default: withCtx(() => [ createTextVNode("\u4FEE\u6539") ]), _: 1 }, 8, ["icon"]), createVNode(unref(ElButton), { type: "primary", style: { "background-color": "rgb(222, 146, 47)" }, icon: unref(delete_default), onClick: _cache[17] || (_cache[17] = ($event) => remove2()) }, { default: withCtx(() => [ createTextVNode("\u5220\u9664") ]), _: 1 }, 8, ["icon"]), createVNode(unref(ElButton), { type: "primary", style: { "background-color": "rgb(126, 128, 135)" }, icon: unref(close_default), onClick: _cache[18] || (_cache[18] = ($event) => close()) }, { default: withCtx(() => [ createTextVNode("\u5173\u95ED") ]), _: 1 }, 8, ["icon"]) ]), _: 1 }) ]) ]) ]), _: 1 }, 8, ["modelValue", "title", "style"]) ]); }; } }; var DialogEditProperty$2 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["styles", [_style_0$2]]]); Array.prototype.last = function() { if (this === void 0 || this.length === void 0 || this.length === 0) return void 0; return this[this.length - 1]; }; Array.prototype.first = function() { if (this === void 0 || this.length === void 0 || this.length === 0) return void 0; return this[0]; }; Cesium.Entity.prototype.setEditType = function(options2) { this._editType = options2; }; Cesium.Entity.prototype.getEditType = function() { return this._editType; }; Cesium.Entity.prototype.setEntityType = function(entityType) { this._entityType = entityType; }; Cesium.Entity.prototype.getEntityType = function(entityType) { return this._entityType; }; Cesium.Entity.prototype.setIsEdit = function(isEdit) { this._isEdit = isEdit; }; Cesium.Entity.prototype.getIsEdit = function() { return this._isEdit; }; Cesium.Entity.prototype.setParams = function(params) { this._params = params; }; Cesium.Entity.prototype.getParams = function() { return this._params; }; Cesium.Entity.prototype.bindEntity = function(entity) { this._bindEntity = entity; }; Cesium.Entity.prototype.getBindEntity = function() { return this._bindEntity; }; class DrawTools { constructor(viewer2, options2) { this._viewer = viewer2; this._init(options2); } static initEditPropertyParams() { return { id: void 0, height: 20, bottomHeight: 0, color: "rgba(0,255,0,0.75)", direction: "horizontal", order: "-", count: 2, text: "", lineWidth: 0, power: 0.25, outlineWidth: 0, outlineColor: "rgba(255,255,255,1)", videoUrl: "", duration: 1500, odlineHeight: 1e3, odlineCount: 50, axisX: 0, axisY: 0, axisZ: 0 }; } _init(options2) { this._viewer.scene.globe.depthTestAgainstTerrain = true; this._viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); this._sketchEntityName = this._guid(); let dataSource = new Cesium.CustomDataSource(this._sketchEntityName); this._viewer.dataSources.add(dataSource); this._entities = dataSource.entities; this._pointEntitys = []; this._sketchPointImage = void 0; this._iconNormal = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcEAYAAAAinQPXAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAB2FJREFUWMO9mHtQlNcZxn/nW65GxHtEqTEajUxVoLYRSIyipHG4qG0lajtxVIRFubgqXuOI28ZE7FAvCLKLSNKxg/FSIzdvqNE62kaRitqpYMxovBGigo4I4n6nfwjsCrsLrtjnn53vnPe87/Oc9/2+854VdBhCd6ZP6dMHlAXO/lOngrzMLz/8EEQ0ASNGANNY2aOHxYIdfHr3LuBCwPnzQIKcf/AgiJ8pQV99BfmvR4+orHxZVsLxpZFT0qd07gyP7zqrej3IInF47lwQkTLV3d1xv3KXWPT4MYhLzMzIgHpn10+Sk+Gw74w+jx79HwSGnzUYhg4FED4FBcBq/jtokOOC2oSb0FZUgHpKVoeHQ9GtGM/y8lcgMLxf5juDBwNDlOWnTgGvUdWz5wsQ7c179fUWzz9y0tX1BdZPILeqCpTtil9QEOT9c876K1faWqS07XeMzJFuboCXkpaX1w5hqxl14QJIKYRWCzLV5OXtDQXbon3c3c2/TeMoYvncucAgPrl40Y7fA0zv1QtMydKwb58FL7toRwbDYo3/0utB3OD8qlX2hIkLqalwO0b9+fLlUHJOG9vQ0P4EjfyFIdPZGfqsURampIBIlxsWLLBtL/NltF4PhUIrVq92QGDIeEOmpye4pYju164Bq6n29LTiopy8tDTIL48pSExsDq/Oj9is/eAD4CRbli1DMEFUBAYCewnUaJD8jr2lpQjpJ7M2bBBi0+L47Tt2mP2G5xhNaWnAHrLj461tKF1rasA0rW5b//6w/0rigQcPWhrZKVFXP8TkybaFyb3kXbkCbiO6fpyU1Dwq58vNG3U6BJvEiYMHEcwQW8aNA3pT7O4OaPmTiwuCnlwcNQrEDRGYmytloilj5vr1Zv+mNXVhSUnmOFYEVnt6gtM9t+8mTbKlwo5AoWdySIjteWUcIwwG2LX7o6lPnkiZULTlj/7+wEThm5oKbCBeCOANUisqkNRxLCEBSSzrYmOB3jw6c8Yi3kL5K51OyvkZGXUTJz7LSH09CIPwMBpt85CHhMf48Q4IJFPofHzsbMAAJfjIEQtXC9TZWi0wkEuKAmjEyspKpNN2pyVBQULZaIjbvXmzUDb6xF0zGJCqv+no6NGAK5fLyiz8JssVcXEWgQLUsZZxWmGbrLTN057Agfh7eNiefhpRb7h922LgOzFp2DDzxnJXrsvLE0rqOW3sTz+12h4lLfRZhuQybuXmWmQkgPzhwy0o1jlV37ljh+e3/L1LF0cEXqX04UPb0075rlovLwtBHuqZ5845T5Z37UqbEAPkzOfsUvlHXZ35saFnQ4++fe04eIfftv64tEfgdvkXeweprFIvBQaaebJH+f3x4xbPvsRPnixlQlHGtDFjWq2Wuqj0yz4+QKk4FxNjMVXD2998Y0FRKEsCAuzwzBKv2eZpR6DspxQcPWpnvrNYoNNBZOTOnRoN0ilJMzYjA3ibsKoqoIxezs6gLJbpxcVSTbyePurwYSkT76VPKSgAWQslJcAmenTrBszgP7W1wBlRmZICY2SydHIC8ZCvdTo7Ak+ri44dcySDNDTs2mVufluhThoGD4bHp6or4uOb3zWJnoqwMGAVLnfuACHscHJCiFRmhISA0BMcFob52PDC/8EDkLfkR5GRQmycN8/t8mXw8O73WVwctnvdJ3SqrQXNSJeY3bttaWhHJxMxzDh97VqQAwheutR2IC6pm/z8oOBm7LcVFVJNKNo0oUsXhBKmGR0VBfI0vkFBINzExxoNEKP+ePYsktefFmVnC2Vjvm5SZSVEpGUNefNNUH8ti8rKQCziaOfOVuL2563PP4eCjJhxK1a8hMCJJ7NTPDxAXWIaefEi0J2r/ftbMfyryDhxAkZ2u1EaHAx6oReq2rb/JiTLZKkoUHLf2//YMWCGnPf++1YM7zHw+nVQ1mlKhg2DvPeiltr+GLaj2W524Kd6zZ4NhGOQ0ophI6GSkr4Gq61VGyjx7vdZQoIdYY1xVZ06RKttS1gTHLkPLjVmGo3AJZToaCsGjSWrPFBKfH3bvta0uyR3ySlGIxS4a7trte1l244MtoRpT93XSUk0l0oruFDbqROYUtQ9X3xhLr2WaBpX4+WnOTl2hHkw9eZN0Li5dLP6Dehogc1dexslK/7MynffhbNDvZXnWq9GNJWyiKC69TlphvobtWbOHNgnZonq6hdl+xL/yTQhbKUxeOtWEP9melSUFYMWJSv/IAtNprZLUu4Rf9u6FQpdo49bfRXaBQcy2BL1p+XURYtAZrLwhx+sGDSWrDpc3ZeVBbJMPt22zY6wRj/1oep08zXMUXRABpsQFmqcHhICYiLlhw4BBWiFA/5FOXmhoc8u0Pv3vyyrDshgEwqLYnKLi4FO5OfkvPh66UdudnZHCXsFAptQ96XMW7jQTsm2xAF23roFlD6NXLy4o9m8AoHFR7SxNTWgjGOsVovtxqBxXAzEbc4cKCycN+/+/Y7n88oRvjarcNYsCDtprP/+ewjvZ1xz9SpERBp3zpz5qqP/D5zQE33tptaiAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTA0LTA5VDE2OjQyOjI5KzA4OjAwjRBbGwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0wNC0wOVQxNjo0MjoyOSswODowMPxN46cAAABKdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uXzJhcHo1b3VpcnV4L2Rpbmd3ZWkuc3ZncY9vkgAAAABJRU5ErkJggg=="; this._iconBlue = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkEyMUE1MDg3NTAyMTFFREI0RUY4MjBCRjRGRDc0QUIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkEyMUE1MDc3NTAyMTFFREI0RUY4MjBCRjRGRDc0QUIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/grmkAAAhxSURBVHjazFoLUFVFGN49597LBdFUEpEQI0IpyxIfqU1ZkY/pNZg1RZlWY2lW4yMncxq18oHZ0+lhOaWZUo0zPjIr8W1NiubI+AxBIkRQQsQE7us8tv3P7qGL7gXOPRdzZ3bmcnf3+7/v/Lv/+f/lYkIIMpur2yBktQVO5yM7LRybIvsOFKFGCeHyQz/dFO2Ousflcg6UJSlVlqVEjHEMjNMH5tE0vVLT9ZJAQNnn9fm3d+9z3xEYioR9bNcjW9Z8Gtv35l7PUAFjnU5HLytrFUU9TgV9XXD4+PJhoyfV2/GIFO4TGD8my1lVuGXSHYNuPdyhfbv5VkVAgzWwFjAACzAvp0fwoV++uz6lxzXLolzOW1AEmz+gHCwtq3i2z52Pn2jtlgvXI1LpgQ0jeqYm74y0CGiACdjUxkir3KxMlsoKNj6WmNAlV5Kk9qiNGmBTG6vAlhV+rd1aUuGeNSNSeiSuolGo2X1cdDogbThQ79h21CMfP6NKtR4dw/edYiTSK8GhZ/aO0R7KiFV7dnPpzeFQXkppWeWY9MGj8+ifektbqzVC8KbVH6UNHdJvOw2nHUIB7vrDI89df861p0SRsUSjuiSzB4qxyYzx0TVEdBUNTnVqs7I6B4beEKOFwqThuu7X/IJ7hj/yYlGoM9NqIakpSVH7t67c3C4muq8IyKcQ9EpuddSK3xqcSHJR7g7WsSkCm8+YiSEgRuU9gMbd3k5578kufrcTC8U0eLwF/e99anhJ6Sm/HSHSid/Xv5CclJAjAjlXr+GHP6x07z9JZCSDCBfzBJapBomJabJfdKqFCiGa4RkQgrQA6p+MtbVTEn2dY2XhUz956szM6wdkLRFtsVZFrReeeaRTQte46aIxT4DgrA9ABJKRw42QTLsjimqATgUZwpxNO/0OGz3KmMvWuBFgABZgimwBB+ASbtSSp0zIHutyOuNEg9NW/e06UE49YRBi5LFB2NxaMoQg5iGJfza+Y+MwlwlmogALMIXpD+UAXIBTOEKi4rt0zg51sFft8TjN7YQbnzrbVpeeD8Q+w3fYFCQba9ha5kHABGyRTcrlCeBkVQjO/Wxeb3rA00WDb62rcbHzAARML0hBAloK+lyQ4TEHx2B4BragUS69vl06/6aLnk6LQuQ+vdMyRQMHT/ql/D9VGfEQi00PGFDYwqsP8/AsMQyJbTvABhuiFb3TU+8Otb1CCXFd1SF2gGhg/f56Bw4+B9iCJ0J5Bv93fgAbbIimd7yq/UDgZklITLQ7RTSwp9grs7MgBYXYMEQ0OTtBWBR7d5FX+NQ5J0tCHG63K0GYglSpkrklGkXY1GGKMbdo8d+qkBfn5LB0RpwOeDlc2mo9NNYHbyOMIuCRptvNsCGqXxgnS2dEoslhxMrgSDXOSbL0HlFVzSv6vlMMJigorWGpnJ2ymzRdTrENGxY4NSeE+PwBYQ3ds6tDN1IewvvFRMLQwTBMPB2lxTuEaTvnRKwI0S/U1ZeLBganRWtGwteYAOoR8EgQFsUe3DNamNpzTroVIWp1TW2xaCCrf6xKzDScaP89SRKGGBLkCSMjVo1aZRS1IZrOOalWhCgHjxTvEw3ckhylD7rOobF6ghZJphhk1TO80DK8Yab1KgJssCHMKhgnxYqQQM7i5bv9AaVONDh7VFzAqCWMekLhRZIFzzQWWLzIMjAY3qwsii2+YakDTsDNkkdoRVZbXHLyN9EglKdjh8QoUBSBcaIDEYU91cbtRi7yUFCF2OgBha9lBRZg3nWjuPQFLsDJqkfAtfWfr1jzDSHiR/zuk/GBjO5YQyqtQDU/5WYKCjo/Oicd/JmPw1xYA2sBA7AAM8RFBAEuwMnqYTei3Q95vx47U1VzTJj3uDBZNzXRl9EdUTE+SshnECJcFPOWwraNxj0GYo3OyLM1PgQYgAWYIlvAAbgAp3AKK6XyTPXZ56bOm0f3p/BFFEdr7LwZSd5xQ9wKUukUo/u4h8SdecCHzPmwdtOMJF9ciHodbE+cvmA+cAm1rVoSAsD1m3fmH127cfvSUJOiXRh98nS8/8dpXb0DknWNKB5qzsOIKlwYdIULpWMwB+ZunNrVC2tDeQIa2P552+4jfFsROxd0sbRfm5/31dyMPumZLQWkwsqA9EOTCzqCzdTGvKB7MCNWTU9s/oIOWsHh41tvGz5uNv34Fxdi64IOvNaxQ/t2aXvzVixKTUnqezkSRBqhCm4bMW7GhboGuJw7H+qQW7nEBoALFPCvOx8cP+toYUl+W4v4o6h0L9iiNkvBdnNXplYvsSEtOFddc75owLCxc6jLd7aVCMDulzlmDtgCm6FSEju38RAxztJUumTkoy+9faqyqjDSIgDzgezJi6gN+P9Is1HKjpBGz9T+U1cy+ulXZ9XU/lMRKRGABZjUEyeseCJcIY1i6BY4NmHagjlen/+CXREUow6wADMcEeEKQTxxq96wadfvCz9cvpBuBSVcEbCWYuQAFmCGSgrbSojx0qW9KmfxV5u/zP1+MTEqI6vlCNFhLWAAFsdEl1sIvIAgdTn98muL1mzZtXe1VYCtv+xbDWsBg2OR/0OIKaaB9ooHsqcsoXt8h4Uwu+P+xyfD/zwqOIatHw7YFQJvVthSUICVDxs9Kae0rOJwS2vKyk8fgbmwhq/V7fKwLYSLgWLoPLz9s59//c3mwjKMPTZ+5hswl6ceWiQ4REQIF2OE5QOHCo9NfCVndoPHW3vxHPgOxmAOzOVr0BUlhIuB0Hn2+5937p/77hcLgsMyfF7wwbKFMAZz+Fx0RQoJDsvvL8ndYYZlM8y+8/HKbXbDbKgW8ftd+qQJLQcglFZCaE3qFn81wogEh1mYE/F74bb64RnFAm/DDwy6mPdrkJLzKGfLpsj+vwIMACSZzfDJFmOPAAAAAElFTkSuQmCC"; this._iconGreen = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjI1NDIwOUU3NTAyMTFFRDk0MTJGQzhGMTFCQkREODIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjI1NDIwOUQ3NTAyMTFFRDk0MTJGQzhGMTFCQkREODIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgEE4igAAAgKSURBVHjazFoJbFRVFP3L/OlMoQXKImAFm0JbFtFKShEQI6UsggmkGKghIKTIIgZUohIDKEuLaFTQiIKyKKghqSyyF0pZbcHQsJVpoRkKbYFAW+iU2f78/313+qY+hvc78+dPkZfcMJ377rn3/Pve/fe9gVUUhfENY5eBjNbhvlnI6Bmh+KT5NzBhGigg9sb5vX3NpohhRqMwgOe4eJ7nurIsGwl69MDskiRXS7Jc7naLpx1OV/4z/V67CKpw+Gf1ZiQv9/vWyc8lTkMEpgiCIVGLrSh6ShGhX4ovlG5Mz5jToCcjXKhPIGvyOOG2JW/OywNfuBAd1WqFVhIwwAZsAQOwAPNxZoQ9f+yPHnHdn94QYRSeZ8I4XG7xnLWianq/oZOuBrvkQs0IZz27a2RCfLeCcJOAAZiAjXyM0hqblslcRfHuiV07d9zKcVwU00IDsJGPLeBLS3zBLi3O8nfuyLjuXbegKtTsOrY4Ldz22u2GPFue4bL7MlfrqWXh+xhDjNLL2EtOj0r3jI8Z70kyJcnN4aC4RGtF9eSklzIOoD/lQEsrGCLs/m3f9nxlUP98VE6j1QDz6/P5xZWLI06KJ3lGwIWdB2tfZEgkJB4oVwwzWBgsLY1d6hoWPUxSw0Tl2na8sHjYiAnvlKntmaD3SHxcrDG1f9/1aiScspOZYZ1hGm4dHnmSRyRglk+i/ITQwVywAVvAoA3kMyolufc6iEHv0uKuntkxu1ts5xyacY2nhh1TNsZcpBTxjBl2K4AQ2eD8MiITWXFDmULiYJhUNlXak7DH0d7QnvrUr1feWtgjZdxa2hILKiOzp01o1/mp9gtoOrtsZ0eXjjYXMYhEa/RFKyxmLCaCmBF/NhF633xkCxiABZg0XxADxBJq1eLnz8ycYhSE9jTl3Iq5EWeYM/wjwUPQvj1CEwHP8SMFWIBJbX9QDBALzrNmIhGdOsZkqm3sTfWbhKbgTcSSMhBLiiYcMc9I2CMswARsmk8Uy5s4r5qIsFt/WN6nVaQ5iaZcVLkoQjEpjbD++4IM+hFUQniCDMYBTMCm+USxJP6+bkVfFWRVIny/Pj3TaIpiezF3SjzFN619AaNwRLABSwzhnSOWGxLABh80sz5J8a+qLS81IsY20a1TaIrc2lzhoX3A+2Ui6FcxkRn+4f3j9UEZbdtEDcCUgycSaTbF0RQnGk7wTY79S2xIbSvGIDCPNxynPnUckyYiBpPJ2JmmKBVLuSYCXIA9EWxWWAIPYZeJZdS4cEwGTXtEMBhMNEWthHonVieB5gix2Aft/NIYk6Y9wqHmMGzH4HANHBOn6T3i8UgO2vcxfIzibTdI0Tv88Lw+NMTUHBHF6XJTz9CJQqLs7ZdkLHoIkbbyf71YgpBAbdtxTIoWInK9reEGTTGk9RCpqfGTCDJ6skE2kxL2QRk4JlkLEc+dmrorNEVGTIbo7VxFgowUQlYU4oxCnFMAe0LMBJFmgmPyaCEinrt45TRNkRyZLA8SBkleMj5CMvGclCBJMIQdJgAC2OCDZoZjErUQcees3njK5RZtNOWy2GUu1sk2nidcOAiPX2aUAHvC/1yCBDDh1Khyw2KDmLBF8Bkpt1bWXSm/fpKmhOPp9OjpIhyKGCcWHxkPpQj4b2oPQcJnj7AAMy06jbo/IBaISWtGwF3Dj5tzf1PIIyQx1nRf40phUiTmQWMQTaTI/ePx2wPEPvAF7xWEAViAqXIRoUAsEJPWze6tdn8dOF5y63ZNCbXv4SKVvYl7HSkKItPQGMwjpFx+4he8V5AtYAAWYNJ8QQwQC0bQfLASq2/duTvjveXL0fqkvog6GDooR3sdtWdFZomsjW18Xj5SdhXBwYOADdgW9CpwAJbK3nDMWpC9AmJRW1aBiABww8GCwkt/7s5fpzbJzJmZ9XHrnYfiDtkHSgMlph59CSXC9y8phA7m5sXl2cFWLRMwwPe+w6cuYvqKngs6uFp4tvDApmUv9ktKC1RZSxwl3I66HYaD9QcNFtHC+RpAaDuShCR5RPQIz7h24zy9zb3lQFjFF0oPpY6Yuhh9vIaJ6Lqgg6y1jY5q1bPowOZV8XGxyY+jQUQVqjh15NSP6m0P4HLuntom13KJDQD1CPDa0NezFl2ylBe2NInLZdYi8IV8WvGCDJi9YC+JoXDW3qm5V5aSPmUJSnlBS5EA7P5pk5eAL/Cp1pLouY2HinEXtdLlo96Y+3ll9W1LuEkA5tjMeauQD/h9pNkqpYdIU2bq7tvKM976cFFN3f2qcJEALMBEmbiqJROhEmkig5ZAycz3s5c4nK56vSQQhg2wADMUEqESYXCTcWfX/qNnVn6zcSVaCmKoJMAWYeQAFmCqNYUtRYTBTcftnNWbDv68dedqVMZlrQBgA7aAAVgYk3ncRBTcNd189+NVuXlHi7ZpBTh07PQ2sAUMjKX8H0R8ZKB7qhqbOX8tWuNHNJTZI2MmzYPfPKowhq5rDL1E4M0q4w7qRnrGnBxrRdWFQDYVN25ehLlgg21lvXHoJoLJwInjHrz9M9/+5LPmyjLoJmYt/BTm4tZDCkcMYSGCyXjL8tnzlpJZH+QsfmB31PnPge9AB3NgLrZhnigimAyUzrs79xX8s+zLn7LJsgyfs7/esBJ0MAfPZZ5IImRZ/mrt1iO+suwrs1989+thvWVWbYT9fhc9aQUdB6CUVkNpje3SqQPDMgpZZmFO2O+FW+o/niEsyDb8qt7Rd78GLTmucrp80vz/K8AAYAEv1AHM/GwAAAAASUVORK5CYII="; this._iconViolet = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzFDREU3Mjk3NTAyMTFFREE4MThDODBGNzMxNDBCQzEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzFDREU3Mjg3NTAyMTFFREE4MThDODBGNzMxNDBCQzEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppb+WxIAAAhcSURBVHjazFoLcFTVGb6vvdnNY0lEEJOIxhCSKTEFKSC1osIgjqIyA62mZfAxWJU+tC3TVh2lHSGhtNOKOqK0ii+0QwcfFB+IAsKIITpJhUBDHhMiSSBCTMgm2d377PnungubnXOT3L0b6rlzmM2e83/n+87/n/+ecxbeNE3OLvLFV3Fui3KiivNSkhmTNb7EpagQQvzxg++VBvxpc2XZN1MUhEJRFHJ5nk9HO5mwAV03OnTDaFYUtTocie66pOymOjSlYnzeq0d2bn02c9oVxXcTAct8PqnYja2qakeJoFdqDx3dNH/xij4vHhGSnYHlSxf5Out3rrjmqqmHglkZa9yKQIENbIEBLGCeT4/wB/f+c1LBpXkvpsm+73IpLFFF/bKltf2esjl3NI005JL1iNBSs23B5MKJe1ItAgWYwCZj3OiWm5vOQmvt9ttzJ4zbLAhCFjdKBdhkjNcwlht+Iw0tof6zrQsKLs19jWShIeM40hASure3S727O0WloV/QehTeSo/ZsilPzjCC11+k5yzM0/yTs4yhcAgvtaW1Y2nJ7MU7yJ/GcKE1EiH8B1ueLrr2+9N3kXQadAIM7f1abK84LEcOnBFFXuREMpk8TyrHx4jhMQ1OJ5x0U+f8s8boeY9MUbLmjNedMEm6Du2rqp17w5KfNTitmRGvkcKCfHnW9NK/O4kwIjp37JdfpDUv+jSgVw+IASHAofpRef/gSttQ0Rc2sAUGq5Axs2ZM+85GcPAaWkLT528/MDF/QiXLWPtG4Rt/tM+v1vSLMi9zPl4iniCVeASeEPjB82QQj8Az8IjOaZxqapxiKpzvygy9aMs1EekCmTnrX7WdfHjSjEUbWCE2Io88cPeSnAkXjV3J9ERY5xuX7PNrNQOin0/j0kiVUQUI8llVSnjs79FHpjawBQawgMkaCxzAJdmsJT50X/ky2ecby5yllTWy+p9+MY2PkYonb60RUuER1udBoixBMgcsYDK3P4QDuIBTMkLSxo+7oNxpYfe80eaLhZPMSSSkUAU8vPWvFVr2QrdimD7xfWw7nzUZMgdMYLPGJFx+DE5uhfCbn1s9JSM9UMJqbF9TJ5O5tNZEooh48o4Lk66fwWJIJZjAZtkQLsVvbFxTapm7ECKWTSmax2oYONgjRKp7RSluYbsRwRITS9cxQcDGGCybKSWF1zuFl5MQeUwwcwaroXtbmyTRWLdFkJekKxGDwo3nz4nB+iEVY7D6Z4/JmgluroSkB/wFrIa+z7rE2DyeWwfJiEhcO2fXD3n69p9mzjrl5EqI5PfLE5hv0qZ+gach4TacRhJmwFaaB5i8KCfJ1RrxSZKfuW3oUflE8l49kvg3xmCeX2KcXK0RMut8yo7BqSqUk+DqPaJpepjpqmyfaSbs30wPx24WFsZww2koIWYkqjDP0PKkDAO7WOuheyevBRgGxQS2XJjO3LZTTqYbIUZvqO84qyFz9lidyohtzenjRYT92LiZsy9kbocpJ8ONEO1UV3cjqyHn1nxNw+6V1tgsJicmdkaJCbDxgJ1zW77G6k85aW6EqF/WNVYzc3lZtuGfGdQ1sgXHVtwW4zbM4sPJ3tYDE9gYg2VDOaluhCiV6zftjypqiNWY92iponKKdZ7QaHUjJl6EbQ8sYOY+Uqo43LCEwAncXHmkuaWtu7H5q09ZjTieZv/kEhWHIpXURDHx6ydxLcT3OSdCsQ5YwAxeyz76ggs4ufUIXNv3/MtbXzfjj5BxZeK6aYpvaoYetUhECRnVqhoNNyvkTIP5WbNOh7H+sAUGsIDpcBFhggs4uV3sVrb79459R052dh1hGgZEs+hfP4hIU9P1iEUmapFSDGWQqPjnLHlDoQKiHGyBASxgssYCB3ABp2QOVmrHyVOn7/3V6tUkPpkvImlsmln83nXh4NJcNWKGuYgRIxcTpcQIx1fynd2OvrCBbfG710WA5bA2wvevrFgDLk5hNZwQAPd9uKfq8Jvbd210BPCL3GVPfS9a+PbVYWF6QA8bEBSrYYgzI1a1Ptvfk4q+l791dRi2Tp5Awdjvf7y/joaV6eWCLpPUy6p2vPTElWUl84bLSOH6XqHn3Xapd9fXotLUJ+jdmrUBFHMkU56UaQTnkkRxc54WKAkaw2HVHjr60awb7nycfDxGhXi6oIPXsoNZGUUHdry8rrAgf9r52CCSDFU7a8Gdv+sN9eNyrsdpkbu5xAZALwE8NueW5Y8drm+uGm0R/21oOYCxyJgtGHuoK1O3l9jYFnxzqqunYcb8ZauIy/eMlghgT5+3dBXGwphOWxIvt/HIGKfJVrr5xh/+/E9tHZ31qRYBzIXlD64jY+D3kSGzlBchZz3TfSbUvPiu3z7W1X2mPVUigAVM4okmN55IVshZMSQEjtz364pV4Ui016sIghECFjCTEZGsEI5u3E5t++CTz9c+uWktCQU1WRGwJRiVwAKm06ZwtIRYL11SOyvXv/ThC5vfWW/iaOf2PEJsYAsMYFFM7nwLwQsIW5cTv/j9uq07PzmwxS3AR3urt8AWGBTL/H8IscX04zp4YflDG0iM73aRZnfffMeD+M2jnWJ4Ovx7FYI3K0IKB7Dj8xevqGxpbT80nE3r8RN16Asbamt45eFZCBWDw1AP3v7lP330j0OlZbTdvvzhP6Av3XroqeCQEiFUjJWWaw7WH7n/N5WP9w+EuxP74Du0oQ/6UhvuWyWEikHqPP3O+3u+eOIv/6iIT8v4XPG3F9eiDX1oX+5bKSQ+Lf91w+bddlq20+yfn3n1Y69p1qmk/H6XzLRJjgNIpR1IrfkXj7+Q4zkzPs2iT8rvhUfrP54RLHgbv82Ps+/XsCWnWc7TmKzx/yfAAHo1CtU9myPWAAAAAElFTkSuQmCC"; this._image_arrow_forward = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAAgCAYAAABkS8DlAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMWFmZGVkNi00MTJhLTc5NDAtYjQxMC04NDExNjRiMzQ0ODciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTA3MThEMzhCMjc3MTFFRDg1ODdDNkY4OTc4ODRCRjUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTA3MThEMzdCMjc3MTFFRDg1ODdDNkY4OTc4ODRCRjUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YjI3YWU1YjEtZmRkMy0wOTQyLWIyMzUtMDFkYWY3YTJlNGUyIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YWUwMWJjYWItYzAxZS04YTQyLTg4MjAtNDU1NmY4NDVmMjBiIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+BD9OfQAAEDhJREFUeNrsXT3PJEcRrho2QQ5IkAj4HfwJEhLInUHAjwBBgEACCRC2gAA5MEiQ2QRYpCQgPiJbsiAxyMYGm+O48927u+8WPd6Zd3t7u6qe6lnfe3tvt9Sa3Zmej+6uruep6i9+9NxzTPvAh4MQHf+Z09RCfsPRzUXInyOVa9b/Hnq4zMBdmnv9dhnp7enpDKtToJf9f04/5OZajQiwQhK4UmWskAUtTa3avSAV8aj9Ro7a7/JcDz34UtkVba/fp1JGLrCSpQvmx0EASnAfwZ8V650rgMugdAkA7lIhGGSQkMP1wxs1oqJds64jxIZOyg8jGTmZ2BXXdzfXOf2WozRykub4XAeWbiktK+deR5299G9+mhXgd1N8McU3z+wBqFrqNTLAQE0xYNE7ROKkS0J/n5hppJJXAQgBBT0SrBCH4yNP0K6TjsP3SfUZHlGxiA9ViEeNXOyyNLsszXVxXxmv1fTyDECL2Yazi7dJduRp1Vs9dJdQJ11nCF9K8ZMpfj/FN5pr9XQMgGptt1jPFEhvWd9FGp59Qdo9Gvk4h5XvfbsFvEPQMxF5JgeOZf0OgW8ZjPKI3jd/wzD9Lo+7gohcT+e3Bbko4674v90fOUXZHf7TLnvWdddwPfTQw4WEzaS7fp3ij1N8bYkHQLPec+bHDdZwrsxF8SZoYC8KYFDWETRUniv1fJieCDGAq/Z8bSwDWgZEtW4X37MiFSCV4LElTwwSQ494kXOfFP8/UXipNDLjkZ35sRGylBMXOX4X5zK4qxCOmVhsMwKSx43yf5OlXxf3dnLSQw89lPj9hRQ/m+KnU3w1xfvn8gBQ0JpHLFvb2q/34deUvxjWvgb0kT58Bq1hxPL13uNZ6QP4Tu97Ix4C6x2IFwUpj4hXQ3sH8u3oteg57TuQMkO+r/Xbau/PycmmIBzr7Pfj7Pp87Sr7vT785hRlk5GcHp5U6N74HvbtMJeI91J8IcWXU/xbCwGwQNvrG/cG7KGg7H2DRwyQ5wwKkUCfMVTyFiEELfdEAMRIV+06iRIA9PuRb1wK4lGiYZWRlq7iAQgTiyUEhQnv8tHS1fI9BGXMqmO0fq137DJisi7i1URO5uPj6fx4/DD7X6Zbd3LSwzNOAErMemkiAn8pSELIA+BZqwIAjzc1EL0HJSje/S1WeASQlzwXsbARr8K5PQHnsuqXehdQS/j0+n5Cq/atshBQ0XuigGqBfQuZGgJ5o4bvjJIjPkvdtsssSmZr77iavB8jyXiUkY2RiDyczj3Kfj+Yrn2YpZt/bzuO9XAmD0DeJfnHFL+T4m8mOTQJwED1PnAEqJda8BqAc+B7UOtaAGBBr0UHEUa+tQZcVlcABZWkl1YMMEIsYdS6jIAc6vmIgLTlGVpq0aNl3jImoREMmQ3vD0pUEALHhpyg+YwAey6XA0AgozNpWtoQ0v6HkD6IEc9tRkRmYvIgi/ez3/em4/+m45x2Qz1cEgEoceftFH9G+wGCf496AFr6/C0vAmLdKySDWZkGyNQ+6wAhHC0uejLARah9vECrm5waFFNUCVmgN5yWdwiIxsNQ1H/Uy+DlCx1vQADI1cBwiTKPkpHl3RKH6amtXo0ocYl6LILyeCNvVt2j71hC9lrG1ESeHSH2pOjWCBmJfFftnGTk5P5ERMb43+n/Byn+OzuXX3t89NS7OR5iA3jRxy6w36b4rRR/F+0CiPb7e258aQTw0gL20nrjDWrPo4pbGPVG5B4UT1miwNkKuMh5VPFFXP8RBbhUqbVaXUxtHpOlsw9axwNoRCPaBeC882ZciEcKqLCyW8BwaCgvVBZQr1K0Tmr1ER0/YbzrCITR5wr5U4qXkoaIt7Ce7uDFXGrkRL22BHo1kfdcTWTkPym+P5GSf9F+0N3b0//3p3MfTKTmNgkAVbDr9RS/meIvLAJgWebeNaL4QMCWlflQdhmZmRBhsS1MN2qha982NL4zYBFADXQIlsUSwGtR/i19wxGS0gpemLV5rDSHj58AwIAZ6FY5IhUWEQ6AOXM2HRm15j2PD/KcqCejdTYJUVvXFS98XlQnDQFdvAToOfunLYaG4gY34gWqbxEvMOopR7zn6AJ2+e/Re/K9FH+S4ju1ymwJEVIghjVuFYoEGpL1DXkQsFKIsLUKECdUba47WnZWHpD8ksMQvWfXGGb5OgG+Q1tVMvqM8t7IEtNI2VvpxCkvtEyl+l3ilgEiP1q55jIoC/NuvFfYaMMElE9lczGxvo0b86DVpSzQhWiQxvtr+kiMMhanDUXzKISvr4J4bP16FHd/FqTurXYrICC31BNSJ2zIXjkxXoB2VMvPp1L8Woo/TfFzHgEQowAFLMDagjxcqUA/87oClYAyJ6XhREBTAvfVCIYYjVCAckbA2RJycQSFi5+sAEe+uI6leFhRHlEm3KJEBbB4tPITkOwyqFS1bjJk4SdEYUfkWQy5jACCR0CI6otfeRa/V67aQl8CKO4WHdEOnAzLbfRJUskvA+DikVEEsDQ9jui0aSqySbzYAVAkPy1BFmALGwZOxEjQu4TFXKRNHHzLr30+xV+m+HyKn5m7AKIsDun3j/7mhvdaFSCAuxeZdsgN744+h2l5l4D3HM2diPZpou9t7Y/kQF644T1L3LWeaxidf3/OkfBaHpeU//H3H/f9L51aiHxvax211Dc6Y6Hl2+y9Pc4jk0u6ABHdQKAcU7DMiOJufG09EwGIJOKab+2eRvR+BNPQay33l+U1jm14ZWkXAOLGRdiWtyMgwlS5YG7sMGEBLUfEOkI2B0LvQayUSFeC57KNHKPWYst+EFFvTov3hSqeDW/cS83iQrtmOOB2RNtRixsQUSaHe8VU9uLLJyPtwHPtCpDO86awo7ti9ciwXrQs9mjdWN8kDe2vxTpmMD/syLJXl863SkQfH+sutrzbWXcmm1vXe5a2AN5YT68zWJ4Casmq7AyKwvAEp6XwLUUgZG+ZS6DLiEFBR9YxkEAjkqAyQIkJohxa6oYbFZKnTCOKBumSEPCd7NSfp+ijOz8iZRx1US6RM1baBBmuTISIWG3QyydX+u2lkq3IeB5PFoXaBluhXT45MYoYRXWChZPEsq2KAcLR8Q61vAoom7WxJZ7coWSnTCaAnvHSlLMSiu/NBpmKWocCkOzIFveahR4h2/Z7T+9+K8WvpPjVAQQhcVwe3qA6MQqOlYxG9xhA+8JrDVEChYsCnShPbLHUCWDT5DRmURpqpIxR0EStXAZkDQEetHykoazF8FIJQESQvFnAICH5wrInAcvcIgZWPpV3iNUGI4NzEY+HOHUaLVNkDECE7EmQwJfGS8Qjxwu/2+prZooPxEXD9GzxNiQD88za96K6PGIMoeO4JNjOI56c8v5x98Av0n6RoH8OhkUsgRcgzDHafyFKYxEQQKKj7cXJjwDP1nY95IyNSYBsRZUyWgcRa9ADfw4KJUK20MGlrcCOKuiagovOICDCBxp6HiiEVHBxyfPIWXKlDTBjhda2TBVm0DPIwLdansAzWKGmvLIB7l6/bMSrihJDDsihAM9EZrGgso2Ut+ZdEDBfClEQRM8tGVQYGQ+HzqjgRlnIwzgN8Ospfjk94g/zyVWgceQL5HhuIc2NoW1L28JbvalsnmJh0l3hVtcCG+RkVoaSuQnRDYc0j4onIBJQdJGpY0T1LYUHUJFGWLrnoq2VkCdDkcWrPBlG9r4gh0wPhocGXWZbew7apiJWk9Zm60RFTCJXey4B8sYV/dNKvgT0aFkyUNMBg6NbvHyDg7g+uh1tUyh5x9pbnawg7QuRI03movPoa3p7AGW4xQMTbVe2YViXj3yRoX9Mv9+lvQv/JcczldfFGyl+g24WAsoaa8NCQHkYCJ8T2rKgD9JAoqsORhd0QI6WVUPA957jHZHvtlcRq2+gg74/siOdZQW2bK1L1L4KHJKvc64EiD4HSVdZclm9Z2iUjSUb6Gh7EZTph2A5WGVTy0skr6i8DwvaSPS7tbIWalvds2X5cDrjEWmnSBu2cGm+Pu6P8HCyhMcV+8b9DsbV/O5NwPredP4eHZYgHuMVPZ1hA+CjuxTwymHiOaCK40KuMZjWUbkUuP9wD9+42D2LGbGgIiPRxWGibFg5FqNGLHbPJW+5n+vCI6bl6b2fHE8KSo4igxSt+cMSlLn8dq4UBiKTkXn4iOcqQqzF8Rp49eYt2d3igSNjvQjNChycNJ6F7xGhljU8kFlTeTqtrMXw9NW8C0L24EV2dAgH2i5ax1s63unwwQSu8wZDI9iOGwyNS+jOa/3fn9KO6caNinbUw5JgyRa0GdDKAARRFLG2+AYFG5jnMkVchcfXxHTdiuOytZSOVejS2IC8iszeXe0HMdxtVeCKEiPNnUkG2A+Om8xTWFYdDUG3YsTNq8iJIKSPi+pBVy9ESKEF2uKAH5tk2RfHSBtBlVWETFl6wUuHki7U4CjbFgfbCmLZbiaLbd5mON9e+PEEpjPQPiyAd073cEq7DpssPVxyyLs7RlL1pxS/TcB2wKvTB90IuFQ8AB7bVBqrKnFRDwHaFy4KMEWtaALf4ylZbzlhtr0BQgB4ZdfFy5vQMitVUymn9+XDH22PAkoKo91U1iJRnifCA2zLY6Kl1/oovXtbPQ6R+pSK/LSQWlEs5+hAPQHPkWKhXk3AupkAcjMB5Ayy60lBbjLwvJqANU/3+ADOcvnQ2cH/GQF9zrFhrtWXU/xRin/+SK4dsrc6VSriWRfIspGFkpOWxoxaz4hLNToTAPVgsML+I6QGAT0UCCygtFb+I8dNGtnKWahcubo+gLSlqwWx6C2wQWUw6i2QLFfeltgEeFUsMuN1B1nuZ3Y8CdaztxmYXhf/1wXYrqfj1RTXWZp1FrcTuG6n2EMPlxuerGeFC8NwHMPwQoo/T/GvKNlbATwRcYtrykb7BGQhHgZca0SxEdh4FR6P5EcsO9QyQ6bRRTd6sfpErbXfkVH/5RKcrVaZZ1Eu8UoI4BmxtoC2ABdfXEYgi3j+v52AdDfF6+zcNvu9no4zuO4ygN1mxxyQt0XsNl8Pt45Yd8Emv6Xw+xR/mOKrtB9nAYeVAVxWP3wNlL3FIKzlZJGFJFpdksgKS6cgJJDF71mRiNehVYxQELY2S4m4l6XY4tUjIMrzquMTKOAN0DbSmcFUClC9zq7PabbF9esCgL1z+bN66OFCgb2D/4WHUQe9Qvstfl9recAKAMxaPz7iXkUGEVrWaHS0bmR+prezUmSN+cg3Bqxtt3VHRjWj3QRz2BWWKhXgqh132f/r7Pz14Zzk13fF9fIZPfTQwwWZoj08sfAO7Vf1+0GKr7dywJUBTBGhQheI8abLnQJsm5cq0reqLUHsjWL33scFoFrLD9eWRC1jDYRr50T5Lx1Ye+hWcA/PRpWdo34vWkZ+leKLKb65hAPm2wHrGxacTnPSRq7nA5G8qTBWvzS6ap4G4LVZCzXQ9YBYA2frd1dcXXH1cJfq86z134Wpy9uTCyvAYt4Vq8LlVm0NdLm4tmSnPLp7rUG6BF9avqTX0Z1ugnLOcu51dOdE9xbz9n8BBgASWdK5g1XGVgAAAABJRU5ErkJggg=="; this._image_arrow_reverse = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAAgCAYAAABkS8DlAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4FpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMWFmZGVkNi00MTJhLTc5NDAtYjQxMC04NDExNjRiMzQ0ODciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QThBQTYyN0ZCMjc2MTFFREIzM0E4RjQ4Q0YwQTgyMzgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QThBQTYyN0VCMjc2MTFFREIzM0E4RjQ4Q0YwQTgyMzgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YmIzYjdkNGEtYmQwYi04YjRjLTkwNmQtMTRhMTNkNjEwZWUxIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YWUwMWJjYWItYzAxZS04YTQyLTg4MjAtNDU1NmY4NDVmMjBiIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+EmbDrAAAEJdJREFUeNrsXTuPJEkRjujpmdnd2b1bYFkEAhwkpMPi7eCiQ+LuPAyEEMLhcQiQDgmEARL8AhxMDHxsHH4C+Hg4CAMDIYGziBMVZO1k7WRnZ0R8kdWz2zObKeVUVU898hEZX0RkZCQ/ubigkQ6UOGUZzfDc2mq096CRkUa6WRSNXEvjf61R4Y0Q2b1n5/anJ9vRJwdMchM51gsqsxzJOwaQHvF4Gl03UpjSuQJTNs6RY+vcAmiPgqU4SuN3Nu6pn6/vpaYAcXlX+it7zx5CAPh4yt9N+UdD5B9cdqRb2MVDEx+C2lXaFEC65M3e9WVdNo17qLimxrtQUK4BT4JAK8a79Puu+sh6PzsAbfU4eh83hIGWYLBb6upZXjkF8FrKP0z5zZQ/Mkbw4CQjje6/vroYFbs9dS4B86Q4X643jazdvylAe6OA9qYBrhYQWsCn3cPF+T7YcjpK6LseaCP3i6JRTwYga4KGouk/rTZaXsti4Akr1rUYAsMqC8DrKX875TdoTCUMrX6k0f3XXhc5VJ25ANNtAZ7pnNO5nFxd00mRN9X1SQW62+Ld1ADpqXGsAXJJUwDAIs+Vx6mhNUqwHaegOLqvqcrevPYUpBJ26iBgucT4vdayq3ex5J+l+qwlmrID/K2yMnC/oNaDHuB+JWv8P0j5s4PbjjTSSApz2xYgelacn+bz0+Ke1vW2AOJtA4ALcN1hwNLQ6ATTKoUqAPKeE0c71jRNUTRvD6AsIBADyFogwQ6AIMcIeCMAHRUErHl0ZF4dMa9b78/lFDa+L2A7tMo9BWik+p1dISQqAHws5a+l/HbKj4eqOZJLiiNdZ1q01gSccpZB9jQfl/Pz4nzJdwqwPasA+bQCWc3Ui4IeApbe8572Kw3iYwWgxKFWSwuManHeNy2Q9kaTOPXSwKp3zrlHSy4BDNXMyzZloF0toYDJd7SjgBZOQLvYNKKXuvWtloCItkfp9Ke2FyoAzEzhkxn4vzHY/kgm+d4+kD3LoHleHJff7uXjct26r8wL0G46gbNxnyAg7Wlz0wG0Me0+uQYq85hbbQHwTKceOEgQoJl057AImGvz59c0Ck2nC0SAsSwEqHUj8i2tv7W+pUa7liA7AZYAcjR9XdgRWKjQ2pEBywI8jhABYPYS/FLKP075M44JY6SRetK2ANN71fn9lO9mOrxbnN8rQDb9xudZCz4HwJQCGiqBYCrgdy0mEQE5URibKMylBSyTo915jDwyt6oxPA9E2Dm3NH1vbpsbWqsoJdO0X68fUS3dA3A22l2CVgkPG7yyS/D9njCDrGsXh75QS4vnG4GAMgP9x+AYQdf0E/AeBvjIznOeADB79s+Oft9M+UMdHT/S8aTTDKYX+fggHx/m45xfKc7vF0C7AO8W1IpQMEU0UNDbWFBty5ofZEcLbmkOEziAGRw/GuAJyCQQTcn5bcd7mQDNFxG2LOBH6hRhlhJoBwZaCtWEkekGASwmaN9pQoUlVEVAlp1xbD13ZfrfXzqHCCkofSA0JqBAbbUTg2MgMi4twQ39dlRw2HmvJQB8IeWfpvzFbLrs/eDtTfstcSeD6KsZWJfjo5TfW/3vYb5eQJZBCdUC0QjoSsXsraU7iObqMVbLgckzBzL5c55rrFKKRsZSRc5q1S3yXTkotelOQ+1nd9mxYVYUAjTuKIhbtIy8R8hehsVAm7cAaAKEC+kQxObb5nnY1vun9ruejUV07hrR/D0rQ49AgDgPlrCPll8DYDZ4j7XKAPX94ICiwri1gEuLCgMKR6v9vPpq/JaBMqvLAL+a8s9S/gQ4yJ5nupfB9P0pvy+D62ydeJx/e5R/f0++75zwtaM1o2ETbMVkEhbD84A+Im55modjOhNES/YGbO2tKo4Jc6qKxEGQtPquZWZEwFP7DOpVjWjZiBNaRNjSn69DgTRLxajzXI+w52nvHASwCMP3hCgUzHumLsrHUS18GYvsCBwC1Kc13iyTeY8JGp3TZ0f7RpwNifS1+Uy+74qQ7ZDI4Phkh883VkMIO+2D8lbNzB9RLqBVAB9M+Vspv5M1VW9wlum/hikqEDzBNO2g0Zs8k6VHpIjJkU2T3GVwCwl0kucbiswptjRAD+gQT1tkTi0aSMQyM0faHPm/xTBaXstEWJANhUaYC00OnSJwono1wVoTgBbx1KFfeV6WvCXgSxnyBZ33D5k0wXFCDlj0Wm487dYTJGVlu7ToF5nKWcrlOechJmzptE5EV2VooI2sXkBC8EZB1uOHETrRcDTSvlDfbIobPpfyb1L+RQP8EQmbi4GOgDgDxBQdgKz8xgEtEjGbeYO3Bf51Ga0wl8g1NcxKPVYai2ARKZgp7nTEnQyWgMFFjgk5aiJG+1EarxFQqyWDuS2XDJgwo3WghoUPmS+NMJ3yK0hYVqTNidYt2+qxOiCgzEFabwFb4B1sjePI8jEkLgEFtU82ymLRT9STXYzvInSEWi0JrCOTv6lP6/9s/I7wn640CwAfoEsnv9+l/GWDcLgxANsgJeoAYqBCHlPmQOcQ2V6n67UaHUQ5rmWwxVSteSNR+icCusi8Uk0L3txcb3v2vMVjwuibGHiHN6fp0UOLltmhFXTuMsI4OWhdQTScqGc7U3tumcE+ZpApinOftWGMHEB4RcBdwH7hhgVNW+/P1WcZsKwi1lOvLSLToBauRPi8p2R69BzhERq2eMKkF6CICfOVQKze7vTYPAXw65Tfot3lU0joQURjRADdezcDDeqBmOVUQgEmaAxIKGh5xCQbCVrSIkZ0Hr/H1N6zjCliSmv5Dfd6BaPmNc9aIAB9IVpMj8ORpqWX72yvv991/EOdsBzggaaU0PlyRNhsTeG0fD0kQGMe86SOtkKdYxFTsxfAhwxeUT0jmrVhopiDncVDJgfEEQ98hD45MA4j1iKEJ3GwnZhiFu+eUMzRlU4743ijAjmHGbllykL2OY7Ov4hjFSijL3HDbCaN+6yYz86cjiASoyWtevPh7GikvWDsCXYMCB8eYUfNaXGLDYcFUwaB2tJavb6MrNRQ+pq9cWNZ47gYyWJoVwyMcwnQDKJ9e2M/2o8REyriF4Bqodw5rjxLROT91jr2iBPyGq2bO9ug12rHYHsglhxv/r4WNiOR+lBlM7qK6CCr8WYB4Pt0uZ3vX5VPiaOdR5mSx4QY+C4FTFaL41EmKGkxZi6eZpBIjHsYnXdETVTWGlUBGYeA7ewJdhpYiwGMKHMXh2Fb1Magqdeia89EyyvGAzkCawn2rQ1FPCuX1p6IjwfiVc+geRUBlOhe6lHHKhS4PcHQmvZA55kRS5KAdEPgN3sEbu5oYw7wMwRoI4AYoTNkejDCs9Glx0jYbERpphV9Q4Y18akA8PeUf5vyV1L+fdCc6g02r2GQzpdOoo9oLHkAMKrlki3YCFP/sknUAUnzqxCKaWQ9dZaGaYw7Bi3qfISWmzrrboVaFZB+UdrUYi5QNYXEwPcsCxCqOTtty7SiXwQU9BgoKwFWNE1joyAv8KyOEdrzIvihfg89q18iIG3F/kAdC6NtXf+3Z4kbO/2AWJwlKGBxsI3Z4N1k8AWP/jkwnpt9WqwC4D+lP99J+Zcp/6tz0HNAo7I0CnYkr54EgJNQh8VC03Yjkd/QAYoyBwGYlQDaMjqtENW+BGCAVuAMDkjGa6wvVjkQJzVP0udA/3PFJhFth4GyOhqHRIUGDmpgFKBDxFqmMdm1MUw4MB5RK0uUR1lttMZ7noFzRINHhfT2+8TkC9b6fYuvWb4XkdUJiACH+JoxyGu8PlizVPYqAMuTi4vWA3MgoJ+n/Brhc/PzJkEfpctVBXMgng/TbrAezUENia2Nrmm1rAiexcGKaDWB1gkw+p4Zcx2dR7aes9YDR8oIhOBtlWMnAlb0vRIc2JOjya/dKAfdHwAtU3RLWWQnPuQ7E+mOc2v2MfA2FbKesTZu6WnDKA1QR9u3/78b9yM6hhDa4JXtb9WLKBbILDoevMBqGt+eqvb16hUJXYzu54A4hbYDFTG1lr4SyN/ZqKMn6HjOnc+e0QSAOWmhgDUgPaXjTPPqhiX07qN8nCMEPs7CycN8fj//PsdAmBtl22j4ySESCRDPmqiBIBBDAk6UGZECKMh3J5DxXBfgaO0+AXWlFQBtlbnRLyyN8Mw9ghRaV689NQbrtT3ar2u2G+4V6iJClSeY9AgPER4xrR67+2DUQxu9gsEa3nXIb3jPeXTChCsmPd9DlF5PQQ1ZoywBYE7aZkCtRjlWAeAmpHkq5m4WPuZQx6/Q1V4Bc0jjB1koWTbueTUfyx3ztp2DskeIiOxJ4DFNlPFqjHBS7mNQi0QZOVK3ifRoglMH+EXLI53PdAoqXaArnXWK0BGy10VUWOwBME+Dj7RppEyI0HAIUEXvYcAipT1v3cNgOTxAR33S6o2NohFue3zfPMFhTXRD8QQAoqvtgH+S8qczWLXW4w4B4CYnbEZp2fN+2Zr3ohJEyusH+d5y+9672SJzVtBLr3m2cT+XexusmWpAtaFDaX+HAnOj3Grb9AJO77bHqNXALs+VyV0UZh6d9ukRsiLadKStvBgHiBUCsXagZW7RjyO47O0oGVEsKDBOkSkGMqyXUYuBrHjWExYQS4J3D0esErYAcFXNmVl/KuXvpfz13Rc96+izgaIjHYkoc14IK4vQcScLIeeFEHOaj2fVfaf5+jTn+fcTAACmgCaGaINTh7a1dj6/R+CJmOFbYBed70fKjW4vjQJ1r6WmVzDy/AqY4r4RnjUHEWx6rIsR4Eetikhdestujd2Ipr5ipdveTqSIMKAFAFpWue1t/rY1WenVre+m/MeU/5nyX1J+my7nzctNT45JUx3p5U0zdfwn538fcTm3Od/Jx7Min1fn51kQOauEkvJ6m4WU5fqEsI1GagZiMTJrsySieIRNVsBMX3XiO4N5dSGD4Vtm1hoUDrFHuxG+N31H1LKx044tM7AV26DeLY8I22iHwTbUVn71cPneXQx7o1MeIupodBe/cmfISIRFZzO7/YiQyBRAneZ56TfpMoDQ5+n4nQBHGhLVSP3Esa1yKXBsi/NFQNlUQshZPm4LIWU5bnI+KSwsh7Z4oJaNXl8DxMrQ40/Qqbk/G88Rh75JAcs1/kOW1SKqjaNWgbaVYFdoZMId+CZHiNDKiewsiTqMW/2NRBM0HQR7BIAlvU6XWwe/VWgeIw1BYaSRnncqhYg6b8HfNvn3WiA5qYQVLs4twIwuRaWAw2IEFFF/AUR4QQQfpKxr6oPWAxEeiGK+A9Hl6hG/AFEsBl55kT1fVGFhu4L3/yHlv6X8j5TfGDzotqcB/iMdbZpyfvfIJehNJUhUVhDhQgAp/8/Fb5uGMKIdl+9agYO0zZusQa9NOSCmew8gUY3Dm9rQmJi2MRFS7poZRsvYalukHtrUhXL+9NSaynmWMAFAr+KfU/5Vyk9ebs028I6hSA/rx0gvqwT9v5yPndg3tB9JcqNcbxrP1cJHKyqlFvu+tRcDExZ2WByQZ2Ng90Q7RdgGg2AeES5qfw2kqM33rZkCGDx1pBfX6dFXDXobpDTSbeo0K6S2F2obDb/bCv+NOBIigYy8CLgtE34dO4FVwWd/Q/Wmc+j2hdGCDFp/OZWgAzWqDHp7qYlXXvaBeBPrJYd+mdyQjrJ+4+DzJfBPDYKo91Uw9wz5vwADAFVdqz1vyN8hAAAAAElFTkSuQmCC"; this._image_h_l_r = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAAgCAYAAABkS8DlAAABIklEQVR4nO3WbQuCMBiG0dn//80tiAp6WT4zi+A+54vTTdMKuZZ20Y/H2/is9/r+aFxdNz5/qa7t1/Gr+dlj79ZX5mrnvz93p+3T9zKznbnnynW/OPfwnLXP/v2xqXvolXv8dH7Ld7Vhvs+cf/2v/d/vd3dfq8/0zbm1a1d/18L2o3fIzHbtnVi51p5zK8f6q3Xj8cza8XjrusH+oQEAcQQAAAQSAAAQSAAAQCABAACBBAAABBIAABBIAABAIAEAAIEEAAAEEgAAEEgAAEAgAQAAgQQAAAQSAAAQSAAAQCABAACBBAAABBIAABBIAABAIAEAAIEEAAAEEgAAEEgAAEAgAQAAgQQAAAQSAAAQSAAAQCABAACBBAAABBIAAJCmtXYCutDwWwUr9cEAAAAASUVORK5CYII="; this._image_h_r_l = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAAgCAYAAABkS8DlAAAAAXNSR0IArs4c6QAAAFBlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACAKADAAQAAAABAAAAIAAAAACVLBWUAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAAC90lEQVR4Ae3WzVbbMBAG0PzBgcOa93/M7nCj2F8zUUILdDmXjWTNSLauBMz+19vbstvvl139+c5zza39sd7hUNe99mveZ/3dbs3/LF7W3j/IXbZ5hzI/Yzf7TXxux/fPY3n+W+wrOfP3Zs5P26wXk22d/bzenJf8jNf82h/73XLOh7KeS51b++fEw/R8uQfzetvzsubmbtyuPXLmteo6W/9Qv2lZ7te4fde6l6xT52Ysbf22jK3t+o7j8frdt/H1HTWe96RdY+v8OnfrX84u45kznrPm6Cde2/THnPRrW/vjK+e8OT6e61j6OZcaH/ZbfDvXy+/Qsc5Jv55TxtKOWNY/t39+bx/NSV6dk3VGrM4Zu/2fsbFW/Ou69RvGO2rOFlvq2Pwdc2w8Z/0tdpqeL/HTab0/iaWd1xt5iaWd587PyXt6evyOOT939LP8jCcv66d9fn78nsSH2cvLv3OS//p6mzvmJza3Izb+D64/ae/zR/zR3IyN+MfH/fz39+tY9j9yv9//6pw57+45/xvOfzv9ECBAgAABAt0EFADdTtx+CRAgQIDAWUAB4BoQIECAAIGGAgqAhoduywQIECBAQAHgDhAgQIAAgYYCCoCGh27LBAgQIEBAAeAOECBAgACBhgIKgIaHbssECBAgQEAB4A4QIECAAIGGAgqAhoduywQIECBAQAHgDhAgQIAAgYYCCoCGh27LBAgQIEBAAeAOECBAgACBhgIKgIaHbssECBAgQEAB4A4QIECAAIGGAgqAhoduywQIECBAQAHgDhAgQIAAgYYCCoCGh27LBAgQIEBAAeAOECBAgACBhgIKgIaHbssECBAgQEAB4A4QIECAAIGGAgqAhoduywQIECBAQAHgDhAgQIAAgYYCCoCGh27LBAgQIEBAAeAOECBAgACBhgIKgIaHbssECBAgQEAB4A4QIECAAIGGAgqAhoduywQIECBAQAHgDhAgQIAAgYYCCoCGh27LBAgQIEBAAeAOECBAgACBhgK/AX08dE/3SOoSAAAAAElFTkSuQmCC"; this._image_v_b_t = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAAgCAYAAABkS8DlAAADcklEQVR4nO3di27bMAyFYdpWLuv2/o+aJfFFgxOp5VjKdjDM6rD/A4KkbZyhwIBzTMluE/s+CAAA+J/EIH1/SL9ws/KLR/5rAADwZb2S4zHIMBzVN9YOzh8QN74XAAD8HTmLt2Z3Ns3PId7vR/MB9oPihtcAAGBfOq9Lr3WOR/0Icrt5BaAxb14rAwAA4OsUAC/HPxWAk4i0hSmAF/iT8zMAALCvnNXtQiHwwn/O8WkuAGdTALy1hFhoEQAAoA5ver+W4aoAXK8UAAAA/j1/UgDGED8mAHYZQB/ofYBQAgAAqMIL/qXN/L+F/6MAyPX6TUS6lQLgPYQCAABAFaUCsJbjY3oMQS4XXQDaFwoAywAAANRRCv6lApDP/odHAYi3Wy4A3YYCMFEAAACozgv9tUn+qApAnycA4cUCMFEAAACoxgv+LQVgSI8Q5OdPWwDawoE2/CcKAAAAVZTC3zuRn5wC0M0F4LuIHJx9AHb3/2TCnwIAAEAdugC0zmtRWW4LwP0xAYjPCcAhTQHswZ9uHOAUAQAAsC971t8WLunXBeD97H9+X14COBT2Adj1flsCKAAAAOzPC35vGcBb/291ATguFIBS8FMAAACoo1QASpP8993/7wUgLQGcUgEICxMAHfojVwIAAFCNLQDdCwUgPDcBXi5vqQAcCgUgOsFv9wIAAID9NE74ezf1swXgnt7X6CWAo7oh0FIBGLkSAACAqvJGPxv+paX8UW8AnH+Q7wR4NhsBvQIwqgnASAEAAKAaO/7fUgB6lfEx3wnwbDYCLhWAkQIAAEBVXgHwbuufc3xQ9/xJBeB6PacCcFooAF74jxQAAACqWAp/fVdfXQD6lO+PE/ggH0sA+koAUQdKOpACAADA1/BKARC1AbDNpSDE5wQgXwrYpQKwNgEYKQAAAFRTKgD27/roCYC+1f84TwDOZg9AMAfa9f+BCQAAAFW16iqAYJ717YBzjg9qiX96/jng2+2Uzv6PqgSUJgCDKQHcDRAAgP3Zs/9gvvY2Abb6ioC5AOTgP5vw17p0QKueKQAAANThFYCgzvytLn2dpwHHEO/3tfCX9P2ggr8zlwICAIB9NGb8vxT8OsePefw/XxIYpO9/mJ3/S/LGgqDW/ikAAADsp9kQ+J45v9/S9+NcALaGv5X/4W77IQAAoLI3EWl/AQ/TsX9wLtbWAAAAAElFTkSuQmCC"; this._image_v_t_b = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAAgCAYAAABkS8DlAAAAAXNSR0IArs4c6QAAAFBlWElmTU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACAKADAAQAAAABAAAAIAAAAACVLBWUAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAAHhUlEQVR4Ae2d2W7bSBREucmy7IcA+f+fnAePtXCZqr68IhVLSGLATIA5DbS72QspHT9U9UbV79++vVdV9axIgAAEIAABCEDgf0Kgq3a7f/RdR8WXT37nSf0yfvIWdIMABCAAAQhA4DcJNHP7+jf7uXlvA/CmTHb2TEDe0A3uhRT7XpWOg+JU1bXLCRCAAAQgAAEIbEFgmqzXjq1iN+d/ruF13dfT9NbVT08XdXI8zZ33StMQKHsN94R/UMNBFZ5BIEAAAhCAAAQgsBEB6W8j/U0T4MF4GgGnj3TcA/ej4rmr9vuzM4rpHpQteXfOG1j8ffOMvSos/CWqHAMgCAQIQAACEIDAVgRW4m8TYB1uNRs/VtNkA5AmYK3jFv+zCs7qe+6m/f6ki92qsW+SZsAdLf6OLrcBKNP+Kuj1oEEPyjpVESAAAQhAAAIQ2IhALR1uZsH3TH4n0W4lymkAbAys4w7W8F5t+6muPeg/dbUMgAp25SYh9BZ5G4BavUpH3cwd0wBY9Ici/mEI7DZcR4AABCAAAQhAYCsCtWX6ugfAot9rTO5ZgDQAax33YN0GwPrtJf9j18gAyA3kVEGO5m0AHIoB0J8QeU8thOjnUoDTNAduT4AABCAAAQhAYAsC0xQzADHi92g/xD+WAH7UcQ3xp75qGpuAMADT4XDUbsBaJqCeR/Ke4i8zAEqLAVCaIn9rAGIJYJTjcDkBAhCAAAQgAIGNCEi2lxmAZSkgR/85sE8d9wA/l/FPujh6E+BRmUYi3tSNNhTaIaQBsLtw8BG/2FhwHfmrj5cCxkblaoQBKKD4AwEIQAACENiIQAzcGwlwGf3rsq3GMZcAYv1/reOzAZB+n1UpA/Dy4uMAthFW+0E32in94BzUwSI/qFNJnVcc53KXESAAAQhAAAIQ2I6A5Lpq9MfRum0zUGYAXKZr1zs6eMe+Ndyn+C7KH7v6+fmoYo3xPZxvBqVlF6HLZAuio+rKDIA6W/B1A5//TyOgonJKoDyBPxCAAAQgAAEIbELAS/eN9NknAWppeCsNb10m+S5lNzpuDdfSvTS8HP/vqsPhXY2t4EXY9ZG9/u8phFqL+8UA6E7aJFDW+Yvou63arDcA2gQQIAABCEAAAhDYjoA12iP9YgK0lu+0GIC57J6O9xLsi3T/1E0vL+8e/auxR/flHKHyZQlAdy4GQOWut+hnXIu/y1xPgAAEIAABCEBgOwIxUz9q/C7h1+g+zEBcF3NwR8fLuwDU/tQ1h8O/cgLe0NdrE6BfCNQpbwdxuwRg8W+8vHA1Abn730cEMQDb/cN5EgQgAAEIQCAJlNG/hD7Ef53e03Gf3ov3BehVwN4DMIu6VDxmAGQAtALgtYUyAyCnYIVPob8xAaWvTwkQIAABCEAAAhDYmkARfonwYgBm4S+m4KOOFwMgXb/EEsA4xuheGwD1yTtVWNFjA4G/ii9jlL+IfxwLtPCPpd7tCBCAAAQgAAEIbEkgtNrr/2kCmqaUze/3uQ7kVT/qmKB13C8EunRtnAKwiNsVxAZAO4b5BldxTwOwFv6cFfD7AwgQgAAEIAABCGxLYPSreDRgT81OI+BZfEeHmBGYZvH3gN96X2YAvAegV7uz0usJAFXaTSwhDYDTtQmIlwdhABZS5CAAAQhAAALbELDIW/Rz4G5DkGYgDcDySXIGwL8H0PsYoN8DMEjXPfUf7wBwp3AVS7dZ6DWlEHsBMg1DgAFYSJGDAAQgAAEIbEMgRvf5PoCSSsLzdEDMAOQnkY5PsQQwGwAdA5TY+6d9y+hfSh5vAfzROcQMwDL693WO/qMuH0EKAQhAAAIQgMAWBNZi77xmA8rav4/x39PxeKePlwCGbtrtjmqT7//3C4CaMvq/19GC7zP/FnwMwBb/Wp4BAQhAAAIQeEzAWu3oWfvMW/zzet0zdPu6DNB1r69HqX+e/S9vANQ97joH9Q3hb9vFBPjmLidAAAIQgAAEILAtAeu1Q+r2oDf1W8QVStn601jEFTR7P1bDMJQfA+r860F++Y83DrhT39feFbju17mTQ9ct4p9lma47kIcABCAAAQhA4GsJpFan4M8a7ofe1XFruPcBKHZV256qp6dWbiDE352fnrQb8NYAlG9goc/oAud9MwIEIAABCEAAAn+GgAbt19H+rOG+9sa+m5D67bRtZQBeX09l5H+5LAbAN/hVA+A9AQQIQAACEIAABP4MgU4H+FKzU7/zev2J1gZAmwE7jfaP89T/YgC8gcAhb+BOS4h8HCWo1H9dt7QiBwEIQAACEIDA1xM4n0OzvYwfYVnC/6jjMZO/28kANM1ZsdZvAoSDyMaR5k2iQ36NtSFY57OeFAIQgAAEIACBbQgcDqnVy8DdT36k4/NMQFd9/352s+rt7Z4BWD78Wugf5ZfW5CAAAQhAAAIQ2IJADtz9rEd516V2Xw3A6WQDUFX7fU4d3N6gVN75M9/g5mF3mlEEAQhAAAIQgMAXErAeW/jX4v/ocWkCVK/f+Z2ena7arvOr4muWNf8rCjIQgAAEIACBv47AL+m4TwlcFH/W+K/7dnwgCEAAAhCAAAQ+T+A/hVJn6rP9qnIAAAAASUVORK5CYII="; this._sketchTempPoints = []; this._sketchPoints = []; this._sketchOutputPoints = []; this._sketchWallHeights = []; this._drawEntity = void 0; this._lineLabel = void 0; this._polygonLabel = void 0; if (options2 && options2.isDrawPoint) this._isDrawPoint = options2.isDrawPoint; else this._isDrawPoint = false; if (options2 && options2.isRetainDrawPoint) this._isRetainDrawPoint = options2.isRetainDrawPoint; else this._isRetainDrawPoint = false; this._param = { lineWidth: 3, lineColor: "rgba(0,255,0,0.75)", outlineWidth: 2, outlineColor: "rgba(255,255,255,1)", polygonColor: "rgba(0,255,0,0.5)", wallHeight: 30, power: 0.25, odlineHeight: 1e3, odlineCount: 50, text: "\u91D1\u7530\u4EA7\u4E1A\u96C6\u56E2", duration: 1500, count: 1, direction_h: "horizontal", direction_v: "vertical", order_add: "+", order_minus: "-", houseColor: "rgba(0,255,0,0.95)" }; if (options2 && options2.iconType) { switch (options2.iconType) { case DrawTools.IconType.Normal: this._sketchPointImage = this._iconNormal; break; case DrawTools.IconType.Blue: this._sketchPointImage = this._iconBlue; break; case DrawTools.IconType.Green: this._sketchPointImage = this._iconGreen; break; case DrawTools.IconType.Violet: this._sketchPointImage = this._iconViolet; break; default: this._sketchPointImage = this._iconNormal; break; } } else { this._sketchPointImage = this._iconNormal; } this._canvasWidth = this._viewer.scene.canvas.width; this._canvasHeight = this._viewer.scene.canvas.height; if (this._isRuntimeApp()) { this._viewer._cesiumWidget._supportsImageRenderingPixelated = Cesium.FeatureDetection.supportsImageRenderingPixelated(); this._viewer._cesiumWidget._forceResize = true; if (Cesium.FeatureDetection.supportsImageRenderingPixelated()) { this._viewer.resolutionScale = 2.6; } } } _arcToDegree(arc) { return arc / Math.PI * 180; } _toColor(red, green, blue, alpha) { let normalColor = new Cesium.Color(0, 0, 0, 1); if (typeof red != "number") return normalColor; if (typeof green != "number") return normalColor; if (typeof blue != "number") return normalColor; if (typeof alpha != "number") return normalColor; if (red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255 || alpha < 0 || alpha > 1) return normalColor; return new Cesium.Color(red / 255, green / 255, blue / 255, alpha); } _toColorFromArray(array) { if (!array || array.length === void 0 || array.length === 0) return new Cesium.Color(255 / 255, 255 / 255, 255 / 255, 1); let r2 = 255, g = 255, b = 255, a = 1; if (array.length === 1) { r2 = parseInt(array[0]); } else if (array.length === 2) { r2 = parseInt(array[0]); g = parseInt(array[1]); } else if (array.length === 3) { r2 = parseInt(array[0]); g = parseInt(array[1]); b = parseInt(array[2]); } else if (array.length >= 4) { r2 = parseInt(array[0]); g = parseInt(array[1]); b = parseInt(array[2]); a = parseFloat(array[3]); } return new Cesium.Color(r2 / 255, g / 255, b / 255, a); } _updateScene() { this._viewer.scene.requestRender(); } _getScreenClickPosition(screenPosition) { let resCartesian = void 0; let ray = this._viewer.scene.camera.getPickRay(screenPosition); let position2 = this._viewer.scene.globe.pick(ray, this._viewer.scene); Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); if (Cesium.defined(position2)) { resCartesian = { x: position2.x, y: position2.y, z: position2.z }; } return resCartesian; } _getScreenClickPositionAndHeight(screenPoint) { var lng = void 0, lat = void 0, height2 = void 0; var ray = this._viewer.scene.camera.getPickRay(screenPoint); var position2 = this._viewer.scene.globe.pick(ray, this._viewer.scene); var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); cartographic = Cesium.Cartographic.fromCartesian(position2); var feature2 = this._viewer.scene.pick(screenPoint); if (feature2 === void 0 && Cesium.defined(cartographic)) { lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } else { var cartesian = this._viewer.scene.pickPosition(screenPoint); if (Cesium.defined(cartesian)) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); if (Cesium.defined(cartographic)) { lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } } } return { lng, lat, height: height2 }; } _transfromFromScreenPoint(screenPosition) { let location = this._getScreenClickPositionAndHeight(screenPosition); if (location.lng != void 0) { var cartesian = Cesium.Cartesian3.fromDegrees(location.lng, location.lat, location.height); return { gLocation: location, sLocation: cartesian }; } else { return { gLocation: void 0, sLocation: void 0 }; } } _removeEntityByName(entityName) { var entities2 = this._entities; if (!entities2 || !entities2.values) return; var delEntitys = []; for (var i2 = 0; i2 < entities2.values.length; i2++) { if (entities2.values[i2].name == entityName) { delEntitys.push(entities2.values[i2]); } } for (var i2 = 0; i2 < delEntitys.length; i2++) { entities2.remove(delEntitys[i2]); } this._updateScene(); } _removeEntityByObject(objEntity) { if (!Cesium.defined(objEntity)) return; this._entities.remove(objEntity); } _createPoint(coord, label2) { let _self = this; let entity = new Cesium.Entity({ name: _self._sketchEntityName + "_Point", position: coord, billboard: { image: _self._sketchPointImage, horizontalOrigin: Cesium.HorizontalOrigin.center, verticalOrigin: Cesium.VerticalOrigin.bottom, scale: 0.5, pixelOffset: new Cesium.Cartesian2(0, -11), disableDepthTestDistance: Number.POSITIVE_INFINITY } }); if (label2) { entity.label = { text: label2, font: "12px sans-serif", fillColor: this._toColor(255, 255, 255, 1), outlineColor: this._toColor(0, 154, 94, 1), style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth: 1, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, pixelOffset: new Cesium.Cartesian2(0, -28), showBackground: true, backgroundColor: this._toColor(0, 0, 0, 0.6), disableDepthTestDistance: Number.POSITIVE_INFINITY }; } this._entities.add(entity); this._pointEntitys.push(entity); this._updateScene(); } _removePointEntitys() { this._removeEntityByName(this._sketchEntityName + "_Point"); this._pointEntitys = []; } _callUpdaeEllipseCenterPosition() { let _self = this; return function() { let point1cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[0]); let point2cartographic = Cesium.Cartographic.fromCartesian(_self._sketchTempPoints[1]); _self._sketchEllipseCenterPosition = Cesium.Cartesian3.fromDegrees( Cesium.Math.toDegrees( point1cartographic.longitude ), Cesium.Math.toDegrees(point1cartographic.latitude), point2cartographic.height ); return _self._sketchEllipseCenterPosition; }; } _callUpdateEllipseMinorAxis(positions) { let _self = this; return function() { if (positions === void 0 || positions.length === void 0 || positions.length < 2) { _self._sketchEllipseRadius = 0; } else { _self._sketchEllipseRadius = _self._calculateEllipseMinorAxis(positions[0], positions[1]); if (_self._sketchEllipseRadius <= 0) _self._sketchEllipseRadius = 1; } return _self._sketchEllipseRadius; }; } _calculateEllipseMinorAxis(position1, position2) { let point1cartographic = Cesium.Cartographic.fromCartesian(position1); let point2cartographic = Cesium.Cartographic.fromCartesian(position2); let geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); return geodesic.surfaceDistance; } _calculateEllipseOutlineCoordinate(position1, position2) { let positionCenter = position1; let positionRotate = position2; let ellipseOutlineCoordinates = []; for (let angle = 5; angle < 360; ) { let newPosition = this._rotatedPointByAngle(positionRotate, positionCenter, angle); ellipseOutlineCoordinates.push(newPosition); angle = angle + 5; } ellipseOutlineCoordinates.push(ellipseOutlineCoordinates[0]); return ellipseOutlineCoordinates; } _callEllipseOutlineCoordinate(positions) { let _self = this; return function() { _self._ellipseOutlineCoordinates = _self._calculateEllipseOutlineCoordinate(positions[0], positions[1]); return _self._ellipseOutlineCoordinates; }; } _rotatedPointByAngle(position_A, position_B, angle) { var localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position_B); var worldToLocal_Matrix = Cesium.Matrix4.inverse(localToWorld_Matrix, new Cesium.Matrix4()); Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, position_B, new Cesium.Cartesian3()); var localPosition_A = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, position_A, new Cesium.Cartesian3()); var new_x = localPosition_A.x * Math.cos(Cesium.Math.toRadians(angle)) + localPosition_A.y * Math.sin(Cesium.Math.toRadians(angle)); var new_y = localPosition_A.y * Math.cos(Cesium.Math.toRadians(angle)) - localPosition_A.x * Math.sin(Cesium.Math.toRadians(angle)); var new_z = localPosition_A.z; return Cesium.Matrix4.multiplyByPoint( localToWorld_Matrix, new Cesium.Cartesian3(new_x, new_y, new_z), new Cesium.Cartesian3() ); } _callUpdateRectangleCoordinates(positions) { let _self = this; return function() { let g0 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(positions[0]); let g1 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(positions[1]); let lng0 = Cesium.Math.toDegrees(g0.longitude); let lat0 = Cesium.Math.toDegrees(g0.latitude); let lng1 = Cesium.Math.toDegrees(g1.longitude); let lat1 = Cesium.Math.toDegrees(g1.latitude); _self._rectangleCoordinates = [0, 0, 1, 1]; if (lng0 < lng1) { _self._rectangleCoordinates[0] = lng0; _self._rectangleCoordinates[2] = lng1; } else { _self._rectangleCoordinates[0] = lng1; _self._rectangleCoordinates[2] = lng0; } if (lat0 < lat1) { _self._rectangleCoordinates[1] = lat0; _self._rectangleCoordinates[3] = lat1; } else { _self._rectangleCoordinates[1] = lat1; _self._rectangleCoordinates[3] = lat0; } let rectangle = Cesium.Rectangle.fromDegrees( _self._rectangleCoordinates[0], _self._rectangleCoordinates[1], _self._rectangleCoordinates[2], _self._rectangleCoordinates[3] ); let res = _self._calculateRectangleOutlineCoordinates(rectangle); _self._rectangleOutlineCoordinates = res.cPoints; _self._sketchOutputPoints = res.gPoints; return rectangle; }; } _calculateRectangleOutlineCoordinates(rectangle) { let south_east = Cesium.Rectangle.southeast(rectangle); let se2 = Cesium.Cartographic.toCartesian(south_east); let south_west = Cesium.Rectangle.southwest(rectangle); let sw = Cesium.Cartographic.toCartesian(south_west); let north_east = Cesium.Rectangle.northeast(rectangle); let ne2 = Cesium.Cartographic.toCartesian(north_east); let north_west = Cesium.Rectangle.northwest(rectangle); let nw = Cesium.Cartographic.toCartesian(north_west); let gPoints = []; gPoints.push({ lng: Cesium.Math.toDegrees(south_west.longitude), lat: Cesium.Math.toDegrees(south_west.latitude), height: south_west.height }); gPoints.push({ lng: Cesium.Math.toDegrees(south_east.longitude), lat: Cesium.Math.toDegrees(south_east.latitude), height: south_east.height }); gPoints.push({ lng: Cesium.Math.toDegrees(north_east.longitude), lat: Cesium.Math.toDegrees(north_east.latitude), height: north_east.height }); gPoints.push({ lng: Cesium.Math.toDegrees(north_west.longitude), lat: Cesium.Math.toDegrees(north_west.latitude), height: north_west.height }); gPoints.push({ lng: Cesium.Math.toDegrees(south_west.longitude), lat: Cesium.Math.toDegrees(south_west.latitude), height: south_west.height }); return { cPoints: [sw, se2, ne2, nw, sw], gPoints }; } _callUpdateRectangleOutlineCoordinates() { let _self = this; return function() { return _self._rectangleOutlineCoordinates; }; } _materialTextImageProperty(options2) { this._canvasId = "canvasJt"; let canvasObj = document.getElementById(this._canvasId); if (canvasObj != null) { document.body.removeChild(canvasObj); } canvasObj = document.createElement("canvas"); canvasObj.id = this._canvasId; canvasObj.setAttribute("width", "1024px"); canvasObj.setAttribute("height", "256px"); document.body.appendChild(canvasObj); let context = canvasObj.getContext("2d"); context.fillStyle = options2.color === void 0 ? "rgba(255,0,0,1)" : options2.color; context.font = "bold 240px \u5FAE\u8F6F\u96C5\u9ED1"; context.textAlign = "left"; context.textBaseline = "bottom"; context.fillText(options2.text, 12, 250, 1e3); let textMaterial = new Cesium.ImageMaterialProperty({ image: canvasObj, transparent: true }); textMaterial._param = { color: context.fillStyle, text: options2.text }; return textMaterial; } _materialColorProperty(options2) { let mColor = "rgba(0,255,0,1)"; if (options2 !== void 0 && options2.color !== void 0) mColor = options2.color; let colorMaterial = new Cesium.ColorMaterialProperty(Cesium.Color.fromCssColorString(mColor)); colorMaterial._param = { color: mColor }; return colorMaterial; } _materialPolylineArrowProperty(options2) { let mColor = "rgba(0,255,0,1)"; if (options2 !== void 0 && options2.color !== void 0) mColor = options2.color; let colorMaterial = new Cesium.PolylineArrowMaterialProperty(Cesium.Color.fromCssColorString(mColor)); colorMaterial._param = { color: mColor }; return colorMaterial; } _materialPolylineGlowProperty(options2) { let mColor = "rgba(0,255,0,1)"; if (options2 !== void 0 && options2.color !== void 0) mColor = options2.color; let power = 0.25; if (options2 !== void 0 && options2.power !== void 0 && typeof options2.power === "number") power = options2.power; let colorMaterial = new Cesium.PolylineGlowMaterialProperty({ color: Cesium.Color.fromCssColorString(mColor), glowPower: power }); colorMaterial._param = { color: mColor, power }; return colorMaterial; } _materialPolylineOutlineProperty(options2) { let mColor = "rgba(0,255,0,1)"; let outlineColor = "rgba(255,255,255,1.0)"; let outlineWidth = 1.2; if (options2 !== void 0 && options2.color !== void 0) mColor = options2.color; if (options2 !== void 0 && options2.outlineColor !== void 0) outlineColor = options2.outlineColor; if (options2 !== void 0 && options2.outlineWidth !== void 0 && typeof options2.outlineWidth === "number") outlineWidth = options2.outlineWidth; let colorMaterial = new Cesium.PolylineOutlineMaterialProperty({ color: Cesium.Color.fromCssColorString(mColor), outlineColor: Cesium.Color.fromCssColorString(outlineColor), outlineWidth }); colorMaterial._param = { color: mColor, outlineColor, outlineWidth }; return colorMaterial; } _clear(isAll) { if (isAll != void 0 && isAll === true) { this._removeEntityByName(this._sketchEntityName); this._removePointEntitys(); } this._sketchTempPoints = []; this._sketchPoints = []; this._sketchOutputPoints = []; this._sketchWallHeights = []; this._drawEntity = void 0; this._removeOperationDom(); this._tooltipRemove(); if (this._drawEventHandler !== null && this._drawEventHandler !== void 0 && this._drawEventHandler.isDestroyed() === false) { this._clearEvent(this._drawEventHandler); } } } Object.assign(DrawTools.prototype, { setLabel: function(options2) { if (!options2) { options2 = { lineLabel: void 0, polygonLabel: void 0 }; } if (options2.lineLabel) this._lineLabel = options2.lineLabel; if (options2.polygonLabel) this._lineLabel = options2.polygonLabel; } }); Object.assign(DrawTools.prototype, { _registerLeftClickEvent: function(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { _self._lock = true; clearTimeout(_self._timer); _self._timer = setTimeout(function() { if (callChange) callChange(event2); _self._lock = false; }, 200); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); }, _registerLeftDoubleClickEvent: function(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { clearTimeout(_self._timer); _self._lock = false; if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); }, _registerMouseMoveEvent: function(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { if (_self._lock === void 0 || _self._lock === false) { if (callChange) callChange(event2); } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); }, _registerRightClickEvent: function(handler, callChange) { if (!handler) return; handler.setInputAction(function(event2) { if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); }, _registerLeftDownEvent: function(handler, callChange) { if (!handler) return; handler.setInputAction(function(event2) { if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.LEFT_DOWN); }, _registerLeftUpEvent: function(handler, callChange) { if (!handler) return; handler.setInputAction(function(event2) { if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.LEFT_UP); }, _clearEvent: function(handler) { this._endTooltip(); this._removeOperationDom(); if (!handler) return; handler.destroy(); handler = null; } }); Object.assign(DrawTools.prototype, { _createPolyline: function(polylineType) { let _self = this; let entityParam = DrawTools.initEditPropertyParams(); let polylineWidth = _self._param.lineWidth; let polylineMaterial = this._materialColorProperty({ color: _self._param.lineColor }); entityParam.id = DrawTools.DrawType.Polyline; if (polylineType !== void 0 && polylineType === DrawTools.PolylineType.ArrowsPolyline) { polylineMaterial = this._materialPolylineArrowProperty({ color: _self._param.lineColor }); polylineWidth = _self._param.lineWidth * 3; entityParam.color = _self._param.lineColor; entityParam.id = DrawTools.DrawType.ArrowPolyline; } else if (polylineType !== void 0 && polylineType === DrawTools.PolylineType.GrowPolyline) { polylineMaterial = this._materialPolylineGlowProperty({ color: _self._param.lineColor, power: _self._param.power }); polylineWidth = _self._param.lineWidth * 3; entityParam.color = _self._param.lineColor; entityParam.power = _self._param.power; entityParam.id = DrawTools.DrawType.GrowPolyline; } else if (polylineType !== void 0 && polylineType === DrawTools.PolylineType.OutlinePolyline) { polylineMaterial = this._materialPolylineOutlineProperty({ color: _self._param.lineColor, outlineColor: _self._param.outlineColor, outlineWidth: _self._param.outlineWidth }); polylineWidth = _self._param.lineWidth * 2; entityParam.color = _self._param.lineColor; entityParam.outlineColor = _self._param.outlineColor; entityParam.outlineWidth = _self._param.outlineWidth; entityParam.id = DrawTools.DrawType.OutlinePolyline; } else if (polylineType !== void 0 && polylineType === DrawTools.PolylineType.DynamicPolyline) { polylineMaterial = new WallMaterialProperty({ viewer: _self._viewer, trailImage: _self._image_h_l_r, duration: _self._param.duration, color: Cesium.Color.fromCssColorString(_self._param.lineColor), param: { direction: _self._param.direction_h, count: _self._param.count, order: _self._param.order_minus } }); polylineWidth = _self._param.lineWidth; entityParam.color = _self._param.lineColor; entityParam.duration = _self._param.duration; entityParam.direction = _self._param.direction_h; entityParam.count = _self._param.count; entityParam.order = _self._param.order_minus; entityParam.id = DrawTools.DrawType.DynamicPolyline; } entityParam.lineWidth = polylineWidth; let entityPolyline = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: new Cesium.CallbackProperty(function() { return _self._sketchTempPoints; }, false), material: polylineMaterial, width: polylineWidth, clampToGround: true } }); this._drawEntity = this._entities.add(entityPolyline); this._drawEntity.setParams(entityParam); }, _updatePolyline: function(isEdit) { this._drawEntity.polyline.positions = this._sketchPoints; this._drawEntity.setEntityType(DrawTools.DrawType.Polyline); if (isEdit != void 0 && isEdit === true) { this._removePointEntitys(); this._setEntityIsEdit(this._drawEntity); } }, _createSpatialPolyline: function() { let _self = this; let entityParam = DrawTools.initEditPropertyParams(); let lineMaterial = this._materialColorProperty({ color: _self._param.lineColor }); entityParam.id = DrawTools.DrawType.SpatialLine; entityParam.color = _self._param.lineColor; entityParam.lineWidth = _self._param.lineWidth; let entity = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: new Cesium.CallbackProperty(function() { return _self._sketchTempPoints; }, false), material: lineMaterial, width: _self._param.lineWidth, clampToGround: false } }); this._drawEntity = this._entities.add(entity); this._drawEntity.setParams(entityParam); }, _updateSpatialPolyline: function(isEdit) { this._drawEntity.polyline.positions = this._sketchPoints; this._drawEntity.setEntityType(DrawTools.DrawType.SpatialLine); if (isEdit != void 0 && isEdit === true) { this._removePointEntitys(); this._setEntityIsEdit(this._drawEntity); } }, _createPolygon: function(polygonType) { let _self = this; let entityParam = DrawTools.initEditPropertyParams(); let polygonMaterial = this._materialColorProperty({ color: _self._param.polygonColor }); let lineMaterial = this._materialColorProperty({ color: _self._param.outlineColor }); let entityPolygon = new Cesium.Entity({ name: _self._sketchEntityName, polygon: { show: true, hierarchy: new Cesium.CallbackProperty(function() { return { positions: _self._sketchTempPoints }; }, false), material: polygonMaterial, classificationType: Cesium.ClassificationType.BOTH }, polyline: { show: true, positions: new Cesium.CallbackProperty(function() { return _self._sketchTempPoints; }, false), material: lineMaterial, width: _self._param.outlineWidth, clampToGround: true } }); entityParam.color = _self._param.polygonColor; entityParam.outlineColor = _self._param.outlineColor; entityParam.outlineWidth = _self._param.outlineWidth; this._drawEntity = this._entities.add(entityPolygon); if (polygonType !== void 0 && polygonType === DrawTools.PolygonType.NormalPolygon) { this._drawEntity.setEntityType(DrawTools.DrawType.Polygon); entityParam.id = DrawTools.DrawType.Polygon; } else if (polygonType !== void 0 && polygonType === DrawTools.PolygonType.HousePolygon) { this._drawEntity.setEntityType(DrawTools.DrawType.House); entityParam.id = DrawTools.DrawType.House; } this._drawEntity.setParams(entityParam); }, _updatePolygon: function(isEdit) { let _self = this; let houseMaterial = this._materialColorProperty({ color: _self._param.houseColor }); let entityType = this._drawEntity.getEntityType(); if (entityType === DrawTools.DrawType.Polygon) { this._drawEntity.polygon.hierarchy = { positions: _self._sketchPoints }; this._drawEntity.polyline.positions = this._sketchPoints; } else if (entityType === DrawTools.DrawType.House) { let entityParam = this._drawEntity.getParams(); this._removeEntityByObject(this._drawEntity); let height2 = parseFloat(this._sketchOutputPoints[0].height); let houseHeight = height2 + parseInt(_self._param.wallHeight); let houseEntity = new Cesium.Entity({ name: _self._sketchEntityName, polygon: { show: true, hierarchy: { positions: _self._sketchPoints }, extrudedHeight: houseHeight, material: houseMaterial } }); this._drawEntity = this._entities.add(houseEntity); this._drawEntity.setEntityType(entityType); entityParam.height = _self._param.wallHeight; entityParam.bottomHeight = height2; entityParam.color = _self._param.houseColor; this._drawEntity.setParams(entityParam); } if (isEdit != void 0 && isEdit === true) { this._removePointEntitys(); this._setEntityIsEdit(this._drawEntity); } }, _createRectangle: function() { let _self = this; let entityParam = DrawTools.initEditPropertyParams(); let rectMaterial = this._materialColorProperty({ color: _self._param.polygonColor }); let lineMaterial = this._materialColorProperty({ color: _self._param.outlineColor }); let entityRectangle = new Cesium.Entity({ name: _self._sketchEntityName, polyline: { show: true, positions: new Cesium.CallbackProperty( _self._callUpdateRectangleOutlineCoordinates(), false ), material: lineMaterial, width: _self._param.outlineWidth, clampToGround: true }, rectangle: { show: true, coordinates: new Cesium.CallbackProperty( _self._callUpdateRectangleCoordinates( _self._sketchTempPoints ), false ), material: rectMaterial, classificationType: Cesium.ClassificationType.BOTH } }); entityParam.id = DrawTools.DrawType.Rectangle; entityParam.color = _self._param.polygonColor; entityParam.outlineColor = _self._param.outlineColor; entityParam.outlineWidth = _self._param.outlineWidth; this._drawEntity = this._entities.add(entityRectangle); this._drawEntity.setParams(entityParam); }, _updateRectangle(isEdit) { this._drawEntity.polyline.positions = this._rectangleOutlineCoordinates; let coordinates = this._rectangleCoordinates; this._drawEntity.rectangle.coordinates = Cesium.Rectangle.fromDegrees(coordinates[0], coordinates[1], coordinates[2], coordinates[3]); this._drawEntity.setEntityType(DrawTools.DrawType.Rectangle); if (isEdit != void 0 && isEdit === true) { this._setEntityIsEdit(this._drawEntity); } }, _createCircle: function(centerPosition, circleType) { let _self = this; let entityParam = DrawTools.initEditPropertyParams(); let circleMaterial = this._materialColorProperty({ color: _self._param.polygonColor }); let lineMaterial = this._materialColorProperty({ color: _self._param.outlineColor }); if (circleType != void 0 && circleType === DrawTools.CircleType.DynamicCircle) { circleMaterial = new CircleMaterialProperty({ viewer: _self._viewer, duration: _self._param.duration, color: Cesium.Color.fromCssColorString(_self._param.polygonColor), count: _self._param.count }); } this._sketchEllipseCenterPosition = centerPosition.clone(); let entityCircle = new Cesium.Entity({ name: _self._sketchEntityName, position: centerPosition, ellipse: { show: true, semiMinorAxis: new Cesium.CallbackProperty(_self._callUpdateEllipseMinorAxis( _self._sketchTempPoints ), false), semiMajorAxis: new Cesium.CallbackProperty(_self._callUpdateEllipseMinorAxis( _self._sketchTempPoints ), false), material: circleMaterial, classificationType: Cesium.ClassificationType.BOTH } }); if (circleType === void 0 || circleType === DrawTools.CircleType.ColorCircle) { entityCircle.polyline = { show: true, positions: new Cesium.CallbackProperty(_self._callEllipseOutlineCoordinate( _self._sketchTempPoints ), false), material: lineMaterial, width: _self._param.outlineWidth, clampToGround: true }; } this._drawEntity = this._entities.add(entityCircle); if (circleType === void 0 || circleType === DrawTools.CircleType.ColorCircle) { this._drawEntity.setEntityType(DrawTools.DrawType.Circle); entityParam.id = DrawTools.DrawType.Circle; entityParam.color = _self._param.polygonColor; entityParam.outlineColor = _self._param.outlineColor; entityParam.outlineWidth = _self._param.outlineWidth; } else if (circleType != void 0 && circleType === DrawTools.CircleType.DynamicCircle) { this._drawEntity.setEntityType(DrawTools.DrawType.DynamicCircle); entityParam.id = DrawTools.DrawType.DynamicCircle; entityParam.color = _self._param.polygonColor; entityParam.duration = _self._param.duration; entityParam.count = _self._param.count; } this._drawEntity.setParams(entityParam); }, _updateCircle(isEdit) { this._drawEntity.position = this._sketchEllipseCenterPosition; let center2 = this._sketchTempPoints.first(); let outpoint = this._sketchTempPoints.last(); this._ellipseOutlineCoordinates = this._calculateEllipseOutlineCoordinate(center2, outpoint); this._sketchEllipseRadius = this._calculateEllipseMinorAxis(center2, outpoint); if (this._drawEntity.polyline != void 0) { this._drawEntity.polyline.positions = this._ellipseOutlineCoordinates; } this._drawEntity.ellipse.semiMajorAxis = this._sketchEllipseRadius; this._drawEntity.ellipse.semiMinorAxis = this._sketchEllipseRadius; if (isEdit != void 0 && isEdit === true) { this._setEntityIsEdit(this._drawEntity); } }, _createWall: function(wallType) { let _self = this; let entityParam = DrawTools.initEditPropertyParams(); let wallMaterial = this._materialColorProperty({ color: _self._param.polygonColor }); entityParam.color = _self._param.polygonColor; if (wallType !== void 0 && wallType === DrawTools.WallType.TextWall) { wallMaterial = this._materialTextImageProperty({ color: _self._param.polygonColor, text: _self._param.text }); entityParam.text = _self._param.text; entityParam.color = _self._param.polygonColor; } else if (wallType !== void 0 && wallType === DrawTools.WallType.DynamicWall) { wallMaterial = new WallMaterialProperty({ viewer: _self._viewer, trailImage: _self._image_v_t_b, duration: _self._param.duration, color: Cesium.Color.fromCssColorString(_self._param.polygonColor), param: { count: _self._param.count, direction: _self._param.direction_v, order: _self._param.order_minus } }); entityParam.color = _self._param.polygonColor; entityParam.duration = _self._param.duration; entityParam.direction = _self._param.direction_v; entityParam.count = _self._param.count; entityParam.order = _self._param.order_minus; } let normalWall = new Cesium.Entity({ name: _self._sketchEntityName, wall: { show: true, positions: new Cesium.CallbackProperty(function() { return _self._sketchTempPoints; }, false), minimumHeights: new Cesium.CallbackProperty(function() { return _self._sketchWallHeights; }, false), maximumHeights: new Cesium.CallbackProperty(function() { _self._sketchWallMaxHeights = []; for (let i2 = 0; i2 < _self._sketchWallHeights.length; i2++) { _self._sketchWallMaxHeights.push(_self._sketchWallHeights[i2] + _self._param.wallHeight); } return _self._sketchWallMaxHeights; }, false), material: wallMaterial } }); this._drawEntity = this._entities.add(normalWall); entityParam.height = this._param.wallHeight; if (wallType === void 0 || wallType === DrawTools.WallType.ColorWall) { this._drawEntity.setEntityType(DrawTools.DrawType.NormalWall); entityParam.id = DrawTools.DrawType.NormalWall; } else if (wallType !== void 0 && wallType === DrawTools.WallType.DynamicWall) { this._drawEntity.setEntityType(DrawTools.DrawType.DynamicWall); entityParam.id = DrawTools.DrawType.DynamicWall; } else if (wallType !== void 0 && wallType === DrawTools.WallType.TextWall) { this._drawEntity.setEntityType(DrawTools.DrawType.TextWall); entityParam.id = DrawTools.DrawType.TextWall; } this._drawEntity.setParams(entityParam); }, _updateWall: function(isEdit) { let hLength = this._sketchWallHeights.length; let mhLength = this._sketchWallMaxHeights.length; let pLength = this._sketchPoints.length; if (hLength === mhLength && hLength - pLength === 1) { this._sketchWallHeights.pop(); this._sketchWallMaxHeights.pop(); this._drawEntity.wall.positions = this._sketchPoints; this._drawEntity.wall.minimumHeights = this._sketchWallHeights; this._drawEntity.wall.maximumHeights = this._sketchWallMaxHeights; if (isEdit != void 0 && isEdit === true) { this._removePointEntitys(); this._setEntityIsEdit(this._drawEntity); } } }, _createVideoWall: function() { let _self = this; let entityWall = new Cesium.Entity({ name: _self._sketchEntityName, position: _self._sketchOutputPoints[0], wall: { show: true, positions: new Cesium.CallbackProperty(function() { let pt0 = _self._sketchOutputPoints[0]; let pt1 = _self._sketchOutputPoints[1]; _self._wallPositions = []; _self._wallPositions.push(Cesium.Cartesian3.fromDegrees( pt0.lng, pt0.lat, pt0.height )); _self._wallPositions.push(Cesium.Cartesian3.fromDegrees( pt1.lng, pt1.lat, pt0.height )); return _self._wallPositions; }, false), maximumHeights: new Cesium.CallbackProperty(function() { _self._sketchWallHeights = []; let pt2 = _self._sketchOutputPoints[0]; _self._sketchWallHeights.push(pt2.height); _self._sketchWallHeights.push(pt2.height); return _self._sketchWallHeights; }, false), minimumHeights: new Cesium.CallbackProperty(function() { _self._sketchWallMaxHeights = []; let pt2 = _self._sketchOutputPoints[1]; _self._sketchWallMaxHeights.push(pt2.height); _self._sketchWallMaxHeights.push(pt2.height); return _self._sketchWallMaxHeights; }, false), material: Cesium.Color.fromCssColorString(_self._param.polygonColor), outline: true, outlineColor: Cesium.Color.fromCssColorString(_self._param.outlineColor), outlineWidth: _self._param.outlineWidth } }); _self._drawEntity = _self._entities.add(entityWall); }, _updateVideoWall: function(isEdit) { let entityParam = DrawTools.initEditPropertyParams(); entityParam.id = DrawTools.DrawType.VideoWall; let videoElement = document.getElementById("wallVideo"); if (videoElement !== null) { document.body.removeChild(videoElement); } videoElement = document.createElement("video"); videoElement.id = "wallVideo"; videoElement.setAttribute("crossorigin", "anonymous"); videoElement.setAttribute("width", "1024px"); videoElement.setAttribute("height", "256px"); videoElement.setAttribute("controls", "controls"); videoElement.setAttribute( "src", "https://lf3-cdn-tos.bytescm.com/obj/eden-cn/lmeh7pfuho/campus/campus_intro_20200522.mp4" ); videoElement.setAttribute("loop", "loop"); videoElement.play(); document.body.appendChild(videoElement); this._drawEntity.wall.positions = this._wallPositions; this._drawEntity.wall.minimumHeights = this._sketchWallHeights; this._drawEntity.wall.maximumHeights = this._sketchWallMaxHeights; entityParam.height = this._sketchWallMaxHeights[0] - this._sketchWallHeights[0]; this._drawEntity.wall.material = videoElement; this._removePointEntitys(); this._drawEntity.setEntityType(DrawTools.DrawType.VideoWall); entityParam.videoUrl = "https://lf3-cdn-tos.bytescm.com/obj/eden-cn/lmeh7pfuho/campus/campus_intro_20200522.mp4"; entityParam.id = DrawTools.DrawType.VideoWall; this._drawEntity.setParams(entityParam); if (isEdit != void 0 && isEdit === true) { this._setEntityIsEdit(this._drawEntity); } }, _calculateOdlinePositios: function(strPoint, endPoint, height2, count) { let pt1 = this._cartesian3ToGeo(strPoint); let pt2 = this._cartesian3ToGeo(endPoint); var h2 = height2 && height2 < 1e3 ? height2 : 1e3; var L = Math.abs(pt1.longitude - pt2.longitude) > Math.abs(pt1.latitude - pt2.latitude) ? Math.abs(pt1.longitude - pt2.longitude) : Math.abs(pt1.latitude - pt2.latitude); var num = count && count > 50 ? count : 50; var result = []; var tempResult = []; var dlt = L / num; var addHeight = pt1.height > pt2.height ? pt1.height : pt2.height; var maxHeight = addHeight + h2; var minHeight1 = pt1.height; var minHeight2 = pt2.height; if (Math.abs(pt1.longitude - pt2.longitude) > Math.abs(pt1.latitude - pt2.latitude)) { var delLat = (pt2.latitude - pt1.latitude) / num; if (pt1.longitude - pt2.longitude > 0) { dlt = -dlt; } for (var i2 = 1; i2 < num; i2++) { var tempH = h2 - Math.pow(-0.5 * L + Math.abs(dlt) * i2, 2) * 4 * h2 / Math.pow(L, 2); var lon = pt1.longitude + dlt * i2; var lat = pt1.latitude + delLat * i2; var alt = void 0; if (Math.abs(dlt) * i2 == 0.5 * L) { alt = maxHeight; } else if (Math.abs(dlt) * i2 < 0.5 * L) { alt = (maxHeight - minHeight1) / h2 * tempH + minHeight1; } else { alt = (maxHeight - minHeight2) / h2 * tempH + minHeight2; } tempResult.push([lon, lat, alt]); } } else { var delLon = (pt2.longitude - pt1.longitude) / num; if (pt1.latitude - pt2.latitude > 0) { dlt = -dlt; } for (var i2 = 1; i2 < num; i2++) { var tempH = h2 - Math.pow(-0.5 * L + Math.abs(dlt) * i2, 2) * 4 * h2 / Math.pow(L, 2); var lon = pt1.longitude + delLon * i2; var lat = pt1.latitude + dlt * i2; var alt = void 0; if (Math.abs(dlt) * i2 == 0.5 * L) { alt = maxHeight; } else if (Math.abs(dlt) * i2 < 0.5 * L) { alt = (maxHeight - minHeight1) / h2 * tempH + minHeight1; } else { alt = (maxHeight - minHeight2) / h2 * tempH + minHeight2; } tempResult.push([lon, lat, alt]); } } result.push([pt1.longitude, pt1.latitude, pt1.height]); for (var i2 = 0; i2 < tempResult.length; i2++) { result.push(tempResult[i2]); } result.push([pt2.longitude, pt2.latitude, pt2.height]); let results = []; for (let i3 = 0; i3 < result.length; i3++) { results.push(Cesium.Cartesian3.fromDegrees(result[i3][0], result[i3][1], result[i3][2])); } return results; }, _createOdline: function(isFirst) { let _self = this; if (isFirst !== void 0 && isFirst === true) { let fatherEntity = new Cesium.Entity({ name: this._sketchEntityName }); this._odlineFatherEntity = this._entities.add(fatherEntity); let entityParam = DrawTools.initEditPropertyParams(); entityParam.id = DrawTools.DrawType.OdLine; entityParam.color = _self._param.polygonColor; entityParam.duration = _self._param.duration; entityParam.direction = _self._param.direction_h; entityParam.count = _self._param.count; entityParam.order = _self._param.order_add; entityParam.odlineHeight = _self._param.odlineHeight; entityParam.odlineCount = _self._param.odlineCount; entityParam.lineWidth = _self._param.lineWidth * 3; this._odlineFatherEntity.setParams(entityParam); this._odlineEntitys = []; } let faterParam = this._odlineFatherEntity.getParams(); let odLineMaterial = new WallMaterialProperty({ viewer: _self._viewer, trailImage: _self._image_arrow_reverse, duration: faterParam.duration, color: Cesium.Color.fromCssColorString(faterParam.color), param: { direction: faterParam.direction, count: faterParam.count, order: faterParam.order } }); let entity = new Cesium.Entity({ name: _self._sketchEntityName, parent: this._odlineFatherEntity, polyline: { show: true, positions: new Cesium.CallbackProperty(function() { let center2 = _self._sketchTempPoints[0]; let endPoint = _self._sketchTempPoints[_self._sketchTempPoints.length - 1]; let results = _self._calculateOdlinePositios( center2, endPoint, parseInt( faterParam.odlineHeight ), parseInt(faterParam.odlineCount) ); return results; }, false), material: odLineMaterial, width: faterParam.lineWidth, clampToGround: false } }); this._drawEntity = this._entities.add(entity); }, _updateOdline: function(isLast, isEdit) { if (isLast !== void 0 && isLast === true) { if (isEdit !== void 0 && isEdit === true) { this._drawEntity.setEntityType(DrawTools.DrawType.OdLine); this._setEntityIsEdit(this._drawEntity); this._drawEntity.parent.setIsEdit(true); } } else { let params = this._drawEntity.parent.getParams(); let center2 = this._sketchTempPoints[0]; let endPoint = this._sketchTempPoints[this._sketchTempPoints.length - 1]; let results = this._calculateOdlinePositios( center2, endPoint, parseInt(params.odlineHeight), parseInt(params.odlineCount) ); this._drawEntity.polyline.positions = results; this._drawEntity.setEntityType(DrawTools.DrawType.OdLine); this._odlineEntitys.push(this._drawEntity); if (isEdit !== void 0 && isEdit === true) { this._drawEntity.setIsEdit(true); } } }, _guid() { function S4() { return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1); } return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); }, _console(...rest) { console.log("===>>>", rest); } }); Object.assign(DrawTools.prototype, { _drawMovingDoubleTooltip(position2) { this._updateTooltip("\u5DE6\u952E\u5355\u51FB\u7ED8\u5236,\u53F3\u952E\u5355\u51FB\u64A4\u9500
\u5DE6\u952E\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236", position2); }, _drawMovingSimpleTooltip(position2) { this._updateTooltip("\u5DE6\u952E\u5355\u51FB\u7ED3\u675F\u7ED8\u5236", position2); }, _removeLastDrawPointEntity() { let lastPointEntity = this._pointEntitys.last(); if (lastPointEntity !== void 0) { this._removeEntityByObject(lastPointEntity); this._pointEntitys.pop(); } }, _sketchDrawPoint(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let scene = _self._viewer.scene; if (scene.mode !== Cesium.SceneMode.MORPHING) { var pickedObject = scene.pick(event2.position); if (scene.pickPositionSupported && Cesium.defined(pickedObject)) { var cartesian = scene.pickPosition(event2.position); if (Cesium.defined(cartesian)) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); var lng = Cesium.Math.toDegrees(cartographic.longitude); var lat = Cesium.Math.toDegrees(cartographic.latitude); var height2 = cartographic.height; _self._sketchOutputPoints.push({ lng, lat, height: height2 }); } _self._createPoint(cartesian, "\u70B9"); _self._sketchPoints.push(cartesian.clone()); if (_self._sketchPoints.length >= 2) { _self._createVideoWall(); _self._clearEvent(handler); } } } if (options2.onComplete) options2.onComplete(loc.sLocation, loc.gLocation); }); }, _sketchDrawMultiplePoint(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } _self._sketchPoints.push(loc2.sLocation); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(loc2.sLocation, loc2.gLocation); }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchPoints.length > 0) { _self._sketchPoints.pop(); _self._sketchOutputPoints.pop(); if (options2.onUndo) options2.onUndo(); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); }, _sketchDrawPolyline(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._sketchTempPoints.length === 0) { _self._createPolyline(options2.polylineType); _self._sketchTempPoints.push(loc2.sLocation.clone()); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(_self._sketchPoints, _self._sketchOutputPoints); _self._createOperationDom(); }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchTempPoints.length > 1) { _self._drawMovingDoubleTooltip(event2.endPosition); _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); if (options2.onMoving) options2.onMoving(loc2.sLocation); } }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchTempPoints.length > 2) { _self._drawByUndo(); if (options2.onUndo) options2.onUndo(); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { if (_self._sketchPoints.length < 2) { if (options2.onError) options2.onError("\u70B9\u6570\u5C11\u4E8E\u4E24\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._updatePolyline(options2.isEdit); if (!_self._isRetainDrawPoint) _self._removePointEntitys(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); }, _sketchDrawSpatialPolyline(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._sketchTempPoints.length === 0) { _self._createSpatialPolyline(); _self._sketchTempPoints.push(loc2.sLocation.clone()); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(_self._sketchPoints, _self._sketchOutputPoints); _self._createOperationDom(); }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchTempPoints.length > 1) { _self._drawMovingDoubleTooltip(event2.endPosition); _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); if (options2.onMoving) options2.onMoving(loc2.sLocation); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { if (_self._sketchPoints.length < 2) { if (options2.onError) options2.onError("\u7ED8\u5236\u70B9\u5C11\u4E8E2\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._updateSpatialPolyline(options2.isEdit); _self._removePointEntitys(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchTempPoints.length > 2) { _self._drawByUndo(); if (options2.onUndo) options2.onUndo(); } }); }, _sketchDrawOdline(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._isRuntimeApp()) { _self._showTooltipMessage("\u518D\u6B21\u5355\u51FB\u7ED8\u5236\u4E00\u6761OD\u7EBF\uFF01"); } if (_self._sketchTempPoints.length === 0) { _self._createOdline(true); _self._sketchTempPoints.push(loc2.sLocation.clone()); } else { _self._sketchTempPoints.push(loc2.sLocation.clone()); _self._updateOdline(false, options2.isEdit); _self._createOdline(); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(_self._sketchPoints, _self._sketchOutputPoints); _self._createOperationDom(); }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchTempPoints.length > 1) { _self._drawMovingDoubleTooltip(event2.endPosition); _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); if (options2.onMoving) options2.onMoving(loc2.sLocation); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { _self._removeEntityByObject(_self._drawEntity); _self._updateOdline(true, options2.isEdit); _self._removePointEntitys(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); this._registerRightClickEvent(handler, function(event2) { if (_self._odlineEntitys.length > 0) { if (_self._isDrawPoint) { _self._removeLastDrawPointEntity(); } _self._removeEntityByObject(_self._odlineEntitys.last()); _self._odlineEntitys.pop(); if (options2.onUndo) options2.onUndo(); } }); }, _sketchDrawPolygon(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._sketchTempPoints.length === 0) { _self._createPolygon(options2.polygonType); _self._sketchTempPoints.push(loc2.sLocation.clone()); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); if (options2.onAdded) options2.onAdded(_self._sketchPoints, _self._sketchOutputPoints); _self._createOperationDom(); }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchTempPoints.length > 1) { _self._drawMovingDoubleTooltip(event2.endPosition); _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); if (options2.onMoving) options2.onMoving(loc2.sLocation); } }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchTempPoints.length > 2) { _self._drawByUndo(); if (options2.onUndo) options2.onUndo(); } }); this._registerLeftDoubleClickEvent(handler, function(event2) { if (_self._sketchPoints.length < 3) { if (options2.onError) options2.onError("\u70B9\u6570\u5C11\u4E8E3\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._updatePolygon(options2.isEdit); if (!_self._isRetainDrawPoint) _self._removePointEntitys(); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchPoints, _self._sketchOutputPoints); }); }, _sketchDrawCircle: function(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchTempPoints.length === 0) { if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, "\u8D77\u70B9"); } _self._sketchTempPoints.push(loc2.sLocation.clone()); _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.sLocation.clone()); _self._sketchOutputPoints.push(loc2.gLocation); _self._createCircle(loc2.sLocation, options2.circleType); if (_self._isRuntimeApp()) { _self._showTooltipMessage("\u518D\u6B21\u5355\u51FB\u7ED3\u675F\u7ED8\u5236\uFF01"); } if (options2.onAdded) options2.onAdded(loc2.sLocation); } else { _self._sketchTempPoints.push(loc2.sLocation.clone()); _self._removePointEntitys(); _self._updateCircle(options2.isEdit); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchOutputPoints[0], _self._sketchEllipseRadius); } }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) { return; } if (_self._sketchTempPoints.length <= 0) return; _self._drawMovingSimpleTooltip(event2.endPosition); var cartesian = _self._viewer.scene.pickPosition(event2.endPosition); if (cartesian == void 0) return; _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(cartesian); }); }, _sketchDrawRectangle: function(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { if (_self._sketchTempPoints.length === 0) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, "\u8D77\u70B9"); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchTempPoints.push(loc2.sLocation); _self._sketchPoints.push(loc2.gLocation); _self._createRectangle(); if (options2.onAdded) options2.onAdded(loc2.sLocation); if (_self._isRuntimeApp()) { _self._showTooltipMessage("\u518D\u6B21\u5355\u51FB\u7ED3\u675F\u7ED8\u5236\uFF01"); } } else { _self._removePointEntitys(); _self._removeEntityByObject(_self._sketchTempRectangle); _self._updateRectangle(options2.isEdit); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(_self._sketchOutputPoints); } }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._sketchTempPoints.length < 1) return; _self._drawMovingSimpleTooltip(event2.endPosition); let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); }); }, _sketchDrawWall: function(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._sketchTempPoints.length === 0) { _self._createWall(options2.wallType); _self._sketchTempPoints.push(loc2.sLocation.clone()); _self._sketchWallHeights.push(loc2.gLocation.height); } _self._sketchTempPoints.push(loc2.sLocation); _self._sketchWallHeights.push(loc2.gLocation.height); _self._sketchPoints.push(loc2.sLocation.clone()); _self._createOperationDom(); }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) { return; } let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchTempPoints.length > 1) { _self._drawMovingDoubleTooltip(event2.endPosition); _self._sketchTempPoints.pop(); _self._sketchTempPoints.push(loc2.sLocation); _self._sketchWallHeights.pop(); _self._sketchWallHeights.push(loc2.gLocation.height); } }); this._registerRightClickEvent(handler, function(event2) { if (_self._sketchTempPoints.length > 2) { _self._sketchPoints.pop(); if (_self._isRuntimeApp()) { _self._sketchTempPoints.splice(_self._sketchTempPoints.length - 1, 1); _self._sketchWallHeights.splice(_self._sketchWallHeights.length - 1, 1); } else { _self._sketchTempPoints.splice(_self._sketchTempPoints.length - 2, 1); _self._sketchWallHeights.splice(_self._sketchWallHeights.length - 2, 1); } if (_self._isDrawPoint) { _self._removeLastDrawPointEntity(); } } }); this._registerLeftDoubleClickEvent(handler, function(event2) { if (_self._sketchPoints.length < 2) { if (options2.onError) options2.onError("\u70B9\u6570\u5C11\u4E8E\u4E24\u4E2A\uFF0C\u7981\u6B62\u7ED3\u675F\u7ED8\u5236\uFF01"); return; } _self._updateWall(options2.isEdit); if (!_self._isRetainDrawPoint) _self._removePointEntitys(); _self._clearEvent(handler); }); }, _sketchDrawVideoWall: function(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; if (_self._isDrawPoint) { _self._createPoint(loc2.sLocation, _self._lineLabel); } if (_self._sketchOutputPoints.length === 0) { _self._sketchOutputPoints.push(loc2.gLocation); _self._sketchOutputPoints.push(loc2.gLocation); _self._createVideoWall(); if (_self._isRuntimeApp()) { _self._showTooltipMessage("\u518D\u6B21\u5355\u51FB\u7ED3\u675F\u7ED8\u5236"); } } else { _self._updateVideoWall(options2.isEdit); _self._clearEvent(handler); } }); this._registerMouseMoveEvent(handler, function(event2) { if (_self._isRuntimeApp()) return; let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; if (_self._sketchOutputPoints.length > 1) { _self._drawMovingSimpleTooltip(event2.endPosition); _self._sketchOutputPoints.pop(); _self._sketchOutputPoints.push(loc2.gLocation); } }); }, _drawByUndo: function() { this._sketchPoints.pop(); if (this._isRuntimeApp()) { this._sketchTempPoints.splice(this._sketchTempPoints.length - 1, 1); } else { this._sketchTempPoints.splice(this._sketchTempPoints.length - 2, 1); } if (this._isDrawPoint) { this._removeLastDrawPointEntity(); } }, draw: function(type2, options2) { let _self = this; this._clear(); this._drawEventHandler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); if (this._isRuntimeApp()) { this._showTooltipMessage("\u5355\u51FB\u7ED8\u5236"); } else { this._beginTooltip("\u5DE6\u952E\u5355\u51FB\u7ED8\u5236", void 0); } this._drawType = type2; switch (type2) { case DrawTools.DrawType.Point: _self._sketchDrawPoint(_self._drawEventHandler, options2); break; case DrawTools.DrawType.Polyline: options2.polylineType = DrawTools.PolylineType.NormalPolyline; _self._sketchDrawPolyline(_self._drawEventHandler, options2); break; case DrawTools.DrawType.ArrowPolyline: options2.polylineType = DrawTools.PolylineType.ArrowsPolyline; _self._sketchDrawPolyline(_self._drawEventHandler, options2); break; case DrawTools.DrawType.DynamicPolyline: options2.polylineType = DrawTools.PolylineType.DynamicPolyline; _self._sketchDrawPolyline(_self._drawEventHandler, options2); break; case DrawTools.DrawType.GrowPolyline: options2.polylineType = DrawTools.PolylineType.GrowPolyline; _self._sketchDrawPolyline(_self._drawEventHandler, options2); break; case DrawTools.DrawType.OutlinePolyline: options2.polylineType = DrawTools.PolylineType.OutlinePolyline; _self._sketchDrawPolyline(_self._drawEventHandler, options2); break; case DrawTools.DrawType.Polygon: options2.polygonType = DrawTools.PolygonType.NormalPolygon; _self._sketchDrawPolygon(_self._drawEventHandler, options2); break; case DrawTools.DrawType.SpatialLine: _self._sketchDrawSpatialPolyline(_self._drawEventHandler, options2); break; case DrawTools.DrawType.Circle: options2.circleType = DrawTools.CircleType.ColorCircle; _self._sketchDrawCircle(_self._drawEventHandler, options2); break; case DrawTools.DrawType.Rectangle: _self._sketchDrawRectangle(_self._drawEventHandler, options2); break; case DrawTools.DrawType.NormalWall: options2.wallType = DrawTools.WallType.ColorWall; _self._sketchDrawWall(_self._drawEventHandler, options2); break; case DrawTools.DrawType.DynamicWall: options2.wallType = DrawTools.WallType.DynamicWall; _self._sketchDrawWall(_self._drawEventHandler, options2); break; case DrawTools.DrawType.TextWall: options2.wallType = DrawTools.WallType.TextWall; _self._sketchDrawWall(_self._drawEventHandler, options2); break; case DrawTools.DrawType.DynamicCircle: options2.circleType = DrawTools.CircleType.DynamicCircle; _self._sketchDrawCircle(_self._drawEventHandler, options2); break; case DrawTools.DrawType.House: options2.polygonType = DrawTools.PolygonType.HousePolygon; _self._sketchDrawPolygon(_self._drawEventHandler, options2); break; case DrawTools.DrawType.VideoWall: _self._sketchDrawVideoWall(_self._drawEventHandler, options2); break; case DrawTools.DrawType.OdLine: _self._sketchDrawOdline(_self._drawEventHandler, options2); break; } }, Clear: function() { this._clear(true); this._unActivateEdit(); this._closePropertyEditDialog(); this._removeOperationDom(); }, sketchInit: function() { this._clear(false); }, _checkAppOrWeb() { if (window.navigator.userAgent.match( /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i )) { return DrawTools.RuntimeEnvironment.App; } else { return DrawTools.RuntimeEnvironment.Web; } }, _isRuntimeApp() { if (this._checkAppOrWeb() === DrawTools.RuntimeEnvironment.App) { return true; } return false; } }); Object.assign(DrawTools.prototype, { _tooltipInit: function(text, mousePosition) { let _self = this; this._tooltipId = "tooltipSketchmodel"; let tooltipObj = document.getElementById(this._tooltipId); if (tooltipObj === null) { tooltipObj = document.createElement("div"); tooltipObj.id = this._tooltipId; document.body.appendChild(tooltipObj); let divStyle = ""; divStyle += "top: 30px;"; divStyle += "left: 30px;"; divStyle += "position: absolute;"; divStyle += "display: flex;"; divStyle += "align-items: center;"; divStyle += "width: 12x0px;"; divStyle += "height: auto;"; divStyle += "background-color: rgba(0, 0, 0, 0.65);"; divStyle += "border-radius: 5px;"; divStyle += "color: rgb(255, 255, 255);"; divStyle += "font-size: 12px;"; divStyle += "font-family: 'Alimama_ShuHeiTi_Bold';"; divStyle += "padding: 8px;"; divStyle += "border:solid 1px rgb(255,0,0);"; tooltipObj.setAttribute("style", divStyle); } if (text != void 0) tooltipObj.innerHTML = text; if (mousePosition === void 0) { document.onmousemove = function(event2) { if (event2.clientX < 100 || event2.clientX > _self._canvasWidth - 100 || event2.clientY < 100 || event2.clientY > _self._canvasHeight - 100) { tooltipObj.style.display = "none"; } else { tooltipObj.style.display = "flex"; tooltipObj.style.left = event2.clientX + 10 + "px"; tooltipObj.style.top = event2.clientY - tooltipObj.offsetHeight / 2 + "px"; } }; } else { if (mousePosition.x < 100 || mousePosition.x > _self._canvasWidth - 100 || mousePosition.y < 100 || mousePosition.y > _self._canvasHeight - 100) { tooltipObj.style.display = "none"; } else { tooltipObj.style.display = "flex"; tooltipObj.style.left = mousePosition.x + 10 + "px"; tooltipObj.style.top = mousePosition.y - tooltipObj.offsetHeight / 2 + "px"; } } }, _tooltipRemove: function() { let tooltipObj = document.getElementById(this._tooltipId); if (tooltipObj != null) { document.body.removeChild(tooltipObj); } }, _tooltipSetText: function(text, mousePosition) { let tooltipObj = document.getElementById(this._tooltipId); if (tooltipObj != null) { if (text != void 0) tooltipObj.innerHTML = text; if (mousePosition != void 0) { if (mousePosition.x < 100 || mousePosition.x > this._canvasWidth - 100 || mousePosition.y < 100 || mousePosition.y > this._canvasHeight - 100) { tooltipObj.style.display = "none"; } else { tooltipObj.style.display = "flex"; tooltipObj.style.left = mousePosition.x + 10 + "px"; tooltipObj.style.top = mousePosition.y - tooltipObj.offsetHeight / 2 + "px"; } } } }, _setMousePointerStyle: function() { document.querySelector("body").style.cursor = "crosshair"; }, _setMouseDefaultStyle: function() { document.querySelector("body").style.cursor = "default"; }, _beginTooltip(text, position2) { this._tooltipInit(text, position2); this._setMousePointerStyle(); }, _updateTooltip(text, position2) { this._tooltipSetText(text, position2); }, _endTooltip() { this._tooltipRemove(); this._setMouseDefaultStyle(); }, _showTooltipMessage: function(message) { let msgMainDom = document.getElementById("messageMainDom"); if (msgMainDom !== null && msgMainDom !== void 0) { document.body.removeChild(msgMainDom); } msgMainDom = document.createElement("div"); msgMainDom.style.width = "30%"; msgMainDom.style.backgroundColor = "rgba(237, 248, 230, 1.0)"; msgMainDom.style.height = "45px"; msgMainDom.style.border = "solid 2px rgb(219, 241, 208)"; msgMainDom.style.borderRadius = "8px"; msgMainDom.style.display = "flex"; msgMainDom.style.alignItems = "center"; msgMainDom.style.paddingLeft = "10px"; msgMainDom.style.color = "rgb(91, 188, 48)"; msgMainDom.style.fontSize = "14px"; msgMainDom.style.fontWeight = "600"; msgMainDom.style.position = "absolute"; msgMainDom.style.left = "35%"; msgMainDom.style.transition = "transform 1s"; msgMainDom.style.transform = "translateY(-90px)"; msgMainDom.style.top = "0px"; msgMainDom.style.zIndex = 1e3; document.body.appendChild(msgMainDom); let strHtml = ""; strHtml += "
"; strHtml += "
" + message + "
"; msgMainDom.innerHTML = strHtml; msgMainDom.addEventListener("transitionend", function() { setTimeout(function() { document.body.removeChild(msgMainDom); }, 1e3); }, false); setTimeout(function() { msgMainDom.style.transform = "translateY(50px)"; }, 100); } }); Object.assign(DrawTools.prototype, { _createSingleCoordinateAxisArrow(positions, color2, axisEntityId) { let _self = this; let coordinateAxisEntity = new Cesium.Entity({ id: axisEntityId, name: _self._coordinateAxisEntityName, position: positions[0], polyline: { positions, width: 10, material: _self._materialPolylineArrowProperty({ color: color2 }) } }); coordinateAxisEntity.setEditType({ type: DrawTools.EditPointType.CoordinateAxis }); return this._entities.add(coordinateAxisEntity); }, _getTranslatePostion: function(originPosition, translateCartesian) { let transform3 = Cesium.Transforms.eastNorthUpToFixedFrame(originPosition); let m = new Cesium.Matrix4(); Cesium.Matrix4.setTranslation( Cesium.Matrix4.IDENTITY, translateCartesian, m ); let modelMatrix = Cesium.Matrix4.multiply(transform3, m, transform3); let outPosition = new Cesium.Cartesian3(0, 0, 0); Cesium.Matrix4.getTranslation(modelMatrix, outPosition); return outPosition; }, _createCoordinateAxis: function(position2) { this._showTooltipMessage("\u5355\u51FB\u53F3\u952E\u79FB\u9664\u8C03\u6574\u8F74\u7EBF\uFF01"); this._removeCoorinateAxis(); let _self = this; let cameraRight = this._viewer.scene.camera.rightWC; this._tx = cameraRight.x > 0 ? 150 : -150; this._ty = cameraRight.y > 0 ? 150 : -150; this._tz = 150; this._coordinateAxisEntityId_x = "coordinateAxisId_x"; this._coordinateAxisEntityId_y = "coordinateAxisId_y"; this._coordinateAxisEntityId_z = "coordinateAxisId_z"; this._coordinateAxisEntityName = "coordinateAxisEntity"; let translateCartesian = new Cesium.Cartesian3(this._tx, 0, 0); let endPosition = this._getTranslatePostion(position2, translateCartesian); const xPos = [position2, endPosition]; this._coordinateEntity_x = this._createSingleCoordinateAxisArrow(xPos, "rgba(0,255,0,1.0)", this._coordinateAxisEntityId_x); this._coordinateAxisBindEntity(this._coordinateEntity_x); translateCartesian = new Cesium.Cartesian3(0, this._ty, 0); endPosition = this._getTranslatePostion(position2, translateCartesian); const yPos = [position2, endPosition]; this._coordinateEntity_y = this._createSingleCoordinateAxisArrow(yPos, "rgba(0,0,255,1.0)", this._coordinateAxisEntityId_y); this._coordinateAxisBindEntity(this._coordinateEntity_y); translateCartesian = new Cesium.Cartesian3(0, 0, this._tz); endPosition = this._getTranslatePostion(position2, translateCartesian); const zPos = [position2, endPosition]; this._coordinateEntity_z = this._createSingleCoordinateAxisArrow(zPos, "rgba(255,0,0,1.0)", this._coordinateAxisEntityId_z); this._coordinateAxisBindEntity(this._coordinateEntity_z); this._eventCoorinateAxis = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); this._registerLeftDownEvent(this._eventCoorinateAxis, function(event2) { _self._coorinateAxisMouseDown(event2); }); this._registerMouseMoveEvent(this._eventCoorinateAxis, function(event2) { _self._coorinateAxisMouseMove(event2); }); this._registerLeftUpEvent(this._eventCoorinateAxis, function(event2) { _self._coorinateAxisMouseUp(event2); }); this._registerRightClickEvent(this._eventCoorinateAxis, function(event2) { _self._removeCoorinateAxis(); }); }, _coordinateAxisBindEntity: function(axisEntity) { if (this._editEntity === void 0) return; let editEntityType = this._editEntity.getEntityType(); if (editEntityType === void 0) return; if (editEntityType === DrawTools.DrawType.VideoWall) { axisEntity.bindEntity(this._editEntity); } }, _coorinateAxisMouseDown: function(event2) { let _self = this; let feature2 = this._viewer.scene.pick(event2.position); if (feature2 === void 0) return; if (feature2.id != void 0 && feature2.id instanceof Cesium.Entity) { this._viewer.scene.screenSpaceCameraController.enableRotate = false; if (feature2.id.getEditType() === void 0) return; let entityType = feature2.id.getEditType().type; if (entityType !== DrawTools.EditPointType.CoordinateAxis) return; this._editCoorinateAxis = feature2.id; this._editCoorinateAxis.polyline.width = 15; this._coordinateAxisMoveStartPosition = this._viewer.scene.camera.pickEllipsoid( event2.position, this._viewer.scene.globe.ellipsoid ); this._coordinateAxisMoveStartScreen = event2.position; this._coorinateAxisPosition = this._editCoorinateAxis.position._value; this._coordinateEntity_x.polyline.positions = new Cesium.CallbackProperty(function() { let translateCartesian = new Cesium.Cartesian3(_self._tx, 0, 0); let endPosition = _self._getTranslatePostion( _self._coorinateAxisPosition, translateCartesian ); return [_self._coorinateAxisPosition, endPosition]; }, false); this._coordinateEntity_y.polyline.positions = new Cesium.CallbackProperty(function() { let translateCartesian = new Cesium.Cartesian3(0, _self._ty, 0); let endPosition = _self._getTranslatePostion( _self._coorinateAxisPosition, translateCartesian ); return [_self._coorinateAxisPosition, endPosition]; }, false); this._coordinateEntity_z.polyline.positions = new Cesium.CallbackProperty(function() { let translateCartesian = new Cesium.Cartesian3(0, 0, _self._tz); let endPosition = _self._getTranslatePostion( _self._coorinateAxisPosition, translateCartesian ); return [_self._coorinateAxisPosition, endPosition]; }, false); this._coordinateAxisActivateEditEntity(this._editCoorinateAxis); } }, _coorinateAxisMouseMove: function(event2) { if (!Cesium.defined(this._editCoorinateAxis)) return; let position2 = this._viewer.scene.camera.pickEllipsoid( event2.endPosition, this._viewer.scene.globe.ellipsoid ); if (!position2) return; let strGeo = this._cartesian3ToGeo(this._coordinateAxisMoveStartPosition); let endGeo = this._cartesian3ToGeo(position2); let entityId = this._editCoorinateAxis.id; let entityPosition = this._editCoorinateAxis.position._value; let entityGeo = this._cartesian3ToGeo(entityPosition); let heightDifference = 0; if (entityId === this._coordinateAxisEntityId_x) { let difference = strGeo.longitude - endGeo.longitude; entityGeo.longitude = entityGeo.longitude - difference; } else if (entityId === this._coordinateAxisEntityId_y) { let difference = strGeo.latitude - endGeo.latitude; entityGeo.latitude = entityGeo.latitude - difference; } else if (entityId === this._coordinateAxisEntityId_z) { heightDifference = event2.endPosition.y - this._coordinateAxisMoveStartScreen.y; heightDifference = heightDifference * 0.5; entityGeo.height = entityGeo.height - heightDifference; } this._coorinateAxisPosition = Cesium.Cartesian3.fromDegrees(entityGeo.longitude, entityGeo.latitude, entityGeo.height); this._moveEditEntityByCoordinateAxis(entityPosition, this._coorinateAxisPosition, heightDifference); }, _coorinateAxisMouseUp: function(event2) { this._viewer.scene.screenSpaceCameraController.enableRotate = true; if (this._editCoorinateAxis !== void 0) { this._editCoorinateAxis.polyline.width = 10; let translateCartesian = new Cesium.Cartesian3(this._tx, 0, 0); let endPosition = this._getTranslatePostion(this._coorinateAxisPosition, translateCartesian); this._coordinateEntity_x.polyline.positions = [this._coorinateAxisPosition, endPosition]; translateCartesian = new Cesium.Cartesian3(0, this._ty, 0); endPosition = this._getTranslatePostion(this._coorinateAxisPosition, translateCartesian); this._coordinateEntity_y.polyline.positions = [this._coorinateAxisPosition, endPosition]; translateCartesian = new Cesium.Cartesian3(0, 0, this._tz); endPosition = this._getTranslatePostion(this._coorinateAxisPosition, translateCartesian); this._coordinateEntity_z.polyline.positions = [this._coorinateAxisPosition, endPosition]; this._coordinateEntity_x.position = this._coorinateAxisPosition; this._coordinateEntity_y.position = this._coorinateAxisPosition; this._coordinateEntity_z.position = this._coorinateAxisPosition; this._coordinateAxisUpdateEditEntity(this._editCoorinateAxis); this._editCoorinateAxis = void 0; } }, _moveEditEntityByCoordinateAxis: function(strPosition, endPosition, heightDifference) { let movePosition = Cesium.Cartesian3.subtract(endPosition, strPosition, new Cesium.Cartesian3()); for (let i2 = 0; i2 < this._moveInitPositions.length; i2++) { let moveResult = Cesium.Cartesian3.add(this._moveInitPositions[i2], movePosition, new Cesium.Cartesian3()); this._moveUpdatePositions[i2] = moveResult.clone(); } for (let i2 = 0; i2 < this._moveInitHeights.length; i2++) { this._moveUpdateHeights[i2] = parseFloat(this._moveInitHeights[i2]) + heightDifference * -1; } }, _coordinateAxisActivateEditEntity: function(moveAxisEntity) { let _self = this; let bindEntity = moveAxisEntity.getBindEntity(); if (bindEntity === void 0) return; let bindEntityType = bindEntity.getEntityType(); if (bindEntityType === DrawTools.DrawType.VideoWall) { let wall = bindEntity.wall; this._moveInitPositions = wall.positions._value; this._moveInitHeights = wall.minimumHeights._value; this._moveInitHeight = wall.maximumHeights._value[0] - wall.minimumHeights._value[0]; this._moveUpdatePositions = []; for (let i2 = 0; i2 < this._moveInitPositions.length; i2++) { this._moveUpdatePositions.push(this._moveInitPositions[i2].clone()); } wall.positions = new Cesium.CallbackProperty(function() { return _self._moveUpdatePositions; }, false); this._moveUpdateHeights = []; for (let i2 = 0; i2 < this._moveInitHeights.length; i2++) { this._moveUpdateHeights.push(this._moveInitHeights[i2]); } wall.minimumHeights = new Cesium.CallbackProperty(function() { return _self._moveUpdateHeights; }, false); wall.maximumHeights = new Cesium.CallbackProperty(function() { let maxHeights = []; for (let i2 = 0; i2 < _self._moveUpdateHeights.length; i2++) { maxHeights.push(parseFloat(_self._moveUpdateHeights[i2]) + _self._moveInitHeight); } return maxHeights; }, false); } }, _coordinateAxisUpdateEditEntity: function(moveAxisEntity) { let bindEntity = moveAxisEntity.getBindEntity(); if (bindEntity === void 0) return; let bindEntityType = bindEntity.getEntityType(); if (bindEntityType === DrawTools.DrawType.VideoWall) { let wall = bindEntity.wall; wall.positions = this._moveUpdatePositions; wall.minimumHeights = this._moveUpdateHeights; let maxHeights = []; for (let i2 = 0; i2 < this._moveUpdateHeights.length; i2++) { maxHeights.push(parseFloat(this._moveUpdateHeights[i2]) + this._moveInitHeight); } wall.maximumHeights = maxHeights; } }, _coordinateCalculateEntityOrientation: function(entity, options2) { let position2 = entity.position._value; let orientation = entity.orientation === void 0 ? new Cesium.Cartesian3(0, 0, 0) : entity.orientation._value; let transform3 = Cesium.Matrix4.fromTranslationQuaternionRotationScale( position2, orientation, new Cesium.Cartesian3(1, 1, 1), new Cesium.Matrix4() ); let _rotateX = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(options2.x)); let _rotateY = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(options2.y)); let _rotateZ = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(options2.z)); transform3 = Cesium.Matrix4.multiplyByMatrix3(transform3, _rotateX, transform3); transform3 = Cesium.Matrix4.multiplyByMatrix3(transform3, _rotateY, transform3); transform3 = Cesium.Matrix4.multiplyByMatrix3(transform3, _rotateZ, transform3); let m3 = Cesium.Matrix4.getRotation(transform3, new Cesium.Matrix3()); let resOrientation = new Cesium.Quaternion(); Cesium.Quaternion.fromRotationMatrix(m3, resOrientation); return resOrientation; }, _removeCoorinateAxis: function() { if (this._coordinateAxisEntityName !== void 0) { this._removeEntityByName(this._coordinateAxisEntityName); } if (this._eventCoorinateAxis !== void 0) { this._clearEvent(this._eventCoorinateAxis); this._eventCoorinateAxis = void 0; } } }); Object.assign(DrawTools.prototype, { _setEntityIsEdit(entity) { let _self = this; entity.setIsEdit(true); this._unActivateEdit(); this._sendShowPropertyDialog(entity); let handler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); this._registerLeftClickEvent(handler, function(event2) { _self._unActivateEdit(); let feature2 = _self._viewer.scene.pick(event2.position); if (feature2 !== void 0 && feature2.id instanceof Cesium.Entity) { let featureType = feature2.id.getEditType(); let entityType = feature2.id.getEntityType(); if (featureType === DrawTools.EditPointType.Node || featureType === DrawTools.EditPointType.Middle || featureType === DrawTools.EditPointType.Center || featureType === DrawTools.EditPointType.CoordinateAxis || featureType === DrawTools.EditPointType.OdlineStrartNode || featureType === DrawTools.EditPointType.OdlineEndNode || entityType === DrawTools.DrawType.Polyline || entityType === DrawTools.DrawType.ArrowPolyline || entityType === DrawTools.DrawType.DynamicPolyline || entityType === DrawTools.DrawType.GrowPolyline || entityType === DrawTools.DrawType.OutlinePolyline || entityType === DrawTools.DrawType.OdLine || entityType === DrawTools.DrawType.Polygon || entityType === DrawTools.DrawType.SpatialLine || entityType === DrawTools.DrawType.Circle || entityType === DrawTools.DrawType.DynamicCircle || entityType === DrawTools.DrawType.Rectangle || entityType === DrawTools.DrawType.NormalWall || entityType === DrawTools.DrawType.DynamicWall || entityType === DrawTools.DrawType.House || entityType === DrawTools.DrawType.TextWall || entityType === DrawTools.DrawType.VideoWall) { _self._sendShowPropertyDialog(feature2.id); } } }); }, _sendShowPropertyDialog(entity) { let _self = this; let editEntityType = entity.getEntityType(); if (entity.getIsEdit() === void 0 || entity.getIsEdit() === false || editEntityType === void 0) { this._unActivateEdit(); return; } let editProperty = entity.getParams(); if (editEntityType === DrawTools.DrawType.OdLine) { editProperty = entity.parent.getParams(); } if (editProperty !== void 0 && this.onEditProperty !== void 0) { this._openPropertyEditDialog(editProperty, function(params) { _self.updateEditEntityProperty(params); }, function() { _self._removeEditEntity(); }); } this._activateEdit(entity); }, _removeEditEntity() { if (this._editEntity !== void 0) { let entityType = this._editEntity.getEntityType(); if (entityType === DrawTools.DrawType.OdLine) { let fatherEntityId = this._editEntity.parent.id; let removeEntitys = []; for (let entity of this._entities.values) { if (entity.parent !== void 0 && entity.parent.id === fatherEntityId) { removeEntitys.push(entity); } } for (let removeEntity of removeEntitys) { this._removeEntityByObject(removeEntity); } } else { this._removeEntityByObject(this._editEntity); } this._unActivateEdit(); this._editEntity = void 0; } }, updateEditEntityProperty: function(params) { if (this._editEntity === void 0) return; if (this._editEntity.getIsEdit() === void 0 || this._editEntity.getIsEdit() === false) return; let editEntityType = this._editEntity.getEntityType(); if (editEntityType === void 0) return; if (editEntityType === DrawTools.DrawType.NormalWall || editEntityType === DrawTools.DrawType.DynamicWall || editEntityType === DrawTools.DrawType.TextWall) { this._updateWallProperty(params); } else if (editEntityType === DrawTools.DrawType.Circle || editEntityType === DrawTools.DrawType.DynamicCircle) { this._updateCircleProperty(params); } else if (editEntityType === DrawTools.DrawType.House) { this._updateHouseProperty(params); } else if (editEntityType === DrawTools.DrawType.VideoWall) { this._updateVideoWallProperty(params); } else if (editEntityType === DrawTools.DrawType.Polyline) { this._updatePolylineProperty(params); } else if (editEntityType === DrawTools.DrawType.Polygon) { this._updatePolygonProperty(params); } else if (editEntityType === DrawTools.DrawType.Rectangle) { this._updateRectangleProperty(params); } else if (editEntityType === DrawTools.DrawType.SpatialLine) { this._updateSpatialPolylineProperty(params); } else if (editEntityType === DrawTools.DrawType.OdLine) { this._updateOdlineProperty(params); } }, _updateOdlineProperty(params) { let _self = this; let fatherEntity = this._editEntity.parent; this._editOdlineEntities = []; for (let entity of this._entities.values) { if (entity.parent !== void 0 && entity.parent.id === fatherEntity.id) { this._editOdlineEntities.push(entity); } } let meterialImage = this._image_arrow_reverse; if (params.order === this._param.order_add) { meterialImage = this._image_arrow_reverse; } else if (params.order === this._param.order_minus) { meterialImage = this._image_arrow_forward; } let odLineMaterial = new WallMaterialProperty({ viewer: _self._viewer, trailImage: meterialImage, duration: params.duration, color: Cesium.Color.fromCssColorString(params.color), param: { direction: params.direction, count: params.count, order: params.order } }); for (let entity of this._editOdlineEntities) { entity.polyline.material = odLineMaterial; let positions = entity.polyline.positions._value; let strPoint = positions.first(); let endPoint = positions.last(); let newPositios = this._calculateOdlinePositios( strPoint, endPoint, parseInt(params.odlineHeight), parseInt(params.odlineCount) ); entity.polyline.positions = newPositios; entity.polyline.width = parseInt(params.lineWidth); } fatherEntity.setParams(params); }, _updateSpatialPolylineProperty(params) { let material = this._editEntity.polyline.material; let newMaterial = void 0; if (material instanceof Cesium.ColorMaterialProperty) { newMaterial = this._materialColorProperty({ color: params.color }); } if (newMaterial !== void 0) this._editEntity.polyline.material = newMaterial; this._editEntity.polyline.width = parseFloat(params.lineWidth); this._editEntity.setParams(params); }, _updateRectangleProperty(params) { let material = this._editEntity.rectangle.material; if (material instanceof Cesium.ColorMaterialProperty) { let newMaterial = this._materialColorProperty({ color: params.color }); this._editEntity.rectangle.material = newMaterial; } if (this._editEntity.polyline !== void 0) { let newMaterial = this._materialColorProperty({ color: params.outlineColor }); this._editEntity.polyline.material = newMaterial; this._editEntity.polyline.width = parseFloat(params.outlineWidth); } this._editEntity.setParams(params); }, _updatePolygonProperty(params) { let material = this._editEntity.polygon.material; if (material instanceof Cesium.ColorMaterialProperty) { let newMaterial = this._materialColorProperty({ color: params.color }); this._editEntity.polygon.material = newMaterial; } if (this._editEntity.polyline !== void 0) { let newMaterial = this._materialColorProperty({ color: params.outlineColor }); this._editEntity.polyline.material = newMaterial; this._editEntity.polyline.width = parseFloat(params.outlineWidth); } this._editEntity.setParams(params); }, _updatePolylineProperty(params) { let material = this._editEntity.polyline.material; let newMaterial = void 0; if (material instanceof Cesium.ColorMaterialProperty) { newMaterial = this._materialColorProperty({ color: params.color }); } else if (material instanceof Cesium.PolylineArrowMaterialProperty) { newMaterial = this._materialPolylineArrowProperty({ color: params.color }); } else if (material instanceof WallMaterialProperty) { let materialImage = this._image_h_l_r; if (params.order === this._param.order_minus) { materialImage = this._image_h_r_l; } else if (params.order === this._param.order_add) { materialImage = this._image_h_l_r; } newMaterial = new WallMaterialProperty({ viewer: this._viewer, trailImage: materialImage, duration: params.duration, color: Cesium.Color.fromCssColorString(params.color), param: { count: parseInt(params.count), direction: params.direction, order: params.order } }); } else if (material instanceof Cesium.PolylineGlowMaterialProperty) { newMaterial = this._materialPolylineGlowProperty({ color: params.color, power: parseFloat(params.power) }); } else if (material instanceof Cesium.PolylineOutlineMaterialProperty) { newMaterial = this._materialPolylineOutlineProperty({ color: params.color, outlineWidth: parseFloat(params.outlineWidth), outlineColor: params.outlineColor }); } if (newMaterial !== void 0) this._editEntity.polyline.material = newMaterial; this._editEntity.polyline.width = params.lineWidth; this._editEntity.setParams(params); }, _updateHouseProperty(params) { let entityParams = this._editEntity.getParams(); let polygonMaterial = this._editEntity.polygon.material; if (polygonMaterial instanceof Cesium.ColorMaterialProperty) { let material = this._materialColorProperty({ color: params.color }); this._editEntity.polygon.material = material; this._editEntity.polygon.extrudedHeight = parseFloat(params.height) + parseFloat( entityParams.bottomHeight ); this._editEntity.setParams(params); } }, _updateCircleProperty(params) { let circleMaterial = this._editEntity.ellipse.material; if (circleMaterial instanceof CircleMaterialProperty) { let material = new CircleMaterialProperty({ viewer: this._viewer, duration: params.duration, color: Cesium.Color.fromCssColorString(params.color), count: parseFloat(params.count) }); this._editEntity.ellipse.material = material; } else if (circleMaterial instanceof Cesium.ColorMaterialProperty) { let material = this._materialColorProperty({ color: params.color }); this._editEntity.ellipse.material = material; if (this._editEntity.polyline !== void 0) { let newMaterial = this._materialColorProperty({ color: params.outlineColor }); this._editEntity.polyline.material = newMaterial; this._editEntity.polyline.width = parseFloat(params.outlineWidth); } } this._editEntity.setParams(params); }, _updateVideoWallProperty(params) { let videoElement = document.getElementById("wallVideo"); if (videoElement !== null) { document.body.removeChild(videoElement); } videoElement = document.createElement("video"); videoElement.id = "wallVideo"; videoElement.setAttribute("crossorigin", "anonymous"); videoElement.setAttribute("width", "1024px"); videoElement.setAttribute("height", "256px"); videoElement.setAttribute("controls", "controls"); videoElement.setAttribute("src", params.videoUrl); videoElement.setAttribute("loop", "loop"); videoElement.play(); document.body.appendChild(videoElement); let minimumHeights = this._editEntity.wall.minimumHeights._value; let maximumHeights = []; for (let i2 = 0; i2 < minimumHeights.length; i2++) { maximumHeights.push(minimumHeights[i2] + parseFloat(params.height)); } this._editEntity.wall.maximumHeights = maximumHeights; this._editEntity.wall.material = videoElement; let wallPositions = this._editEntity.wall.positions._value; let newPositions = []; for (let wallPosition of wallPositions) { let transform3 = Cesium.Transforms.eastNorthUpToFixedFrame(wallPosition); let m = new Cesium.Matrix4(); Cesium.Matrix4.setTranslation(Cesium.Matrix4.IDENTITY, new Cesium.Cartesian3( parseFloat(params.axisX), parseFloat(params.axisY), parseFloat(params.axisZ) ), m); let moveMatrix = Cesium.Matrix4.multiply(transform3, m, transform3); let newPosition = new Cesium.Cartesian3(); Cesium.Matrix4.getTranslation(moveMatrix, newPosition); newPositions.push(newPosition); } this._editEntity.wall.positions = newPositions; params.axisX = params.axisY = params.axisZ = 0; this._editEntity.setParams(params); this._activateEdit(this._editEntity); }, _updateWallProperty(params) { let minHeights = this._editEntity.wall.minimumHeights._value; let maxHeights = []; for (let i2 = 0; i2 < minHeights.length; i2++) { maxHeights.push(minHeights[i2] + parseFloat(params.height)); } this._editEntity.wall.maximumHeights = maxHeights; this._sketchWallMaxHeights = maxHeights; let wallMaterial = this._editEntity.wall.material; if (wallMaterial instanceof Cesium.ImageMaterialProperty) { let material = this._materialTextImageProperty({ color: params.color, text: params.text }); this._editEntity.wall.material = material; } else if (wallMaterial instanceof WallMaterialProperty) { let materialImage = this._image_h_l_r; if (params.direction === this._param.direction_h && params.order === this._param.order_add) { materialImage = this._image_h_l_r; } else if (params.direction === this._param.direction_h && params.order === this._param.order_add) { materialImage = this._image_h_r_l; } else if (params.direction === this._param.direction_v && params.order === this._param.order_minus) { materialImage = this._image_v_t_b; } else if (params.direction === this._param.direction_v && params.order === this._param.order_add) { materialImage = this._image_v_b_t; } let material = new WallMaterialProperty({ viewer: this._viewer, trailImage: materialImage, duration: params.duration, color: Cesium.Color.fromCssColorString(params.color), param: { count: parseFloat(params.count), direction: params.direction, order: params.order } }); this._editEntity.wall.material = material; } else if (wallMaterial instanceof Cesium.ColorMaterialProperty) { let material = this._materialColorProperty({ color: params.color }); this._editEntity.wall.material = material; } this._editEntity.setParams(params); }, rotationEntity(options2) { if (this._editEntity === void 0) return; this._coordinateCalculateEntityOrientation(this._editEntity, options2); }, _getEntityEditData: function(entity) { if (entity instanceof Cesium.Entity) { let editEntityType = entity.getEntityType(); if (editEntityType === DrawTools.DrawType.Polyline || editEntityType === DrawTools.DrawType.SpatialLine) { return entity.polyline.positions._value; } else if (editEntityType === DrawTools.DrawType.Polygon || editEntityType === DrawTools.DrawType.House) { let positions = entity.polygon.hierarchy._value.positions; if (positions[0].x !== positions[positions.length - 1].x) { positions.push(positions[0].clone()); } return positions; } else if (editEntityType === DrawTools.DrawType.Rectangle) { let rect = entity.rectangle.coordinates._value; let gNw = Cesium.Rectangle.northwest(rect); if (gNw.height <= 0) { let height2 = this._queryHeightFromGeo(Cesium.Math.toDegrees(gNw.longitude), Cesium.Math.toDegrees(gNw.latitude)); gNw.height = height2; } let cNw = Cesium.Cartesian3.fromRadians(gNw.longitude, gNw.latitude, gNw.height); let gSe = Cesium.Rectangle.southeast(rect); if (gSe.height <= 0) { let height2 = this._queryHeightFromGeo(Cesium.Math.toDegrees(gSe.longitude), Cesium.Math.toDegrees(gSe.latitude)); gSe.height = height2; } let cSe = Cesium.Cartesian3.fromRadians(gSe.longitude, gSe.latitude, gSe.height); return [cNw, cSe]; } else if (editEntityType === DrawTools.DrawType.Circle || editEntityType === DrawTools.DrawType.DynamicCircle) { let centerPosition = entity.position._value; let radius = entity.ellipse.semiMajorAxis._value; let cbPoint = this._calculateCircleBoundaryPoint(centerPosition, radius); return [centerPosition, cbPoint]; } else if (editEntityType === DrawTools.DrawType.NormalWall || editEntityType === DrawTools.DrawType.DynamicWall || editEntityType === DrawTools.DrawType.TextWall) { this._sketchWallHeights = []; this._sketchWallMaxHeights = []; let minHeights = entity.wall.minimumHeights._value; let maxHeights = entity.wall.maximumHeights._value; for (let i2 = 0; i2 < minHeights.length; i2++) { this._sketchWallHeights.push(minHeights[i2]); this._sketchWallMaxHeights.push(maxHeights[i2]); } return entity.wall.positions._value; } else if (editEntityType === DrawTools.DrawType.VideoWall) { let positions = entity.wall.positions._value; return [positions[0].clone()]; } else { return []; } } else { return []; } }, _calculateCircleBoundaryPoint: function(centerPosition, radius) { let gCenter = Cesium.Ellipsoid.WGS84.cartesianToCartographic(centerPosition); let cPoint = point([Cesium.Math.toDegrees(gCenter.longitude), Cesium.Math.toDegrees( gCenter.latitude )]); let boundaryPoint = destination(cPoint, radius / 1e3, 90, { units: "kilometers" }).geometry.coordinates; let height2 = this._queryHeightFromGeo(boundaryPoint[0], boundaryPoint[1]); let cbPoint = Cesium.Cartesian3.fromDegrees(boundaryPoint[0], boundaryPoint[1], height2); return cbPoint; }, _calculateCenterPosition: function(positions) { if (positions === void 0 || positions.length === 0) return void 0; else if (positions.length === 1) { return positions[0]; } else if (positions.length === 2) { let pt0 = this._cartesian3ToGeo(positions[0]); let pt1 = this._cartesian3ToGeo(positions[1]); let point0 = point([pt0.longitude, pt0.latitude]); let point1 = point([pt1.longitude, pt1.latitude]); let center2 = midpoint(point0, point1).geometry.coordinates; let height2 = this._queryHeightFromGeo(center2[0], center2[1]); return Cesium.Cartesian3.fromDegrees(center2[0], center2[1], height2); } else { let geoPoints = [ [] ]; for (let i2 = 0; i2 < positions.length; i2++) { let geoPoint = this._cartesian3ToGeo(positions[i2]); geoPoints[0].push([geoPoint.longitude, geoPoint.latitude]); } geoPoints[0].push(geoPoints[0][0]); let polygon$1 = polygon(geoPoints); let center2 = centerOfMass(polygon$1).geometry.coordinates; let height2 = this._queryHeightFromGeo(center2[0], center2[1]); return Cesium.Cartesian3.fromDegrees(center2[0], center2[1], height2); } }, _calculateTransformPosition: function(position2, distance2, bearing2, options2) { let geoPoint = this._cartesian3ToGeo(position2); let point$1 = point([geoPoint.longitude, geoPoint.latitude]); let resPoint = destination(point$1, distance2, bearing2, options2).geometry.coordinates; let height2 = geoPoint.height; if (options2 !== void 0 && options2.calculateHeight !== void 0 && options2.calculateHeight === true) { height2 = this._queryHeightFromGeo(resPoint[0], resPoint[1]); } let cPosition = Cesium.Cartesian3.fromDegrees( resPoint[0], resPoint[1], height2 ); return cPosition; }, _unActivateEdit: function() { this._clearEditPoint(); this._removeCoorinateAxis(); this._closePropertyEditDialog(); }, _activateEdit: function(editEntity) { let entityType = editEntity.getEntityType(); let entityIsEdit = editEntity.getIsEdit(); if (entityIsEdit === void 0 || entityType === void 0 || entityIsEdit === false) { return; } if (entityType === DrawTools.DrawType.OdLine) { this._activeteOdlineEdit(editEntity); } else { this._activeteNormalEdit(editEntity); } }, _activeteOdlineEdit: function(editEntity) { let _self = this; let entityType = editEntity.getEntityType(); if (entityType === void 0 || entityType !== DrawTools.DrawType.OdLine) { return; } let faterEntityId = editEntity.parent.id; this._editOdlineEntities = []; for (let entity of this._entities.values) { if (entity.parent !== void 0 && entity.parent.id === faterEntityId) { this._editOdlineEntities.push(entity); } } if (this._editOdlineEntities.length === 0) return; this._editEntity = this._editOdlineEntities[0]; for (let i2 = 0; i2 < this._editOdlineEntities.length; i2++) { let entity = this._editOdlineEntities[i2]; let positions = entity.polyline.positions._value; if (i2 === 0) { this._createEditOdlineStartPoint(positions.first(), entity); this._createEditOdlineEndPoint(positions.last(), entity); } else { this._createEditOdlineEndPoint(positions.last(), entity); } } if (this._sketchEditHandler === void 0) { this._sketchEditHandler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); } this._registerLeftDownEvent(this._sketchEditHandler, function(event2) { _self._eventEditMouseDown(event2); }); this._registerMouseMoveEvent(this._sketchEditHandler, function(event2) { _self._eventEditMouseMove(event2); }); this._registerLeftUpEvent(this._sketchEditHandler, function(event2) { _self._eventEditMouseUp(event2); }); }, _activeteNormalEdit: function(editEntity) { let _self = this; let positions = this._getEntityEditData(editEntity); this._removePointEntitys(); let entityType = editEntity.getEntityType(); this._editEntity = editEntity; if (entityType === DrawTools.DrawType.Circle || entityType === DrawTools.DrawType.DynamicCircle) { this._createEditCenterPoint(positions[0]); this._createEditNodePoint(positions, 1); } else if (entityType === DrawTools.DrawType.VideoWall) { if (!this._isRuntimeApp()) { let position2 = positions[0]; this._removeCoorinateAxis(); this._createCoordinateAxis(position2); } } else { this._createEditNodePoint(positions); let centerPosition = this._calculateCenterPosition(positions); if (centerPosition !== void 0) { this._createEditCenterPoint(centerPosition); } } if (entityType !== DrawTools.DrawType.Rectangle && entityType !== DrawTools.DrawType.Circle && entityType !== DrawTools.DrawType.DynamicCircle && entityType !== DrawTools.DrawType.VideoWall) { if (entityType === DrawTools.DrawType.SpatialLine) { this._createEditMiddlePoint(positions, true); } else { this._createEditMiddlePoint(positions); } } if (this._sketchEditHandler === void 0) { this._sketchEditHandler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); } this._registerLeftDownEvent(this._sketchEditHandler, function(event2) { _self._eventEditMouseDown(event2); }); this._registerMouseMoveEvent(this._sketchEditHandler, function(event2) { _self._eventEditMouseMove(event2); }); this._registerLeftUpEvent(this._sketchEditHandler, function(event2) { _self._eventEditMouseUp(event2); }); }, _eventEditMouseDown: function(event2) { let _self = this; let feature2 = _self._viewer.scene.pick(event2.position); if (feature2 != void 0 && feature2.id instanceof Cesium.Entity) { let featureType = feature2.id.getEditType(); if (featureType === void 0) return; _self._viewer.scene.screenSpaceCameraController.enableRotate = false; let entityPosition = feature2.id.position._value; _self._editPointEntity = feature2.id; _self._setMousePointerStyle(); if (featureType.type === DrawTools.EditPointType.Node || featureType.type === DrawTools.EditPointType.Middle) { _self._entityCallbackPropertyByMouseDown(); _self._removeEntityByObject(_self._editPointEntity); if (_self._sketchEditEntitySpatialName != void 0) { _self._removeEntityByName(_self._sketchEditEntitySpatialName); } } else if (featureType.type === DrawTools.EditPointType.Center) { _self._entityCenterMouseDownEvent(); } else if (featureType.type === DrawTools.EditPointType.OdlineEndNode) { _self._removeEntityByObject(_self._editPointEntity); _self._editEntity = featureType.joinEntity; let params = _self._editEntity.parent.getParams(); _self._sketchEditPoints = []; let joinEntityPositions = _self._editEntity.polyline.positions._value; _self._sketchEditPoints.push(joinEntityPositions.first()); _self._sketchEditPoints.push(joinEntityPositions.last()); _self._editEntity.polyline.positions = new Cesium.CallbackProperty(function() { let positions = _self._calculateOdlinePositios(_self._sketchEditPoints[0], _self._sketchEditPoints[1], parseInt(params.odlineHeight), parseInt(params.odlineCount)); return positions; }, false); } else if (featureType.type === DrawTools.EditPointType.OdlineStrartNode) { _self._removeEntityByObject(_self._editPointEntity); _self._editEntity = featureType.joinEntity; let params = _self._editEntity.parent.getParams(); _self._sketchEditPoints = []; let joinEntityPositions = _self._editEntity.polyline.positions._value; _self._sketchEditPoints.push(joinEntityPositions.first()); for (let odEntity of _self._editOdlineEntities) { let odEntityPositions = odEntity.polyline.positions._value; let lastPosition = odEntityPositions.last(); _self._sketchEditPoints.push(lastPosition.clone()); odEntity.polyline.positions = new Cesium.CallbackProperty(function() { let positions = _self._calculateOdlinePositios( _self._sketchEditPoints[0], lastPosition, parseInt(params.odlineHeight), parseInt(params.odlineCount) ); return positions; }, false); } } if (featureType.type === DrawTools.EditPointType.Middle) { let index2 = featureType.index; _self._sketchEditPoints.splice(index2, 0, entityPosition); _self._sketchEditIndex = index2; if (_self._sketchWallHeights != void 0 && _self._sketchWallHeights.length > 0) { let geoPoint = _self._cartesian3ToGeo(entityPosition); let height2 = _self._queryHeightFromGeo(geoPoint.longitude, geoPoint.latitude); _self._sketchWallHeights.splice(index2, 0, height2); let heightDifference = _self._sketchWallMaxHeights[0] - _self._sketchWallHeights[0]; _self._sketchWallMaxHeights.splice(index2, 0, height2 + heightDifference); } _self._tooltipInit("\u62D6\u52A8\u4E2D\u70B9\uFF0C\u6539\u53D8\u5F62\u72B6", event2.position); } else if (featureType.type === DrawTools.EditPointType.Node) { _self._sketchEditIndex = featureType.index; _self._tooltipInit("\u62D6\u52A8\u8282\u70B9\uFF0C\u6539\u53D8\u5F62\u72B6", event2.position); } else if (featureType.type === DrawTools.EditPointType.Spatial) { _self._sketchEditIndex = featureType.index; _self._tooltipInit("\u62D6\u52A8\u8282\u70B9\uFF0C\u6539\u53D8\u9AD8\u5EA6", event2.position); } else if (featureType.type === DrawTools.EditPointType.CoordinateAxis) { _self._tooltipInit("\u62D6\u52A8\u5750\u6807\u8F74\uFF0C\u6539\u53D8\u4F4D\u7F6E", event2.position); } else if (featureType.type === DrawTools.EditPointType.OdlineEndNode || featureType.type === DrawTools.EditPointType.OdlineStrartNode) { _self._tooltipInit("\u62D6\u52A8\u8282\u70B9\uFF0C\u6539\u53D8OD\u7EBF\u4F4D\u7F6E", event2.position); } } }, _eventEditMouseMove: function(event2) { let _self = this; if (_self._editPointEntity != void 0) { let loc2 = _self._transfromFromScreenPoint(event2.endPosition); if (!Cesium.defined(loc2.sLocation)) return; _self._editPosition = loc2.sLocation; let editEntityType = _self._editPointEntity.getEditType(); if (editEntityType.type === DrawTools.EditPointType.Node) { _self._sketchEditPoints[_self._sketchEditIndex] = loc2.sLocation; let editEntityType2 = _self._editEntity.getEntityType(); if (editEntityType2 != DrawTools.DrawType.Rectangle && editEntityType2 != DrawTools.DrawType.Circle && editEntityType2 != DrawTools.DrawType.DynamicCircle) { if ((editEntityType2 === DrawTools.DrawType.Polygon || editEntityType2 === DrawTools.DrawType.House) && _self._sketchEditIndex === 0) { _self._sketchEditPoints[_self._sketchEditPoints.length - 1] = loc2.sLocation; } else if (editEntityType2 === DrawTools.DrawType.NormalWall || editEntityType2 === DrawTools.DrawType.DynamicWall || editEntityType2 === DrawTools.DrawType.TextWall) { _self._sketchWallHeights[_self._sketchEditIndex] = loc2.gLocation.height; } _self._removeEntityByName(_self._sketchEditEntityMiddleName); if (editEntityType2 === DrawTools.DrawType.SpatialLine) { _self._createEditMiddlePoint(_self._sketchEditPoints, true); } else { _self._createEditMiddlePoint(_self._sketchEditPoints); } } } else if (editEntityType.type === DrawTools.EditPointType.Middle) { _self._sketchEditPoints[_self._sketchEditIndex] = loc2.sLocation; } else if (editEntityType.type === DrawTools.EditPointType.Center) { _self._entityCenterMouseMoveEvent(event2); } else if (editEntityType.type === DrawTools.EditPointType.Spatial) { let ellipsoid = _self._viewer.scene.globe.ellipsoid; let cartesian = _self._viewer.camera.pickEllipsoid( event2.endPosition, ellipsoid ); let bottomPoint = _self._sketchEditPoints[_self._sketchEditIndex]; let heightDifference = cartesian.z - bottomPoint.z; if (heightDifference > 0 && heightDifference < 500) { for (let i2 = 0; i2 < _self._sketchWallHeights.length; i2++) { _self._sketchWallMaxHeights[i2] = _self._sketchWallHeights[i2] + heightDifference; } } } else if (editEntityType.type === DrawTools.EditPointType.OdlineEndNode) { _self._sketchEditPoints[_self._sketchEditPoints.length - 1] = loc2.sLocation; } else if (editEntityType.type === DrawTools.EditPointType.OdlineStrartNode) { _self._sketchEditPoints[0] = loc2.sLocation; } _self._tooltipInit("\u62AC\u8D77\u9F20\u6807\uFF0C\u5B8C\u6210\u66F4\u6539", event2.endPosition); } }, _eventEditMouseUp: function(event2) { let _self = this; if (_self._editPointEntity != void 0) { _self._viewer.scene.screenSpaceCameraController.enableRotate = true; _self._tooltipRemove(); _self._setMouseDefaultStyle(); let editEntityPointType = _self._editPointEntity.getEditType().type; let entityType = _self._editEntity.getEntityType(); if (editEntityPointType === DrawTools.EditPointType.CoordinateAxis) ; else if (editEntityPointType === DrawTools.EditPointType.OdlineEndNode) { let params = _self._editEntity.parent.getParams(); let positions = _self._calculateOdlinePositios(_self._sketchEditPoints[0], _self._sketchEditPoints[1], parseInt(params.odlineHeight), parseInt(params.odlineCount)); _self._editEntity.polyline.positions = positions; _self._createEditOdlineEndPoint(_self._sketchEditPoints[1], _self._editEntity); } else if (editEntityPointType === DrawTools.EditPointType.OdlineStrartNode) { let params = _self._editEntity.parent.getParams(); let index2 = 1; for (let odEntity of _self._editOdlineEntities) { let lastPosition = _self._sketchEditPoints[index2++]; let positions = _self._calculateOdlinePositios( _self._sketchEditPoints[0], lastPosition, parseInt(params.odlineHeight), parseInt(params.odlineCount) ); odEntity.polyline.positions = positions; } _self._createEditOdlineStartPoint(_self._sketchEditPoints[0], _self._editOdlineEntities[0]); } else { if (editEntityPointType === DrawTools.EditPointType.Node || editEntityPointType === DrawTools.EditPointType.Middle) { _self._entityCallbackPropertyByMouseUp(); } else if (editEntityPointType === DrawTools.EditPointType.Center) { _self._entityCenterMouseUpEvent(event2); } _self._removeEntityByName(_self._sketchEditEntityNodeName); _self._removeEntityByName(_self._sketchEditEntityMiddleName); _self._removeEntityByName(_self._sketchEditEntityCenterName); if (entityType === DrawTools.DrawType.Circle || entityType === DrawTools.DrawType.DynamicCircle) { let centerPosition = _self._editEntity.position._value; let boundaryPosition = _self._calculateCircleBoundaryPoint( centerPosition, _self._sketchEllipseRadius ); _self._sketchEditPoints[0] = centerPosition; _self._sketchEditPoints[1] = boundaryPosition; _self._createEditNodePoint(_self._sketchEditPoints, 1); _self._createEditCenterPoint(centerPosition); } else { _self._createEditNodePoint(_self._sketchEditPoints); let centerPosition = _self._calculateCenterPosition(_self._sketchEditPoints); _self._createEditCenterPoint(centerPosition); } if (entityType != DrawTools.DrawType.Rectangle && entityType != DrawTools.DrawType.Circle && entityType != DrawTools.DrawType.DynamicCircle) { if (entityType === DrawTools.DrawType.SpatialLine) { _self._createEditMiddlePoint(_self._sketchEditPoints, true); } else { _self._createEditMiddlePoint(_self._sketchEditPoints); } } } _self._editPointEntity = void 0; } }, _entityCenterMouseDownEvent: function() { let _self = this; let entityPosition = this._editEntity.position._value; this._removeEntityByName(this._sketchEditEntityNodeName); this._removeEntityByName(this._sketchEditEntityMiddleName); this._removeEntityByName(this._sketchEditEntityCenterName); this._startPoint = entityPosition; this._startMovePoints = []; this._movePoint = entityPosition; let editEntityType = this._editEntity.getEntityType(); if (editEntityType === DrawTools.DrawType.Circle || editEntityType === DrawTools.DrawType.DynamicCircle) { if (this._editEntity.polyline !== void 0) { for (let i2 = 0; i2 < this._ellipseOutlineCoordinates.length; i2++) { this._startMovePoints.push(this._ellipseOutlineCoordinates[i2]); } this._editEntity.polyline.positions = new Cesium.CallbackProperty( function() { return _self._ellipseOutlineCoordinates; }, false ); } this._editEntity.position = new Cesium.CallbackProperty(function() { return _self._movePoint; }, false); } else if (editEntityType === DrawTools.DrawType.Polygon || editEntityType === DrawTools.DrawType.House) { for (let i2 = 0; i2 < this._sketchEditPoints.length; i2++) { this._startMovePoints.push(this._sketchEditPoints[i2]); } _self._editEntity.polygon.hierarchy = new Cesium.CallbackProperty(function() { return { positions: _self._sketchEditPoints }; }, false); if (_self._editEntity.polyline != void 0) { _self._editEntity.polyline.positions = new Cesium.CallbackProperty(function() { return _self._sketchEditPoints; }, false); } } else if (editEntityType === DrawTools.DrawType.Polyline || editEntityType === DrawTools.DrawType.SpatialLine) { for (let i2 = 0; i2 < this._sketchEditPoints.length; i2++) { this._startMovePoints.push(this._sketchEditPoints[i2]); } _self._editEntity.polyline.positions = new Cesium.CallbackProperty(function() { return _self._sketchEditPoints; }, false); } else if (editEntityType === DrawTools.DrawType.Rectangle) { for (let i2 = 0; i2 < this._sketchEditPoints.length; i2++) { this._startMovePoints.push(this._sketchEditPoints[i2]); } _self._editEntity.rectangle.coordinates = new Cesium.CallbackProperty(_self._callUpdateRectangleCoordinates(_self._sketchEditPoints), false); if (_self._editEntity.polyline != void 0) { _self._editEntity.polyline.positions = new Cesium.CallbackProperty( _self._callUpdateRectangleOutlineCoordinates(), false ); } } }, _entityCenterMouseMoveEvent: function(event2) { this._calculatePositionsByCenter(event2.endPosition, false); }, _calculatePositionsByCenter: function(screenPosition, calculateHeight) { let strLoc = this._cartesian3ToGeo(this._startPoint); let endLoc = this._transfromFromScreenPoint(screenPosition); var point1 = point([strLoc.longitude, strLoc.latitude]); var point2 = point([endLoc.gLocation.lng, endLoc.gLocation.lat]); var bearing$1 = bearing(point1, point2); var options2 = { units: "kilometers", calculateHeight }; var distance$1 = distance(point1, point2, options2); let editEntityType = this._editEntity.getEntityType(); if (editEntityType === DrawTools.DrawType.Circle || editEntityType === DrawTools.DrawType.DynamicCircle) { for (let i2 = 0; i2 < this._startMovePoints.length; i2++) { let position2 = this._calculateTransformPosition( this._startMovePoints[i2], distance$1, bearing$1, options2 ); this._ellipseOutlineCoordinates[i2] = position2.clone(); } this._movePoint = endLoc.sLocation; } else { for (let i2 = 0; i2 < this._startMovePoints.length; i2++) { let position2 = this._calculateTransformPosition( this._startMovePoints[i2], distance$1, bearing$1, options2 ); this._sketchEditPoints[i2] = position2.clone(); } } }, _entityCenterMouseUpEvent: function(event2) { this._calculatePositionsByCenter(event2.position, true); let _self = this; let editEntityType = this._editEntity.getEntityType(); if (editEntityType === DrawTools.DrawType.Circle || editEntityType === DrawTools.DrawType.DynamicCircle) { this._editEntity.position = this._movePoint; if (this._editEntity.polyline !== void 0) { this._editEntity.polyline.positions = this._ellipseOutlineCoordinates; } } else if (editEntityType === DrawTools.DrawType.Polyline || editEntityType === DrawTools.DrawType.SpatialLine) { this._editEntity.polyline.positions = this._sketchEditPoints; } else if (editEntityType === DrawTools.DrawType.Polygon || editEntityType === DrawTools.DrawType.House) { this._editEntity.polygon.hierarchy = { positions: _self._sketchEditPoints }; if (this._editEntity.polyline != void 0) { this._editEntity.polyline.positions = this._sketchEditPoints; } } else if (editEntityType === DrawTools.DrawType.Rectangle) { this._editEntity.rectangle.coordinates = Cesium.Rectangle.fromDegrees(_self._rectangleCoordinates[0], _self._rectangleCoordinates[1], _self._rectangleCoordinates[2], _self._rectangleCoordinates[3]); if (this._editEntity.polyline != void 0) { this._editEntity.polyline.positions = _self._rectangleOutlineCoordinates; } } }, _entityCallbackPropertyByMouseUp: function() { let _self = this; let entityType = _self._editEntity.getEntityType(); if (entityType === DrawTools.DrawType.Polyline) { _self._editEntity.polyline.positions = _self._sketchEditPoints; } else if (entityType === DrawTools.DrawType.Polygon || entityType === DrawTools.DrawType.House) { _self._editEntity.polygon.hierarchy = { positions: _self._sketchEditPoints }; if (_self._editEntity.polyline != void 0) { let polygonPositions = _self._editEntity.polygon.hierarchy._value.positions; let linePositions = []; for (let i2 = 0; i2 < polygonPositions.length; i2++) { linePositions.push(polygonPositions[i2].clone()); } if (linePositions[0].x !== linePositions[linePositions.length - 1].x) { linePositions.push(linePositions[0].clone()); } _self._editEntity.polyline.positions = linePositions; } } else if (entityType === DrawTools.DrawType.Rectangle) { _self._editEntity.rectangle.coordinates = Cesium.Rectangle.fromDegrees(_self._rectangleCoordinates[0], _self._rectangleCoordinates[1], _self._rectangleCoordinates[2], _self._rectangleCoordinates[3]); if (_self._editEntity.polyline != void 0) { _self._editEntity.polyline.positions = _self._rectangleOutlineCoordinates; } } else if (entityType === DrawTools.DrawType.Circle || entityType === DrawTools.DrawType.DynamicCircle) { _self._editEntity.ellipse.semiMajorAxis = _self._sketchEllipseRadius; _self._editEntity.ellipse.semiMinorAxis = _self._sketchEllipseRadius; if (_self._editEntity.polyline != void 0) { _self._editEntity.polyline.positions = _self._ellipseOutlineCoordinates; } } else if (entityType === DrawTools.DrawType.NormalWall || entityType === DrawTools.DrawType.DynamicWall || entityType === DrawTools.DrawType.TextWall) { _self._editEntity.wall.positions = _self._sketchEditPoints; _self._editEntity.wall.minimumHeights = _self._sketchWallHeights; _self._editEntity.wall.maximumHeights = _self._sketchWallMaxHeights; } }, _entityCallbackPropertyByMouseDown: function() { let _self = this; let entityType = _self._editEntity.getEntityType(); if (entityType === DrawTools.DrawType.Polyline || entityType === DrawTools.DrawType.SpatialLine) { _self._editEntity.polyline.positions = new Cesium.CallbackProperty( function() { return _self._sketchEditPoints; }, false ); } else if (entityType === DrawTools.DrawType.Polygon || entityType === DrawTools.DrawType.House) { _self._editEntity.polygon.hierarchy = new Cesium.CallbackProperty( function() { return { positions: _self._sketchEditPoints }; }, false ); if (_self._editEntity.polyline != void 0) { _self._editEntity.polyline.positions = new Cesium.CallbackProperty( function() { let polygonPositions = _self._sketchEditPoints; let linePositions = []; for (let i2 = 0; i2 < polygonPositions.length; i2++) { linePositions.push(polygonPositions[i2].clone()); } if (linePositions[0].x !== linePositions[linePositions.length - 1].x) { linePositions.push(linePositions[0].clone()); } return linePositions; }, false ); } } else if (entityType === DrawTools.DrawType.Rectangle) { _self._editEntity.rectangle.coordinates = new Cesium.CallbackProperty( _self._callUpdateRectangleCoordinates(_self._sketchEditPoints), false ); if (_self._editEntity.polyline != void 0) { _self._editEntity.polyline.positions = new Cesium.CallbackProperty( _self._callUpdateRectangleOutlineCoordinates(), false ); } } else if (entityType === DrawTools.DrawType.Circle || entityType === DrawTools.DrawType.DynamicCircle) { if (_self._editPointEntity.getEditType().index === 1) { _self._editEntity.ellipse.semiMajorAxis = new Cesium.CallbackProperty( _self._callUpdateEllipseMinorAxis(_self._sketchEditPoints), false ); _self._editEntity.ellipse.semiMinorAxis = new Cesium.CallbackProperty( _self._callUpdateEllipseMinorAxis(_self._sketchEditPoints), false ); } if (_self._editEntity.polyline != void 0) { _self._editEntity.polyline.positions = new Cesium.CallbackProperty( _self._callEllipseOutlineCoordinate(_self._sketchEditPoints), false ); } } else if (entityType === DrawTools.DrawType.NormalWall || entityType === DrawTools.DrawType.DynamicWall || entityType === DrawTools.DrawType.TextWall) { _self._editEntity.wall.positions = new Cesium.CallbackProperty(function() { return _self._sketchEditPoints; }, false); _self._editEntity.wall.minimumHeights = new Cesium.CallbackProperty(function() { return _self._sketchWallHeights; }, false); _self._editEntity.wall.maximumHeights = new Cesium.CallbackProperty(function() { return _self._sketchWallMaxHeights; }, false); } }, _createEditPointEntity(options2) { let _self = this; if (options2 === void 0 || options2.position === void 0) return; if (options2 === void 0 || options2.editType === void 0) return; let color2 = options2.color != void 0 ? options2.color : [255, 0, 0, 1]; let size = options2.size != void 0 && typeof options2.size === "number" ? options2.size : 9; let outlineWidth = options2.outlineWidth != void 0 && typeof options2.outlineWidth === "number" ? options2.outlineWidth : 1; let outlineColor = options2.outlineColor != void 0 ? options2.outlineColor : [255, 255, 255, 1]; let pointEntity = new Cesium.Entity({ name: options2.name != void 0 ? options2.name : _self._sketchEntityName, position: options2.position, point: { show: true, pixelSize: size, heightReference: Cesium.HeightReference.NONE, color: _self._toColorFromArray(color2), outlineWidth, outlineColor: _self._toColorFromArray(outlineColor), disableDepthTestDistance: 15e11 } }); pointEntity.setEditType(options2.editType); _self._entities.add(pointEntity); }, _createEditNodePoint(positions, startIndex) { this._sketchEditEntityNodeName = "SketchEditEntityNode"; let _self = this; this._sketchEditPoints = []; let strIndex = startIndex === void 0 ? 0 : startIndex; for (let i2 = 0; i2 < positions.length; i2++) { let position2 = positions[i2]; this._sketchEditPoints.push(position2.clone()); if (i2 < strIndex) continue; if (i2 !== 0 && position2.x === positions[0].x && position2.y === positions[0].y && position2.z === positions[0].z) { continue; } let geoPoint = this._cartesian3ToGeo(position2); let height2 = this._queryHeightFromGeo(geoPoint.longitude, geoPoint.latitude); let newPosition = Cesium.Cartesian3.fromDegrees(geoPoint.longitude, geoPoint.latitude, height2); _self._createEditPointEntity({ name: _self._sketchEditEntityNodeName, position: newPosition, size: 12, color: [0, 0, 255, 1], editType: { type: DrawTools.EditPointType.Node, index: i2 } }); } }, _createEditSpatialPoint(positions, heights, startIndex) { return; }, _createEditMiddlePoint(positions, isSpatial = false) { this._sketchEditEntityMiddleName = "SketchEditEntityMiddle"; let _self = this; if (!isSpatial) { for (let i2 = 1; i2 < positions.length; i2++) { let p1 = positions[i2 - 1]; let p2 = positions[i2]; let pCenter = this._calculateMiddlePoint(p1, p2); this._createEditPointEntity({ name: _self._sketchEditEntityMiddleName, position: pCenter, size: 9, color: [255, 255, 0, 1], editType: { type: DrawTools.EditPointType.Middle, index: i2 } }); } } else { for (let i2 = 1; i2 < positions.length; i2++) { let p1 = positions[i2 - 1]; let p2 = positions[i2]; let pCenter = { x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2, z: (p1.z + p2.z) / 2 }; this._createEditPointEntity({ name: _self._sketchEditEntityMiddleName, position: pCenter, size: 9, color: [255, 255, 0, 1], editType: { type: DrawTools.EditPointType.Middle, index: i2 } }); } } }, _createEditCenterPoint(position2) { let _self = this; this._sketchEditEntityCenterName = "SketchEditEntityCenter"; this._createEditPointEntity({ name: _self._sketchEditEntityCenterName, position: position2, size: 12, color: [0, 255, 0, 0.1], outlineWidth: 2, outlineColor: [255, 255, 255, 1], editType: { type: DrawTools.EditPointType.Center } }); if (this._editEntity != void 0) { this._editEntity.position = position2.clone(); } }, _createEditOdlineEndPoint(position2, joinEntity) { this._sketchEditEntityNodeName = "SketchEditEntityNode"; let _self = this; let geoPoint = this._cartesian3ToGeo(position2); let height2 = this._queryHeightFromGeo(geoPoint.longitude, geoPoint.latitude); Cesium.Cartesian3.fromDegrees(geoPoint.longitude, geoPoint.latitude, height2); _self._createEditPointEntity({ name: _self._sketchEditEntityNodeName, position: position2, size: 12, color: [0, 0, 255, 1], editType: { type: DrawTools.EditPointType.OdlineEndNode, joinEntity } }); }, _createEditOdlineStartPoint(position2, joinEntity) { this._sketchEditEntityNodeName = "SketchEditEntityNode"; let _self = this; let geoPoint = this._cartesian3ToGeo(position2); let height2 = this._queryHeightFromGeo(geoPoint.longitude, geoPoint.latitude); Cesium.Cartesian3.fromDegrees(geoPoint.longitude, geoPoint.latitude, height2); _self._createEditPointEntity({ name: _self._sketchEditEntityNodeName, position: position2, size: 12, color: [0, 255, 0, 0.6], editType: { type: DrawTools.EditPointType.OdlineStrartNode, joinEntity } }); }, _calculateMiddlePoint(position1, position2) { let g1 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position1); let g2 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); let pt1 = [Cesium.Math.toDegrees(g1.longitude), Cesium.Math.toDegrees(g1.latitude)]; let pt2 = [Cesium.Math.toDegrees(g2.longitude), Cesium.Math.toDegrees(g2.latitude)]; let tpt1 = point(pt1); let tpt2 = point(pt2); let midpoint$1 = midpoint(tpt1, tpt2).geometry.coordinates; let height2 = this._queryHeightFromGeo(midpoint$1[0], midpoint$1[1]); let result = Cesium.Cartesian3.fromDegrees(midpoint$1[0], midpoint$1[1], height2); return result; }, _cartesian3ToGeo: function(position2) { let g = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); return { longitude: Cesium.Math.toDegrees(g.longitude), latitude: Cesium.Math.toDegrees(g.latitude), height: g.height }; }, _queryHeightFromGeo: function(longitude, latitude) { if (longitude === void 0 || latitude === void 0 || typeof longitude != "number" || typeof latitude != "number") return 0; let rLng = Cesium.Math.toRadians(longitude); let rLat = Cesium.Math.toRadians(latitude); let cartographic = new Cesium.Cartographic(rLng, rLat); let noQueryEntities = []; for (let i2 = 0; i2 < this._entities.values.length; i2++) { if (this._entities.values[i2].name === this._sketchEntityName) { noQueryEntities.push(this._entities.values[i2]); } } let height2 = this._viewer.scene.sampleHeight(cartographic, noQueryEntities); if (height2 === void 0) return 0; else return height2; }, _queryHeightFromGeoAsync: function(longitude, latitude, callComplete) { if (longitude === void 0 || latitude === void 0 || typeof longitude != "number" || typeof latitude != "number") return 0; let rLng = Cesium.Math.toRadians(longitude); let rLat = Cesium.Math.toRadians(latitude); let cartographic = new Cesium.Cartographic(rLng, rLat); let promise = this._viewer.scene.sampleHeightMostDetailed([cartographic]); promise.then(function(updatedPositions) { if (callComplete) callComplete(updatedPositions[0].height); }); }, _clearEditPoint: function() { if (this._sketchEditHandler != void 0) { this._sketchEditHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN); this._sketchEditHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP); this._sketchEditHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE); } this._sketchEditPoints = []; this._sketchEditIndex = void 0; this._editEntity = void 0; this._removeEntityByName(this._sketchEditEntityNodeName); this._removeEntityByName(this._sketchEditEntityMiddleName); this._removeEntityByName(this._sketchEditEntityCenterName); this._removeEntityByName(this._sketchEditEntitySpatialName); } }); Object.assign(DrawTools.prototype, { _checkColor: function(color2) { if (color2 === void 0 || color2 === null) return false; if (typeof color2 != "number") return false; let intColor = parseInt(color2); if (intColor < 0 || intColor > 255) return false; return true; }, _checkAlpha: function(alpha) { if (alpha === void 0 || alpha === null) return false; if (typeof alpha != "number") return false; let floatAlpha = parseFloat(alpha); if (floatAlpha < 0 || floatAlpha > 1) return false; return true; }, _checkColorAndAlpha: function(colorAndAlpah) { let setColor = void 0; if (!colorAndAlpah || colorAndAlpah.length === void 0 || colorAndAlpah.length === 0) return void 0; if (colorAndAlpah.length === 1 && this._checkColor(colorAndAlpah[0])) { setColor = [colorAndAlpah[0], 0, 0, 1]; } else if (colorAndAlpah.length === 2 && this._checkColor(colorAndAlpah[0]) && this._checkColor( colorAndAlpah[1] )) { setColor = [colorAndAlpah[0], colorAndAlpah[1], 0, 1]; } else if (colorAndAlpah.length === 3 && this._checkColor(colorAndAlpah[0]) && this._checkColor( colorAndAlpah[1] ) && this._checkColor(colorAndAlpah[2])) { setColor = [colorAndAlpah[0], colorAndAlpah[1], colorAndAlpah[2], 1]; } else if (colorAndAlpah.length === 4 && this._checkColor(colorAndAlpah[0]) && this._checkColor( colorAndAlpah[1] ) && this._checkColor(colorAndAlpah[2]) && this._checkAlpha( colorAndAlpah[3] )) { setColor = [colorAndAlpah[0], colorAndAlpah[1], colorAndAlpah[2], colorAndAlpah[3]]; } return setColor; } }); Object.assign(DrawTools.prototype, { _initOperationDom: function() { let _self = this; this._operationDomId = "drawButtonDiv"; this._operationDom = document.getElementById(this._operationDomId); this._removeOperationDom(); this._createOperationMainDom(); if ([ DrawTools.DrawType.Rectangle, DrawTools.DrawType.Circle, DrawTools.DrawType.DynamicCircle, DrawTools.DrawType.VideoWall ].indexOf(this._drawType) === -1) { let btnUndo = this._createOperationUndoButtonDom(); btnUndo.onclick = function() { _self._operationExecuteEvent(Cesium.ScreenSpaceEventType.RIGHT_CLICK); }; } if ([ DrawTools.DrawType.Rectangle, DrawTools.DrawType.Circle, DrawTools.DrawType.DynamicCircle, DrawTools.DrawType.VideoWall ] === -1) { let btnCompletion = this._crateOperationCompletionButtonDom(); btnCompletion.onclick = function() { _self._operationExecuteEvent(Cesium.ScreenSpaceEventType.LEFT_CLICK); }; } else { let btnCompletion = this._crateOperationCompletionButtonDom(); btnCompletion.onclick = function() { _self._operationExecuteEvent(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); }; } }, _operationExecuteEvent(eventType) { if (this._drawEventHandler !== void 0 && this._drawEventHandler.isDestroyed() === false) { let event2 = { position: new Cesium.Cartesian2(300, 300) }; let action = this._drawEventHandler.getInputAction(eventType); action(event2); } }, _createOperationMainDom: function() { this._operationDom = document.createElement("div"); this._operationDom.id = this._operationDomId; this._operationDom.style.width = "80px"; this._operationDom.style.backgroundColor = "rgba(5, 45, 155, 0.7)"; this._operationDom.style.borderRadius = "5px"; this._operationDom.style.display = "flex"; this._operationDom.style.flexDirection = "column"; this._operationDom.style.padding = "8px"; this._operationDom.style.justifyContent = "center"; this._operationDom.style.position = "absolute"; this._operationDom.style.bottom = "150px"; this._operationDom.style.right = "10px"; document.body.appendChild(this._operationDom); }, _createOperationUndoButtonDom: function() { let btnUndo = document.createElement("button"); btnUndo.id = "btnDrawBackout"; btnUndo.style.height = "30px"; btnUndo.style.marginBottom = "8px"; btnUndo.style.backgroundColor = "rgba(52, 137, 255, 1.0)"; btnUndo.style.color = "rgb(255, 255, 255)"; btnUndo.style.border = "0px solid red"; btnUndo.style.borderRadius = "5px"; btnUndo.innerHTML = "\u56DE\u9000"; btnUndo.style.fontSize = "13px"; btnUndo.style.cursor = "pointer"; this._operationDom.appendChild(btnUndo); return btnUndo; }, _crateOperationCompletionButtonDom: function() { let btnCompletion = document.createElement("button"); btnCompletion.id = "btnDrawComplete"; btnCompletion.style.height = "30px"; btnCompletion.style.backgroundColor = "rgba(88, 185, 45, 1.0)"; btnCompletion.style.color = "rgb(255, 255, 255)"; btnCompletion.style.border = "0px solid red"; btnCompletion.style.borderRadius = "5px"; btnCompletion.innerHTML = "\u5B8C\u6210"; btnCompletion.style.fontSize = "13px"; btnCompletion.style.cursor = "pointer"; this._operationDom.appendChild(btnCompletion); return btnCompletion; }, _removeOperationDom: function() { if (this._operationDom !== null && this._operationDom !== void 0) { document.body.removeChild(this._operationDom); this._operationDom = void 0; } }, _createOperationDom: function() { if (this._isRuntimeApp()) { this._initOperationDom(); } } }); Object.assign(DrawTools.prototype, { _openPropertyEditDialog: function(params, callEdit, callRemove) { this._editPropertyDialogDomId = "dialog-property-dom"; this._registerDOMPropertyEdit = "dialog-edit-property"; let PropertyEditComponent = customElements.get(this._registerDOMPropertyEdit); if (PropertyEditComponent === void 0) { PropertyEditComponent = defineCustomElement(DialogEditProperty$2); customElements.define(this._registerDOMPropertyEdit, PropertyEditComponent); } this._closePropertyEditDialog(); let dialogPropertyElement = new PropertyEditComponent({ params }); dialogPropertyElement.id = this._editPropertyDialogDomId; dialogPropertyElement.showDialog = true; document.body.appendChild(dialogPropertyElement); dialogPropertyElement.addEventListener( "submit", (e) => { if (callEdit) callEdit(e.detail[0]); }, false ); dialogPropertyElement.addEventListener( "remove", (e) => { if (callRemove) callRemove(); }, false ); }, _closePropertyEditDialog() { let dom2 = document.getElementById(this._editPropertyDialogDomId); if (dom2 !== null && dom2 !== void 0) { document.body.removeChild(dom2); } } }); DrawTools.DrawType = Object.freeze({ Point: "point", Polyline: "polyline", ArrowPolyline: "arrowPolyline", DynamicPolyline: "dynamicPolyline", GrowPolyline: "\u53D1\u5149\u7EBF", OutlinePolyline: "outlinePolyline", OdLine: "odLine", Polygon: "polygon", SpatialLine: "spatialLine", Circle: "circle", DynamicCircle: "dynamicCircle", Rectangle: "rectangle", NormalWall: "normalWall", DynamicWall: "dynamicWall", House: "house", TextWall: "text", VideoWall: "videoWall" }); DrawTools.IconType = Object.freeze({ Normal: "normal", Blue: "blue", Green: "green", Violet: "violter" }); DrawTools.EditPointType = Object.freeze({ Node: "node", Middle: "middle", Center: "center", CoordinateAxis: "coordinateAxis", OdlineStrartNode: "odlineStartNode", OdlineEndNode: "odlineEndNode" }); DrawTools.WallType = Object.freeze({ ColorWall: "colorWall", DynamicWall: "dynamicWall", TextWall: "textWall" }); DrawTools.CircleType = Object.freeze({ ColorCircle: "colorCircle", DynamicCircle: "dynamicCircle" }); DrawTools.PolylineType = Object.freeze({ NormalPolyline: "normalPolyline", ArrowsPolyline: "arrowsPolyline", DynamicPolyline: "dynamicPolyline", DottedPolyline: "dottedPolyline", GrowPolyline: "growPolyline", OutlinePolyline: "outlinePolyline" }); DrawTools.PolygonType = Object.freeze({ NormalPolygon: "normalPolygon", HousePolygon: "housePolygon" }); DrawTools.RuntimeEnvironment = Object.freeze({ App: "app", Web: "web" }); class WallMaterialProperty { constructor(options2) { this._viewer = options2.viewer; this._definitionChanged = new Cesium.Event(); this._color = void 0; this.color = options2.color || Cesium.Color.BLUE; this.duration = options2.duration || 1e3; this.trailImage = options2.trailImage; this._time = new Date().getTime(); this._materialTypeName = "WallMaterial" + this._guid(); this._param = { color: this.color._value.toCssColorString(), image: this.trailImage, duration: this.duration, count: 0, direction: "", order: "" }; Cesium.Material._materialCache.addMaterial(this._materialTypeName, { fabric: { type: this._materialTypeName, uniforms: { time: -20, color: new Cesium.Color(1, 0, 0, 0.5), image: options2.trailImage }, source: this._getDirectionWallShader(options2.param) }, translucent: function(material) { return true; } }); } _guid() { function S4() { return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1); } return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); } getType(time) { return this._materialTypeName; } getValue(time, result) { if (!Cesium.defined(result)) { result = {}; } result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.BLUE, result.color); result.image = this.trailImage; if (this.duration) { result.time = (new Date().getTime() - this._time) % this.duration / this.duration; } this._viewer.scene.requestRender(); return result; } equals(other) { return this === other || other instanceof WallMaterialProperty && Cesium.Property.equals(this._color, other._color) && other._param.order === this._param.order && other._param.count === this._param.count && other._param.direction === this._param.direction && other.duration === this.duration; } _getDirectionWallShader(options2) { let op = Cesium.defaultValue(options2, {}); let count = op.count !== void 0 && typeof op.count === "number" && op.count > 0 ? op.count : 1; let direction = op.direction === "horizontal" ? "horizontal" : "vertical"; let order = op.order === "+" ? "+" : "-"; this._param.count = count; this._param.direction = direction; this._param.order = order; let materail = ""; materail += "czm_material czm_getMaterial(czm_materialInput materialInput){\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec2 st = materialInput.st;\n"; if (direction === "vertical") { materail += " vec4 colorImage = texture2D(image,vec2(st.s,fract(float(" + count + ")*st.t " + order + " time)));\n"; } else if (direction === "horizontal") { materail += " vec4 colorImage = texture2D(image, vec2(fract(float(" + count + ")*st.s " + order + " time), st.t));\n"; } materail += " vec4 fragColor;\n fragColor.rgb = color.rgb / 1.0;\n fragColor = czm_gammaCorrect(fragColor);\n material.alpha = colorImage.a * color.a;\n material.diffuse = color.rgb;\n material.emission = fragColor.rgb;\n return material;\n}"; return materail; } } Object.defineProperties(WallMaterialProperty.prototype, { isConstant: { get: function() { return false; } }, definitionChanged: { get: function() { return this._definitionChanged; } }, color: Cesium.createPropertyDescriptor("color") }); class CircleMaterialProperty { constructor(options2) { this._viewer = options2.viewer; this._definitionChanged = new Cesium.Event(); this._color = void 0; this.color = options2.color || Cesium.Color.BLUE; this.count = options2.count || 1; this.duration = options2.duration || 1e3; this._time = new Date().getTime(); this._materialTypeName = "jtCircleMaterial"; this._param = { color: this.color._value.toCssColorString(), duration: this.duration, count: this.count }; Cesium.Material._materialCache.addMaterial(this._materialTypeName, { fabric: { type: this._materialTypeName, uniforms: { time: 0, color: new Cesium.Color(1, 0, 0, 0.5), count: 1 }, source: this._getCircleMaterial() }, translucent: function(material) { return true; } }); } _getCircleMaterial() { let circleMaterial = "czm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n material.diffuse = 1.5 * color.rgb;\n vec2 st = materialInput.st;\n vec3 str = materialInput.str;\n float dis = distance(st, vec2(0.5, 0.5));\n float per = fract(time);\n if (abs(str.z) > 0.001)\n {\n //\u7740\u8272\u5668\u6E32\u67D3\u505C\u6B62\uFF0C\u4E0D\u5728\u7ED8\u5236\u5185\u5BB9 \n discard;\n }\n if (dis > 0.5)\n {\n //\u8D85\u51FA\u534A\u5F84\u8303\u56F4\u65F6\uFF0C\u7740\u8272\u5668\u6E32\u67D3\u505C\u6B62 \n discard;\n } else {\n //\u628A\u534A\u5F84\u5206\u6210count\u4EFD\uFF0C\u6BCF\u4E24\u4EFD\u4E4B\u95F4\u7684\u95F4\u9694\u8DDD\u79BB \n float perDis = 0.5 / count;\n float disNum;\n float bl = 0.0;\n //\u5FAA\u73AF\uFF0C\u6700\u591A999\u4E2A\u73AF \n for (int i = 0; i <= 999; i++)\n {\n //\u5224\u65AD\u662F\u5426\u5C5E\u4E8E\u6570\u91CF\u5185\u7684\u73AF \n if (float(i) <= count)\n {\n disNum = perDis * float(i) - dis + per / count;\n if (disNum > 0.0)\n {\n if (disNum < perDis)\n {\n bl = 1.0 - disNum / perDis;\n } else if (disNum - perDis < perDis) {\n bl = 1.0 - abs(1.0 - disNum / perDis);\n }\n material.alpha = color.a * pow(bl, 3.0);\n }\n }\n }\n }\n return material;\n}\n"; return circleMaterial; } } Object.assign(CircleMaterialProperty.prototype, { getType: function(time) { return this._materialTypeName; }, getValue: function(time, result) { if (!Cesium.defined(result)) { result = {}; } result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.BLUE, result.color); result.count = this.count; if (this.duration) { result.time = (new Date().getTime() - this._time) % this.duration / this.duration; } this._viewer.scene.requestRender(); return result; }, equals: function(other) { return this === other || other instanceof CircleMaterialProperty && Cesium.Property.equals(this._color, other._color); } }); Object.defineProperties(CircleMaterialProperty.prototype, { isConstant: { get: function() { return false; } }, definitionChanged: { get: function() { return this._definitionChanged; } }, color: Cesium.createPropertyDescriptor("color") }); const _checkAppOrWeb = function() { if (window.navigator.userAgent.match( /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i )) { return "App"; } else { return "Web"; } }; const isRuntimeApp = function() { if (_checkAppOrWeb() === "App") { return true; } return false; }; const isRuntimeWeb = function() { if (_checkAppOrWeb() === "Web") { return true; } return false; }; function createOperationMainDom() { let buttonDiv = document.createElement("div"); buttonDiv.id = "drawButtonDiv"; buttonDiv.style.width = "80px"; buttonDiv.style.backgroundColor = "rgba(5, 45, 155, 0.7)"; buttonDiv.style.borderRadius = "5px"; buttonDiv.style.display = "flex"; buttonDiv.style.flexDirection = "column"; buttonDiv.style.padding = "8px"; buttonDiv.style.justifyContent = "center"; buttonDiv.style.position = "absolute"; buttonDiv.style.bottom = "150px"; buttonDiv.style.right = "10px"; let btnUndo = document.createElement("button"); btnUndo.id = "btnDrawBackout"; btnUndo.style.height = "30px"; btnUndo.style.marginBottom = "8px"; btnUndo.style.backgroundColor = "rgba(52, 137, 255, 1.0)"; btnUndo.style.color = "rgb(255, 255, 255)"; btnUndo.style.border = "0px solid red"; btnUndo.style.borderRadius = "5px"; btnUndo.innerHTML = "\u56DE\u9000"; btnUndo.style.fontSize = "13px"; btnUndo.style.cursor = "pointer"; buttonDiv.appendChild(btnUndo); let btnCompletion = document.createElement("button"); btnCompletion.id = "btnDrawComplete"; btnCompletion.style.height = "30px"; btnCompletion.style.backgroundColor = "rgba(88, 185, 45, 1.0)"; btnCompletion.style.color = "rgb(255, 255, 255)"; btnCompletion.style.border = "0px solid red"; btnCompletion.style.borderRadius = "5px"; btnCompletion.innerHTML = "\u5B8C\u6210"; btnCompletion.style.fontSize = "13px"; btnCompletion.style.cursor = "pointer"; buttonDiv.appendChild(btnCompletion); document.body.appendChild(buttonDiv); } function showTooltipMessage(message) { let msgMainDom = document.getElementById("messageMainDom"); if (msgMainDom !== null && msgMainDom !== void 0) { document.body.removeChild(msgMainDom); } msgMainDom = document.createElement("div"); msgMainDom.style.width = "30%"; msgMainDom.style.backgroundColor = "rgba(237, 248, 230, 1.0)"; msgMainDom.style.height = "45px"; msgMainDom.style.border = "solid 2px rgb(219, 241, 208)"; msgMainDom.style.borderRadius = "8px"; msgMainDom.style.display = "flex"; msgMainDom.style.alignItems = "center"; msgMainDom.style.paddingLeft = "10px"; msgMainDom.style.color = "rgb(91, 188, 48)"; msgMainDom.style.fontSize = "14px"; msgMainDom.style.fontWeight = "600"; msgMainDom.style.position = "absolute"; msgMainDom.style.left = "35%"; msgMainDom.style.transition = "transform 1s"; msgMainDom.style.transform = "translateY(-90px)"; msgMainDom.style.top = "0px"; msgMainDom.style.zIndex = 1e3; document.body.appendChild(msgMainDom); let strHtml = ""; strHtml += "
"; strHtml += "
" + message + "
"; msgMainDom.innerHTML = strHtml; msgMainDom.addEventListener("transitionend", function() { setTimeout(function() { document.body.removeChild(msgMainDom); }, 1e3); }, false); setTimeout(function() { msgMainDom.style.transform = "translateY(50px)"; }, 100); } var RuntimeEnvironment = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, isRuntimeApp, isRuntimeWeb, createOperationMainDom, showTooltipMessage }, Symbol.toStringTag, { value: "Module" })); class DrawStraightArrow { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.floatingPoint = null; this._straightArrow = null; this._straightArrowLast = null; this._positions = []; this._entities_point = []; this._entities_straightArrow = []; this._straightArrowData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._tooltip = createTooltip(this.viewer.container); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get straightArrow() { return this._straightArrowLast; } getData() { return this._straightArrowData; } computePosition(data) { var $this = this; var length = data.length; var p1 = data[0]; var p2 = data[length - 1]; var firstPoint = $this.cartesianToLatlng(p1); var endPoints = $this.cartesianToLatlng(p2); var arrow = []; var res = $this.fineArrow([firstPoint[0], firstPoint[1]], [endPoints[0], endPoints[1]]); for (var i2 = 0; i2 < res.length; i2++) { var cart3 = new $this.Cesium.Cartesian3(res[i2].x, res[i2].y, res[i2].z); arrow.push(cart3); } $this._straightArrowData = [firstPoint, endPoints]; return new $this.Cesium.PolygonHierarchy(arrow); } addload(data) { var $this = this; if (data.length < 2) { return null; } var length = data.length; var p1 = data[0]; var p2 = data[length - 1]; var arrow = []; var res = $this.fineArrow([p1[0], p1[1]], [p2[0], p2[1]]); for (var i2 = 0; i2 < res.length; i2++) { var cart3 = new $this.Cesium.Cartesian3(res[i2].x, res[i2].y, res[i2].z); arrow.push(cart3); } var arrowEntity = $this.viewer.entities.add({ Type: "DrawStraightArrow", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(arrow), show: true, fill: true, clampToGround: true, material: $this.polygonMaterial } }); return arrowEntity; } startCreate(drawType) { if (isRuntimeApp()) { showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } var $this = this; this.drawType = drawType; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) { var cartesian = $this.getCatesian3FromPX(evt.position); if (!cartesian) { return; } $this.createPoint(cartesian); $this._positions.push(cartesian); if ($this._positions.length === 2) { showTooltipMessage("\u70B9\u51FB\u5B8C\u6210\u6309\u94AE\uFF0C\u7ED3\u675F\u7ED8\u5236"); $this.destroy(); if (!$this.Cesium.defined($this._straightArrow)) { $this._straightArrow = $this.createStraightArrow(); createOperationMainDom(); document.getElementById("btnDrawBackout").style.display = "none"; document.getElementById("btnDrawComplete").onclick = () => { $this._straightArrowData = $this._positions.concat(); $this.viewer.entities.remove($this._straightArrow); $this._straightArrow = null; $this._positions = []; var lnglatArr = []; for (var i2 = 0; i2 < $this._straightArrowData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._straightArrowData[i2]); lnglatArr.push(lnglat); } $this._straightArrowData = lnglatArr; var straightArrow = $this.addload($this._straightArrowData); $this._entities_straightArrow.push(straightArrow); $this._straightArrowLast = straightArrow; $this.clearPoint(); $this.destroy(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } }; } } } else { clearTimeout($this._timer); $this._timer = setTimeout(function() { var cartesian2 = $this.getCatesian3FromPX(evt.position); if ($this._positions.length == 0) { $this._positions.push(cartesian2.clone()); $this.floatingPoint = $this.createPoint(cartesian2); $this._positions.push(cartesian2); } if (!$this._straightArrow) { $this.createPoint(cartesian2); } else { $this._straightArrowData = $this._positions.concat(); $this.viewer.entities.remove($this._straightArrow); $this._straightArrow = null; $this._positions = []; $this.floatingPoint.position.setValue(cartesian2); var lnglatArr = []; for (var i2 = 0; i2 < $this._straightArrowData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._straightArrowData[i2]); lnglatArr.push(lnglat); } $this._straightArrowData = lnglatArr; var straightArrow = $this.addload($this._straightArrowData); $this._entities_straightArrow.push(straightArrow); $this._straightArrowLast = straightArrow; $this.clearPoint(); $this.destroy(); $this._tooltip.setVisible(false); } }, 200); } }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) return; $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); if ($this._positions.length < 2) return; $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u7ED3\u675F\u7ED8\u5236"); var cartesian = $this.getCatesian3FromPX(evt.endPosition); if (!$this.Cesium.defined($this._straightArrow)) { $this._straightArrow = $this.createStraightArrow(); } $this.floatingPoint.position.setValue(cartesian); if ($this._straightArrow) { $this._positions.pop(); $this._positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); } createStraightArrow() { var $this = this; var arrowEntity = $this.viewer.entities.add({ polygon: { hierarchy: new $this.Cesium.CallbackProperty( function() { var length = $this._positions.length; var p1 = $this._positions[0]; var p2 = $this._positions[length - 1]; var firstPoint = $this.cartesianToLatlng(p1); var endPoints = $this.cartesianToLatlng(p2); var arrow = []; var res = $this.fineArrow([firstPoint[0], firstPoint[1]], [endPoints[0], endPoints[1]]); for (var i2 = 0; i2 < res.length; i2++) { var cart3 = new $this.Cesium.Cartesian3(res[i2].x, res[i2].y, res[i2].z); arrow.push(cart3); } return new $this.Cesium.PolygonHierarchy(arrow); }, false ), show: true, fill: true, clampToGround: true, material: $this.polygonMaterial } }); $this._entities_straightArrow.push(arrowEntity); return arrowEntity; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clearPoint() { this.DrawEndEvent.raiseEvent(this._straightArrowLast, this._straightArrowData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_straightArrow.length; i2++) { this.viewer.entities.remove(this._entities_straightArrow[i2]); } this.floatingPoint = null; this._straightArrow = null; this._straightArrowLast = null; this._positions = []; this._entities_point = []; this._entities_straightArrow = []; this._straightArrowData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } fineArrowDefualParam() { return { tailWidthFactor: 0.15, neckWidthFactor: 0.2, headWidthFactor: 0.25, headAngle: Math.PI / 8.5, neckAngle: Math.PI / 13 }; } fineArrow(tailPoint, headerPoint) { var $this = this; if (tailPoint.length < 2 || headerPoint.length < 2) return; let tailWidthFactor = $this.fineArrowDefualParam().tailWidthFactor; let neckWidthFactor = $this.fineArrowDefualParam().neckWidthFactor; let headWidthFactor = $this.fineArrowDefualParam().headWidthFactor; let headAngle = $this.fineArrowDefualParam().headAngle; let neckAngle = $this.fineArrowDefualParam().neckAngle; var o = []; o[0] = tailPoint; o[1] = headerPoint; var e = o[0], r2 = o[1], n = $this.getBaseLength(o), g = n * tailWidthFactor, i2 = n * neckWidthFactor, s = n * headWidthFactor, a = $this.getThirdPoint(r2, e, Math.PI / 2, g, true), l = $this.getThirdPoint(r2, e, Math.PI / 2, g, false), u = $this.getThirdPoint(e, r2, headAngle, s, false), c = $this.getThirdPoint(e, r2, headAngle, s, true), p = $this.getThirdPoint(e, r2, neckAngle, i2, false), h2 = $this.getThirdPoint(e, r2, neckAngle, i2, true), d2 = []; d2.push(a[0], a[1], p[0], p[1], u[0], u[1], r2[0], r2[1], c[0], c[1], h2[0], h2[1], l[0], l[1], e[0], e[1]); return $this.Cesium.Cartesian3.fromDegreesArray(d2); } getBaseLength(t2) { return Math.pow(this.wholeDistance(t2), 0.99); } wholeDistance(t2) { for (var o = 0, e = 0; e < t2.length - 1; e++) o += this.distance(t2[e], t2[e + 1]); return o; } distance(t2, o) { return Math.sqrt(Math.pow(t2[0] - o[0], 2) + Math.pow(t2[1] - o[1], 2)); } getThirdPoint(t2, o, e, r2, n) { var g = this.getAzimuth(t2, o), i2 = n ? g + e : g - e, s = r2 * Math.cos(i2), a = r2 * Math.sin(i2); return [o[0] + s, o[1] + a]; } getAzimuth(t2, o) { var e, r2 = Math.asin(Math.abs(o[1] - t2[1]) / this.distance(t2, o)); return o[1] >= t2[1] && o[0] >= t2[0] ? e = r2 + Math.PI : o[1] >= t2[1] && o[0] < t2[0] ? e = 2 * Math.PI - r2 : o[1] < t2[1] && o[0] < t2[0] ? e = r2 : o[1] < t2[1] && o[0] >= t2[0] && (e = Math.PI - r2), e; } } class DrawAttackArrow { constructor(arg) { __publicField(this, "getAttackArrowBodyPoints", function(t2, o, e, r2) { var $this = this; for (var n = $this.wholeDistance(t2), g = $this.getBaseLength(t2), i2 = g * r2, s = $this.distance(o, e), a = (i2 - s) / 2, l = 0, u = [], c = [], p = 1; p < t2.length - 1; p++) { var h2 = $this.getAngleOfThreePoints(t2[p - 1], t2[p], t2[p + 1]) / 2; l += $this.distance(t2[p - 1], t2[p]); var d2 = (i2 / 2 - l / n * a) / Math.sin(h2), f = $this.getThirdPoint(t2[p - 1], t2[p], Math.PI - h2, d2, true), E2 = $this.getThirdPoint(t2[p - 1], t2[p], h2, d2, false); u.push(f), c.push(E2); } return u.concat(c); }); __publicField(this, "getQBSplinePoints", function(t2) { if (t2.length <= 2) return t2; var o = 2, e = [], r2 = t2.length - o - 1, y = 0; e.push(t2[0]); for (var n = 0; r2 >= n; n++) for (var g = 0; 1 >= g; g += 0.05) { for (var i2 = y = 0, s = 0; o >= s; s++) { var a = this.getQuadricBSplineFactor(s, g); i2 += a * t2[n + s][0], y += a * t2[n + s][1]; } e.push([i2, y]); } return e.push(t2[t2.length - 1]), e; }); __publicField(this, "getQuadricBSplineFactor", function(t2, o) { return 0 == t2 ? Math.pow(o - 1, 2) / 2 : 1 == t2 ? (-2 * Math.pow(o, 2) + 2 * o + 1) / 2 : 2 == t2 ? Math.pow(o, 2) / 2 : 0; }); __publicField(this, "array2Dto1D", function(array) { var newArray = []; array.forEach(function(elt) { newArray.push(elt[0]); newArray.push(elt[1]); }); return newArray; }); this.objId = Number(new Date().getTime() + "" + Number(Math.random() * 1e3).toFixed(0)); this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.floatingPoint = null; this._AttackArrow = null; this._AttackArrowLast = null; this._positions = []; this._entities_point = []; this._entities_AttackArrow = []; this._AttackArrowData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._tooltip = createTooltip(this.viewer.container); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get AttackArrow() { return this._AttackArrowLast; } getData() { return this._AttackArrowData; } addload(data) { var $this = this; if (data.length < 3) { return null; } var res = $this.fineArrow(data); var returnData = res.polygonalPoint; var arrowEntity = $this.viewer.entities.add({ Type: "DrawAttackArrow", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(returnData), show: true, fill: true, clampToGround: true, material: $this.polygonMaterial } }); return arrowEntity; } computePosition(data) { let $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } $this._AttackArrowData = lnglatArr; var res = $this.fineArrow(lnglatArr); var returnData = res.polygonalPoint; return new $this.Cesium.PolygonHierarchy(returnData); } startCreate(drawType) { if (isRuntimeApp()) { showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } var $this = this; this.drawType = drawType; this.handler = new $this.Cesium.ScreenSpaceEventHandler($this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) { var cartesian = $this.getCatesian3FromPX(evt.position); if (!cartesian) { return; } $this.createPoint(cartesian); $this._positions.push(cartesian); if ($this._positions.length <= 2) { showTooltipMessage("\u70B9\u51FB\u6DFB\u52A0\u70B9"); } else { showTooltipMessage("\u70B9\u51FB\u6DFB\u52A0\u70B9\uFF0C\u70B9\u51FB\u5B8C\u6210\u6309\u94AE\uFF0C\u7ED3\u675F\u7ED8\u5236"); if ($this._positions.length === 3) { if (!$this.Cesium.defined($this._AttackArrow)) { $this._AttackArrow = $this.createAttackArrow(); createOperationMainDom(); document.getElementById("btnDrawBackout").style.display = "none"; document.getElementById("btnDrawComplete").onclick = () => { $this._AttackArrowData = $this._positions.concat(); $this.viewer.entities.remove($this._AttackArrow); $this._AttackArrow = null; $this._positions = []; let lnglatArr = []; for (var i2 = 0; i2 < $this._AttackArrowData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._AttackArrowData[i2]); lnglatArr.push(lnglat); } $this._AttackArrowData = lnglatArr; var straightArrow = $this.addload(lnglatArr); $this._entities_AttackArrow.push(straightArrow); $this._AttackArrowLast = straightArrow; $this.clearPoint(); $this.destroy(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } }; } } } } else { clearTimeout($this._timer); $this._timer = setTimeout(function() { var cartesian2 = $this.getCatesian3FromPX(evt.position); if (!cartesian2) { return; } if ($this._positions.length == 0) { $this.floatingPoint = $this.createPoint(cartesian2); $this.createPoint(cartesian2); } if ($this._positions.length == 1) { $this._positions.push(cartesian2.clone()); $this.createPoint(cartesian2); } $this._positions.push(cartesian2); }, 200); } }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) return; if ($this._positions.length == 0) { $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } else { $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u6DFB\u52A0\u70B9"); } if ($this._positions.length < 3) return; $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u6DFB\u52A0\u70B9\uFF0C\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); if (!$this.Cesium.defined($this._AttackArrow)) { $this._AttackArrow = $this.createAttackArrow(); } var cartesian = $this.getCatesian3FromPX(evt.endPosition); if (!cartesian) { return; } $this.floatingPoint.position.setValue(cartesian); if ($this._AttackArrow) { $this._positions.pop(); $this._positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) return; clearTimeout($this._timer); var cartesian = $this.getCatesian3FromPX(evt.position); $this._positions.pop(); $this._positions.push(cartesian); $this._AttackArrowData = $this._positions.concat(); $this.viewer.entities.remove($this._AttackArrow); $this._AttackArrow = null; $this._positions = []; $this.floatingPoint.position.setValue(cartesian); let lnglatArr = []; for (var i2 = 0; i2 < $this._AttackArrowData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._AttackArrowData[i2]); lnglatArr.push(lnglat); } $this._AttackArrowData = lnglatArr; var straightArrow = $this.addload(lnglatArr); $this._entities_AttackArrow.push(straightArrow); $this._AttackArrowLast = straightArrow; $this.clearPoint(); $this.destroy(); $this._tooltip.setVisible(false); }, $this.Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); } createAttackArrow() { var $this = this; var arrowEntity = $this.viewer.entities.add({ polygon: { hierarchy: new $this.Cesium.CallbackProperty( function() { var lnglatArr = []; for (var i2 = 0; i2 < $this._positions.length; i2++) { var lnglat = $this.cartesianToLatlng($this._positions[i2]); lnglatArr.push(lnglat); } var res = $this.fineArrow(lnglatArr); var returnData = res.polygonalPoint; return new $this.Cesium.PolygonHierarchy(returnData); }, false ), show: true, fill: true, clampToGround: true, material: $this.polygonMaterial } }); $this._entities_AttackArrow.push(arrowEntity); return arrowEntity; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); point2.objId = this.objId; $this._entities_point.push(point2); return point2; } cartesianToLatlng(cartesian) { let cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); let lat = this.Cesium.Math.toDegrees(cartographic.latitude); let lng = this.Cesium.Math.toDegrees(cartographic.longitude); let alt = cartographic.height; return [lng, lat, alt]; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clearPoint() { this.DrawEndEvent.raiseEvent(this._AttackArrowLast, this._AttackArrowData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_AttackArrow.length; i2++) { this.viewer.entities.remove(this._entities_AttackArrow[i2]); } this.floatingPoint = null; this._AttackArrow = null; this._AttackArrowLast = null; this._positions = []; this._entities_point = []; this._entities_AttackArrow = []; this._AttackArrowData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } fineArrowDefualParam() { return { headHeightFactor: 0.18, headWidthFactor: 0.3, neckHeightFactor: 0.85, neckWidthFactor: 0.15, tailWidthFactor: 0.1, headTailFactor: 0.8, swallowTailFactor: 1 }; } fineArrow(inputPoint) { var $this = this; inputPoint = $this.dereplication(inputPoint); let tailWidthFactor = $this.fineArrowDefualParam().tailWidthFactor; let swallowTailFactor = $this.fineArrowDefualParam().swallowTailFactor; let swallowTailPnt = $this.fineArrowDefualParam().swallowTailPnt; var result = { controlPoint: null, polygonalPoint: null }; result.controlPoint = inputPoint; var t2 = inputPoint.length; if (!(2 > t2)) { if (2 == inputPoint.length) { result.polygonalPoint = inputPoint; return result; } var o = inputPoint, e = o[0], r2 = o[1]; $this.isClockWise(o[0], o[1], o[2]) && (e = o[1], r2 = o[0]); var n = $this.mid(e, r2), g = [n].concat(o.slice(2)), i2 = $this.getAttackArrowHeadPoints(g, e, r2, $this.fineArrowDefualParam()), s = i2[0], a = i2[4], l = $this.distance(e, r2), u = $this.getBaseLength(g), c = u * tailWidthFactor * swallowTailFactor; swallowTailPnt = $this.getThirdPoint(g[1], g[0], 0, c, true); var p = l / u, h2 = $this.getAttackArrowBodyPoints(g, s, a, p), t2 = h2.length, d2 = [e].concat(h2.slice(0, t2 / 2)); d2.push(s); var f = [r2].concat(h2.slice(t2 / 2, t2)); var newArray = []; f.push(a), d2 = $this.getQBSplinePoints(d2), f = $this.getQBSplinePoints(f), newArray = $this.array2Dto1D(d2.concat(i2, f.reverse(), [swallowTailPnt, d2[0]])); result.polygonalPoint = $this.Cesium.Cartesian3.fromDegreesArray(newArray); } return result; } getArrowBodyPoints(t2, o, e, r2) { var $this = this; for (var n = $this.wholeDistance(t2), g = $this.getBaseLength(t2), i2 = g * r2, s = $this.distance(o, e), a = (i2 - s) / 2, l = 0, u = [], c = [], p = 1; p < t2.length - 1; p++) { var h2 = $this.getAngleOfThreePoints(t2[p - 1], t2[p], t2[p + 1]) / 2; l += $this.distance(t2[p - 1], t2[p]); var d2 = (i2 / 2 - l / n * a) / Math.sin(h2), f = $this.getThirdPoint(t2[p - 1], t2[p], Math.PI - h2, d2, true), E2 = $this.getThirdPoint(t2[p - 1], t2[p], h2, d2, false); u.push(f), c.push(E2); } return u.concat(c); } getAttackArrowHeadPoints(t2, o, e, defaultParam) { var $this = this; let headHeightFactor = defaultParam.headHeightFactor; let headTailFactor = defaultParam.headTailFactor; let headWidthFactor = defaultParam.headWidthFactor; let neckWidthFactor = defaultParam.neckWidthFactor; let neckHeightFactor = defaultParam.neckHeightFactor; var r2 = $this.getBaseLength(t2), n = r2 * headHeightFactor, g = t2[t2.length - 1]; r2 = $this.distance(g, t2[t2.length - 2]); var i2 = $this.distance(o, e); n > i2 * headTailFactor && (n = i2 * headTailFactor); var s = n * headWidthFactor, a = n * neckWidthFactor; n = n > r2 ? r2 : n; var l = n * neckHeightFactor, u = $this.getThirdPoint(t2[t2.length - 2], g, 0, n, true), c = $this.getThirdPoint(t2[t2.length - 2], g, 0, l, true), p = $this.getThirdPoint(g, u, Math.PI / 2, s, false), h2 = $this.getThirdPoint(g, u, Math.PI / 2, s, true), d2 = $this.getThirdPoint(g, c, Math.PI / 2, a, false), f = $this.getThirdPoint(g, c, Math.PI / 2, a, true); return [d2, p, g, h2, f]; } getAngleOfThreePoints(t2, o, e) { var r2 = this.getAzimuth(o, t2) - this.getAzimuth(o, e); return 0 > r2 ? r2 + Math.PI * 2 : r2; } dereplication(array) { var last = array[array.length - 1]; var change = false; var newArray = []; newArray = array.filter(function(i2) { if (i2[0] != last[0] && i2[1] != last[1]) { return i2; } change = true; }); if (change) newArray.push(last); return newArray; } getBaseLength(t2) { return Math.pow(this.wholeDistance(t2), 0.99); } wholeDistance(t2) { for (var o = 0, e = 0; e < t2.length - 1; e++) o += this.distance(t2[e], t2[e + 1]); return o; } distance(t2, o) { return Math.sqrt(Math.pow(t2[0] - o[0], 2) + Math.pow(t2[1] - o[1], 2)); } getThirdPoint(t2, o, e, r2, n) { var g = this.getAzimuth(t2, o), i2 = n ? g + e : g - e, s = r2 * Math.cos(i2), a = r2 * Math.sin(i2); return [o[0] + s, o[1] + a]; } getAzimuth(t2, o) { var e, r2 = Math.asin(Math.abs(o[1] - t2[1]) / this.distance(t2, o)); return o[1] >= t2[1] && o[0] >= t2[0] ? e = r2 + Math.PI : o[1] >= t2[1] && o[0] < t2[0] ? e = 2 * Math.PI - r2 : o[1] < t2[1] && o[0] < t2[0] ? e = r2 : o[1] < t2[1] && o[0] >= t2[0] && (e = Math.PI - r2), e; } isClockWise(t2, o, e) { return (e[1] - t2[1]) * (o[0] - t2[0]) > (o[1] - t2[1]) * (e[0] - t2[0]); } mid(t2, o) { return [(t2[0] + o[0]) / 2, (t2[1] + o[1]) / 2]; } } class DrawPincerArrow { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.floatingPoint = null; this._PincerArrow = null; this._PincerArrowLast = null; this._positions = []; this._entities_point = []; this._entities_PincerArrow = []; this._PincerArrowData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._tooltip = createTooltip(this.viewer.container); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get PincerArrow() { return this._PincerArrowLast; } getData() { return this._PincerArrowData; } addload(data) { var $this = this; if (data.length < 3) { return; } var res = $this.doubleArrow(data); var returnData = res.polygonalPoint; var arrowEntity = $this.viewer.entities.add({ Type: "DrawPincerArrow", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(returnData), show: true, fill: true, clampToGround: true, material: $this.polygonMaterial } }); return arrowEntity; } computePosition(data) { let $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } $this._PincerArrowData = lnglatArr; var res = $this.doubleArrow(lnglatArr); var returnData = res.polygonalPoint; return new $this.Cesium.PolygonHierarchy(returnData); } startCreate(drawType) { if (isRuntimeApp()) { showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } var $this = this; this.drawType = drawType; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) { var cartesian = $this.getCatesian3FromPX(evt.position); if (!cartesian) { return; } $this.createPoint(cartesian); $this._positions.push(cartesian); if ($this._positions.length < 3 || $this._positions.length === 4) { showTooltipMessage("\u70B9\u51FB\u6DFB\u52A0\u70B9"); } if ($this._positions.length === 2) { if (!$this.Cesium.defined($this._PincerArrow)) { $this._PincerArrow = $this.createPincerArrow(); } } if ($this._positions.length === 3) { $this._positions.pop(); $this._positions.push(cartesian); showTooltipMessage("\u70B9\u51FB\u6DFB\u52A0\u70B9\uFF0C\u70B9\u51FB\u5B8C\u6210\u6309\u94AE\uFF0C\u7ED3\u675F\u7ED8\u5236"); createOperationMainDom(); document.getElementById("btnDrawBackout").style.display = "none"; document.getElementById("btnDrawComplete").onclick = () => { $this._PincerArrowData = $this._positions.concat(); $this.viewer.entities.remove($this._PincerArrow); $this._PincerArrow = null; $this._positions = []; var lnglatArr = []; for (var i2 = 0; i2 < $this._PincerArrowData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._PincerArrowData[i2]); lnglatArr.push(lnglat); } $this._PincerArrowData = lnglatArr; var pincerArrow = $this.addload(lnglatArr); $this._entities_PincerArrow.push(pincerArrow); $this._PincerArrowLast = pincerArrow; $this.clearPoint(); $this.destroy(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } }; } if ($this._positions.length === 5) { showTooltipMessage("\u70B9\u51FB\u5B8C\u6210\u6309\u94AE\uFF0C\u7ED3\u675F\u7ED8\u5236"); $this.destroy(); } } else { clearTimeout($this._timer); $this._timer = setTimeout(function() { var cartesian2 = $this.getCatesian3FromPX(evt.position); if (!cartesian2) { return; } if ($this._positions.length == 0) { $this.floatingPoint = $this.createPoint(cartesian2); } if ($this._positions.length < 5) { $this._positions.push(cartesian2); $this.createPoint(cartesian2); } if ($this._positions.length == 5) { $this._positions[4] = cartesian2; $this.floatingPoint.position.setValue(cartesian2); } }, 200); } }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) return; if ($this._positions.length == 0) { $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } else { $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u6DFB\u52A0\u70B9"); } var cartesian = $this.getCatesian3FromPX(evt.endPosition); if (!cartesian) return; if ($this._positions.length < 2) return; if (!$this.Cesium.defined($this._PincerArrow)) { if ($this._positions.length == 2) { $this._positions.push(cartesian); } $this._PincerArrow = $this.createPincerArrow(); } $this.floatingPoint.position.setValue(cartesian); if ($this._positions.length == 3) { $this._positions[2] = cartesian; $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u6DFB\u52A0\u70B9\uFF0C\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); } if ($this._positions.length > 3) { $this._positions.pop(); $this._positions.push(cartesian); if ($this._positions === 4) { $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u6DFB\u52A0\u70B9"); } if ($this._positions.length == 5) { $this._tooltip.showAt(evt.endPosition, "\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); } } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) return; clearTimeout($this._timer); if (!$this._PincerArrow) { return; } var cartesian = $this.getCatesian3FromPX(evt.position); if (!cartesian) return; $this._positions.pop(); $this._PincerArrowData = $this._positions.concat(); $this.viewer.entities.remove($this._PincerArrow); $this._PincerArrow = null; $this._positions = []; $this.floatingPoint.position.setValue(cartesian); var lnglatArr = []; for (var i2 = 0; i2 < $this._PincerArrowData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._PincerArrowData[i2]); lnglatArr.push(lnglat); } $this._PincerArrowData = lnglatArr; var pincerArrow = $this.addload(lnglatArr); $this._entities_PincerArrow.push(pincerArrow); $this._PincerArrowLast = pincerArrow; $this.clearPoint(); $this.destroy(); $this._tooltip.setVisible(false); }, $this.Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); } createPincerArrow() { var $this = this; $this._computeTempPositions(); var arrowEntity = $this.viewer.entities.add({ polygon: { hierarchy: new $this.Cesium.CallbackProperty( function() { var lnglatArr = []; for (var i2 = 0; i2 < $this._positions.length; i2++) { var lnglat = $this.cartesianToLatlng($this._positions[i2]); lnglatArr.push(lnglat); } var res = $this.doubleArrow(lnglatArr); var returnData = res.polygonalPoint; return new $this.Cesium.PolygonHierarchy(returnData); }, false ), show: true, fill: true, clampToGround: true, material: $this.polygonMaterial } }); $this._entities_PincerArrow.push(arrowEntity); return arrowEntity; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } cartesianToLatlng(cartesian) { let cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); let lat = this.Cesium.Math.toDegrees(cartographic.latitude); let lng = this.Cesium.Math.toDegrees(cartographic.longitude); let alt = cartographic.height; return [lng, lat, alt]; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clearPoint() { this.DrawEndEvent.raiseEvent(this._PincerArrowLast, this._PincerArrowData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_PincerArrow.length; i2++) { this.viewer.entities.remove(this._entities_PincerArrow[i2]); } this.floatingPoint = null; this._PincerArrow = null; this._PincerArrowLast = null; this._positions = []; this._entities_point = []; this._entities_PincerArrow = []; this._PincerArrowData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } _computeTempPositions() { var _this = this; var pnts = [].concat(_this._positions); var num = pnts.length; var first = pnts[0]; var last = pnts[num - 1]; if (_this._isSimpleXYZ(first, last) == false) { pnts.push(first); num += 1; } _this.tempPositions = []; for (var i2 = 1; i2 < num; i2++) { var p1 = pnts[i2 - 1]; var p2 = pnts[i2]; var cp = _this._computeCenterPotition(p1, p2); _this.tempPositions.push(p1); _this.tempPositions.push(cp); } } _isSimpleXYZ(p1, p2) { if (p1.x == p2.x && p1.y == p2.y && p1.z == p2.z) { return true; } return false; } _computeCenterPotition(p1, p2) { var _this = this; var c1 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p1); var c2 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p2); var cm = new _this.Cesium.EllipsoidGeodesic(c1, c2).interpolateUsingFraction(0.5); var cp = _this.viewer.scene.globe.ellipsoid.cartographicToCartesian(cm); return cp; } doubleArrow(inputPoint) { var $this = this; this.connPoint = null; this.tempPoint4 = null; this.points = inputPoint; var result = { controlPoint: null, polygonalPoint: null }; var t2 = inputPoint.length; if (!(2 > t2)) { if (2 == t2) return inputPoint; var o = this.points[0], e = this.points[1], r2 = this.points[2], t2 = inputPoint.length; 3 == t2 ? this.tempPoint4 = $this.getTempPoint4(o, e, r2) : this.tempPoint4 = this.points[3], 3 == t2 || 4 == t2 ? this.connPoint = $this.mid(o, e) : this.connPoint = this.points[4]; var n, g; $this.isClockWise(o, e, r2) ? (n = $this.getArrowPoints(o, this.connPoint, this.tempPoint4, false), g = $this.getArrowPoints(this.connPoint, e, r2, true)) : (n = $this.getArrowPoints(e, this.connPoint, r2, false), g = $this.getArrowPoints(this.connPoint, o, this.tempPoint4, true)); var i2 = n.length, s = (i2 - 5) / 2, a = n.slice(0, s), l = n.slice(s, s + 5), u = n.slice(s + 5, i2), c = g.slice(0, s), p = g.slice(s, s + 5), h2 = g.slice(s + 5, i2); c = $this.getBezierPoints(c); var d2 = $this.getBezierPoints(h2.concat(a.slice(1))); u = $this.getBezierPoints(u); var f = c.concat(p, d2, l, u); var newArray = $this.array2Dto1D(f); result.controlPoint = [o, e, r2, this.tempPoint4, this.connPoint]; result.polygonalPoint = $this.Cesium.Cartesian3.fromDegreesArray(newArray); } return result; } getTempPoint4(t2, o, e) { var $this = this; var r2, n, g, i2, s = $this.mid(t2, o), a = $this.distance(s, e), l = $this.getAngleOfThreePoints(t2, s, e); return l < Math.PI / 2 ? (n = a * Math.sin(l), g = a * Math.cos(l), i2 = $this.getThirdPoint(t2, s, Math.PI / 2, n, false), r2 = $this.getThirdPoint(s, i2, Math.PI / 2, g, true)) : l >= Math.PI / 2 && l < Math.PI ? (n = a * Math.sin(Math.PI - l), g = a * Math.cos(Math.PI - l), i2 = $this.getThirdPoint(t2, s, Math.PI / 2, n, false), r2 = $this.getThirdPoint(s, i2, Math.PI / 2, g, false)) : l >= Math.PI && l < 1.5 * Math.PI ? (n = a * Math.sin(l - Math.PI), g = a * Math.cos(l - Math.PI), i2 = $this.getThirdPoint(t2, s, Math.PI / 2, n, true), r2 = $this.getThirdPoint(s, i2, Math.PI / 2, g, true)) : (n = a * Math.sin(2 * Math.PI - l), g = a * Math.cos(2 * Math.PI - l), i2 = $this.getThirdPoint(t2, s, Math.PI / 2, n, true), r2 = $this.getThirdPoint(s, i2, Math.PI / 2, g, false)), r2; } mid(t2, o) { return [(t2[0] + o[0]) / 2, (t2[1] + o[1]) / 2]; } isClockWise(t2, o, e) { return (e[1] - t2[1]) * (o[0] - t2[0]) > (o[1] - t2[1]) * (e[0] - t2[0]); } getArrowPoints(t2, o, e, r2) { var $this = this; var doubleArrowDefualParam = { type: "doublearrow", headHeightFactor: 0.25, headWidthFactor: 0.3, neckHeightFactor: 0.85, fixPointCount: 4, neckWidthFactor: 0.15 }; this.type = doubleArrowDefualParam.type, this.headHeightFactor = doubleArrowDefualParam.headHeightFactor, this.headWidthFactor = doubleArrowDefualParam.headWidthFactor, this.neckHeightFactor = doubleArrowDefualParam.neckHeightFactor, this.neckWidthFactor = doubleArrowDefualParam.neckWidthFactor; var n = $this.mid(t2, o), g = $this.distance(n, e), i2 = $this.getThirdPoint(e, n, 0, 0.3 * g, true), s = $this.getThirdPoint(e, n, 0, 0.5 * g, true); i2 = $this.getThirdPoint(n, i2, Math.PI / 2, g / 5, r2), s = $this.getThirdPoint(n, s, Math.PI / 2, g / 4, r2); var a = [n, i2, s, e], l = $this.getArrowHeadPoints(a, this.headHeightFactor, this.headWidthFactor, this.neckHeightFactor, this.neckWidthFactor), u = l[0], c = l[4], p = $this.distance(t2, o) / $this.getBaseLength(a) / 2, h2 = $this.getArrowBodyPoints(a, u, c, p), d2 = h2.length, f = h2.slice(0, d2 / 2), E2 = h2.slice(d2 / 2, d2); return f.push(u), E2.push(c), f = f.reverse(), f.push(o), E2 = E2.reverse(), E2.push(t2), f.reverse().concat(l, E2); } getArrowHeadPoints(t2, o, e) { var $this = this; var doubleArrowDefualParam = { type: "doublearrow", headHeightFactor: 0.25, headWidthFactor: 0.3, neckHeightFactor: 0.85, fixPointCount: 4, neckWidthFactor: 0.15 }; this.type = doubleArrowDefualParam.type, this.headHeightFactor = doubleArrowDefualParam.headHeightFactor, this.headWidthFactor = doubleArrowDefualParam.headWidthFactor, this.neckHeightFactor = doubleArrowDefualParam.neckHeightFactor, this.neckWidthFactor = doubleArrowDefualParam.neckWidthFactor; var r2 = $this.getBaseLength(t2), n = r2 * this.headHeightFactor, g = t2[t2.length - 1], i2 = ($this.distance(o, e), n * this.headWidthFactor), s = n * this.neckWidthFactor, a = n * this.neckHeightFactor, l = $this.getThirdPoint(t2[t2.length - 2], g, 0, n, true), u = $this.getThirdPoint(t2[t2.length - 2], g, 0, a, true), c = $this.getThirdPoint(g, l, Math.PI / 2, i2, false), p = $this.getThirdPoint(g, l, Math.PI / 2, i2, true), h2 = $this.getThirdPoint(g, u, Math.PI / 2, s, false), d2 = $this.getThirdPoint(g, u, Math.PI / 2, s, true); return [h2, c, g, p, d2]; } getArrowBodyPoints(t2, o, e, r2) { var $this = this; for (var n = $this.wholeDistance(t2), g = $this.getBaseLength(t2), i2 = g * r2, s = $this.distance(o, e), a = (i2 - s) / 2, l = 0, u = [], c = [], p = 1; p < t2.length - 1; p++) { var h2 = $this.getAngleOfThreePoints(t2[p - 1], t2[p], t2[p + 1]) / 2; l += $this.distance(t2[p - 1], t2[p]); var d2 = (i2 / 2 - l / n * a) / Math.sin(h2), f = $this.getThirdPoint(t2[p - 1], t2[p], Math.PI - h2, d2, true), E2 = $this.getThirdPoint(t2[p - 1], t2[p], h2, d2, false); u.push(f), c.push(E2); } return u.concat(c); } getBezierPoints(t2) { if (t2.length <= 2) return t2; for (var o = [], e = t2.length - 1, r2 = 0; 1 >= r2; r2 += 0.01) { for (var n = 0, y = 0, g = 0; e >= g; g++) { var i2 = this.getBinomialFactor(e, g), s = Math.pow(r2, g), a = Math.pow(1 - r2, e - g); n += i2 * s * a * t2[g][0], y += i2 * s * a * t2[g][1]; } o.push([n, y]); } return o.push(t2[e]), o; } getBaseLength(t2) { return Math.pow(this.wholeDistance(t2), 0.99); } wholeDistance(t2) { for (var o = 0, e = 0; e < t2.length - 1; e++) o += this.distance(t2[e], t2[e + 1]); return o; } getBinomialFactor(t2, o) { return this.getFactorial(t2) / (this.getFactorial(o) * this.getFactorial(t2 - o)); } getFactorial(t2) { if (1 >= t2) return 1; if (2 == t2) return 2; if (3 == t2) return 6; if (4 == t2) return 24; if (5 == t2) return 120; for (var o = 1, e = 1; t2 >= e; e++) o *= e; return o; } array2Dto1D(array) { var newArray = []; array.forEach(function(elt) { newArray.push(elt[0]); newArray.push(elt[1]); }); return newArray; } distance(t2, o) { return Math.sqrt(Math.pow(t2[0] - o[0], 2) + Math.pow(t2[1] - o[1], 2)); } getAngleOfThreePoints(t2, o, e) { var r2 = this.getAzimuth(o, t2) - this.getAzimuth(o, e); return 0 > r2 ? r2 + 2 * Math.PI : r2; } getAzimuth(t2, o) { var e, r2 = Math.asin(Math.abs(o[1] - t2[1]) / this.distance(t2, o)); return o[1] >= t2[1] && o[0] >= t2[0] ? e = r2 + Math.PI : o[1] >= t2[1] && o[0] < t2[0] ? e = 2 * Math.PI - r2 : o[1] < t2[1] && o[0] < t2[0] ? e = r2 : o[1] < t2[1] && o[0] >= t2[0] && (e = Math.PI - r2), e; } getThirdPoint(t2, o, e, r2, n) { var g = this.getAzimuth(t2, o), i2 = n ? g + e : g - e, s = r2 * Math.cos(i2), a = r2 * Math.sin(i2); return [o[0] + s, o[1] + a]; } } class DrawGatheringPlace { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.tt = 0.4; this.floatingPoint = null; this.drawHandler = null; this.gatheringPlace = null; this._gatheringPlaceLast = null; this._positions = []; this._entities_point = []; this._entities_PincerArrow = []; this._gatheringPlaceData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._tooltip = createTooltip(this.viewer.container); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get PincerArrow() { return this._gatheringPlaceLast; } getData() { return this._gatheringPlaceData; } computePosition(data) { var $this = this; if (data.length < 3) { return; } var gatheringPlace = []; var lonLats = []; var res = $this.fineGatheringPlace(data); for (var i2 = 0; i2 < res.length; i2++) { var cart3 = new $this.Cesium.Cartesian3(res[i2].x, res[i2].y, res[i2].z); gatheringPlace.push(cart3); } for (let q2 = 0; q2 < data.length; q2++) { lonLats.push($this.cartesianToLatlng(data[q2])); } this._gatheringPlaceData = lonLats; return new $this.Cesium.PolygonHierarchy(gatheringPlace); } addload(data) { var $this = this; if (data.length < 3) { return; } var gatheringPlace = []; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.LatlngTocartesian(data[i2]); lnglatArr.push(lnglat); } var res = $this.fineGatheringPlace(lnglatArr); for (var i2 = 0; i2 < res.length; i2++) { var cart3 = new $this.Cesium.Cartesian3(res[i2].x, res[i2].y, res[i2].z); gatheringPlace.push(cart3); } var pHierarchy = new $this.Cesium.PolygonHierarchy(gatheringPlace); var arrowEntity = $this.viewer.entities.add({ Type: "DrawGatheringPlace", Position: data, id: data.id || $this.objId, polygon: { hierarchy: pHierarchy, show: true, fill: true, clampToGround: true, material: $this.polygonMaterial } }); return arrowEntity; } startCreate(drawType) { if (isRuntimeApp()) { showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } var $this = this; this.drawType = drawType; this.handler = new $this.Cesium.ScreenSpaceEventHandler($this.viewer.scene.canvas); this.handler.setInputAction(function(event2) { if (isRuntimeApp()) { var cartesian = $this.getCatesian3FromPX(event2.position); if (!cartesian) { return; } $this.createPoint(cartesian); $this._positions.push(cartesian); if ($this._positions.length < 3) { showTooltipMessage("\u70B9\u51FB\u6DFB\u52A0\u70B9"); } if ($this._positions.length === 3) { showTooltipMessage("\u70B9\u51FB\u5B8C\u6210\u6309\u94AE\uFF0C\u7ED3\u675F\u7ED8\u5236"); $this.destroy(); if (!$this.Cesium.defined($this.gatheringPlace)) { $this.gatheringPlace = $this.createGatheringPlace(); createOperationMainDom(); document.getElementById("btnDrawBackout").style.display = "none"; document.getElementById("btnDrawComplete").onclick = () => { $this._gatheringPlaceData = $this._positions.concat(); $this.viewer.entities.remove($this.gatheringPlace); $this.gatheringPlace = null; var lnglatArr = []; for (var i2 = 0; i2 < $this._gatheringPlaceData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._gatheringPlaceData[i2]); lnglatArr.push(lnglat); } $this._gatheringPlaceData = lnglatArr; var pincerArrow = $this.addload(lnglatArr); $this._entities_PincerArrow.push(pincerArrow); $this._gatheringPlaceLast = pincerArrow; $this.viewer.entities.remove($this.floatingPoint); $this.floatingPoint = null; $this.clearPoint(); $this.destroy(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } }; } } } else { clearTimeout($this._timer); $this._timer = setTimeout(function() { var position2 = event2.position; if (!$this.Cesium.defined(position2)) { return; } var ray = $this.viewer.camera.getPickRay(position2); if (!$this.Cesium.defined(ray)) { return; } var cartesian2 = $this.viewer.scene.globe.pick(ray, $this.viewer.scene); if (!$this.Cesium.defined(cartesian2)) { return; } if ($this._positions.length == 0) { $this._positions.push(cartesian2.clone()); $this.floatingPoint = $this.createPoint(cartesian2); } if ($this._positions.length <= 2) { $this.createPoint(cartesian2); $this._positions.push(cartesian2); } }, 200); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(event2) { if (isRuntimeApp()) return; if ($this._positions.length == 0) { $this._tooltip.showAt(event2.endPosition, "\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } else { $this._tooltip.showAt(event2.endPosition, "\u70B9\u51FB\u6DFB\u52A0\u70B9"); } if ($this._positions.length < 2) { return; } if ($this._positions.length == 3) { $this._tooltip.showAt(event2.endPosition, "\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); } var position2 = event2.endPosition; if (!$this.Cesium.defined(position2)) { return; } var ray = $this.viewer.camera.getPickRay(position2); if (!$this.Cesium.defined(ray)) { return; } var cartesian = $this.viewer.scene.globe.pick(ray, $this.viewer.scene); if (!$this.Cesium.defined(cartesian)) { return; } if (!$this.Cesium.defined($this.gatheringPlace)) { $this.gatheringPlace = $this.createGatheringPlace(); } $this.floatingPoint.position.setValue(cartesian); if ($this.gatheringPlace) { if ($this._positions.length == 3) { $this._positions[1] = cartesian; } else { $this._positions.pop(); $this._positions.push(cartesian); } } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(movement) { }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); this.handler.setInputAction(function(movement) { if (isRuntimeApp()) return; clearTimeout($this._timer); if ($this._positions.length >= 3) { $this._gatheringPlaceData = $this._positions.concat(); $this.viewer.entities.remove($this.gatheringPlace); $this.gatheringPlace = null; var lnglatArr = []; for (var i2 = 0; i2 < $this._gatheringPlaceData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._gatheringPlaceData[i2]); lnglatArr.push(lnglat); } $this._gatheringPlaceData = lnglatArr; var pincerArrow = $this.addload(lnglatArr); $this._entities_PincerArrow.push(pincerArrow); $this._gatheringPlaceLast = pincerArrow; $this.viewer.entities.remove($this.floatingPoint); $this.floatingPoint = null; $this.clearPoint(); $this.destroy(); $this._tooltip.setVisible(false); } }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); } createGatheringPlace() { let $this = this; var gatheringPlaceEntity = $this.viewer.entities.add({ polygon: { hierarchy: new $this.Cesium.CallbackProperty(function() { if ($this._positions.length < 3) { return; } var gatheringPlace = []; var res = $this.fineGatheringPlace($this._positions); for (var i2 = 0; i2 < res.length; i2++) { var cart3 = new $this.Cesium.Cartesian3(res[i2].x, res[i2].y, res[i2].z); gatheringPlace.push(cart3); } var pHierarchy = new $this.Cesium.PolygonHierarchy(gatheringPlace); var lonLats = $this.cartesianToLatlng($this._positions); pHierarchy.keyPoints = lonLats; return pHierarchy; }, false), show: true, fill: true, clampToGround: true, material: $this.polygonMaterial } }); $this._entities_PincerArrow.push(gatheringPlaceEntity); return gatheringPlaceEntity; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } cartesianToLatlng(cartesian) { let cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); let lat = this.Cesium.Math.toDegrees(cartographic.latitude); let lng = this.Cesium.Math.toDegrees(cartographic.longitude); let alt = cartographic.height; return [lng, lat, alt]; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clearPoint() { this.DrawEndEvent.raiseEvent(this._gatheringPlaceLast, this._gatheringPlaceData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_PincerArrow.length; i2++) { this.viewer.entities.remove(this._entities_PincerArrow[i2]); } this.floatingPoint = null; this._PincerArrow = null; this._PincerArrowLast = null; this._positions = []; this._entities_point = []; this._entities_PincerArrow = []; this._PincerArrowData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } _computeTempPositions() { var _this = this; var pnts = [].concat(_this._positions); var num = pnts.length; var first = pnts[0]; var last = pnts[num - 1]; if (_this._isSimpleXYZ(first, last) == false) { pnts.push(first); num += 1; } _this.tempPositions = []; for (var i2 = 1; i2 < num; i2++) { var p1 = pnts[i2 - 1]; var p2 = pnts[i2]; var cp = _this._computeCenterPotition(p1, p2); _this.tempPositions.push(p1); _this.tempPositions.push(cp); } } _isSimpleXYZ(p1, p2) { if (p1.x == p2.x && p1.y == p2.y && p1.z == p2.z) { return true; } return false; } _computeCenterPotition(p1, p2) { var _this = this; var c1 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p1); var c2 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p2); var cm = new _this.Cesium.EllipsoidGeodesic(c1, c2).interpolateUsingFraction(0.5); var cp = _this.viewer.scene.globe.ellipsoid.cartographicToCartesian(cm); return cp; } getLonLat(cartesian) { var cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); cartographic.height = this.viewer.scene.globe.getHeight(cartographic); var pos = { lon: cartographic.longitude, lat: cartographic.latitude, alt: cartographic.height }; pos.lon = this.Cesium.Math.toDegrees(pos.lon); pos.lat = this.Cesium.Math.toDegrees(pos.lat); return pos; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } fineGatheringPlace(gatherPosition) { let $this = this; let points2 = gatherPosition.length; if (points2 < 2) { return false; } else { let pnts = new Array(); gatherPosition.forEach(function(item) { var posLonLat = $this.getLonLat(item); pnts.push([posLonLat.lon, posLonLat.lat]); }); if (pnts.length === 2) { let mid2 = $this.mid(pnts[0], pnts[1]); let d2 = $this.distance(pnts[0], mid2) / 0.9; let pnt = $this.getThirdPoint(pnts[0], mid2, Math.PI / 2, d2, true); pnts = [pnts[0], pnt, pnts[1]]; } let mid = $this.mid(pnts[0], pnts[2]); pnts.push(mid, pnts[0], pnts[1]); let [normals, pnt1, pnt2, pnt3, pList] = [ [], void 0, void 0, void 0, [] ]; for (let i2 = 0; i2 < pnts.length - 2; i2++) { pnt1 = pnts[i2]; pnt2 = pnts[i2 + 1]; pnt3 = pnts[i2 + 2]; let normalPoints = $this.getBisectorNormals($this.tt, pnt1, pnt2, pnt3); normals = normals.concat(normalPoints); } let count = normals.length; normals = [normals[count - 1]].concat(normals.slice(0, count - 1)); for (let i2 = 0; i2 < pnts.length - 2; i2++) { pnt1 = pnts[i2]; pnt2 = pnts[i2 + 1]; pList = pList.concat(pnt1); for (let t2 = 0; t2 <= 100; t2++) { let pnt = $this.getCubicValue(t2 / 100, pnt1, normals[i2 * 2], normals[i2 * 2 + 1], pnt2); pList = pList.concat(pnt); } pList = pList.concat(pnt2); } return Cesium.Cartesian3.fromDegreesArray(pList); } } mid(t2, o) { return [(t2[0] + o[0]) / 2, (t2[1] + o[1]) / 2]; } distance(t2, o) { return Math.sqrt(Math.pow(t2[0] - o[0], 2) + Math.pow(t2[1] - o[1], 2)); } getThirdPoint(t2, o, e, r2, n) { var g = this.getAzimuth(t2, o), i2 = n ? g + e : g - e, s = r2 * Math.cos(i2), a = r2 * Math.sin(i2); return [o[0] + s, o[1] + a]; } getAzimuth(t2, o) { var e, r2 = Math.asin(Math.abs(o[1] - t2[1]) / this.distance(t2, o)); return o[1] >= t2[1] && o[0] >= t2[0] ? e = r2 + Math.PI : o[1] >= t2[1] && o[0] < t2[0] ? e = 2 * Math.PI - r2 : o[1] < t2[1] && o[0] < t2[0] ? e = r2 : o[1] < t2[1] && o[0] >= t2[0] && (e = Math.PI - r2), e; } getBisectorNormals(t2, o, e, r2) { var n = this.getNormal(o, e, r2), g = Math.sqrt(n[0] * n[0] + n[1] * n[1]), i2 = n[0] / g, s = n[1] / g, a = this.distance(o, e), l = this.distance(e, r2); if (g > 1e-4) if (this.isClockWise(o, e, r2)) { var u = t2 * a, c = e[0] - u * s, p = e[1] + u * i2, h2 = [c, p]; u = t2 * l, c = e[0] + u * s, p = e[1] - u * i2; var d2 = [c, p]; } else u = t2 * a, c = e[0] + u * s, p = e[1] - u * i2, h2 = [c, p], u = t2 * l, c = e[0] - u * s, p = e[1] + u * i2, d2 = [c, p]; else c = e[0] + t2 * (o[0] - e[0]), p = e[1] + t2 * (o[1] - e[1]), h2 = [c, p], c = e[0] + t2 * (r2[0] - e[0]), p = e[1] + t2 * (r2[1] - e[1]), d2 = [c, p]; return [h2, d2]; } getNormal(t2, o, e) { var r2 = t2[0] - o[0], n = t2[1] - o[1], g = Math.sqrt(r2 * r2 + n * n); r2 /= g, n /= g; var i2 = e[0] - o[0], s = e[1] - o[1], a = Math.sqrt(i2 * i2 + s * s); i2 /= a, s /= a; var l = r2 + i2, u = n + s; return [l, u]; } isClockWise(t2, o, e) { return (e[1] - t2[1]) * (o[0] - t2[0]) > (o[1] - t2[1]) * (e[0] - t2[0]); } getCubicValue(t2, o, e, r2, n) { t2 = Math.max(Math.min(t2, 1), 0); var g = 1 - t2, i2 = t2 * t2, s = i2 * t2, a = g * g, l = a * g, u = l * o[0] + 3 * a * t2 * e[0] + 3 * g * i2 * r2[0] + s * n[0], c = l * o[1] + 3 * a * t2 * e[1] + 3 * g * i2 * r2[1] + s * n[1]; return [u, c]; } } class DrawClosedCurve { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.floatingPoint = null; this._ClosedCurve = null; this._ClosedCurveLast = null; this._positions = []; this._entities_point = []; this._entities_ClosedCurve = []; this._ClosedCurveData = null; this.ZERO_TOLERANCE = 1e-4; this.FITTING_COUNT = 100; this.t = 0.3; this.objId = Number(new Date().getTime() + "" + Number(Math.random() * 1e3).toFixed(0)); this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._tooltip = createTooltip(this.viewer.container); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get ClosedCurve() { return this._ClosedCurveLast; } getData() { return this._ClosedCurveData; } computePosition(data) { let $this = this; if (data.length < 2) return; let pnts = []; for (let p = 0; p < data.length; p++) { pnts.push($this.cartesianToLatlng(data[p])); } this._ClosedCurveData = Array.from(pnts); pnts.push(pnts[0], pnts[1]); let [normals, pList] = [ [], [] ]; for (let i2 = 0; i2 < pnts.length - 2; i2++) { let normalPoints = $this.getBisectorNormals($this.t, pnts[i2], pnts[i2 + 1], pnts[i2 + 2]); normals = normals.concat(normalPoints); } let count = normals.length; normals = [normals[count - 1]].concat(normals.slice(0, count - 1)); for (let i2 = 0; i2 < pnts.length - 2; i2++) { let pnt1 = pnts[i2]; let pnt2 = pnts[i2 + 1]; pList.push($this.LatlngTocartesian(pnt1)); for (let t2 = 0; t2 <= $this.FITTING_COUNT; t2++) { let pnt = $this.getCubicValue(t2 / $this.FITTING_COUNT, pnt1, normals[i2 * 2], normals[i2 * 2 + 1], pnt2); pList.push($this.LatlngTocartesian(pnt)); } pList.push($this.LatlngTocartesian(pnt2)); } let PolygonHierarchy = new $this.Cesium.PolygonHierarchy(pList); return { PolygonHierarchy, pList }; } addload(data) { let $this = this; if (data.length < 2) return; let pnts = Array.from(data); pnts.push(pnts[0], pnts[1]); let [normals, pList] = [ [], [] ]; for (let i2 = 0; i2 < pnts.length - 2; i2++) { let normalPoints = $this.getBisectorNormals($this.t, pnts[i2], pnts[i2 + 1], pnts[i2 + 2]); normals = normals.concat(normalPoints); } let count = normals.length; normals = [normals[count - 1]].concat(normals.slice(0, count - 1)); for (let i2 = 0; i2 < pnts.length - 2; i2++) { let pnt1 = pnts[i2]; let pnt2 = pnts[i2 + 1]; pList.push($this.LatlngTocartesian(pnt1)); for (let t2 = 0; t2 <= $this.FITTING_COUNT; t2++) { let pnt = $this.getCubicValue(t2 / $this.FITTING_COUNT, pnt1, normals[i2 * 2], normals[i2 * 2 + 1], pnt2); pList.push($this.LatlngTocartesian(pnt)); } pList.push($this.LatlngTocartesian(pnt2)); } var arrowEntity = $this.viewer.entities.add({ Type: "DrawClosedCurve", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(pList), show: true, fill: true, clampToGround: true, material: $this.polygonMaterial }, polyline: { positions: pList, show: true, material: new Cesium.PolylineDashMaterialProperty({ color: Cesium.Color.YELLOW }), width: 3, clampToGround: true } }); return arrowEntity; } startCreate(drawType) { if (isRuntimeApp()) { showTooltipMessage("\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } var $this = this; this.drawType = drawType; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) { var cartesian = $this.getCatesian3FromPX(evt.position); if (!cartesian) { return; } $this.createPoint(cartesian); $this._positions.push(cartesian); if ($this._positions.length > 2) { showTooltipMessage("\u70B9\u51FB\u6DFB\u52A0\u70B9\uFF0C\u70B9\u51FB\u5B8C\u6210\u6309\u94AE\uFF0C\u7ED3\u675F\u7ED8\u5236"); if ($this._positions.length === 3) { if (!$this.Cesium.defined($this._ClosedCurve)) { $this._ClosedCurve = $this.createClosedCurve(); createOperationMainDom(); document.getElementById("btnDrawBackout").style.display = "none"; document.getElementById("btnDrawComplete").onclick = () => { $this._ClosedCurveData = $this._positions.concat(); $this.viewer.entities.remove($this._ClosedCurve); $this._ClosedCurve = null; $this._positions = []; var lnglatArr = []; for (var i2 = 0; i2 < $this._ClosedCurveData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._ClosedCurveData[i2]); lnglatArr.push(lnglat); } $this._ClosedCurveData = lnglatArr; var ClosedCurve = $this.addload(lnglatArr); $this._entities_ClosedCurve.push(ClosedCurve); $this._ClosedCurveLast = ClosedCurve; $this.clearPoint(); $this.destroy(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } }; } } } else { showTooltipMessage("\u70B9\u51FB\u6DFB\u52A0\u70B9"); } } else { clearTimeout($this._timer); $this._timer = setTimeout(function() { var cartesian2 = $this.getCatesian3FromPX(evt.position); if ($this._positions.length == 0) { $this.floatingPoint = $this.createPoint(cartesian2); } $this._positions.push(cartesian2); $this.createPoint(cartesian2); }, 200); } }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) return; if ($this._positions.length == 0) { $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u5F00\u59CB\u7ED8\u5236"); } else { $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u6DFB\u52A0\u70B9"); } if ($this._positions.length < 2) return; $this._tooltip.showAt(evt.endPosition, "\u70B9\u51FB\u6DFB\u52A0\u70B9\uFF0C\u53CC\u51FB\u7ED3\u675F\u7ED8\u5236"); var cartesian = $this.getCatesian3FromPX(evt.endPosition); if ($this._positions.length == 2) { $this._positions.push(cartesian); } $this._positions.pop(); $this._positions.push(cartesian); if (!$this.Cesium.defined($this._ClosedCurve)) { $this._ClosedCurve = $this.createClosedCurve(); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); this.handler.setInputAction(function(evt) { if (isRuntimeApp()) return; clearTimeout($this._timer); if (!$this._ClosedCurve) return; var cartesian = $this.getCatesian3FromPX(evt.position); $this._positions.pop(); $this._positions.push(cartesian); $this._ClosedCurveData = $this._positions.concat(); $this.viewer.entities.remove($this._ClosedCurve); $this._ClosedCurve = null; $this._positions = []; $this.floatingPoint.position.setValue(cartesian); var lnglatArr = []; for (var i2 = 0; i2 < $this._ClosedCurveData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._ClosedCurveData[i2]); lnglatArr.push(lnglat); } $this._ClosedCurveData = lnglatArr; var ClosedCurve = $this.addload(lnglatArr); $this._entities_ClosedCurve.push(ClosedCurve); $this._ClosedCurveLast = ClosedCurve; $this.clearPoint(); $this.destroy(); $this._tooltip.setVisible(false); }, $this.Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); } createClosedCurve() { var $this = this; $this.pLists = ""; var arrowEntity = $this.viewer.entities.add({ polygon: { hierarchy: new $this.Cesium.CallbackProperty( function() { if ($this._positions.length < 2) return; let pnts = []; for (let p = 0; p < $this._positions.length; p++) { pnts.push($this.cartesianToLatlng($this._positions[p])); } pnts.push(pnts[0], pnts[1]); let [normals, pList] = [ [], [] ]; for (let i2 = 0; i2 < pnts.length - 2; i2++) { let normalPoints = $this.getBisectorNormals($this.t, pnts[i2], pnts[i2 + 1], pnts[i2 + 2]); normals = normals.concat(normalPoints); } let count = normals.length; normals = [normals[count - 1]].concat(normals.slice(0, count - 1)); for (let i2 = 0; i2 < pnts.length - 2; i2++) { let pnt1 = pnts[i2]; let pnt2 = pnts[i2 + 1]; pList.push($this.LatlngTocartesian(pnt1)); for (let t2 = 0; t2 <= $this.FITTING_COUNT; t2++) { let pnt = $this.getCubicValue(t2 / $this.FITTING_COUNT, pnt1, normals[i2 * 2], normals[i2 * 2 + 1], pnt2); pList.push($this.LatlngTocartesian(pnt)); } pList.push($this.LatlngTocartesian(pnt2)); } $this.pLists = pList; return new $this.Cesium.PolygonHierarchy(pList); }, false ), show: true, fill: true, clampToGround: true, material: $this.polygonMaterial }, polyline: { positions: new $this.Cesium.CallbackProperty( function() { return $this.pLists; }, false ), show: true, material: new Cesium.PolylineDashMaterialProperty({ color: Cesium.Color.YELLOW }), width: 3, clampToGround: true } }); $this._entities_ClosedCurve.push(arrowEntity); return arrowEntity; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } lonLatToMercator(Latlng) { var E2 = Latlng[0]; var N2 = Latlng[1]; var x = E2 * 2003750834e-2 / 180; var y = Math.log(Math.tan((90 + N2) * Math.PI / 360)) / (Math.PI / 180); y = y * 2003750834e-2 / 180; return [x, y]; } WebMercator2lonLat(mercator) { let x = mercator[0] / 2003750834e-2 * 180; let ly = mercator[1] / 2003750834e-2 * 180; let y = 180 / Math.PI * (2 * Math.atan(Math.exp(ly * Math.PI / 180)) - Math.PI / 2); return [x, y]; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clearPoint() { this.DrawEndEvent.raiseEvent(this._ClosedCurveLast, this._ClosedCurveData); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_ClosedCurve.length; i2++) { this.viewer.entities.remove(this._entities_ClosedCurve[i2]); } this.floatingPoint = null; this._ClosedCurve = null; this._ClosedCurveLast = null; this._positions = []; this._entities_point = []; this._entities_ClosedCurve = []; this._ClosedCurveData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } getBisectorNormals(t2, pnt1, pnt2, pnt3) { let $this = this; let normal = $this.getNormal(pnt1, pnt2, pnt3); let [bisectorNormalRight, bisectorNormalLeft, dt2, x, y] = [null, null, null, null, null]; let dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]); let uX = normal[0] / dist; let uY = normal[1] / dist; let d1 = $this.MathDistance(pnt1, pnt2); let d2 = $this.MathDistance(pnt2, pnt3); if (dist > $this.ZERO_TOLERANCE) { if ($this.isClockWise(pnt1, pnt2, pnt3)) { dt2 = t2 * d1; x = pnt2[0] - dt2 * uY; y = pnt2[1] + dt2 * uX; bisectorNormalRight = [x, y]; dt2 = t2 * d2; x = pnt2[0] + dt2 * uY; y = pnt2[1] - dt2 * uX; bisectorNormalLeft = [x, y]; } else { dt2 = t2 * d1; x = pnt2[0] + dt2 * uY; y = pnt2[1] - dt2 * uX; bisectorNormalRight = [x, y]; dt2 = t2 * d2; x = pnt2[0] - dt2 * uY; y = pnt2[1] + dt2 * uX; bisectorNormalLeft = [x, y]; } } else { x = pnt2[0] + t2 * (pnt1[0] - pnt2[0]); y = pnt2[1] + t2 * (pnt1[1] - pnt2[1]); bisectorNormalRight = [x, y]; x = pnt2[0] + t2 * (pnt3[0] - pnt2[0]); y = pnt2[1] + t2 * (pnt3[1] - pnt2[1]); bisectorNormalLeft = [x, y]; } return [bisectorNormalRight, bisectorNormalLeft]; } getNormal(pnt1, pnt2, pnt3) { let dX1 = pnt1[0] - pnt2[0]; let dY1 = pnt1[1] - pnt2[1]; let d1 = Math.sqrt(dX1 * dX1 + dY1 * dY1); dX1 /= d1; dY1 /= d1; let dX2 = pnt3[0] - pnt2[0]; let dY2 = pnt3[1] - pnt2[1]; let d2 = Math.sqrt(dX2 * dX2 + dY2 * dY2); dX2 /= d2; dY2 /= d2; let uX = dX1 + dX2; let uY = dY1 + dY2; return [uX, uY]; } MathDistance(pnt1, pnt2) { return Math.sqrt(Math.pow(pnt1[0] - pnt2[0], 2) + Math.pow(pnt1[1] - pnt2[1], 2)); } isClockWise(pnt1, pnt2, pnt3) { return (pnt3[1] - pnt1[1]) * (pnt2[0] - pnt1[0]) > (pnt2[1] - pnt1[1]) * (pnt3[0] - pnt1[0]); } getCubicValue(t2, startPnt, cPnt1, cPnt2, endPnt) { t2 = Math.max(Math.min(t2, 1), 0); let [tp, t22] = [1 - t2, t2 * t2]; let t3 = t22 * t2; let tp2 = tp * tp; let tp3 = tp2 * tp; let x = tp3 * startPnt[0] + 3 * tp2 * t2 * cPnt1[0] + 3 * tp * t22 * cPnt2[0] + t3 * endPnt[0]; let y = tp3 * startPnt[1] + 3 * tp2 * t2 * cPnt1[1] + 3 * tp * t22 * cPnt2[1] + t3 * endPnt[1]; return [x, y]; } } class DrawSector { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.floatingPoint = null; this._sector = null; this._sectorLast = null; this._positions = []; this._entities_point = []; this._entities_sector = []; this._sectorData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get sector() { return this._sectorLast; } getData() { return this._sectorData; } computePosition(data) { let $this = this; let pnts = data; let center2 = $this.lonLatToMercator($this.cartesianToLatlng(pnts[0])); let pnt2 = $this.lonLatToMercator($this.cartesianToLatlng(pnts[1])); let pnt3 = $this.lonLatToMercator($this.cartesianToLatlng(pnts[2])); var radius = $this.MathDistance(pnt2, center2); var startAngle = $this.getAzimuth(pnt2, center2); var endAngle = $this.getAzimuth(pnt3, center2); var pList = $this.getArcPoints(center2, radius, startAngle, endAngle); pList.push(pnts[0], pList[0]); let arrow = []; for (var i2 = 0; i2 < pList.length; i2++) { var cart3 = new $this.Cesium.Cartesian3(pList[i2].x, pList[i2].y, pList[i2].z); arrow.push(cart3); } var lnglatArr = []; for (var d2 = 0; d2 < data.length; d2++) { lnglatArr.push($this.cartesianToLatlng(data[d2])); } $this._sectorData = lnglatArr; return new $this.Cesium.PolygonHierarchy(arrow); } addload(data) { var $this = this; let pnts = data; let center2 = $this.lonLatToMercator(pnts[0]); let pnt2 = $this.lonLatToMercator(pnts[1]); let pnt3 = $this.lonLatToMercator(pnts[2]); var radius = $this.MathDistance(pnt2, center2); var startAngle = $this.getAzimuth(pnt2, center2); var endAngle = $this.getAzimuth(pnt3, center2); var pList = $this.getArcPoints(center2, radius, startAngle, endAngle); let pntsc = $this.Cesium.Cartesian3.fromDegrees(pnts[0][0], pnts[0][1]); pList.push(pntsc, pList[0]); let arrow = []; for (var i2 = 0; i2 < pList.length; i2++) { var cart3 = new $this.Cesium.Cartesian3(pList[i2].x, pList[i2].y, pList[i2].z); arrow.push(cart3); } var arrowEntity = $this.viewer.entities.add({ Type: "DrawSector", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(arrow), show: true, fill: true, clampToGround: true, material: $this.Cesium.Color.AQUA.withAlpha(0.9) } }); return arrowEntity; } startCreate() { var $this = this; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { var cartesian = $this.getCatesian3FromPX(evt.position); if ($this._positions.length < 3) { $this.floatingPoint = $this.createPoint(cartesian); $this._positions.push(cartesian); } if (!$this._sector) ; }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if ($this._positions.length < 2) return; var cartesian = $this.getCatesian3FromPX(evt.endPosition); if ($this._positions.length == 2) { $this._positions.push(cartesian); } if ($this._positions.length == 3) { $this._positions.pop(); $this._positions.push(cartesian); if (!$this.Cesium.defined($this._sector)) { $this._sector = $this.createsector(); } } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { if (!$this._sector) return; var cartesian = $this.getCatesian3FromPX(evt.position); $this._positions.pop(); $this._positions.push(cartesian); $this._sectorData = $this._positions.concat(); $this.viewer.entities.remove($this._sector); $this._sector = null; $this._positions = []; $this.floatingPoint.position.setValue(cartesian); var lnglatArr = []; for (var i2 = 0; i2 < $this._sectorData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._sectorData[i2]); lnglatArr.push(lnglat); } $this._sectorData = lnglatArr; var sector = $this.addload(lnglatArr); $this._entities_sector.push(sector); $this._sectorLast = sector; $this.clearPoint(); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createsector() { var $this = this; var arrowEntity = $this.viewer.entities.add( { polygon: { hierarchy: new $this.Cesium.CallbackProperty( function() { let pnts = $this._positions; let center2 = $this.lonLatToMercator($this.cartesianToLatlng(pnts[0])); let pnt2 = $this.lonLatToMercator($this.cartesianToLatlng(pnts[1])); let pnt3 = $this.lonLatToMercator($this.cartesianToLatlng(pnts[2])); var radius = $this.MathDistance(pnt2, center2); var startAngle = $this.getAzimuth(pnt2, center2); var endAngle = $this.getAzimuth(pnt3, center2); var pList = $this.getArcPoints(center2, radius, startAngle, endAngle); pList.push(pnts[0], pList[0]); for (var i2 = 0; i2 < pList.length; i2++) { new $this.Cesium.Cartesian3(pList[i2].x, pList[i2].y, pList[i2].z); } return new $this.Cesium.PolygonHierarchy(pList); }, false ), show: true, fill: true, clampToGround: true, material: $this.Cesium.Color.AQUA.withAlpha(0.5) } } ); $this._entities_sector.push(arrowEntity); return arrowEntity; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } lonLatToMercator(Latlng) { var E2 = Latlng[0]; var N2 = Latlng[1]; var x = E2 * 2003750834e-2 / 180; var y = Math.log(Math.tan((90 + N2) * Math.PI / 360)) / (Math.PI / 180); y = y * 2003750834e-2 / 180; return [x, y]; } WebMercator2lonLat(mercator) { let x = mercator[0] / 2003750834e-2 * 180; let ly = mercator[1] / 2003750834e-2 * 180; let y = 180 / Math.PI * (2 * Math.atan(Math.exp(ly * Math.PI / 180)) - Math.PI / 2); return [x, y]; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clearPoint() { this.DrawEndEvent.raiseEvent(this._sectorLast, this._sectorData); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_sector.length; i2++) { this.viewer.entities.remove(this._entities_sector[i2]); } this.floatingPoint = null; this._sector = null; this._sectorLast = null; this._positions = []; this._entities_point = []; this._entities_sector = []; this._sectorData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } MathDistance(pnt1, pnt2) { return Math.sqrt(Math.pow(pnt1[0] - pnt2[0], 2) + Math.pow(pnt1[1] - pnt2[1], 2)); } getAzimuth(startPoint, endPoint) { var azimuth; var angle = Math.asin(Math.abs(endPoint[1] - startPoint[1]) / this.MathDistance(startPoint, endPoint)); if (endPoint[1] >= startPoint[1] && endPoint[0] >= startPoint[0]) { azimuth = angle + Math.PI; } else if (endPoint[1] >= startPoint[1] && endPoint[0] < startPoint[0]) { azimuth = Math.PI * 2 - angle; } else if (endPoint[1] < startPoint[1] && endPoint[0] < startPoint[0]) { azimuth = angle; } else if (endPoint[1] < startPoint[1] && endPoint[0] >= startPoint[0]) { azimuth = Math.PI - angle; } return azimuth; } getArcPoints(center2, radius, startAngle, endAngle) { var x = null, y = null, pnts = [], angleDiff = endAngle - startAngle; angleDiff = angleDiff < 0 ? angleDiff + Math.PI * 2 : angleDiff; for (var i2 = 0; i2 <= 100; i2++) { var angle = startAngle + angleDiff * i2 / 100; x = center2[0] + radius * Math.cos(angle); y = center2[1] + radius * Math.sin(angle); let latlon = this.WebMercator2lonLat([x, y]); pnts.push(this.Cesium.Cartesian3.fromDegrees(latlon[0], latlon[1])); } return pnts; } } class DrawBowLine { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.tt = 0.4; this.floatingPoint = null; this.drawHandler = null; this.DrawBowLine = null; this._DrawBowLineLast = null; this._positions = []; this._entities_point = []; this._entities_PincerArrow = []; this._DrawBowLineData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get PincerArrow() { return this._DrawBowLineLast; } getData() { return this._DrawBowLineData; } computePosition(data) { var $this = this; if (data.length < 3) { return; } var DrawBowLine2 = []; let positions = []; for (var i2 = 0; i2 < data.length; i2++) { positions.push($this.cartesianToLatlng(data[i2])); var cart3 = $this.lonLatToMercator($this.cartesianToLatlng(data[i2])); DrawBowLine2.push(cart3); } let [pnt1, pnt2, pnt3, startAngle, endAngle] = [DrawBowLine2[0], DrawBowLine2[2], DrawBowLine2[1], null, null]; let center2 = $this.getCircleCenterOfThreePoints(pnt1, pnt2, pnt3); let radius = $this.MathDistance(pnt1, center2); let angle1 = $this.getAzimuth(pnt1, center2); let angle2 = $this.getAzimuth(pnt2, center2); if ($this.isClockWise(pnt1, pnt2, pnt3)) { startAngle = angle2; endAngle = angle1; } else { startAngle = angle1; endAngle = angle2; } let getArcPoint = $this.getArcPoints(center2, radius, startAngle, endAngle); let pHierarchy = []; for (var l = 0; l < getArcPoint.length; l++) { var cart3 = $this.LatlngTocartesian($this.WebMercator2lonLat(getArcPoint[l])); pHierarchy.push(cart3); } $this._DrawBowLineData = positions; return pHierarchy; } addload(data) { var $this = this; if (data.length < 3) { return; } var DrawBowLine2 = []; for (var i2 = 0; i2 < data.length; i2++) { var cart3 = $this.lonLatToMercator(data[i2]); DrawBowLine2.push(cart3); } let [pnt1, pnt2, pnt3, startAngle, endAngle] = [DrawBowLine2[0], DrawBowLine2[2], DrawBowLine2[1], null, null]; let center2 = $this.getCircleCenterOfThreePoints(pnt1, pnt2, pnt3); let radius = $this.MathDistance(pnt1, center2); let angle1 = $this.getAzimuth(pnt1, center2); let angle2 = $this.getAzimuth(pnt2, center2); if ($this.isClockWise(pnt1, pnt2, pnt3)) { startAngle = angle2; endAngle = angle1; } else { startAngle = angle1; endAngle = angle2; } let getArcPoint = $this.getArcPoints(center2, radius, startAngle, endAngle); let pHierarchy = []; for (var l = 0; l < getArcPoint.length; l++) { var cart3 = $this.LatlngTocartesian($this.WebMercator2lonLat(getArcPoint[l])); pHierarchy.push(cart3); } var arrowEntity = $this.viewer.entities.add({ Type: "DrawBowLine", Position: data, id: data.id || $this.objId, polyline: { positions: pHierarchy, show: true, material: $this.Cesium.Color.YELLOW, width: 3, clampToGround: true } }); return arrowEntity; } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new $this.Cesium.ScreenSpaceEventHandler($this.viewer.scene.canvas); this.handler.setInputAction(function(event2) { var position2 = event2.position; if (!$this.Cesium.defined(position2)) { return; } var ray = $this.viewer.camera.getPickRay(position2); if (!$this.Cesium.defined(ray)) { return; } var cartesian = $this.viewer.scene.globe.pick(ray, $this.viewer.scene); if (!$this.Cesium.defined(cartesian)) { return; } if ($this._positions.length == 0) { $this._positions.push(cartesian.clone()); $this.floatingPoint = $this.createPoint(cartesian); } if ($this._positions.length <= 2) { $this.createPoint(cartesian); $this._positions.push(cartesian); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(event2) { if ($this._positions.length < 2) { return; } var position2 = event2.endPosition; if (!$this.Cesium.defined(position2)) { return; } var ray = $this.viewer.camera.getPickRay(position2); if (!$this.Cesium.defined(ray)) { return; } var cartesian = $this.viewer.scene.globe.pick(ray, $this.viewer.scene); if (!$this.Cesium.defined(cartesian)) { return; } if (!$this.Cesium.defined($this.DrawBowLine)) { $this.DrawBowLine = $this.createDrawBowLine(); } $this.floatingPoint.position.setValue(cartesian); if ($this.DrawBowLine) { if ($this._positions.length == 3) { $this._positions[1] = cartesian; } else { $this._positions.pop(); $this._positions.push(cartesian); } } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(movement) { if ($this._positions.length >= 3) { $this._DrawBowLineData = $this._positions.concat(); $this.viewer.entities.remove($this.DrawBowLine); $this.DrawBowLine = null; var lnglatArr = []; for (var i2 = 0; i2 < $this._DrawBowLineData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._DrawBowLineData[i2]); lnglatArr.push(lnglat); } $this._DrawBowLineData = lnglatArr; var pincerArrow = $this.addload(lnglatArr); $this._entities_PincerArrow.push(pincerArrow); $this._DrawBowLineLast = pincerArrow; $this.viewer.entities.remove($this.floatingPoint); $this.floatingPoint = null; $this.clearPoint(); $this.destroy(); } }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createDrawBowLine() { let $this = this; var DrawBowLineEntity = $this.viewer.entities.add({ polyline: { positions: new $this.Cesium.CallbackProperty(function() { if ($this._positions.length < 3) { return; } var DrawBowLine2 = []; for (var i2 = 0; i2 < $this._positions.length; i2++) { var cart3 = $this.lonLatToMercator($this.cartesianToLatlng($this._positions[i2])); DrawBowLine2.push(cart3); } let [pnt1, pnt2, pnt3, startAngle, endAngle] = [DrawBowLine2[0], DrawBowLine2[2], DrawBowLine2[1], null, null]; let center2 = $this.getCircleCenterOfThreePoints(pnt1, pnt2, pnt3); let radius = $this.MathDistance(pnt1, center2); let angle1 = $this.getAzimuth(pnt1, center2); let angle2 = $this.getAzimuth(pnt2, center2); if ($this.isClockWise(pnt1, pnt2, pnt3)) { startAngle = angle2; endAngle = angle1; } else { startAngle = angle1; endAngle = angle2; } let getArcPoint = $this.getArcPoints(center2, radius, startAngle, endAngle); let pHierarchy = []; for (var l = 0; l < getArcPoint.length; l++) { var cart3 = $this.LatlngTocartesian($this.WebMercator2lonLat(getArcPoint[l])); pHierarchy.push(cart3); } return pHierarchy; }, false), show: true, material: $this.Cesium.Color.YELLOW, width: 3, clampToGround: true } }); $this._entities_PincerArrow.push(DrawBowLineEntity); return DrawBowLineEntity; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } cartesianToLatlng(cartesian) { let cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); let lat = this.Cesium.Math.toDegrees(cartographic.latitude); let lng = this.Cesium.Math.toDegrees(cartographic.longitude); cartographic.height; return [lng, lat]; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clearPoint() { this.DrawEndEvent.raiseEvent(this._DrawBowLineLast, this._DrawBowLineData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_PincerArrow.length; i2++) { this.viewer.entities.remove(this._entities_PincerArrow[i2]); } this.floatingPoint = null; this._PincerArrow = null; this._PincerArrowLast = null; this._positions = []; this._entities_point = []; this._entities_PincerArrow = []; this._PincerArrowData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } _computeTempPositions() { var _this = this; var pnts = [].concat(_this._positions); var num = pnts.length; var first = pnts[0]; var last = pnts[num - 1]; if (_this._isSimpleXYZ(first, last) == false) { pnts.push(first); num += 1; } _this.tempPositions = []; for (var i2 = 1; i2 < num; i2++) { var p1 = pnts[i2 - 1]; var p2 = pnts[i2]; var cp = _this._computeCenterPotition(p1, p2); _this.tempPositions.push(p1); _this.tempPositions.push(cp); } } _isSimpleXYZ(p1, p2) { if (p1.x == p2.x && p1.y == p2.y && p1.z == p2.z) { return true; } return false; } _computeCenterPotition(p1, p2) { var _this = this; var c1 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p1); var c2 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p2); var cm = new _this.Cesium.EllipsoidGeodesic(c1, c2).interpolateUsingFraction(0.5); var cp = _this.viewer.scene.globe.ellipsoid.cartographicToCartesian(cm); return cp; } getLonLat(cartesian) { var cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); cartographic.height = this.viewer.scene.globe.getHeight(cartographic); var pos = { lon: cartographic.longitude, lat: cartographic.latitude, alt: cartographic.height }; pos.lon = this.Cesium.Math.toDegrees(pos.lon); pos.lat = this.Cesium.Math.toDegrees(pos.lat); return pos; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } lonLatToMercator(Latlng) { var E2 = Latlng[0]; var N2 = Latlng[1]; var x = E2 * 2003750834e-2 / 180; var y = Math.log(Math.tan((90 + N2) * Math.PI / 360)) / (Math.PI / 180); y = y * 2003750834e-2 / 180; return [x, y]; } WebMercator2lonLat(mercator) { let x = mercator[0] / 2003750834e-2 * 180; let ly = mercator[1] / 2003750834e-2 * 180; let y = 180 / Math.PI * (2 * Math.atan(Math.exp(ly * Math.PI / 180)) - Math.PI / 2); return [x, y]; } getCircleCenterOfThreePoints(point1, point2, point3) { let pntA = [(point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2]; let pntB = [pntA[0] - point1[1] + point2[1], pntA[1] + point1[0] - point2[0]]; let pntC = [(point1[0] + point3[0]) / 2, (point1[1] + point3[1]) / 2]; let pntD = [pntC[0] - point1[1] + point3[1], pntC[1] + point1[0] - point3[0]]; return this.getIntersectPoint(pntA, pntB, pntC, pntD); } getIntersectPoint(pntA, pntB, pntC, pntD) { if (pntA[1] === pntB[1]) { let f2 = (pntD[0] - pntC[0]) / (pntD[1] - pntC[1]); let x2 = f2 * (pntA[1] - pntC[1]) + pntC[0]; let y2 = pntA[1]; return [x2, y2]; } if (pntC[1] === pntD[1]) { let e2 = (pntB[0] - pntA[0]) / (pntB[1] - pntA[1]); let x2 = e2 * (pntC[1] - pntA[1]) + pntA[0]; let y2 = pntC[1]; return [x2, y2]; } let e = (pntB[0] - pntA[0]) / (pntB[1] - pntA[1]); let f = (pntD[0] - pntC[0]) / (pntD[1] - pntC[1]); let y = (e * pntA[1] - pntA[0] - f * pntC[1] + pntC[0]) / (e - f); let x = e * y - e * pntA[1] + pntA[0]; return [x, y]; } MathDistance(pnt1, pnt2) { return Math.sqrt(Math.pow(pnt1[0] - pnt2[0], 2) + Math.pow(pnt1[1] - pnt2[1], 2)); } getAzimuth(startPoint, endPoint) { let azimuth; let angle = Math.asin(Math.abs(endPoint[1] - startPoint[1]) / this.MathDistance(startPoint, endPoint)); if (endPoint[1] >= startPoint[1] && endPoint[0] >= startPoint[0]) { azimuth = angle + Math.PI; } else if (endPoint[1] >= startPoint[1] && endPoint[0] < startPoint[0]) { azimuth = Math.PI * 2 - angle; } else if (endPoint[1] < startPoint[1] && endPoint[0] < startPoint[0]) { azimuth = angle; } else if (endPoint[1] < startPoint[1] && endPoint[0] >= startPoint[0]) { azimuth = Math.PI - angle; } return azimuth; } isClockWise(pnt1, pnt2, pnt3) { return (pnt3[1] - pnt1[1]) * (pnt2[0] - pnt1[0]) > (pnt2[1] - pnt1[1]) * (pnt3[0] - pnt1[0]); } getArcPoints(center2, radius, startAngle, endAngle) { let [x, y, pnts, angleDiff] = [null, null, [], endAngle - startAngle]; angleDiff = angleDiff < 0 ? angleDiff + Math.PI * 2 : angleDiff; for (let i2 = 0; i2 <= 100; i2++) { let angle = startAngle + angleDiff * i2 / 100; x = center2[0] + radius * Math.cos(angle); y = center2[1] + radius * Math.sin(angle); pnts.push([x, y]); } return pnts; } } class DrawBowPlane { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.tt = 0.4; this.floatingPoint = null; this.drawHandler = null; this.DrawBowPlane = null; this._DrawBowPlaneLast = null; this._positions = []; this._entities_point = []; this._entities_PincerArrow = []; this._DrawBowPlaneData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get PincerArrow() { return this._DrawBowPlaneLast; } getData() { return this._DrawBowPlaneData; } computePosition(data) { var $this = this; if (data.length < 3) { return; } var DrawBowPlane2 = []; let positions = []; for (var i2 = 0; i2 < data.length; i2++) { positions.push($this.cartesianToLatlng(data[i2])); var cart3 = $this.lonLatToMercator($this.cartesianToLatlng(data[i2])); DrawBowPlane2.push(cart3); } let [pnt1, pnt2, pnt3, startAngle, endAngle] = [DrawBowPlane2[0], DrawBowPlane2[2], DrawBowPlane2[1], null, null]; let center2 = $this.getCircleCenterOfThreePoints(pnt1, pnt2, pnt3); let radius = $this.MathDistance(pnt1, center2); let angle1 = $this.getAzimuth(pnt1, center2); let angle2 = $this.getAzimuth(pnt2, center2); if ($this.isClockWise(pnt1, pnt2, pnt3)) { startAngle = angle2; endAngle = angle1; } else { startAngle = angle1; endAngle = angle2; } let getArcPoint = $this.getArcPoints(center2, radius, startAngle, endAngle); let pHierarchy = []; for (var l = 0; l < getArcPoint.length; l++) { var cart3 = $this.LatlngTocartesian($this.WebMercator2lonLat(getArcPoint[l])); pHierarchy.push(cart3); } pHierarchy.push(pHierarchy[0]); $this._DrawBowPlaneData = positions; return new $this.Cesium.PolygonHierarchy(pHierarchy); } addload(data) { var $this = this; if (data.length < 3) { return; } var DrawBowPlane2 = []; for (var i2 = 0; i2 < data.length; i2++) { var cart3 = $this.lonLatToMercator(data[i2]); DrawBowPlane2.push(cart3); } let [pnt1, pnt2, pnt3, startAngle, endAngle] = [DrawBowPlane2[0], DrawBowPlane2[2], DrawBowPlane2[1], null, null]; let center2 = $this.getCircleCenterOfThreePoints(pnt1, pnt2, pnt3); let radius = $this.MathDistance(pnt1, center2); let angle1 = $this.getAzimuth(pnt1, center2); let angle2 = $this.getAzimuth(pnt2, center2); if ($this.isClockWise(pnt1, pnt2, pnt3)) { startAngle = angle2; endAngle = angle1; } else { startAngle = angle1; endAngle = angle2; } let getArcPoint = $this.getArcPoints(center2, radius, startAngle, endAngle); let pHierarchy = []; for (var l = 0; l < getArcPoint.length; l++) { var cart3 = $this.LatlngTocartesian($this.WebMercator2lonLat(getArcPoint[l])); pHierarchy.push(cart3); } pHierarchy.push(pHierarchy[0]); var arrowEntity = $this.viewer.entities.add( { Type: "DrawBowPlane", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(pHierarchy), show: true, material: $this.Cesium.Color.YELLOW, width: 3, clampToGround: true, outlineWidth: 3, outline: true, outlineColor: Cesium.Color.MAGENTA } } ); return arrowEntity; } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new $this.Cesium.ScreenSpaceEventHandler($this.viewer.scene.canvas); this.handler.setInputAction(function(event2) { var position2 = event2.position; if (!$this.Cesium.defined(position2)) { return; } var ray = $this.viewer.camera.getPickRay(position2); if (!$this.Cesium.defined(ray)) { return; } var cartesian = $this.viewer.scene.globe.pick(ray, $this.viewer.scene); if (!$this.Cesium.defined(cartesian)) { return; } if ($this._positions.length == 0) { $this._positions.push(cartesian.clone()); $this.floatingPoint = $this.createPoint(cartesian); } if ($this._positions.length <= 2) { $this.createPoint(cartesian); $this._positions.push(cartesian); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(event2) { if ($this._positions.length < 2) { return; } var position2 = event2.endPosition; if (!$this.Cesium.defined(position2)) { return; } var ray = $this.viewer.camera.getPickRay(position2); if (!$this.Cesium.defined(ray)) { return; } var cartesian = $this.viewer.scene.globe.pick(ray, $this.viewer.scene); if (!$this.Cesium.defined(cartesian)) { return; } if (!$this.Cesium.defined($this.DrawBowPlane)) { $this.DrawBowPlane = $this.createDrawBowPlane(); } $this.floatingPoint.position.setValue(cartesian); if ($this.DrawBowPlane) { if ($this._positions.length == 3) { $this._positions[1] = cartesian; } else { $this._positions.pop(); $this._positions.push(cartesian); } } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(movement) { if ($this._positions.length >= 3) { $this._DrawBowPlaneData = $this._positions.concat(); $this.viewer.entities.remove($this.DrawBowPlane); $this.DrawBowPlane = null; var lnglatArr = []; for (var i2 = 0; i2 < $this._DrawBowPlaneData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._DrawBowPlaneData[i2]); lnglatArr.push(lnglat); } $this._DrawBowPlaneData = lnglatArr; var pincerArrow = $this.addload(lnglatArr); $this._entities_PincerArrow.push(pincerArrow); $this._DrawBowPlaneLast = pincerArrow; $this.viewer.entities.remove($this.floatingPoint); $this.floatingPoint = null; $this.clearPoint(); $this.destroy(); } }, Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createDrawBowPlane() { let $this = this; var DrawBowPlaneEntity = $this.viewer.entities.add( { polygon: { hierarchy: new $this.Cesium.CallbackProperty(function() { if ($this._positions.length < 3) { return; } var DrawBowPlane2 = []; for (var i2 = 0; i2 < $this._positions.length; i2++) { var cart3 = $this.lonLatToMercator($this.cartesianToLatlng($this._positions[i2])); DrawBowPlane2.push(cart3); } let [pnt1, pnt2, pnt3, startAngle, endAngle] = [DrawBowPlane2[0], DrawBowPlane2[2], DrawBowPlane2[1], null, null]; let center2 = $this.getCircleCenterOfThreePoints(pnt1, pnt2, pnt3); let radius = $this.MathDistance(pnt1, center2); let angle1 = $this.getAzimuth(pnt1, center2); let angle2 = $this.getAzimuth(pnt2, center2); if ($this.isClockWise(pnt1, pnt2, pnt3)) { startAngle = angle2; endAngle = angle1; } else { startAngle = angle1; endAngle = angle2; } let getArcPoint = $this.getArcPoints(center2, radius, startAngle, endAngle); let pHierarchy = []; for (var l = 0; l < getArcPoint.length; l++) { var cart3 = $this.LatlngTocartesian($this.WebMercator2lonLat(getArcPoint[l])); pHierarchy.push(cart3); } pHierarchy.push(pHierarchy[0]); return new $this.Cesium.PolygonHierarchy(pHierarchy); }, false), show: true, material: $this.Cesium.Color.YELLOW, clampToGround: true } } ); $this._entities_PincerArrow.push(DrawBowPlaneEntity); return DrawBowPlaneEntity; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } cartesianToLatlng(cartesian) { let cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); let lat = this.Cesium.Math.toDegrees(cartographic.latitude); let lng = this.Cesium.Math.toDegrees(cartographic.longitude); cartographic.height; return [lng, lat]; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clearPoint() { this.DrawEndEvent.raiseEvent(this._DrawBowPlaneLast, this._DrawBowPlaneData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_PincerArrow.length; i2++) { this.viewer.entities.remove(this._entities_PincerArrow[i2]); } this.floatingPoint = null; this._PincerArrow = null; this._PincerArrowLast = null; this._positions = []; this._entities_point = []; this._entities_PincerArrow = []; this._PincerArrowData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } _computeTempPositions() { var _this = this; var pnts = [].concat(_this._positions); var num = pnts.length; var first = pnts[0]; var last = pnts[num - 1]; if (_this._isSimpleXYZ(first, last) == false) { pnts.push(first); num += 1; } _this.tempPositions = []; for (var i2 = 1; i2 < num; i2++) { var p1 = pnts[i2 - 1]; var p2 = pnts[i2]; var cp = _this._computeCenterPotition(p1, p2); _this.tempPositions.push(p1); _this.tempPositions.push(cp); } } _isSimpleXYZ(p1, p2) { if (p1.x == p2.x && p1.y == p2.y && p1.z == p2.z) { return true; } return false; } _computeCenterPotition(p1, p2) { var _this = this; var c1 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p1); var c2 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p2); var cm = new _this.Cesium.EllipsoidGeodesic(c1, c2).interpolateUsingFraction(0.5); var cp = _this.viewer.scene.globe.ellipsoid.cartographicToCartesian(cm); return cp; } getLonLat(cartesian) { var cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); cartographic.height = this.viewer.scene.globe.getHeight(cartographic); var pos = { lon: cartographic.longitude, lat: cartographic.latitude, alt: cartographic.height }; pos.lon = this.Cesium.Math.toDegrees(pos.lon); pos.lat = this.Cesium.Math.toDegrees(pos.lat); return pos; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } lonLatToMercator(Latlng) { var E2 = Latlng[0]; var N2 = Latlng[1]; var x = E2 * 2003750834e-2 / 180; var y = Math.log(Math.tan((90 + N2) * Math.PI / 360)) / (Math.PI / 180); y = y * 2003750834e-2 / 180; return [x, y]; } WebMercator2lonLat(mercator) { let x = mercator[0] / 2003750834e-2 * 180; let ly = mercator[1] / 2003750834e-2 * 180; let y = 180 / Math.PI * (2 * Math.atan(Math.exp(ly * Math.PI / 180)) - Math.PI / 2); return [x, y]; } getCircleCenterOfThreePoints(point1, point2, point3) { let pntA = [(point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2]; let pntB = [pntA[0] - point1[1] + point2[1], pntA[1] + point1[0] - point2[0]]; let pntC = [(point1[0] + point3[0]) / 2, (point1[1] + point3[1]) / 2]; let pntD = [pntC[0] - point1[1] + point3[1], pntC[1] + point1[0] - point3[0]]; return this.getIntersectPoint(pntA, pntB, pntC, pntD); } getIntersectPoint(pntA, pntB, pntC, pntD) { if (pntA[1] === pntB[1]) { let f2 = (pntD[0] - pntC[0]) / (pntD[1] - pntC[1]); let x2 = f2 * (pntA[1] - pntC[1]) + pntC[0]; let y2 = pntA[1]; return [x2, y2]; } if (pntC[1] === pntD[1]) { let e2 = (pntB[0] - pntA[0]) / (pntB[1] - pntA[1]); let x2 = e2 * (pntC[1] - pntA[1]) + pntA[0]; let y2 = pntC[1]; return [x2, y2]; } let e = (pntB[0] - pntA[0]) / (pntB[1] - pntA[1]); let f = (pntD[0] - pntC[0]) / (pntD[1] - pntC[1]); let y = (e * pntA[1] - pntA[0] - f * pntC[1] + pntC[0]) / (e - f); let x = e * y - e * pntA[1] + pntA[0]; return [x, y]; } MathDistance(pnt1, pnt2) { return Math.sqrt(Math.pow(pnt1[0] - pnt2[0], 2) + Math.pow(pnt1[1] - pnt2[1], 2)); } getAzimuth(startPoint, endPoint) { let azimuth; let angle = Math.asin(Math.abs(endPoint[1] - startPoint[1]) / this.MathDistance(startPoint, endPoint)); if (endPoint[1] >= startPoint[1] && endPoint[0] >= startPoint[0]) { azimuth = angle + Math.PI; } else if (endPoint[1] >= startPoint[1] && endPoint[0] < startPoint[0]) { azimuth = Math.PI * 2 - angle; } else if (endPoint[1] < startPoint[1] && endPoint[0] < startPoint[0]) { azimuth = angle; } else if (endPoint[1] < startPoint[1] && endPoint[0] >= startPoint[0]) { azimuth = Math.PI - angle; } return azimuth; } isClockWise(pnt1, pnt2, pnt3) { return (pnt3[1] - pnt1[1]) * (pnt2[0] - pnt1[0]) > (pnt2[1] - pnt1[1]) * (pnt3[0] - pnt1[0]); } getArcPoints(center2, radius, startAngle, endAngle) { let [x, y, pnts, angleDiff] = [null, null, [], endAngle - startAngle]; angleDiff = angleDiff < 0 ? angleDiff + Math.PI * 2 : angleDiff; for (let i2 = 0; i2 <= 100; i2++) { let angle = startAngle + angleDiff * i2 / 100; x = center2[0] + radius * Math.cos(angle); y = center2[1] + radius * Math.sin(angle); pnts.push([x, y]); } return pnts; } } class DrawCurve { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.floatingPoint = null; this._curveline = null; this._curvelineLast = null; this._positions = []; this._entities_point = []; this._entities_line = []; this._curvelineData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this.ZERO_TOLERANCE = 1e-4; this.FITTING_COUNT = 100; this.t = 0.3; this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get curveline() { return this._curvelineLast; } getData() { return this._curvelineData; } addload(data) { var $this = this; let pnts = []; for (let p = 0; p < data.length; p++) { pnts.push($this.lonLatToMercator(data[p])); } let CurvePoints = $this.getCurvePoints(pnts); let point2 = []; for (let i2 = 0; i2 < CurvePoints.length; i2++) { point2.push($this.LatlngTocartesian($this.WebMercator2lonLat(CurvePoints[i2]))); } var polyline = this.viewer.entities.add({ Type: "DrawCurve", Position: data, id: data.id || $this.objId, polyline: { positions: point2, show: true, material: $this.Cesium.Color.YELLOW, width: 3, clampToGround: true } }); return polyline; } computePosition(data) { let pnts = []; let position2 = []; for (let p = 0; p < data.length; p++) { position2.push(this.cartesianToLatlng(data[p])); pnts.push(this.lonLatToMercator(this.cartesianToLatlng(data[p]))); } this._curvelineData = position2; let CurvePoints = this.getCurvePoints(pnts); let point2 = []; for (let i2 = 0; i2 < CurvePoints.length; i2++) { point2.push(this.LatlngTocartesian(this.WebMercator2lonLat(CurvePoints[i2]))); } return point2; } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { var cartesian = $this.getCatesian3FromPX(evt.position); if ($this._positions.length == 0) { $this._positions.push(cartesian.clone()); $this.floatingPoint = $this.createPoint(cartesian); $this.createPoint(cartesian); } $this._positions.push(cartesian); }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if ($this._positions.length < 3) return; var cartesian = $this.getCatesian3FromPX(evt.endPosition); if (!$this.Cesium.defined($this._curveline)) { $this._curveline = $this.createCurveline(); } $this.floatingPoint.position.setValue(cartesian); if ($this._curveline) { $this._positions.pop(); $this._positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { if (!$this._curveline) return; var cartesian = $this.getCatesian3FromPX(evt.position); $this._positions.pop(); $this._positions.push(cartesian); $this.createPoint(cartesian); $this._curvelineData = $this._positions.concat(); $this.viewer.entities.remove($this._curveline); $this._curveline = null; $this._positions = []; $this.floatingPoint.position.setValue(cartesian); let lnglatArr = []; for (var i2 = 0; i2 < $this._curvelineData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._curvelineData[i2]); lnglatArr.push(lnglat); } $this._curvelineData = lnglatArr; var line = $this.addload($this._curvelineData); $this._entities_line.push(line); $this._curvelineLast = line; $this.clearPoint(); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } createCurveline() { var $this = this; var polyline = this.viewer.entities.add({ polyline: { positions: new $this.Cesium.CallbackProperty(function() { let pnts = []; for (let p = 0; p < $this._positions.length; p++) { pnts.push($this.lonLatToMercator($this.cartesianToLatlng($this._positions[p]))); } let CurvePoints = $this.getCurvePoints(pnts); let point2 = []; for (let i2 = 0; i2 < CurvePoints.length; i2++) { point2.push($this.LatlngTocartesian($this.WebMercator2lonLat(CurvePoints[i2]))); } return point2; }, false), show: true, material: $this.Cesium.Color.YELLOW, width: 3, clampToGround: true } }); $this._entities_line.push(polyline); return polyline; } clearPoint() { this.DrawEndEvent.raiseEvent(this._curvelineLast, this._curvelineData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_line.length; i2++) { this.viewer.entities.remove(this._entities_line[i2]); } this.floatingPoint = null; this._curveline = null; this._curvelineLast = null; this._positions = []; this._entities_point = []; this._entities_line = []; this._curvelineData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } lonLatToMercator(Latlng) { var E2 = Latlng[0]; var N2 = Latlng[1]; var x = E2 * 2003750834e-2 / 180; var y = Math.log(Math.tan((90 + N2) * Math.PI / 360)) / (Math.PI / 180); y = y * 2003750834e-2 / 180; return [x, y]; } WebMercator2lonLat(mercator) { let x = mercator[0] / 2003750834e-2 * 180; let ly = mercator[1] / 2003750834e-2 * 180; let y = 180 / Math.PI * (2 * Math.atan(Math.exp(ly * Math.PI / 180)) - Math.PI / 2); return [x, y]; } getCurvePoints(controlPoints) { let leftControl = this.getLeftMostControlPoint(controlPoints, this.t); let [pnt1, pnt2, pnt3, normals, points2] = [null, null, null, [leftControl], []]; for (let i2 = 0; i2 < controlPoints.length - 2; i2++) { [pnt1, pnt2, pnt3] = [controlPoints[i2], controlPoints[i2 + 1], controlPoints[i2 + 2]]; let normalPoints = this.getBisectorNormals(this.t, pnt1, pnt2, pnt3); normals = normals.concat(normalPoints); } let rightControl = this.getRightMostControlPoint(controlPoints, this.t); if (rightControl) { normals.push(rightControl); } for (let i2 = 0; i2 < controlPoints.length - 1; i2++) { pnt1 = controlPoints[i2]; pnt2 = controlPoints[i2 + 1]; points2.push(pnt1); for (let t2 = 0; t2 < this.FITTING_COUNT; t2++) { let pnt = this.getCubicValue(t2 / this.FITTING_COUNT, pnt1, normals[i2 * 2], normals[i2 * 2 + 1], pnt2); points2.push(pnt); } points2.push(pnt2); } return points2; } getLeftMostControlPoint(controlPoints, t2) { let [pnt1, pnt2, pnt3, controlX, controlY] = [controlPoints[0], controlPoints[1], controlPoints[2], null, null]; let pnts = this.getBisectorNormals(0, pnt1, pnt2, pnt3); let normalRight = pnts[0]; let normal = this.getNormal(pnt1, pnt2, pnt3); let dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]); if (dist > this.ZERO_TOLERANCE) { let mid = this.Mid(pnt1, pnt2); let pX = pnt1[0] - mid[0]; let pY = pnt1[1] - mid[1]; let d1 = this.MathDistance(pnt1, pnt2); let n = 2 / d1; let nX = -n * pY; let nY = n * pX; let a11 = nX * nX - nY * nY; let a12 = 2 * nX * nY; let a22 = nY * nY - nX * nX; let dX = normalRight[0] - mid[0]; let dY = normalRight[1] - mid[1]; controlX = mid[0] + a11 * dX + a12 * dY; controlY = mid[1] + a12 * dX + a22 * dY; } else { controlX = pnt1[0] + t2 * (pnt2[0] - pnt1[0]); controlY = pnt1[1] + t2 * (pnt2[1] - pnt1[1]); } return [controlX, controlY]; } getBisectorNormals(t2, pnt1, pnt2, pnt3) { let normal = this.getNormal(pnt1, pnt2, pnt3); let [bisectorNormalRight, bisectorNormalLeft, dt2, x, y] = [null, null, null, null, null]; let dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]); let uX = normal[0] / dist; let uY = normal[1] / dist; let d1 = this.MathDistance(pnt1, pnt2); let d2 = this.MathDistance(pnt2, pnt3); if (dist > this.ZERO_TOLERANCE) { if (this.isClockWise(pnt1, pnt2, pnt3)) { dt2 = t2 * d1; x = pnt2[0] - dt2 * uY; y = pnt2[1] + dt2 * uX; bisectorNormalRight = [x, y]; dt2 = t2 * d2; x = pnt2[0] + dt2 * uY; y = pnt2[1] - dt2 * uX; bisectorNormalLeft = [x, y]; } else { dt2 = t2 * d1; x = pnt2[0] + dt2 * uY; y = pnt2[1] - dt2 * uX; bisectorNormalRight = [x, y]; dt2 = t2 * d2; x = pnt2[0] - dt2 * uY; y = pnt2[1] + dt2 * uX; bisectorNormalLeft = [x, y]; } } else { x = pnt2[0] + t2 * (pnt1[0] - pnt2[0]); y = pnt2[1] + t2 * (pnt1[1] - pnt2[1]); bisectorNormalRight = [x, y]; x = pnt2[0] + t2 * (pnt3[0] - pnt2[0]); y = pnt2[1] + t2 * (pnt3[1] - pnt2[1]); bisectorNormalLeft = [x, y]; } return [bisectorNormalRight, bisectorNormalLeft]; } getNormal(pnt1, pnt2, pnt3) { let dX1 = pnt1[0] - pnt2[0]; let dY1 = pnt1[1] - pnt2[1]; let d1 = Math.sqrt(dX1 * dX1 + dY1 * dY1); dX1 /= d1; dY1 /= d1; let dX2 = pnt3[0] - pnt2[0]; let dY2 = pnt3[1] - pnt2[1]; let d2 = Math.sqrt(dX2 * dX2 + dY2 * dY2); dX2 /= d2; dY2 /= d2; let uX = dX1 + dX2; let uY = dY1 + dY2; return [uX, uY]; } isClockWise(pnt1, pnt2, pnt3) { return (pnt3[1] - pnt1[1]) * (pnt2[0] - pnt1[0]) > (pnt2[1] - pnt1[1]) * (pnt3[0] - pnt1[0]); } Mid(point1, point2) { return [(point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2]; } MathDistance(pnt1, pnt2) { return Math.sqrt(Math.pow(pnt1[0] - pnt2[0], 2) + Math.pow(pnt1[1] - pnt2[1], 2)); } getRightMostControlPoint(controlPoints, t2) { let count = controlPoints.length; let pnt1 = controlPoints[count - 3]; let pnt2 = controlPoints[count - 2]; let pnt3 = controlPoints[count - 1]; let pnts = this.getBisectorNormals(0, pnt1, pnt2, pnt3); let normalLeft = pnts[1]; let normal = this.getNormal(pnt1, pnt2, pnt3); let dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]); let [controlX, controlY] = [null, null]; if (dist > this.ZERO_TOLERANCE) { let mid = this.Mid(pnt2, pnt3); let pX = pnt3[0] - mid[0]; let pY = pnt3[1] - mid[1]; let d1 = this.MathDistance(pnt2, pnt3); let n = 2 / d1; let nX = -n * pY; let nY = n * pX; let a11 = nX * nX - nY * nY; let a12 = 2 * nX * nY; let a22 = nY * nY - nX * nX; let dX = normalLeft[0] - mid[0]; let dY = normalLeft[1] - mid[1]; controlX = mid[0] + a11 * dX + a12 * dY; controlY = mid[1] + a12 * dX + a22 * dY; } else { controlX = pnt3[0] + t2 * (pnt2[0] - pnt3[0]); controlY = pnt3[1] + t2 * (pnt2[1] - pnt3[1]); } return [controlX, controlY]; } getCubicValue(t2, startPnt, cPnt1, cPnt2, endPnt) { t2 = Math.max(Math.min(t2, 1), 0); let [tp, t22] = [1 - t2, t2 * t2]; let t3 = t22 * t2; let tp2 = tp * tp; let tp3 = tp2 * tp; let x = tp3 * startPnt[0] + 3 * tp2 * t2 * cPnt1[0] + 3 * tp * t22 * cPnt2[0] + t3 * endPnt[0]; let y = tp3 * startPnt[1] + 3 * tp2 * t2 * cPnt1[1] + 3 * tp * t22 * cPnt2[1] + t3 * endPnt[1]; return [x, y]; } } class DrawCurveFlag { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.identificationPoint = null; this.CurveFlag = null; this.CurveFlagLast = null; this.positions = []; this.entitiesPoint = []; this.entitiesCurveFlag = []; this.CurveFlagData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } getData() { return this.CurveFlagData; } computePosition(data) { let $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } let startPoint = lnglatArr[0]; let endPoint = lnglatArr[lnglatArr.length - 1]; let point1 = startPoint; let point2 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) / 8 + startPoint[1]]; let point3 = [(startPoint[0] + endPoint[0]) / 2, startPoint[1]]; let point4 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], -(endPoint[1] - startPoint[1]) / 8 + startPoint[1]]; let point5 = [endPoint[0], startPoint[1]]; let point6 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; let point7 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 3 / 8 + startPoint[1]]; let point8 = [(startPoint[0] + endPoint[0]) / 2, (startPoint[1] + endPoint[1]) / 2]; let point9 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 5 / 8 + startPoint[1]]; let point10 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; let point11 = [startPoint[0], endPoint[1]]; let curve1 = $this.getBezierPoints([point1, point2, point3, point4, point5]); let curve2 = $this.getBezierPoints([point6, point7, point8, point9, point10]); let componentspolygon = []; componentspolygon = curve1.concat(curve2); let PolygonHierarchy = new $this.Cesium.PolygonHierarchy(componentspolygon); let componentspolyline = []; componentspolyline = curve1.concat(curve2); componentspolyline.push($this.LatlngTocartesian(point1)); componentspolyline.push($this.LatlngTocartesian(point11)); $this.CurveFlagData = lnglatArr; return [PolygonHierarchy, componentspolyline]; } addload(data) { var $this = this; if (data.length < 2) return; let startPoint = data[0]; let endPoint = data[data.length - 1]; let point1 = startPoint; let point2 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) / 8 + startPoint[1]]; let point3 = [(startPoint[0] + endPoint[0]) / 2, startPoint[1]]; let point4 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], -(endPoint[1] - startPoint[1]) / 8 + startPoint[1]]; let point5 = [endPoint[0], startPoint[1]]; let point6 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; let point7 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 3 / 8 + startPoint[1]]; let point8 = [(startPoint[0] + endPoint[0]) / 2, (startPoint[1] + endPoint[1]) / 2]; let point9 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 5 / 8 + startPoint[1]]; let point10 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; let point11 = [startPoint[0], endPoint[1]]; let curve1 = $this.getBezierPoints([point1, point2, point3, point4, point5]); let curve2 = $this.getBezierPoints([point6, point7, point8, point9, point10]); let componentspolygon = []; componentspolygon = curve1.concat(curve2); let componentspolyline = []; componentspolyline = curve1.concat(curve2); componentspolyline.push($this.LatlngTocartesian(point1)); componentspolyline.push($this.LatlngTocartesian(point11)); var shape = this.viewer.entities.add({ Type: "DrawCurveFlag", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(componentspolygon), extrudedHeight: 1, material: $this.Cesium.Color.RED }, polyline: { positions: componentspolyline, show: true, material: $this.Cesium.Color.YELLOW, width: 5, clampToGround: true } }); $this.entitiesCurveFlag.push(shape); return shape; } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { var cartesian = $this.getCatesian3FromPX(evt.position); if ($this.positions.length == 0) { $this.positions.push(cartesian.clone()); $this.identificationPoint = $this.createPoint(cartesian); $this.createPoint(cartesian); $this.positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if ($this.positions.length < 2) return; var cartesian = $this.getCatesian3FromPX(evt.endPosition); if (!$this.Cesium.defined($this.CurveFlag)) { $this.CurveFlag = $this.createCurveFlag(); } $this.identificationPoint.position.setValue(cartesian); if ($this.CurveFlag) { $this.positions.pop(); $this.positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { if (!$this.CurveFlag) return; var cartesian = $this.getCatesian3FromPX(evt.position); $this.positions.pop(); $this.positions.push(cartesian); $this.createPoint(cartesian); $this.CurveFlagData = $this.positions.concat(); $this.viewer.entities.remove($this.CurveFlag); $this.CurveFlag = null; $this.positions = []; $this.identificationPoint.position.setValue(cartesian); var lnglatArr = []; for (var i2 = 0; i2 < $this.CurveFlagData.length; i2++) { var lnglat = $this.cartesianToLatlng($this.CurveFlagData[i2]); lnglatArr.push(lnglat); } $this.CurveFlagData = lnglatArr; var CurveFlag = $this.addload([$this.CurveFlagData[0], $this.CurveFlagData[$this.CurveFlagData.length - 1]]); $this.entitiesCurveFlag.push(CurveFlag); $this.CurveFlagLast = CurveFlag; $this.clearPoint(); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this.entitiesPoint.push(point2); return point2; } createCurveFlag() { var $this = this; var polygon2 = this.viewer.entities.add({ polygon: { hierarchy: new $this.Cesium.CallbackProperty(function() { if ($this.positions.length < 2) return; let lonlat = []; let components = []; let length = $this.positions.length; for (let i2 = 0; i2 < length; i2++) { lonlat.push($this.cartesianToLatlng($this.positions[i2])); } let startPoint = lonlat[0]; let endPoint = lonlat[lonlat.length - 1]; let point1 = startPoint; let point2 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) / 8 + startPoint[1]]; let point3 = [(startPoint[0] + endPoint[0]) / 2, startPoint[1]]; let point4 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], -(endPoint[1] - startPoint[1]) / 8 + startPoint[1]]; let point5 = [endPoint[0], startPoint[1]]; let point6 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; let point7 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 3 / 8 + startPoint[1]]; let point8 = [(startPoint[0] + endPoint[0]) / 2, (startPoint[1] + endPoint[1]) / 2]; let point9 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 5 / 8 + startPoint[1]]; let point10 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; [startPoint[0], endPoint[1]]; let curve1 = $this.getBezierPoints([point1, point2, point3, point4, point5]); let curve2 = $this.getBezierPoints([point6, point7, point8, point9, point10]); components = curve1.concat(curve2); return new $this.Cesium.PolygonHierarchy(components); }, false), extrudedHeight: 1, material: $this.Cesium.Color.RED }, polyline: { positions: new $this.Cesium.CallbackProperty(function() { if ($this.positions.length < 2) return; let lonlat = []; let components = []; let length = $this.positions.length; for (let i2 = 0; i2 < length; i2++) { lonlat.push($this.cartesianToLatlng($this.positions[i2])); } let startPoint = lonlat[0]; let endPoint = lonlat[lonlat.length - 1]; let point1 = startPoint; let point2 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) / 8 + startPoint[1]]; let point3 = [(startPoint[0] + endPoint[0]) / 2, startPoint[1]]; let point4 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], -(endPoint[1] - startPoint[1]) / 8 + startPoint[1]]; let point5 = [endPoint[0], startPoint[1]]; let point6 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; let point7 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 3 / 8 + startPoint[1]]; let point8 = [(startPoint[0] + endPoint[0]) / 2, (startPoint[1] + endPoint[1]) / 2]; let point9 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 5 / 8 + startPoint[1]]; let point10 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; let point11 = [startPoint[0], endPoint[1]]; let curve1 = $this.getBezierPoints([point1, point2, point3, point4, point5]); let curve2 = $this.getBezierPoints([point6, point7, point8, point9, point10]); components = curve1.concat(curve2); components.push($this.LatlngTocartesian(point1)); components.push($this.LatlngTocartesian(point11)); return components; }, false), show: true, material: $this.Cesium.Color.YELLOW, width: 5, clampToGround: true } }); $this.entitiesCurveFlag.push(polygon2); return polygon2; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } clearPoint() { this.DrawEndEvent.raiseEvent(this.CurveFlagLast, [this.CurveFlagData[0], this.CurveFlagData[this.CurveFlagData.length - 1]], this.drawType); for (var i2 = 0; i2 < this.entitiesPoint.length; i2++) { this.viewer.entities.remove(this.entitiesPoint[i2]); } this.entitiesPoint = []; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clear() { for (var i2 = 0; i2 < this.entitiesPoint.length; i2++) { this.viewer.entities.remove(this.entitiesPoint[i2]); } for (var i2 = 0; i2 < this.entitiesCurveFlag.length; i2++) { this.viewer.entities.remove(this.entitiesCurveFlag[i2]); } this.identificationPoint = null; this.CurveFlag = null; this.CurveFlagLast = null; this.positions = []; this.entitiesPoint = []; this.entitiesCurveFlag = []; this.CurveFlagData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } getBezierPoints(points2) { let $this = this; if (points2.length <= 2) { return points2; } else { let bezierPoints = []; let n = points2.length - 1; for (let t2 = 0; t2 <= 1; t2 += 0.01) { let [x, y] = [0, 0]; for (let index2 = 0; index2 <= n; index2++) { let factor = $this.getBinomialFactor(n, index2); let a = Math.pow(t2, index2); let b = Math.pow(1 - t2, n - index2); x += factor * a * b * points2[index2][0]; y += factor * a * b * points2[index2][1]; } bezierPoints.push($this.LatlngTocartesian([x, y])); } bezierPoints.push($this.LatlngTocartesian(points2[n])); return bezierPoints; } } getBinomialFactor(n, index2) { return this.getFactorial(n) / (this.getFactorial(index2) * this.getFactorial(n - index2)); } getFactorial(n) { let result = 1; switch (n) { case n <= 1: result = 1; break; case n === 2: result = 2; break; case n === 3: result = 6; break; case n === 24: result = 24; break; case n === 5: result = 120; break; default: for (let i2 = 1; i2 <= n; i2++) { result *= i2; } break; } return result; } } class DrawRectFlag { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.identificationPoint = null; this.RectFlag = null; this.RectFlagLast = null; this.positions = []; this.entitiesPoint = []; this.entitiesRectFlag = []; this.RectFlagData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } getData() { return this.RectFlagData; } computePosition(data) { let $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } let startPoint = lnglatArr[0]; let endPoint = lnglatArr[lnglatArr.length - 1]; let point0 = lnglatArr[0]; var point1 = [endPoint[0], startPoint[1]]; var point2 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point3 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point4 = [startPoint[0], endPoint[1]]; let componentspolygon = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point3, ...point0]); let componentspolyline = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point3, ...point0, ...point4]); let PolygonHierarchy = new $this.Cesium.PolygonHierarchy(componentspolygon); $this.RectFlagData = lnglatArr; return [PolygonHierarchy, componentspolyline]; } addload(data) { var $this = this; if (data.length < 2) return; let startPoint = data[0]; let endPoint = data[data.length - 1]; let point0 = data[0]; var point1 = [endPoint[0], startPoint[1]]; var point2 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point3 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point4 = [startPoint[0], endPoint[1]]; let componentspolygon = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point3, ...point0]); let componentspolyline = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point3, ...point0, ...point4]); var shape = this.viewer.entities.add({ Type: "DrawRectFlag", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(componentspolygon), extrudedHeight: 1, material: $this.Cesium.Color.RED }, polyline: { positions: componentspolyline, show: true, material: $this.Cesium.Color.YELLOW, width: 5, clampToGround: true } }); $this.entitiesRectFlag.push(shape); return shape; } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { var cartesian = $this.getCatesian3FromPX(evt.position); if ($this.positions.length == 0) { $this.positions.push(cartesian.clone()); $this.identificationPoint = $this.createPoint(cartesian); $this.createPoint(cartesian); $this.positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if ($this.positions.length < 2) return; var cartesian = $this.getCatesian3FromPX(evt.endPosition); if (!$this.Cesium.defined($this.RectFlag)) { $this.RectFlag = $this.createRectFlag(); } $this.identificationPoint.position.setValue(cartesian); if ($this.RectFlag) { $this.positions.pop(); $this.positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { if (!$this.RectFlag) return; var cartesian = $this.getCatesian3FromPX(evt.position); $this.positions.pop(); $this.positions.push(cartesian); $this.createPoint(cartesian); $this.RectFlagData = $this.positions.concat(); $this.viewer.entities.remove($this.RectFlag); $this.RectFlag = null; $this.positions = []; $this.identificationPoint.position.setValue(cartesian); var lnglatArr = []; for (var i2 = 0; i2 < $this.RectFlagData.length; i2++) { var lnglat = $this.cartesianToLatlng($this.RectFlagData[i2]); lnglatArr.push(lnglat); } $this.RectFlagData = lnglatArr; var RectFlag = $this.addload([$this.RectFlagData[0], $this.RectFlagData[$this.RectFlagData.length - 1]]); $this.entitiesRectFlag.push(RectFlag); $this.RectFlagLast = RectFlag; $this.clearPoint(); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this.entitiesPoint.push(point2); return point2; } createRectFlag() { var $this = this; var polygon2 = this.viewer.entities.add({ polygon: { hierarchy: new $this.Cesium.CallbackProperty(function() { if ($this.positions.length < 2) return; let lonlat = []; let length = $this.positions.length; for (let i2 = 0; i2 < length; i2++) { lonlat.push($this.cartesianToLatlng($this.positions[i2])); } let startPoint = lonlat[0]; let endPoint = lonlat[lonlat.length - 1]; let point0 = lonlat[0]; var point1 = [endPoint[0], startPoint[1]]; var point2 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point3 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; [startPoint[0], endPoint[1]]; let components = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point3, ...point0]); return new $this.Cesium.PolygonHierarchy(components); }, false), extrudedHeight: 1, material: $this.Cesium.Color.RED }, polyline: { positions: new $this.Cesium.CallbackProperty(function() { if ($this.positions.length < 2) return; let lonlat = []; let length = $this.positions.length; for (let i2 = 0; i2 < length; i2++) { lonlat.push($this.cartesianToLatlng($this.positions[i2])); } let startPoint = lonlat[0]; let endPoint = lonlat[lonlat.length - 1]; let point0 = lonlat[0]; var point1 = [endPoint[0], startPoint[1]]; var point2 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point3 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point4 = [startPoint[0], endPoint[1]]; let components = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point3, ...point0, ...point4]); return components; }, false), show: true, material: $this.Cesium.Color.YELLOW, width: 5, clampToGround: true } }); $this.entitiesRectFlag.push(polygon2); return polygon2; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } clearPoint() { this.DrawEndEvent.raiseEvent(this.RectFlagLast, [this.RectFlagData[0], this.RectFlagData[this.RectFlagData.length - 1]], this.drawType); for (var i2 = 0; i2 < this.entitiesPoint.length; i2++) { this.viewer.entities.remove(this.entitiesPoint[i2]); } this.entitiesPoint = []; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clear() { for (var i2 = 0; i2 < this.entitiesPoint.length; i2++) { this.viewer.entities.remove(this.entitiesPoint[i2]); } for (var i2 = 0; i2 < this.entitiesRectFlag.length; i2++) { this.viewer.entities.remove(this.entitiesRectFlag[i2]); } this.identificationPoint = null; this.RectFlag = null; this.RectFlagLast = null; this.positions = []; this.entitiesPoint = []; this.entitiesRectFlag = []; this.RectFlagData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } } class DrawTriangleFlag { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.identificationPoint = null; this.TriangleFlag = null; this.TriangleFlagLast = null; this.positions = []; this.entitiesPoint = []; this.entitiesTriangleFlag = []; this.TriangleFlagData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } getData() { return this.TriangleFlagData; } computePosition(data) { let $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } let startPoint = lnglatArr[0]; let endPoint = lnglatArr[lnglatArr.length - 1]; let point0 = lnglatArr[0]; var point1 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point2 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point3 = [startPoint[0], endPoint[1]]; let componentspolygon = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point0]); let componentspolyline = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point0, ...point3]); let PolygonHierarchy = new $this.Cesium.PolygonHierarchy(componentspolygon); $this.TriangleFlagData = lnglatArr; return [PolygonHierarchy, componentspolyline]; } addload(data) { var $this = this; if (data.length < 2) return; let startPoint = data[0]; let endPoint = data[data.length - 1]; let point0 = data[0]; var point1 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point2 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point3 = [startPoint[0], endPoint[1]]; let componentspolygon = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point0]); let componentspolyline = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point0, ...point3]); var shape = this.viewer.entities.add({ Type: "DrawTriangleFlag", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(componentspolygon), extrudedHeight: 1, material: $this.Cesium.Color.RED }, polyline: { positions: componentspolyline, show: true, material: $this.Cesium.Color.YELLOW, width: 5, clampToGround: true } }); $this.entitiesTriangleFlag.push(shape); return shape; } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { var cartesian = $this.getCatesian3FromPX(evt.position); if ($this.positions.length == 0) { $this.positions.push(cartesian.clone()); $this.identificationPoint = $this.createPoint(cartesian); $this.createPoint(cartesian); $this.positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if ($this.positions.length < 2) return; var cartesian = $this.getCatesian3FromPX(evt.endPosition); if (!$this.Cesium.defined($this.TriangleFlag)) { $this.TriangleFlag = $this.createTriangleFlag(); } $this.identificationPoint.position.setValue(cartesian); if ($this.TriangleFlag) { $this.positions.pop(); $this.positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { if (!$this.TriangleFlag) return; var cartesian = $this.getCatesian3FromPX(evt.position); $this.positions.pop(); $this.positions.push(cartesian); $this.createPoint(cartesian); $this.TriangleFlagData = $this.positions.concat(); $this.viewer.entities.remove($this.TriangleFlag); $this.TriangleFlag = null; $this.positions = []; $this.identificationPoint.position.setValue(cartesian); var lnglatArr = []; for (var i2 = 0; i2 < $this.TriangleFlagData.length; i2++) { var lnglat = $this.cartesianToLatlng($this.TriangleFlagData[i2]); lnglatArr.push(lnglat); } $this.TriangleFlagData = lnglatArr; var TriangleFlag = $this.addload([$this.TriangleFlagData[0], $this.TriangleFlagData[$this.TriangleFlagData.length - 1]]); $this.entitiesTriangleFlag.push(TriangleFlag); $this.TriangleFlagLast = TriangleFlag; $this.clearPoint(); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this.entitiesPoint.push(point2); return point2; } createTriangleFlag() { var $this = this; var polygon2 = this.viewer.entities.add({ polygon: { hierarchy: new $this.Cesium.CallbackProperty(function() { if ($this.positions.length < 2) return; let lonlat = []; let length = $this.positions.length; for (let i2 = 0; i2 < length; i2++) { lonlat.push($this.cartesianToLatlng($this.positions[i2])); } let startPoint = lonlat[0]; let endPoint = lonlat[lonlat.length - 1]; let point0 = lonlat[0]; var point1 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point2 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; [startPoint[0], endPoint[1]]; let components = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point0]); return new $this.Cesium.PolygonHierarchy(components); }, false), extrudedHeight: 1, material: $this.Cesium.Color.RED }, polyline: { positions: new $this.Cesium.CallbackProperty(function() { if ($this.positions.length < 2) return; let lonlat = []; let length = $this.positions.length; for (let i2 = 0; i2 < length; i2++) { lonlat.push($this.cartesianToLatlng($this.positions[i2])); } let startPoint = lonlat[0]; let endPoint = lonlat[lonlat.length - 1]; let point0 = lonlat[0]; var point1 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point2 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2]; var point3 = [startPoint[0], endPoint[1]]; let components = $this.Cesium.Cartesian3.fromDegreesArray([...point0, ...point1, ...point2, ...point0, ...point3]); return components; }, false), show: true, material: $this.Cesium.Color.YELLOW, width: 5, clampToGround: true } }); $this.entitiesTriangleFlag.push(polygon2); return polygon2; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } clearPoint() { this.DrawEndEvent.raiseEvent(this.TriangleFlagLast, [this.TriangleFlagData[0], this.TriangleFlagData[this.TriangleFlagData.length - 1]], this.drawType); for (var i2 = 0; i2 < this.entitiesPoint.length; i2++) { this.viewer.entities.remove(this.entitiesPoint[i2]); } this.entitiesPoint = []; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clear() { for (var i2 = 0; i2 < this.entitiesPoint.length; i2++) { this.viewer.entities.remove(this.entitiesPoint[i2]); } for (var i2 = 0; i2 < this.entitiesTriangleFlag.length; i2++) { this.viewer.entities.remove(this.entitiesTriangleFlag[i2]); } this.identificationPoint = null; this.TriangleFlag = null; this.TriangleFlagLast = null; this.positions = []; this.entitiesPoint = []; this.entitiesTriangleFlag = []; this.TriangleFlagData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } } class DrawPoint$1 { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this._point = null; this._pointData = null; this._entities = []; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get point() { return this._point; } addload(data) { return this.createPoint(data); } getData() { return this._pointData; } computePosition(data) { let $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } $this._pointData = lnglatArr; let point2 = lnglatArr[0]; return $this.Cesium.Cartesian3.fromDegrees(point2[0], point2[1]); } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { var cartesian = $this.getCatesian3FromPX(evt.position); if (!cartesian) return; let latlon = $this.cartesianToLatlng(cartesian); var point2 = $this.createPoint(latlon); $this._pointData = cartesian; $this._point = point2; $this.DrawEndEvent.raiseEvent($this._point, latlon, $this.drawType); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ Type: "DrawPoint", Position: [cartesian], position: $this.Cesium.Cartesian3.fromDegrees(cartesian[0], cartesian[1]), id: cartesian.id || $this.objId, billboard: { image: "./static/poi2.png", verticalOrigin: Cesium.VerticalOrigin.BOTTOM } }); $this._entities.push(point2); return point2; } cartesianToLatlng(cartesian) { let ellipsoid = this.viewer.scene.globe.ellipsoid; let cartographic = ellipsoid.cartesianToCartographic(cartesian); let lat = Cesium.Math.toDegrees(cartographic.latitude); let lng = Cesium.Math.toDegrees(cartographic.longitude); return [lng, lat]; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clear() { for (var i2 = 0; i2 < this._entities.length; i2++) { this.viewer.entities.remove(this._entities[i2]); } this._entities = []; this._point = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } } class DrawPolyline { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this._polyline = null; this._polylineLast = null; this._positions = []; this._entities_point = []; this._entities_line = []; this._polylineData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get line() { return this._polylineLast; } getData() { return this._polylineData; } computePosition(data) { let $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } $this._polylineData = lnglatArr; return data; } addload(data) { var $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.LatlngTocartesian(data[i2]); lnglatArr.push(lnglat); } var polyline = this.viewer.entities.add({ Type: "DrawPolyline", Position: data, id: data.id || $this.objId, polyline: { positions: lnglatArr, show: true, material: $this.Cesium.Color.RED, width: 3, clampToGround: true } }); return polyline; } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { var cartesian = $this.getCatesian3FromPX(evt.position); if ($this._positions.length == 0) { $this._positions.push(cartesian.clone()); } $this._positions.push(cartesian); $this.createPoint(cartesian); }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if ($this._positions.length < 1) return; var cartesian = $this.getCatesian3FromPX(evt.endPosition); if (!$this.Cesium.defined($this._polyline)) { $this._polyline = $this.createPolyline(); } if ($this._polyline) { $this._positions.pop(); $this._positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { if (!$this._polyline) return; var cartesian = $this.getCatesian3FromPX(evt.position); $this._positions.pop(); $this.createPoint(cartesian); $this._polylineData = $this._positions.concat(); $this.viewer.entities.remove($this._polyline); $this._polyline = null; $this._positions = []; var lnglatArr = []; for (var i2 = 0; i2 < $this._polylineData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._polylineData[i2]); lnglatArr.push(lnglat); } $this._polylineData = lnglatArr; var line = $this.addload($this._polylineData); $this._entities_line.push(line); $this._polylineLast = line; $this.clearPoint(); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } createPolyline() { var $this = this; var polyline = this.viewer.entities.add({ polyline: { positions: new $this.Cesium.CallbackProperty(function() { return $this._positions; }, false), show: true, material: $this.Cesium.Color.RED, width: 3, clampToGround: true } }); $this._entities_line.push(polyline); return polyline; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } clearPoint() { this.DrawEndEvent.raiseEvent(this._polylineLast, this._polylineData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_line.length; i2++) { this.viewer.entities.remove(this._entities_line[i2]); } this._polyline = null; this._positions = []; this._entities_point = []; this._entities_line = []; this._polylineData = null; this._polylineLast = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } } class DrawPolygon { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this._polygon = null; this._polygonLast = null; this._positions = []; this._entities_point = []; this._entities_polygon = []; this._polygonData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get polygon() { return this._polygonLast; } getData() { return this._polygonData; } computePosition(data) { let $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } $this._polygonData = lnglatArr; return new $this.Cesium.PolygonHierarchy(data); } addload(data) { var $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.LatlngTocartesian(data[i2]); lnglatArr.push(lnglat); } return this.viewer.entities.add({ Type: "DrawPolygon", Position: data, id: data.id || $this.objId, polygon: { hierarchy: new $this.Cesium.PolygonHierarchy(lnglatArr), clampToGround: true, show: true, fill: true, material: $this.Cesium.Color.RED.withAlpha(0.9), width: 3, outlineColor: $this.Cesium.Color.BLACK, outlineWidth: 1, outline: false } }); } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { var cartesian = $this.getCatesian3FromPX(evt.position); if ($this._positions.length == 0) { $this._positions.push(cartesian.clone()); } $this.createPoint(cartesian); $this._positions.push(cartesian); }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if ($this._positions.length < 1) return; var cartesian = $this.getCatesian3FromPX(evt.endPosition); if ($this._positions.length == 3) { if (!$this.Cesium.defined($this._polygon)) { $this._polygon = $this.createPolygon(); } } $this._positions.pop(); $this._positions.push(cartesian); }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { if (!$this._polygon) return; var cartesian = $this.getCatesian3FromPX(evt.position); $this._positions.pop(); $this.createPoint(cartesian); $this._polygonData = $this._positions.concat(); $this.viewer.entities.remove($this._positions); $this._positions = null; $this._positions = []; var lnglatArr = []; for (var i2 = 0; i2 < $this._polygonData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._polygonData[i2]); lnglatArr.push(lnglat); } $this._polygonData = lnglatArr; var Polygon = $this.addload($this._polygonData); $this._entities_polygon.push(Polygon); $this._polygonLast = Polygon; $this.clearPoint(); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createPolygon() { var $this = this; var polygon2 = this.viewer.entities.add({ polygon: { hierarchy: new $this.Cesium.CallbackProperty(function() { return new $this.Cesium.PolygonHierarchy($this._positions); }, false), clampToGround: true, show: true, fill: true, material: $this.Cesium.Color.RED.withAlpha(0.5), width: 3, outlineColor: $this.Cesium.Color.BLACK, outlineWidth: 1, outline: false } }); $this._entities_polygon.push(polygon2); return polygon2; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } clearPoint() { this.DrawEndEvent.raiseEvent(this._polygonLast, this._polygonData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_polygon.length; i2++) { this.viewer.entities.remove(this._entities_polygon[i2]); } this._polygon = null; this._polygonLast = null; this._positions = []; this._entities_point = []; this._entities_polygon = []; this._polygonData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } } class DrawRectangle { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this.floatingPoint = null; this._rectangle = null; this._rectangleLast = null; this._positions = []; this._entities_point = []; this._entities_rectangle = []; this._rectangleData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get line() { return this._rectangleLast; } getData() { return this._rectangleData; } computePosition(data) { let $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } $this._rectangleData = lnglatArr; return new $this.Cesium.Rectangle.fromCartesianArray(data); } addload(data) { var $this = this; var lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = $this.LatlngTocartesian(data[i2]); lnglatArr.push(lnglat); } var shape = this.viewer.entities.add({ Type: "DrawRectangle", Position: data, id: data.id || $this.objId, rectangle: { coordinates: $this.Cesium.Rectangle.fromCartesianArray(lnglatArr), material: $this.Cesium.Color.RED.withAlpha(0.9) } }); $this._entities_rectangle.push(shape); return shape; } startCreate(drawType) { this.drawType = drawType; var $this = this; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.handler.setInputAction(function(evt) { var cartesian = $this.getCatesian3FromPX(evt.position); if ($this._positions.length == 0) { $this._positions.push(cartesian.clone()); $this.floatingPoint = $this.createPoint(cartesian); $this.createPoint(cartesian); $this._positions.push(cartesian); } if ($this._positions.length == 2) { $this._positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if ($this._positions.length < 3) return; var cartesian = $this.getCatesian3FromPX(evt.endPosition); if (!$this.Cesium.defined($this._rectangle)) { $this._rectangle = $this.createRectangle(); } $this.floatingPoint.position.setValue(cartesian); if ($this._rectangle) { $this._positions.pop(); $this._positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { if (!$this._rectangle) return; var cartesian = $this.getCatesian3FromPX(evt.position); $this._positions.pop(); $this._positions.push(cartesian); $this.createPoint(cartesian); $this._rectangleData = $this._positions.concat(); $this.viewer.entities.remove($this._rectangle); $this._rectangle = null; $this._positions = []; $this.floatingPoint.position.setValue(cartesian); var lnglatArr = []; for (var i2 = 0; i2 < $this._rectangleData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._rectangleData[i2]); lnglatArr.push(lnglat); } $this._rectangleData = lnglatArr; var rectangle = $this.addload([$this._rectangleData[0], $this._rectangleData[$this._rectangleData.length - 1]]); $this._entities_rectangle.push(rectangle); $this._rectangleLast = rectangle; $this.clearPoint(); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } createRectangle() { var $this = this; var shape = this.viewer.entities.add({ name: "rectangle", rectangle: { coordinates: new $this.Cesium.CallbackProperty(function() { var obj = $this.Cesium.Rectangle.fromCartesianArray($this._positions); return obj; }, false), material: $this.Cesium.Color.RED.withAlpha(0.5) } }); $this._entities_rectangle.push(shape); return shape; } cartesianToLatlng(cartesian) { var latlng = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); var lat = this.Cesium.Math.toDegrees(latlng.latitude); var lng = this.Cesium.Math.toDegrees(latlng.longitude); return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } clearPoint() { this.DrawEndEvent.raiseEvent(this._rectangleLast, [this._rectangleData[0], this._rectangleData[this._rectangleData.length - 1]], this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_rectangle.length; i2++) { this.viewer.entities.remove(this._entities_rectangle[i2]); } this.floatingPoint = null; this._rectangle = null; this._rectangleLast = null; this._positions = []; this._entities_point = []; this._entities_rectangle = []; this._rectangleData = null; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } } class DrawCircle { constructor(arg) { this.viewer = arg.viewer; this.Cesium = arg.Cesium; this._cicle = null; this.floatingPoint = null; this._cicleLast = null; this._positions = []; this._entities_point = []; this._entities_cicle = []; this._cicleData = null; this.DrawStartEvent = new Cesium.Event(); this.DrawEndEvent = new Cesium.Event(); this._param = { id: "DrawStraightArrow", polygonColor: "rgba(0,255,0,0.5)", outlineColor: "rgba(255, 255, 255, 1)", outlineWidth: 1 }; this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor); this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor); } get cicle() { return this._cicleLast; } addload(data) { var that = this; let lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = that.LatlngTocartesian(data[i2]); lnglatArr.push(lnglat); } var value = lnglatArr; var r2 = Math.sqrt( Math.pow(value[0].x - value[value.length - 1].x, 2) + Math.pow(value[0].y - value[value.length - 1].y, 2) ); var position2 = value[0]; var shape = that.viewer.entities.add({ Type: "DrawCircle", Position: [data[0], data[data.length - 1]], position: position2, id: data.id || that.objId, ellipse: { semiMinorAxis: r2, semiMajorAxis: r2, material: that.Cesium.Color.RED.withAlpha(0.9), show: true, clampToGround: true } }); return shape; } getData() { return this._cicleData; } computePosition(data) { var that = this; let lnglatArr = []; for (var i2 = 0; i2 < data.length; i2++) { var lnglat = that.cartesianToLatlng(data[i2]); lnglatArr.push(lnglat); } that._cicleData = lnglatArr; var value = data; var r2 = Math.sqrt( Math.pow(value[0].x - value[value.length - 1].x, 2) + Math.pow(value[0].y - value[value.length - 1].y, 2) ); var position2 = value[0]; return { position: position2, r: r2 }; } startCreate(drawType) { this.drawType = drawType; this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.viewer.scene.globe.depthTestAgainstTerrain = true; var $this = this; this.handler.setInputAction(function(evt) { $this.viewer.scene.globe.depthTestAgainstTerrain = true; var cartesian = $this.getCatesian3FromPX(evt.position); if ($this._positions.length == 0) { $this._positions.push(cartesian.clone()); $this.floatingPoint = $this.createPoint(cartesian); $this._positions.push(cartesian); } if (!$this._cicle) { $this.createPoint(cartesian); } }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK); this.handler.setInputAction(function(evt) { if ($this._positions.length < 1) return; var cartesian = $this.viewer.scene.pickPosition(evt.endPosition); if (!$this.Cesium.defined($this._cicle)) { $this._cicle = $this.createCicle(); } $this.floatingPoint.position.setValue(cartesian); if ($this._cicle) { $this._positions.pop(); $this._positions.push(cartesian); } }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE); this.handler.setInputAction(function(evt) { if (!$this._cicle) return; $this.viewer.scene.globe.depthTestAgainstTerrain = false; var cartesian = $this.viewer.scene.pickPosition(evt.position); $this._positions.pop(); $this._positions.push(cartesian); $this._cicleData = $this._positions.concat(); $this.viewer.entities.remove($this._cicle); $this._cicle = null; $this._positions = []; $this.floatingPoint.position.setValue(cartesian); let lnglatArr = []; for (var i2 = 0; i2 < $this._cicleData.length; i2++) { var lnglat = $this.cartesianToLatlng($this._cicleData[i2]); lnglatArr.push(lnglat); } $this._cicleData = lnglatArr; var cicle = $this.addload($this._cicleData); $this._entities_cicle.push(cicle); $this._cicleLast = cicle; $this.clearPoint(); $this.destroy(); }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK); } createCicle() { var that = this; var shape = this.viewer.entities.add({ position: that._positions[0], ellipse: { semiMinorAxis: new that.Cesium.CallbackProperty(function() { var r2 = Math.sqrt( Math.pow(that._positions[0].x - that._positions[that._positions.length - 1].x, 2) + Math.pow(that._positions[0].y - that._positions[that._positions.length - 1].y, 2) ); return r2 ? r2 : r2 + 1; }, false), semiMajorAxis: new that.Cesium.CallbackProperty(function() { var r2 = Math.sqrt( Math.pow(that._positions[0].x - that._positions[that._positions.length - 1].x, 2) + Math.pow(that._positions[0].y - that._positions[that._positions.length - 1].y, 2) ); return r2 ? r2 : r2 + 1; }, false), material: that.Cesium.Color.RED.withAlpha(0.5), outline: true } }); that._entities_cicle.push(shape); return shape; } createPoint(cartesian) { var $this = this; var point2 = this.viewer.entities.add({ position: cartesian, point: { pixelSize: 10, color: $this.Cesium.Color.RED, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); $this._entities_point.push(point2); return point2; } getCatesian3FromPX(px) { var cartesian; var ray = this.viewer.camera.getPickRay(px); if (!ray) return null; cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); return cartesian; } cartesianToLatlng(cartesian) { let cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); let lat = this.Cesium.Math.toDegrees(cartographic.latitude); let lng = this.Cesium.Math.toDegrees(cartographic.longitude); cartographic.height; return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = this.Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1], 0); return cartesian3; } destroy() { if (this.handler) { this.handler.destroy(); this.handler = null; } } clearPoint() { this.DrawEndEvent.raiseEvent(this._cicleLast, this._cicleData, this.drawType); for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } this._entities_point = []; } clear() { for (var i2 = 0; i2 < this._entities_point.length; i2++) { this.viewer.entities.remove(this._entities_point[i2]); } for (var i2 = 0; i2 < this._entities_cicle.length; i2++) { this.viewer.entities.remove(this._entities_cicle[i2]); } this._cicle = null; this.floatingPoint = null; this._cicleLast = null; this._positions = []; this._entities_point = []; this._entities_cicle = []; this._cicleData = null; } } let MilitaryPlot = { DrawStraightArrow, DrawAttackArrow, DrawPincerArrow, DrawGatheringPlace, DrawClosedCurve, DrawSector, DrawBowLine, DrawBowPlane, DrawCurve, DrawCurveFlag, DrawRectFlag, DrawTriangleFlag, DrawPoint: DrawPoint$1, DrawPolyline, DrawPolygon, DrawRectangle, DrawCircle }; class EntityEdit { constructor(viewer2) { this.viewer = viewer2; this.DrawExample = ""; this.midVertexEntities = []; this.initEventHandler(); } initEventHandler() { this.eventHandler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas); this.EditEndEvent = new Cesium.Event(); this.EditEndEntity = new Cesium.Event(); } activate() { this.deactivate(); this.initLeftClickEventHandler(); } deactivate() { this.DrawExample = ""; this.eventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); this.unRegisterEvents(); this.clearAllEditVertex(); } clearAllEditVertex() { this.clearEditVertex(); this.clearMidVertex(); } initLeftClickEventHandler() { this.eventHandler.setInputAction((e) => { let id = this.viewer.scene.pick(e.position); if (!id || !id.id) { this.handleEditEntity(); return; } if (!id.id || !id.id.Type) return; if (this.editEntity && this.editEntity.id == id.id.id) return; this.handleEditEntity(); this.handlePickEditEntity(id.id); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); } handleEditEntity() { this.unRegisterEvents(); this.clearAllEditVertex(); let editEntity = this.editEntity; if (!editEntity) return; this.closeEntityEditMode(); this.editEntity = void 0; if (!this.isEdited) return; this.EditEndEvent.raiseEvent(editEntity); this.isEdited = false; this.isEditing = false; } handlePickEditEntity(pickId) { const EditableTypes = ["DrawAttackArrow", "DrawCircle", "DrawCurve", "DrawPincerArrow", "DrawPoint", "DrawPolygon", "DrawPolyline", "DrawRectangle", "DrawStraightArrow", "DrawGatheringPlace", "DrawSector", "DrawClosedCurve", "DrawBowLine", "DrawBowPlane", "DrawRectFlag", "DrawTriangleFlag", "DrawCurveFlag"]; if (EditableTypes.indexOf(pickId.Type) == -1) return; this.editEntity = pickId; this.EditEndEntity.raiseEvent(this.editEntity); this.isEditing = false; this.isEdited = false; this.editPositions = this.getEditEntityPositions(); this.EditMoveCenterPositoin = this.getCenterPosition(); this.openEntityEditModel(); this.clearAllEditVertex(); this.unRegisterEvents(); this.createEditVertex(); this.createMidVertex(); this.registerEvents(); } openEntityEditModel() { if (this.DrawExample == "") return; switch (this.editEntity.Type) { case "DrawStraightArrow": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawAttackArrow": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawPincerArrow": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawGatheringPlace": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawClosedCurve": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions).PolygonHierarchy; }, false); this.editEntity.polyline.positions = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions).pList; }, false); break; case "DrawCircle": this.editEntity.position = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions).position; }, false); this.editEntity.ellipse.semiMinorAxis = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions).r; }, false); this.editEntity.ellipse.semiMajorAxis = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions).r; }, false); break; case "DrawCurve": this.editEntity.polyline.positions = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawPoint": this.editEntity.position = new Cesium.CallbackProperty((e) => { return this.editPositions[0]; }, false); break; case "DrawPolygon": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawPolyline": this.editEntity.polyline.positions = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawRectangle": this.editEntity.rectangle.coordinates = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawSector": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawBowLine": this.editEntity.polyline.positions = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawBowPlane": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions); }, false); break; case "DrawRectFlag": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions)[0]; }, false); this.editEntity.polyline.positions = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions)[1]; }, false); break; case "DrawTriangleFlag": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions)[0]; }, false); this.editEntity.polyline.positions = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions)[1]; }, false); break; case "DrawCurveFlag": this.editEntity.polygon.hierarchy = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions)[0]; }, false); this.editEntity.polyline.positions = new Cesium.CallbackProperty((e) => { return this.DrawExample.computePosition(this.editPositions)[1]; }, false); break; } } closeEntityEditMode() { if (this.DrawExample == "") return; let position2 = ""; switch (this.editEntity.Type) { case "DrawStraightArrow": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawAttackArrow": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawPincerArrow": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawGatheringPlace": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawClosedCurve": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2.PolygonHierarchy; this.editEntity.polyline.positions = position2.pList; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawCircle": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.position = position2.position; this.editEntity.ellipse.semiMinorAxis = position2.r; this.editEntity.ellipse.semiMajorAxis = position2.r; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawCurve": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polyline.positions = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawPoint": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.position = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawPolygon": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawPolyline": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polyline.positions = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawRectangle": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.rectangle.coordinates = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawSector": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawBowLine": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polyline.positions = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawBowPlane": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawRectFlag": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2[0]; this.editEntity.polyline.positions = position2[1]; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawTriangleFlag": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2[0]; this.editEntity.polyline.positions = position2[1]; this.editEntity.Position = this.DrawExample.getData(); break; case "DrawCurveFlag": position2 = this.DrawExample.computePosition(this.editPositions); this.editEntity.polygon.hierarchy = position2[0]; this.editEntity.polyline.positions = position2[1]; this.editEntity.Position = this.DrawExample.getData(); break; } } getEditEntityPositions() { let position2 = this.editEntity.Position; let positionArr = []; switch (this.editEntity.Type) { case "DrawAttackArrow": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawCircle": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawCurve": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawPincerArrow": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawPoint": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawPolygon": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawPolyline": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawRectangle": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawStraightArrow": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawGatheringPlace": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawSector": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawClosedCurve": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawBowLine": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawBowPlane": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawRectFlag": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawTriangleFlag": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; case "DrawCurveFlag": for (let i2 = 0; i2 < position2.length; i2++) { positionArr.push(this.LatlngTocartesian(position2[i2])); } return positionArr; } } registerEvents() { this.initLeftDownEventHandler(); this.initMouseMoveEventHandler(); this.initLeftUpEventHandler(); } unRegisterEvents() { this.eventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN); this.eventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP); this.eventHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE); } initLeftDownEventHandler() { this.eventHandler.setInputAction((e) => { let id = this.viewer.scene.pick(e.position); if (!id || !id.id || !id.id.type) return; if (id.id.type == "EditVertex" || id.id.type == "EditMove") { this.isEditing = true; this.viewer.scene.screenSpaceCameraController.enableRotate = false; this.viewer.enableCursorStyle = false; this.viewer._element.style.cursor = ""; document.body.style.cursor = "move"; this.editVertext = id.id; this.editVertext.show = false; this.clearMidVertex(); } else if (id.id.type == "EditMidVertex") { this.editPositions.splice(id.id.vertexIndex, 0, id.id.position._value); this.clearAllEditVertex(); this.createEditVertex(); this.createMidVertex(); this.isEdited = true; } else { return; } }, Cesium.ScreenSpaceEventType.LEFT_DOWN); } initLeftUpEventHandler() { this.eventHandler.setInputAction((e) => { if (!this.isEditing) return; this.viewer.enableCursorStyle = true; document.body.style.cursor = "default"; this.viewer.scene.screenSpaceCameraController.enableRotate = true; this.editVertext.show = true; this.isEditing = false; this.clearMidVertex(); this.createMidVertex(); }, Cesium.ScreenSpaceEventType.LEFT_UP); } initMouseMoveEventHandler() { this.eventHandler.setInputAction((e) => { var position2 = e.endPosition; var ray = this.viewer.scene.camera.getPickRay(position2); var cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene); if (!cartesian) return; if (!this.isEditing) return; if (this.editVertext.type == "EditMove") { let startPosition = this.EditMoveCenterPositoin; if (!startPosition) return; this.moveEntityByOffset(startPosition, cartesian); } else if (this.editVertext.type == "EditVertex" || this.editVertext.type == "EditMidVertex") { this.editPositions[this.editVertext.vertexIndex] = cartesian; } this.isEdited = true; this.EditMoveCenterPositoin = this.getCenterPosition(); }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); } getCenterPosition() { let points2 = []; let maxHeight = 0; if (this.editEntity.Type == "DrawCircle" || this.editEntity.Type == "DrawPoint" || this.editEntity.Type == "DrawSector") { return this.editPositions[0]; } this.editPositions.forEach((position2) => { const point3d = this.cartesian3ToPoint3D(position2); points2.push([point3d.x, point3d.y]); if (maxHeight < point3d.z) maxHeight = point3d.z; }); let geo = lineString(points2); let bbox2 = bbox$1(geo); let bboxPolygon$1 = bboxPolygon(bbox2); let pointOnFeature = center(bboxPolygon$1); let lonLat = pointOnFeature.geometry.coordinates; return Cesium.Cartesian3.fromDegrees(lonLat[0], lonLat[1], maxHeight); } moveEntityByOffset(startPosition, endPosition) { let startPoint3d = this.cartesian3ToPoint3D(startPosition); let endPoint3d = this.cartesian3ToPoint3D(endPosition); let offsetX = endPoint3d.x - startPoint3d.x; let offsetY = endPoint3d.y - startPoint3d.y; let element; for (let i2 = 0; i2 < this.editPositions.length; i2++) { element = this.cartesian3ToPoint3D(this.editPositions[i2]); element.x += offsetX; element.y += offsetY; this.editPositions[i2] = Cesium.Cartesian3.fromDegrees(element.x, element.y, element.z); } } createEditVertex() { this.vertexEntities = []; this.editPositions.forEach((p, index2) => { const entity = this.viewer.entities.add({ position: new Cesium.CallbackProperty((e) => { return this.editPositions[index2]; }, false), type: "EditVertex", vertexIndex: index2, point: { show: true, pixelSize: 10, color: new Cesium.Color(0, 0, 1, 1), outlineWidth: 1, outlineColor: new Cesium.Color(1, 1, 1, 1), disableDepthTestDistance: 15e11, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); this.vertexEntities.push(entity); }); if (this.editEntity.Type == "DrawCircle") { this.vertexEntities[0].show = false; } if (this.editPositions.length == 1) { return; } this.createEditMoveCenterEntity(); } createEditMoveCenterEntity() { this.EditMoveCenterEntity = this.viewer.entities.add({ position: new Cesium.CallbackProperty((e) => { return this.EditMoveCenterPositoin; }, false), type: "EditMove", point: { show: true, pixelSize: 12, color: new Cesium.Color(0, 1, 0, 0.1), outlineWidth: 2, outlineColor: new Cesium.Color(1, 1, 1, 1), disableDepthTestDistance: 15e11, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); } clearEditVertex() { if (this.vertexEntities) { this.vertexEntities.forEach((item) => { this.viewer.entities.remove(item); }); } this.vertexEntities = []; this.viewer.entities.remove(this.EditMoveCenterEntity); } createMidVertex() { if (this.editEntity.Type == "DrawCircle" || this.editEntity.Type == "DrawPincerArrow" || this.editEntity.Type == "DrawRectangle" || this.editEntity.Type == "DrawStraightArrow" || this.editEntity.Type == "DrawGatheringPlace" || this.editEntity.Type == "DrawSector" || this.editEntity.Type == "DrawBowLine" || this.editEntity.Type == "DrawBowPlane" || this.editEntity.Type == "DrawRectFlag" || this.editEntity.Type == "DrawTriangleFlag" || this.editEntity.Type == "DrawCurveFlag") { return; } this.midVertexEntities = []; for (let i2 = 0; i2 < this.editPositions.length; i2++) { const p1 = this.editPositions[i2]; const p2 = this.editPositions[i2 + 1]; let mideP = this.midPosition(p1, p2); const entity = this.viewer.entities.add({ position: mideP, type: "EditMidVertex", vertexIndex: i2 + 1, point: { show: true, pixelSize: 10, color: new Cesium.Color(0, 1, 0, 1), outlineWidth: 1, outlineColor: new Cesium.Color(1, 1, 1, 1), disableDepthTestDistance: 15e11, heightReference: Cesium.HeightReference.CLAMP_TO_GROUND } }); this.midVertexEntities.push(entity); } } clearMidVertex() { if (this.midVertexEntities) { this.midVertexEntities.forEach((item) => { this.viewer.entities.remove(item); }); } this.midVertexEntities = []; } cartesian3ToPoint3D(position2) { const cartographic = Cesium.Cartographic.fromCartesian(position2); const lon = Cesium.Math.toDegrees(cartographic.longitude); const lat = Cesium.Math.toDegrees(cartographic.latitude); return { x: lon, y: lat, z: cartographic.height }; } midPosition(first, second) { if (!first || !second) return null; let point3d1 = this.cartesian3ToPoint3D(first); let point3d2 = this.cartesian3ToPoint3D(second); let midLonLat = { x: (point3d1.x + point3d2.x) / 2, y: (point3d1.y + point3d2.y) / 2, z: (point3d1.z + point3d2.z) / 2 }; return Cesium.Cartesian3.fromDegrees(midLonLat.x, midLonLat.y, midLonLat.z); } cartesianToLatlng(cartesian) { let cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian); let lat = new Cesium.Math.toDegrees(cartographic.latitude); let lng = new Cesium.Math.toDegrees(cartographic.longitude); cartographic.height; return [lng, lat]; } LatlngTocartesian(latlng) { let cartesian3 = new Cesium.Cartesian3.fromDegrees(latlng[0], latlng[1]); return cartesian3; } } var _style_0$1 = `@charset "UTF-8";:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","\\5fae\\8f6f\\96c5\\9ed1",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .32, 1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px}:root{color-scheme:light;--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0, 0, 0, .04),0px 8px 20px rgba(0, 0, 0, .08);--el-box-shadow-light:0px 0px 12px rgba(0, 0, 0, .12);--el-box-shadow-lighter:0px 0px 6px rgba(0, 0, 0, .12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0, 0, 0, .08),0px 12px 32px rgba(0, 0, 0, .12),0px 8px 16px -8px rgba(0, 0, 0, .16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0, 0, 0, .8);--el-overlay-color-light:rgba(0, 0, 0, .7);--el-overlay-color-lighter:rgba(0, 0, 0, .5);--el-mask-color:rgba(255, 255, 255, .9);--el-mask-color-extra-light:rgba(255, 255, 255, .3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center top}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center bottom}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transition:var(--el-transition-md-fade);transform-origin:top left}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;height:1em;width:1em;line-height:1em;display:inline-flex;justify-content:center;align-items:center;position:relative;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}.el-affix--fixed{position:fixed}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:13px;--el-alert-description-font-size:12px;--el-alert-close-font-size:12px;--el-alert-close-customed-font-size:13px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;width:100%;padding:var(--el-alert-padding);margin:0;box-sizing:border-box;border-radius:var(--el-alert-border-radius-base);position:relative;background-color:var(--el-color-white);overflow:hidden;opacity:1;display:flex;align-items:center;transition:opacity var(--el-transition-duration-fast)}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-success)}.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-info)}.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-warning)}.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-error)}.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:table-cell;padding:0 8px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:18px;vertical-align:text-top}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:5px 0 0}.el-alert .el-alert__close-btn{font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert .el-alert__close-btn.is-customed{font-style:normal;font-size:var(--el-alert-close-customed-font-size);top:9px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{overflow:auto;box-sizing:border-box;flex-shrink:0;width:var(--el-aside-width,300px)}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-autocomplete__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-autocomplete__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);list-style:none;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li:hover,.el-autocomplete-suggestion li.highlighted{background-color:var(--el-fill-color-light)}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid var(--el-color-black)}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:var(--el-text-color-secondary)}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size-small:24px;--el-avatar-size:40px;display:inline-flex;justify-content:center;align-items:center;box-sizing:border-box;text-align:center;overflow:hidden;color:var(--el-avatar-text-color);background:var(--el-avatar-bg-color);width:var(--el-avatar-size);height:var(--el-avatar-size);font-size:var(--el-avatar-text-size)}.el-avatar>img{display:block;height:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.el-backtop{--el-backtop-bg-color:var(--el-bg-color-overlay);--el-backtop-text-color:var(--el-color-primary);--el-backtop-hover-bg-color:var(--el-border-color-extra-light);position:fixed;background-color:var(--el-backtop-bg-color);width:40px;height:40px;border-radius:50%;color:var(--el-backtop-text-color);display:flex;align-items:center;justify-content:center;font-size:20px;box-shadow:var(--el-box-shadow-lighter);cursor:pointer;z-index:5}.el-backtop:hover{background-color:var(--el-backtop-hover-bg-color)}.el-backtop__icon{font-size:20px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;position:relative;vertical-align:middle;display:inline-block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;justify-content:center;align-items:center;font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color)}.el-badge__content.is-fixed{position:absolute;top:0;right:calc(1px + var(--el-badge-size)/ 2);transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:var(--el-text-color-placeholder)}.el-breadcrumb__separator.el-icon{margin:0 6px;font-weight:400}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{float:left;display:inline-flex;align-items:center}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;transition:var(--el-transition-color);color:var(--el-text-color-primary)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:var(--el-text-color-regular);cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:rgba(255, 255, 255, .5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-color-info);--el-button-active-color:var(--el-text-color-primary)}.el-button{display:inline-flex;justify-content:center;align-items:center;line-height:1;height:32px;white-space:nowrap;cursor:pointer;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;outline:0;transition:.1s;font-weight:var(--el-button-font-weight);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);padding:8px 15px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button:focus,.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:0}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:0}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px}.el-button>span{display:inline-flex;align-items:center}.el-button+.el-button{margin-left:12px}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:var(--el-mask-color-extra-light)}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{border-radius:50%;padding:8px}.el-button.is-text{color:var(--el-button-text-color);border:0 solid transparent;background-color:transparent}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important}.el-button.is-text:not(.is-disabled):focus,.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:focus,.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{border-color:transparent;color:var(--el-button-text-color);background:0 0;padding:2px;height:auto}.el-button.is-link:focus,.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button.is-link:not(.is-disabled):focus,.el-button.is-link:not(.is-disabled):hover{border-color:transparent;background-color:transparent}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);border-color:transparent;background-color:transparent}.el-button--text{border-color:transparent;background:0 0;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button--text:not(.is-disabled):focus,.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);border-color:transparent;background-color:transparent}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);border-color:transparent;background-color:transparent}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-link,.el-button--primary.is-plain,.el-button--primary.is-text{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:active,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:hover{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-link,.el-button--success.is-plain,.el-button--success.is-text{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:active,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:active,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:hover{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-link,.el-button--warning.is-plain,.el-button--warning.is-text{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:active,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:hover{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-link,.el-button--danger.is-plain,.el-button--danger.is-text{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:active,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:hover{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-link,.el-button--info.is-plain,.el-button--info.is-text{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:active,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:active,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:hover{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--large{--el-button-size:40px;height:var(--el-button-size);padding:12px 19px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.el-button--small{--el-button-size:24px;height:var(--el-button-size);padding:5px 11px;font-size:12px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.el-calendar{--el-calendar-border:var(--el-table-border, 1px solid var(--el-border-color-lighter));--el-calendar-header-border-bottom:var(--el-calendar-border);--el-calendar-selected-bg-color:var(--el-color-primary-light-9);--el-calendar-cell-width:85px;background-color:var(--el-fill-color-blank)}.el-calendar__header{display:flex;justify-content:space-between;padding:12px 20px;border-bottom:var(--el-calendar-header-border-bottom)}.el-calendar__title{color:var(--el-text-color);align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:var(--el-text-color-regular);font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);vertical-align:top;transition:background-color var(--el-transition-duration-fast) ease}.el-calendar-table td.is-selected{background-color:var(--el-calendar-selected-bg-color)}.el-calendar-table td.is-today{color:var(--el-color-primary)}.el-calendar-table tr:first-child td{border-top:var(--el-calendar-border)}.el-calendar-table tr td:first-child{border-left:var(--el-calendar-border)}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;padding:8px;height:var(--el-calendar-cell-width)}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:var(--el-calendar-selected-bg-color)}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank)}.el-card{border-radius:var(--el-card-border-radius);border:1px solid var(--el-card-border-color);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration)}.el-card.is-always-shadow{box-shadow:var(--el-box-shadow-light)}.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding);border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box}.el-card__body{padding:var(--el-card-padding)}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%;transition:transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:calc(var(--el-index-normal) + 1)}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:var(--el-color-white);opacity:.24;transition:var(--el-transition-duration-fast)}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:rgba(31, 45, 61, .11);--el-carousel-arrow-hover-background:rgba(31, 45, 61, .23);--el-carousel-indicator-width:30px;--el-carousel-indicator-height:2px;--el-carousel-indicator-padding-horizontal:4px;--el-carousel-indicator-padding-vertical:12px;--el-carousel-indicator-out-color:var(--el-border-color-hover);position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:var(--el-carousel-arrow-size);width:var(--el-carousel-arrow-size);cursor:pointer;transition:var(--el-transition-duration);border-radius:50%;background-color:var(--el-carousel-arrow-background);color:#fff;position:absolute;top:50%;z-index:10;transform:translateY(-50%);text-align:center;font-size:var(--el-carousel-arrow-font-size);display:inline-flex;justify-content:center;align-items:center}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:var(--el-carousel-arrow-hover-background)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:calc(var(--el-index-normal) + 1)}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translate(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:calc(var(--el-carousel-indicator-height) + var(--el-carousel-indicator-padding-vertical) * 2);text-align:center;position:static;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:var(--el-carousel-indicator-out-color);opacity:.24}.el-carousel__indicators--labels{left:0;right:0;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px;color:#000}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal)}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{width:var(--el-carousel-indicator-height);height:calc(var(--el-carousel-indicator-width)/ 2)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:var(--el-carousel-indicator-width);height:var(--el-carousel-indicator-height);background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;transition:var(--el-transition-duration)}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{transform:translateY(-50%) translate(-10px);opacity:0}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{transform:translateY(-50%) translate(10px);opacity:0}.el-cascader-panel{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color)}.el-cascader-panel{display:flex;border-radius:var(--el-cascader-menu-radius);font-size:var(--el-cascader-menu-font-size)}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{min-width:180px;box-sizing:border-box;color:var(--el-cascader-menu-text-color);border-right:var(--el-cascader-menu-border)}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap.el-scrollbar__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;align-items:center;color:var(--el-cascader-color-empty)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{position:relative;display:flex;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:var(--el-cascader-menu-text-color)}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:var(--el-cascader-node-background-hover)}.el-cascader-node.is-disabled{color:var(--el-cascader-node-color-disabled);cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{flex:1;text-align:left;padding:0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-checkbox{margin-right:0}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);display:inline-block;vertical-align:middle;position:relative;font-size:var(--el-font-size-base);line-height:32px;outline:0}.el-cascader:not(.is-disabled):hover .el-input__wrapper{cursor:pointer;box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-cascader .el-input{display:flex;cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis;cursor:pointer}.el-cascader .el-input .el-input__suffix-inner .el-icon{height:calc(100% - 2px)}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{transition:transform var(--el-transition-duration);font-size:14px}.el-cascader .el-input .icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .icon-circle-close:hover{color:var(--el-input-clear-hover-color,var(--el-text-color-secondary))}.el-cascader .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-cascader--large{font-size:14px;line-height:40px}.el-cascader--small{font-size:12px;line-height:24px}.el-cascader.is-disabled .el-cascader__label{z-index:calc(var(--el-index-normal) + 1);color:var(--el-disabled-text-color)}.el-cascader__dropdown{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color)}.el-cascader__dropdown{font-size:var(--el-cascader-menu-font-size);border-radius:var(--el-cascader-menu-radius)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill);border:var(--el-cascader-menu-border);box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__dropdown.el-popper .el-popper__arrow:before{border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;transform:translateY(-50%);display:flex;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:inline-flex;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:var(--el-cascader-tag-background)}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{flex:none;background-color:var(--el-text-color-placeholder);color:var(--el-color-white)}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__collapse-tags{white-space:normal;z-index:var(--el-index-normal)}.el-cascader__collapse-tags .el-tag{display:inline-flex;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:var(--el-fill-color)}.el-cascader__collapse-tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__collapse-tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag .el-icon-close{flex:none;background-color:var(--el-text-color-placeholder);color:var(--el-color-white)}.el-cascader__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:var(--el-font-size-base);color:var(--el-cascader-menu-text-color);text-align:center}.el-cascader__suggestion-item{display:flex;justify-content:space-between;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:var(--el-cascader-color-empty)}.el-cascader__search-input{flex:1;height:24px;min-width:60px;margin:2px 0 2px 11px;padding:0;color:var(--el-cascader-menu-text-color);border:none;outline:0;box-sizing:border-box;background:0 0}.el-cascader__search-input::-moz-placeholder{color:transparent}.el-cascader__search-input:-ms-input-placeholder{color:transparent}.el-cascader__search-input::placeholder{color:transparent}.el-check-tag{background-color:var(--el-color-info-light-9);border-radius:var(--el-border-radius-base);color:var(--el-color-info);cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);line-height:var(--el-font-size-base);padding:7px 15px;transition:var(--el-transition-all);font-weight:700}.el-check-tag:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.is-checked{background-color:var(--el-color-primary-light-8);color:var(--el-color-primary)}.el-check-tag.is-checked:hover{background-color:var(--el-color-primary-light-7)}.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary)}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:var(--el-checkbox-font-weight);white-space:nowrap;vertical-align:middle;cursor:pointer;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left:0;color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;position:relative;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:8px 15px;font-size:var(--el-font-size-base);border-radius:0}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:var(--el-checkbox-button-checked-text-color);background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:var(--el-border);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{padding:12px 19px;font-size:var(--el-font-size-base);border-radius:0}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{padding:5px 11px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}.el-checkbox-group{font-size:0;line-height:0}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary)}.el-checkbox{color:var(--el-checkbox-text-color);font-weight:var(--el-checkbox-font-weight);font-size:var(--el-font-size-base);position:relative;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px;height:32px}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{padding:0 15px 0 9px;border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{padding:0 19px 0 11px;border-radius:var(--el-border-radius-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:0 11px 0 7px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--el-checkbox-border-radius)}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-flex;position:relative}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:var(--el-checkbox-disabled-icon-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:var(--el-checkbox-checked-icon-color);height:2px;transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;width:var(--el-checkbox-input-width);height:var(--el-checkbox-input-height);background-color:var(--el-checkbox-bg-color);z-index:var(--el-index-normal);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{box-sizing:content-box;content:"";border:1px solid var(--el-checkbox-checked-icon-color);border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:3px;transition:transform .15s ease-in 50ms;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:8px;line-height:1;font-size:var(--el-checkbox-font-size)}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{width:14px;height:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{width:12px;height:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{display:block;min-height:1px}.el-col-0,.el-col-0.is-guttered{display:none}.el-col-0{max-width:0%;flex:0 0 0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{position:relative;left:0}.el-col-1{max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-offset-1{margin-left:4.1666666667%}.el-col-pull-1{position:relative;right:4.1666666667%}.el-col-push-1{position:relative;left:4.1666666667%}.el-col-2{max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-offset-2{margin-left:8.3333333333%}.el-col-pull-2{position:relative;right:8.3333333333%}.el-col-push-2{position:relative;left:8.3333333333%}.el-col-3{max-width:12.5%;flex:0 0 12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-offset-4{margin-left:16.6666666667%}.el-col-pull-4{position:relative;right:16.6666666667%}.el-col-push-4{position:relative;left:16.6666666667%}.el-col-5{max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-offset-5{margin-left:20.8333333333%}.el-col-pull-5{position:relative;right:20.8333333333%}.el-col-push-5{position:relative;left:20.8333333333%}.el-col-6{max-width:25%;flex:0 0 25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-offset-7{margin-left:29.1666666667%}.el-col-pull-7{position:relative;right:29.1666666667%}.el-col-push-7{position:relative;left:29.1666666667%}.el-col-8{max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-offset-8{margin-left:33.3333333333%}.el-col-pull-8{position:relative;right:33.3333333333%}.el-col-push-8{position:relative;left:33.3333333333%}.el-col-9{max-width:37.5%;flex:0 0 37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-offset-10{margin-left:41.6666666667%}.el-col-pull-10{position:relative;right:41.6666666667%}.el-col-push-10{position:relative;left:41.6666666667%}.el-col-11{max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-offset-11{margin-left:45.8333333333%}.el-col-pull-11{position:relative;right:45.8333333333%}.el-col-push-11{position:relative;left:45.8333333333%}.el-col-12{max-width:50%;flex:0 0 50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-offset-13{margin-left:54.1666666667%}.el-col-pull-13{position:relative;right:54.1666666667%}.el-col-push-13{position:relative;left:54.1666666667%}.el-col-14{max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-offset-14{margin-left:58.3333333333%}.el-col-pull-14{position:relative;right:58.3333333333%}.el-col-push-14{position:relative;left:58.3333333333%}.el-col-15{max-width:62.5%;flex:0 0 62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-offset-16{margin-left:66.6666666667%}.el-col-pull-16{position:relative;right:66.6666666667%}.el-col-push-16{position:relative;left:66.6666666667%}.el-col-17{max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-offset-17{margin-left:70.8333333333%}.el-col-pull-17{position:relative;right:70.8333333333%}.el-col-push-17{position:relative;left:70.8333333333%}.el-col-18{max-width:75%;flex:0 0 75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-offset-19{margin-left:79.1666666667%}.el-col-pull-19{position:relative;right:79.1666666667%}.el-col-push-19{position:relative;left:79.1666666667%}.el-col-20{max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-offset-20{margin-left:83.3333333333%}.el-col-pull-20{position:relative;right:83.3333333333%}.el-col-push-20{position:relative;left:83.3333333333%}.el-col-21{max-width:87.5%;flex:0 0 87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-offset-22{margin-left:91.6666666667%}.el-col-pull-22{position:relative;right:91.6666666667%}.el-col-push-22{position:relative;left:91.6666666667%}.el-col-23{max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-offset-23{margin-left:95.8333333333%}.el-col-pull-23{position:relative;right:95.8333333333%}.el-col-push-23{position:relative;left:95.8333333333%}.el-col-24{max-width:100%;flex:0 0 100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:768px){.el-col-xs-0,.el-col-xs-0.is-guttered{display:none}.el-col-xs-0{max-width:0%;flex:0 0 0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-xs-offset-1{margin-left:4.1666666667%}.el-col-xs-pull-1{position:relative;right:4.1666666667%}.el-col-xs-push-1{position:relative;left:4.1666666667%}.el-col-xs-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-xs-offset-2{margin-left:8.3333333333%}.el-col-xs-pull-2{position:relative;right:8.3333333333%}.el-col-xs-push-2{position:relative;left:8.3333333333%}.el-col-xs-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-xs-offset-4{margin-left:16.6666666667%}.el-col-xs-pull-4{position:relative;right:16.6666666667%}.el-col-xs-push-4{position:relative;left:16.6666666667%}.el-col-xs-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-xs-offset-5{margin-left:20.8333333333%}.el-col-xs-pull-5{position:relative;right:20.8333333333%}.el-col-xs-push-5{position:relative;left:20.8333333333%}.el-col-xs-6{display:block;max-width:25%;flex:0 0 25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-xs-offset-7{margin-left:29.1666666667%}.el-col-xs-pull-7{position:relative;right:29.1666666667%}.el-col-xs-push-7{position:relative;left:29.1666666667%}.el-col-xs-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-xs-offset-8{margin-left:33.3333333333%}.el-col-xs-pull-8{position:relative;right:33.3333333333%}.el-col-xs-push-8{position:relative;left:33.3333333333%}.el-col-xs-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-xs-offset-10{margin-left:41.6666666667%}.el-col-xs-pull-10{position:relative;right:41.6666666667%}.el-col-xs-push-10{position:relative;left:41.6666666667%}.el-col-xs-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-xs-offset-11{margin-left:45.8333333333%}.el-col-xs-pull-11{position:relative;right:45.8333333333%}.el-col-xs-push-11{position:relative;left:45.8333333333%}.el-col-xs-12{display:block;max-width:50%;flex:0 0 50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-xs-offset-13{margin-left:54.1666666667%}.el-col-xs-pull-13{position:relative;right:54.1666666667%}.el-col-xs-push-13{position:relative;left:54.1666666667%}.el-col-xs-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-xs-offset-14{margin-left:58.3333333333%}.el-col-xs-pull-14{position:relative;right:58.3333333333%}.el-col-xs-push-14{position:relative;left:58.3333333333%}.el-col-xs-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-xs-offset-16{margin-left:66.6666666667%}.el-col-xs-pull-16{position:relative;right:66.6666666667%}.el-col-xs-push-16{position:relative;left:66.6666666667%}.el-col-xs-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-xs-offset-17{margin-left:70.8333333333%}.el-col-xs-pull-17{position:relative;right:70.8333333333%}.el-col-xs-push-17{position:relative;left:70.8333333333%}.el-col-xs-18{display:block;max-width:75%;flex:0 0 75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-xs-offset-19{margin-left:79.1666666667%}.el-col-xs-pull-19{position:relative;right:79.1666666667%}.el-col-xs-push-19{position:relative;left:79.1666666667%}.el-col-xs-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-xs-offset-20{margin-left:83.3333333333%}.el-col-xs-pull-20{position:relative;right:83.3333333333%}.el-col-xs-push-20{position:relative;left:83.3333333333%}.el-col-xs-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-xs-offset-22{margin-left:91.6666666667%}.el-col-xs-pull-22{position:relative;right:91.6666666667%}.el-col-xs-push-22{position:relative;left:91.6666666667%}.el-col-xs-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-xs-offset-23{margin-left:95.8333333333%}.el-col-xs-pull-23{position:relative;right:95.8333333333%}.el-col-xs-push-23{position:relative;left:95.8333333333%}.el-col-xs-24{display:block;max-width:100%;flex:0 0 100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0,.el-col-sm-0.is-guttered{display:none}.el-col-sm-0{max-width:0%;flex:0 0 0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-sm-offset-1{margin-left:4.1666666667%}.el-col-sm-pull-1{position:relative;right:4.1666666667%}.el-col-sm-push-1{position:relative;left:4.1666666667%}.el-col-sm-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-sm-offset-2{margin-left:8.3333333333%}.el-col-sm-pull-2{position:relative;right:8.3333333333%}.el-col-sm-push-2{position:relative;left:8.3333333333%}.el-col-sm-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-sm-offset-4{margin-left:16.6666666667%}.el-col-sm-pull-4{position:relative;right:16.6666666667%}.el-col-sm-push-4{position:relative;left:16.6666666667%}.el-col-sm-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-sm-offset-5{margin-left:20.8333333333%}.el-col-sm-pull-5{position:relative;right:20.8333333333%}.el-col-sm-push-5{position:relative;left:20.8333333333%}.el-col-sm-6{display:block;max-width:25%;flex:0 0 25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-sm-offset-7{margin-left:29.1666666667%}.el-col-sm-pull-7{position:relative;right:29.1666666667%}.el-col-sm-push-7{position:relative;left:29.1666666667%}.el-col-sm-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-sm-offset-8{margin-left:33.3333333333%}.el-col-sm-pull-8{position:relative;right:33.3333333333%}.el-col-sm-push-8{position:relative;left:33.3333333333%}.el-col-sm-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-sm-offset-10{margin-left:41.6666666667%}.el-col-sm-pull-10{position:relative;right:41.6666666667%}.el-col-sm-push-10{position:relative;left:41.6666666667%}.el-col-sm-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-sm-offset-11{margin-left:45.8333333333%}.el-col-sm-pull-11{position:relative;right:45.8333333333%}.el-col-sm-push-11{position:relative;left:45.8333333333%}.el-col-sm-12{display:block;max-width:50%;flex:0 0 50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-sm-offset-13{margin-left:54.1666666667%}.el-col-sm-pull-13{position:relative;right:54.1666666667%}.el-col-sm-push-13{position:relative;left:54.1666666667%}.el-col-sm-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-sm-offset-14{margin-left:58.3333333333%}.el-col-sm-pull-14{position:relative;right:58.3333333333%}.el-col-sm-push-14{position:relative;left:58.3333333333%}.el-col-sm-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-sm-offset-16{margin-left:66.6666666667%}.el-col-sm-pull-16{position:relative;right:66.6666666667%}.el-col-sm-push-16{position:relative;left:66.6666666667%}.el-col-sm-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-sm-offset-17{margin-left:70.8333333333%}.el-col-sm-pull-17{position:relative;right:70.8333333333%}.el-col-sm-push-17{position:relative;left:70.8333333333%}.el-col-sm-18{display:block;max-width:75%;flex:0 0 75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-sm-offset-19{margin-left:79.1666666667%}.el-col-sm-pull-19{position:relative;right:79.1666666667%}.el-col-sm-push-19{position:relative;left:79.1666666667%}.el-col-sm-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-sm-offset-20{margin-left:83.3333333333%}.el-col-sm-pull-20{position:relative;right:83.3333333333%}.el-col-sm-push-20{position:relative;left:83.3333333333%}.el-col-sm-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-sm-offset-22{margin-left:91.6666666667%}.el-col-sm-pull-22{position:relative;right:91.6666666667%}.el-col-sm-push-22{position:relative;left:91.6666666667%}.el-col-sm-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-sm-offset-23{margin-left:95.8333333333%}.el-col-sm-pull-23{position:relative;right:95.8333333333%}.el-col-sm-push-23{position:relative;left:95.8333333333%}.el-col-sm-24{display:block;max-width:100%;flex:0 0 100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0,.el-col-md-0.is-guttered{display:none}.el-col-md-0{max-width:0%;flex:0 0 0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-md-offset-1{margin-left:4.1666666667%}.el-col-md-pull-1{position:relative;right:4.1666666667%}.el-col-md-push-1{position:relative;left:4.1666666667%}.el-col-md-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-md-offset-2{margin-left:8.3333333333%}.el-col-md-pull-2{position:relative;right:8.3333333333%}.el-col-md-push-2{position:relative;left:8.3333333333%}.el-col-md-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-md-offset-4{margin-left:16.6666666667%}.el-col-md-pull-4{position:relative;right:16.6666666667%}.el-col-md-push-4{position:relative;left:16.6666666667%}.el-col-md-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-md-offset-5{margin-left:20.8333333333%}.el-col-md-pull-5{position:relative;right:20.8333333333%}.el-col-md-push-5{position:relative;left:20.8333333333%}.el-col-md-6{display:block;max-width:25%;flex:0 0 25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-md-offset-7{margin-left:29.1666666667%}.el-col-md-pull-7{position:relative;right:29.1666666667%}.el-col-md-push-7{position:relative;left:29.1666666667%}.el-col-md-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-md-offset-8{margin-left:33.3333333333%}.el-col-md-pull-8{position:relative;right:33.3333333333%}.el-col-md-push-8{position:relative;left:33.3333333333%}.el-col-md-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-md-offset-10{margin-left:41.6666666667%}.el-col-md-pull-10{position:relative;right:41.6666666667%}.el-col-md-push-10{position:relative;left:41.6666666667%}.el-col-md-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-md-offset-11{margin-left:45.8333333333%}.el-col-md-pull-11{position:relative;right:45.8333333333%}.el-col-md-push-11{position:relative;left:45.8333333333%}.el-col-md-12{display:block;max-width:50%;flex:0 0 50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-md-offset-13{margin-left:54.1666666667%}.el-col-md-pull-13{position:relative;right:54.1666666667%}.el-col-md-push-13{position:relative;left:54.1666666667%}.el-col-md-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-md-offset-14{margin-left:58.3333333333%}.el-col-md-pull-14{position:relative;right:58.3333333333%}.el-col-md-push-14{position:relative;left:58.3333333333%}.el-col-md-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-md-offset-16{margin-left:66.6666666667%}.el-col-md-pull-16{position:relative;right:66.6666666667%}.el-col-md-push-16{position:relative;left:66.6666666667%}.el-col-md-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-md-offset-17{margin-left:70.8333333333%}.el-col-md-pull-17{position:relative;right:70.8333333333%}.el-col-md-push-17{position:relative;left:70.8333333333%}.el-col-md-18{display:block;max-width:75%;flex:0 0 75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-md-offset-19{margin-left:79.1666666667%}.el-col-md-pull-19{position:relative;right:79.1666666667%}.el-col-md-push-19{position:relative;left:79.1666666667%}.el-col-md-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-md-offset-20{margin-left:83.3333333333%}.el-col-md-pull-20{position:relative;right:83.3333333333%}.el-col-md-push-20{position:relative;left:83.3333333333%}.el-col-md-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-md-offset-22{margin-left:91.6666666667%}.el-col-md-pull-22{position:relative;right:91.6666666667%}.el-col-md-push-22{position:relative;left:91.6666666667%}.el-col-md-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-md-offset-23{margin-left:95.8333333333%}.el-col-md-pull-23{position:relative;right:95.8333333333%}.el-col-md-push-23{position:relative;left:95.8333333333%}.el-col-md-24{display:block;max-width:100%;flex:0 0 100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0,.el-col-lg-0.is-guttered{display:none}.el-col-lg-0{max-width:0%;flex:0 0 0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-lg-offset-1{margin-left:4.1666666667%}.el-col-lg-pull-1{position:relative;right:4.1666666667%}.el-col-lg-push-1{position:relative;left:4.1666666667%}.el-col-lg-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-lg-offset-2{margin-left:8.3333333333%}.el-col-lg-pull-2{position:relative;right:8.3333333333%}.el-col-lg-push-2{position:relative;left:8.3333333333%}.el-col-lg-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-lg-offset-4{margin-left:16.6666666667%}.el-col-lg-pull-4{position:relative;right:16.6666666667%}.el-col-lg-push-4{position:relative;left:16.6666666667%}.el-col-lg-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-lg-offset-5{margin-left:20.8333333333%}.el-col-lg-pull-5{position:relative;right:20.8333333333%}.el-col-lg-push-5{position:relative;left:20.8333333333%}.el-col-lg-6{display:block;max-width:25%;flex:0 0 25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-lg-offset-7{margin-left:29.1666666667%}.el-col-lg-pull-7{position:relative;right:29.1666666667%}.el-col-lg-push-7{position:relative;left:29.1666666667%}.el-col-lg-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-lg-offset-8{margin-left:33.3333333333%}.el-col-lg-pull-8{position:relative;right:33.3333333333%}.el-col-lg-push-8{position:relative;left:33.3333333333%}.el-col-lg-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-lg-offset-10{margin-left:41.6666666667%}.el-col-lg-pull-10{position:relative;right:41.6666666667%}.el-col-lg-push-10{position:relative;left:41.6666666667%}.el-col-lg-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-lg-offset-11{margin-left:45.8333333333%}.el-col-lg-pull-11{position:relative;right:45.8333333333%}.el-col-lg-push-11{position:relative;left:45.8333333333%}.el-col-lg-12{display:block;max-width:50%;flex:0 0 50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-lg-offset-13{margin-left:54.1666666667%}.el-col-lg-pull-13{position:relative;right:54.1666666667%}.el-col-lg-push-13{position:relative;left:54.1666666667%}.el-col-lg-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-lg-offset-14{margin-left:58.3333333333%}.el-col-lg-pull-14{position:relative;right:58.3333333333%}.el-col-lg-push-14{position:relative;left:58.3333333333%}.el-col-lg-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-lg-offset-16{margin-left:66.6666666667%}.el-col-lg-pull-16{position:relative;right:66.6666666667%}.el-col-lg-push-16{position:relative;left:66.6666666667%}.el-col-lg-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-lg-offset-17{margin-left:70.8333333333%}.el-col-lg-pull-17{position:relative;right:70.8333333333%}.el-col-lg-push-17{position:relative;left:70.8333333333%}.el-col-lg-18{display:block;max-width:75%;flex:0 0 75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-lg-offset-19{margin-left:79.1666666667%}.el-col-lg-pull-19{position:relative;right:79.1666666667%}.el-col-lg-push-19{position:relative;left:79.1666666667%}.el-col-lg-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-lg-offset-20{margin-left:83.3333333333%}.el-col-lg-pull-20{position:relative;right:83.3333333333%}.el-col-lg-push-20{position:relative;left:83.3333333333%}.el-col-lg-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-lg-offset-22{margin-left:91.6666666667%}.el-col-lg-pull-22{position:relative;right:91.6666666667%}.el-col-lg-push-22{position:relative;left:91.6666666667%}.el-col-lg-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-lg-offset-23{margin-left:95.8333333333%}.el-col-lg-pull-23{position:relative;right:95.8333333333%}.el-col-lg-push-23{position:relative;left:95.8333333333%}.el-col-lg-24{display:block;max-width:100%;flex:0 0 100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0,.el-col-xl-0.is-guttered{display:none}.el-col-xl-0{max-width:0%;flex:0 0 0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-xl-offset-1{margin-left:4.1666666667%}.el-col-xl-pull-1{position:relative;right:4.1666666667%}.el-col-xl-push-1{position:relative;left:4.1666666667%}.el-col-xl-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-xl-offset-2{margin-left:8.3333333333%}.el-col-xl-pull-2{position:relative;right:8.3333333333%}.el-col-xl-push-2{position:relative;left:8.3333333333%}.el-col-xl-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-xl-offset-4{margin-left:16.6666666667%}.el-col-xl-pull-4{position:relative;right:16.6666666667%}.el-col-xl-push-4{position:relative;left:16.6666666667%}.el-col-xl-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-xl-offset-5{margin-left:20.8333333333%}.el-col-xl-pull-5{position:relative;right:20.8333333333%}.el-col-xl-push-5{position:relative;left:20.8333333333%}.el-col-xl-6{display:block;max-width:25%;flex:0 0 25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-xl-offset-7{margin-left:29.1666666667%}.el-col-xl-pull-7{position:relative;right:29.1666666667%}.el-col-xl-push-7{position:relative;left:29.1666666667%}.el-col-xl-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-xl-offset-8{margin-left:33.3333333333%}.el-col-xl-pull-8{position:relative;right:33.3333333333%}.el-col-xl-push-8{position:relative;left:33.3333333333%}.el-col-xl-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-xl-offset-10{margin-left:41.6666666667%}.el-col-xl-pull-10{position:relative;right:41.6666666667%}.el-col-xl-push-10{position:relative;left:41.6666666667%}.el-col-xl-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-xl-offset-11{margin-left:45.8333333333%}.el-col-xl-pull-11{position:relative;right:45.8333333333%}.el-col-xl-push-11{position:relative;left:45.8333333333%}.el-col-xl-12{display:block;max-width:50%;flex:0 0 50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-xl-offset-13{margin-left:54.1666666667%}.el-col-xl-pull-13{position:relative;right:54.1666666667%}.el-col-xl-push-13{position:relative;left:54.1666666667%}.el-col-xl-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-xl-offset-14{margin-left:58.3333333333%}.el-col-xl-pull-14{position:relative;right:58.3333333333%}.el-col-xl-push-14{position:relative;left:58.3333333333%}.el-col-xl-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-xl-offset-16{margin-left:66.6666666667%}.el-col-xl-pull-16{position:relative;right:66.6666666667%}.el-col-xl-push-16{position:relative;left:66.6666666667%}.el-col-xl-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-xl-offset-17{margin-left:70.8333333333%}.el-col-xl-pull-17{position:relative;right:70.8333333333%}.el-col-xl-push-17{position:relative;left:70.8333333333%}.el-col-xl-18{display:block;max-width:75%;flex:0 0 75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-xl-offset-19{margin-left:79.1666666667%}.el-col-xl-pull-19{position:relative;right:79.1666666667%}.el-col-xl-push-19{position:relative;left:79.1666666667%}.el-col-xl-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-xl-offset-20{margin-left:83.3333333333%}.el-col-xl-pull-20{position:relative;right:83.3333333333%}.el-col-xl-push-20{position:relative;left:83.3333333333%}.el-col-xl-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-xl-offset-22{margin-left:91.6666666667%}.el-col-xl-pull-22{position:relative;right:91.6666666667%}.el-col-xl-push-22{position:relative;left:91.6666666667%}.el-col-xl-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-xl-offset-23{margin-left:95.8333333333%}.el-col-xl-pull-23{position:relative;right:95.8333333333%}.el-col-xl-push-23{position:relative;left:95.8333333333%}.el-col-xl-24{display:block;max-width:100%;flex:0 0 100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-top:1px solid var(--el-collapse-border-color);border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{display:flex;align-items:center;height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);background-color:var(--el-collapse-header-bg-color);color:var(--el-collapse-header-text-color);cursor:pointer;border-bottom:1px solid var(--el-collapse-border-color);font-size:var(--el-collapse-header-font-size);font-weight:500;transition:border-bottom-color var(--el-transition-duration);outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:transform var(--el-transition-duration);font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:var(--el-collapse-content-bg-color);overflow:hidden;box-sizing:border-box;border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-item__content{padding-bottom:25px;font-size:var(--el-collapse-content-font-size);color:var(--el-collapse-content-text-color);line-height:1.7692307692}.el-collapse-item:last-child{margin-bottom:-1px}.el-color-predefine{display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:flex;flex:1;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector>div{display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px;float:right}.el-color-hue-slider__bar{position:relative;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid var(--el-border-color-lighter);box-shadow:0 0 2px #0009;z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;border-radius:50%;transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-size:12px 12px;background-position:0 0,6px 0,6px -6px,0 6px}.el-color-alpha-slider__bar{position:relative;background:linear-gradient(to right,rgba(255,255,255,0) 0,var(--el-bg-color) 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid var(--el-border-color-lighter);box-shadow:0 0 2px #0009;z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:12px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-picker{display:inline-block;position:relative;line-height:normal;outline:0}.el-color-picker:hover:not(.is-disabled) .el-color-picker__trigger{border:1px solid var(--el-border-color-hover)}.el-color-picker:focus-visible:not(.is-disabled) .el-color-picker__trigger{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--large{height:40px}.el-color-picker--large .el-color-picker__trigger{height:40px;width:40px}.el-color-picker--large .el-color-picker__mask{height:38px;width:38px}.el-color-picker--small{height:24px}.el-color-picker--small .el-color-picker__trigger{height:24px;width:24px}.el-color-picker--small .el-color-picker__mask{height:22px;width:22px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:scale(.8)}.el-color-picker__mask{height:30px;width:30px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:#ffffffb3}.el-color-picker__trigger{display:inline-flex;justify-content:center;align-items:center;box-sizing:border-box;height:32px;width:32px;padding:4px;border:1px solid var(--el-border-color);border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;box-sizing:border-box;border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-size:12px 12px;background-position:0 0,6px 0,6px -6px,0 6px}.el-color-picker__color-inner{display:inline-flex;justify-content:center;align-items:center;width:100%;height:100%}.el-color-picker .el-color-picker__empty{font-size:12px;color:var(--el-text-color-secondary)}.el-color-picker .el-color-picker__icon{display:inline-flex;justify-content:center;align-items:center;color:#fff;font-size:12px}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;box-sizing:content-box;background-color:#fff;border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light)}.el-color-picker__panel.el-popper{border:1px solid var(--el-border-color-lighter)}.el-color-picker,.el-color-picker__panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker,.dark .el-color-picker__panel{--el-color-picker-alpha-bg-a:#333333}.el-container{display:flex;flex-direction:row;flex:1;flex-basis:auto;box-sizing:border-box;min-width:0}.el-container.is-vertical{flex-direction:column}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:var(--el-datepicker-text-color)}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child .el-date-table-cell{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child .el-date-table-cell{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table.is-week-mode .el-date-table__row.current .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td{width:32px;height:30px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td .el-date-table-cell{height:30px;padding:3px 0;box-sizing:border-box}.el-date-table td .el-date-table-cell .el-date-table-cell__text{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;transform:translate(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:var(--el-datepicker-off-text-color)}.el-date-table td.today{position:relative}.el-date-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-date-table td.today.end-date .el-date-table-cell__text,.el-date-table td.today.start-date .el-date-table-cell__text{color:#fff}.el-date-table td.available:hover{color:var(--el-datepicker-hover-text-color)}.el-date-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-date-table td.current:not(.disabled):focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-date-table td.end-date .el-date-table-cell,.el-date-table td.start-date .el-date-table-cell{color:#fff}.el-date-table td.end-date .el-date-table-cell__text,.el-date-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date .el-date-table-cell{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);opacity:1;cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-date-table td.selected .el-date-table-cell{margin-left:5px;margin-right:5px;background-color:var(--el-datepicker-inrange-bg-color);border-radius:15px}.el-date-table td.selected .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.selected .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:var(--el-datepicker-header-text-color)}.el-date-table td:focus{outline:0}.el-date-table th{padding:5px;color:var(--el-datepicker-header-text-color);font-weight:400;border-bottom:solid 1px var(--el-border-color-lighter)}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;box-sizing:border-box}.el-month-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-month-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:var(--el-datepicker-text-color);margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-month-table td.in-range div{background-color:var(--el-datepicker-inrange-bg-color)}.el-month-table td.in-range div:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:var(--el-datepicker-active-color)}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:var(--el-datepicker-active-color)}.el-month-table td:focus-visible{outline:0}.el-month-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color)}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-year-table td.disabled .cell{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-year-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-year-table td .cell{width:48px;height:36px;display:block;line-height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto}.el-year-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-year-table td.current:not(.disabled) .cell{color:var(--el-datepicker-active-color)}.el-year-table td:focus-visible{outline:0}.el-year-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color)}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:192px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper.el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:default}.el-time-spinner__arrow{font-size:12px;color:var(--el-text-color-secondary);position:absolute;left:0;width:100%;z-index:var(--el-index-normal);text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:var(--el-color-primary)}.el-time-spinner__arrow.arrow-up{top:10px}.el-time-spinner__arrow.arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center}.el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:var(--el-text-color-regular)}.el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:pointer}.el-time-spinner__item.is-active:not(.is-disabled){color:var(--el-text-color-primary);font-weight:700}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light)}.el-picker__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-datepicker-border-color)}.el-picker__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-date-editor{--el-date-editor-width:220px;--el-date-editor-monthrange-width:300px;--el-date-editor-daterange-width:350px;--el-date-editor-datetimerange-width:400px;--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);position:relative;display:inline-block;text-align:left}.el-date-editor.el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-date-editor.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{width:var(--el-date-editor-width);height:var(--el-input-height,var(--el-component-size))}.el-date-editor--monthrange{--el-date-editor-width:var(--el-date-editor-monthrange-width)}.el-date-editor--daterange,.el-date-editor--timerange{--el-date-editor-width:var(--el-date-editor-daterange-width)}.el-date-editor--datetimerange{--el-date-editor-width:var(--el-date-editor-datetimerange-width)}.el-date-editor--dates .el-input__wrapper{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .close-icon,.el-date-editor .clear-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__icon{height:inherit;font-size:14px;color:var(--el-text-color-placeholder);float:left}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:30px;line-height:30px;margin:0;padding:0;width:39%;text-align:center;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);background-color:transparent}.el-date-editor .el-range-input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{flex:1;display:inline-flex;justify-content:center;align-items:center;height:100%;padding:0 5px;margin:0;font-size:14px;word-break:keep-all;color:var(--el-text-color-primary)}.el-date-editor .el-range__close-icon{font-size:14px;color:var(--el-text-color-placeholder);height:inherit;width:unset;cursor:pointer}.el-date-editor .el-range__close-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__close-icon svg{vertical-align:middle}.el-date-editor .el-range__close-icon--hidden{opacity:0;visibility:hidden}.el-range-editor.el-input__wrapper{display:inline-flex;align-items:center;padding:0 10px}.el-range-editor.is-active,.el-range-editor.is-active:hover{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-range-editor--large{line-height:var(--el-component-size-large)}.el-range-editor--large.el-input__wrapper{height:var(--el-component-size-large)}.el-range-editor--large .el-range-separator{line-height:40px;font-size:14px}.el-range-editor--large .el-range-input{height:38px;line-height:38px;font-size:14px}.el-range-editor--small{line-height:var(--el-component-size-small)}.el-range-editor--small.el-input__wrapper{height:var(--el-component-size-small)}.el-range-editor--small .el-range-separator{line-height:24px;font-size:12px}.el-range-editor--small .el-range-input{height:22px;line-height:22px;font-size:12px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:var(--el-disabled-border-color)}.el-range-editor.is-disabled input{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{color:var(--el-text-color-regular);background:var(--el-bg-color-overlay);border-radius:var(--el-border-radius-base);line-height:30px}.el-picker-panel .el-time-panel{margin:5px 0;border:solid 1px var(--el-datepicker-border-color);background-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid var(--el-datepicker-inner-border-color);padding:4px 12px;text-align:right;background-color:var(--el-bg-color-overlay);position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:var(--el-datepicker-text-color);padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:var(--el-datepicker-active-color)}.el-picker-panel__btn{border:1px solid var(--el-fill-color-darker);color:var(--el-text-color-primary);line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:var(--el-datepicker-icon-color);border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn:focus-visible{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn.is-disabled{color:var(--el-text-color-disabled)}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;padding-top:6px;background-color:var(--el-bg-color-overlay);overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary)}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid var(--el-datepicker-inner-border-color);font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px var(--el-border-color-lighter)}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:var(--el-text-color-regular)}.el-date-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label:focus-visible{outline:0;color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.el-date-picker .el-time-panel{position:absolute}.el-date-range-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary)}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid var(--el-datepicker-inner-border-color)}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid var(--el-datepicker-inner-border-color);font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:var(--el-datepicker-icon-color)}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px;z-index:1}.el-time-range-picker__cell{box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid var(--el-datepicker-border-color)}.el-time-panel{border-radius:2px;position:relative;width:180px;left:0;z-index:var(--el-index-top);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-16px;height:32px;z-index:-1;left:0;right:0;box-sizing:border-box;padding-top:6px;text-align:left}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%;border-top:1px solid var(--el-border-color-light);border-bottom:1px solid var(--el-border-color-light)}.el-time-panel__content.has-seconds:after{left:66.6666666667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333333333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));padding:4px;height:36px;line-height:25px;text-align:right;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:var(--el-text-color-primary)}.el-time-panel__btn.confirm{font-weight:800;color:var(--el-timepicker-active-color,var(--el-color-primary))}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;font-size:var(--el-font-size-base);color:var(--el-text-color-primary)}.el-descriptions__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;text-align:left;font-weight:400;line-height:23px;font-size:14px}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{font-weight:700;color:var(--el-text-color-regular);background:var(--el-descriptions-item-bordered-label-background)}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{-webkit-animation:v-modal-in var(--el-transition-duration-fast) ease;animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{-webkit-animation:v-modal-out var(--el-transition-duration-fast) ease forwards;animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color)}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:20px;--el-dialog-border-radius:var(--el-border-radius-small);position:relative;margin:var(--el-dialog-margin-top,15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:0!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-dialog__header{padding:var(--el-dialog-padding-primary);padding-bottom:10px;margin-right:16px}.el-dialog__headerbtn{position:absolute;top:6px;right:0;padding:0;width:54px;height:54px;background:0 0;border:none;outline:0;cursor:pointer;font-size:var(--el-message-close-size,16px)}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{padding:calc(var(--el-dialog-padding-primary) + 10px) var(--el-dialog-padding-primary);color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding:var(--el-dialog-padding-primary);padding-top:10px;text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px calc(var(--el-dialog-padding-primary) + 5px) 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto}.dialog-fade-enter-active{-webkit-animation:modal-fade-in var(--el-transition-duration);animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{-webkit-animation:dialog-fade-in var(--el-transition-duration);animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{-webkit-animation:modal-fade-out var(--el-transition-duration);animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{-webkit-animation:dialog-fade-out var(--el-transition-duration);animation:dialog-fade-out var(--el-transition-duration)}@-webkit-keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@-webkit-keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-divider{position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0;border-top:1px var(--el-border-color) var(--el-border-style)}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative;border-left:1px var(--el-border-color) var(--el-border-style)}.el-divider__text{position:absolute;background-color:var(--el-bg-color);padding:0 20px;font-weight:500;color:var(--el-text-color-primary);font-size:14px}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color, var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary, 20px)}.el-drawer{position:absolute;box-sizing:border-box;background-color:var(--el-drawer-bg-color);display:flex;flex-direction:column;box-shadow:var(--el-box-shadow-dark);overflow:hidden;transition:all var(--el-transition-duration)}.el-drawer .rtl,.el-drawer .ltr,.el-drawer .ttb,.el-drawer .btt{transform:translate(0)}.el-drawer__sr-focus:focus{outline:0!important}.el-drawer__header{align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{margin:0;flex:1;line-height:inherit;font-size:1rem}.el-drawer__footer{padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{display:inline-flex;border:none;cursor:pointer;font-size:var(--el-font-size-extra-large);color:inherit;background-color:transparent;outline:0}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;padding:var(--el-drawer-padding-primary);overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{opacity:0}.el-drawer-fade-enter-to,.el-drawer-fade-leave-from{opacity:1}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;display:inline-flex;position:relative;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);line-height:1;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:0}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{list-style:none;padding:0;margin:0;box-sizing:border-box}.el-dropdown .el-dropdown__caret-button{padding-left:0;padding-right:0;display:inline-flex;justify-content:center;align-items:center;width:32px;border-left:none}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:-1px;bottom:-1px;left:0;background:var(--el-overlay-color-lighter)}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:0}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{position:relative;top:0;left:0;z-index:var(--el-dropdown-menu-index);padding:5px 0;margin:0;background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;list-style:none}.el-dropdown-menu__item{display:flex;align-items:center;white-space:nowrap;list-style:none;line-height:22px;padding:5px 16px;margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);cursor:pointer;outline:0}.el-dropdown-menu__item:not(.is-disabled):focus{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{margin:6px 0;border-top:1px solid var(--el-border-color-lighter)}.el-dropdown-menu__item.is-disabled{cursor:not-allowed;color:var(--el-text-color-disabled)}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{padding:7px 20px;line-height:22px;font-size:14px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{padding:2px 12px;line-height:20px;font-size:12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.el-empty{--el-empty-padding:40px 0;--el-empty-image-width:160px;--el-empty-description-margin-top:20px;--el-empty-bottom-margin-top:20px;--el-empty-fill-color-0:var(--el-color-white);--el-empty-fill-color-1:#fcfcfd;--el-empty-fill-color-2:#f8f9fb;--el-empty-fill-color-3:#f7f8fc;--el-empty-fill-color-4:#eeeff3;--el-empty-fill-color-5:#edeef2;--el-empty-fill-color-6:#e9ebef;--el-empty-fill-color-7:#e5e7e9;--el-empty-fill-color-8:#e0e3e9;--el-empty-fill-color-9:#d5d7de;display:flex;justify-content:center;align-items:center;flex-direction:column;text-align:center;box-sizing:border-box;padding:var(--el-empty-padding)}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:100%;height:100%;vertical-align:top}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-secondary)}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;padding:var(--el-footer-padding);box-sizing:border-box;flex-shrink:0;height:var(--el-footer-height)}.el-form{--el-form-label-font-size:var(--el-font-size-base)}.el-form--label-left .el-form-item__label{justify-content:flex-start}.el-form--label-top .el-form-item{display:block}.el-form--label-top .el-form-item .el-form-item__label{display:block;height:auto;text-align:left;margin-bottom:8px;line-height:22px}.el-form--inline .el-form-item{display:inline-flex;vertical-align:middle;margin-right:32px}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form--large.el-form--label-top .el-form-item .el-form-item__label{margin-bottom:12px;line-height:22px}.el-form--default.el-form--label-top .el-form-item .el-form-item__label{margin-bottom:8px;line-height:22px}.el-form--small.el-form--label-top .el-form-item .el-form-item__label{margin-bottom:4px;line-height:20px}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item__label-wrap{display:flex}.el-form-item__label{display:inline-flex;justify-content:flex-end;align-items:flex-start;flex:0 0 auto;font-size:var(--el-form-label-font-size);color:var(--el-text-color-regular);height:32px;line-height:32px;padding:0 12px 0 0;box-sizing:border-box}.el-form-item__content{display:flex;flex-wrap:wrap;align-items:center;flex:1;line-height:32px;position:relative;font-size:var(--font-size);min-width:0}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;line-height:1;padding-top:2px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{content:"*";color:var(--el-color-danger);margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{content:"*";color:var(--el-color-danger);margin-left:4px}.el-form-item.is-error .el-select-v2__wrapper,.el-form-item.is-error .el-select-v2__wrapper:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-input-group__prepend .el-input__wrapper{box-shadow:0 0 0 1px transparent inset}.el-form-item.is-error .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-header{--el-header-padding:0 20px;--el-header-height:60px;padding:var(--el-header-padding);box-sizing:border-box;flex-shrink:0;height:var(--el-header-height)}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:flex;align-items:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__btn .el-icon{font-size:inherit;cursor:pointer}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{position:static;width:100%;height:100%;display:flex;justify-content:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__actions{left:50%;bottom:30px;transform:translate(-50%);width:282px;height:44px;padding:0 23px;background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:flex;align-items:center;justify-content:space-around}.el-image-viewer__prev{top:50%;transform:translateY(-50%);left:40px;width:44px;height:44px;font-size:24px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff}.el-image-viewer__next{top:50%;transform:translateY(-50%);right:40px;text-indent:2px;width:44px;height:44px;font-size:24px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff}.el-image-viewer__close{width:44px;height:44px;font-size:24px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in var(--el-transition-duration);animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out var(--el-transition-duration);animation:viewer-fade-out var(--el-transition-duration)}@-webkit-keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top;opacity:1}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{position:absolute;top:0;left:0}.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{display:flex;justify-content:center;align-items:center;font-size:14px;background:var(--el-fill-color-light);color:var(--el-text-color-placeholder);vertical-align:middle}.el-image__preview{cursor:pointer}.el-input-number{position:relative;display:inline-flex;width:150px;line-height:30px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.el-input-number__decrease,.el-input-number__increase{display:flex;justify-content:center;align-items:center;height:auto;position:absolute;z-index:1;top:1px;bottom:1px;width:32px;background:var(--el-fill-color-light);color:var(--el-text-color-regular);cursor:pointer;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input_wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input_wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border)}.el-input-number__decrease{left:1px;border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border)}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{width:40px;font-size:14px}.el-input-number--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{width:120px;line-height:22px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:24px;font-size:12px}.el-input-number--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{bottom:auto;left:auto;border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border)}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;top:auto;left:auto;border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:var(--el-font-size-base)}.el-textarea__inner{position:relative;display:block;resize:vertical;padding:5px 11px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;font-family:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);border:none}.el-textarea__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{outline:0;box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);position:absolute;font-size:12px;line-height:14px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary)}.el-input{--el-input-height:var(--el-component-size);position:relative;font-size:var(--el-font-size-base);display:inline-flex;width:100%;line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:var(--el-text-color-disabled)}.el-input::-webkit-scrollbar-corner{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);font-size:14px;cursor:pointer}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{height:100%;display:inline-flex;align-items:center;color:var(--el-color-info);font-size:12px}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;display:inline-block;padding-left:8px}.el-input__wrapper{display:inline-flex;flex-grow:1;align-items:center;justify-content:center;padding:1px 11px;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);transform:translateZ(0);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 32px) - 2px);width:100%;flex-grow:1;-webkit-appearance:none;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);padding:0;outline:0;border:none;background:0 0;box-sizing:border-box}.el-input__inner:focus{outline:0}.el-input__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__prefix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__prefix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__suffix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;display:flex;justify-content:center;align-items:center;transition:all var(--el-transition-duration);margin-left:8px}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color,) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 24px) - 2px)}.el-input-group{display:inline-flex;width:100%;align-items:stretch}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:100%;border-radius:var(--el-input-border-radius);padding:0 20px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-input__wrapper,.el-input-group__append div.el-select:hover .el-input__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-input__wrapper,.el-input-group__prepend div.el-select:hover .el-input__wrapper{border-color:transparent;background-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-input .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select .el-input .el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__wrapper{box-shadow:1px 0 0 0 var(--el-input-focus-border-color) inset,1px 0 0 0 var(--el-input-focus-border-color),0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important;z-index:2}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__wrapper:focus{outline:0;z-index:2;box-shadow:1px 0 0 0 var(--el-input-focus-border-color) inset,1px 0 0 0 var(--el-input-focus-border-color),0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important}.el-input-group--prepend .el-input-group__prepend .el-select:hover .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select:hover .el-input__wrapper{z-index:1;box-shadow:1px 0 0 0 var(--el-input-hover-border-color) inset,1px 0 0 0 var(--el-input-hover-border-color),0 1px 0 0 var(--el-input-hover-border-color) inset,0 -1px 0 0 var(--el-input-hover-border-color) inset!important}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-input .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select .el-input .el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--append .el-input-group__append .el-select .el-input.is-focus .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select .el-input.is-focus .el-input__wrapper{z-index:2;box-shadow:-1px 0 0 0 var(--el-input-focus-border-color),-1px 0 0 0 var(--el-input-focus-border-color) inset,0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important}.el-input-group--append .el-input-group__append .el-select:hover .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select:hover .el-input__wrapper{z-index:1;box-shadow:-1px 0 0 0 var(--el-input-hover-border-color),-1px 0 0 0 var(--el-input-hover-border-color) inset,0 1px 0 0 var(--el-input-hover-border-color) inset,0 -1px 0 0 var(--el-input-hover-border-color) inset!important}.el-link{--el-link-font-size:var(--el-font-size-base);--el-link-font-weight:var(--el-font-weight-primary);--el-link-text-color:var(--el-text-color-regular);--el-link-hover-text-color:var(--el-color-primary);--el-link-disabled-text-color:var(--el-text-color-placeholder)}.el-link{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;cursor:pointer;padding:0;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);color:var(--el-link-text-color)}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid var(--el-link-hover-text-color)}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default:after{border-color:var(--el-link-hover-text-color)}.el-link__inner{display:inline-flex;justify-content:center;align-items:center}.el-link.el-link--primary{--el-link-text-color:var(--el-color-primary);--el-link-hover-text-color:var(--el-color-primary-light-3);--el-link-disabled-text-color:var(--el-color-primary-light-5)}.el-link.el-link--primary:after{border-color:var(--el-link-text-color)}.el-link.el-link--primary.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--success{--el-link-text-color:var(--el-color-success);--el-link-hover-text-color:var(--el-color-success-light-3);--el-link-disabled-text-color:var(--el-color-success-light-5)}.el-link.el-link--success:after{border-color:var(--el-link-text-color)}.el-link.el-link--success.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning{--el-link-text-color:var(--el-color-warning);--el-link-hover-text-color:var(--el-color-warning-light-3);--el-link-disabled-text-color:var(--el-color-warning-light-5)}.el-link.el-link--warning:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger{--el-link-text-color:var(--el-color-danger);--el-link-hover-text-color:var(--el-color-danger-light-3);--el-link-disabled-text-color:var(--el-color-danger-light-5)}.el-link.el-link--danger:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--error{--el-link-text-color:var(--el-color-error);--el-link-hover-text-color:var(--el-color-error-light-3);--el-link-disabled-text-color:var(--el-color-error-light-5)}.el-link.el-link--error:after{border-color:var(--el-link-text-color)}.el-link.el-link--error.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--info{--el-link-text-color:var(--el-color-info);--el-link-hover-text-color:var(--el-color-info-light-3);--el-link-disabled-text-color:var(--el-color-info-light-5)}.el-link.el-link--info:after{border-color:var(--el-link-text-color)}.el-link.el-link--info.is-underline:hover:after{border-color:var(--el-link-text-color)}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:var(--el-mask-color);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity var(--el-transition-duration)}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/ 2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{top:50%;margin-top:calc((0px - var(--el-loading-spinner-size))/ 2);width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@-webkit-keyframes loading-rotate{to{transform:rotate(360deg)}}@keyframes loading-rotate{to{transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-main{--el-main-padding:20px;display:block;flex:1;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:var(--el-main-padding)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{border-right:solid 1px var(--el-menu-border-color);list-style:none;position:relative;margin:0;padding-left:0;background-color:var(--el-menu-bg-color);box-sizing:border-box}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title{white-space:nowrap;padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level) * var(--el-menu-level-padding))}.el-menu--horizontal{display:flex;flex-wrap:nowrap;border-bottom:solid 1px var(--el-menu-border-color);border-right:none}.el-menu--horizontal>.el-menu-item{display:inline-flex;justify-content:center;align-items:center;height:100%;margin:0;border-bottom:2px solid transparent;color:var(--el-menu-text-color)}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover{background-color:#fff}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:0}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{height:100%;border-bottom:2px solid transparent;color:var(--el-menu-text-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-bg-color-overlay)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{background-color:var(--el-menu-bg-color);display:flex;align-items:center;height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);padding:0 10px;color:var(--el-menu-text-color)}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:var(--el-menu-hover-text-color);background-color:var(--el-menu-hover-bg-color)}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding) * 2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{margin:0;vertical-align:middle;width:var(--el-menu-icon-width);text-align:center}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:var(--el-border-radius-small);box-shadow:var(--el-box-shadow-light)}.el-menu .el-icon{flex-shrink:0}.el-menu-item{display:flex;align-items:center;height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);list-style:none;cursor:pointer;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:focus,.el-menu-item:hover{outline:0}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon]{margin-right:5px;width:var(--el-menu-icon-width);text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{position:absolute;left:0;top:0;height:100%;width:100%;display:inline-flex;align-items:center;box-sizing:border-box;padding:0 var(--el-menu-base-level-padding)}.el-sub-menu{list-style:none;margin:0;padding-left:0}.el-sub-menu__title{display:flex;align-items:center;height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);list-style:none;cursor:pointer;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:focus,.el-sub-menu__title:hover{outline:0}.el-sub-menu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-menu-item,.el-sub-menu.is-disabled .el-sub-menu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu .el-icon{vertical-align:middle;margin-right:5px;width:var(--el-menu-icon-width);text-align:center;font-size:18px}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{position:absolute;top:50%;right:var(--el-menu-base-level-padding);margin-top:-6px;transition:transform var(--el-transition-duration);font-size:12px;margin-right:0;width:inherit}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px var(--el-menu-base-level-padding);line-height:normal;font-size:12px;color:var(--el-text-color-secondary)}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{transition:var(--el-transition-duration-fast);opacity:0}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:15px}.el-message-box{display:inline-block;max-width:var(--el-messagebox-width);width:100%;padding-bottom:10px;vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);border:1px solid var(--el-border-color-lighter);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-box-shadow-light);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box}.el-message-box:focus{outline:0!important}.el-overlay.is-message-box .el-overlay-message-box{text-align:center;position:fixed;top:0;right:0;bottom:0;left:0;padding:16px;overflow:auto}.el-overlay.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-message-box__header{position:relative;padding:var(--el-messagebox-padding-primary);padding-bottom:10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:var(--el-messagebox-font-size);line-height:1;color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{position:absolute;top:var(--el-messagebox-padding-primary);right:var(--el-messagebox-padding-primary);padding:0;border:none;outline:0;background:0 0;font-size:var(--el-message-close-size,16px);cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{padding:10px var(--el-messagebox-padding-primary);color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input div.invalid>input{border-color:var(--el-color-error)}.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{position:absolute;top:50%;transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status.el-icon{position:absolute}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px;word-break:break-word}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{flex-direction:row-reverse}.el-message-box--center .el-message-box__title{position:relative;display:flex;align-items:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns{justify-content:center}.el-message-box--center .el-message-box__content{padding-left:calc(var(--el-messagebox-padding-primary) + 12px);padding-right:calc(var(--el-messagebox-padding-primary) + 12px);text-align:center}.fade-in-linear-enter-active .el-overlay-message-box{-webkit-animation:msgbox-fade-in var(--el-transition-duration);animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@-webkit-keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:15px 19px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary)}.el-message{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;max-width:calc(100% - 32px);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);position:fixed;left:50%;top:20px;transform:translate(-50%);background-color:var(--el-message-bg-color);transition:opacity var(--el-transition-duration),transform .4s,top .4s;padding:var(--el-message-padding);display:flex;align-items:center}.el-message.is-center{justify-content:center}.el-message.is-closable .el-message__content{padding-right:31px}.el-message p{margin:0}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message__icon{margin-right:10px}.el-message .el-message__badge{position:absolute;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{position:absolute;top:50%;right:19px;transform:translateY(-50%);cursor:pointer;color:var(--el-message-close-icon-color);font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}.el-notification{--el-notification-width:330px;--el-notification-padding:14px 26px 14px 13px;--el-notification-radius:8px;--el-notification-shadow:var(--el-box-shadow-light);--el-notification-border-color:var(--el-border-color-lighter);--el-notification-icon-size:24px;--el-notification-close-font-size:var(--el-message-close-size, 16px);--el-notification-group-margin-left:13px;--el-notification-group-margin-right:8px;--el-notification-content-font-size:var(--el-font-size-base);--el-notification-content-color:var(--el-text-color-regular);--el-notification-title-font-size:16px;--el-notification-title-color:var(--el-text-color-primary);--el-notification-close-color:var(--el-text-color-secondary);--el-notification-close-hover-color:var(--el-text-color-regular)}.el-notification{display:flex;width:var(--el-notification-width);padding:var(--el-notification-padding);border-radius:var(--el-notification-radius);box-sizing:border-box;border:1px solid var(--el-notification-border-color);position:fixed;background-color:var(--el-bg-color-overlay);box-shadow:var(--el-notification-shadow);transition:opacity var(--el-transition-duration),transform var(--el-transition-duration),left var(--el-transition-duration),right var(--el-transition-duration),top .4s,bottom var(--el-transition-duration);overflow-wrap:anywhere;overflow:hidden;z-index:9999}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right)}.el-notification__title{font-weight:700;font-size:var(--el-notification-title-font-size);line-height:var(--el-notification-icon-size);color:var(--el-notification-title-color);margin:0}.el-notification__content{font-size:var(--el-notification-content-font-size);line-height:24px;margin:6px 0 0;color:var(--el-notification-content-color);text-align:justify}.el-notification__content p{margin:0}.el-notification .el-notification__icon{height:var(--el-notification-icon-size);width:var(--el-notification-icon-size);font-size:var(--el-notification-icon-size)}.el-notification .el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:var(--el-notification-close-color);font-size:var(--el-notification-close-font-size)}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--success{--el-notification-icon-color:var(--el-color-success);color:var(--el-notification-icon-color)}.el-notification .el-notification--info{--el-notification-icon-color:var(--el-color-info);color:var(--el-notification-icon-color)}.el-notification .el-notification--warning{--el-notification-icon-color:var(--el-color-warning);color:var(--el-notification-icon-color)}.el-notification .el-notification--error{--el-notification-icon-color:var(--el-color-error);color:var(--el-notification-icon-color)}.el-notification-fade-enter-from.right{right:0;transform:translate(100%)}.el-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.el-notification-fade-leave-to{opacity:0}.el-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;height:100%;background-color:var(--el-overlay-color-lighter);overflow:auto}.el-overlay .el-overlay-root{height:0}.el-page-header.is-contentful .el-page-header__main{border-top:1px solid var(--el-border-color-light);margin-top:16px}.el-page-header__header{display:flex;align-items:center;justify-content:space-between;line-height:24px}.el-page-header__left{display:flex;align-items:center;margin-right:40px;position:relative}.el-page-header__back{display:flex;align-items:center;cursor:pointer}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{font-size:16px;margin-right:10px;display:flex;align-items:center}.el-page-header__icon .el-icon{font-size:inherit}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:var(--el-text-color-primary)}.el-page-header__breadcrumb{margin-bottom:16px}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-item-gap:16px;white-space:nowrap;color:var(--el-pagination-text-color);font-size:var(--el-pagination-font-size);font-weight:400;display:flex;align-items:center}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield}.el-pagination .el-select .el-input{width:128px}.el-pagination button{display:flex;justify-content:center;align-items:center;font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);padding:0 4px;border:none;border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box}.el-pagination button *{pointer-events:none}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:var(--el-pagination-hover-color)}.el-pagination button.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination button.is-active.is-disabled{font-weight:700;color:var(--el-text-color-secondary)}.el-pagination button.is-disabled,.el-pagination button:disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pagination button:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{margin-left:var(--el-pagination-item-gap);font-weight:400;color:var(--el-text-color-regular)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{display:flex;align-items:center;margin-left:var(--el-pagination-item-gap);font-weight:400;color:var(--el-text-color-regular)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{text-align:center;box-sizing:border-box}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{flex:1;display:flex;align-items:center;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 4px;background-color:var(--el-pagination-button-bg-color)}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{color:var(--el-text-color-placeholder);background-color:var(--el-disabled-bg-color)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{color:var(--el-text-color-secondary);background-color:var(--el-fill-color-dark)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);font-size:var(--el-pagination-font-size-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select .el-input{width:100px}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0;padding:0;margin:0;display:flex;align-items:center}.el-pager li{display:flex;justify-content:center;align-items:center;font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);padding:0 4px;border:none;border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:0}.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{font-weight:700;color:var(--el-text-color-secondary)}.el-pager li.is-disabled,.el-pager li:disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-popconfirm__main{display:flex;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin-top:8px}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);min-width:150px;border-radius:var(--el-popover-border-radius);border:1px solid var(--el-popover-border-color);padding:var(--el-popover-padding);z-index:var(--el-index-popper);color:var(--el-text-color-regular);line-height:1.4;text-align:justify;font-size:var(--el-popover-font-size);box-shadow:var(--el-box-shadow-light);word-break:break-all;box-sizing:border-box}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.el-progress{position:relative;line-height:1;display:flex;align-items:center}.el-progress__text{font-size:14px;color:var(--el-text-color-regular);margin-left:5px;min-width:50px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{flex-grow:1;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:var(--el-border-color-lighter);overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:var(--el-color-primary);text-align:right;border-radius:100px;line-height:1;white-space:nowrap;transition:width .6s ease}.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{transform:translateZ(0);-webkit-animation:indeterminate 3s infinite;animation:indeterminate 3s infinite}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{-webkit-animation:striped-flow 3s linear infinite;animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@-webkit-keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@-webkit-keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light)}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));border-left:0;color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:8px 15px;font-size:var(--el-font-size-base);border-radius:0}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:var(--el-border);border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button__original-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__original-radio:checked+.el-radio-button__inner{color:var(--el-radio-button-checked-text-color,var(--el-color-white));background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary))}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2;border-radius:var(--el-border-radius-base);box-shadow:none}.el-radio-button__original-radio:disabled+.el-radio-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{padding:12px 19px;font-size:var(--el-font-size-base);border-radius:0}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{padding:5px 11px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{display:inline-flex;align-items:center;flex-wrap:wrap;font-size:0}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary)}.el-radio{color:var(--el-radio-text-color);font-weight:var(--el-radio-font-weight);position:relative;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;outline:0;font-size:var(--el-font-size-base);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:32px;height:32px}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{padding:0 15px 0 9px;border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:var(--el-border-color-lighter)}.el-radio.is-bordered.el-radio--large{padding:0 19px 0 11px;border-radius:var(--el-border-radius-base)}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{padding:0 11px 0 7px;border-radius:var(--el-border-radius-base)}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-flex;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:var(--el-color-primary);background:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);width:var(--el-radio-input-width);height:var(--el-radio-input-height);background-color:var(--el-radio-input-bg-color);position:relative;cursor:pointer;display:inline-block;box-sizing:border-box}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{width:4px;height:4px;border-radius:var(--el-radio-input-border-radius);background-color:var(--el-color-white);content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio__original:focus-visible+.el-radio__inner{outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px;border-radius:var(--el-radio-input-border-radius)}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{width:14px;height:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{width:12px;height:12px}.el-rate{--el-rate-height:20px;--el-rate-font-size:var(--el-font-size-base);--el-rate-icon-size:18px;--el-rate-icon-margin:6px;--el-rate-void-color:var(--el-border-color-darker);--el-rate-fill-color:#f7ba2a;--el-rate-disabled-void-color:var(--el-fill-color);--el-rate-text-color:var(--el-text-color-primary)}.el-rate{display:inline-flex;align-items:center;height:32px}.el-rate:active,.el-rate:focus{outline:0}.el-rate__item{cursor:pointer;display:inline-block;position:relative;font-size:0;vertical-align:middle;color:var(--el-rate-void-color);line-height:normal}.el-rate .el-rate__icon{position:relative;display:inline-block;font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);transition:var(--el-transition-duration)}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{position:absolute;left:0;top:0}.el-rate .el-rate__icon.is-active{color:var(--el-rate-fill-color)}.el-rate__decimal{position:absolute;top:0;left:0;display:inline-block;overflow:hidden;color:var(--el-rate-fill-color)}.el-rate__text{font-size:var(--el-rate-font-size);vertical-align:middle;color:var(--el-rate-text-color)}.el-rate--large{height:40px}.el-rate--small{height:24px}.el-rate--small .el-rate__icon{font-size:14px}.el-rate.is-disabled .el-rate__item{cursor:auto;color:var(--el-rate-disabled-void-color)}.el-result{--el-result-padding:40px 30px;--el-result-icon-font-size:64px;--el-result-title-font-size:20px;--el-result-title-margin-top:20px;--el-result-subtitle-margin-top:10px;--el-result-extra-margin-top:30px}.el-result{display:flex;justify-content:center;align-items:center;flex-direction:column;text-align:center;box-sizing:border-box;padding:var(--el-result-padding)}.el-result__icon svg{width:var(--el-result-icon-font-size);height:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{margin:0;font-size:var(--el-result-title-font-size);color:var(--el-text-color-primary);line-height:1.3}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);line-height:1.3}.el-result__extra{margin-top:var(--el-result-extra-margin-top)}.el-result .icon-primary{--el-result-color:var(--el-color-primary);color:var(--el-result-color)}.el-result .icon-success{--el-result-color:var(--el-color-success);color:var(--el-result-color)}.el-result .icon-warning{--el-result-color:var(--el-color-warning);color:var(--el-result-color)}.el-result .icon-danger{--el-result-color:var(--el-color-danger);color:var(--el-result-color)}.el-result .icon-error{--el-result-color:var(--el-color-error);color:var(--el-result-color)}.el-result .icon-info{--el-result-color:var(--el-color-info);color:var(--el-result-color)}.el-row{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary)}.el-scrollbar{overflow:hidden;position:relative;height:100%}.el-scrollbar__wrap{overflow:auto;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3)}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__option-item.is-selected:not(.is-multiple).is-disabled{color:var(--el-text-color-disabled)}.el-select-dropdown__option-item.is-selected:not(.is-multiple).is-disabled:after{background-color:var(--el-text-color-disabled)}.el-select-dropdown__option-item:hover:not(.hover){background-color:transparent}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-disabled.is-selected{color:var(--el-text-color-disabled)}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size)}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;margin:6px 0!important;padding:0!important;box-sizing:border-box}.el-select-dropdown__option-item{font-size:var(--el-select-font-size);padding:0 32px 0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--el-text-color-regular);height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__option-item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown__option-item.is-disabled:hover{background-color:var(--el-bg-color)}.el-select-dropdown__option-item.is-selected{background-color:var(--el-fill-color-light);font-weight:700}.el-select-dropdown__option-item.is-selected:not(.is-multiple){color:var(--el-color-primary)}.el-select-dropdown__option-item.hover{background-color:var(--el-fill-color-light)!important}.el-select-dropdown__option-item:hover{background-color:var(--el-fill-color-light)}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-selected{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay)}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-selected .el-icon{position:absolute;right:20px;top:0;height:inherit;font-size:12px}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-selected .el-icon svg{height:inherit;vertical-align:middle}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:var(--el-border-color-light)}.el-select-group__split-dash{position:absolute;left:20px;right:20px;height:1px;background:var(--el-border-color-light)}.el-select-group__title{padding-left:20px;font-size:12px;color:var(--el-color-info);line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-v2{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px}.el-select-v2{display:inline-block;position:relative;vertical-align:middle;font-size:14px}.el-select-v2__wrapper{display:flex;align-items:center;flex-wrap:wrap;position:relative;box-sizing:border-box;cursor:pointer;padding:1px 30px 1px 0;border:1px solid var(--el-border-color);border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);transition:var(--el-transition-duration)}.el-select-v2__wrapper:hover{border-color:var(--el-text-color-placeholder)}.el-select-v2__wrapper.is-filterable{cursor:text}.el-select-v2__wrapper.is-focused{border-color:var(--el-color-primary)}.el-select-v2__wrapper.is-hovering:not(.is-focused){border-color:var(--el-border-color-hover)}.el-select-v2__wrapper.is-disabled{cursor:not-allowed;background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);border-color:var(--el-select-disabled-border)}.el-select-v2__wrapper.is-disabled:hover{border-color:var(--el-select-disabled-border)}.el-select-v2__wrapper.is-disabled.is-focus{border-color:var(--el-input-focus-border-color)}.el-select-v2__wrapper.is-disabled .is-transparent{opacity:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-select-v2__wrapper.is-disabled .el-select-v2__caret,.el-select-v2__wrapper.is-disabled .el-select-v2__combobox-input{cursor:not-allowed}.el-select-v2__wrapper .el-select-v2__input-wrapper{box-sizing:border-box;position:relative;-webkit-margin-start:12px;margin-inline-start:12px;max-width:100%;overflow:hidden}.el-select-v2__wrapper,.el-select-v2__wrapper .el-select-v2__input-wrapper{line-height:32px}.el-select-v2__wrapper .el-select-v2__input-wrapper input{--el-input-inner-height:calc(var(--el-component-size, 32px) - 8px);height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);min-width:4px;width:100%;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:none;margin:2px 0;outline:0;padding:0}.el-select-v2 .el-select-v2__tags-text{display:inline-block;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select-v2__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:14px}.el-select-v2__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select-v2__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select-v2__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-select-v2__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select-v2__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-select-v2__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select-v2--large .el-select-v2__wrapper .el-select-v2__combobox-input{height:32px}.el-select-v2--large .el-select-v2__caret,.el-select-v2--large .el-select-v2__suffix{height:40px}.el-select-v2--large .el-select-v2__placeholder{font-size:14px;line-height:40px}.el-select-v2--small .el-select-v2__wrapper .el-select-v2__combobox-input{height:16px}.el-select-v2--small .el-select-v2__caret,.el-select-v2--small .el-select-v2__suffix{height:24px}.el-select-v2--small .el-select-v2__placeholder{font-size:12px;line-height:24px}.el-select-v2 .el-select-v2__selection>span{display:inline-block}.el-select-v2:hover .el-select-v2__combobox-input{border-color:var(--el-select-border-color-hover)}.el-select-v2 .el-select__selection-text{text-overflow:ellipsis;display:inline-block;overflow-x:hidden;vertical-align:bottom}.el-select-v2 .el-select-v2__combobox-input{padding-right:35px;display:block;color:var(--el-text-color-regular)}.el-select-v2 .el-select-v2__combobox-input:focus{border-color:var(--el-select-input-focus-border-color)}.el-select-v2__input{border:none;outline:0;padding:0;margin-left:15px;color:var(--el-select-multiple-input-color);font-size:var(--el-select-font-size);-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px}.el-select-v2__input.is-small{height:14px}.el-select-v2__close{cursor:pointer;position:absolute;top:8px;z-index:var(--el-index-top);right:25px;color:var(--el-select-input-color);line-height:18px;font-size:var(--el-select-input-font-size)}.el-select-v2__close:hover{color:var(--el-select-close-hover-color)}.el-select-v2__suffix{display:inline-flex;position:absolute;right:12px;height:32px;top:50%;transform:translateY(-50%);color:var(--el-input-icon-color,var(--el-text-color-placeholder))}.el-select-v2__suffix .el-input__icon{height:inherit}.el-select-v2__suffix .el-input__icon:not(:first-child){margin-left:8px}.el-select-v2__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:var(--el-transition-duration);transform:rotate(180deg);cursor:pointer}.el-select-v2__caret.is-reverse{transform:rotate(0)}.el-select-v2__caret.is-show-close{font-size:var(--el-select-font-size);text-align:center;transform:rotate(180deg);border-radius:var(--el-border-radius-circle);color:var(--el-select-input-color);transition:var(--el-transition-color)}.el-select-v2__caret.is-show-close:hover{color:var(--el-select-close-hover-color)}.el-select-v2__caret.el-icon{height:inherit}.el-select-v2__caret.el-icon svg{vertical-align:middle}.el-select-v2__selection{white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;width:100%}.el-select-v2__input-calculator{left:0;position:absolute;top:0;visibility:hidden;white-space:pre;z-index:999}.el-select-v2__selected-item{line-height:inherit;height:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-wrap:wrap}.el-select-v2__placeholder{position:absolute;top:50%;transform:translateY(-50%);-webkit-margin-start:12px;margin-inline-start:12px;width:calc(100% - 52px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--el-input-text-color,var(--el-text-color-regular))}.el-select-v2__placeholder.is-transparent{color:var(--el-text-color-placeholder)}.el-select-v2 .el-select-v2__selection .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:var(--el-fill-color)}.el-select-v2 .el-select-v2__selection .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;color:var(--el-color-white)}.el-select-v2 .el-select-v2__selection .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select-v2 .el-select-v2__selection .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select-v2.el-select-v2--small .el-select-v2__selection .el-tag{margin:1px 0 1px 6px;height:18px}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:var(--el-fill-color-light)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.is-disabled:after{background-color:var(--el-text-color-disabled)}.el-select-dropdown .el-select-dropdown__option-item.is-selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown .el-select-dropdown__item.is-disabled:hover{background-color:unset}.el-select-dropdown .el-select-dropdown__item.is-disabled.selected{color:var(--el-text-color-disabled)}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size)}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px}.el-select{display:inline-block;position:relative;vertical-align:middle;line-height:32px}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select .el-select-tags-wrapper.has-prefix{margin-left:6px}.el-select--large{line-height:40px}.el-select--large .el-select-tags-wrapper.has-prefix{margin-left:8px}.el-select--small{line-height:24px}.el-select--small .el-select-tags-wrapper.has-prefix{margin-left:4px}.el-select .el-select__tags>span{display:inline-block}.el-select:hover:not(.el-select--disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-select-border-color-hover) inset}.el-select .el-select__tags-text{display:inline-block;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select .el-input__wrapper{cursor:pointer}.el-select .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-select-input-focus-border-color) inset!important}.el-select .el-input__inner{cursor:pointer}.el-select .el-input{display:flex}.el-select .el-input .el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:transform var(--el-transition-duration);transform:rotate(0);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{transform:rotate(-180deg)}.el-select .el-input .el-select__caret.is-show-close{font-size:var(--el-select-font-size);text-align:center;transform:rotate(0);border-radius:var(--el-border-radius-circle);color:var(--el-select-input-color);transition:var(--el-transition-color)}.el-select .el-input .el-select__caret.is-show-close:hover{color:var(--el-select-close-hover-color)}.el-select .el-input .el-select__caret.el-icon{position:relative;height:inherit;z-index:2}.el-select .el-input.is-disabled .el-input__wrapper{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select .el-input.is-disabled .el-input__inner,.el-select .el-input.is-disabled .el-select__caret{cursor:not-allowed}.el-select .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-select-input-focus-border-color) inset!important}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:var(--el-select-multiple-input-color);font-size:var(--el-select-font-size);-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-disabled{cursor:not-allowed}.el-select__input--iOS{position:absolute;left:0;top:0;z-index:6}.el-select__input.is-small{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:var(--el-index-top);right:25px;color:var(--el-select-input-color);line-height:18px;font-size:var(--el-select-input-font-size)}.el-select__close:hover{color:var(--el-select-close-hover-color)}.el-select__tags{position:absolute;line-height:normal;top:50%;transform:translateY(-50%);white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;cursor:pointer}.el-select__tags .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 6px 2px 0}.el-select__tags .el-tag:last-child{margin-right:0}.el-select__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;top:0;color:#fff}.el-select__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select__tags .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select__tags .el-tag--info{background-color:var(--el-fill-color)}.el-select__tags.is-disabled{cursor:not-allowed}.el-select__collapse-tags{white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;cursor:pointer}.el-select__collapse-tags .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 6px 2px 0}.el-select__collapse-tags .el-tag:last-child{margin-right:0}.el-select__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;top:0;color:#fff}.el-select__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select__collapse-tags .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select__collapse-tags .el-tag--info{background-color:var(--el-fill-color)}.el-select__collapse-tag{line-height:inherit;height:inherit;display:flex}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);display:inline-block;height:16px;border-radius:var(--el-border-radius-base);width:100%}.el-skeleton__circle{border-radius:50%;width:var(--el-skeleton-circle-size);height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size)}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:var(--el-font-size-small)}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{width:unset;display:flex;align-items:center;justify-content:center;border-radius:0}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:22%;height:22%}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:var(--el-skeleton-color)}.el-skeleton.is-animated .el-skeleton__item{background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px}.el-slider{width:100%;height:32px;display:flex;align-items:center}.el-slider__runway{flex:1;height:var(--el-slider-height);background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);position:relative;cursor:pointer}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{height:var(--el-slider-height);background-color:var(--el-slider-main-bg-color);border-top-left-radius:var(--el-slider-border-radius);border-bottom-left-radius:var(--el-slider-border-radius);position:absolute}.el-slider__button-wrapper{height:var(--el-slider-button-wrapper-size);width:var(--el-slider-button-wrapper-size);position:absolute;z-index:1;top:var(--el-slider-button-wrapper-offset);transform:translate(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;outline:0}.el-slider__button-wrapper:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{display:inline-block;width:var(--el-slider-button-size);height:var(--el-slider-button-size);vertical-align:middle;border:solid 2px var(--el-slider-main-bg-color);background-color:var(--el-color-white);border-radius:50%;box-sizing:border-box;transition:var(--el-transition-duration-fast);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:var(--el-slider-height);width:var(--el-slider-height);border-radius:var(--el-border-radius-circle);background-color:var(--el-slider-stop-bg-color);transform:translate(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;transform:translate(-50%);font-size:14px;color:var(--el-color-info);margin-top:15px;white-space:pre}.el-slider.is-vertical{position:relative;display:inline-flex;width:auto;height:100%;flex:0}.el-slider.is-vertical .el-slider__runway{width:var(--el-slider-height);height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:var(--el-slider-height);height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:var(--el-slider-button-wrapper-offset);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{display:inline-flex;vertical-align:top}.el-space__item{display:flex;flex-wrap:wrap}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{transform:rotate(360deg)}}@keyframes rotate{to{transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-step{position:relative;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-basis:auto!important;flex-shrink:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:var(--el-text-color-primary);border-color:var(--el-text-color-primary)}.el-step__head.is-wait{color:var(--el-text-color-placeholder);border-color:var(--el-text-color-placeholder)}.el-step__head.is-success{color:var(--el-color-success);border-color:var(--el-color-success)}.el-step__head.is-error{color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-step__head.is-finish{color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-step__icon{position:relative;z-index:1;display:inline-flex;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;box-sizing:border-box;background:var(--el-bg-color);transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:var(--el-text-color-placeholder)}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:.15s ease-out;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:var(--el-text-color-primary)}.el-step__title.is-wait{color:var(--el-text-color-placeholder)}.el-step__title.is-success{color:var(--el-color-success)}.el-step__title.is-error{color:var(--el-color-danger)}.el-step__title.is-finish{color:var(--el-color-primary)}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:var(--el-text-color-primary)}.el-step__description.is-wait{color:var(--el-text-color-placeholder)}.el-step__description.is-success{color:var(--el-color-success)}.el-step__description.is-error{color:var(--el-color-danger)}.el-step__description.is-finish{color:var(--el-color-primary)}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:flex;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:flex;align-items:stretch;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{flex-grow:1;display:flex;align-items:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:var(--el-text-color-placeholder)}.el-step.is-simple .el-step__arrow:before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:var(--el-fill-color-light)}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;flex-flow:column}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color)}.el-switch{display:inline-flex;align-items:center;position:relative;font-size:14px;line-height:20px;height:32px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:var(--el-transition-duration-fast);height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:var(--el-text-color-primary)}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{display:inline-flex;position:relative;align-items:center;min-width:40px;height:20px;border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));outline:0;border-radius:10px;box-sizing:border-box;background:var(--el-switch-off-color);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{width:100%;transition:all var(--el-transition-duration);height:16px;display:flex;justify-content:center;align-items:center;overflow:hidden;padding:0 4px 0 18px}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{font-size:12px;color:var(--el-color-white);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-switch__core .el-switch__action{position:absolute;left:1px;border-radius:var(--el-border-radius-circle);transition:all var(--el-transition-duration);width:16px;height:16px;background-color:var(--el-color-white);display:flex;justify-content:center;align-items:center;color:var(--el-switch-off-color)}.el-switch.is-checked .el-switch__core{border-color:var(--el-switch-border-color,var(--el-switch-on-color));background-color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__action{left:calc(100% - 17px);color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;line-height:24px;height:40px}.el-switch--large .el-switch__label{height:24px;font-size:14px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{min-width:50px;height:24px;border-radius:12px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{width:20px;height:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;line-height:16px;height:24px}.el-switch--small .el-switch__label{height:16px;font-size:12px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{min-width:30px;height:16px;border-radius:8px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{width:12px;height:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:solid 1px var(--el-border-color-lighter);border-radius:2px;background-color:#fff;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:var(--el-font-size-base)}.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:flex;align-items:center;margin-right:5px;margin-bottom:12px;margin-left:5px;height:unset}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0, 0, 0, .15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0, 0, 0, .15)}.el-table{position:relative;overflow:hidden;box-sizing:border-box;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;width:100%;max-width:100%;background-color:var(--el-table-bg-color);font-size:14px;color:var(--el-table-text-color)}.el-table__inner-wrapper{position:relative;display:flex;flex-direction:column;height:100%}.el-table__inner-wrapper:before{left:0;bottom:0;width:100%;height:1px}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{position:-webkit-sticky;position:sticky;left:0;min-height:60px;text-align:center;width:100%;display:flex;justify-content:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:var(--el-text-color-secondary)}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table__expand-icon{position:relative;cursor:pointer;color:var(--el-text-color-regular);font-size:12px;transition:transform var(--el-transition-duration-fast) ease-in-out;height:20px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table thead{color:var(--el-table-header-text-color);font-weight:500}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{padding:8px 0;min-width:0;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left;z-index:1}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding:0 12px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:14px}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table__footer-wrapper{border-top:var(--el-table-border)}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{content:"";position:absolute;background-color:var(--el-table-border-color);z-index:3}.el-table--border .el-table__inner-wrapper:after{left:0;top:0;width:100%;height:1px}.el-table--border:before{top:-1px;left:0;width:1px;height:100%}.el-table--border:after{top:-1px;right:0;width:1px;height:100%}.el-table--border .el-table__inner-wrapper{border-right:none;border-bottom:none}.el-table--border .el-table__footer-wrapper{position:relative;flex-shrink:0}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{position:-webkit-sticky!important;position:sticky!important;z-index:2;background:var(--el-bg-color)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{content:"";position:absolute;top:0;width:10px;bottom:-1px;overflow-x:hidden;overflow-y:hidden;box-shadow:none;touch-action:none;pointer-events:none}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px;box-shadow:none}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{position:-webkit-sticky!important;position:sticky!important;z-index:2;background:#fff;right:0}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{display:inline-flex;align-items:center;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{overflow:hidden;position:relative;flex:1}.el-table__body-wrapper .el-scrollbar__bar{z-index:2}.el-table .caret-wrapper{display:inline-flex;flex-direction:column;align-items:center;height:14px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:solid 5px transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:var(--el-table-border);z-index:10}.el-table__column-filter-trigger{display:inline-block;cursor:pointer}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{top:0;left:0;width:1px;height:100%;z-index:3;position:absolute;background-color:var(--el-table-border-color)}.el-table__border-bottom-patch{left:0;height:1px;z-index:3;position:absolute;background-color:var(--el-table-border-color)}.el-table__border-right-patch{top:0;height:100%;width:1px;z-index:3;position:absolute;background-color:var(--el-table-border-color)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:12px;line-height:12px;height:12px;text-align:center;margin-right:8px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-v2{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0, 0, 0, .15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0, 0, 0, .15)}.el-table-v2{font-size:14px}.el-table-v2 *{box-sizing:border-box}.el-table-v2__root{position:relative}.el-table-v2__root:hover .el-table-v2__main .el-virtual-scrollbar{opacity:1}.el-table-v2__main{display:flex;flex-direction:column-reverse;position:absolute;overflow:hidden;top:0;background-color:var(--el-bg-color);left:0}.el-table-v2__main .el-vl__horizontal,.el-table-v2__main .el-vl__vertical{z-index:2}.el-table-v2__left{display:flex;flex-direction:column-reverse;position:absolute;overflow:hidden;top:0;background-color:var(--el-bg-color);left:0;box-shadow:2px 0 4px #0000000f}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__horizontal,.el-table-v2__left .el-vl__vertical{z-index:-1}.el-table-v2__right{display:flex;flex-direction:column-reverse;position:absolute;overflow:hidden;top:0;background-color:var(--el-bg-color);right:0;box-shadow:-2px 0 4px #0000000f}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__horizontal,.el-table-v2__right .el-vl__vertical{z-index:-1}.el-table-v2__header-row,.el-table-v2__row{-webkit-padding-end:var(--el-table-scrollbar-size);padding-inline-end:var(--el-table-scrollbar-size)}.el-table-v2__header-wrapper{overflow:hidden}.el-table-v2__header{position:relative;overflow:hidden}.el-table-v2__footer{position:absolute;left:0;right:0;bottom:0;overflow:hidden}.el-table-v2__empty{position:absolute;left:0}.el-table-v2__overlay{position:absolute;left:0;right:0;top:0;bottom:0;z-index:9999}.el-table-v2__header-row{display:flex;border-bottom:var(--el-table-border)}.el-table-v2__header-cell{display:flex;align-items:center;padding:0 8px;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;background-color:var(--el-table-header-bg-color);color:var(--el-table-header-text-color);font-weight:700}.el-table-v2__header-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__header-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{transition:opacity,display var(--el-transition-duration);opacity:.6;display:none}.el-table-v2__sort-icon.is-sorting{display:block;opacity:1}.el-table-v2__row{border-bottom:var(--el-table-border);display:flex;align-items:center;transition:background-color var(--el-transition-duration)}.el-table-v2__row.is-hovered,.el-table-v2__row:hover{background-color:var(--el-table-row-hover-bg-color)}.el-table-v2__row-cell{height:100%;overflow:hidden;display:flex;align-items:center;padding:0 8px}.el-table-v2__row-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__row-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__expand-icon{margin:0 4px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table-v2__expand-icon svg{transition:transform var(--el-transition-duration)}.el-table-v2__expand-icon.is-expanded svg{transform:rotate(90deg)}.el-table-v2:not(.is-dynamic) .el-table-v2__cell-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-table-v2.is-dynamic .el-table-v2__row{overflow:hidden;align-items:stretch}.el-table-v2.is-dynamic .el-table-v2__row .el-table-v2__row-cell{word-break:break-all}.el-tabs{--el-tabs-header-height:40px}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:var(--el-color-primary);z-index:1;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);list-style:none}.el-tabs__new-tab{display:flex;align-items:center;justify-content:center;float:right;border:1px solid var(--el-border-color);height:20px;width:20px;line-height:20px;margin:10px 0 10px 10px;border-radius:3px;text-align:center;font-size:12px;color:var(--el-text-color-primary);cursor:pointer;transition:all .15s}.el-tabs__new-tab .is-icon-plus{height:inherit;width:inherit;transform:scale(.8)}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:var(--el-border-color-light);z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:var(--el-text-color-secondary);width:20px;text-align:center}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;white-space:nowrap;position:relative;transition:transform var(--el-transition-duration);float:left;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:var(--el-tabs-header-height);box-sizing:border-box;display:flex;align-items:center;justify-content:center;list-style:none;font-size:var(--el-font-size-base);font-weight:500;color:var(--el-text-color-primary);position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus-visible{box-shadow:0 0 2px 2px var(--el-color-primary) inset;border-radius:3px}.el-tabs__item .is-icon-close{border-radius:50%;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);margin-left:5px}.el-tabs__item .is-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{position:relative;font-size:12px;width:0;height:14px;overflow:hidden;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);border:1px solid transparent;margin-top:-1px;color:var(--el-text-color-secondary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay);border-right-color:var(--el-border-color);border-left-color:var(--el-border-color)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover{padding-left:13px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover{padding-right:13px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__active-bar.is-left{right:0;left:auto}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid var(--el-border-color-light);border-bottom:none;border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid var(--el-border-color-light);border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid var(--el-border-color-light);border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter var(--el-transition-duration);animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave var(--el-transition-duration);animation:slideInRight-leave var(--el-transition-duration)}.slideInLeft-enter{-webkit-animation:slideInLeft-enter var(--el-transition-duration);animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave var(--el-transition-duration);animation:slideInLeft-leave var(--el-transition-duration)}@-webkit-keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@-webkit-keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(100%);opacity:0}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@-webkit-keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(-100%);opacity:0}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px}.el-tag{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary);--el-tag-text-color:var(--el-color-primary);background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);display:inline-flex;justify-content:center;align-items:center;height:24px;padding:0 9px;font-size:var(--el-tag-font-size);line-height:1;border-width:1px;border-style:solid;border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px}.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color)}.el-tag .el-tag__close:hover{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.el-tag .el-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{margin-left:6px}.el-tag--dark{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3);--el-tag-text-color:var(--el-color-white)}.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--el-tag-text-color:var(--el-color-white)}.el-tag--plain{--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary);--el-tag-bg-color:var(--el-fill-color-blank)}.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{padding:0 11px;height:32px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{padding:0 7px;height:20px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular)}.el-text{align-self:center;margin:0;padding:0;font-size:var(--el-text-font-size);color:var(--el-text-color);word-break:break-all}.el-text.is-truncated{display:inline-block;max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.disabled{color:var(--el-datepicker-border-color);cursor:not-allowed}.time-select-item:hover{background-color:var(--el-fill-color-light);font-weight:700;cursor:pointer}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:700}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid var(--el-timeline-node-color)}.el-timeline-item .el-timeline-item__icon{color:var(--el-color-white);font-size:var(--el-font-size-small)}.el-timeline-item__node{position:absolute;background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);border-radius:50%;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.el-timeline-item__node--normal{left:-1px;width:var(--el-timeline-node-size-normal);height:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{left:-2px;width:var(--el-timeline-node-size-large);height:var(--el-timeline-node-size-large)}.el-timeline-item__node.is-hollow{background:var(--el-color-white);border-style:solid;border-width:2px}.el-timeline-item__node--primary{background-color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-timeline-item__node--success{background-color:var(--el-color-success);border-color:var(--el-color-success)}.el-timeline-item__node--warning{background-color:var(--el-color-warning);border-color:var(--el-color-warning)}.el-timeline-item__node--danger{background-color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-timeline-item__node--info{background-color:var(--el-color-info);border-color:var(--el-color-info)}.el-timeline-item__dot{position:absolute;display:flex;justify-content:center;align-items:center}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);line-height:1;font-size:var(--el-font-size-small)}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline{--el-timeline-node-size-normal:12px;--el-timeline-node-size-large:14px;--el-timeline-node-color:var(--el-border-color-light)}.el-timeline{margin:0;font-size:var(--el-font-size-base);list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline .el-timeline-item__center{display:flex;align-items:center}.el-timeline .el-timeline-item__center .el-timeline-item__wrapper{width:100%}.el-timeline .el-timeline-item__center .el-timeline-item__tail{top:0}.el-timeline .el-timeline-item__center:first-child .el-timeline-item__tail{height:calc(50% + 10px);top:calc(50% - 10px)}.el-timeline .el-timeline-item__center:last-child .el-timeline-item__tail{display:block;height:calc(50% - 10px)}.el-tooltip-v2__content{--el-tooltip-v2-padding:5px 10px;--el-tooltip-v2-border-radius:4px;--el-tooltip-v2-border-color:var(--el-border-color);border-radius:var(--el-tooltip-v2-border-radius);color:var(--el-color-black);background-color:var(--el-color-white);padding:var(--el-tooltip-v2-padding);border:1px solid var(--el-border-color)}.el-tooltip-v2__arrow{position:absolute;color:var(--el-color-white);width:var(--el-tooltip-v2-arrow-width);height:var(--el-tooltip-v2-arrow-height);pointer-events:none;left:var(--el-tooltip-v2-arrow-x);top:var(--el-tooltip-v2-arrow-y)}.el-tooltip-v2__arrow:before{content:"";width:0;height:0;border:var(--el-tooltip-v2-arrow-border-width) solid transparent;position:absolute}.el-tooltip-v2__arrow:after{content:"";width:0;height:0;border:var(--el-tooltip-v2-arrow-border-width) solid transparent;position:absolute}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow{bottom:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:before{border-top-color:var(--el-color-white);border-top-width:var(--el-tooltip-v2-arrow-border-width);border-bottom:0;top:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:after{border-top-color:var(--el-border-color);border-top-width:var(--el-tooltip-v2-arrow-border-width);border-bottom:0;top:100%;z-index:-1}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow{top:0}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:before{border-bottom-color:var(--el-color-white);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:after{border-bottom-color:var(--el-border-color);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:100%;z-index:-1}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow{right:0}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:before{border-left-color:var(--el-color-white);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:after{border-left-color:var(--el-border-color);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:100%;z-index:-1}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow{left:0}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:before{border-right-color:var(--el-color-white);border-right-width:var(--el-tooltip-v2-arrow-border-width);border-left:0;right:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:after{border-right-color:var(--el-border-color);border-right-width:var(--el-tooltip-v2-arrow-border-width);border-left:0;right:100%;z-index:-1}.el-tooltip-v2__content.is-dark{--el-tooltip-v2-border-color:transparent;background-color:var(--el-color-black);color:var(--el-color-white);border-color:transparent}.el-tooltip-v2__content.is-dark .el-tooltip-v2__arrow{background-color:var(--el-color-black);border-color:transparent}.el-transfer{--el-transfer-border-color:var(--el-border-color-lighter);--el-transfer-border-radius:var(--el-border-radius-base);--el-transfer-panel-width:200px;--el-transfer-panel-header-height:40px;--el-transfer-panel-header-bg-color:var(--el-fill-color-light);--el-transfer-panel-footer-height:40px;--el-transfer-panel-body-height:278px;--el-transfer-item-height:30px;--el-transfer-filter-height:32px}.el-transfer{font-size:var(--el-font-size-base)}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{vertical-align:top}.el-transfer__button:nth-child(2){margin:0 0 0 10px}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button .el-icon+span{margin-left:0}.el-transfer-panel{overflow:hidden;background:var(--el-bg-color-overlay);display:inline-block;text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width);max-height:100%;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:var(--el-transfer-panel-body-height);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);border-bottom:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:var(--el-transfer-panel-body-height);overflow:auto;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular)}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;box-sizing:border-box;padding-left:22px;line-height:var(--el-transfer-item-height)}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;padding:15px;box-sizing:border-box}.el-transfer-panel__filter .el-input__inner{height:var(--el-transfer-filter-height);width:100%;font-size:12px;display:inline-block;box-sizing:border-box;border-radius:calc(var(--el-transfer-filter-height)/ 2)}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{display:flex;align-items:center;height:var(--el-transfer-panel-header-height);background:var(--el-transfer-panel-header-bg-color);margin:0;padding-left:15px;border:1px solid var(--el-transfer-border-color);border-top-left-radius:var(--el-transfer-border-radius);border-top-right-radius:var(--el-transfer-border-radius);box-sizing:border-box;color:var(--el-color-black)}.el-transfer-panel .el-transfer-panel__header .el-checkbox{position:relative;display:flex;width:100%;align-items:center}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:var(--el-text-color-primary);font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;top:50%;transform:translate3d(0,-50%,0);color:var(--el-text-color-secondary);font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:var(--el-transfer-panel-footer-height);background:var(--el-bg-color-overlay);margin:0;padding:0;border:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius)}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:var(--el-text-color-regular)}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding:6px 15px 0;color:var(--el-text-color-secondary);text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-tree{--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree{position:relative;cursor:default;background:var(--el-fill-color-blank);color:var(--el-tree-text-color);font-size:var(--el-font-size-base)}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:var(--el-text-color-secondary);font-size:var(--el-font-size-base)}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:var(--el-color-primary)}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{display:flex;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px;box-sizing:content-box}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:var(--el-tree-expand-icon-color);font-size:12px;transform:rotate(0);transition:transform var(--el-transition-duration) ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{margin-right:8px;font-size:var(--el-font-size-base);color:var(--el-tree-expand-icon-color)}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-tree-select{--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected:after{content:none}.el-tree-select__popper .el-select-dropdown__item{flex:1;background:0 0!important;padding-left:0;height:20px;line-height:20px}.el-upload{--el-upload-dragger-padding-horizontal:40px;--el-upload-dragger-padding-vertical:10px}.el-upload{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:var(--el-text-color-regular);margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0}.el-upload--picture-card{--el-upload-picture-card-size:148px;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;width:var(--el-upload-picture-card-size);height:var(--el-upload-picture-card-size);cursor:pointer;vertical-align:top;display:inline-flex;justify-content:center;align-items:center}.el-upload--picture-card i{font-size:28px;color:var(--el-text-color-secondary)}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{padding:var(--el-upload-dragger-padding-horizontal) var(--el-upload-dragger-padding-vertical);background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;text-align:center;cursor:pointer;position:relative;overflow:hidden}.el-upload-dragger .el-icon--upload{font-size:67px;color:var(--el-text-color-placeholder);margin-bottom:16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{padding:calc(var(--el-upload-dragger-padding-horizontal) - 1px) calc(var(--el-upload-dragger-padding-vertical) - 1px);background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary)}.el-upload-list{margin:10px 0 0;padding:0;list-style:none;position:relative}.el-upload-list__item{transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:var(--el-text-color-regular);margin-bottom:5px;position:relative;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{display:none;position:absolute;right:5px;top:50%;cursor:pointer;opacity:.75;color:var(--el-text-color-regular);transition:opacity var(--el-transition-duration);transform:translateY(-50%)}.el-upload-list__item .el-icon--close:hover{opacity:1;color:var(--el-color-primary)}.el-upload-list__item .el-icon--close-tip{display:none;position:absolute;top:1px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:var(--el-color-primary);font-style:normal}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;justify-content:center;flex-direction:column;width:calc(100% - 30px);margin-left:4px}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{color:var(--el-text-color-regular);display:inline-flex;text-align:center;align-items:center;padding:0 4px;transition:color var(--el-transition-duration);font-size:var(--el-font-size-base)}.el-upload-list__item-name .el-icon{margin-right:6px;color:var(--el-text-color-secondary)}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none;height:100%;justify-content:center;align-items:center;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:var(--el-text-color-regular);display:none}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{--el-upload-list-picture-card-size:148px;display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;width:var(--el-upload-list-picture-card-size);height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;padding:0;display:inline-flex}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:block}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.el-upload-list--picture-card .el-upload-list__item-status-label{right:-15px;top:-6px;width:40px;height:24px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;display:inline-flex;justify-content:center;align-items:center;color:#fff;opacity:0;font-size:20px;background-color:var(--el-overlay-color-lighter);transition:opacity var(--el-transition-duration)}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:1rem}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{top:50%;left:50%;transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;margin-top:10px;padding:10px;display:flex;align-items:center}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:inline-flex}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{display:inline-flex;justify-content:center;align-items:center;width:70px;height:70px;-o-object-fit:contain;object-fit:contain;position:relative;z-index:1;background-color:var(--el-color-white)}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{right:-15px;top:-6px;width:40px;height:24px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-cover__label i{font-size:12px;margin-top:11px;transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:var(--el-overlay-color-light);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;transition:var(--el-transition-md-fade);margin-top:60px}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:var(--el-text-color-primary)}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-vl__wrapper{position:relative}.el-vl__wrapper:hover .el-virtual-scrollbar,.el-vl__wrapper.always-on .el-virtual-scrollbar{opacity:1}.el-vl__window{scrollbar-width:none}.el-vl__window::-webkit-scrollbar{display:none}.el-virtual-scrollbar{opacity:0;transition:opacity .34s ease-out}.el-virtual-scrollbar.always-on{opacity:1}.el-vg__wrapper{position:relative}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius, 4px)}.el-popper{position:absolute;border-radius:var(--el-popper-border-radius);padding:5px 11px;z-index:2000;font-size:12px;line-height:20px;min-width:10px;word-wrap:break-word;visibility:visible}.el-popper.is-dark{color:var(--el-bg-color);background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark .el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-text-color-primary);right:0}.el-popper.is-light{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light .el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-bg-color-overlay);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{position:absolute;width:10px;height:10px;z-index:-1}.el-popper__arrow:before{position:absolute;width:10px;height:10px;z-index:-1;content:" ";transform:rotate(45deg);background:var(--el-text-color-primary);box-sizing:border-box}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent!important;border-bottom-color:transparent!important}.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-select-dropdown__item{font-size:var(--el-font-size-base);padding:0 32px 0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--el-text-color-regular);height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.selected{color:var(--el-color-primary);font-weight:700}.el-statistic{--el-statistic-title-font-weight:400;--el-statistic-title-font-size:var(--el-font-size-extra-small);--el-statistic-title-color:var(--el-text-color-regular);--el-statistic-content-font-weight:400;--el-statistic-content-font-size:var(--el-font-size-extra-large);--el-statistic-content-color:var(--el-text-color-primary)}.el-statistic__head{font-weight:var(--el-statistic-title-font-weight);font-size:var(--el-statistic-title-font-size);color:var(--el-statistic-title-color);line-height:20px;margin-bottom:4px}.el-statistic__content{font-weight:var(--el-statistic-content-font-weight);font-size:var(--el-statistic-content-font-size);color:var(--el-statistic-content-color)}.el-statistic__value{display:inline-block}.el-statistic__prefix{margin-right:4px;display:inline-block}.el-statistic__suffix{margin-left:4px;display:inline-block}.el-button{height:32rem!important;padding:8rem 15rem!important;font-size:14rem!important}.el-input__wrapper{padding:1rem 11rem!important}.el-input{height:32rem!important;font-size:14rem!important}.jt-drawing-row .col-left{font-size:14rem!important}.el-color-picker__trigger{height:32rem!important;padding:4rem!important}.el-radio-button__inner{padding:8rem 15rem!important;font-size:14rem}.el-textarea__inner{padding:5rem 11rem!important;font-size:14rem}.el-input__inner{height:32rem!important;font-size:14rem!important}.jt-drawing-row{display:flex;flex-direction:row;height:40rem;align-items:center}.jt-drawing-row .col-left{display:flex;align-items:center;justify-content:right;width:60rem;font-family:Alimama_ShuHeiTi_Bold;font-weight:700;margin-right:8rem}.jt-drawing-row .col-main{flex:1;display:flex;flex-direction:row}.jt-drawing-row .col-main .el-input--suffix{background-color:#fff0}.jt-drawing-row .col-main .el-input--suffix *{background-color:#fff0;color:#fff}.jt-drawing-row .col-main .el-input-number__decrease,.jt-drawing-row .col-main .el-input-number__increase{background-color:#3489ff;color:#fff}.jt-drawing-dialog{pointer-events:none}.jt-drawing-dialog .el-dialog{pointer-events:auto;position:absolute!important;background:rgba(5,45,155,.7);min-width:280rem;overflow:hidden;margin-top:0rem}.jt-drawing-dialog .el-dialog .el-dialog__header{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAAyCAIAAAD9fhrKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NTc1YTY2Yi1hY2U5LTUyNDctODM5MS01MGJjMjM4MDkxMDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDY4MTUxMzk2RDM1MTFFRDkzM0JDNEQ5N0IwQTIxRjYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDY4MTUxMzg2RDM1MTFFRDkzM0JDNEQ5N0IwQTIxRjYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YjZlNTUzODYtMzRjZC02NDQyLWI4OTktODY4YTdiYTNkMzgyIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjg1NzVhNjZiLWFjZTktNTI0Ny04MzkxLTUwYmMyMzgwOTEwOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po+VQtwAACdUSURBVHja7H1bluM4kiUMfEjuHpFZtY4+/TGLmQ3MmTMbnf1MdUX6QyIJ2MAAAjC8+JB7ZHZXh7LKQ6IoECSBy2sXFwb4/X/+X2FfEqDv5dh35mXeC+k2CzD/+XfxL72BeVbv04KI7uP6ByD7pZTy6ToMnUTwv3f7rgWG/cNXrhz7AcVtUfOiwP/kOg6mLGRVoq1JUewjsAoLWJQ2RdlTg7CD+y+eJW3MziVU1dfK/wV2LIhXJpQJ/nQhOUFWWxDJRYjnwnfItkB2Z8w/yC7sr9fnXpj8Y/9d27hw/2D4zm/0/4V92EcRtq+bMP9J+AX98UdadxN8oy/D/tXdBeWAvsBQM7/FvwklxzemJ0xyfrflu6JG1T+Hc1mrhKEA/wfTQ9BfAD119x9Ca2R1ZjuEqwdq/Kb7C9vO3oQzZJ9AKdAzqDuoGVC5r3r3j8Gp62XoJaT9g3WBDK3crwwIdfB+mxUmyJP0HXNGAj/uM1zNQWTs8MChMOvJEQYMuDxdepBAQGM7810t2MHIioItnEqwbOx66GBadMSXHHQiCgBHFmDV8h+rJcQPEUaLk+WIFi5YDnyQXPoUs0R+oyTfEWvdkKFaskPYju0t1RLCDrxM/luoHejIm+0qbZ9g6+P2/snOBWDRQVPAggLOgMEBFRh7PoY+DPaJvUIYIvjeb3eG9b39tH6zFoL0Q9eHzVt6A1qOKMdYE7cD+lsBDCtdya7B2QINBEj1YZqMxSAwIKL7J3DVdI0WHbWgY4HdyIp2Z7d+lvreTa+hfHep/M/ZhZS9Gr7pbthqXsmtsdXpepS9MHXTi5xf5XIzX3XXf/tfBkmer2MHkPKdGr0SOckyXGzoO60IYIGBUcEdYFZKSuikFMBLT7pxQprYwXrifAZwtfto3pi9bVEcXVKSVcKtPYT5lSnMlOAaQMKKUobEv2UXF9a7kx4vbkRWnGsxAKxnAIRnrPAtg9FFYM8l93Pg/YA9A31zZCeJfOOBv3znykOv2KG6W/YVpu+xtlHUjlvWXGzu3Dqd6rflx/ZRkH+0vEFofssYCXAbtSNB7O6gxylGfNhRGFFJOdT6jbbFR4jEcHa4EqKrlkOsD2LKs2J9AlGKdVtucv4I9TdQpftrrH88BUSO3QVHI7RaboRWiJW7zy+zoW/jd4Ie0b472y+Q2F+AwHXuXv79f39/GiHr3pCgXQpSxaMeYOx7cxYGBHIKkHIKQhxJ6MOimxQI25jVdWBCy0Up941DSE4JAfKQtUURDcqawrT21YUUnVHkUVoJfByheE0DCGLysIiwkiEX6zwZctkHb3JHofU0ivee7aJx/QoxOTT6b2OVMCmE/0RU0SctOfsqnOz6rS9KszI5Umh2dJHWNjsFXSsw+7nIcCEtKuys2VfILxcWwIf8TdGrI3wxQpQHU/zi5JEjD8HWclhMxX4ecMHgi4ZesOgyBGsZWokCrWD5kPM9otXwbOLK9OphesYiOWvWFA3qddNbivHFc81iq7r8ZrrvJ2Jz/zjuRqnuvQm46rtmsFO0Yaql4w7U4fH5YuJD+JiWsB3Dj9HRYdp0J81LGE7nySMmPZfxflbAemw6wGW42RLMj+bZHEtcL1145NmiPEMWGKmNAwOMkYchZyaenRYiWmgpLx0xcGfXrjwXdMw5xSG/3ZJ/5LKXa0D++I4+R9gKVwwtuVrpNzj6HS7syt/Fuj+E5ghJAAblHeFxG2rhzyWNfgRrZ2HPNDDCVjQm2P4ltPk9kZUfRRmssXRMgzGIhftL7zdCpBuClYxYi02LC7KWwK+JSH4Yj5tEhZiyjLwfBaiq4lSKGonKgzUBK5xdQr5C9wfT/5HCfx5vJhcRkQtYKVrN77BMnjtJPT5pGHK4LCCKHSBidDe/rzQt2S+7CEINL4bBsX7XiNURcTdot5/18NIPXVfiFK8GNB/tGZYhiWBSvt/n8gnN7+9kEccCJSSH4Ai4fsG+stU3BzDI+OEPMS/K7GXgz0foAf6wgVkiYIkJMk2F7/NimBayADDClrZIJDCHLUQBGTdCcKAsPXcKWqODsqABuJPFJApGpx+sskHE20jmINK6KFuAbxvgmR2cCoTE3le5KAoeODNymG7ZKP/IcbdjNrEZTmzVfzMaySEojcE3QeokTnEoYVCFCSxGAT4e3uCU7i/oxMokDCzQKq8MFeTRyv1OquEZoU/pURFgisp1oFhnfiWaxgYCkkEGH8SZMJDi1kBadlvEEcol+x6q4tQ2TwMGw8ClHzF2snu6vN0nFx4mwOUAyILQNNPY4tN1WKUeKDAr/Cj/Cg3QPBnMmhxm4bKoD1PUSML8SmcCZmCmC+dUCwizumlWobYFbEWUs3o8psoXijTeElqsCBeCVE+4wFcEIQsVg9IZNC3hyZhgI7AY1LUVv9KWFJhM/SZioY23iHN1O6bsJGd2lS1VZra/AzY0/HatTsQXG6Vl75MOhoySNjhIHlCzvq6xxMEmVCXH4sSms9wKMmLFeA0bHMxEK9Nl5jehZrEerTM8BUHmaIU5WvHzCvWW06u0NC2pJSZohXJQw3eUXfOZggX1wYMwhn1xU2EfqjZfHYhv1/F9MhGbZjw9xIkrAM0GJG6zoUs5ZhUHRR+PhWCKMGscDDlaNPUUgzcf9+V6IUVLJFSLUSp+ahC3m/9f+v6+UHDoQ9EYCAewWu81rILXyrY4cYMkdHfEyjNNYONMPOLDVd3L1MqVeWGmSqVgiyJ1j2AYptSYtACA2Haz94jN1gOprhSLFbEThhIAErkEIO7TIkOhwPA3+6EQ9cNhUUnEdAvW+0A4SnYdmCiZGhdwHfZCkTMpjlDZD9t8KtlFp+4ATNSuyJjcc1T2KC/rOGQmtIs04uc7uC+0MtxK6GVFFei14VY0QFiEfZipdpiVCajl/RXU1Azi7DaS2HoCRNzlVOmFzTt949XvwlMlKqzoWYnqZIDjZRxvcrkZJiWYkuUwa90NDUi836fn67h2X4dZWHKi+JMANJIMWf1tMphlbj4obTFr7GjokGNSEo95LMIUtgAvfTct2haFERQgYAF6FuMxCDzaoR+rDvQOfIQc+6Af0XaCFPjWYDvV+pEPVmCizfvxv3DqfqgA07sb9sRjARdgfVS/UoLHR31svBBwn/aHa8WPlf8Q07rh1pM6KZBHytXSMB1cx1z+YnQoFYOygQjMhB6RGaZ4ed6jkIRgmuNUihYrWg0erdoxYM7+AlotFAnqZQUxOej+2QNfDa0QK5aOiFZ/gKVp6eGTM9Xjt5UJihpdrYfsFbjKHxWHAAtqStYeyUKv0Zj+dB36DoCcpVHAQd+DV2xaFnz7mEyIZ5AmpeWV2DCQHS8rCcOzDGaZkI7uDmEW6Vl2FBIjI8mU+IxFetgiRZ94n2LUA1Cu5peAm8IjUgA17nnx7qqIXLGXeG0fU9sHYm5eozMNJg9kmldiOsn516qC4TGjS/JgwEQWxYY0iqWqDbVYK2tnpddKJPeCl4O1nbG0TImKmSyOdWJxUuXZ8aFMVp9Ej6/7G3MWUIv4ivFELH7H+UsyIBf0b3qZzt8NmPC1TaiKLlZBZkuDVqjWAcFuxP4pRSseyWJlWNAfjmxQ0ysQTcvFdX6t1OW3fMyxQZ8OhO/YstLtM6xtLEuCAshgEkcDWXbo0KBJMnDDBHIb0M3Xceh7mQwacg0+CEAx1lsDNYN1Xn2nb2/3ZRz70WEWRHaUR4jZaVgY6SU5/KdZRRjSvDH7wUR/wyCQJe/bWI9WQ66oka8RIUMAiD67YDFksV6ira3UD6E+BhLHBDBvIomCE4Ij1vigaFbY3hh/y0+zRLBsH5Ect8nUjo0MZKcTY3NMj4gN8QsTXplrzFgPUhKvQC42p0JVWVobpxjbWiFNWrOVzmkIYhEAZo4EZw1dPhC1R6sLmv8hVAc9c90qPTUTA8r5DbQSVZP/GjF1epXYGSVtaZen4WsHsA4oVbgl0kc6Zv8MUkrrRZiUghSzwqGUJiv8FXuac4NxxKuCWVl4aPe72LlE93mxCIP3aca+uww976xHYMsAUkeeMhMeLkyLYtw1nUyUMAQdmVGIFpPBO0g4R2YchsTXtQ5HYsmngY0JZJxLeDK4WiYgC+fdxvVvwTggMW/7UNmF6aLYjuxYfh+Moj/E5p55rzBy8Ky1MLkwfw85ugh+UrGqaRzBL0V5IhBHNzBUOF6ZFmxhJU5JFHRRM3ChyKV0kUlOLFa0rZogBvpV6joCVWzqDCw3WO4GrcRqtnrScvScvDaMkGIU307AZ2mawIo1awW6/qJ6O+aYjH4WV6+lTNQC9w0w6wvqdHjcBWqerHwECq0MDzS9ZobJYgp3ZoEnSuZBcrPB42iBJlItZM5xfmUhkhZYA7r+Ns3OFzUtNPPIY9YGbHE6sApMvZ1UeafpRrhq2SH049okePiARMLw4lIAL2+CwGAYxSihQxwKTQbbgJ011EZTEmoAcVQxzo7wY4eiFo1gHtIhYh7YAVblTxRYcehAnYwgYJPwM+kzfx/tEsmbvLbpr4oZfuifDeysoer+wvwnDfE3g5u8f2Y6OvPclsyljPKCkkWRoOhyt0DFXZXSGdcXlg+DVqFwsi/IIYw9J7/dGBB0bUfdOppvqEVuTGWiVfesB6ptKwKsq1e1GL3p0jrAsKLWzW9wLmPhASeE35nG9WiqItzmmd/LBLNMQDfRCRPQ+EaZ+rASfYYNLNJbwiwraaEdXnHOCRNpMmBKzYIJT0oIlzWoyvuiHacOdxWCuB4mzMTJW4nOFWLGCF7pYBRzKXD+hWGnAsICPEM6oue9W7w34THCvTHf5SxZx5PbDz5Rsb3bkXrioYd2qz6lnbIYjShoVKmgi9b0acyIp30nSbSGrjL8V8BNIue75mDYkJoCoBDxkSNW5nLvo5UkT/yHcEpO6hwL2K/6b6K/rA6JClDhgYaHVVfABnj1BzlU3XNQkqzcDRBVGYrdCFTgY55pvJYZHSJh0po8oQ5ooPSOlkJLgAp6axDxeumtFZ5uyETWCXwaRyjHgJyzPM4ByglXJ+DSy7stAeIMU4xhIvg5oOEmQp6IghEBhBBCCREjx/wWOgTiJ4pMiq8RaEgTNZz1JW37m6pTnOEMhMGmEWx746PGmkdk2WzAZ2e0HUuUryBUVfAqQS3wF9nbSLDjc4MqlIr7DxjsyOkN1OIIEUppw7Qh82okgSd/yKVfyflNqpufv5Wq7KsPVSJNZh7Z3Kl8TAL3BpMfe/WfuvEbnsAc19ZJ3yOZ4ccPa9bkGBSAyZIjUtBX/3qCSpXRw2yH3lK526Jc+cus3jWNQoJzfmKpH6/IVRAuh1n95CxagkndGI0O6wgiJBHOqnuDV6OK0EzkdlAGupzeBh7lpHRZPLggxqxRAn+AFlV9KgcF8W0sOGhiP96yP9no8djVEJsUoKQPmDHcAqRSllZKQuQ5IPtCJ1JOk5ujcs+XC9A0KU1q9o/VTnWJqFSyqhaxstbQN7ncc6s741ZU1eEbTWbG2nAg7t2kDXp1GrCSYReoh4TbjyYW9jByxNUW4kHP43BfFhqP416H4KhEpOk7Gp+crbROtZpsy7C4a9/d7Pij2dcAzjtSUVIyACiTiTCsCFFXZxX9SSwmvgRgNIrxRwZegXn5CxbAy2teXCjn/IsBNwsMRRxQDUOWaazPGJmom+MqTKe1s6i5FHaHXDAxdjSfZAefbdtjO9sqRHV/qPgudmgjxqmKUNGxMm6CdUcRZrQMc5BiGKENBHQOrbASVWFuSk06vFYWrRYvufc2Euwy2wH3WGEWikZzAxVl0UpkM28i3HVXbcvPoRMrcWc9Kj/+9Dnnwzry5IQ2Zomq+LXyF8KUwZAheZ/mKOMB8PDQORWeiJJBMhWw9D2kwz8UgUthMOtu0MoG4d450TtbaUKpMoWLcS53LHPwsTO332b+g6hkIRTBMpefgcdqq8GCtTsoc/ghcNMApn6FypjgCvIC6mmudjnLKennBCU5ecQjT1k8+ZOW4HWcNmI+Oo9lbFUFstT/WTHxYq4cYTcSt0KZKWIlXytN8zZRFFlDPfe5rBK4LghdVgBmDIuK6pwEJnJraMA7pMnMV+2n9TTQCnG/gT3Ok0+EhFsToUVNzCoHiZidU4LBLJK0bjQrMEkesMIWwEqOKAuqDIbPQoxnT1X2OLVW+O4+WS+ozWxDVvih7zvws5UxyWNTm0kQQjea9oNioudYbpVKfVJ8XF9wR3Uy5TKQMiZrMU9DRClg4335nYYGSgFUmkU546r8Nkxtyaa5ZGUC7Nz96v6t7aIyKbV+lPIn6cDpVgnVw7X2wdzqpetDXylyYdkVOWyl7CiOsl3IyM5mHdVxKnMMrKN4s1wMWik/zc9wn6sFvtKBgQW3S6bjmKI6MlstCUtMJHZJLvZ+jLkLt9Fq+/nBc5N8FrCwkavveGBYbC80+FWutvP4ZCfHt/uEGvPgyB5LUeIr7CqD+QXbKgY3zR+DiQagboasadPs1IfWhmcNfZdoWJlchKkRwu9mqJ6JESfL+9bWHow/btoKBPk+72+BOsYLBd51EHP9CZ6lETMuloBYDIErwyDVprDdPrI5vVgkOWq9P/IIPVjO9semovRogYjtjRW2VSFVWCN+WAwL5mN03BNwNWhFG3RuW03izAwf3SieJoeUWHO6CdU/CWlzOeRDmY0AUGS2We2Cyhx2HHEzR7v8roNoVUrseKxl7KpX+ABgcR4koFQNEsxqznfnuVFCT8x+yNKzZVZk5hd9smb5vDLMLs/dAbnt3v4ldjarkAQFsOEVcbmrWrTL/mS0ye7vk4rPniwNRGqPggihMXrlwI18HDAHKEhd2lAMswtRptvHhgiFNcnpSBIF3EztUOYthk0hbEM/2tCnWukcoK277Ra7e5VEKyVKYbMSMQNaBZ5SM0FoDXp4sjmOM3cw1jTskrqhz4bqDi0RHPepCVVZYIiVM6P8CuPzmuU9y7EVjG8t/MdCad/RCo6hFZ4OCc8PIO8NG5eYdZvUnXIuhPAoWpjJDHXpx76LFwViGJVJrPlIov/e8CE7P9qlVKYg0TCudlDJ8CZNehXwC8Is1liLkGwP02uHmIOsiIlmipCk9HGJIidpYV/AChAkOUiTjIgs711mCYN0lLNIQ1oLlwW3rSTWxNp2URwUoTEqB7VsL1D0lXTkBCE95W37FbsgmOUmbJAsgaK0QebyFFZOByu2hyhKlOGeaKf6ZMRHw4D9C9lEcTE8S06vujcIOKSzeEoZqyqHU0NE+YSDpDmD2WIZ1K5VN/3Q3RNl46tEvXhC2dyXT/FhDasJPznuiE2exakWwywT6H3cab5OktvXN8K+k7Q6Tj4jmvdkyJNGBsnMZz2YFj3Ns7K4YOK5y2BFdxS5vsZM862Hc8gX6JKUQvZcTrCWJXthaQCAz5CJxApZsIciW0YIc7isdKZKVFjLebCT/a6aL6GWGXd3GgXUdJzyPWw0zloNoWa5Fzmgi329t9WxzgUplVwCmOdbqIANf5Dod+gvdtLMBkhhbXzAcy8YoAfKdaUXsUw03a9/CtOPMZsSVD/v5DsNF4NZ3fSHsGJWUn2tpDIHUoRZ0InD8nqJ4J/0pRxjWHjU0d4IHDDDLEN8XJaFJE+m7+WDW8JnYzA7S7fHx/j80/U2zwawHFEywHexqSO22l8ZWjKVyZRzV2omHwYKkSZ9BagkFUe+gg3E7HcpdeISdAWReQIErmQlEnLE3Gya3iMv/MS3x/cR5+1U+BPK3H7I46Z81p6+k/OxQujxd3ghkVsqaxaVB0Eqe2Bo0RHPwndKqqdMgW+yWwwVQoBK1dpQxeynvRq/Ww/qvWCUKOcPA4uqt8FsKwzcGhHG/cv+IGDt+WgSHf3Qz6O6ZEiKiQSVc/1DYByr/D0OPVkZoKmF1YplUAVonjS3ZVkIXOzSXkN3GX1i1Wpa8SQzShYJWkVT4X1Wi8s8k156nhVUlOv1IE+7VxqF0gm5KVEFwGRr1jSgblKqDMtycnTKCYXHrOdiM4dnS9jaaGDbrvcjVqwjRxENh1ruvMIkC01xZXErCMIKVPGWa5q+fpdEW+J0nJyLYK3HJ8I5YRaSt/2D0vVpO25oMCtbpWYTp/hhNPQ4fpMTgLpVfrvcpV7IimXqvE2jTyVmOOxceSQkPB0bhmtheMq83OcF+SoyEH95HbqrAxcshr22YCsSk2XBm4nc1LryoCnQzabO5ihB3gqbwa8piuA1DCqloniZHymP5yCBLpHYqlBUkoqKQn7HjTpCNjdxe07fWSfU2TmJu213e4mn4673I/U5mPm9PtbHODSyYBObqCU2+EbT1uCm/N0Is9zKXfVflzJ/VhqgzczXLR/W9X4HpZUT9RvCXAlVKcBKZTBr7uJiq5we6MWEjdrAljkEdIemamJtXtmW2vDJkPAx3T0Fl0Vpw1MmZ78sVFiyTQ09raZTldghs97Uqzk5CV+vdIfQqu8SjZytiZPKQ9kzdd3bxICGrPFlXIJ7NZtIA4xUlY2YLQ+RZrKCjWud5bfL3sY1Lb4+KPr1arCPkvI0o5qG36IeFS0zmIDOhFrdRbQTrOLm0hhIijjYbDAa1NQh6U0GB7cEsupEGj+mQY55w9+Wd9TlUdFimbKu92FniAPxAUf7YwyrETqJzdiwHCo2UKJMGOgn5XGvlX3XSfl06Ya+q1A2n4evrulCSMsviLstyolWPZBoZTX7QqHHVB1PleCgYZmazospcEGsqeDFslIY85pm05DrRIyFnGno1zDBQf4M2EjP8cCz5fO9G35m+X8BWNXPBkUtrKqB3J7PO0cKraV+050yoda6jncp7Vdni7LPWl7FADC909ChWqR+FR3BFgpZ54QNW1l4q4dn4hKL85TmR5XLjXyS4zMdt41Wpy82PgBYZ6bLb9vfHZTcbLKXPGSyb/uOsmX1UlbCTN4OIGUUTJNSdIh5nZloE4f6RMkF2c2MEal2HhoIha6TmgMZLBJyYmEyh4L05USswqegGjnklzcTs1p3B44/sHiEA5sL11eZelWmqu5/ZK345orxj76gfeiNyYQHw0aWB34/LK3pXFk3jhEomKck6HehFeUyZpLWIe+431XDKAbZza+gZ1vgm9XI7OzCwzjFi9X9BcDZHWZRRA9mY3f/Q/SuzrIJzQcHOg60gv44MLW+qpMsu4lWxpkWytvX8JTaAUGPVjG/diW3ZKbVBPVn1vo+LbNPwWxiwKdxoOmH22pXJtUzVFpIYrcqmEi9YZgDZco+sSRighsgdtOmQyaOQ1yTFFpaSQZtojqvqJiXgmxjdVXBZHSKz9sJBB8gtka2Q2Uwvz2T50S2qnLWULtwTGtbXTMxmdBbu0QHKMF2KpVKYFjrnLEeIafVTSpF4Vg3tPVEbFaHWkuvhu9SvIKdxgzzh8EsNbxg1MiwyYGwgriUV/7yrfNDh8U56lXS6l+i0i+OORjw6ODgkZDwXARQMqN50WsamYokj26yyxNN0gOBVb26mNaTA6JBFn2b5yBaDUP/vGr2KAAqFxfaiqmFuHnSVgXLGBmnL1AfWhJ1CzqKRk2iEgk5LysXXqjhWnEfYGM2S2aPxWxNp222EYxumoVFNYnmgUlBTQ5X3DinJCazTnGr8Gq1N/bE0hNbUiRo3sdC1cYd6G3zOJrZp/6gUIskLWhL+yV8+V1BquGbFNKuz2xiECdpvawZrNp8qv7coL49WLuDlMtH9daa7WCo3PBijWAHiBUbADuFWUcWoajj04aehda78GHgJNONg2nIoNXQPV+GZtNOO3nJuQykGGL1MS1hcayL9UM0L3uJGmn9tc3DdbNJnKHiVQ2F5E0tXdXmKJAxRoQbD+forirjTcECT8RzefV2Ap9jfOin6UWHdI1Thi98qFolHOoDkCRaeYLZt43RRr4GDS2r1S+pAlU3SDTwizALSYanoUOhlFR/iOHJurTkgcGFgsFBZzCLlkxf3vMUo+tk7KnTCw7fRHfRZXh4JBh8XMP6xEtR1lCS2JM6MBphut86ILg1fQxbQGPAS9tI826Xt6GpmTZpHy2fkyQ2SDt5uawmbx2UnXmenQoGdcjn+dmrpyYKrYy5w6pcCXfVQww+1a2ui4fUzUPyT4KPWJH095+HrX2SpSK+6JWtT5EVDnztyXz1sc9VBvER2N0FiLRYks8NBHQ81MJ2eZVy7EKE0i57o0mUn96sDP9sC9yoRusj0JLOVOA7CFXjerq7/9DDM5Dj4euxZQ+wiuG8xrfxtVjX0ryoFiOTkhZtNvRquxwhapqXAxdafpXSgLrfdlIaptb3sBHrVfwB7GLPBH8+dG3oDlUU8ws0ayhWOcuJD1ak5nwAYaOVAx7puzvi44EYP1mlAo49Dzf2Sd2bmKX4hXOaQ6N1NNa/SD+2ltIol7eoD0VUq3cojT3iQcirajqmdvNdmqZpuJKVtHD7oVWNU8nZAHJ6FZp6JSzW9jW+RNvXSdg1oSUtezC/0lhkRfgSNkWXUiNTzeoaIB5F+UcZViM29AIQpa8yYaBuNva+k08XP0Nwo6OCaA032MWi55CfyBT4fLVzbtLHbHuIh0MYwYC13S+6EbXBtk4BqbyYS0pBs2jEKNC8SblJO2eLmyu+PUZfHo65Ho7IPj8N6EvqeTz7YO74PXB8bPbJ0k5fy6jlJS39TxPf6f4iBGzDU7XZazni+BuN9Nn8fLTU4E0Jg1mmQISj15P7J8iaL+X0B+i53oDVvbstNoXWRZTDcY+ilXl1f/8f/+fQo7uJJS60x2kitEJs7mxw6sUm/dwOglrfart41/stHsKU9Xwdu2q0DBUqlNeZbPcktCFurrN4dBvDISzoVmNqFWD726zc/6KWpn/JF+7lLMd16cA85MS2nrWj5KAd8gM78bg+utLy2fuZ0pI4GhkdLM8y4aG6U5sysSHA+cCWfPVCjiZidQXW+og5xI26nuxESFL6uQcPoDobZ1biN7cManQtFVWg8bu+f74OsL1OQftbskcEp5WdczN23ZMpsFS7anythHMT0X9MNDs616NKqo9Qj4ZbQNZSlPJhr4biDq1blYW3B7D+1+vLEOpAXFwfIdWPcMSGhEQ5ZPSC/bOQ/S5C1YLNTo2/CfFKsw4tdJKkZYf2cr3piOuV3O4dXn43PIsvWpH92ESOAhfdf3My3Ofly/7Q5awjEdgw0MRok9bYCusMulyG7skPCDYDt3ZU6MJA5Z1WNk9p/3Tpd5577eeGKertvkTRih0RK1DUQKeaAoV7UAK7T+m6hgWNFAK/wOunw9ODPOtIqZtTqutaLrm0KNQK8hCeOwtSzUnSIncCtX/rVl/U5TdaE0wcwqm0E0h1+V3AD1OOKNF5lbToEHr8rkiGg58PWO1TuM+LgZKNLiMNWo1+hmBDmm3mXLZ/5sVFmhgKvI6DHRDc66hY84zbRXTephmx6kwvbnViJoQWfxQbcJaVcyYchlN949c8wv9UyIbtBz9ugtg2sKGVtG7/VG15aLcyZHcgBeqN1qAn3jH3t3+o4beiQDzYuAxxQ+i6+U20GKVe5O0fOH5HK379fMAqerehVB/TdPcpXCrhonMbXNIBwRZXrSEXUk6r5WOKgNjR+mDjMMidltFAAeu0IutWGcU14WKbaycCaGvZLAH7I0rH0O0Xk/oLkQmOjR5ud/At/wmeePCg6u7/BPWih+fcVAWHRjN090wJv0k1t92B7Aj/Afgtc2kdfwiauJLmBJsCUbVmi6+G+PEFoXv4Qds/cO9MMPV2CzFarmqtKUMNuDiJ/fgQNUMujWiIVZgeKOyA4MuVkqrvx0Glux1dgtPZ5oqAY0/JDZ0bjksHtWRKsF3j3Zw+p3EL/nT+Be2nAB77yfbHLyz50PXBnbykR4ZNTtPhHdGAco3ioofvO/2/UQwlDrx0BviEXjkBTK/QKcwA5ThmUYYs2U0/nN2hqunZZX4mikDlg+HhOcBy67+/TxPiltA1kNvAgstDUsuiVHRa2V/0fWfQSsIBbKrdYFLBDMLyyR01negw48cDJwJnpIttgBON9RK+WpT5E4Kl40s6f2YtQnGyKPyiM8SvukxHi5LLfVWgilTLW304TAQ1+HT5m7z/sHYHl4Dhw3Audflet1Dt1Ra7UV3/1q0FNhq4XvqPf5hDGDb3AGYdsDUEBEVhSArFaLglKhta9e3pIuWBqtQggjSmSN/sgODQPz8NUC5ceuxKzrZAvfEQ3C0Pzj8K4Iv3+/X6VxK4HgG4RgMGJIOCgRo7DAe7vy3GwIHyMZh/9ZIUCJ1N8ACn6k9eDvJPXIJ/onWSZKqgSSrDqc51wtagNL7ZjFZ5XdOEwmPfv1yHo1ZlzMWg+7x8cBUf8DoOmWZfzrHYuMW3UOCGnWo/1sDTcIYPNesvgK9treVsOAQNEotbttctblhmkoF2lpvqQbEotrry9cEz/dLkNp9nsrsOr/p2bSM7ZdNXPZDREdZJgiG/KGlk/yHwe1lgC6dSEHRDh3/YqddNKmoN8bMaf09yPHw+JAwkBbGd2Mx2WwMuT2N/JlqL+66L6Ni5x2FlwKeLHRA8pnyVtz5RwfCEHHTunuNJV+fGI+ULYjc8GZKd9ZufNdTjsXL2AkKopk/HM+e1a4v8OZHzTxjhrfq27OQb63h4SIFyQ4edKcRXuLOSfCwQT/Q+KnAFwbfqLBGPlHN/+39qLAYoHwYscwjDULKZzOVOkiT2YV1DsFlSs0KLxne7LkVS4MXEgg+OgCbzDc83lyPmg0+kJv6ijgH/ncLJv9C0keXi+vk1x0eLIlOVVqcVqKD59M800nf/4ewOlgRZSWv8LSvwoP/TgmDfTT/EhoHWDVDqFzV+O4JZWxqWpjAwGaqrXyYJ3wy56rozcU3cycSZbx+TinmjaT7zt6dLZRJPK85IX4YPvt5mrfVfoBnBA/X9RB8+wjAOrb/0ic6En/7JLh3ELzovPEDpML28eIC2HrsAcNa39VgDjApU/0AtDb5gdwE1gYeYtUDZafkIcbMFDrBMsIn1JjaUlJdiFJsuLVrStQVY86JfOetpMbSuDS4HOqjhbm+3iZ/KYDX7TsJDV4eSZL3f5p+COn8F0ok9XefX68+hd3AcVfBPq1TzK5rEBwI3nOXtBTpJNe+vJJmjih1ruQk3G/GBChr07A0IzrA5UcmAEc2XlP0G1DZF948pEb9bL0OrXi4jwIFLCnWN6e5EK7/rZbBTDh+6gYaivVNSK/VpFMIvw5gvPSb+Jf3i1+vPu9rngHEn7pleBU2I+W3XWV7JvQNyuf7eTa8kw4e4Z/pheJAev+8UiHWepa5/l5OdwbNNoG7/EON3sqG2GFK5JI9hKNOidq8IgctlAHjksUPB5n3KNKansb9eBmhGyFsAobNBzPI3B1dmgD+hDVeHun69/lWZGZ4Zf8RzrW+zYC9p/a7lA1owOFGJZi/HAp1L63e3pMU5LyBITVOvIUmyXFWpbNYaC7WVAcr/L8AA+dSd3OMf2BsAAAAASUVORK5CYII=) no-repeat;background-size:100%;margin-right:0rem;padding:6rem;text-align:center}.jt-drawing-dialog .el-dialog .el-dialog__headerbtn{height:34rem}.jt-drawing-dialog .el-dialog .el-dialog__body{padding:10rem;color:#fff}.jt-drawing-dialog .el-dialog .el-color-picker__trigger{width:120rem}.jt-drawing-dialog .el-dialog .el-body-foot{position:absolute;bottom:8rem;right:8rem;width:calc(100% - 16rem)}.jt-drawing-dialog .el-dialog .el-body-foot .el-button-group{display:flex}.jt-drawing-dialog .el-dialog .el-body-foot .el-button-group .el-button{border:solid 0rem rgb(255,0,0);flex:1} `; const _hoisted_1$1 = { class: "jt-drawing-dialog" }; const _hoisted_2$1 = { slot: "title", class: "header-title" }; const _hoisted_3$1 = { style: { "line-height": "24rem", "font-size": "16rem", "color": "#fff", "font-family": "'Alimama_ShuHeiTi_Bold'" } }; const _hoisted_4$1 = { class: "odin-dialog__content" }; const _hoisted_5$1 = { class: "jt-drawing-row" }; const _hoisted_6$1 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u989C\u8272", -1); const _hoisted_7$1 = { class: "col-main" }; const _hoisted_8$1 = { class: "el-body-foot" }; const _sfc_main$1 = { __name: "CrEditProperty_MilitaryPlot.ce", props: { params: { id: { type: String, default: () => void 0 }, color: { type: String, default: () => "255,255,0,0.9" }, outlineWidth: { type: Number, default: () => 0 }, outlineColor: { type: String, default: () => "255,255,0,0.9" } }, showDialog: { type: Boolean, default: () => false } }, emits: ["submit", "update:showDialog", "update:params", "remove"], setup(__props, { expose: __expose, emit }) { const props = __props; const language = ref("zh-cn"); const locale = computed$1(() => language.value === "zh-cn" ? zhCn : en); const { proxy } = getCurrentInstance(); const predefineColors = ref([ "#ff4500", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", "#1e90ff", "#c71585", "rgba(255, 69, 0, 0.68)", "rgb(255, 120, 0)", "hsv(51, 100, 98)", "hsva(120, 40, 94, 0.5)", "hsl(181, 100%, 37%)", "hsla(209, 100%, 56%, 0.73)", "#c7158577" ]); const title = ref("\u5C5E\u6027\u7F16\u8F91"); const dialogVisible = ref(props.showDialog); ref(false); const color2 = ref(props.params.color); const outlineWidth = ref(0); const outlineColor = ref(props.params.outlineColor); updateParams(props.params); function updateParams(params) { proxy._params = params; switch (params.id) { case "DrawStraightArrow": title.value = "\u7ED8\u5236\u76F4\u7EBF\u7BAD\u5934"; break; case "DrawAttackArrow": title.value = "\u7ED8\u5236\u653B\u51FB\u7BAD\u5934"; break; case "DrawPincerArrow": title.value = "\u7ED8\u5236\u94B3\u51FB\u7BAD\u5934"; break; case "DrawGatheringPlace": title.value = "\u7ED8\u5236\u96C6\u7ED3\u5730"; break; case "DrawClosedCurve": title.value = "\u7ED8\u5236\u95ED\u5408\u66F2\u9762"; break; case "DrawSector": title.value = "\u7ED8\u5236\u6247\u5F62"; break; case "DrawBowLine": title.value = "\u7ED8\u5236\u5F13\u5F62\u7EBF"; break; case "DrawLune": title.value = "\u7ED8\u5236\u5F13\u5F62\u9762"; break; case "DrawCurve": title.value = "\u7ED8\u5236\u66F2\u7EBF"; break; case "DrawCurveFlag": title.value = "\u7ED8\u5236\u66F2\u7EBF\u65D7\u5E1C"; break; case "DrawRectFlag": title.value = "\u7ED8\u5236\u77E9\u5F62\u76F4\u89D2\u65D7\u5E1C"; break; case "DrawTriangleFlag": title.value = "\u7ED8\u5236\u4E09\u89D2\u65D7\u5E1C"; break; } color2.value = params.color; outlineColor.value = params.outlineColor; outlineWidth.value = params.outlineWidth; } __expose({}); function submit() { let outParam = proxy._params; outParam.color = color2.value; outParam.outlineColor = outlineColor.value; outParam.outlineWidth = outlineWidth.value; emit("submit", outParam); } function close() { dialogVisible.value = false; } function remove2() { emit("remove", {}); dialogVisible.value = false; } function closeDialog() { emit("update:showDialog", false); } function openDialog() { updateParams(props.params); } return (_ctx, _cache) => { return openBlock(), createElementBlock("div", _hoisted_1$1, [ createVNode(unref(ElDialog), { modal: false, "destroy-on-close": false, modelValue: dialogVisible.value, "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => dialogVisible.value = $event), title: title.value, style: normalizeStyle({ left: "10rem", background: "rgb(0 44 126 / 68%)", height: "calc(100% - 175rem)", width: "180rem", top: "125rem" }), onClose: closeDialog, onOpen: openDialog, "show-close": false }, { header: withCtx(() => [ createElementVNode("div", _hoisted_2$1, [ createElementVNode("span", _hoisted_3$1, toDisplayString(title.value), 1) ]) ]), default: withCtx(() => [ createElementVNode("div", _hoisted_4$1, [ createElementVNode("div", _hoisted_5$1, [ _hoisted_6$1, createElementVNode("div", _hoisted_7$1, [ createVNode(unref(ElConfigProvider), { locale: locale.value }, { default: withCtx(() => [ createVNode(unref(ElColorPicker), { modelValue: color2.value, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => color2.value = $event), "show-alpha": "", predefine: predefineColors.value, label: "12" }, null, 8, ["modelValue", "predefine"]) ]), _: 1 }, 8, ["locale"]) ]) ]), createElementVNode("div", _hoisted_8$1, [ createVNode(unref(ElButtonGroup), null, { default: withCtx(() => [ createVNode(unref(ElButton), { type: "primary", icon: unref(edit_default), onClick: _cache[1] || (_cache[1] = ($event) => submit()) }, { default: withCtx(() => [ createTextVNode("\u4FEE\u6539") ]), _: 1 }, 8, ["icon"]), createVNode(unref(ElButton), { type: "primary", style: { "background-color": "rgb(222, 146, 47)" }, icon: unref(delete_default), onClick: _cache[2] || (_cache[2] = ($event) => remove2()) }, { default: withCtx(() => [ createTextVNode("\u5220\u9664") ]), _: 1 }, 8, ["icon"]), createVNode(unref(ElButton), { type: "primary", style: { "background-color": "rgb(126, 128, 135)" }, icon: unref(close_default), onClick: _cache[3] || (_cache[3] = ($event) => close()) }, { default: withCtx(() => [ createTextVNode("\u5173\u95ED") ]), _: 1 }, 8, ["icon"]) ]), _: 1 }) ]) ]) ]), _: 1 }, 8, ["modelValue", "title", "style"]) ]); }; } }; var DialogEditProperty$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["styles", [_style_0$1]]]); Cesium.Entity.prototype.setParams = function(params) { this._params = params; }; Cesium.Entity.prototype.getParams = function() { return this._params; }; Cesium.Entity.prototype.setIsEdit = function(isEdit) { this._isEdit = isEdit; }; Cesium.Entity.prototype.getIsEdit = function() { return this._isEdit; }; class DrawMilitaryPlot { constructor(options2) { if (!options2.viewer) throw new DeveloperError("no options.viewer object!"); if (!options2.Cesium) throw new DeveloperError("no options.Cesium object!"); this._viewer = options2.viewer; this.cesium = options2.Cesium; this.drawArr = []; this.Draw = ""; this.edit = new EntityEdit(this._viewer); this.edit.activate(); this.edit.EditEndEntity.addEventListener((result) => { if (result.Type) { this.handleFirstPosition(result.Type); this.edit.DrawExample = this.Draw; } this._editEntity = result; }); } static initEditPropertyParams() { return { id: void 0, color: "rgba(0,255,0,0.75)", outlineWidth: 0, outlineColor: "rgba(255,255,255,1)" }; } editActivate() { return this.edit; } handleFirstPosition(type2) { this._viewer.scene.globe.depthTestAgainstTerrain = true; switch (type2) { case "DrawStraightArrow": this.Draw = new MilitaryPlot.DrawStraightArrow({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawAttackArrow": this.Draw = new MilitaryPlot.DrawAttackArrow({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawPincerArrow": this.Draw = new MilitaryPlot.DrawPincerArrow({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawGatheringPlace": this.Draw = new MilitaryPlot.DrawGatheringPlace({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawClosedCurve": this.Draw = new MilitaryPlot.DrawClosedCurve({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawSector": this.Draw = new MilitaryPlot.DrawSector({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawBowLine": this.Draw = new MilitaryPlot.DrawBowLine({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawBowPlane": this.Draw = new MilitaryPlot.DrawBowPlane({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawCurve": this.Draw = new MilitaryPlot.DrawCurve({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawCurveFlag": this.Draw = new MilitaryPlot.DrawCurveFlag({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawRectFlag": this.Draw = new MilitaryPlot.DrawRectFlag({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawTriangleFlag": this.Draw = new MilitaryPlot.DrawTriangleFlag({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawPoint": this.Draw = new MilitaryPlot.DrawPoint({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawPolyline": this.Draw = new MilitaryPlot.DrawPolyline({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawPolygon": this.Draw = new MilitaryPlot.DrawPolygon({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawRectangle": this.Draw = new MilitaryPlot.DrawRectangle({ viewer: this._viewer, Cesium: this.cesium }); break; case "DrawCircle": this.Draw = new MilitaryPlot.DrawCircle({ viewer: this._viewer, Cesium: this.cesium }); break; } } addEntity(data) { this.handleFirstPosition(data.type); if (this.Draw) { let entity = this.Draw.addload(data.position); entity._id = data.id; return entity; } } } Object.assign(DrawMilitaryPlot.prototype, { _setMousePointerStyle() { document.querySelector("body").style.cursor = "crosshair"; }, _setMouseDefaultStyle() { document.querySelector("body").style.cursor = "default"; }, _registerLeftClickEvent(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { _self._lock = true; clearTimeout(_self._timer); _self._timer = setTimeout(function() { if (callChange) callChange(event2); _self._lock = false; }, 200); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); }, _registerMouseMoveEvent(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { if (_self._lock === void 0 || _self._lock === false) { if (callChange) callChange(event2); } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); }, _registerLeftDownEvent(handler, callChange) { if (!handler) return; handler.setInputAction(function(event2) { if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.LEFT_DOWN); }, _registerLeftUpEvent(handler, callChange) { if (!handler) return; handler.setInputAction(function(event2) { if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.LEFT_UP); }, _clearEvent(handler) { if (!handler) return; handler.destroy(); handler = null; } }); Object.assign(DrawMilitaryPlot.prototype, { _setEntityIsEdit(entity) { let _self = this; this._closePropertyEditDialog(); entity.setIsEdit(true); this.edit.handlePickEditEntity(entity); this._sendShowPropertyDialog(entity); let handler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); this._registerLeftClickEvent(handler, function(event2) { _self._closePropertyEditDialog(); let feature2 = _self._viewer.scene.pick(event2.position); if (feature2 !== void 0 && feature2.id instanceof Cesium.Entity) { let editEntity = feature2.id; if (editEntity.Type == "DrawStraightArrow" || editEntity.Type == "DrawAttackArrow" || editEntity.Type == "DrawPincerArrow" || editEntity.Type == "DrawGatheringPlace" || editEntity.Type == "DrawClosedCurve" || editEntity.Type == "DrawSector" || editEntity.Type == "DrawBowLine" || editEntity.Type == "DrawBowPlane" || editEntity.Type == "DrawCurve" || editEntity.Type == "DrawCurveFlag" || editEntity.Type == "DrawRectFlag" || editEntity.Type == "DrawTriangleFlag" || editEntity.Type == "DrawPoint" || editEntity.Type == "DrawPolyline" || editEntity.Type == "DrawPolygon" || editEntity.Type == "DrawRectangle" || editEntity.Type == "DrawCircle") { _self._sendShowPropertyDialog(feature2.id); } } }); }, _sendShowPropertyDialog(entity) { let _self = this; let editEntityType = entity.Type; if (entity.getIsEdit() === void 0 || entity.getIsEdit() === false || editEntityType === void 0) { return; } let editProperty = entity.getParams(); if (editProperty !== void 0 && this.onEditProperty !== void 0) { editProperty.id = editEntityType; _self._openPropertyEditDialog( editProperty, function(params) { _self.updateEditEntityProperty(params); }, function() { _self._viewer.entities.remove(entity); _self.edit.clearAllEditVertex(); } ); } }, updateEditEntityProperty: function(params) { if (this._editEntity === void 0) return; if (this._editEntity.getIsEdit() === void 0 || this._editEntity.getIsEdit() === false) return; let editEntityType = this._editEntity.Type; if (editEntityType === void 0) return; let material = this._editEntity.polygon.material; if (material instanceof Cesium.ColorMaterialProperty) { let newMaterial = this._materialColorProperty({ color: params.color }); this._editEntity.polygon.material = newMaterial; } if (this._editEntity.polyline !== void 0) { let newMaterial = this._materialColorProperty({ color: params.outlineColor }); this._editEntity.polyline.material = newMaterial; this._editEntity.polyline.width = parseFloat(params.outlineWidth); } this._editEntity.setParams(params); }, _materialColorProperty(options2) { let mColor = "rgba(0,255,0,1)"; if (options2 !== void 0 && options2.color !== void 0) mColor = options2.color; let colorMaterial = new Cesium.ColorMaterialProperty(Cesium.Color.fromCssColorString(mColor)); colorMaterial._param = { color: mColor }; return colorMaterial; } }); Object.assign(DrawMilitaryPlot.prototype, { drawActivate(type2) { this._setMousePointerStyle(); this.handleFirstPosition(type2); this.Draw.startCreate(type2); this.Draw.DrawEndEvent.addEventListener((entity, positions, drawType) => { this._setMouseDefaultStyle(); if (entity) { let entityParam = DrawMilitaryPlot.initEditPropertyParams(); entity.setParams(entityParam); this._setEntityIsEdit(entity); } }); this.drawArr.push(this.Draw); return this.Draw; }, clearOne: function() { this.Draw.clear(); }, clearAll: function() { for (var i2 = 0; i2 < this.drawArr.length; i2++) { this.drawArr[i2].clear(); } this.edit.deactivate(); this._closePropertyEditDialog(); let buttonDiv = document.getElementById("drawButtonDiv"); if (buttonDiv) { document.body.removeChild(buttonDiv); } } }); Object.assign(DrawMilitaryPlot.prototype, { _openPropertyEditDialog: function(params, callEdit, callRemove) { this._editPropertyDialogDomId = "dialog-property-dom-militaryplot"; this._registerDOMPropertyEdit = "dialog-edit-property-militaryplot"; let PropertyEditComponent = customElements.get(this._registerDOMPropertyEdit); if (PropertyEditComponent === void 0) { PropertyEditComponent = defineCustomElement(DialogEditProperty$1); customElements.define(this._registerDOMPropertyEdit, PropertyEditComponent); } this._closePropertyEditDialog(); let dialogPropertyElement = new PropertyEditComponent({ params }); dialogPropertyElement.id = this._editPropertyDialogDomId; dialogPropertyElement.showDialog = true; document.body.appendChild(dialogPropertyElement); dialogPropertyElement.addEventListener( "submit", (e) => { if (callEdit) callEdit(e.detail[0]); }, false ); dialogPropertyElement.addEventListener( "remove", (e) => { if (callRemove) callRemove(); }, false ); }, _closePropertyEditDialog() { let dom2 = document.getElementById(this._editPropertyDialogDomId); if (dom2 !== null && dom2 !== void 0) { document.body.removeChild(dom2); } } }); var _style_0 = `@charset "UTF-8";:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","\\5fae\\8f6f\\96c5\\9ed1",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .32, 1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px}:root{color-scheme:light;--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0, 0, 0, .04),0px 8px 20px rgba(0, 0, 0, .08);--el-box-shadow-light:0px 0px 12px rgba(0, 0, 0, .12);--el-box-shadow-lighter:0px 0px 6px rgba(0, 0, 0, .12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0, 0, 0, .08),0px 12px 32px rgba(0, 0, 0, .12),0px 8px 16px -8px rgba(0, 0, 0, .16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0, 0, 0, .8);--el-overlay-color-light:rgba(0, 0, 0, .7);--el-overlay-color-lighter:rgba(0, 0, 0, .5);--el-mask-color:rgba(255, 255, 255, .9);--el-mask-color-extra-light:rgba(255, 255, 255, .3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center top}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center bottom}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transition:var(--el-transition-md-fade);transform-origin:top left}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;height:1em;width:1em;line-height:1em;display:inline-flex;justify-content:center;align-items:center;position:relative;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}.el-affix--fixed{position:fixed}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:13px;--el-alert-description-font-size:12px;--el-alert-close-font-size:12px;--el-alert-close-customed-font-size:13px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;width:100%;padding:var(--el-alert-padding);margin:0;box-sizing:border-box;border-radius:var(--el-alert-border-radius-base);position:relative;background-color:var(--el-color-white);overflow:hidden;opacity:1;display:flex;align-items:center;transition:opacity var(--el-transition-duration-fast)}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-success)}.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-info)}.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-warning)}.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-error)}.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:table-cell;padding:0 8px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:18px;vertical-align:text-top}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:5px 0 0}.el-alert .el-alert__close-btn{font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert .el-alert__close-btn.is-customed{font-style:normal;font-size:var(--el-alert-close-customed-font-size);top:9px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{overflow:auto;box-sizing:border-box;flex-shrink:0;width:var(--el-aside-width,300px)}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-autocomplete__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-autocomplete__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);list-style:none;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li:hover,.el-autocomplete-suggestion li.highlighted{background-color:var(--el-fill-color-light)}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid var(--el-color-black)}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:var(--el-text-color-secondary)}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size-small:24px;--el-avatar-size:40px;display:inline-flex;justify-content:center;align-items:center;box-sizing:border-box;text-align:center;overflow:hidden;color:var(--el-avatar-text-color);background:var(--el-avatar-bg-color);width:var(--el-avatar-size);height:var(--el-avatar-size);font-size:var(--el-avatar-text-size)}.el-avatar>img{display:block;height:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.el-backtop{--el-backtop-bg-color:var(--el-bg-color-overlay);--el-backtop-text-color:var(--el-color-primary);--el-backtop-hover-bg-color:var(--el-border-color-extra-light);position:fixed;background-color:var(--el-backtop-bg-color);width:40px;height:40px;border-radius:50%;color:var(--el-backtop-text-color);display:flex;align-items:center;justify-content:center;font-size:20px;box-shadow:var(--el-box-shadow-lighter);cursor:pointer;z-index:5}.el-backtop:hover{background-color:var(--el-backtop-hover-bg-color)}.el-backtop__icon{font-size:20px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;position:relative;vertical-align:middle;display:inline-block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;justify-content:center;align-items:center;font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color)}.el-badge__content.is-fixed{position:absolute;top:0;right:calc(1px + var(--el-badge-size)/ 2);transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:var(--el-text-color-placeholder)}.el-breadcrumb__separator.el-icon{margin:0 6px;font-weight:400}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{float:left;display:inline-flex;align-items:center}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;transition:var(--el-transition-color);color:var(--el-text-color-primary)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:var(--el-text-color-regular);cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:rgba(255, 255, 255, .5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-color-info);--el-button-active-color:var(--el-text-color-primary)}.el-button{display:inline-flex;justify-content:center;align-items:center;line-height:1;height:32px;white-space:nowrap;cursor:pointer;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;outline:0;transition:.1s;font-weight:var(--el-button-font-weight);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);padding:8px 15px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button:focus,.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:0}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:0}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px}.el-button>span{display:inline-flex;align-items:center}.el-button+.el-button{margin-left:12px}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:var(--el-mask-color-extra-light)}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{border-radius:50%;padding:8px}.el-button.is-text{color:var(--el-button-text-color);border:0 solid transparent;background-color:transparent}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important}.el-button.is-text:not(.is-disabled):focus,.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:focus,.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{border-color:transparent;color:var(--el-button-text-color);background:0 0;padding:2px;height:auto}.el-button.is-link:focus,.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button.is-link:not(.is-disabled):focus,.el-button.is-link:not(.is-disabled):hover{border-color:transparent;background-color:transparent}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);border-color:transparent;background-color:transparent}.el-button--text{border-color:transparent;background:0 0;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:transparent!important;border-color:transparent!important}.el-button--text:not(.is-disabled):focus,.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);border-color:transparent;background-color:transparent}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);border-color:transparent;background-color:transparent}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-link,.el-button--primary.is-plain,.el-button--primary.is-text{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:active,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:hover{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-link,.el-button--success.is-plain,.el-button--success.is-text{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:active,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:active,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:hover{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-link,.el-button--warning.is-plain,.el-button--warning.is-text{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:active,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:hover{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-link,.el-button--danger.is-plain,.el-button--danger.is-text{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:active,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:hover{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-link,.el-button--info.is-plain,.el-button--info.is-text{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:active,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:active,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:hover{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--large{--el-button-size:40px;height:var(--el-button-size);padding:12px 19px;font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.el-button--small{--el-button-size:24px;height:var(--el-button-size);padding:5px 11px;font-size:12px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.el-calendar{--el-calendar-border:var(--el-table-border, 1px solid var(--el-border-color-lighter));--el-calendar-header-border-bottom:var(--el-calendar-border);--el-calendar-selected-bg-color:var(--el-color-primary-light-9);--el-calendar-cell-width:85px;background-color:var(--el-fill-color-blank)}.el-calendar__header{display:flex;justify-content:space-between;padding:12px 20px;border-bottom:var(--el-calendar-header-border-bottom)}.el-calendar__title{color:var(--el-text-color);align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:var(--el-text-color-regular);font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);vertical-align:top;transition:background-color var(--el-transition-duration-fast) ease}.el-calendar-table td.is-selected{background-color:var(--el-calendar-selected-bg-color)}.el-calendar-table td.is-today{color:var(--el-color-primary)}.el-calendar-table tr:first-child td{border-top:var(--el-calendar-border)}.el-calendar-table tr td:first-child{border-left:var(--el-calendar-border)}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;padding:8px;height:var(--el-calendar-cell-width)}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:var(--el-calendar-selected-bg-color)}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank)}.el-card{border-radius:var(--el-card-border-radius);border:1px solid var(--el-card-border-color);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration)}.el-card.is-always-shadow{box-shadow:var(--el-box-shadow-light)}.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding);border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box}.el-card__body{padding:var(--el-card-padding)}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%;transition:transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:calc(var(--el-index-normal) + 1)}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:var(--el-color-white);opacity:.24;transition:var(--el-transition-duration-fast)}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:rgba(31, 45, 61, .11);--el-carousel-arrow-hover-background:rgba(31, 45, 61, .23);--el-carousel-indicator-width:30px;--el-carousel-indicator-height:2px;--el-carousel-indicator-padding-horizontal:4px;--el-carousel-indicator-padding-vertical:12px;--el-carousel-indicator-out-color:var(--el-border-color-hover);position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:var(--el-carousel-arrow-size);width:var(--el-carousel-arrow-size);cursor:pointer;transition:var(--el-transition-duration);border-radius:50%;background-color:var(--el-carousel-arrow-background);color:#fff;position:absolute;top:50%;z-index:10;transform:translateY(-50%);text-align:center;font-size:var(--el-carousel-arrow-font-size);display:inline-flex;justify-content:center;align-items:center}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:var(--el-carousel-arrow-hover-background)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:calc(var(--el-index-normal) + 1)}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translate(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:calc(var(--el-carousel-indicator-height) + var(--el-carousel-indicator-padding-vertical) * 2);text-align:center;position:static;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:var(--el-carousel-indicator-out-color);opacity:.24}.el-carousel__indicators--labels{left:0;right:0;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px;color:#000}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal)}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{width:var(--el-carousel-indicator-height);height:calc(var(--el-carousel-indicator-width)/ 2)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:var(--el-carousel-indicator-width);height:var(--el-carousel-indicator-height);background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;transition:var(--el-transition-duration)}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{transform:translateY(-50%) translate(-10px);opacity:0}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{transform:translateY(-50%) translate(10px);opacity:0}.el-cascader-panel{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color)}.el-cascader-panel{display:flex;border-radius:var(--el-cascader-menu-radius);font-size:var(--el-cascader-menu-font-size)}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{min-width:180px;box-sizing:border-box;color:var(--el-cascader-menu-text-color);border-right:var(--el-cascader-menu-border)}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap.el-scrollbar__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;align-items:center;color:var(--el-cascader-color-empty)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{position:relative;display:flex;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:var(--el-cascader-menu-text-color)}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:var(--el-cascader-node-background-hover)}.el-cascader-node.is-disabled{color:var(--el-cascader-node-color-disabled);cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{flex:1;text-align:left;padding:0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-checkbox{margin-right:0}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);display:inline-block;vertical-align:middle;position:relative;font-size:var(--el-font-size-base);line-height:32px;outline:0}.el-cascader:not(.is-disabled):hover .el-input__wrapper{cursor:pointer;box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-cascader .el-input{display:flex;cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis;cursor:pointer}.el-cascader .el-input .el-input__suffix-inner .el-icon{height:calc(100% - 2px)}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{transition:transform var(--el-transition-duration);font-size:14px}.el-cascader .el-input .icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .icon-circle-close:hover{color:var(--el-input-clear-hover-color,var(--el-text-color-secondary))}.el-cascader .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-cascader--large{font-size:14px;line-height:40px}.el-cascader--small{font-size:12px;line-height:24px}.el-cascader.is-disabled .el-cascader__label{z-index:calc(var(--el-index-normal) + 1);color:var(--el-disabled-text-color)}.el-cascader__dropdown{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color)}.el-cascader__dropdown{font-size:var(--el-cascader-menu-font-size);border-radius:var(--el-cascader-menu-radius)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill);border:var(--el-cascader-menu-border);box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__dropdown.el-popper .el-popper__arrow:before{border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;transform:translateY(-50%);display:flex;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:inline-flex;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:var(--el-cascader-tag-background)}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{flex:none;background-color:var(--el-text-color-placeholder);color:var(--el-color-white)}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__collapse-tags{white-space:normal;z-index:var(--el-index-normal)}.el-cascader__collapse-tags .el-tag{display:inline-flex;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:var(--el-fill-color)}.el-cascader__collapse-tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__collapse-tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag .el-icon-close{flex:none;background-color:var(--el-text-color-placeholder);color:var(--el-color-white)}.el-cascader__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:var(--el-font-size-base);color:var(--el-cascader-menu-text-color);text-align:center}.el-cascader__suggestion-item{display:flex;justify-content:space-between;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:var(--el-cascader-color-empty)}.el-cascader__search-input{flex:1;height:24px;min-width:60px;margin:2px 0 2px 11px;padding:0;color:var(--el-cascader-menu-text-color);border:none;outline:0;box-sizing:border-box;background:0 0}.el-cascader__search-input::-moz-placeholder{color:transparent}.el-cascader__search-input:-ms-input-placeholder{color:transparent}.el-cascader__search-input::placeholder{color:transparent}.el-check-tag{background-color:var(--el-color-info-light-9);border-radius:var(--el-border-radius-base);color:var(--el-color-info);cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);line-height:var(--el-font-size-base);padding:7px 15px;transition:var(--el-transition-all);font-weight:700}.el-check-tag:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.is-checked{background-color:var(--el-color-primary-light-8);color:var(--el-color-primary)}.el-check-tag.is-checked:hover{background-color:var(--el-color-primary-light-7)}.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary)}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:var(--el-checkbox-font-weight);white-space:nowrap;vertical-align:middle;cursor:pointer;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left:0;color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;position:relative;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:8px 15px;font-size:var(--el-font-size-base);border-radius:0}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:var(--el-checkbox-button-checked-text-color);background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:var(--el-border);border-top-left-radius:var(--el-border-radius-base);border-bottom-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{padding:12px 19px;font-size:var(--el-font-size-base);border-radius:0}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{padding:5px 11px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}.el-checkbox-group{font-size:0;line-height:0}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary)}.el-checkbox{color:var(--el-checkbox-text-color);font-weight:var(--el-checkbox-font-weight);font-size:var(--el-font-size-base);position:relative;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px;height:32px}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{padding:0 15px 0 9px;border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{padding:0 19px 0 11px;border-radius:var(--el-border-radius-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:0 11px 0 7px;border-radius:calc(var(--el-border-radius-base) - 1px)}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--el-checkbox-border-radius)}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-flex;position:relative}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:var(--el-checkbox-disabled-icon-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:var(--el-checkbox-checked-icon-color);height:2px;transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;width:var(--el-checkbox-input-width);height:var(--el-checkbox-input-height);background-color:var(--el-checkbox-bg-color);z-index:var(--el-index-normal);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{box-sizing:content-box;content:"";border:1px solid var(--el-checkbox-checked-icon-color);border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:3px;transition:transform .15s ease-in 50ms;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:8px;line-height:1;font-size:var(--el-checkbox-font-size)}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{width:14px;height:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{width:12px;height:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{display:block;min-height:1px}.el-col-0,.el-col-0.is-guttered{display:none}.el-col-0{max-width:0%;flex:0 0 0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{position:relative;left:0}.el-col-1{max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-offset-1{margin-left:4.1666666667%}.el-col-pull-1{position:relative;right:4.1666666667%}.el-col-push-1{position:relative;left:4.1666666667%}.el-col-2{max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-offset-2{margin-left:8.3333333333%}.el-col-pull-2{position:relative;right:8.3333333333%}.el-col-push-2{position:relative;left:8.3333333333%}.el-col-3{max-width:12.5%;flex:0 0 12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-offset-4{margin-left:16.6666666667%}.el-col-pull-4{position:relative;right:16.6666666667%}.el-col-push-4{position:relative;left:16.6666666667%}.el-col-5{max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-offset-5{margin-left:20.8333333333%}.el-col-pull-5{position:relative;right:20.8333333333%}.el-col-push-5{position:relative;left:20.8333333333%}.el-col-6{max-width:25%;flex:0 0 25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-offset-7{margin-left:29.1666666667%}.el-col-pull-7{position:relative;right:29.1666666667%}.el-col-push-7{position:relative;left:29.1666666667%}.el-col-8{max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-offset-8{margin-left:33.3333333333%}.el-col-pull-8{position:relative;right:33.3333333333%}.el-col-push-8{position:relative;left:33.3333333333%}.el-col-9{max-width:37.5%;flex:0 0 37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-offset-10{margin-left:41.6666666667%}.el-col-pull-10{position:relative;right:41.6666666667%}.el-col-push-10{position:relative;left:41.6666666667%}.el-col-11{max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-offset-11{margin-left:45.8333333333%}.el-col-pull-11{position:relative;right:45.8333333333%}.el-col-push-11{position:relative;left:45.8333333333%}.el-col-12{max-width:50%;flex:0 0 50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-offset-13{margin-left:54.1666666667%}.el-col-pull-13{position:relative;right:54.1666666667%}.el-col-push-13{position:relative;left:54.1666666667%}.el-col-14{max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-offset-14{margin-left:58.3333333333%}.el-col-pull-14{position:relative;right:58.3333333333%}.el-col-push-14{position:relative;left:58.3333333333%}.el-col-15{max-width:62.5%;flex:0 0 62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-offset-16{margin-left:66.6666666667%}.el-col-pull-16{position:relative;right:66.6666666667%}.el-col-push-16{position:relative;left:66.6666666667%}.el-col-17{max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-offset-17{margin-left:70.8333333333%}.el-col-pull-17{position:relative;right:70.8333333333%}.el-col-push-17{position:relative;left:70.8333333333%}.el-col-18{max-width:75%;flex:0 0 75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-offset-19{margin-left:79.1666666667%}.el-col-pull-19{position:relative;right:79.1666666667%}.el-col-push-19{position:relative;left:79.1666666667%}.el-col-20{max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-offset-20{margin-left:83.3333333333%}.el-col-pull-20{position:relative;right:83.3333333333%}.el-col-push-20{position:relative;left:83.3333333333%}.el-col-21{max-width:87.5%;flex:0 0 87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-offset-22{margin-left:91.6666666667%}.el-col-pull-22{position:relative;right:91.6666666667%}.el-col-push-22{position:relative;left:91.6666666667%}.el-col-23{max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-offset-23{margin-left:95.8333333333%}.el-col-pull-23{position:relative;right:95.8333333333%}.el-col-push-23{position:relative;left:95.8333333333%}.el-col-24{max-width:100%;flex:0 0 100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:768px){.el-col-xs-0,.el-col-xs-0.is-guttered{display:none}.el-col-xs-0{max-width:0%;flex:0 0 0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-xs-offset-1{margin-left:4.1666666667%}.el-col-xs-pull-1{position:relative;right:4.1666666667%}.el-col-xs-push-1{position:relative;left:4.1666666667%}.el-col-xs-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-xs-offset-2{margin-left:8.3333333333%}.el-col-xs-pull-2{position:relative;right:8.3333333333%}.el-col-xs-push-2{position:relative;left:8.3333333333%}.el-col-xs-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-xs-offset-4{margin-left:16.6666666667%}.el-col-xs-pull-4{position:relative;right:16.6666666667%}.el-col-xs-push-4{position:relative;left:16.6666666667%}.el-col-xs-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-xs-offset-5{margin-left:20.8333333333%}.el-col-xs-pull-5{position:relative;right:20.8333333333%}.el-col-xs-push-5{position:relative;left:20.8333333333%}.el-col-xs-6{display:block;max-width:25%;flex:0 0 25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-xs-offset-7{margin-left:29.1666666667%}.el-col-xs-pull-7{position:relative;right:29.1666666667%}.el-col-xs-push-7{position:relative;left:29.1666666667%}.el-col-xs-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-xs-offset-8{margin-left:33.3333333333%}.el-col-xs-pull-8{position:relative;right:33.3333333333%}.el-col-xs-push-8{position:relative;left:33.3333333333%}.el-col-xs-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-xs-offset-10{margin-left:41.6666666667%}.el-col-xs-pull-10{position:relative;right:41.6666666667%}.el-col-xs-push-10{position:relative;left:41.6666666667%}.el-col-xs-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-xs-offset-11{margin-left:45.8333333333%}.el-col-xs-pull-11{position:relative;right:45.8333333333%}.el-col-xs-push-11{position:relative;left:45.8333333333%}.el-col-xs-12{display:block;max-width:50%;flex:0 0 50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-xs-offset-13{margin-left:54.1666666667%}.el-col-xs-pull-13{position:relative;right:54.1666666667%}.el-col-xs-push-13{position:relative;left:54.1666666667%}.el-col-xs-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-xs-offset-14{margin-left:58.3333333333%}.el-col-xs-pull-14{position:relative;right:58.3333333333%}.el-col-xs-push-14{position:relative;left:58.3333333333%}.el-col-xs-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-xs-offset-16{margin-left:66.6666666667%}.el-col-xs-pull-16{position:relative;right:66.6666666667%}.el-col-xs-push-16{position:relative;left:66.6666666667%}.el-col-xs-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-xs-offset-17{margin-left:70.8333333333%}.el-col-xs-pull-17{position:relative;right:70.8333333333%}.el-col-xs-push-17{position:relative;left:70.8333333333%}.el-col-xs-18{display:block;max-width:75%;flex:0 0 75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-xs-offset-19{margin-left:79.1666666667%}.el-col-xs-pull-19{position:relative;right:79.1666666667%}.el-col-xs-push-19{position:relative;left:79.1666666667%}.el-col-xs-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-xs-offset-20{margin-left:83.3333333333%}.el-col-xs-pull-20{position:relative;right:83.3333333333%}.el-col-xs-push-20{position:relative;left:83.3333333333%}.el-col-xs-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-xs-offset-22{margin-left:91.6666666667%}.el-col-xs-pull-22{position:relative;right:91.6666666667%}.el-col-xs-push-22{position:relative;left:91.6666666667%}.el-col-xs-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-xs-offset-23{margin-left:95.8333333333%}.el-col-xs-pull-23{position:relative;right:95.8333333333%}.el-col-xs-push-23{position:relative;left:95.8333333333%}.el-col-xs-24{display:block;max-width:100%;flex:0 0 100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0,.el-col-sm-0.is-guttered{display:none}.el-col-sm-0{max-width:0%;flex:0 0 0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-sm-offset-1{margin-left:4.1666666667%}.el-col-sm-pull-1{position:relative;right:4.1666666667%}.el-col-sm-push-1{position:relative;left:4.1666666667%}.el-col-sm-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-sm-offset-2{margin-left:8.3333333333%}.el-col-sm-pull-2{position:relative;right:8.3333333333%}.el-col-sm-push-2{position:relative;left:8.3333333333%}.el-col-sm-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-sm-offset-4{margin-left:16.6666666667%}.el-col-sm-pull-4{position:relative;right:16.6666666667%}.el-col-sm-push-4{position:relative;left:16.6666666667%}.el-col-sm-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-sm-offset-5{margin-left:20.8333333333%}.el-col-sm-pull-5{position:relative;right:20.8333333333%}.el-col-sm-push-5{position:relative;left:20.8333333333%}.el-col-sm-6{display:block;max-width:25%;flex:0 0 25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-sm-offset-7{margin-left:29.1666666667%}.el-col-sm-pull-7{position:relative;right:29.1666666667%}.el-col-sm-push-7{position:relative;left:29.1666666667%}.el-col-sm-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-sm-offset-8{margin-left:33.3333333333%}.el-col-sm-pull-8{position:relative;right:33.3333333333%}.el-col-sm-push-8{position:relative;left:33.3333333333%}.el-col-sm-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-sm-offset-10{margin-left:41.6666666667%}.el-col-sm-pull-10{position:relative;right:41.6666666667%}.el-col-sm-push-10{position:relative;left:41.6666666667%}.el-col-sm-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-sm-offset-11{margin-left:45.8333333333%}.el-col-sm-pull-11{position:relative;right:45.8333333333%}.el-col-sm-push-11{position:relative;left:45.8333333333%}.el-col-sm-12{display:block;max-width:50%;flex:0 0 50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-sm-offset-13{margin-left:54.1666666667%}.el-col-sm-pull-13{position:relative;right:54.1666666667%}.el-col-sm-push-13{position:relative;left:54.1666666667%}.el-col-sm-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-sm-offset-14{margin-left:58.3333333333%}.el-col-sm-pull-14{position:relative;right:58.3333333333%}.el-col-sm-push-14{position:relative;left:58.3333333333%}.el-col-sm-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-sm-offset-16{margin-left:66.6666666667%}.el-col-sm-pull-16{position:relative;right:66.6666666667%}.el-col-sm-push-16{position:relative;left:66.6666666667%}.el-col-sm-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-sm-offset-17{margin-left:70.8333333333%}.el-col-sm-pull-17{position:relative;right:70.8333333333%}.el-col-sm-push-17{position:relative;left:70.8333333333%}.el-col-sm-18{display:block;max-width:75%;flex:0 0 75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-sm-offset-19{margin-left:79.1666666667%}.el-col-sm-pull-19{position:relative;right:79.1666666667%}.el-col-sm-push-19{position:relative;left:79.1666666667%}.el-col-sm-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-sm-offset-20{margin-left:83.3333333333%}.el-col-sm-pull-20{position:relative;right:83.3333333333%}.el-col-sm-push-20{position:relative;left:83.3333333333%}.el-col-sm-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-sm-offset-22{margin-left:91.6666666667%}.el-col-sm-pull-22{position:relative;right:91.6666666667%}.el-col-sm-push-22{position:relative;left:91.6666666667%}.el-col-sm-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-sm-offset-23{margin-left:95.8333333333%}.el-col-sm-pull-23{position:relative;right:95.8333333333%}.el-col-sm-push-23{position:relative;left:95.8333333333%}.el-col-sm-24{display:block;max-width:100%;flex:0 0 100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0,.el-col-md-0.is-guttered{display:none}.el-col-md-0{max-width:0%;flex:0 0 0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-md-offset-1{margin-left:4.1666666667%}.el-col-md-pull-1{position:relative;right:4.1666666667%}.el-col-md-push-1{position:relative;left:4.1666666667%}.el-col-md-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-md-offset-2{margin-left:8.3333333333%}.el-col-md-pull-2{position:relative;right:8.3333333333%}.el-col-md-push-2{position:relative;left:8.3333333333%}.el-col-md-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-md-offset-4{margin-left:16.6666666667%}.el-col-md-pull-4{position:relative;right:16.6666666667%}.el-col-md-push-4{position:relative;left:16.6666666667%}.el-col-md-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-md-offset-5{margin-left:20.8333333333%}.el-col-md-pull-5{position:relative;right:20.8333333333%}.el-col-md-push-5{position:relative;left:20.8333333333%}.el-col-md-6{display:block;max-width:25%;flex:0 0 25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-md-offset-7{margin-left:29.1666666667%}.el-col-md-pull-7{position:relative;right:29.1666666667%}.el-col-md-push-7{position:relative;left:29.1666666667%}.el-col-md-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-md-offset-8{margin-left:33.3333333333%}.el-col-md-pull-8{position:relative;right:33.3333333333%}.el-col-md-push-8{position:relative;left:33.3333333333%}.el-col-md-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-md-offset-10{margin-left:41.6666666667%}.el-col-md-pull-10{position:relative;right:41.6666666667%}.el-col-md-push-10{position:relative;left:41.6666666667%}.el-col-md-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-md-offset-11{margin-left:45.8333333333%}.el-col-md-pull-11{position:relative;right:45.8333333333%}.el-col-md-push-11{position:relative;left:45.8333333333%}.el-col-md-12{display:block;max-width:50%;flex:0 0 50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-md-offset-13{margin-left:54.1666666667%}.el-col-md-pull-13{position:relative;right:54.1666666667%}.el-col-md-push-13{position:relative;left:54.1666666667%}.el-col-md-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-md-offset-14{margin-left:58.3333333333%}.el-col-md-pull-14{position:relative;right:58.3333333333%}.el-col-md-push-14{position:relative;left:58.3333333333%}.el-col-md-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-md-offset-16{margin-left:66.6666666667%}.el-col-md-pull-16{position:relative;right:66.6666666667%}.el-col-md-push-16{position:relative;left:66.6666666667%}.el-col-md-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-md-offset-17{margin-left:70.8333333333%}.el-col-md-pull-17{position:relative;right:70.8333333333%}.el-col-md-push-17{position:relative;left:70.8333333333%}.el-col-md-18{display:block;max-width:75%;flex:0 0 75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-md-offset-19{margin-left:79.1666666667%}.el-col-md-pull-19{position:relative;right:79.1666666667%}.el-col-md-push-19{position:relative;left:79.1666666667%}.el-col-md-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-md-offset-20{margin-left:83.3333333333%}.el-col-md-pull-20{position:relative;right:83.3333333333%}.el-col-md-push-20{position:relative;left:83.3333333333%}.el-col-md-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-md-offset-22{margin-left:91.6666666667%}.el-col-md-pull-22{position:relative;right:91.6666666667%}.el-col-md-push-22{position:relative;left:91.6666666667%}.el-col-md-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-md-offset-23{margin-left:95.8333333333%}.el-col-md-pull-23{position:relative;right:95.8333333333%}.el-col-md-push-23{position:relative;left:95.8333333333%}.el-col-md-24{display:block;max-width:100%;flex:0 0 100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0,.el-col-lg-0.is-guttered{display:none}.el-col-lg-0{max-width:0%;flex:0 0 0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-lg-offset-1{margin-left:4.1666666667%}.el-col-lg-pull-1{position:relative;right:4.1666666667%}.el-col-lg-push-1{position:relative;left:4.1666666667%}.el-col-lg-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-lg-offset-2{margin-left:8.3333333333%}.el-col-lg-pull-2{position:relative;right:8.3333333333%}.el-col-lg-push-2{position:relative;left:8.3333333333%}.el-col-lg-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-lg-offset-4{margin-left:16.6666666667%}.el-col-lg-pull-4{position:relative;right:16.6666666667%}.el-col-lg-push-4{position:relative;left:16.6666666667%}.el-col-lg-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-lg-offset-5{margin-left:20.8333333333%}.el-col-lg-pull-5{position:relative;right:20.8333333333%}.el-col-lg-push-5{position:relative;left:20.8333333333%}.el-col-lg-6{display:block;max-width:25%;flex:0 0 25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-lg-offset-7{margin-left:29.1666666667%}.el-col-lg-pull-7{position:relative;right:29.1666666667%}.el-col-lg-push-7{position:relative;left:29.1666666667%}.el-col-lg-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-lg-offset-8{margin-left:33.3333333333%}.el-col-lg-pull-8{position:relative;right:33.3333333333%}.el-col-lg-push-8{position:relative;left:33.3333333333%}.el-col-lg-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-lg-offset-10{margin-left:41.6666666667%}.el-col-lg-pull-10{position:relative;right:41.6666666667%}.el-col-lg-push-10{position:relative;left:41.6666666667%}.el-col-lg-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-lg-offset-11{margin-left:45.8333333333%}.el-col-lg-pull-11{position:relative;right:45.8333333333%}.el-col-lg-push-11{position:relative;left:45.8333333333%}.el-col-lg-12{display:block;max-width:50%;flex:0 0 50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-lg-offset-13{margin-left:54.1666666667%}.el-col-lg-pull-13{position:relative;right:54.1666666667%}.el-col-lg-push-13{position:relative;left:54.1666666667%}.el-col-lg-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-lg-offset-14{margin-left:58.3333333333%}.el-col-lg-pull-14{position:relative;right:58.3333333333%}.el-col-lg-push-14{position:relative;left:58.3333333333%}.el-col-lg-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-lg-offset-16{margin-left:66.6666666667%}.el-col-lg-pull-16{position:relative;right:66.6666666667%}.el-col-lg-push-16{position:relative;left:66.6666666667%}.el-col-lg-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-lg-offset-17{margin-left:70.8333333333%}.el-col-lg-pull-17{position:relative;right:70.8333333333%}.el-col-lg-push-17{position:relative;left:70.8333333333%}.el-col-lg-18{display:block;max-width:75%;flex:0 0 75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-lg-offset-19{margin-left:79.1666666667%}.el-col-lg-pull-19{position:relative;right:79.1666666667%}.el-col-lg-push-19{position:relative;left:79.1666666667%}.el-col-lg-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-lg-offset-20{margin-left:83.3333333333%}.el-col-lg-pull-20{position:relative;right:83.3333333333%}.el-col-lg-push-20{position:relative;left:83.3333333333%}.el-col-lg-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-lg-offset-22{margin-left:91.6666666667%}.el-col-lg-pull-22{position:relative;right:91.6666666667%}.el-col-lg-push-22{position:relative;left:91.6666666667%}.el-col-lg-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-lg-offset-23{margin-left:95.8333333333%}.el-col-lg-pull-23{position:relative;right:95.8333333333%}.el-col-lg-push-23{position:relative;left:95.8333333333%}.el-col-lg-24{display:block;max-width:100%;flex:0 0 100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0,.el-col-xl-0.is-guttered{display:none}.el-col-xl-0{max-width:0%;flex:0 0 0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{display:block;max-width:4.1666666667%;flex:0 0 4.1666666667%}.el-col-xl-offset-1{margin-left:4.1666666667%}.el-col-xl-pull-1{position:relative;right:4.1666666667%}.el-col-xl-push-1{position:relative;left:4.1666666667%}.el-col-xl-2{display:block;max-width:8.3333333333%;flex:0 0 8.3333333333%}.el-col-xl-offset-2{margin-left:8.3333333333%}.el-col-xl-pull-2{position:relative;right:8.3333333333%}.el-col-xl-push-2{position:relative;left:8.3333333333%}.el-col-xl-3{display:block;max-width:12.5%;flex:0 0 12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{display:block;max-width:16.6666666667%;flex:0 0 16.6666666667%}.el-col-xl-offset-4{margin-left:16.6666666667%}.el-col-xl-pull-4{position:relative;right:16.6666666667%}.el-col-xl-push-4{position:relative;left:16.6666666667%}.el-col-xl-5{display:block;max-width:20.8333333333%;flex:0 0 20.8333333333%}.el-col-xl-offset-5{margin-left:20.8333333333%}.el-col-xl-pull-5{position:relative;right:20.8333333333%}.el-col-xl-push-5{position:relative;left:20.8333333333%}.el-col-xl-6{display:block;max-width:25%;flex:0 0 25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{display:block;max-width:29.1666666667%;flex:0 0 29.1666666667%}.el-col-xl-offset-7{margin-left:29.1666666667%}.el-col-xl-pull-7{position:relative;right:29.1666666667%}.el-col-xl-push-7{position:relative;left:29.1666666667%}.el-col-xl-8{display:block;max-width:33.3333333333%;flex:0 0 33.3333333333%}.el-col-xl-offset-8{margin-left:33.3333333333%}.el-col-xl-pull-8{position:relative;right:33.3333333333%}.el-col-xl-push-8{position:relative;left:33.3333333333%}.el-col-xl-9{display:block;max-width:37.5%;flex:0 0 37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{display:block;max-width:41.6666666667%;flex:0 0 41.6666666667%}.el-col-xl-offset-10{margin-left:41.6666666667%}.el-col-xl-pull-10{position:relative;right:41.6666666667%}.el-col-xl-push-10{position:relative;left:41.6666666667%}.el-col-xl-11{display:block;max-width:45.8333333333%;flex:0 0 45.8333333333%}.el-col-xl-offset-11{margin-left:45.8333333333%}.el-col-xl-pull-11{position:relative;right:45.8333333333%}.el-col-xl-push-11{position:relative;left:45.8333333333%}.el-col-xl-12{display:block;max-width:50%;flex:0 0 50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{display:block;max-width:54.1666666667%;flex:0 0 54.1666666667%}.el-col-xl-offset-13{margin-left:54.1666666667%}.el-col-xl-pull-13{position:relative;right:54.1666666667%}.el-col-xl-push-13{position:relative;left:54.1666666667%}.el-col-xl-14{display:block;max-width:58.3333333333%;flex:0 0 58.3333333333%}.el-col-xl-offset-14{margin-left:58.3333333333%}.el-col-xl-pull-14{position:relative;right:58.3333333333%}.el-col-xl-push-14{position:relative;left:58.3333333333%}.el-col-xl-15{display:block;max-width:62.5%;flex:0 0 62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{display:block;max-width:66.6666666667%;flex:0 0 66.6666666667%}.el-col-xl-offset-16{margin-left:66.6666666667%}.el-col-xl-pull-16{position:relative;right:66.6666666667%}.el-col-xl-push-16{position:relative;left:66.6666666667%}.el-col-xl-17{display:block;max-width:70.8333333333%;flex:0 0 70.8333333333%}.el-col-xl-offset-17{margin-left:70.8333333333%}.el-col-xl-pull-17{position:relative;right:70.8333333333%}.el-col-xl-push-17{position:relative;left:70.8333333333%}.el-col-xl-18{display:block;max-width:75%;flex:0 0 75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{display:block;max-width:79.1666666667%;flex:0 0 79.1666666667%}.el-col-xl-offset-19{margin-left:79.1666666667%}.el-col-xl-pull-19{position:relative;right:79.1666666667%}.el-col-xl-push-19{position:relative;left:79.1666666667%}.el-col-xl-20{display:block;max-width:83.3333333333%;flex:0 0 83.3333333333%}.el-col-xl-offset-20{margin-left:83.3333333333%}.el-col-xl-pull-20{position:relative;right:83.3333333333%}.el-col-xl-push-20{position:relative;left:83.3333333333%}.el-col-xl-21{display:block;max-width:87.5%;flex:0 0 87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{display:block;max-width:91.6666666667%;flex:0 0 91.6666666667%}.el-col-xl-offset-22{margin-left:91.6666666667%}.el-col-xl-pull-22{position:relative;right:91.6666666667%}.el-col-xl-push-22{position:relative;left:91.6666666667%}.el-col-xl-23{display:block;max-width:95.8333333333%;flex:0 0 95.8333333333%}.el-col-xl-offset-23{margin-left:95.8333333333%}.el-col-xl-pull-23{position:relative;right:95.8333333333%}.el-col-xl-push-23{position:relative;left:95.8333333333%}.el-col-xl-24{display:block;max-width:100%;flex:0 0 100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-top:1px solid var(--el-collapse-border-color);border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{display:flex;align-items:center;height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);background-color:var(--el-collapse-header-bg-color);color:var(--el-collapse-header-text-color);cursor:pointer;border-bottom:1px solid var(--el-collapse-border-color);font-size:var(--el-collapse-header-font-size);font-weight:500;transition:border-bottom-color var(--el-transition-duration);outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:transform var(--el-transition-duration);font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:var(--el-collapse-content-bg-color);overflow:hidden;box-sizing:border-box;border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-item__content{padding-bottom:25px;font-size:var(--el-collapse-content-font-size);color:var(--el-collapse-content-text-color);line-height:1.7692307692}.el-collapse-item:last-child{margin-bottom:-1px}.el-color-predefine{display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:flex;flex:1;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector>div{display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px;float:right}.el-color-hue-slider__bar{position:relative;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid var(--el-border-color-lighter);box-shadow:0 0 2px #0009;z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;border-radius:50%;transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-size:12px 12px;background-position:0 0,6px 0,6px -6px,0 6px}.el-color-alpha-slider__bar{position:relative;background:linear-gradient(to right,rgba(255,255,255,0) 0,var(--el-bg-color) 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid var(--el-border-color-lighter);box-shadow:0 0 2px #0009;z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:12px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-picker{display:inline-block;position:relative;line-height:normal;outline:0}.el-color-picker:hover:not(.is-disabled) .el-color-picker__trigger{border:1px solid var(--el-border-color-hover)}.el-color-picker:focus-visible:not(.is-disabled) .el-color-picker__trigger{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--large{height:40px}.el-color-picker--large .el-color-picker__trigger{height:40px;width:40px}.el-color-picker--large .el-color-picker__mask{height:38px;width:38px}.el-color-picker--small{height:24px}.el-color-picker--small .el-color-picker__trigger{height:24px;width:24px}.el-color-picker--small .el-color-picker__mask{height:22px;width:22px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:scale(.8)}.el-color-picker__mask{height:30px;width:30px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:#ffffffb3}.el-color-picker__trigger{display:inline-flex;justify-content:center;align-items:center;box-sizing:border-box;height:32px;width:32px;padding:4px;border:1px solid var(--el-border-color);border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;box-sizing:border-box;border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-size:12px 12px;background-position:0 0,6px 0,6px -6px,0 6px}.el-color-picker__color-inner{display:inline-flex;justify-content:center;align-items:center;width:100%;height:100%}.el-color-picker .el-color-picker__empty{font-size:12px;color:var(--el-text-color-secondary)}.el-color-picker .el-color-picker__icon{display:inline-flex;justify-content:center;align-items:center;color:#fff;font-size:12px}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;box-sizing:content-box;background-color:#fff;border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light)}.el-color-picker__panel.el-popper{border:1px solid var(--el-border-color-lighter)}.el-color-picker,.el-color-picker__panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker,.dark .el-color-picker__panel{--el-color-picker-alpha-bg-a:#333333}.el-container{display:flex;flex-direction:row;flex:1;flex-basis:auto;box-sizing:border-box;min-width:0}.el-container.is-vertical{flex-direction:column}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:var(--el-datepicker-text-color)}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child .el-date-table-cell{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child .el-date-table-cell{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table.is-week-mode .el-date-table__row.current .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td{width:32px;height:30px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td .el-date-table-cell{height:30px;padding:3px 0;box-sizing:border-box}.el-date-table td .el-date-table-cell .el-date-table-cell__text{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;transform:translate(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:var(--el-datepicker-off-text-color)}.el-date-table td.today{position:relative}.el-date-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-date-table td.today.end-date .el-date-table-cell__text,.el-date-table td.today.start-date .el-date-table-cell__text{color:#fff}.el-date-table td.available:hover{color:var(--el-datepicker-hover-text-color)}.el-date-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-date-table td.current:not(.disabled):focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-date-table td.end-date .el-date-table-cell,.el-date-table td.start-date .el-date-table-cell{color:#fff}.el-date-table td.end-date .el-date-table-cell__text,.el-date-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date .el-date-table-cell{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);opacity:1;cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-date-table td.selected .el-date-table-cell{margin-left:5px;margin-right:5px;background-color:var(--el-datepicker-inrange-bg-color);border-radius:15px}.el-date-table td.selected .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.selected .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:var(--el-datepicker-header-text-color)}.el-date-table td:focus{outline:0}.el-date-table th{padding:5px;color:var(--el-datepicker-header-text-color);font-weight:400;border-bottom:solid 1px var(--el-border-color-lighter)}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;box-sizing:border-box}.el-month-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-month-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:var(--el-datepicker-text-color);margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-month-table td.in-range div{background-color:var(--el-datepicker-inrange-bg-color)}.el-month-table td.in-range div:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:var(--el-datepicker-active-color)}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:var(--el-datepicker-active-color)}.el-month-table td:focus-visible{outline:0}.el-month-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color)}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-year-table td.disabled .cell{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.el-year-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-year-table td .cell{width:48px;height:36px;display:block;line-height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto}.el-year-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-year-table td.current:not(.disabled) .cell{color:var(--el-datepicker-active-color)}.el-year-table td:focus-visible{outline:0}.el-year-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color)}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:192px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper.el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:default}.el-time-spinner__arrow{font-size:12px;color:var(--el-text-color-secondary);position:absolute;left:0;width:100%;z-index:var(--el-index-normal);text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:var(--el-color-primary)}.el-time-spinner__arrow.arrow-up{top:10px}.el-time-spinner__arrow.arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center}.el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:var(--el-text-color-regular)}.el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:pointer}.el-time-spinner__item.is-active:not(.is-disabled){color:var(--el-text-color-primary);font-weight:700}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light)}.el-picker__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-datepicker-border-color)}.el-picker__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-date-editor{--el-date-editor-width:220px;--el-date-editor-monthrange-width:300px;--el-date-editor-daterange-width:350px;--el-date-editor-datetimerange-width:400px;--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);position:relative;display:inline-block;text-align:left}.el-date-editor.el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-date-editor.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{width:var(--el-date-editor-width);height:var(--el-input-height,var(--el-component-size))}.el-date-editor--monthrange{--el-date-editor-width:var(--el-date-editor-monthrange-width)}.el-date-editor--daterange,.el-date-editor--timerange{--el-date-editor-width:var(--el-date-editor-daterange-width)}.el-date-editor--datetimerange{--el-date-editor-width:var(--el-date-editor-datetimerange-width)}.el-date-editor--dates .el-input__wrapper{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .close-icon,.el-date-editor .clear-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__icon{height:inherit;font-size:14px;color:var(--el-text-color-placeholder);float:left}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:30px;line-height:30px;margin:0;padding:0;width:39%;text-align:center;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);background-color:transparent}.el-date-editor .el-range-input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{flex:1;display:inline-flex;justify-content:center;align-items:center;height:100%;padding:0 5px;margin:0;font-size:14px;word-break:keep-all;color:var(--el-text-color-primary)}.el-date-editor .el-range__close-icon{font-size:14px;color:var(--el-text-color-placeholder);height:inherit;width:unset;cursor:pointer}.el-date-editor .el-range__close-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__close-icon svg{vertical-align:middle}.el-date-editor .el-range__close-icon--hidden{opacity:0;visibility:hidden}.el-range-editor.el-input__wrapper{display:inline-flex;align-items:center;padding:0 10px}.el-range-editor.is-active,.el-range-editor.is-active:hover{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-range-editor--large{line-height:var(--el-component-size-large)}.el-range-editor--large.el-input__wrapper{height:var(--el-component-size-large)}.el-range-editor--large .el-range-separator{line-height:40px;font-size:14px}.el-range-editor--large .el-range-input{height:38px;line-height:38px;font-size:14px}.el-range-editor--small{line-height:var(--el-component-size-small)}.el-range-editor--small.el-input__wrapper{height:var(--el-component-size-small)}.el-range-editor--small .el-range-separator{line-height:24px;font-size:12px}.el-range-editor--small .el-range-input{height:22px;line-height:22px;font-size:12px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:var(--el-disabled-border-color)}.el-range-editor.is-disabled input{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{color:var(--el-text-color-regular);background:var(--el-bg-color-overlay);border-radius:var(--el-border-radius-base);line-height:30px}.el-picker-panel .el-time-panel{margin:5px 0;border:solid 1px var(--el-datepicker-border-color);background-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid var(--el-datepicker-inner-border-color);padding:4px 12px;text-align:right;background-color:var(--el-bg-color-overlay);position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:var(--el-datepicker-text-color);padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:var(--el-datepicker-active-color)}.el-picker-panel__btn{border:1px solid var(--el-fill-color-darker);color:var(--el-text-color-primary);line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:var(--el-datepicker-icon-color);border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn:focus-visible{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn.is-disabled{color:var(--el-text-color-disabled)}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;padding-top:6px;background-color:var(--el-bg-color-overlay);overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary)}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid var(--el-datepicker-inner-border-color);font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px var(--el-border-color-lighter)}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:var(--el-text-color-regular)}.el-date-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label:focus-visible{outline:0;color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.el-date-picker .el-time-panel{position:absolute}.el-date-range-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary)}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid var(--el-datepicker-inner-border-color)}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid var(--el-datepicker-inner-border-color);font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:var(--el-datepicker-icon-color)}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px;z-index:1}.el-time-range-picker__cell{box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid var(--el-datepicker-border-color)}.el-time-panel{border-radius:2px;position:relative;width:180px;left:0;z-index:var(--el-index-top);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-16px;height:32px;z-index:-1;left:0;right:0;box-sizing:border-box;padding-top:6px;text-align:left}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%;border-top:1px solid var(--el-border-color-light);border-bottom:1px solid var(--el-border-color-light)}.el-time-panel__content.has-seconds:after{left:66.6666666667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333333333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));padding:4px;height:36px;line-height:25px;text-align:right;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:var(--el-text-color-primary)}.el-time-panel__btn.confirm{font-weight:800;color:var(--el-timepicker-active-color,var(--el-color-primary))}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;font-size:var(--el-font-size-base);color:var(--el-text-color-primary)}.el-descriptions__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;text-align:left;font-weight:400;line-height:23px;font-size:14px}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{font-weight:700;color:var(--el-text-color-regular);background:var(--el-descriptions-item-bordered-label-background)}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{-webkit-animation:v-modal-in var(--el-transition-duration-fast) ease;animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{-webkit-animation:v-modal-out var(--el-transition-duration-fast) ease forwards;animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color)}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:20px;--el-dialog-border-radius:var(--el-border-radius-small);position:relative;margin:var(--el-dialog-margin-top,15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:0!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-dialog__header{padding:var(--el-dialog-padding-primary);padding-bottom:10px;margin-right:16px}.el-dialog__headerbtn{position:absolute;top:6px;right:0;padding:0;width:54px;height:54px;background:0 0;border:none;outline:0;cursor:pointer;font-size:var(--el-message-close-size,16px)}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{padding:calc(var(--el-dialog-padding-primary) + 10px) var(--el-dialog-padding-primary);color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding:var(--el-dialog-padding-primary);padding-top:10px;text-align:right;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px calc(var(--el-dialog-padding-primary) + 5px) 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto}.dialog-fade-enter-active{-webkit-animation:modal-fade-in var(--el-transition-duration);animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{-webkit-animation:dialog-fade-in var(--el-transition-duration);animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{-webkit-animation:modal-fade-out var(--el-transition-duration);animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{-webkit-animation:dialog-fade-out var(--el-transition-duration);animation:dialog-fade-out var(--el-transition-duration)}@-webkit-keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@-webkit-keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-divider{position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0;border-top:1px var(--el-border-color) var(--el-border-style)}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative;border-left:1px var(--el-border-color) var(--el-border-style)}.el-divider__text{position:absolute;background-color:var(--el-bg-color);padding:0 20px;font-weight:500;color:var(--el-text-color-primary);font-size:14px}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color, var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary, 20px)}.el-drawer{position:absolute;box-sizing:border-box;background-color:var(--el-drawer-bg-color);display:flex;flex-direction:column;box-shadow:var(--el-box-shadow-dark);overflow:hidden;transition:all var(--el-transition-duration)}.el-drawer .rtl,.el-drawer .ltr,.el-drawer .ttb,.el-drawer .btt{transform:translate(0)}.el-drawer__sr-focus:focus{outline:0!important}.el-drawer__header{align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{margin:0;flex:1;line-height:inherit;font-size:1rem}.el-drawer__footer{padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{display:inline-flex;border:none;cursor:pointer;font-size:var(--el-font-size-extra-large);color:inherit;background-color:transparent;outline:0}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;padding:var(--el-drawer-padding-primary);overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{opacity:0}.el-drawer-fade-enter-to,.el-drawer-fade-leave-from{opacity:1}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;display:inline-flex;position:relative;color:var(--el-text-color-regular);font-size:var(--el-font-size-base);line-height:1;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:0}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{list-style:none;padding:0;margin:0;box-sizing:border-box}.el-dropdown .el-dropdown__caret-button{padding-left:0;padding-right:0;display:inline-flex;justify-content:center;align-items:center;width:32px;border-left:none}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:-1px;bottom:-1px;left:0;background:var(--el-overlay-color-lighter)}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:0}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{position:relative;top:0;left:0;z-index:var(--el-dropdown-menu-index);padding:5px 0;margin:0;background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;list-style:none}.el-dropdown-menu__item{display:flex;align-items:center;white-space:nowrap;list-style:none;line-height:22px;padding:5px 16px;margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);cursor:pointer;outline:0}.el-dropdown-menu__item:not(.is-disabled):focus{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{margin:6px 0;border-top:1px solid var(--el-border-color-lighter)}.el-dropdown-menu__item.is-disabled{cursor:not-allowed;color:var(--el-text-color-disabled)}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{padding:7px 20px;line-height:22px;font-size:14px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{padding:2px 12px;line-height:20px;font-size:12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.el-empty{--el-empty-padding:40px 0;--el-empty-image-width:160px;--el-empty-description-margin-top:20px;--el-empty-bottom-margin-top:20px;--el-empty-fill-color-0:var(--el-color-white);--el-empty-fill-color-1:#fcfcfd;--el-empty-fill-color-2:#f8f9fb;--el-empty-fill-color-3:#f7f8fc;--el-empty-fill-color-4:#eeeff3;--el-empty-fill-color-5:#edeef2;--el-empty-fill-color-6:#e9ebef;--el-empty-fill-color-7:#e5e7e9;--el-empty-fill-color-8:#e0e3e9;--el-empty-fill-color-9:#d5d7de;display:flex;justify-content:center;align-items:center;flex-direction:column;text-align:center;box-sizing:border-box;padding:var(--el-empty-padding)}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:100%;height:100%;vertical-align:top}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-secondary)}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;padding:var(--el-footer-padding);box-sizing:border-box;flex-shrink:0;height:var(--el-footer-height)}.el-form{--el-form-label-font-size:var(--el-font-size-base)}.el-form--label-left .el-form-item__label{justify-content:flex-start}.el-form--label-top .el-form-item{display:block}.el-form--label-top .el-form-item .el-form-item__label{display:block;height:auto;text-align:left;margin-bottom:8px;line-height:22px}.el-form--inline .el-form-item{display:inline-flex;vertical-align:middle;margin-right:32px}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form--large.el-form--label-top .el-form-item .el-form-item__label{margin-bottom:12px;line-height:22px}.el-form--default.el-form--label-top .el-form-item .el-form-item__label{margin-bottom:8px;line-height:22px}.el-form--small.el-form--label-top .el-form-item .el-form-item__label{margin-bottom:4px;line-height:20px}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item__label-wrap{display:flex}.el-form-item__label{display:inline-flex;justify-content:flex-end;align-items:flex-start;flex:0 0 auto;font-size:var(--el-form-label-font-size);color:var(--el-text-color-regular);height:32px;line-height:32px;padding:0 12px 0 0;box-sizing:border-box}.el-form-item__content{display:flex;flex-wrap:wrap;align-items:center;flex:1;line-height:32px;position:relative;font-size:var(--font-size);min-width:0}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;line-height:1;padding-top:2px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{content:"*";color:var(--el-color-danger);margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{content:"*";color:var(--el-color-danger);margin-left:4px}.el-form-item.is-error .el-select-v2__wrapper,.el-form-item.is-error .el-select-v2__wrapper:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-input-group__prepend .el-input__wrapper{box-shadow:0 0 0 1px transparent inset}.el-form-item.is-error .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-header{--el-header-padding:0 20px;--el-header-height:60px;padding:var(--el-header-padding);box-sizing:border-box;flex-shrink:0;height:var(--el-header-height)}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:flex;align-items:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__btn .el-icon{font-size:inherit;cursor:pointer}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{position:static;width:100%;height:100%;display:flex;justify-content:center;align-items:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__actions{left:50%;bottom:30px;transform:translate(-50%);width:282px;height:44px;padding:0 23px;background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:flex;align-items:center;justify-content:space-around}.el-image-viewer__prev{top:50%;transform:translateY(-50%);left:40px;width:44px;height:44px;font-size:24px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff}.el-image-viewer__next{top:50%;transform:translateY(-50%);right:40px;text-indent:2px;width:44px;height:44px;font-size:24px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff}.el-image-viewer__close{width:44px;height:44px;font-size:24px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in var(--el-transition-duration);animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out var(--el-transition-duration);animation:viewer-fade-out var(--el-transition-duration)}@-webkit-keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes viewer-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top;opacity:1}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{position:absolute;top:0;left:0}.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{display:flex;justify-content:center;align-items:center;font-size:14px;background:var(--el-fill-color-light);color:var(--el-text-color-placeholder);vertical-align:middle}.el-image__preview{cursor:pointer}.el-input-number{position:relative;display:inline-flex;width:150px;line-height:30px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.el-input-number__decrease,.el-input-number__increase{display:flex;justify-content:center;align-items:center;height:auto;position:absolute;z-index:1;top:1px;bottom:1px;width:32px;background:var(--el-fill-color-light);color:var(--el-text-color-regular);cursor:pointer;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input_wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input_wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border)}.el-input-number__decrease{left:1px;border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border)}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{width:40px;font-size:14px}.el-input-number--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{width:120px;line-height:22px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:24px;font-size:12px}.el-input-number--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{bottom:auto;left:auto;border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border)}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;top:auto;left:auto;border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:var(--el-font-size-base)}.el-textarea__inner{position:relative;display:block;resize:vertical;padding:5px 11px;line-height:1.5;box-sizing:border-box;width:100%;font-size:inherit;font-family:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);border:none}.el-textarea__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{outline:0;box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);position:absolute;font-size:12px;line-height:14px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary)}.el-input{--el-input-height:var(--el-component-size);position:relative;font-size:var(--el-font-size-base);display:inline-flex;width:100%;line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:var(--el-text-color-disabled)}.el-input::-webkit-scrollbar-corner{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);font-size:14px;cursor:pointer}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{height:100%;display:inline-flex;align-items:center;color:var(--el-color-info);font-size:12px}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;display:inline-block;padding-left:8px}.el-input__wrapper{display:inline-flex;flex-grow:1;align-items:center;justify-content:center;padding:1px 11px;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);transform:translateZ(0);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 32px) - 2px);width:100%;flex-grow:1;-webkit-appearance:none;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);padding:0;outline:0;border:none;background:0 0;box-sizing:border-box}.el-input__inner:focus{outline:0}.el-input__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__prefix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__prefix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{display:inline-flex;white-space:nowrap;flex-shrink:0;flex-wrap:nowrap;height:100%;text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none}.el-input__suffix-inner{pointer-events:all;display:inline-flex;align-items:center;justify-content:center}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;display:flex;justify-content:center;align-items:center;transition:all var(--el-transition-duration);margin-left:8px}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color,) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 24px) - 2px)}.el-input-group{display:inline-flex;width:100%;align-items:stretch}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:100%;border-radius:var(--el-input-border-radius);padding:0 20px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-input__wrapper,.el-input-group__append div.el-select:hover .el-input__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-input__wrapper,.el-input-group__prepend div.el-select:hover .el-input__wrapper{border-color:transparent;background-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-input .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select .el-input .el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__wrapper{box-shadow:1px 0 0 0 var(--el-input-focus-border-color) inset,1px 0 0 0 var(--el-input-focus-border-color),0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important;z-index:2}.el-input-group--prepend .el-input-group__prepend .el-select .el-input.is-focus .el-input__wrapper:focus{outline:0;z-index:2;box-shadow:1px 0 0 0 var(--el-input-focus-border-color) inset,1px 0 0 0 var(--el-input-focus-border-color),0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important}.el-input-group--prepend .el-input-group__prepend .el-select:hover .el-input__inner{box-shadow:none!important}.el-input-group--prepend .el-input-group__prepend .el-select:hover .el-input__wrapper{z-index:1;box-shadow:1px 0 0 0 var(--el-input-hover-border-color) inset,1px 0 0 0 var(--el-input-hover-border-color),0 1px 0 0 var(--el-input-hover-border-color) inset,0 -1px 0 0 var(--el-input-hover-border-color) inset!important}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-input .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select .el-input .el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--append .el-input-group__append .el-select .el-input.is-focus .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select .el-input.is-focus .el-input__wrapper{z-index:2;box-shadow:-1px 0 0 0 var(--el-input-focus-border-color),-1px 0 0 0 var(--el-input-focus-border-color) inset,0 1px 0 0 var(--el-input-focus-border-color) inset,0 -1px 0 0 var(--el-input-focus-border-color) inset!important}.el-input-group--append .el-input-group__append .el-select:hover .el-input__inner{box-shadow:none!important}.el-input-group--append .el-input-group__append .el-select:hover .el-input__wrapper{z-index:1;box-shadow:-1px 0 0 0 var(--el-input-hover-border-color),-1px 0 0 0 var(--el-input-hover-border-color) inset,0 1px 0 0 var(--el-input-hover-border-color) inset,0 -1px 0 0 var(--el-input-hover-border-color) inset!important}.el-link{--el-link-font-size:var(--el-font-size-base);--el-link-font-weight:var(--el-font-weight-primary);--el-link-text-color:var(--el-text-color-regular);--el-link-hover-text-color:var(--el-color-primary);--el-link-disabled-text-color:var(--el-text-color-placeholder)}.el-link{display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;cursor:pointer;padding:0;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);color:var(--el-link-text-color)}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid var(--el-link-hover-text-color)}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default:after{border-color:var(--el-link-hover-text-color)}.el-link__inner{display:inline-flex;justify-content:center;align-items:center}.el-link.el-link--primary{--el-link-text-color:var(--el-color-primary);--el-link-hover-text-color:var(--el-color-primary-light-3);--el-link-disabled-text-color:var(--el-color-primary-light-5)}.el-link.el-link--primary:after{border-color:var(--el-link-text-color)}.el-link.el-link--primary.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--success{--el-link-text-color:var(--el-color-success);--el-link-hover-text-color:var(--el-color-success-light-3);--el-link-disabled-text-color:var(--el-color-success-light-5)}.el-link.el-link--success:after{border-color:var(--el-link-text-color)}.el-link.el-link--success.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning{--el-link-text-color:var(--el-color-warning);--el-link-hover-text-color:var(--el-color-warning-light-3);--el-link-disabled-text-color:var(--el-color-warning-light-5)}.el-link.el-link--warning:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger{--el-link-text-color:var(--el-color-danger);--el-link-hover-text-color:var(--el-color-danger-light-3);--el-link-disabled-text-color:var(--el-color-danger-light-5)}.el-link.el-link--danger:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--error{--el-link-text-color:var(--el-color-error);--el-link-hover-text-color:var(--el-color-error-light-3);--el-link-disabled-text-color:var(--el-color-error-light-5)}.el-link.el-link--error:after{border-color:var(--el-link-text-color)}.el-link.el-link--error.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--info{--el-link-text-color:var(--el-color-info);--el-link-hover-text-color:var(--el-color-info-light-3);--el-link-disabled-text-color:var(--el-color-info-light-5)}.el-link.el-link--info:after{border-color:var(--el-link-text-color)}.el-link.el-link--info.is-underline:hover:after{border-color:var(--el-link-text-color)}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:var(--el-mask-color);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity var(--el-transition-duration)}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/ 2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{top:50%;margin-top:calc((0px - var(--el-loading-spinner-size))/ 2);width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@-webkit-keyframes loading-rotate{to{transform:rotate(360deg)}}@keyframes loading-rotate{to{transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-main{--el-main-padding:20px;display:block;flex:1;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:var(--el-main-padding)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{border-right:solid 1px var(--el-menu-border-color);list-style:none;position:relative;margin:0;padding-left:0;background-color:var(--el-menu-bg-color);box-sizing:border-box}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title{white-space:nowrap;padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level) * var(--el-menu-level-padding))}.el-menu--horizontal{display:flex;flex-wrap:nowrap;border-bottom:solid 1px var(--el-menu-border-color);border-right:none}.el-menu--horizontal>.el-menu-item{display:inline-flex;justify-content:center;align-items:center;height:100%;margin:0;border-bottom:2px solid transparent;color:var(--el-menu-text-color)}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover{background-color:#fff}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:0}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{height:100%;border-bottom:2px solid transparent;color:var(--el-menu-text-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-bg-color-overlay)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{background-color:var(--el-menu-bg-color);display:flex;align-items:center;height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);padding:0 10px;color:var(--el-menu-text-color)}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:var(--el-menu-hover-text-color);background-color:var(--el-menu-hover-bg-color)}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding) * 2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{margin:0;vertical-align:middle;width:var(--el-menu-icon-width);text-align:center}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:var(--el-border-radius-small);box-shadow:var(--el-box-shadow-light)}.el-menu .el-icon{flex-shrink:0}.el-menu-item{display:flex;align-items:center;height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);list-style:none;cursor:pointer;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:focus,.el-menu-item:hover{outline:0}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon]{margin-right:5px;width:var(--el-menu-icon-width);text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{position:absolute;left:0;top:0;height:100%;width:100%;display:inline-flex;align-items:center;box-sizing:border-box;padding:0 var(--el-menu-base-level-padding)}.el-sub-menu{list-style:none;margin:0;padding-left:0}.el-sub-menu__title{display:flex;align-items:center;height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);list-style:none;cursor:pointer;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:focus,.el-sub-menu__title:hover{outline:0}.el-sub-menu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-menu-item,.el-sub-menu.is-disabled .el-sub-menu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu .el-icon{vertical-align:middle;margin-right:5px;width:var(--el-menu-icon-width);text-align:center;font-size:18px}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{position:absolute;top:50%;right:var(--el-menu-base-level-padding);margin-top:-6px;transition:transform var(--el-transition-duration);font-size:12px;margin-right:0;width:inherit}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px var(--el-menu-base-level-padding);line-height:normal;font-size:12px;color:var(--el-text-color-secondary)}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{transition:var(--el-transition-duration-fast);opacity:0}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:15px}.el-message-box{display:inline-block;max-width:var(--el-messagebox-width);width:100%;padding-bottom:10px;vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);border:1px solid var(--el-border-color-lighter);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-box-shadow-light);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box}.el-message-box:focus{outline:0!important}.el-overlay.is-message-box .el-overlay-message-box{text-align:center;position:fixed;top:0;right:0;bottom:0;left:0;padding:16px;overflow:auto}.el-overlay.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-message-box__header{position:relative;padding:var(--el-messagebox-padding-primary);padding-bottom:10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:var(--el-messagebox-font-size);line-height:1;color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{position:absolute;top:var(--el-messagebox-padding-primary);right:var(--el-messagebox-padding-primary);padding:0;border:none;outline:0;background:0 0;font-size:var(--el-message-close-size,16px);cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{padding:10px var(--el-messagebox-padding-primary);color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input div.invalid>input{border-color:var(--el-color-error)}.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{position:absolute;top:50%;transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status.el-icon{position:absolute}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px;word-break:break-word}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{flex-direction:row-reverse}.el-message-box--center .el-message-box__title{position:relative;display:flex;align-items:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns{justify-content:center}.el-message-box--center .el-message-box__content{padding-left:calc(var(--el-messagebox-padding-primary) + 12px);padding-right:calc(var(--el-messagebox-padding-primary) + 12px);text-align:center}.fade-in-linear-enter-active .el-overlay-message-box{-webkit-animation:msgbox-fade-in var(--el-transition-duration);animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@-webkit-keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}to{transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{transform:translateZ(0);opacity:1}to{transform:translate3d(0,-20px,0);opacity:0}}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:15px 19px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary)}.el-message{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;max-width:calc(100% - 32px);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);position:fixed;left:50%;top:20px;transform:translate(-50%);background-color:var(--el-message-bg-color);transition:opacity var(--el-transition-duration),transform .4s,top .4s;padding:var(--el-message-padding);display:flex;align-items:center}.el-message.is-center{justify-content:center}.el-message.is-closable .el-message__content{padding-right:31px}.el-message p{margin:0}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:anywhere}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message__icon{margin-right:10px}.el-message .el-message__badge{position:absolute;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{position:absolute;top:50%;right:19px;transform:translateY(-50%);cursor:pointer;color:var(--el-message-close-icon-color);font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}.el-notification{--el-notification-width:330px;--el-notification-padding:14px 26px 14px 13px;--el-notification-radius:8px;--el-notification-shadow:var(--el-box-shadow-light);--el-notification-border-color:var(--el-border-color-lighter);--el-notification-icon-size:24px;--el-notification-close-font-size:var(--el-message-close-size, 16px);--el-notification-group-margin-left:13px;--el-notification-group-margin-right:8px;--el-notification-content-font-size:var(--el-font-size-base);--el-notification-content-color:var(--el-text-color-regular);--el-notification-title-font-size:16px;--el-notification-title-color:var(--el-text-color-primary);--el-notification-close-color:var(--el-text-color-secondary);--el-notification-close-hover-color:var(--el-text-color-regular)}.el-notification{display:flex;width:var(--el-notification-width);padding:var(--el-notification-padding);border-radius:var(--el-notification-radius);box-sizing:border-box;border:1px solid var(--el-notification-border-color);position:fixed;background-color:var(--el-bg-color-overlay);box-shadow:var(--el-notification-shadow);transition:opacity var(--el-transition-duration),transform var(--el-transition-duration),left var(--el-transition-duration),right var(--el-transition-duration),top .4s,bottom var(--el-transition-duration);overflow-wrap:anywhere;overflow:hidden;z-index:9999}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right)}.el-notification__title{font-weight:700;font-size:var(--el-notification-title-font-size);line-height:var(--el-notification-icon-size);color:var(--el-notification-title-color);margin:0}.el-notification__content{font-size:var(--el-notification-content-font-size);line-height:24px;margin:6px 0 0;color:var(--el-notification-content-color);text-align:justify}.el-notification__content p{margin:0}.el-notification .el-notification__icon{height:var(--el-notification-icon-size);width:var(--el-notification-icon-size);font-size:var(--el-notification-icon-size)}.el-notification .el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:var(--el-notification-close-color);font-size:var(--el-notification-close-font-size)}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--success{--el-notification-icon-color:var(--el-color-success);color:var(--el-notification-icon-color)}.el-notification .el-notification--info{--el-notification-icon-color:var(--el-color-info);color:var(--el-notification-icon-color)}.el-notification .el-notification--warning{--el-notification-icon-color:var(--el-color-warning);color:var(--el-notification-icon-color)}.el-notification .el-notification--error{--el-notification-icon-color:var(--el-color-error);color:var(--el-notification-icon-color)}.el-notification-fade-enter-from.right{right:0;transform:translate(100%)}.el-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.el-notification-fade-leave-to{opacity:0}.el-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;height:100%;background-color:var(--el-overlay-color-lighter);overflow:auto}.el-overlay .el-overlay-root{height:0}.el-page-header.is-contentful .el-page-header__main{border-top:1px solid var(--el-border-color-light);margin-top:16px}.el-page-header__header{display:flex;align-items:center;justify-content:space-between;line-height:24px}.el-page-header__left{display:flex;align-items:center;margin-right:40px;position:relative}.el-page-header__back{display:flex;align-items:center;cursor:pointer}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{font-size:16px;margin-right:10px;display:flex;align-items:center}.el-page-header__icon .el-icon{font-size:inherit}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:var(--el-text-color-primary)}.el-page-header__breadcrumb{margin-bottom:16px}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-item-gap:16px;white-space:nowrap;color:var(--el-pagination-text-color);font-size:var(--el-pagination-font-size);font-weight:400;display:flex;align-items:center}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield}.el-pagination .el-select .el-input{width:128px}.el-pagination button{display:flex;justify-content:center;align-items:center;font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);padding:0 4px;border:none;border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box}.el-pagination button *{pointer-events:none}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:var(--el-pagination-hover-color)}.el-pagination button.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination button.is-active.is-disabled{font-weight:700;color:var(--el-text-color-secondary)}.el-pagination button.is-disabled,.el-pagination button:disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pagination button:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{margin-left:var(--el-pagination-item-gap);font-weight:400;color:var(--el-text-color-regular)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{display:flex;align-items:center;margin-left:var(--el-pagination-item-gap);font-weight:400;color:var(--el-text-color-regular)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{text-align:center;box-sizing:border-box}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{flex:1;display:flex;align-items:center;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 4px;background-color:var(--el-pagination-button-bg-color)}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{color:var(--el-text-color-placeholder);background-color:var(--el-disabled-bg-color)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{color:var(--el-text-color-secondary);background-color:var(--el-fill-color-dark)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);font-size:var(--el-pagination-font-size-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select .el-input{width:100px}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0;padding:0;margin:0;display:flex;align-items:center}.el-pager li{display:flex;justify-content:center;align-items:center;font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);padding:0 4px;border:none;border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:0}.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{font-weight:700;color:var(--el-text-color-secondary)}.el-pager li.is-disabled,.el-pager li:disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-popconfirm__main{display:flex;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin-top:8px}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);min-width:150px;border-radius:var(--el-popover-border-radius);border:1px solid var(--el-popover-border-color);padding:var(--el-popover-padding);z-index:var(--el-index-popper);color:var(--el-text-color-regular);line-height:1.4;text-align:justify;font-size:var(--el-popover-font-size);box-shadow:var(--el-box-shadow-light);word-break:break-all;box-sizing:border-box}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.el-progress{position:relative;line-height:1;display:flex;align-items:center}.el-progress__text{font-size:14px;color:var(--el-text-color-regular);margin-left:5px;min-width:50px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{flex-grow:1;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:var(--el-border-color-lighter);overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:var(--el-color-primary);text-align:right;border-radius:100px;line-height:1;white-space:nowrap;transition:width .6s ease}.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{transform:translateZ(0);-webkit-animation:indeterminate 3s infinite;animation:indeterminate 3s infinite}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{-webkit-animation:striped-flow 3s linear infinite;animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@-webkit-keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@-webkit-keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light)}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));border-left:0;color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:8px 15px;font-size:var(--el-font-size-base);border-radius:0}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:var(--el-border);border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button__original-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__original-radio:checked+.el-radio-button__inner{color:var(--el-radio-button-checked-text-color,var(--el-color-white));background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary))}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2;border-radius:var(--el-border-radius-base);box-shadow:none}.el-radio-button__original-radio:disabled+.el-radio-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{padding:12px 19px;font-size:var(--el-font-size-base);border-radius:0}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{padding:5px 11px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{display:inline-flex;align-items:center;flex-wrap:wrap;font-size:0}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary)}.el-radio{color:var(--el-radio-text-color);font-weight:var(--el-radio-font-weight);position:relative;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;outline:0;font-size:var(--el-font-size-base);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:32px;height:32px}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{padding:0 15px 0 9px;border-radius:var(--el-border-radius-base);border:var(--el-border);box-sizing:border-box}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:var(--el-border-color-lighter)}.el-radio.is-bordered.el-radio--large{padding:0 19px 0 11px;border-radius:var(--el-border-radius-base)}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{padding:0 11px 0 7px;border-radius:var(--el-border-radius-base)}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-flex;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:var(--el-color-primary);background:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);width:var(--el-radio-input-width);height:var(--el-radio-input-height);background-color:var(--el-radio-input-bg-color);position:relative;cursor:pointer;display:inline-block;box-sizing:border-box}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{width:4px;height:4px;border-radius:var(--el-radio-input-border-radius);background-color:var(--el-color-white);content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio__original:focus-visible+.el-radio__inner{outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px;border-radius:var(--el-radio-input-border-radius)}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{width:14px;height:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{width:12px;height:12px}.el-rate{--el-rate-height:20px;--el-rate-font-size:var(--el-font-size-base);--el-rate-icon-size:18px;--el-rate-icon-margin:6px;--el-rate-void-color:var(--el-border-color-darker);--el-rate-fill-color:#f7ba2a;--el-rate-disabled-void-color:var(--el-fill-color);--el-rate-text-color:var(--el-text-color-primary)}.el-rate{display:inline-flex;align-items:center;height:32px}.el-rate:active,.el-rate:focus{outline:0}.el-rate__item{cursor:pointer;display:inline-block;position:relative;font-size:0;vertical-align:middle;color:var(--el-rate-void-color);line-height:normal}.el-rate .el-rate__icon{position:relative;display:inline-block;font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);transition:var(--el-transition-duration)}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{position:absolute;left:0;top:0}.el-rate .el-rate__icon.is-active{color:var(--el-rate-fill-color)}.el-rate__decimal{position:absolute;top:0;left:0;display:inline-block;overflow:hidden;color:var(--el-rate-fill-color)}.el-rate__text{font-size:var(--el-rate-font-size);vertical-align:middle;color:var(--el-rate-text-color)}.el-rate--large{height:40px}.el-rate--small{height:24px}.el-rate--small .el-rate__icon{font-size:14px}.el-rate.is-disabled .el-rate__item{cursor:auto;color:var(--el-rate-disabled-void-color)}.el-result{--el-result-padding:40px 30px;--el-result-icon-font-size:64px;--el-result-title-font-size:20px;--el-result-title-margin-top:20px;--el-result-subtitle-margin-top:10px;--el-result-extra-margin-top:30px}.el-result{display:flex;justify-content:center;align-items:center;flex-direction:column;text-align:center;box-sizing:border-box;padding:var(--el-result-padding)}.el-result__icon svg{width:var(--el-result-icon-font-size);height:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{margin:0;font-size:var(--el-result-title-font-size);color:var(--el-text-color-primary);line-height:1.3}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{margin:0;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);line-height:1.3}.el-result__extra{margin-top:var(--el-result-extra-margin-top)}.el-result .icon-primary{--el-result-color:var(--el-color-primary);color:var(--el-result-color)}.el-result .icon-success{--el-result-color:var(--el-color-success);color:var(--el-result-color)}.el-result .icon-warning{--el-result-color:var(--el-color-warning);color:var(--el-result-color)}.el-result .icon-danger{--el-result-color:var(--el-color-danger);color:var(--el-result-color)}.el-result .icon-error{--el-result-color:var(--el-color-error);color:var(--el-result-color)}.el-result .icon-info{--el-result-color:var(--el-color-info);color:var(--el-result-color)}.el-row{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary)}.el-scrollbar{overflow:hidden;position:relative;height:100%}.el-scrollbar__wrap{overflow:auto;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3)}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__option-item.is-selected:not(.is-multiple).is-disabled{color:var(--el-text-color-disabled)}.el-select-dropdown__option-item.is-selected:not(.is-multiple).is-disabled:after{background-color:var(--el-text-color-disabled)}.el-select-dropdown__option-item:hover:not(.hover){background-color:transparent}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-disabled.is-selected{color:var(--el-text-color-disabled)}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size)}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;margin:6px 0!important;padding:0!important;box-sizing:border-box}.el-select-dropdown__option-item{font-size:var(--el-select-font-size);padding:0 32px 0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--el-text-color-regular);height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__option-item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown__option-item.is-disabled:hover{background-color:var(--el-bg-color)}.el-select-dropdown__option-item.is-selected{background-color:var(--el-fill-color-light);font-weight:700}.el-select-dropdown__option-item.is-selected:not(.is-multiple){color:var(--el-color-primary)}.el-select-dropdown__option-item.hover{background-color:var(--el-fill-color-light)!important}.el-select-dropdown__option-item:hover{background-color:var(--el-fill-color-light)}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-selected{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay)}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-selected .el-icon{position:absolute;right:20px;top:0;height:inherit;font-size:12px}.el-select-dropdown.is-multiple .el-select-dropdown__option-item.is-selected .el-icon svg{height:inherit;vertical-align:middle}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:var(--el-border-color-light)}.el-select-group__split-dash{position:absolute;left:20px;right:20px;height:1px;background:var(--el-border-color-light)}.el-select-group__title{padding-left:20px;font-size:12px;color:var(--el-color-info);line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-v2{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px}.el-select-v2{display:inline-block;position:relative;vertical-align:middle;font-size:14px}.el-select-v2__wrapper{display:flex;align-items:center;flex-wrap:wrap;position:relative;box-sizing:border-box;cursor:pointer;padding:1px 30px 1px 0;border:1px solid var(--el-border-color);border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);transition:var(--el-transition-duration)}.el-select-v2__wrapper:hover{border-color:var(--el-text-color-placeholder)}.el-select-v2__wrapper.is-filterable{cursor:text}.el-select-v2__wrapper.is-focused{border-color:var(--el-color-primary)}.el-select-v2__wrapper.is-hovering:not(.is-focused){border-color:var(--el-border-color-hover)}.el-select-v2__wrapper.is-disabled{cursor:not-allowed;background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);border-color:var(--el-select-disabled-border)}.el-select-v2__wrapper.is-disabled:hover{border-color:var(--el-select-disabled-border)}.el-select-v2__wrapper.is-disabled.is-focus{border-color:var(--el-input-focus-border-color)}.el-select-v2__wrapper.is-disabled .is-transparent{opacity:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-select-v2__wrapper.is-disabled .el-select-v2__caret,.el-select-v2__wrapper.is-disabled .el-select-v2__combobox-input{cursor:not-allowed}.el-select-v2__wrapper .el-select-v2__input-wrapper{box-sizing:border-box;position:relative;-webkit-margin-start:12px;margin-inline-start:12px;max-width:100%;overflow:hidden}.el-select-v2__wrapper,.el-select-v2__wrapper .el-select-v2__input-wrapper{line-height:32px}.el-select-v2__wrapper .el-select-v2__input-wrapper input{--el-input-inner-height:calc(var(--el-component-size, 32px) - 8px);height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);min-width:4px;width:100%;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:none;margin:2px 0;outline:0;padding:0}.el-select-v2 .el-select-v2__tags-text{display:inline-block;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select-v2__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:14px}.el-select-v2__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select-v2__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select-v2__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-select-v2__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select-v2__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-select-v2__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select-v2--large .el-select-v2__wrapper .el-select-v2__combobox-input{height:32px}.el-select-v2--large .el-select-v2__caret,.el-select-v2--large .el-select-v2__suffix{height:40px}.el-select-v2--large .el-select-v2__placeholder{font-size:14px;line-height:40px}.el-select-v2--small .el-select-v2__wrapper .el-select-v2__combobox-input{height:16px}.el-select-v2--small .el-select-v2__caret,.el-select-v2--small .el-select-v2__suffix{height:24px}.el-select-v2--small .el-select-v2__placeholder{font-size:12px;line-height:24px}.el-select-v2 .el-select-v2__selection>span{display:inline-block}.el-select-v2:hover .el-select-v2__combobox-input{border-color:var(--el-select-border-color-hover)}.el-select-v2 .el-select__selection-text{text-overflow:ellipsis;display:inline-block;overflow-x:hidden;vertical-align:bottom}.el-select-v2 .el-select-v2__combobox-input{padding-right:35px;display:block;color:var(--el-text-color-regular)}.el-select-v2 .el-select-v2__combobox-input:focus{border-color:var(--el-select-input-focus-border-color)}.el-select-v2__input{border:none;outline:0;padding:0;margin-left:15px;color:var(--el-select-multiple-input-color);font-size:var(--el-select-font-size);-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px}.el-select-v2__input.is-small{height:14px}.el-select-v2__close{cursor:pointer;position:absolute;top:8px;z-index:var(--el-index-top);right:25px;color:var(--el-select-input-color);line-height:18px;font-size:var(--el-select-input-font-size)}.el-select-v2__close:hover{color:var(--el-select-close-hover-color)}.el-select-v2__suffix{display:inline-flex;position:absolute;right:12px;height:32px;top:50%;transform:translateY(-50%);color:var(--el-input-icon-color,var(--el-text-color-placeholder))}.el-select-v2__suffix .el-input__icon{height:inherit}.el-select-v2__suffix .el-input__icon:not(:first-child){margin-left:8px}.el-select-v2__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:var(--el-transition-duration);transform:rotate(180deg);cursor:pointer}.el-select-v2__caret.is-reverse{transform:rotate(0)}.el-select-v2__caret.is-show-close{font-size:var(--el-select-font-size);text-align:center;transform:rotate(180deg);border-radius:var(--el-border-radius-circle);color:var(--el-select-input-color);transition:var(--el-transition-color)}.el-select-v2__caret.is-show-close:hover{color:var(--el-select-close-hover-color)}.el-select-v2__caret.el-icon{height:inherit}.el-select-v2__caret.el-icon svg{vertical-align:middle}.el-select-v2__selection{white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;width:100%}.el-select-v2__input-calculator{left:0;position:absolute;top:0;visibility:hidden;white-space:pre;z-index:999}.el-select-v2__selected-item{line-height:inherit;height:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-wrap:wrap}.el-select-v2__placeholder{position:absolute;top:50%;transform:translateY(-50%);-webkit-margin-start:12px;margin-inline-start:12px;width:calc(100% - 52px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--el-input-text-color,var(--el-text-color-regular))}.el-select-v2__placeholder.is-transparent{color:var(--el-text-color-placeholder)}.el-select-v2 .el-select-v2__selection .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:var(--el-fill-color)}.el-select-v2 .el-select-v2__selection .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;color:var(--el-color-white)}.el-select-v2 .el-select-v2__selection .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select-v2 .el-select-v2__selection .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select-v2.el-select-v2--small .el-select-v2__selection .el-tag{margin:1px 0 1px 6px;height:18px}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:var(--el-fill-color-light)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.is-disabled:after{background-color:var(--el-text-color-disabled)}.el-select-dropdown .el-select-dropdown__option-item.is-selected:after{content:"";position:absolute;top:50%;right:20px;border-top:none;border-right:none;background-repeat:no-repeat;background-position:center;background-color:var(--el-color-primary);-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;transform:translateY(-50%);width:12px;height:12px}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown .el-select-dropdown__item.is-disabled:hover{background-color:unset}.el-select-dropdown .el-select-dropdown__item.is-disabled.selected{color:var(--el-text-color-disabled)}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size)}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px}.el-select{display:inline-block;position:relative;vertical-align:middle;line-height:32px}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent;border-bottom-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select .el-select-tags-wrapper.has-prefix{margin-left:6px}.el-select--large{line-height:40px}.el-select--large .el-select-tags-wrapper.has-prefix{margin-left:8px}.el-select--small{line-height:24px}.el-select--small .el-select-tags-wrapper.has-prefix{margin-left:4px}.el-select .el-select__tags>span{display:inline-block}.el-select:hover:not(.el-select--disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-select-border-color-hover) inset}.el-select .el-select__tags-text{display:inline-block;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select .el-input__wrapper{cursor:pointer}.el-select .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-select-input-focus-border-color) inset!important}.el-select .el-input__inner{cursor:pointer}.el-select .el-input{display:flex}.el-select .el-input .el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:transform var(--el-transition-duration);transform:rotate(0);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{transform:rotate(-180deg)}.el-select .el-input .el-select__caret.is-show-close{font-size:var(--el-select-font-size);text-align:center;transform:rotate(0);border-radius:var(--el-border-radius-circle);color:var(--el-select-input-color);transition:var(--el-transition-color)}.el-select .el-input .el-select__caret.is-show-close:hover{color:var(--el-select-close-hover-color)}.el-select .el-input .el-select__caret.el-icon{position:relative;height:inherit;z-index:2}.el-select .el-input.is-disabled .el-input__wrapper{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select .el-input.is-disabled .el-input__inner,.el-select .el-input.is-disabled .el-select__caret{cursor:not-allowed}.el-select .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-select-input-focus-border-color) inset!important}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:var(--el-select-multiple-input-color);font-size:var(--el-select-font-size);-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-disabled{cursor:not-allowed}.el-select__input--iOS{position:absolute;left:0;top:0;z-index:6}.el-select__input.is-small{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:var(--el-index-top);right:25px;color:var(--el-select-input-color);line-height:18px;font-size:var(--el-select-input-font-size)}.el-select__close:hover{color:var(--el-select-close-hover-color)}.el-select__tags{position:absolute;line-height:normal;top:50%;transform:translateY(-50%);white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;cursor:pointer}.el-select__tags .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 6px 2px 0}.el-select__tags .el-tag:last-child{margin-right:0}.el-select__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;top:0;color:#fff}.el-select__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select__tags .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select__tags .el-tag--info{background-color:var(--el-fill-color)}.el-select__tags.is-disabled{cursor:not-allowed}.el-select__collapse-tags{white-space:normal;z-index:var(--el-index-normal);display:flex;align-items:center;flex-wrap:wrap;cursor:pointer}.el-select__collapse-tags .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 6px 2px 0}.el-select__collapse-tags .el-tag:last-child{margin-right:0}.el-select__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);right:-7px;top:0;color:#fff}.el-select__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-select__collapse-tags .el-tag .el-icon-close:before{display:block;transform:translateY(.5px)}.el-select__collapse-tags .el-tag--info{background-color:var(--el-fill-color)}.el-select__collapse-tag{line-height:inherit;height:inherit;display:flex}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);display:inline-block;height:16px;border-radius:var(--el-border-radius-base);width:100%}.el-skeleton__circle{border-radius:50%;width:var(--el-skeleton-circle-size);height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size)}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:var(--el-font-size-small)}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{width:unset;display:flex;align-items:center;justify-content:center;border-radius:0}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:22%;height:22%}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:var(--el-skeleton-color)}.el-skeleton.is-animated .el-skeleton__item{background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px}.el-slider{width:100%;height:32px;display:flex;align-items:center}.el-slider__runway{flex:1;height:var(--el-slider-height);background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);position:relative;cursor:pointer}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{height:var(--el-slider-height);background-color:var(--el-slider-main-bg-color);border-top-left-radius:var(--el-slider-border-radius);border-bottom-left-radius:var(--el-slider-border-radius);position:absolute}.el-slider__button-wrapper{height:var(--el-slider-button-wrapper-size);width:var(--el-slider-button-wrapper-size);position:absolute;z-index:1;top:var(--el-slider-button-wrapper-offset);transform:translate(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;outline:0}.el-slider__button-wrapper:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{display:inline-block;width:var(--el-slider-button-size);height:var(--el-slider-button-size);vertical-align:middle;border:solid 2px var(--el-slider-main-bg-color);background-color:var(--el-color-white);border-radius:50%;box-sizing:border-box;transition:var(--el-transition-duration-fast);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:var(--el-slider-height);width:var(--el-slider-height);border-radius:var(--el-border-radius-circle);background-color:var(--el-slider-stop-bg-color);transform:translate(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;transform:translate(-50%);font-size:14px;color:var(--el-color-info);margin-top:15px;white-space:pre}.el-slider.is-vertical{position:relative;display:inline-flex;width:auto;height:100%;flex:0}.el-slider.is-vertical .el-slider__runway{width:var(--el-slider-height);height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:var(--el-slider-height);height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:var(--el-slider-button-wrapper-offset);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{display:inline-flex;vertical-align:top}.el-space__item{display:flex;flex-wrap:wrap}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{transform:rotate(360deg)}}@keyframes rotate{to{transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-step{position:relative;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-basis:auto!important;flex-shrink:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:var(--el-text-color-primary);border-color:var(--el-text-color-primary)}.el-step__head.is-wait{color:var(--el-text-color-placeholder);border-color:var(--el-text-color-placeholder)}.el-step__head.is-success{color:var(--el-color-success);border-color:var(--el-color-success)}.el-step__head.is-error{color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-step__head.is-finish{color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-step__icon{position:relative;z-index:1;display:inline-flex;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;box-sizing:border-box;background:var(--el-bg-color);transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:var(--el-text-color-placeholder)}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:.15s ease-out;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:var(--el-text-color-primary)}.el-step__title.is-wait{color:var(--el-text-color-placeholder)}.el-step__title.is-success{color:var(--el-color-success)}.el-step__title.is-error{color:var(--el-color-danger)}.el-step__title.is-finish{color:var(--el-color-primary)}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:var(--el-text-color-primary)}.el-step__description.is-wait{color:var(--el-text-color-placeholder)}.el-step__description.is-success{color:var(--el-color-success)}.el-step__description.is-error{color:var(--el-color-danger)}.el-step__description.is-finish{color:var(--el-color-primary)}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:flex;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:flex;align-items:stretch;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{flex-grow:1;display:flex;align-items:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:var(--el-text-color-placeholder)}.el-step.is-simple .el-step__arrow:before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:var(--el-fill-color-light)}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;flex-flow:column}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color)}.el-switch{display:inline-flex;align-items:center;position:relative;font-size:14px;line-height:20px;height:32px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:var(--el-transition-duration-fast);height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:var(--el-text-color-primary)}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{display:inline-flex;position:relative;align-items:center;min-width:40px;height:20px;border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));outline:0;border-radius:10px;box-sizing:border-box;background:var(--el-switch-off-color);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{width:100%;transition:all var(--el-transition-duration);height:16px;display:flex;justify-content:center;align-items:center;overflow:hidden;padding:0 4px 0 18px}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{font-size:12px;color:var(--el-color-white);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-switch__core .el-switch__action{position:absolute;left:1px;border-radius:var(--el-border-radius-circle);transition:all var(--el-transition-duration);width:16px;height:16px;background-color:var(--el-color-white);display:flex;justify-content:center;align-items:center;color:var(--el-switch-off-color)}.el-switch.is-checked .el-switch__core{border-color:var(--el-switch-border-color,var(--el-switch-on-color));background-color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__action{left:calc(100% - 17px);color:var(--el-switch-on-color)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;line-height:24px;height:40px}.el-switch--large .el-switch__label{height:24px;font-size:14px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{min-width:50px;height:24px;border-radius:12px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{width:20px;height:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;line-height:16px;height:24px}.el-switch--small .el-switch__label{height:16px;font-size:12px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{min-width:30px;height:16px;border-radius:8px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{width:12px;height:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:solid 1px var(--el-border-color-lighter);border-radius:2px;background-color:#fff;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:var(--el-font-size-base)}.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:flex;align-items:center;margin-right:5px;margin-bottom:12px;margin-left:5px;height:unset}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0, 0, 0, .15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0, 0, 0, .15)}.el-table{position:relative;overflow:hidden;box-sizing:border-box;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;width:100%;max-width:100%;background-color:var(--el-table-bg-color);font-size:14px;color:var(--el-table-text-color)}.el-table__inner-wrapper{position:relative;display:flex;flex-direction:column;height:100%}.el-table__inner-wrapper:before{left:0;bottom:0;width:100%;height:1px}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{position:-webkit-sticky;position:sticky;left:0;min-height:60px;text-align:center;width:100%;display:flex;justify-content:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:var(--el-text-color-secondary)}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table__expand-icon{position:relative;cursor:pointer;color:var(--el-text-color-regular);font-size:12px;transition:transform var(--el-transition-duration-fast) ease-in-out;height:20px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table thead{color:var(--el-table-header-text-color);font-weight:500}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{padding:8px 0;min-width:0;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left;z-index:1}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding:0 12px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:14px}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table__footer-wrapper{border-top:var(--el-table-border)}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{content:"";position:absolute;background-color:var(--el-table-border-color);z-index:3}.el-table--border .el-table__inner-wrapper:after{left:0;top:0;width:100%;height:1px}.el-table--border:before{top:-1px;left:0;width:1px;height:100%}.el-table--border:after{top:-1px;right:0;width:1px;height:100%}.el-table--border .el-table__inner-wrapper{border-right:none;border-bottom:none}.el-table--border .el-table__footer-wrapper{position:relative;flex-shrink:0}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{position:-webkit-sticky!important;position:sticky!important;z-index:2;background:var(--el-bg-color)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{content:"";position:absolute;top:0;width:10px;bottom:-1px;overflow-x:hidden;overflow-y:hidden;box-shadow:none;touch-action:none;pointer-events:none}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px;box-shadow:none}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{position:-webkit-sticky!important;position:sticky!important;z-index:2;background:#fff;right:0}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{display:inline-flex;align-items:center;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{overflow:hidden;position:relative;flex:1}.el-table__body-wrapper .el-scrollbar__bar{z-index:2}.el-table .caret-wrapper{display:inline-flex;flex-direction:column;align-items:center;height:14px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:solid 5px transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:var(--el-table-border);z-index:10}.el-table__column-filter-trigger{display:inline-block;cursor:pointer}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{top:0;left:0;width:1px;height:100%;z-index:3;position:absolute;background-color:var(--el-table-border-color)}.el-table__border-bottom-patch{left:0;height:1px;z-index:3;position:absolute;background-color:var(--el-table-border-color)}.el-table__border-right-patch{top:0;height:100%;width:1px;z-index:3;position:absolute;background-color:var(--el-table-border-color)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:12px;line-height:12px;height:12px;text-align:center;margin-right:8px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-v2{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0, 0, 0, .15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0, 0, 0, .15)}.el-table-v2{font-size:14px}.el-table-v2 *{box-sizing:border-box}.el-table-v2__root{position:relative}.el-table-v2__root:hover .el-table-v2__main .el-virtual-scrollbar{opacity:1}.el-table-v2__main{display:flex;flex-direction:column-reverse;position:absolute;overflow:hidden;top:0;background-color:var(--el-bg-color);left:0}.el-table-v2__main .el-vl__horizontal,.el-table-v2__main .el-vl__vertical{z-index:2}.el-table-v2__left{display:flex;flex-direction:column-reverse;position:absolute;overflow:hidden;top:0;background-color:var(--el-bg-color);left:0;box-shadow:2px 0 4px #0000000f}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__horizontal,.el-table-v2__left .el-vl__vertical{z-index:-1}.el-table-v2__right{display:flex;flex-direction:column-reverse;position:absolute;overflow:hidden;top:0;background-color:var(--el-bg-color);right:0;box-shadow:-2px 0 4px #0000000f}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__horizontal,.el-table-v2__right .el-vl__vertical{z-index:-1}.el-table-v2__header-row,.el-table-v2__row{-webkit-padding-end:var(--el-table-scrollbar-size);padding-inline-end:var(--el-table-scrollbar-size)}.el-table-v2__header-wrapper{overflow:hidden}.el-table-v2__header{position:relative;overflow:hidden}.el-table-v2__footer{position:absolute;left:0;right:0;bottom:0;overflow:hidden}.el-table-v2__empty{position:absolute;left:0}.el-table-v2__overlay{position:absolute;left:0;right:0;top:0;bottom:0;z-index:9999}.el-table-v2__header-row{display:flex;border-bottom:var(--el-table-border)}.el-table-v2__header-cell{display:flex;align-items:center;padding:0 8px;height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;background-color:var(--el-table-header-bg-color);color:var(--el-table-header-text-color);font-weight:700}.el-table-v2__header-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__header-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{transition:opacity,display var(--el-transition-duration);opacity:.6;display:none}.el-table-v2__sort-icon.is-sorting{display:block;opacity:1}.el-table-v2__row{border-bottom:var(--el-table-border);display:flex;align-items:center;transition:background-color var(--el-transition-duration)}.el-table-v2__row.is-hovered,.el-table-v2__row:hover{background-color:var(--el-table-row-hover-bg-color)}.el-table-v2__row-cell{height:100%;overflow:hidden;display:flex;align-items:center;padding:0 8px}.el-table-v2__row-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__row-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__expand-icon{margin:0 4px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table-v2__expand-icon svg{transition:transform var(--el-transition-duration)}.el-table-v2__expand-icon.is-expanded svg{transform:rotate(90deg)}.el-table-v2:not(.is-dynamic) .el-table-v2__cell-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-table-v2.is-dynamic .el-table-v2__row{overflow:hidden;align-items:stretch}.el-table-v2.is-dynamic .el-table-v2__row .el-table-v2__row-cell{word-break:break-all}.el-tabs{--el-tabs-header-height:40px}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:var(--el-color-primary);z-index:1;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);list-style:none}.el-tabs__new-tab{display:flex;align-items:center;justify-content:center;float:right;border:1px solid var(--el-border-color);height:20px;width:20px;line-height:20px;margin:10px 0 10px 10px;border-radius:3px;text-align:center;font-size:12px;color:var(--el-text-color-primary);cursor:pointer;transition:all .15s}.el-tabs__new-tab .is-icon-plus{height:inherit;width:inherit;transform:scale(.8)}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:var(--el-border-color-light);z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:var(--el-text-color-secondary);width:20px;text-align:center}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;white-space:nowrap;position:relative;transition:transform var(--el-transition-duration);float:left;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:var(--el-tabs-header-height);box-sizing:border-box;display:flex;align-items:center;justify-content:center;list-style:none;font-size:var(--el-font-size-base);font-weight:500;color:var(--el-text-color-primary);position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus-visible{box-shadow:0 0 2px 2px var(--el-color-primary) inset;border-radius:3px}.el-tabs__item .is-icon-close{border-radius:50%;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);margin-left:5px}.el-tabs__item .is-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{position:relative;font-size:12px;width:0;height:14px;overflow:hidden;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);border:1px solid transparent;margin-top:-1px;color:var(--el-text-color-secondary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay);border-right-color:var(--el-border-color);border-left-color:var(--el-border-color)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover{padding-left:13px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover{padding-right:13px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__active-bar.is-left{right:0;left:auto}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid var(--el-border-color-light);border-bottom:none;border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid var(--el-border-color-light);border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid var(--el-border-color-light);border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter var(--el-transition-duration);animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave var(--el-transition-duration);animation:slideInRight-leave var(--el-transition-duration)}.slideInLeft-enter{-webkit-animation:slideInLeft-enter var(--el-transition-duration);animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave var(--el-transition-duration);animation:slideInLeft-leave var(--el-transition-duration)}@-webkit-keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@-webkit-keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(100%);opacity:0}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@-webkit-keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translate(0);opacity:1}to{transform-origin:0 0;transform:translate(-100%);opacity:0}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px}.el-tag{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary);--el-tag-text-color:var(--el-color-primary);background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);display:inline-flex;justify-content:center;align-items:center;height:24px;padding:0 9px;font-size:var(--el-tag-font-size);line-height:1;border-width:1px;border-style:solid;border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px}.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color)}.el-tag .el-tag__close:hover{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.el-tag .el-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{margin-left:6px}.el-tag--dark{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3);--el-tag-text-color:var(--el-color-white)}.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--el-tag-text-color:var(--el-color-white)}.el-tag--plain{--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary);--el-tag-bg-color:var(--el-fill-color-blank)}.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{padding:0 11px;height:32px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{padding:0 7px;height:20px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular)}.el-text{align-self:center;margin:0;padding:0;font-size:var(--el-text-font-size);color:var(--el-text-color);word-break:break-all}.el-text.is-truncated{display:inline-block;max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.disabled{color:var(--el-datepicker-border-color);cursor:not-allowed}.time-select-item:hover{background-color:var(--el-fill-color-light);font-weight:700;cursor:pointer}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:700}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid var(--el-timeline-node-color)}.el-timeline-item .el-timeline-item__icon{color:var(--el-color-white);font-size:var(--el-font-size-small)}.el-timeline-item__node{position:absolute;background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);border-radius:50%;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.el-timeline-item__node--normal{left:-1px;width:var(--el-timeline-node-size-normal);height:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{left:-2px;width:var(--el-timeline-node-size-large);height:var(--el-timeline-node-size-large)}.el-timeline-item__node.is-hollow{background:var(--el-color-white);border-style:solid;border-width:2px}.el-timeline-item__node--primary{background-color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-timeline-item__node--success{background-color:var(--el-color-success);border-color:var(--el-color-success)}.el-timeline-item__node--warning{background-color:var(--el-color-warning);border-color:var(--el-color-warning)}.el-timeline-item__node--danger{background-color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-timeline-item__node--info{background-color:var(--el-color-info);border-color:var(--el-color-info)}.el-timeline-item__dot{position:absolute;display:flex;justify-content:center;align-items:center}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);line-height:1;font-size:var(--el-font-size-small)}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline{--el-timeline-node-size-normal:12px;--el-timeline-node-size-large:14px;--el-timeline-node-color:var(--el-border-color-light)}.el-timeline{margin:0;font-size:var(--el-font-size-base);list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline .el-timeline-item__center{display:flex;align-items:center}.el-timeline .el-timeline-item__center .el-timeline-item__wrapper{width:100%}.el-timeline .el-timeline-item__center .el-timeline-item__tail{top:0}.el-timeline .el-timeline-item__center:first-child .el-timeline-item__tail{height:calc(50% + 10px);top:calc(50% - 10px)}.el-timeline .el-timeline-item__center:last-child .el-timeline-item__tail{display:block;height:calc(50% - 10px)}.el-tooltip-v2__content{--el-tooltip-v2-padding:5px 10px;--el-tooltip-v2-border-radius:4px;--el-tooltip-v2-border-color:var(--el-border-color);border-radius:var(--el-tooltip-v2-border-radius);color:var(--el-color-black);background-color:var(--el-color-white);padding:var(--el-tooltip-v2-padding);border:1px solid var(--el-border-color)}.el-tooltip-v2__arrow{position:absolute;color:var(--el-color-white);width:var(--el-tooltip-v2-arrow-width);height:var(--el-tooltip-v2-arrow-height);pointer-events:none;left:var(--el-tooltip-v2-arrow-x);top:var(--el-tooltip-v2-arrow-y)}.el-tooltip-v2__arrow:before{content:"";width:0;height:0;border:var(--el-tooltip-v2-arrow-border-width) solid transparent;position:absolute}.el-tooltip-v2__arrow:after{content:"";width:0;height:0;border:var(--el-tooltip-v2-arrow-border-width) solid transparent;position:absolute}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow{bottom:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:before{border-top-color:var(--el-color-white);border-top-width:var(--el-tooltip-v2-arrow-border-width);border-bottom:0;top:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:after{border-top-color:var(--el-border-color);border-top-width:var(--el-tooltip-v2-arrow-border-width);border-bottom:0;top:100%;z-index:-1}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow{top:0}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:before{border-bottom-color:var(--el-color-white);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:after{border-bottom-color:var(--el-border-color);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:100%;z-index:-1}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow{right:0}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:before{border-left-color:var(--el-color-white);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:after{border-left-color:var(--el-border-color);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:100%;z-index:-1}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow{left:0}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:before{border-right-color:var(--el-color-white);border-right-width:var(--el-tooltip-v2-arrow-border-width);border-left:0;right:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:after{border-right-color:var(--el-border-color);border-right-width:var(--el-tooltip-v2-arrow-border-width);border-left:0;right:100%;z-index:-1}.el-tooltip-v2__content.is-dark{--el-tooltip-v2-border-color:transparent;background-color:var(--el-color-black);color:var(--el-color-white);border-color:transparent}.el-tooltip-v2__content.is-dark .el-tooltip-v2__arrow{background-color:var(--el-color-black);border-color:transparent}.el-transfer{--el-transfer-border-color:var(--el-border-color-lighter);--el-transfer-border-radius:var(--el-border-radius-base);--el-transfer-panel-width:200px;--el-transfer-panel-header-height:40px;--el-transfer-panel-header-bg-color:var(--el-fill-color-light);--el-transfer-panel-footer-height:40px;--el-transfer-panel-body-height:278px;--el-transfer-item-height:30px;--el-transfer-filter-height:32px}.el-transfer{font-size:var(--el-font-size-base)}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{vertical-align:top}.el-transfer__button:nth-child(2){margin:0 0 0 10px}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button .el-icon+span{margin-left:0}.el-transfer-panel{overflow:hidden;background:var(--el-bg-color-overlay);display:inline-block;text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width);max-height:100%;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:var(--el-transfer-panel-body-height);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);border-bottom:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:var(--el-transfer-panel-body-height);overflow:auto;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular)}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;box-sizing:border-box;padding-left:22px;line-height:var(--el-transfer-item-height)}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;padding:15px;box-sizing:border-box}.el-transfer-panel__filter .el-input__inner{height:var(--el-transfer-filter-height);width:100%;font-size:12px;display:inline-block;box-sizing:border-box;border-radius:calc(var(--el-transfer-filter-height)/ 2)}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{display:flex;align-items:center;height:var(--el-transfer-panel-header-height);background:var(--el-transfer-panel-header-bg-color);margin:0;padding-left:15px;border:1px solid var(--el-transfer-border-color);border-top-left-radius:var(--el-transfer-border-radius);border-top-right-radius:var(--el-transfer-border-radius);box-sizing:border-box;color:var(--el-color-black)}.el-transfer-panel .el-transfer-panel__header .el-checkbox{position:relative;display:flex;width:100%;align-items:center}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:var(--el-text-color-primary);font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;top:50%;transform:translate3d(0,-50%,0);color:var(--el-text-color-secondary);font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:var(--el-transfer-panel-footer-height);background:var(--el-bg-color-overlay);margin:0;padding:0;border:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius)}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:var(--el-text-color-regular)}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding:6px 15px 0;color:var(--el-text-color-secondary);text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-tree{--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree{position:relative;cursor:default;background:var(--el-fill-color-blank);color:var(--el-tree-text-color);font-size:var(--el-font-size-base)}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:var(--el-text-color-secondary);font-size:var(--el-font-size-base)}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:var(--el-color-primary)}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{display:flex;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px;box-sizing:content-box}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:var(--el-tree-expand-icon-color);font-size:12px;transform:rotate(0);transition:transform var(--el-transition-duration) ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{margin-right:8px;font-size:var(--el-font-size-base);color:var(--el-tree-expand-icon-color)}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-tree-select{--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected:after{content:none}.el-tree-select__popper .el-select-dropdown__item{flex:1;background:0 0!important;padding-left:0;height:20px;line-height:20px}.el-upload{--el-upload-dragger-padding-horizontal:40px;--el-upload-dragger-padding-vertical:10px}.el-upload{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:var(--el-text-color-regular);margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0}.el-upload--picture-card{--el-upload-picture-card-size:148px;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;width:var(--el-upload-picture-card-size);height:var(--el-upload-picture-card-size);cursor:pointer;vertical-align:top;display:inline-flex;justify-content:center;align-items:center}.el-upload--picture-card i{font-size:28px;color:var(--el-text-color-secondary)}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{padding:var(--el-upload-dragger-padding-horizontal) var(--el-upload-dragger-padding-vertical);background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;text-align:center;cursor:pointer;position:relative;overflow:hidden}.el-upload-dragger .el-icon--upload{font-size:67px;color:var(--el-text-color-placeholder);margin-bottom:16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{padding:calc(var(--el-upload-dragger-padding-horizontal) - 1px) calc(var(--el-upload-dragger-padding-vertical) - 1px);background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary)}.el-upload-list{margin:10px 0 0;padding:0;list-style:none;position:relative}.el-upload-list__item{transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:var(--el-text-color-regular);margin-bottom:5px;position:relative;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{display:none;position:absolute;right:5px;top:50%;cursor:pointer;opacity:.75;color:var(--el-text-color-regular);transition:opacity var(--el-transition-duration);transform:translateY(-50%)}.el-upload-list__item .el-icon--close:hover{opacity:1;color:var(--el-color-primary)}.el-upload-list__item .el-icon--close-tip{display:none;position:absolute;top:1px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:var(--el-color-primary);font-style:normal}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;justify-content:center;flex-direction:column;width:calc(100% - 30px);margin-left:4px}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{color:var(--el-text-color-regular);display:inline-flex;text-align:center;align-items:center;padding:0 4px;transition:color var(--el-transition-duration);font-size:var(--el-font-size-base)}.el-upload-list__item-name .el-icon{margin-right:6px;color:var(--el-text-color-secondary)}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none;height:100%;justify-content:center;align-items:center;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:var(--el-text-color-regular);display:none}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{--el-upload-list-picture-card-size:148px;display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;width:var(--el-upload-list-picture-card-size);height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;padding:0;display:inline-flex}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:block}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.el-upload-list--picture-card .el-upload-list__item-status-label{right:-15px;top:-6px;width:40px;height:24px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;display:inline-flex;justify-content:center;align-items:center;color:#fff;opacity:0;font-size:20px;background-color:var(--el-overlay-color-lighter);transition:opacity var(--el-transition-duration)}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:1rem}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{top:50%;left:50%;transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;margin-top:10px;padding:10px;display:flex;align-items:center}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:inline-flex}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{display:inline-flex;justify-content:center;align-items:center;width:70px;height:70px;-o-object-fit:contain;object-fit:contain;position:relative;z-index:1;background-color:var(--el-color-white)}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{right:-15px;top:-6px;width:40px;height:24px;background:var(--el-color-success);text-align:center;transform:rotate(45deg)}.el-upload-cover__label i{font-size:12px;margin-top:11px;transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:var(--el-overlay-color-light);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;transition:var(--el-transition-md-fade);margin-top:60px}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:var(--el-text-color-primary)}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-vl__wrapper{position:relative}.el-vl__wrapper:hover .el-virtual-scrollbar,.el-vl__wrapper.always-on .el-virtual-scrollbar{opacity:1}.el-vl__window{scrollbar-width:none}.el-vl__window::-webkit-scrollbar{display:none}.el-virtual-scrollbar{opacity:0;transition:opacity .34s ease-out}.el-virtual-scrollbar.always-on{opacity:1}.el-vg__wrapper{position:relative}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius, 4px)}.el-popper{position:absolute;border-radius:var(--el-popper-border-radius);padding:5px 11px;z-index:2000;font-size:12px;line-height:20px;min-width:10px;word-wrap:break-word;visibility:visible}.el-popper.is-dark{color:var(--el-bg-color);background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark .el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-text-color-primary);right:0}.el-popper.is-light{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light .el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-bg-color-overlay);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{position:absolute;width:10px;height:10px;z-index:-1}.el-popper__arrow:before{position:absolute;width:10px;height:10px;z-index:-1;content:" ";transform:rotate(45deg);background:var(--el-text-color-primary);box-sizing:border-box}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-top-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-left-color:transparent!important;border-bottom-color:transparent!important}.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-select-dropdown__item{font-size:var(--el-font-size-base);padding:0 32px 0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--el-text-color-regular);height:34px;line-height:34px;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.selected{color:var(--el-color-primary);font-weight:700}.el-statistic{--el-statistic-title-font-weight:400;--el-statistic-title-font-size:var(--el-font-size-extra-small);--el-statistic-title-color:var(--el-text-color-regular);--el-statistic-content-font-weight:400;--el-statistic-content-font-size:var(--el-font-size-extra-large);--el-statistic-content-color:var(--el-text-color-primary)}.el-statistic__head{font-weight:var(--el-statistic-title-font-weight);font-size:var(--el-statistic-title-font-size);color:var(--el-statistic-title-color);line-height:20px;margin-bottom:4px}.el-statistic__content{font-weight:var(--el-statistic-content-font-weight);font-size:var(--el-statistic-content-font-size);color:var(--el-statistic-content-color)}.el-statistic__value{display:inline-block}.el-statistic__prefix{margin-right:4px;display:inline-block}.el-statistic__suffix{margin-left:4px;display:inline-block}.el-button{height:32rem!important;padding:8rem 15rem!important;font-size:14rem!important}.el-input__wrapper{padding:1rem 11rem!important}.el-input{height:32rem!important;font-size:14rem!important}.el-input-number{line-height:30rem!important;width:150rem}.el-input-number__decrease,.el-input-number__increase{top:1rem!important;bottom:1rem!important;width:32rem!important;font-size:13rem!important;background-color:#409eff}.jt-drawing-row .col-left{font-size:14rem!important}.el-color-picker__trigger{height:32rem!important;padding:4rem!important}.el-radio-button__inner{padding:8rem 15rem!important;font-size:14rem}.el-textarea__inner{padding:5rem 11rem!important;font-size:14rem}.el-input__inner{height:32rem!important;font-size:14rem!important}.el-scrollbar{color:#fff!important;background-color:#052d73!important;overflow:visible!important}.jt-drawing-row{display:flex;flex-direction:row;height:40rem;align-items:center}.jt-drawing-row .col-left{display:flex;align-items:center;justify-content:right;width:60rem;font-family:Alimama_ShuHeiTi_Bold;font-weight:700;margin-right:8rem}.jt-drawing-row .col-main{flex:1;display:flex;flex-direction:row}.jt-drawing-row .col-main .el-input--suffix{background-color:#fff0}.jt-drawing-row .col-main .el-input--suffix *{background-color:#fff0;color:#fff}.jt-drawing-row .col-main .el-input-number__decrease,.jt-drawing-row .col-main .el-input-number__increase{background-color:#409eff;color:#fff}.jt-drawing-dialog{pointer-events:none}.jt-drawing-dialog .el-dialog{pointer-events:auto;position:absolute!important;background:rgba(5,45,155,.7);min-width:280rem;overflow:hidden;left:10rem;background:rgba(0,44,126,.68);height:calc(100% - 175rem);width:180rem;top:125rem;margin-top:0rem}.jt-drawing-dialog .el-dialog .el-dialog__header{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAAyCAIAAAD9fhrKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4NTc1YTY2Yi1hY2U5LTUyNDctODM5MS01MGJjMjM4MDkxMDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDY4MTUxMzk2RDM1MTFFRDkzM0JDNEQ5N0IwQTIxRjYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDY4MTUxMzg2RDM1MTFFRDkzM0JDNEQ5N0IwQTIxRjYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YjZlNTUzODYtMzRjZC02NDQyLWI4OTktODY4YTdiYTNkMzgyIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjg1NzVhNjZiLWFjZTktNTI0Ny04MzkxLTUwYmMyMzgwOTEwOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po+VQtwAACdUSURBVHja7H1bluM4kiUMfEjuHpFZtY4+/TGLmQ3MmTMbnf1MdUX6QyIJ2MAAAjC8+JB7ZHZXh7LKQ6IoECSBy2sXFwb4/X/+X2FfEqDv5dh35mXeC+k2CzD/+XfxL72BeVbv04KI7uP6ByD7pZTy6ToMnUTwv3f7rgWG/cNXrhz7AcVtUfOiwP/kOg6mLGRVoq1JUewjsAoLWJQ2RdlTg7CD+y+eJW3MziVU1dfK/wV2LIhXJpQJ/nQhOUFWWxDJRYjnwnfItkB2Z8w/yC7sr9fnXpj8Y/9d27hw/2D4zm/0/4V92EcRtq+bMP9J+AX98UdadxN8oy/D/tXdBeWAvsBQM7/FvwklxzemJ0xyfrflu6JG1T+Hc1mrhKEA/wfTQ9BfAD119x9Ca2R1ZjuEqwdq/Kb7C9vO3oQzZJ9AKdAzqDuoGVC5r3r3j8Gp62XoJaT9g3WBDK3crwwIdfB+mxUmyJP0HXNGAj/uM1zNQWTs8MChMOvJEQYMuDxdepBAQGM7810t2MHIioItnEqwbOx66GBadMSXHHQiCgBHFmDV8h+rJcQPEUaLk+WIFi5YDnyQXPoUs0R+oyTfEWvdkKFaskPYju0t1RLCDrxM/luoHejIm+0qbZ9g6+P2/snOBWDRQVPAggLOgMEBFRh7PoY+DPaJvUIYIvjeb3eG9b39tH6zFoL0Q9eHzVt6A1qOKMdYE7cD+lsBDCtdya7B2QINBEj1YZqMxSAwIKL7J3DVdI0WHbWgY4HdyIp2Z7d+lvreTa+hfHep/M/ZhZS9Gr7pbthqXsmtsdXpepS9MHXTi5xf5XIzX3XXf/tfBkmer2MHkPKdGr0SOckyXGzoO60IYIGBUcEdYFZKSuikFMBLT7pxQprYwXrifAZwtfto3pi9bVEcXVKSVcKtPYT5lSnMlOAaQMKKUobEv2UXF9a7kx4vbkRWnGsxAKxnAIRnrPAtg9FFYM8l93Pg/YA9A31zZCeJfOOBv3znykOv2KG6W/YVpu+xtlHUjlvWXGzu3Dqd6rflx/ZRkH+0vEFofssYCXAbtSNB7O6gxylGfNhRGFFJOdT6jbbFR4jEcHa4EqKrlkOsD2LKs2J9AlGKdVtucv4I9TdQpftrrH88BUSO3QVHI7RaboRWiJW7zy+zoW/jd4Ie0b472y+Q2F+AwHXuXv79f39/GiHr3pCgXQpSxaMeYOx7cxYGBHIKkHIKQhxJ6MOimxQI25jVdWBCy0Up941DSE4JAfKQtUURDcqawrT21YUUnVHkUVoJfByheE0DCGLysIiwkiEX6zwZctkHb3JHofU0ivee7aJx/QoxOTT6b2OVMCmE/0RU0SctOfsqnOz6rS9KszI5Umh2dJHWNjsFXSsw+7nIcCEtKuys2VfILxcWwIf8TdGrI3wxQpQHU/zi5JEjD8HWclhMxX4ecMHgi4ZesOgyBGsZWokCrWD5kPM9otXwbOLK9OphesYiOWvWFA3qddNbivHFc81iq7r8ZrrvJ2Jz/zjuRqnuvQm46rtmsFO0Yaql4w7U4fH5YuJD+JiWsB3Dj9HRYdp0J81LGE7nySMmPZfxflbAemw6wGW42RLMj+bZHEtcL1145NmiPEMWGKmNAwOMkYchZyaenRYiWmgpLx0xcGfXrjwXdMw5xSG/3ZJ/5LKXa0D++I4+R9gKVwwtuVrpNzj6HS7syt/Fuj+E5ghJAAblHeFxG2rhzyWNfgRrZ2HPNDDCVjQm2P4ltPk9kZUfRRmssXRMgzGIhftL7zdCpBuClYxYi02LC7KWwK+JSH4Yj5tEhZiyjLwfBaiq4lSKGonKgzUBK5xdQr5C9wfT/5HCfx5vJhcRkQtYKVrN77BMnjtJPT5pGHK4LCCKHSBidDe/rzQt2S+7CEINL4bBsX7XiNURcTdot5/18NIPXVfiFK8GNB/tGZYhiWBSvt/n8gnN7+9kEccCJSSH4Ai4fsG+stU3BzDI+OEPMS/K7GXgz0foAf6wgVkiYIkJMk2F7/NimBayADDClrZIJDCHLUQBGTdCcKAsPXcKWqODsqABuJPFJApGpx+sskHE20jmINK6KFuAbxvgmR2cCoTE3le5KAoeODNymG7ZKP/IcbdjNrEZTmzVfzMaySEojcE3QeokTnEoYVCFCSxGAT4e3uCU7i/oxMokDCzQKq8MFeTRyv1OquEZoU/pURFgisp1oFhnfiWaxgYCkkEGH8SZMJDi1kBadlvEEcol+x6q4tQ2TwMGw8ClHzF2snu6vN0nFx4mwOUAyILQNNPY4tN1WKUeKDAr/Cj/Cg3QPBnMmhxm4bKoD1PUSML8SmcCZmCmC+dUCwizumlWobYFbEWUs3o8psoXijTeElqsCBeCVE+4wFcEIQsVg9IZNC3hyZhgI7AY1LUVv9KWFJhM/SZioY23iHN1O6bsJGd2lS1VZra/AzY0/HatTsQXG6Vl75MOhoySNjhIHlCzvq6xxMEmVCXH4sSms9wKMmLFeA0bHMxEK9Nl5jehZrEerTM8BUHmaIU5WvHzCvWW06u0NC2pJSZohXJQw3eUXfOZggX1wYMwhn1xU2EfqjZfHYhv1/F9MhGbZjw9xIkrAM0GJG6zoUs5ZhUHRR+PhWCKMGscDDlaNPUUgzcf9+V6IUVLJFSLUSp+ahC3m/9f+v6+UHDoQ9EYCAewWu81rILXyrY4cYMkdHfEyjNNYONMPOLDVd3L1MqVeWGmSqVgiyJ1j2AYptSYtACA2Haz94jN1gOprhSLFbEThhIAErkEIO7TIkOhwPA3+6EQ9cNhUUnEdAvW+0A4SnYdmCiZGhdwHfZCkTMpjlDZD9t8KtlFp+4ATNSuyJjcc1T2KC/rOGQmtIs04uc7uC+0MtxK6GVFFei14VY0QFiEfZipdpiVCajl/RXU1Azi7DaS2HoCRNzlVOmFzTt949XvwlMlKqzoWYnqZIDjZRxvcrkZJiWYkuUwa90NDUi836fn67h2X4dZWHKi+JMANJIMWf1tMphlbj4obTFr7GjokGNSEo95LMIUtgAvfTct2haFERQgYAF6FuMxCDzaoR+rDvQOfIQc+6Af0XaCFPjWYDvV+pEPVmCizfvxv3DqfqgA07sb9sRjARdgfVS/UoLHR31svBBwn/aHa8WPlf8Q07rh1pM6KZBHytXSMB1cx1z+YnQoFYOygQjMhB6RGaZ4ed6jkIRgmuNUihYrWg0erdoxYM7+AlotFAnqZQUxOej+2QNfDa0QK5aOiFZ/gKVp6eGTM9Xjt5UJihpdrYfsFbjKHxWHAAtqStYeyUKv0Zj+dB36DoCcpVHAQd+DV2xaFnz7mEyIZ5AmpeWV2DCQHS8rCcOzDGaZkI7uDmEW6Vl2FBIjI8mU+IxFetgiRZ94n2LUA1Cu5peAm8IjUgA17nnx7qqIXLGXeG0fU9sHYm5eozMNJg9kmldiOsn516qC4TGjS/JgwEQWxYY0iqWqDbVYK2tnpddKJPeCl4O1nbG0TImKmSyOdWJxUuXZ8aFMVp9Ej6/7G3MWUIv4ivFELH7H+UsyIBf0b3qZzt8NmPC1TaiKLlZBZkuDVqjWAcFuxP4pRSseyWJlWNAfjmxQ0ysQTcvFdX6t1OW3fMyxQZ8OhO/YstLtM6xtLEuCAshgEkcDWXbo0KBJMnDDBHIb0M3Xceh7mQwacg0+CEAx1lsDNYN1Xn2nb2/3ZRz70WEWRHaUR4jZaVgY6SU5/KdZRRjSvDH7wUR/wyCQJe/bWI9WQ66oka8RIUMAiD67YDFksV6ira3UD6E+BhLHBDBvIomCE4Ij1vigaFbY3hh/y0+zRLBsH5Ect8nUjo0MZKcTY3NMj4gN8QsTXplrzFgPUhKvQC42p0JVWVobpxjbWiFNWrOVzmkIYhEAZo4EZw1dPhC1R6sLmv8hVAc9c90qPTUTA8r5DbQSVZP/GjF1epXYGSVtaZen4WsHsA4oVbgl0kc6Zv8MUkrrRZiUghSzwqGUJiv8FXuac4NxxKuCWVl4aPe72LlE93mxCIP3aca+uww976xHYMsAUkeeMhMeLkyLYtw1nUyUMAQdmVGIFpPBO0g4R2YchsTXtQ5HYsmngY0JZJxLeDK4WiYgC+fdxvVvwTggMW/7UNmF6aLYjuxYfh+Moj/E5p55rzBy8Ky1MLkwfw85ugh+UrGqaRzBL0V5IhBHNzBUOF6ZFmxhJU5JFHRRM3ChyKV0kUlOLFa0rZogBvpV6joCVWzqDCw3WO4GrcRqtnrScvScvDaMkGIU307AZ2mawIo1awW6/qJ6O+aYjH4WV6+lTNQC9w0w6wvqdHjcBWqerHwECq0MDzS9ZobJYgp3ZoEnSuZBcrPB42iBJlItZM5xfmUhkhZYA7r+Ns3OFzUtNPPIY9YGbHE6sApMvZ1UeafpRrhq2SH049okePiARMLw4lIAL2+CwGAYxSihQxwKTQbbgJ011EZTEmoAcVQxzo7wY4eiFo1gHtIhYh7YAVblTxRYcehAnYwgYJPwM+kzfx/tEsmbvLbpr4oZfuifDeysoer+wvwnDfE3g5u8f2Y6OvPclsyljPKCkkWRoOhyt0DFXZXSGdcXlg+DVqFwsi/IIYw9J7/dGBB0bUfdOppvqEVuTGWiVfesB6ptKwKsq1e1GL3p0jrAsKLWzW9wLmPhASeE35nG9WiqItzmmd/LBLNMQDfRCRPQ+EaZ+rASfYYNLNJbwiwraaEdXnHOCRNpMmBKzYIJT0oIlzWoyvuiHacOdxWCuB4mzMTJW4nOFWLGCF7pYBRzKXD+hWGnAsICPEM6oue9W7w34THCvTHf5SxZx5PbDz5Rsb3bkXrioYd2qz6lnbIYjShoVKmgi9b0acyIp30nSbSGrjL8V8BNIue75mDYkJoCoBDxkSNW5nLvo5UkT/yHcEpO6hwL2K/6b6K/rA6JClDhgYaHVVfABnj1BzlU3XNQkqzcDRBVGYrdCFTgY55pvJYZHSJh0po8oQ5ooPSOlkJLgAp6axDxeumtFZ5uyETWCXwaRyjHgJyzPM4ByglXJ+DSy7stAeIMU4xhIvg5oOEmQp6IghEBhBBCCREjx/wWOgTiJ4pMiq8RaEgTNZz1JW37m6pTnOEMhMGmEWx746PGmkdk2WzAZ2e0HUuUryBUVfAqQS3wF9nbSLDjc4MqlIr7DxjsyOkN1OIIEUppw7Qh82okgSd/yKVfyflNqpufv5Wq7KsPVSJNZh7Z3Kl8TAL3BpMfe/WfuvEbnsAc19ZJ3yOZ4ccPa9bkGBSAyZIjUtBX/3qCSpXRw2yH3lK526Jc+cus3jWNQoJzfmKpH6/IVRAuh1n95CxagkndGI0O6wgiJBHOqnuDV6OK0EzkdlAGupzeBh7lpHRZPLggxqxRAn+AFlV9KgcF8W0sOGhiP96yP9no8djVEJsUoKQPmDHcAqRSllZKQuQ5IPtCJ1JOk5ujcs+XC9A0KU1q9o/VTnWJqFSyqhaxstbQN7ncc6s741ZU1eEbTWbG2nAg7t2kDXp1GrCSYReoh4TbjyYW9jByxNUW4kHP43BfFhqP416H4KhEpOk7Gp+crbROtZpsy7C4a9/d7Pij2dcAzjtSUVIyACiTiTCsCFFXZxX9SSwmvgRgNIrxRwZegXn5CxbAy2teXCjn/IsBNwsMRRxQDUOWaazPGJmom+MqTKe1s6i5FHaHXDAxdjSfZAefbdtjO9sqRHV/qPgudmgjxqmKUNGxMm6CdUcRZrQMc5BiGKENBHQOrbASVWFuSk06vFYWrRYvufc2Euwy2wH3WGEWikZzAxVl0UpkM28i3HVXbcvPoRMrcWc9Kj/+9Dnnwzry5IQ2Zomq+LXyF8KUwZAheZ/mKOMB8PDQORWeiJJBMhWw9D2kwz8UgUthMOtu0MoG4d450TtbaUKpMoWLcS53LHPwsTO332b+g6hkIRTBMpefgcdqq8GCtTsoc/ghcNMApn6FypjgCvIC6mmudjnLKennBCU5ecQjT1k8+ZOW4HWcNmI+Oo9lbFUFstT/WTHxYq4cYTcSt0KZKWIlXytN8zZRFFlDPfe5rBK4LghdVgBmDIuK6pwEJnJraMA7pMnMV+2n9TTQCnG/gT3Ok0+EhFsToUVNzCoHiZidU4LBLJK0bjQrMEkesMIWwEqOKAuqDIbPQoxnT1X2OLVW+O4+WS+ozWxDVvih7zvws5UxyWNTm0kQQjea9oNioudYbpVKfVJ8XF9wR3Uy5TKQMiZrMU9DRClg4335nYYGSgFUmkU546r8Nkxtyaa5ZGUC7Nz96v6t7aIyKbV+lPIn6cDpVgnVw7X2wdzqpetDXylyYdkVOWyl7CiOsl3IyM5mHdVxKnMMrKN4s1wMWik/zc9wn6sFvtKBgQW3S6bjmKI6MlstCUtMJHZJLvZ+jLkLt9Fq+/nBc5N8FrCwkavveGBYbC80+FWutvP4ZCfHt/uEGvPgyB5LUeIr7CqD+QXbKgY3zR+DiQagboasadPs1IfWhmcNfZdoWJlchKkRwu9mqJ6JESfL+9bWHow/btoKBPk+72+BOsYLBd51EHP9CZ6lETMuloBYDIErwyDVprDdPrI5vVgkOWq9P/IIPVjO9semovRogYjtjRW2VSFVWCN+WAwL5mN03BNwNWhFG3RuW03izAwf3SieJoeUWHO6CdU/CWlzOeRDmY0AUGS2We2Cyhx2HHEzR7v8roNoVUrseKxl7KpX+ABgcR4koFQNEsxqznfnuVFCT8x+yNKzZVZk5hd9smb5vDLMLs/dAbnt3v4ldjarkAQFsOEVcbmrWrTL/mS0ye7vk4rPniwNRGqPggihMXrlwI18HDAHKEhd2lAMswtRptvHhgiFNcnpSBIF3EztUOYthk0hbEM/2tCnWukcoK277Ra7e5VEKyVKYbMSMQNaBZ5SM0FoDXp4sjmOM3cw1jTskrqhz4bqDi0RHPepCVVZYIiVM6P8CuPzmuU9y7EVjG8t/MdCad/RCo6hFZ4OCc8PIO8NG5eYdZvUnXIuhPAoWpjJDHXpx76LFwViGJVJrPlIov/e8CE7P9qlVKYg0TCudlDJ8CZNehXwC8Is1liLkGwP02uHmIOsiIlmipCk9HGJIidpYV/AChAkOUiTjIgs711mCYN0lLNIQ1oLlwW3rSTWxNp2URwUoTEqB7VsL1D0lXTkBCE95W37FbsgmOUmbJAsgaK0QebyFFZOByu2hyhKlOGeaKf6ZMRHw4D9C9lEcTE8S06vujcIOKSzeEoZqyqHU0NE+YSDpDmD2WIZ1K5VN/3Q3RNl46tEvXhC2dyXT/FhDasJPznuiE2exakWwywT6H3cab5OktvXN8K+k7Q6Tj4jmvdkyJNGBsnMZz2YFj3Ns7K4YOK5y2BFdxS5vsZM862Hc8gX6JKUQvZcTrCWJXthaQCAz5CJxApZsIciW0YIc7isdKZKVFjLebCT/a6aL6GWGXd3GgXUdJzyPWw0zloNoWa5Fzmgi329t9WxzgUplVwCmOdbqIANf5Dod+gvdtLMBkhhbXzAcy8YoAfKdaUXsUw03a9/CtOPMZsSVD/v5DsNF4NZ3fSHsGJWUn2tpDIHUoRZ0InD8nqJ4J/0pRxjWHjU0d4IHDDDLEN8XJaFJE+m7+WDW8JnYzA7S7fHx/j80/U2zwawHFEywHexqSO22l8ZWjKVyZRzV2omHwYKkSZ9BagkFUe+gg3E7HcpdeISdAWReQIErmQlEnLE3Gya3iMv/MS3x/cR5+1U+BPK3H7I46Z81p6+k/OxQujxd3ghkVsqaxaVB0Eqe2Bo0RHPwndKqqdMgW+yWwwVQoBK1dpQxeynvRq/Ww/qvWCUKOcPA4uqt8FsKwzcGhHG/cv+IGDt+WgSHf3Qz6O6ZEiKiQSVc/1DYByr/D0OPVkZoKmF1YplUAVonjS3ZVkIXOzSXkN3GX1i1Wpa8SQzShYJWkVT4X1Wi8s8k156nhVUlOv1IE+7VxqF0gm5KVEFwGRr1jSgblKqDMtycnTKCYXHrOdiM4dnS9jaaGDbrvcjVqwjRxENh1ruvMIkC01xZXErCMIKVPGWa5q+fpdEW+J0nJyLYK3HJ8I5YRaSt/2D0vVpO25oMCtbpWYTp/hhNPQ4fpMTgLpVfrvcpV7IimXqvE2jTyVmOOxceSQkPB0bhmtheMq83OcF+SoyEH95HbqrAxcshr22YCsSk2XBm4nc1LryoCnQzabO5ihB3gqbwa8piuA1DCqloniZHymP5yCBLpHYqlBUkoqKQn7HjTpCNjdxe07fWSfU2TmJu213e4mn4673I/U5mPm9PtbHODSyYBObqCU2+EbT1uCm/N0Is9zKXfVflzJ/VhqgzczXLR/W9X4HpZUT9RvCXAlVKcBKZTBr7uJiq5we6MWEjdrAljkEdIemamJtXtmW2vDJkPAx3T0Fl0Vpw1MmZ78sVFiyTQ09raZTldghs97Uqzk5CV+vdIfQqu8SjZytiZPKQ9kzdd3bxICGrPFlXIJ7NZtIA4xUlY2YLQ+RZrKCjWud5bfL3sY1Lb4+KPr1arCPkvI0o5qG36IeFS0zmIDOhFrdRbQTrOLm0hhIijjYbDAa1NQh6U0GB7cEsupEGj+mQY55w9+Wd9TlUdFimbKu92FniAPxAUf7YwyrETqJzdiwHCo2UKJMGOgn5XGvlX3XSfl06Ya+q1A2n4evrulCSMsviLstyolWPZBoZTX7QqHHVB1PleCgYZmazospcEGsqeDFslIY85pm05DrRIyFnGno1zDBQf4M2EjP8cCz5fO9G35m+X8BWNXPBkUtrKqB3J7PO0cKraV+050yoda6jncp7Vdni7LPWl7FADC909ChWqR+FR3BFgpZ54QNW1l4q4dn4hKL85TmR5XLjXyS4zMdt41Wpy82PgBYZ6bLb9vfHZTcbLKXPGSyb/uOsmX1UlbCTN4OIGUUTJNSdIh5nZloE4f6RMkF2c2MEal2HhoIha6TmgMZLBJyYmEyh4L05USswqegGjnklzcTs1p3B44/sHiEA5sL11eZelWmqu5/ZK345orxj76gfeiNyYQHw0aWB34/LK3pXFk3jhEomKck6HehFeUyZpLWIe+431XDKAbZza+gZ1vgm9XI7OzCwzjFi9X9BcDZHWZRRA9mY3f/Q/SuzrIJzQcHOg60gv44MLW+qpMsu4lWxpkWytvX8JTaAUGPVjG/diW3ZKbVBPVn1vo+LbNPwWxiwKdxoOmH22pXJtUzVFpIYrcqmEi9YZgDZco+sSRighsgdtOmQyaOQ1yTFFpaSQZtojqvqJiXgmxjdVXBZHSKz9sJBB8gtka2Q2Uwvz2T50S2qnLWULtwTGtbXTMxmdBbu0QHKMF2KpVKYFjrnLEeIafVTSpF4Vg3tPVEbFaHWkuvhu9SvIKdxgzzh8EsNbxg1MiwyYGwgriUV/7yrfNDh8U56lXS6l+i0i+OORjw6ODgkZDwXARQMqN50WsamYokj26yyxNN0gOBVb26mNaTA6JBFn2b5yBaDUP/vGr2KAAqFxfaiqmFuHnSVgXLGBmnL1AfWhJ1CzqKRk2iEgk5LysXXqjhWnEfYGM2S2aPxWxNp222EYxumoVFNYnmgUlBTQ5X3DinJCazTnGr8Gq1N/bE0hNbUiRo3sdC1cYd6G3zOJrZp/6gUIskLWhL+yV8+V1BquGbFNKuz2xiECdpvawZrNp8qv7coL49WLuDlMtH9daa7WCo3PBijWAHiBUbADuFWUcWoajj04aehda78GHgJNONg2nIoNXQPV+GZtNOO3nJuQykGGL1MS1hcayL9UM0L3uJGmn9tc3DdbNJnKHiVQ2F5E0tXdXmKJAxRoQbD+forirjTcECT8RzefV2Ap9jfOin6UWHdI1Thi98qFolHOoDkCRaeYLZt43RRr4GDS2r1S+pAlU3SDTwizALSYanoUOhlFR/iOHJurTkgcGFgsFBZzCLlkxf3vMUo+tk7KnTCw7fRHfRZXh4JBh8XMP6xEtR1lCS2JM6MBphut86ILg1fQxbQGPAS9tI826Xt6GpmTZpHy2fkyQ2SDt5uawmbx2UnXmenQoGdcjn+dmrpyYKrYy5w6pcCXfVQww+1a2ui4fUzUPyT4KPWJH095+HrX2SpSK+6JWtT5EVDnztyXz1sc9VBvER2N0FiLRYks8NBHQ81MJ2eZVy7EKE0i57o0mUn96sDP9sC9yoRusj0JLOVOA7CFXjerq7/9DDM5Dj4euxZQ+wiuG8xrfxtVjX0ryoFiOTkhZtNvRquxwhapqXAxdafpXSgLrfdlIaptb3sBHrVfwB7GLPBH8+dG3oDlUU8ws0ayhWOcuJD1ak5nwAYaOVAx7puzvi44EYP1mlAo49Dzf2Sd2bmKX4hXOaQ6N1NNa/SD+2ltIol7eoD0VUq3cojT3iQcirajqmdvNdmqZpuJKVtHD7oVWNU8nZAHJ6FZp6JSzW9jW+RNvXSdg1oSUtezC/0lhkRfgSNkWXUiNTzeoaIB5F+UcZViM29AIQpa8yYaBuNva+k08XP0Nwo6OCaA032MWi55CfyBT4fLVzbtLHbHuIh0MYwYC13S+6EbXBtk4BqbyYS0pBs2jEKNC8SblJO2eLmyu+PUZfHo65Ho7IPj8N6EvqeTz7YO74PXB8bPbJ0k5fy6jlJS39TxPf6f4iBGzDU7XZazni+BuN9Nn8fLTU4E0Jg1mmQISj15P7J8iaL+X0B+i53oDVvbstNoXWRZTDcY+ilXl1f/8f/+fQo7uJJS60x2kitEJs7mxw6sUm/dwOglrfart41/stHsKU9Xwdu2q0DBUqlNeZbPcktCFurrN4dBvDISzoVmNqFWD726zc/6KWpn/JF+7lLMd16cA85MS2nrWj5KAd8gM78bg+utLy2fuZ0pI4GhkdLM8y4aG6U5sysSHA+cCWfPVCjiZidQXW+og5xI26nuxESFL6uQcPoDobZ1biN7cManQtFVWg8bu+f74OsL1OQftbskcEp5WdczN23ZMpsFS7anythHMT0X9MNDs616NKqo9Qj4ZbQNZSlPJhr4biDq1blYW3B7D+1+vLEOpAXFwfIdWPcMSGhEQ5ZPSC/bOQ/S5C1YLNTo2/CfFKsw4tdJKkZYf2cr3piOuV3O4dXn43PIsvWpH92ESOAhfdf3My3Ofly/7Q5awjEdgw0MRok9bYCusMulyG7skPCDYDt3ZU6MJA5Z1WNk9p/3Tpd5577eeGKertvkTRih0RK1DUQKeaAoV7UAK7T+m6hgWNFAK/wOunw9ODPOtIqZtTqutaLrm0KNQK8hCeOwtSzUnSIncCtX/rVl/U5TdaE0wcwqm0E0h1+V3AD1OOKNF5lbToEHr8rkiGg58PWO1TuM+LgZKNLiMNWo1+hmBDmm3mXLZ/5sVFmhgKvI6DHRDc66hY84zbRXTephmx6kwvbnViJoQWfxQbcJaVcyYchlN949c8wv9UyIbtBz9ugtg2sKGVtG7/VG15aLcyZHcgBeqN1qAn3jH3t3+o4beiQDzYuAxxQ+i6+U20GKVe5O0fOH5HK379fMAqerehVB/TdPcpXCrhonMbXNIBwRZXrSEXUk6r5WOKgNjR+mDjMMidltFAAeu0IutWGcU14WKbaycCaGvZLAH7I0rH0O0Xk/oLkQmOjR5ud/At/wmeePCg6u7/BPWih+fcVAWHRjN090wJv0k1t92B7Aj/Afgtc2kdfwiauJLmBJsCUbVmi6+G+PEFoXv4Qds/cO9MMPV2CzFarmqtKUMNuDiJ/fgQNUMujWiIVZgeKOyA4MuVkqrvx0Glux1dgtPZ5oqAY0/JDZ0bjksHtWRKsF3j3Zw+p3EL/nT+Be2nAB77yfbHLyz50PXBnbykR4ZNTtPhHdGAco3ioofvO/2/UQwlDrx0BviEXjkBTK/QKcwA5ThmUYYs2U0/nN2hqunZZX4mikDlg+HhOcBy67+/TxPiltA1kNvAgstDUsuiVHRa2V/0fWfQSsIBbKrdYFLBDMLyyR01negw48cDJwJnpIttgBON9RK+WpT5E4Kl40s6f2YtQnGyKPyiM8SvukxHi5LLfVWgilTLW304TAQ1+HT5m7z/sHYHl4Dhw3Audflet1Dt1Ra7UV3/1q0FNhq4XvqPf5hDGDb3AGYdsDUEBEVhSArFaLglKhta9e3pIuWBqtQggjSmSN/sgODQPz8NUC5ceuxKzrZAvfEQ3C0Pzj8K4Iv3+/X6VxK4HgG4RgMGJIOCgRo7DAe7vy3GwIHyMZh/9ZIUCJ1N8ACn6k9eDvJPXIJ/onWSZKqgSSrDqc51wtagNL7ZjFZ5XdOEwmPfv1yHo1ZlzMWg+7x8cBUf8DoOmWZfzrHYuMW3UOCGnWo/1sDTcIYPNesvgK9treVsOAQNEotbttctblhmkoF2lpvqQbEotrry9cEz/dLkNp9nsrsOr/p2bSM7ZdNXPZDREdZJgiG/KGlk/yHwe1lgC6dSEHRDh3/YqddNKmoN8bMaf09yPHw+JAwkBbGd2Mx2WwMuT2N/JlqL+66L6Ni5x2FlwKeLHRA8pnyVtz5RwfCEHHTunuNJV+fGI+ULYjc8GZKd9ZufNdTjsXL2AkKopk/HM+e1a4v8OZHzTxjhrfq27OQb63h4SIFyQ4edKcRXuLOSfCwQT/Q+KnAFwbfqLBGPlHN/+39qLAYoHwYscwjDULKZzOVOkiT2YV1DsFlSs0KLxne7LkVS4MXEgg+OgCbzDc83lyPmg0+kJv6ijgH/ncLJv9C0keXi+vk1x0eLIlOVVqcVqKD59M800nf/4ewOlgRZSWv8LSvwoP/TgmDfTT/EhoHWDVDqFzV+O4JZWxqWpjAwGaqrXyYJ3wy56rozcU3cycSZbx+TinmjaT7zt6dLZRJPK85IX4YPvt5mrfVfoBnBA/X9RB8+wjAOrb/0ic6En/7JLh3ELzovPEDpML28eIC2HrsAcNa39VgDjApU/0AtDb5gdwE1gYeYtUDZafkIcbMFDrBMsIn1JjaUlJdiFJsuLVrStQVY86JfOetpMbSuDS4HOqjhbm+3iZ/KYDX7TsJDV4eSZL3f5p+COn8F0ok9XefX68+hd3AcVfBPq1TzK5rEBwI3nOXtBTpJNe+vJJmjih1ruQk3G/GBChr07A0IzrA5UcmAEc2XlP0G1DZF948pEb9bL0OrXi4jwIFLCnWN6e5EK7/rZbBTDh+6gYaivVNSK/VpFMIvw5gvPSb+Jf3i1+vPu9rngHEn7pleBU2I+W3XWV7JvQNyuf7eTa8kw4e4Z/pheJAev+8UiHWepa5/l5OdwbNNoG7/EON3sqG2GFK5JI9hKNOidq8IgctlAHjksUPB5n3KNKansb9eBmhGyFsAobNBzPI3B1dmgD+hDVeHun69/lWZGZ4Zf8RzrW+zYC9p/a7lA1owOFGJZi/HAp1L63e3pMU5LyBITVOvIUmyXFWpbNYaC7WVAcr/L8AA+dSd3OMf2BsAAAAASUVORK5CYII=) no-repeat;background-size:100%;margin-right:0rem;padding:6rem;text-align:center}.jt-drawing-dialog .el-dialog .el-dialog__headerbtn{height:34rem}.jt-drawing-dialog .el-dialog .content{height:calc(100% - 120rem);width:92%;overflow-y:auto;padding:5rem 0 0;position:absolute}.jt-drawing-dialog .el-dialog .el-collapse{--el-collapse-border-color: rgb(0 44 126 / 0%);--el-collapse-header-text-color: #ffffff;--el-collapse-header-font-size: 13rem;--el-collapse-content-bg-color: rgb(0 44 126 / 0%);--el-collapse-content-font-size: 13rem;--el-collapse-content-text-color: rgb(216 240 255);--el-collapse-header-height: 40rem;--el-collapse-header-bg-color: rgb(30 130 255)}.jt-drawing-dialog .el-dialog .el-collapse .el-collapse-item__header{background-color:#409eff;border-bottom:2px solid rgb(22,90,190)}.jt-drawing-dialog .el-dialog .el-collapse .el-collapse-item__content{padding:10rem}.jt-drawing-dialog .el-dialog .el-dialog__body{padding:10rem;color:#fff}.jt-drawing-dialog .el-dialog .el-color-picker__trigger{width:120rem}.jt-drawing-dialog .el-dialog .el-body-foot{position:absolute;bottom:8rem;right:8rem;width:calc(100% - 16rem)}.jt-drawing-dialog .el-dialog .el-body-foot .el-button-group{display:flex}.jt-drawing-dialog .el-dialog .el-body-foot .el-button-group .el-button{border:solid 0rem rgb(255,0,0);flex:1} `; const _hoisted_1 = { class: "jt-drawing-dialog" }; const _hoisted_2 = { slot: "title", class: "header-title" }; const _hoisted_3 = { style: { "line-height": "24rem", "font-size": "16rem", "color": "#fff", "font-family": "'Alimama_ShuHeiTi_Bold'" } }; const _hoisted_4 = { class: "content" }; const _hoisted_5 = { class: "jt-drawing-row", style: { "height": "60rem" } }; const _hoisted_6 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u5185\u5BB9", -1); const _hoisted_7 = { class: "col-main" }; const _hoisted_8 = { class: "jt-drawing-row" }; const _hoisted_9 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u5B57\u4F53", -1); const _hoisted_10 = { class: "col-main" }; const _hoisted_11 = { class: "jt-drawing-row" }; const _hoisted_12 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u5B57\u4F53\u5927\u5C0F", -1); const _hoisted_13 = { class: "col-main" }; const _hoisted_14 = { class: "jt-drawing-row" }; const _hoisted_15 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u662F\u5426\u52A0\u7C97", -1); const _hoisted_16 = { class: "col-main" }; const _hoisted_17 = { class: "jt-drawing-row" }; const _hoisted_18 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u662F\u5426\u659C\u4F53", -1); const _hoisted_19 = { class: "col-main" }; const _hoisted_20 = { class: "jt-drawing-row" }; const _hoisted_21 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u989C\u8272", -1); const _hoisted_22 = { class: "col-main" }; const _hoisted_23 = { class: "jt-drawing-row" }; const _hoisted_24 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u662F\u5426\u8FB9\u6846", -1); const _hoisted_25 = { class: "col-main" }; const _hoisted_26 = { class: "jt-drawing-row" }; const _hoisted_27 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u8FB9\u6846\u989C\u8272", -1); const _hoisted_28 = { class: "col-main" }; const _hoisted_29 = { class: "jt-drawing-row" }; const _hoisted_30 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u8FB9\u6846\u5BBD\u5EA6", -1); const _hoisted_31 = { class: "col-main" }; const _hoisted_32 = { class: "jt-drawing-row" }; const _hoisted_33 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u662F\u5426\u80CC\u666F", -1); const _hoisted_34 = { class: "col-main" }; const _hoisted_35 = { class: "jt-drawing-row" }; const _hoisted_36 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u80CC\u666F\u989C\u8272", -1); const _hoisted_37 = { class: "col-main" }; const _hoisted_38 = { class: "jt-drawing-row" }; const _hoisted_39 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u80CC\u666F\u5185\u8FB9\u8DDD", -1); const _hoisted_40 = { class: "col-main" }; const _hoisted_41 = { class: "jt-drawing-row" }; const _hoisted_42 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u6A2A\u5411\u504F\u79FB\u50CF\u7D20", -1); const _hoisted_43 = { class: "col-main" }; const _hoisted_44 = { class: "jt-drawing-row" }; const _hoisted_45 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u7EB5\u5411\u504F\u79FB\u50CF\u7D20", -1); const _hoisted_46 = { class: "col-main" }; const _hoisted_47 = { class: "jt-drawing-row" }; const _hoisted_48 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u50CF\u7D20\u5927\u5C0F", -1); const _hoisted_49 = { class: "col-main" }; const _hoisted_50 = { class: "jt-drawing-row" }; const _hoisted_51 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u989C\u8272", -1); const _hoisted_52 = { class: "col-main" }; const _hoisted_53 = { class: "jt-drawing-row" }; const _hoisted_54 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u662F\u5426\u8FB9\u6846", -1); const _hoisted_55 = { class: "col-main" }; const _hoisted_56 = { class: "jt-drawing-row" }; const _hoisted_57 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u8FB9\u6846\u989C\u8272", -1); const _hoisted_58 = { class: "col-main" }; const _hoisted_59 = { class: "jt-drawing-row" }; const _hoisted_60 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u8FB9\u6846\u5BBD\u5EA6", -1); const _hoisted_61 = { class: "col-main" }; const _hoisted_62 = { class: "jt-drawing-row", style: { "height": "60rem" } }; const _hoisted_63 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u56FE\u6807", -1); const _hoisted_64 = { class: "col-main" }; const _hoisted_65 = { class: "jt-drawing-row" }; const _hoisted_66 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u5927\u5C0F\u6BD4\u4F8B", -1); const _hoisted_67 = { class: "col-main" }; const _hoisted_68 = { class: "jt-drawing-row", style: { "height": "60rem" } }; const _hoisted_69 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u6A21\u578B\u8DEF\u5F84", -1); const _hoisted_70 = { class: "col-main" }; const _hoisted_71 = { class: "jt-drawing-row" }; const _hoisted_72 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u900F\u660E\u5EA6", -1); const _hoisted_73 = { class: "col-main" }; const _hoisted_74 = { class: "jt-drawing-row" }; const _hoisted_75 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u6700\u5C0F\u50CF\u7D20\u5927\u5C0F", -1); const _hoisted_76 = { class: "col-main" }; const _hoisted_77 = { class: "jt-drawing-row" }; const _hoisted_78 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u662F\u5426\u8FB9\u6846", -1); const _hoisted_79 = { class: "col-main" }; const _hoisted_80 = { class: "jt-drawing-row" }; const _hoisted_81 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u8FB9\u6846\u989C\u8272", -1); const _hoisted_82 = { class: "col-main" }; const _hoisted_83 = { class: "jt-drawing-row" }; const _hoisted_84 = /* @__PURE__ */ createElementVNode("div", { class: "col-left" }, "\u8FB9\u6846\u5BBD\u5EA6", -1); const _hoisted_85 = { class: "col-main" }; const _hoisted_86 = { class: "el-body-foot" }; const _sfc_main = { __name: "CrEditProperty_Point.ce", props: { params: { id: { type: String, default: () => void 0 }, text: { type: String, default: () => "" }, font: { type: String, default: () => "" }, fontSize: { type: Number, default: () => 24 }, color: { type: String, default: () => "255,255,0,0.9" } }, showDialog: { type: Boolean, default: () => false } }, emits: ["submit", "update:showDialog", "update:params", "remove"], setup(__props, { emit }) { const props = __props; const language = ref("zh-cn"); const locale = computed$1(() => language.value === "zh-cn" ? zhCn : en); const { proxy } = getCurrentInstance(); const predefineColors = ref([ "#ff4500", "#ff8c00", "#ffd700", "#90ee90", "#00ced1", "#1e90ff", "#c71585", "rgba(255, 69, 0, 0.68)", "rgb(255, 120, 0)", "hsv(51, 100, 98)", "hsva(120, 40, 94, 0.5)", "hsl(181, 100%, 37%)", "hsla(209, 100%, 56%, 0.73)", "#c7158577" ]); const selectOptionsFont = [ { value: "Helvetica", label: "\u9ED8\u8BA4\u5B57\u4F53" }, { value: "Microsoft YaHei", label: "\u5FAE\u8F6F\u96C5\u9ED1" }, { value: "\u5B8B\u4F53", label: "\u5B8B\u4F53" }, { value: "\u6977\u4F53", label: "\u6977\u4F53" }, { value: "\u96B6\u4E66", label: "\u96B6\u4E66" }, { value: "\u9ED1\u4F53", label: "\u9ED1\u4F53" } ]; const activeNames = ref(["1"]); const title = ref("\u5C5E\u6027\u7F16\u8F91"); const dialogVisible = ref(props.showDialog); const isShowLabelStyle = ref(false); const isShowPointStyle = ref(false); const isShowBillboardStyle = ref(false); const isShowModelStyle = ref(false); const label2 = ref({ content: "", font: "", fontSize: 0, bolder: false, italic: false, fillColor: "", showOutline: false, outlineColor: "", outlineWidth: 0, showBackground: false, backgroundColor: "", backgroundPadding: 0, pixelOffsetX: 0, pixelOffsetY: 0 }); const point2 = ref({ color: "", pixelSize: 10, showOutline: false, outlineColor: "", outlineWidth: 0 }); const billboard = ref({ imgUrl: "", alpha: 1, scale: 1 }); const model = ref({ url: "", alpha: 1, showSilhouette: false, silhouetteSize: 0, silhouetteColor: "rgba(255,255,255,1)", minimumPixelSize: 1, maximumScale: 1, heading: 0, pitch: 0, roll: 0 }); updateParams(props.params); function updateParams(params) { proxy._params = params; _setShowControls(false); if (params.id === DrawPoint.DrawType.Label) { title.value = "\u6587\u5B57\u7F16\u8F91"; activeNames.value = ["\u6807\u6CE8\u6837\u5F0F"]; isShowLabelStyle.value = true; label2.value.content = params.label.text; label2.value.font = params.label.font; label2.value.fontSize = params.label.fontSize; label2.value.fillColor = params.label.fillColor; label2.value.showOutline = params.label.showOutline; label2.value.outlineColor = params.label.outlineColor; label2.value.outlineWidth = params.label.outlineWidth; label2.value.showBackground = params.label.showBackground; label2.value.backgroundColor = params.label.backgroundColor; label2.value.backgroundPadding = params.label.backgroundPadding; label2.value.pixelOffsetX = params.label.pixelOffsetX; label2.value.pixelOffsetY = params.label.pixelOffsetY; } else if (params.id === DrawPoint.DrawType.Point) { title.value = "\u70B9\u7F16\u8F91"; activeNames.value = ["\u70B9\u6837\u5F0F"]; isShowPointStyle.value = true; point2.value.color = params.point.color; point2.value.pixelSize = params.point.pixelSize; point2.value.showOutline = params.point.showOutline; point2.value.outlineColor = params.point.outlineColor; point2.value.outlineWidth = params.point.outlineWidth; } else if (params.id === DrawPoint.DrawType.Point2Label) { title.value = "\u70B9\u53CA\u6587\u5B57\u7F16\u8F91"; activeNames.value = ["\u70B9\u6837\u5F0F", "\u6807\u6CE8\u6837\u5F0F"]; isShowPointStyle.value = true; isShowLabelStyle.value = true; point2.value.color = params.point.color; point2.value.pixelSize = params.point.pixelSize; point2.value.showOutline = params.point.showOutline; point2.value.outlineColor = params.point.outlineColor; point2.value.outlineWidth = params.point.outlineWidth; label2.value.content = params.label.text; label2.value.font = params.label.font; label2.value.fontSize = params.label.fontSize; label2.value.fillColor = params.label.fillColor; label2.value.showOutline = params.label.showOutline; label2.value.outlineColor = params.label.outlineColor; label2.value.outlineWidth = params.label.outlineWidth; label2.value.showBackground = params.label.showBackground; label2.value.backgroundColor = params.label.backgroundColor; label2.value.backgroundPadding = params.label.backgroundPadding; label2.value.pixelOffsetX = params.label.pixelOffsetX; label2.value.pixelOffsetY = params.label.pixelOffsetY; } else if (params.id === DrawPoint.DrawType.Billboard) { title.value = "\u5E7F\u544A\u724C\u7F16\u8F91"; activeNames.value = ["\u56FE\u7247\u6837\u5F0F"]; isShowBillboardStyle.value = true; billboard.value.imgUrl = params.billboard.imgUrl; billboard.value.alpha = params.billboard.alpha; billboard.value.scale = params.billboard.scale; } else if (params.id === DrawPoint.DrawType.Billboard2Label) { title.value = "\u5E7F\u544A\u724C\u53CA\u6587\u5B57\u5706\u7F16\u8F91"; activeNames.value = ["\u56FE\u7247\u6837\u5F0F", "\u6807\u6CE8\u6837\u5F0F"]; isShowBillboardStyle.value = true; isShowLabelStyle.value = true; billboard.value.imgUrl = params.billboard.imgUrl; billboard.value.alpha = params.billboard.alpha; billboard.value.scale = params.billboard.scale; label2.value.content = params.label.text; label2.value.font = params.label.font; label2.value.fontSize = params.label.fontSize; label2.value.fillColor = params.label.fillColor; label2.value.showOutline = params.label.showOutline; label2.value.outlineColor = params.label.outlineColor; label2.value.outlineWidth = params.label.outlineWidth; label2.value.showBackground = params.label.showBackground; label2.value.backgroundColor = params.label.backgroundColor; label2.value.backgroundPadding = params.label.backgroundPadding; label2.value.pixelOffsetX = params.label.pixelOffsetX; label2.value.pixelOffsetY = params.label.pixelOffsetY; } else if (params.id === DrawPoint.DrawType.Model) { title.value = "\u5C0F\u6A21\u578B\u7F16\u8F91"; activeNames.value = ["\u5C0F\u6A21\u578B\u6837\u5F0F"]; isShowModelStyle.value = true; model.value.url = params.model.url; model.value.alpha = params.model.alpha; model.value.showSilhouette = params.model.showSilhouette; model.value.silhouetteColor = params.model.silhouetteColor; model.value.silhouetteSize = params.model.silhouetteSize; model.value.minimumPixelSize = params.model.minimumPixelSize; model.value.maximumScale = params.model.maximumScale; model.value.heading = params.model.heading; model.value.pitch = params.model.pitch; model.value.roll = params.model.roll; } } function _setShowControls(isShow) { isShowLabelStyle.value = isShow; isShowPointStyle.value = isShow; isShowBillboardStyle.value = isShow; isShowModelStyle.value = isShow; } function submit() { let outParam = proxy._params; outParam = { id: outParam.id, label: { text: label2.value.content, font: label2.value.font, fontSize: label2.value.fontSize, bolder: label2.value.bolder, italic: label2.value.italic, fillColor: label2.value.fillColor, showOutline: label2.value.showOutline, outlineWidth: label2.value.outlineWidth, outlineColor: label2.value.outlineColor, showBackground: label2.value.showBackground, backgroundColor: label2.value.backgroundColor, backgroundPadding: label2.value.backgroundPadding, pixelOffsetX: label2.value.pixelOffsetX, pixelOffsetY: label2.value.pixelOffsetY }, point: { color: point2.value.color, pixelSize: point2.value.pixelSize, showOutline: point2.value.showOutline, outlineWidth: point2.value.outlineWidth, outlineColor: point2.value.outlineColor }, billboard: { imgUrl: billboard.value.imgUrl, alpha: billboard.value.alpha, scale: billboard.value.scale }, model: { url: model.value.url, alpha: model.value.alpha, showSilhouette: model.value.showSilhouette, silhouetteColor: model.value.silhouetteColor, silhouetteSize: model.value.silhouetteSize, minimumPixelSize: model.value.minimumPixelSize, maximumScale: model.value.maximumScale, heading: model.value.heading, pitch: model.value.pitch, roll: model.value.roll } }; emit("submit", outParam); } function close() { dialogVisible.value = false; } function remove2() { emit("remove", {}); dialogVisible.value = false; } function closeDialog() { emit("update:showDialog", false); } function openDialog() { updateParams(props.params); } return (_ctx, _cache) => { const _component_el_scrollbar = resolveComponent("el-scrollbar"); return openBlock(), createElementBlock("div", _hoisted_1, [ createVNode(unref(ElDialog), { modal: false, "destroy-on-close": false, modelValue: dialogVisible.value, "onUpdate:modelValue": _cache[31] || (_cache[31] = ($event) => dialogVisible.value = $event), title: title.value, onClose: closeDialog, onOpen: openDialog, "show-close": false }, { header: withCtx(() => [ createElementVNode("div", _hoisted_2, [ createElementVNode("span", _hoisted_3, toDisplayString(title.value), 1) ]) ]), default: withCtx(() => [ createVNode(_component_el_scrollbar, null, { default: withCtx(() => [ createElementVNode("div", _hoisted_4, [ createVNode(unref(ElCollapse), { modelValue: activeNames.value, "onUpdate:modelValue": _cache[27] || (_cache[27] = ($event) => activeNames.value = $event) }, { default: withCtx(() => [ withDirectives(createVNode(unref(ElCollapseItem), { name: "\u6807\u6CE8\u6837\u5F0F" }, { title: withCtx(() => [ createVNode(unref(ElIcon), { style: { "padding": "10rem" } }, { default: withCtx(() => [ createVNode(unref(setting_default)) ]), _: 1 }), createTextVNode("\u6807\u6CE8\u6837\u5F0F ") ]), default: withCtx(() => [ createElementVNode("div", _hoisted_5, [ _hoisted_6, createElementVNode("div", _hoisted_7, [ createVNode(unref(ElInput), { modelValue: label2.value.content, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => label2.value.content = $event), placeholder: "\u8F93\u5165\u663E\u793A\u7684\u6587\u5B57\u5185\u5BB9", clearable: "", type: "textarea", rows: 2 }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_8, [ _hoisted_9, createElementVNode("div", _hoisted_10, [ createVNode(unref(ElSelect), { modelValue: label2.value.font, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => label2.value.font = $event), placeholder: "\u8BF7\u9009\u62E9" }, { default: withCtx(() => [ (openBlock(), createElementBlock(Fragment, null, renderList(selectOptionsFont, (item) => { return createVNode(unref(ElOption), { key: item.value, label: item.label, value: item.value }, null, 8, ["label", "value"]); }), 64)) ]), _: 1 }, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_11, [ _hoisted_12, createElementVNode("div", _hoisted_13, [ createVNode(unref(ElInputNumber), { modelValue: label2.value.fontSize, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => label2.value.fontSize = $event), min: 0, max: 100 }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_14, [ _hoisted_15, createElementVNode("div", _hoisted_16, [ createVNode(unref(ElSwitch), { modelValue: label2.value.bolder, "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => label2.value.bolder = $event) }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_17, [ _hoisted_18, createElementVNode("div", _hoisted_19, [ createVNode(unref(ElSwitch), { modelValue: label2.value.italic, "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => label2.value.italic = $event) }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_20, [ _hoisted_21, createElementVNode("div", _hoisted_22, [ createVNode(unref(ElConfigProvider), { locale: locale.value }, { default: withCtx(() => [ createVNode(unref(ElColorPicker), { modelValue: label2.value.fillColor, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => label2.value.fillColor = $event), "show-alpha": "", predefine: predefineColors.value, label: "12" }, null, 8, ["modelValue", "predefine"]) ]), _: 1 }, 8, ["locale"]) ]) ]), createElementVNode("div", _hoisted_23, [ _hoisted_24, createElementVNode("div", _hoisted_25, [ createVNode(unref(ElSwitch), { modelValue: label2.value.showOutline, "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => label2.value.showOutline = $event) }, null, 8, ["modelValue"]) ]) ]), withDirectives(createElementVNode("div", _hoisted_26, [ _hoisted_27, createElementVNode("div", _hoisted_28, [ createVNode(unref(ElConfigProvider), { locale: locale.value }, { default: withCtx(() => [ createVNode(unref(ElColorPicker), { modelValue: label2.value.outlineColor, "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => label2.value.outlineColor = $event), "show-alpha": "", predefine: predefineColors.value, label: "12" }, null, 8, ["modelValue", "predefine"]) ]), _: 1 }, 8, ["locale"]) ]) ], 512), [ [vShow, label2.value.showOutline] ]), withDirectives(createElementVNode("div", _hoisted_29, [ _hoisted_30, createElementVNode("div", _hoisted_31, [ createVNode(unref(ElInputNumber), { modelValue: label2.value.outlineWidth, "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => label2.value.outlineWidth = $event), min: 0, max: 100 }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, label2.value.showOutline] ]), createElementVNode("div", _hoisted_32, [ _hoisted_33, createElementVNode("div", _hoisted_34, [ createVNode(unref(ElSwitch), { modelValue: label2.value.showBackground, "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => label2.value.showBackground = $event) }, null, 8, ["modelValue"]) ]) ]), withDirectives(createElementVNode("div", _hoisted_35, [ _hoisted_36, createElementVNode("div", _hoisted_37, [ createVNode(unref(ElConfigProvider), { locale: locale.value }, { default: withCtx(() => [ createVNode(unref(ElColorPicker), { modelValue: label2.value.backgroundColor, "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => label2.value.backgroundColor = $event), "show-alpha": "", predefine: predefineColors.value, label: "12" }, null, 8, ["modelValue", "predefine"]) ]), _: 1 }, 8, ["locale"]) ]) ], 512), [ [vShow, label2.value.showBackground] ]), withDirectives(createElementVNode("div", _hoisted_38, [ _hoisted_39, createElementVNode("div", _hoisted_40, [ createVNode(unref(ElInputNumber), { modelValue: label2.value.backgroundPadding, "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => label2.value.backgroundPadding = $event), min: -100, max: 100 }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, label2.value.showBackground] ]), createElementVNode("div", _hoisted_41, [ _hoisted_42, createElementVNode("div", _hoisted_43, [ createVNode(unref(ElInputNumber), { modelValue: label2.value.pixelOffsetX, "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => label2.value.pixelOffsetX = $event), min: -100, max: 100 }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_44, [ _hoisted_45, createElementVNode("div", _hoisted_46, [ createVNode(unref(ElInputNumber), { modelValue: label2.value.pixelOffsetY, "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => label2.value.pixelOffsetY = $event), min: -100, max: 100 }, null, 8, ["modelValue"]) ]) ]) ]), _: 1 }, 512), [ [vShow, isShowLabelStyle.value] ]), withDirectives(createVNode(unref(ElCollapseItem), { name: "\u70B9\u6837\u5F0F" }, { title: withCtx(() => [ createVNode(unref(ElIcon), { style: { "padding": "10rem" } }, { default: withCtx(() => [ createVNode(unref(setting_default)) ]), _: 1 }), createTextVNode("\u70B9\u6837\u5F0F ") ]), default: withCtx(() => [ createElementVNode("div", _hoisted_47, [ _hoisted_48, createElementVNode("div", _hoisted_49, [ createVNode(unref(ElInputNumber), { modelValue: point2.value.pixelSize, "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => point2.value.pixelSize = $event), min: 0, max: 100 }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_50, [ _hoisted_51, createElementVNode("div", _hoisted_52, [ createVNode(unref(ElConfigProvider), { locale: locale.value }, { default: withCtx(() => [ createVNode(unref(ElColorPicker), { modelValue: point2.value.color, "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => point2.value.color = $event), "show-alpha": "", predefine: predefineColors.value, label: "12" }, null, 8, ["modelValue", "predefine"]) ]), _: 1 }, 8, ["locale"]) ]) ]), createElementVNode("div", _hoisted_53, [ _hoisted_54, createElementVNode("div", _hoisted_55, [ createVNode(unref(ElSwitch), { modelValue: point2.value.showOutline, "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => point2.value.showOutline = $event) }, null, 8, ["modelValue"]) ]) ]), withDirectives(createElementVNode("div", _hoisted_56, [ _hoisted_57, createElementVNode("div", _hoisted_58, [ createVNode(unref(ElConfigProvider), { locale: locale.value }, { default: withCtx(() => [ createVNode(unref(ElColorPicker), { modelValue: point2.value.outlineColor, "onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => point2.value.outlineColor = $event), "show-alpha": "", predefine: predefineColors.value, label: "12" }, null, 8, ["modelValue", "predefine"]) ]), _: 1 }, 8, ["locale"]) ]) ], 512), [ [vShow, point2.value.showOutline] ]), withDirectives(createElementVNode("div", _hoisted_59, [ _hoisted_60, createElementVNode("div", _hoisted_61, [ createVNode(unref(ElInputNumber), { modelValue: point2.value.outlineWidth, "onUpdate:modelValue": _cache[18] || (_cache[18] = ($event) => point2.value.outlineWidth = $event), min: 0, max: 100 }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, point2.value.showOutline] ]) ]), _: 1 }, 512), [ [vShow, isShowPointStyle.value] ]), withDirectives(createVNode(unref(ElCollapseItem), { name: "\u56FE\u7247\u6837\u5F0F" }, { title: withCtx(() => [ createVNode(unref(ElIcon), { style: { "padding": "10rem" } }, { default: withCtx(() => [ createVNode(unref(setting_default)) ]), _: 1 }), createTextVNode("\u56FE\u7247\u6837\u5F0F ") ]), default: withCtx(() => [ createElementVNode("div", _hoisted_62, [ _hoisted_63, createElementVNode("div", _hoisted_64, [ createVNode(unref(ElInput), { modelValue: billboard.value.imgUrl, "onUpdate:modelValue": _cache[19] || (_cache[19] = ($event) => billboard.value.imgUrl = $event), placeholder: "\u8F93\u5165\u56FE\u6807\u8DEF\u5F84", clearable: "", type: "textarea", rows: 2 }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_65, [ _hoisted_66, createElementVNode("div", _hoisted_67, [ createVNode(unref(ElInputNumber), { modelValue: billboard.value.scale, "onUpdate:modelValue": _cache[20] || (_cache[20] = ($event) => billboard.value.scale = $event), min: 1, max: 100 }, null, 8, ["modelValue"]) ]) ]) ]), _: 1 }, 512), [ [vShow, isShowBillboardStyle.value] ]), withDirectives(createVNode(unref(ElCollapseItem), { name: "\u5C0F\u6A21\u578B\u6837\u5F0F" }, { title: withCtx(() => [ createVNode(unref(ElIcon), { style: { "padding": "10rem" } }, { default: withCtx(() => [ createVNode(unref(setting_default)) ]), _: 1 }), createTextVNode("\u5C0F\u6A21\u578B\u6837\u5F0F ") ]), default: withCtx(() => [ createElementVNode("div", _hoisted_68, [ _hoisted_69, createElementVNode("div", _hoisted_70, [ createVNode(unref(ElInput), { modelValue: model.value.url, "onUpdate:modelValue": _cache[21] || (_cache[21] = ($event) => model.value.url = $event), placeholder: "\u8F93\u5165\u6A21\u578B\u8DEF\u5F84", clearable: "", type: "textarea", rows: 2 }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_71, [ _hoisted_72, createElementVNode("div", _hoisted_73, [ createVNode(unref(ElInputNumber), { modelValue: model.value.alpha, "onUpdate:modelValue": _cache[22] || (_cache[22] = ($event) => model.value.alpha = $event), step: 0.1, min: 0, max: 1 }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_74, [ _hoisted_75, createElementVNode("div", _hoisted_76, [ createVNode(unref(ElInputNumber), { modelValue: model.value.minimumPixelSize, "onUpdate:modelValue": _cache[23] || (_cache[23] = ($event) => model.value.minimumPixelSize = $event), step: 1, min: 0, max: 2e4 }, null, 8, ["modelValue"]) ]) ]), createElementVNode("div", _hoisted_77, [ _hoisted_78, createElementVNode("div", _hoisted_79, [ createVNode(unref(ElSwitch), { modelValue: model.value.showSilhouette, "onUpdate:modelValue": _cache[24] || (_cache[24] = ($event) => model.value.showSilhouette = $event) }, null, 8, ["modelValue"]) ]) ]), withDirectives(createElementVNode("div", _hoisted_80, [ _hoisted_81, createElementVNode("div", _hoisted_82, [ createVNode(unref(ElConfigProvider), { locale: locale.value }, { default: withCtx(() => [ createVNode(unref(ElColorPicker), { modelValue: model.value.silhouetteColor, "onUpdate:modelValue": _cache[25] || (_cache[25] = ($event) => model.value.silhouetteColor = $event), "show-alpha": "", predefine: predefineColors.value, label: "12" }, null, 8, ["modelValue", "predefine"]) ]), _: 1 }, 8, ["locale"]) ]) ], 512), [ [vShow, model.value.showSilhouette] ]), withDirectives(createElementVNode("div", _hoisted_83, [ _hoisted_84, createElementVNode("div", _hoisted_85, [ createVNode(unref(ElInputNumber), { modelValue: model.value.silhouetteSize, "onUpdate:modelValue": _cache[26] || (_cache[26] = ($event) => model.value.silhouetteSize = $event), step: 1, min: 0, max: 100 }, null, 8, ["modelValue"]) ]) ], 512), [ [vShow, model.value.showSilhouette] ]) ]), _: 1 }, 512), [ [vShow, isShowModelStyle.value] ]) ]), _: 1 }, 8, ["modelValue"]) ]), createElementVNode("div", _hoisted_86, [ createVNode(unref(ElButtonGroup), null, { default: withCtx(() => [ createVNode(unref(ElButton), { type: "primary", icon: unref(edit_default), onClick: _cache[28] || (_cache[28] = ($event) => submit()) }, { default: withCtx(() => [ createTextVNode("\u4FEE\u6539") ]), _: 1 }, 8, ["icon"]), createVNode(unref(ElButton), { type: "primary", style: { "background-color": "rgb(222, 146, 47)" }, icon: unref(delete_default), onClick: _cache[29] || (_cache[29] = ($event) => remove2()) }, { default: withCtx(() => [ createTextVNode("\u5220\u9664") ]), _: 1 }, 8, ["icon"]), createVNode(unref(ElButton), { type: "primary", style: { "background-color": "rgb(126, 128, 135)" }, icon: unref(close_default), onClick: _cache[30] || (_cache[30] = ($event) => close()) }, { default: withCtx(() => [ createTextVNode("\u5173\u95ED") ]), _: 1 }, 8, ["icon"]) ]), _: 1 }) ]) ]), _: 1 }) ]), _: 1 }, 8, ["modelValue", "title"]) ]); }; } }; var DialogEditProperty = /* @__PURE__ */ _export_sfc(_sfc_main, [["styles", [_style_0]]]); Cesium.Entity.prototype.setParams = function(params) { this._params = params; }; Cesium.Entity.prototype.getParams = function() { return this._params; }; Cesium.Entity.prototype.setEntityType = function(entityType) { this._entityType = entityType; }; Cesium.Entity.prototype.getEntityType = function(entityType) { return this._entityType; }; Cesium.Entity.prototype.setIsEdit = function(isEdit) { this._isEdit = isEdit; }; Cesium.Entity.prototype.getIsEdit = function() { return this._isEdit; }; class DrawPoint { constructor(viewer2) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); this._viewer = viewer2; this._viewer.scene.globe.depthTestAgainstTerrain = true; this._viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); this._entities = []; this._pointObject = new PointObject(viewer2); } static initEditPropertyParams() { return { id: void 0, label: { text: "\u91D1\u7530CIM\u4E09\u7EF4\u57FA\u7840\u5E73\u53F0", font: "Helvetica", fontSize: 24, bolder: false, italic: false, fillColor: "rgba(0,255,0,0.75)", showOutline: false, outlineWidth: 0, outlineColor: "rgba(255,255,255,1)", showBackground: false, backgroundPadding: 0, backgroundColor: "rgba(255,255,255,1)", pixelOffsetX: 0, pixelOffsetY: 0 }, point: { color: "rgba(0,255,0,0.75)", pixelSize: 10, showOutline: false, outlineWidth: 0, outlineColor: "rgba(255,255,255,1)" }, billboard: { imgUrl: "jt3dSDK/imgs/point/point3.png", alpha: 1, scale: 1 }, model: { url: "jt3dSDK/gltf/pyramid.glb", alpha: 1, showSilhouette: false, silhouetteColor: "rgba(255,255,255,1)", silhouetteSize: 0, minimumPixelSize: 128, maximumScale: 2e4, heading: 0, pitch: 0, roll: 0 } }; } _cartesian3ToGeo(position2) { let g = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); return { longitude: Cesium.Math.toDegrees(g.longitude), latitude: Cesium.Math.toDegrees(g.latitude), height: g.height }; } _arcToDegree(arc) { return arc / Math.PI * 180; } _getScreenClickPositionAndHeight(screenPoint) { var lng = void 0, lat = void 0, height2 = void 0; var ray = this._viewer.scene.camera.getPickRay(screenPoint); var position2 = this._viewer.scene.globe.pick(ray, this._viewer.scene); var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position2); var feature2 = this._viewer.scene.pick(screenPoint); if (feature2 == void 0) { lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } else { var cartesian = this._viewer.scene.pickPosition(screenPoint); if (Cesium.defined(cartesian)) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); lng = this._arcToDegree(cartographic.longitude); lat = this._arcToDegree(cartographic.latitude); height2 = cartographic.height; } } return { lng, lat, height: height2 }; } _transfromFromScreenPoint(screenPosition) { let location = this._getScreenClickPositionAndHeight(screenPosition); var cartesian = Cesium.Cartesian3.fromDegrees(location.lng, location.lat, location.height); return { gLocation: location, sLocation: cartesian }; } } Object.assign(DrawPoint.prototype, { _setMousePointerStyle() { document.querySelector("body").style.cursor = "crosshair"; }, _setMouseDefaultStyle() { document.querySelector("body").style.cursor = "default"; }, _registerLeftClickEvent(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { _self._lock = true; clearTimeout(_self._timer); _self._timer = setTimeout(function() { if (callChange) callChange(event2); _self._lock = false; }, 200); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); }, _registerMouseMoveEvent(handler, callChange) { let _self = this; if (!handler) return; handler.setInputAction(function(event2) { if (_self._lock === void 0 || _self._lock === false) { if (callChange) callChange(event2); } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); }, _registerLeftDownEvent(handler, callChange) { if (!handler) return; handler.setInputAction(function(event2) { if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.LEFT_DOWN); }, _registerLeftUpEvent(handler, callChange) { if (!handler) return; handler.setInputAction(function(event2) { if (callChange) callChange(event2); }, Cesium.ScreenSpaceEventType.LEFT_UP); }, _clearEvent(handler) { if (!handler) return; handler.destroy(); handler = null; } }); Object.assign(DrawPoint.prototype, { draw: function(type2, options2) { let _self = this; _self._unActivateEdit(); this._drawEventHandler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); this._drawType = type2; switch (type2) { case DrawPoint.DrawType.Model: _self._sketchDrawModel(_self._drawEventHandler, options2); break; case DrawPoint.DrawType.Label: _self._sketchDrawLabel(_self._drawEventHandler, options2); break; case DrawPoint.DrawType.Point: _self._sketchDrawPoint(_self._drawEventHandler, options2); break; case DrawPoint.DrawType.Point2Label: _self._sketchDrawPoint2Label(_self._drawEventHandler, options2); break; case DrawPoint.DrawType.Billboard: _self._sketchDrawBillboard(_self._drawEventHandler, options2); break; case DrawPoint.DrawType.Billboard2Label: _self._sketchDrawBillboard2Label(_self._drawEventHandler, options2); break; } }, clearAll() { for (var i2 = 0; i2 < this._entities.length; i2++) { var getById = viewer.entities.getById(this._entities[i2]); if (getById) { this._viewer.entities.remove(getById); } } this._closePropertyEditDialog(); }, _sketchDrawLabel(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; let entityParam = DrawPoint.initEditPropertyParams(); entityParam.label.font = entityParam.label.fontSize + "px " + entityParam.label.font; entityParam.label.pixelOffset = { x: entityParam.label.pixelOffsetX, y: entityParam.label.pixelOffsetY }; _self._pointObject.addLabel(loc2.sLocation, { label: entityParam.label }).then((entity) => { _self._viewer.entities.add(entity); _self._entities.push(entity.id); entityParam = DrawPoint.initEditPropertyParams(); _self._drawEntity = entity; _self._drawEntity.setParams(entityParam); _self._drawEntity.setEntityType(DrawPoint.DrawType.Label); _self._setEntityIsEdit(_self._drawEntity); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(loc2.sLocation, loc2.gLocation); }); }); }, _sketchDrawPoint(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; let entityParam = DrawPoint.initEditPropertyParams(); _self._pointObject.addPoint(loc2.sLocation, { point: entityParam.point }).then((entity) => { _self._viewer.entities.add(entity); _self._entities.push(entity.id); entityParam = DrawPoint.initEditPropertyParams(); _self._drawEntity = entity; _self._drawEntity.setParams(entityParam); _self._drawEntity.setEntityType(DrawPoint.DrawType.Point); _self._setEntityIsEdit(_self._drawEntity); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(loc2.sLocation, loc2.gLocation); }); }); }, _sketchDrawPoint2Label(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; let entityParam = DrawPoint.initEditPropertyParams(); entityParam.label.font = entityParam.label.fontSize + "px " + entityParam.label.font; entityParam.label.pixelOffset = { x: entityParam.label.pixelOffsetX, y: entityParam.label.pixelOffsetY - 10 }; _self._pointObject.addPoint(loc2.sLocation, { point: entityParam.point, label: entityParam.label }).then((entity) => { _self._viewer.entities.add(entity); _self._entities.push(entity.id); entityParam = DrawPoint.initEditPropertyParams(); entityParam.label.pixelOffsetY = -10; _self._drawEntity = entity; _self._drawEntity.setParams(entityParam); _self._drawEntity.setEntityType(DrawPoint.DrawType.Point2Label); _self._setEntityIsEdit(_self._drawEntity); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(loc2.sLocation, loc2.gLocation); }); }); }, _sketchDrawBillboard(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; let entityParam = DrawPoint.initEditPropertyParams(); _self._pointObject.addBillboard(loc2.sLocation, { billboard: entityParam.billboard }).then((entity) => { _self._viewer.entities.add(entity); _self._entities.push(entity.id); entityParam = DrawPoint.initEditPropertyParams(); entityParam.label.pixelOffsetY = -50; _self._drawEntity = entity; _self._drawEntity.setParams(entityParam); _self._drawEntity.setEntityType(DrawPoint.DrawType.Billboard); _self._setEntityIsEdit(_self._drawEntity); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(loc2.sLocation, loc2.gLocation); }); }); }, _sketchDrawBillboard2Label(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; let entityParam = DrawPoint.initEditPropertyParams(); entityParam.label.font = entityParam.label.fontSize + "px " + entityParam.label.font; entityParam.label.pixelOffset = { x: entityParam.label.pixelOffsetX, y: entityParam.label.pixelOffsetY - 50 }; _self._pointObject.addBillboard(loc2.sLocation, { billboard: entityParam.billboard, label: entityParam.label }).then((entity) => { _self._viewer.entities.add(entity); _self._entities.push(entity.id); entityParam = DrawPoint.initEditPropertyParams(); _self._drawEntity = entity; _self._drawEntity.setParams(entityParam); _self._drawEntity.setEntityType(DrawPoint.DrawType.Billboard2Label); _self._setEntityIsEdit(_self._drawEntity); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(loc2.sLocation, loc2.gLocation); }); }); }, _sketchDrawModel(handler, options2) { let _self = this; this._registerLeftClickEvent(handler, function(event2) { let loc2 = _self._transfromFromScreenPoint(event2.position); if (!Cesium.defined(loc2.sLocation)) return; let entityParam = DrawPoint.initEditPropertyParams(); _self._pointObject.addModel(loc2.sLocation, { model: entityParam.model }).then((entity) => { _self._viewer.entities.add(entity); _self._entities.push(entity.id); entityParam = DrawPoint.initEditPropertyParams(); _self._drawEntity = entity; _self._drawEntity.setParams(entityParam); _self._drawEntity.setEntityType(DrawPoint.DrawType.Model); _self._setEntityIsEdit(_self._drawEntity); _self._clearEvent(handler); if (options2.onComplete) options2.onComplete(loc2.sLocation, loc2.gLocation); }); }); }, updateEditEntityProperty: function(params) { if (this._editEntity === void 0) return; if (this._editEntity.getIsEdit() === void 0 || this._editEntity.getIsEdit() === false) return; let editEntityType = this._editEntity.getEntityType(); if (editEntityType === void 0) return; if (editEntityType === DrawPoint.DrawType.Label) { this._updateLabelProperty(params); } else if (editEntityType === DrawPoint.DrawType.Point) { this._updatePointProperty(params); } else if (editEntityType === DrawPoint.DrawType.Point2Label) { this._updatePoint2LabelProperty(params); } else if (editEntityType === DrawPoint.DrawType.Billboard) { this._updateBillboardProperty(params); } else if (editEntityType === DrawPoint.DrawType.Billboard2Label) { this._updateBillboard2LabelProperty(params); } else if (editEntityType === DrawPoint.DrawType.Model) { this._updateModelProperty(params); } }, _updateLabelProperty(params) { let label2 = params.label; this._editEntity.label.text = label2.text; let font = ""; if (label2.italic) { font += "italic "; } if (label2.bolder) { font += " bolder "; } font += label2.fontSize + "px " + label2.font; this._editEntity.label.font = font; this._editEntity.label.fillColor = Cesium.Color.fromCssColorString(label2.fillColor); this._editEntity.label.outlineColor = Cesium.Color.fromCssColorString(label2.outlineColor); this._editEntity.label.outlineWidth = parseFloat(label2.outlineWidth); this._editEntity.label.showBackground = label2.showBackground; this._editEntity.label.backgroundColor = Cesium.Color.fromCssColorString(label2.backgroundColor); this._editEntity.label.backgroundPadding = new Cesium.Cartesian2(parseFloat(label2.backgroundPadding), parseFloat(label2.backgroundPadding)); this._editEntity.label.pixelOffset = new Cesium.Cartesian2(parseFloat(label2.pixelOffsetX), parseFloat(label2.pixelOffsetY)); this._editEntity.setParams(params); }, _updatePointProperty(params) { let point2 = params.point; this._editEntity.point.color = Cesium.Color.fromCssColorString(point2.color); this._editEntity.point.pixelSize = parseFloat(point2.pixelSize); this._editEntity.point.outlineColor = Cesium.Color.fromCssColorString(point2.outlineColor); this._editEntity.point.outlineWidth = parseFloat(point2.outlineWidth); this._editEntity.setParams(params); }, _updatePoint2LabelProperty(params) { let label2 = params.label; this._editEntity.label.text = label2.text; let font = ""; if (label2.italic) { font += "italic "; } if (label2.bolder) { font += " bolder "; } font += label2.fontSize + "px " + label2.font; this._editEntity.label.font = font; this._editEntity.label.fillColor = Cesium.Color.fromCssColorString(label2.fillColor); this._editEntity.label.outlineColor = Cesium.Color.fromCssColorString(label2.outlineColor); this._editEntity.label.outlineWidth = parseFloat(label2.outlineWidth); this._editEntity.label.showBackground = label2.showBackground; this._editEntity.label.backgroundColor = Cesium.Color.fromCssColorString(label2.backgroundColor); this._editEntity.label.backgroundPadding = new Cesium.Cartesian2(parseFloat(label2.backgroundPadding), parseFloat(label2.backgroundPadding)); let point2 = params.point; this._editEntity.point.color = Cesium.Color.fromCssColorString(point2.color); this._editEntity.point.pixelSize = parseFloat(point2.pixelSize); this._editEntity.point.outlineColor = Cesium.Color.fromCssColorString(point2.outlineColor); this._editEntity.point.outlineWidth = parseFloat(point2.outlineWidth); this._editEntity.setParams(params); }, _updateBillboardProperty(params) { let billboard = params.billboard; this._editEntity.billboard.image = billboard.imgUrl; this._editEntity.billboard.scale = billboard.scale; this._editEntity.setParams(params); }, _updateBillboard2LabelProperty(params) { let label2 = params.label; this._editEntity.label.text = label2.text; let font = ""; if (label2.italic) { font += "italic "; } if (label2.bolder) { font += " bolder "; } font += label2.fontSize + "px " + label2.font; this._editEntity.label.font = font; this._editEntity.label.fillColor = Cesium.Color.fromCssColorString(label2.fillColor); this._editEntity.label.outlineColor = Cesium.Color.fromCssColorString(label2.outlineColor); this._editEntity.label.outlineWidth = parseFloat(label2.outlineWidth); this._editEntity.label.showBackground = label2.showBackground; this._editEntity.label.backgroundColor = Cesium.Color.fromCssColorString(label2.backgroundColor); this._editEntity.label.backgroundPadding = new Cesium.Cartesian2(parseFloat(label2.backgroundPadding), parseFloat(label2.backgroundPadding)); this._editEntity.label.pixelOffset = new Cesium.Cartesian2(parseFloat(label2.pixelOffsetX), parseFloat(label2.pixelOffsetY)); let billboard = params.billboard; this._editEntity.billboard.image = billboard.imgUrl; this._editEntity.billboard.scale = billboard.scale; this._editEntity.setParams(params); } }); Object.assign(DrawPoint.prototype, { _setEntityIsEdit(entity) { let _self = this; this._unActivateEdit(); entity.setIsEdit(true); this._sendShowPropertyDialog(entity); let handler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); this._registerLeftClickEvent(handler, function(event2) { _self._unActivateEdit(); let feature2 = _self._viewer.scene.pick(event2.position); if (feature2 !== void 0 && feature2.id instanceof Cesium.Entity) { let editEntityType = feature2.id.getEntityType(); if (editEntityType === DrawPoint.DrawType.Label || editEntityType === DrawPoint.DrawType.Point || editEntityType === DrawPoint.DrawType.Point2Label || editEntityType === DrawPoint.DrawType.Billboard || editEntityType === DrawPoint.DrawType.Billboard2Label || editEntityType === DrawPoint.DrawType.Model) { feature2.id.setIsEdit(true); _self._sendShowPropertyDialog(feature2.id); } } }); this._registerMouseMoveEvent(handler, function(event2) { let toolTip = "\u5355\u51FB\u4FEE\u6539\u5C5E\u6027\uFF0C\u5355\u51FB\u62D6\u52A8\u4FEE\u6539\u4F4D\u7F6E"; let feature2 = _self._viewer.scene.pick(event2.endPosition); if (feature2 !== void 0 && feature2.id instanceof Cesium.Entity) { let editEntityType = feature2.id.getEntityType(); if (editEntityType === DrawPoint.DrawType.Label || editEntityType === DrawPoint.DrawType.Point || editEntityType === DrawPoint.DrawType.Point2Label || editEntityType === DrawPoint.DrawType.Billboard || editEntityType === DrawPoint.DrawType.Billboard2Label || editEntityType === DrawPoint.DrawType.Model) { if (feature2.id.getIsEdit()) { toolTip = "\u5355\u51FB\u4FEE\u6539\u5C5E\u6027\uFF0C\u5355\u51FB\u62D6\u52A8\u4FEE\u6539\u4F4D\u7F6E"; CreateRemindertip(toolTip, event2.endPosition, true); } else { toolTip = "\u5355\u51FB\u4FEE\u6539\u5C5E\u6027"; CreateRemindertip(toolTip, event2.endPosition, true); } } } else { CreateRemindertip(toolTip, event2.endPosition, false); } }); }, _unActivateEdit: function() { if (this._sketchEditHandler != void 0) { this._sketchEditHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN); this._sketchEditHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP); this._sketchEditHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE); } this._editEntity = void 0; for (var i2 = 0; i2 < this._entities.length; i2++) { var getById = this._viewer.entities.getById(this._entities[i2]); if (getById) { getById.setIsEdit(false); } } this._closePropertyEditDialog(); }, _sendShowPropertyDialog(entity) { let _self = this; let editEntityType = entity.getEntityType(); if (entity.getIsEdit() === void 0 || entity.getIsEdit() === false || editEntityType === void 0) { this._unActivateEdit(); return; } let editProperty = entity.getParams(); if (editProperty !== void 0 && this.onEditProperty !== void 0) { editProperty.id = editEntityType; _self._openPropertyEditDialog( editProperty, function(params) { _self.updateEditEntityProperty(params); }, function() { _self._viewer.entities.remove(entity); _self._editEntity = void 0; } ); } this._activeteNormalEdit(entity); }, _activeteNormalEdit: function(editEntity) { let _self = this; editEntity.getEntityType(); this._editEntity = editEntity; if (this._sketchEditHandler === void 0) { this._sketchEditHandler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); } this._registerLeftDownEvent(this._sketchEditHandler, function(event2) { const pickInfo = _self._viewer.scene.pick(event2.position); if (!pickInfo) { return; } _self._viewer.scene.screenSpaceCameraController.enableRotate = false; _self._registerMouseMoveEvent(_self._sketchEditHandler, function(event3) { const position2 = event3.endPosition; const cartesian = _self._viewer.scene.globe.pick(_self._viewer.camera.getPickRay(position2), _self._viewer.scene); const selectedEntity = _self._editEntity; if (!selectedEntity) { return false; } selectedEntity.position = cartesian; }); _self._registerLeftUpEvent(_self._sketchEditHandler, function(event3) { _self._sketchEditHandler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE); _self._sketchEditHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP); _self._viewer.scene.screenSpaceCameraController.enableRotate = true; }); }); }, _updateModelProperty(params) { let model = params.model; this._editEntity.model.uri = model.url; this._editEntity.model.color = Cesium.Color.WHITE.withAlpha(model.alpha); this._editEntity.model.minimumPixelSize = model.minimumPixelSize; this._editEntity.model.maximumScale = model.maximumScale; this._editEntity.model.silhouetteSize = model.silhouetteSize; this._editEntity.model.silhouetteColor = new Cesium.Color.fromCssColorString(model.silhouetteColor); var heading = Cesium.Math.toRadians(model.heading); var pitch = model.pitch; var roll = model.roll; new Cesium.HeadingPitchRoll(heading, pitch, roll); this._editEntity.setParams(params); } }); Object.assign(DrawPoint.prototype, { _openPropertyEditDialog: function(params, callEdit, callRemove) { this._editPropertyDialogDomId = "dialog-property-dom-point"; this._registerDOMPropertyEdit = "dialog-edit-property-point"; let PropertyEditComponent = customElements.get(this._registerDOMPropertyEdit); if (PropertyEditComponent === void 0) { PropertyEditComponent = defineCustomElement(DialogEditProperty); customElements.define(this._registerDOMPropertyEdit, PropertyEditComponent); } this._closePropertyEditDialog(); let dialogPropertyElement = new PropertyEditComponent({ params }); dialogPropertyElement.id = this._editPropertyDialogDomId; dialogPropertyElement.showDialog = true; document.body.appendChild(dialogPropertyElement); dialogPropertyElement.addEventListener( "submit", (e) => { if (callEdit) callEdit(e.detail[0]); }, false ); dialogPropertyElement.addEventListener( "remove", (e) => { if (callRemove) callRemove(); }, false ); }, _closePropertyEditDialog() { let dom2 = document.getElementById(this._editPropertyDialogDomId); if (dom2 !== null && dom2 !== void 0) { document.body.removeChild(dom2); } } }); DrawPoint.DrawType = Object.freeze({ Model: "model", Label: "label", Point: "point", Point2Label: "point2Label", Billboard: "billboard", Billboard2Label: "billboard2Label" }); var MultiFieldAdaptWindow$1 = ""; class MultiFieldAdaptWindow { constructor(viewer2, position2, title, properties, offsetHeight) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!position2) throw new Cesium.DeveloperError("no position object!"); this.viewer = viewer2; this.position = position2; this.offsetHeight = offsetHeight; if (position2 instanceof Cesium.Cartesian3) { this.position = position2; } else { this.position = Cesium.Cartesian3.fromDegrees(position2[0], position2[1], position2[2] || 0); } if (document.getElementsByClassName("MultiField-popup").length > 0) { document.getElementsByClassName("MultiField-popup")[0].remove(); viewer2.entities.remove(viewer2.entities.getById("MultiFieldPopupPoint")); } this.id = "popup_" + getGuid(); this.popupDiv = document.createElement("div"); this.popupDiv.classList.add("MultiField-popup"); this.popupDiv.id = this.id; this.viewer.container.append(this.popupDiv); this.popupDiv.innerHTML = this._createHtml(title, properties); this.viewer.scene.postRender.addEventListener(this.postRender, this); this.initPoint(); document.getElementsByClassName("leaflet-popup-close-button")[0].onclick = () => { this.close(); }; } postRender() { this.viewer.scene.canvas.height; const windowPosition = new Cesium.Cartesian2(); Cesium.SceneTransforms.wgs84ToWindowCoordinates( this.viewer.scene, this.position, windowPosition ); let elWidth = this.popupDiv.offsetWidth; let elHeight = this.popupDiv.offsetHeight; if (!!this.offsetHeight) { elHeight += this.offsetHeight; } this.popupDiv.style.left = windowPosition.x - elWidth / 2 + "px"; this.popupDiv.style.top = windowPosition.y - elHeight + "px"; const camerPosition = this.viewer.camera.position; let height2 = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(camerPosition).height; height2 += this.viewer.scene.globe.ellipsoid.maximumRadius; if (!(Cesium.Cartesian3.distance(camerPosition, this.position) > height2) && this.viewer.camera.positionCartographic.height < 5e7) { this.popupDiv.style.display = "block"; } else { this.popupDiv.style.display = "none"; } } _createHtml(header, content) { let html = `
` + header + ` \xD7
` + this._createTable(content) + `
`; return html; } _createTable(content) { let html = ''; for (let key in content) { html += ``; } html += "
${key} ${content[key]}
"; return html; } initPoint() { this.billboard = new Cesium.Entity({ id: "MultiFieldPopupPoint", name: "popupPoint", position: this.position, billboard: { image: "jt3dSDK/imgs/point/point.png", horizontalOrigin: Cesium.HorizontalOrigin.center, verticalOrigin: Cesium.VerticalOrigin.bottom, scale: 1, pixelOffset: new Cesium.Cartesian2(0, 0), disableDepthTestDistance: Number.POSITIVE_INFINITY } }); this.viewer.entities.add(this.billboard); } } Object.assign(MultiFieldAdaptWindow.prototype, { close() { this.popupDiv.remove(); this.viewer.scene.postRender.removeEventListener(this.postRender, this); this.viewer.entities.remove(this.billboard); } }); var win; if (typeof window !== "undefined") { win = window; } else if (typeof commonjsGlobal !== "undefined") { win = commonjsGlobal; } else if (typeof self !== "undefined") { win = self; } else { win = {}; } var window_1 = win; var __viteBrowserExternal = {}; var __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, "default": __viteBrowserExternal }, Symbol.toStringTag, { value: "Module" })); var require$$0 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1); var topLevel = typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof window !== "undefined" ? window : {}; var minDoc = require$$0; var doccy; if (typeof document !== "undefined") { doccy = document; } else { doccy = topLevel["__GLOBAL_DOCUMENT_CACHE@4"]; if (!doccy) { doccy = topLevel["__GLOBAL_DOCUMENT_CACHE@4"] = minDoc; } } var document_1 = doccy; var keycode$1 = { exports: {} }; (function(module2, exports2) { function keyCode(searchInput) { if (searchInput && "object" === typeof searchInput) { var hasKeyCode = searchInput.which || searchInput.keyCode || searchInput.charCode; if (hasKeyCode) searchInput = hasKeyCode; } if ("number" === typeof searchInput) return names2[searchInput]; var search = String(searchInput); var foundNamedKey = codes[search.toLowerCase()]; if (foundNamedKey) return foundNamedKey; var foundNamedKey = aliases[search.toLowerCase()]; if (foundNamedKey) return foundNamedKey; if (search.length === 1) return search.charCodeAt(0); return void 0; } keyCode.isEventKey = function isEventKey(event2, nameOrCode) { if (event2 && "object" === typeof event2) { var keyCode2 = event2.which || event2.keyCode || event2.charCode; if (keyCode2 === null || keyCode2 === void 0) { return false; } if (typeof nameOrCode === "string") { var foundNamedKey = codes[nameOrCode.toLowerCase()]; if (foundNamedKey) { return foundNamedKey === keyCode2; } var foundNamedKey = aliases[nameOrCode.toLowerCase()]; if (foundNamedKey) { return foundNamedKey === keyCode2; } } else if (typeof nameOrCode === "number") { return nameOrCode === keyCode2; } return false; } }; exports2 = module2.exports = keyCode; var codes = exports2.code = exports2.codes = { "backspace": 8, "tab": 9, "enter": 13, "shift": 16, "ctrl": 17, "alt": 18, "pause/break": 19, "caps lock": 20, "esc": 27, "space": 32, "page up": 33, "page down": 34, "end": 35, "home": 36, "left": 37, "up": 38, "right": 39, "down": 40, "insert": 45, "delete": 46, "command": 91, "left command": 91, "right command": 93, "numpad *": 106, "numpad +": 107, "numpad -": 109, "numpad .": 110, "numpad /": 111, "num lock": 144, "scroll lock": 145, "my computer": 182, "my calculator": 183, ";": 186, "=": 187, ",": 188, "-": 189, ".": 190, "/": 191, "`": 192, "[": 219, "\\": 220, "]": 221, "'": 222 }; var aliases = exports2.aliases = { "windows": 91, "\u21E7": 16, "\u2325": 18, "\u2303": 17, "\u2318": 91, "ctl": 17, "control": 17, "option": 18, "pause": 19, "break": 19, "caps": 20, "return": 13, "escape": 27, "spc": 32, "spacebar": 32, "pgup": 33, "pgdn": 34, "ins": 45, "del": 46, "cmd": 91 }; /*! * Programatically add the following */ for (i2 = 97; i2 < 123; i2++) codes[String.fromCharCode(i2)] = i2 - 32; for (var i2 = 48; i2 < 58; i2++) codes[i2 - 48] = i2; for (i2 = 1; i2 < 13; i2++) codes["f" + i2] = i2 + 111; for (i2 = 0; i2 < 10; i2++) codes["numpad " + i2] = i2 + 96; var names2 = exports2.names = exports2.title = {}; for (i2 in codes) names2[codes[i2]] = i2; for (var alias in aliases) { codes[alias] = aliases[alias]; } })(keycode$1, keycode$1.exports); var keycode = keycode$1.exports; var tuple = SafeParseTuple; function SafeParseTuple(obj, reviver) { var json; var error = null; try { json = JSON.parse(obj, reviver); } catch (err) { error = err; } return [error, json]; } var lib = { exports: {} }; function _extends$2() { _extends$2 = Object.assign ? Object.assign.bind() : function(target) { for (var i2 = 1; i2 < arguments.length; i2++) { var source = arguments[i2]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); } var _extends$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, "default": _extends$2 }, Symbol.toStringTag, { value: "Module" })); var require$$1 = /* @__PURE__ */ getAugmentedNamespace(_extends$3); var isFunction_1 = isFunction$1; var toString$2 = Object.prototype.toString; function isFunction$1(fn2) { if (!fn2) { return false; } var string = toString$2.call(fn2); return string === "[object Function]" || typeof fn2 === "function" && string !== "[object RegExp]" || typeof window !== "undefined" && (fn2 === window.setTimeout || fn2 === window.alert || fn2 === window.confirm || fn2 === window.prompt); } var window$3 = window_1; var httpResponseHandler = function httpResponseHandler2(callback2, decodeResponseBody) { if (decodeResponseBody === void 0) { decodeResponseBody = false; } return function(err, response, responseBody) { if (err) { callback2(err); return; } if (response.statusCode >= 400 && response.statusCode <= 599) { var cause = responseBody; if (decodeResponseBody) { if (window$3.TextDecoder) { var charset = getCharset(response.headers && response.headers["content-type"]); try { cause = new TextDecoder(charset).decode(responseBody); } catch (e) { } } else { cause = String.fromCharCode.apply(null, new Uint8Array(responseBody)); } } callback2({ cause }); return; } callback2(null, responseBody); }; }; function getCharset(contentTypeHeader) { if (contentTypeHeader === void 0) { contentTypeHeader = ""; } return contentTypeHeader.toLowerCase().split(";").reduce(function(charset, contentType) { var _contentType$split = contentType.split("="), type2 = _contentType$split[0], value = _contentType$split[1]; if (type2.trim() === "charset") { return value.trim(); } return charset; }, "utf-8"); } var httpHandler = httpResponseHandler; var window$2 = window_1; var _extends$1 = require$$1; var isFunction = isFunction_1; createXHR.httpHandler = httpHandler; /** * @license * slighly modified parse-headers 2.0.2 * Copyright (c) 2014 David Björklund * Available under the MIT license * */ var parseHeaders = function parseHeaders2(headers) { var result = {}; if (!headers) { return result; } headers.trim().split("\n").forEach(function(row) { var index2 = row.indexOf(":"); var key = row.slice(0, index2).trim().toLowerCase(); var value = row.slice(index2 + 1).trim(); if (typeof result[key] === "undefined") { result[key] = value; } else if (Array.isArray(result[key])) { result[key].push(value); } else { result[key] = [result[key], value]; } }); return result; }; lib.exports = createXHR; lib.exports.default = createXHR; createXHR.XMLHttpRequest = window$2.XMLHttpRequest || noop$2; createXHR.XDomainRequest = "withCredentials" in new createXHR.XMLHttpRequest() ? createXHR.XMLHttpRequest : window$2.XDomainRequest; forEachArray(["get", "put", "post", "patch", "head", "delete"], function(method) { createXHR[method === "delete" ? "del" : method] = function(uri, options2, callback2) { options2 = initParams(uri, options2, callback2); options2.method = method.toUpperCase(); return _createXHR(options2); }; }); function forEachArray(array, iterator) { for (var i2 = 0; i2 < array.length; i2++) { iterator(array[i2]); } } function isEmpty(obj) { for (var i2 in obj) { if (obj.hasOwnProperty(i2)) return false; } return true; } function initParams(uri, options2, callback2) { var params = uri; if (isFunction(options2)) { callback2 = options2; if (typeof uri === "string") { params = { uri }; } } else { params = _extends$1({}, options2, { uri }); } params.callback = callback2; return params; } function createXHR(uri, options2, callback2) { options2 = initParams(uri, options2, callback2); return _createXHR(options2); } function _createXHR(options2) { if (typeof options2.callback === "undefined") { throw new Error("callback argument missing"); } var called = false; var callback2 = function cbOnce(err, response, body2) { if (!called) { called = true; options2.callback(err, response, body2); } }; function readystatechange() { if (xhr.readyState === 4) { setTimeout(loadFunc, 0); } } function getBody() { var body2 = void 0; if (xhr.response) { body2 = xhr.response; } else { body2 = xhr.responseText || getXml(xhr); } if (isJson) { try { body2 = JSON.parse(body2); } catch (e) { } } return body2; } function errorFunc(evt) { clearTimeout(timeoutTimer); if (!(evt instanceof Error)) { evt = new Error("" + (evt || "Unknown XMLHttpRequest Error")); } evt.statusCode = 0; return callback2(evt, failureResponse); } function loadFunc() { if (aborted) return; var status; clearTimeout(timeoutTimer); if (options2.useXDR && xhr.status === void 0) { status = 200; } else { status = xhr.status === 1223 ? 204 : xhr.status; } var response = failureResponse; var err = null; if (status !== 0) { response = { body: getBody(), statusCode: status, method, headers: {}, url: uri, rawRequest: xhr }; if (xhr.getAllResponseHeaders) { response.headers = parseHeaders(xhr.getAllResponseHeaders()); } } else { err = new Error("Internal XMLHttpRequest Error"); } return callback2(err, response, response.body); } var xhr = options2.xhr || null; if (!xhr) { if (options2.cors || options2.useXDR) { xhr = new createXHR.XDomainRequest(); } else { xhr = new createXHR.XMLHttpRequest(); } } var key; var aborted; var uri = xhr.url = options2.uri || options2.url; var method = xhr.method = options2.method || "GET"; var body = options2.body || options2.data; var headers = xhr.headers = options2.headers || {}; var sync = !!options2.sync; var isJson = false; var timeoutTimer; var failureResponse = { body: void 0, headers: {}, statusCode: 0, method, url: uri, rawRequest: xhr }; if ("json" in options2 && options2.json !== false) { isJson = true; headers["accept"] || headers["Accept"] || (headers["Accept"] = "application/json"); if (method !== "GET" && method !== "HEAD") { headers["content-type"] || headers["Content-Type"] || (headers["Content-Type"] = "application/json"); body = JSON.stringify(options2.json === true ? body : options2.json); } } xhr.onreadystatechange = readystatechange; xhr.onload = loadFunc; xhr.onerror = errorFunc; xhr.onprogress = function() { }; xhr.onabort = function() { aborted = true; }; xhr.ontimeout = errorFunc; xhr.open(method, uri, !sync, options2.username, options2.password); if (!sync) { xhr.withCredentials = !!options2.withCredentials; } if (!sync && options2.timeout > 0) { timeoutTimer = setTimeout(function() { if (aborted) return; aborted = true; xhr.abort("timeout"); var e = new Error("XMLHttpRequest timeout"); e.code = "ETIMEDOUT"; errorFunc(e); }, options2.timeout); } if (xhr.setRequestHeader) { for (key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } } else if (options2.headers && !isEmpty(options2.headers)) { throw new Error("Headers cannot be set on an XDomainRequest object"); } if ("responseType" in options2) { xhr.responseType = options2.responseType; } if ("beforeSend" in options2 && typeof options2.beforeSend === "function") { options2.beforeSend(xhr); } xhr.send(body || null); return xhr; } function getXml(xhr) { try { if (xhr.responseType === "document") { return xhr.responseXML; } var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === "parsererror"; if (xhr.responseType === "" && !firefoxBugTakenEffect) { return xhr.responseXML; } } catch (e) { } return null; } function noop$2() { } var XHR = lib.exports; var browserIndex = { exports: {} }; var document$1 = document_1; var _objCreate = Object.create || function() { function F() { } return function(o) { if (arguments.length !== 1) { throw new Error("Object.create shim only accepts one parameter."); } F.prototype = o; return new F(); }; }(); function ParsingError(errorData, message) { this.name = "ParsingError"; this.code = errorData.code; this.message = message || errorData.message; } ParsingError.prototype = _objCreate(Error.prototype); ParsingError.prototype.constructor = ParsingError; ParsingError.Errors = { BadSignature: { code: 0, message: "Malformed WebVTT signature." }, BadTimeStamp: { code: 1, message: "Malformed time stamp." } }; function parseTimeStamp(input) { function computeSeconds(h2, m2, s, f) { return (h2 | 0) * 3600 + (m2 | 0) * 60 + (s | 0) + (f | 0) / 1e3; } var m = input.match(/^(\d+):(\d{1,2})(:\d{1,2})?\.(\d{3})/); if (!m) { return null; } if (m[3]) { return computeSeconds(m[1], m[2], m[3].replace(":", ""), m[4]); } else if (m[1] > 59) { return computeSeconds(m[1], m[2], 0, m[4]); } else { return computeSeconds(0, m[1], m[2], m[4]); } } function Settings() { this.values = _objCreate(null); } Settings.prototype = { set: function(k, v) { if (!this.get(k) && v !== "") { this.values[k] = v; } }, get: function(k, dflt, defaultKey) { if (defaultKey) { return this.has(k) ? this.values[k] : dflt[defaultKey]; } return this.has(k) ? this.values[k] : dflt; }, has: function(k) { return k in this.values; }, alt: function(k, v, a) { for (var n = 0; n < a.length; ++n) { if (v === a[n]) { this.set(k, v); break; } } }, integer: function(k, v) { if (/^-?\d+$/.test(v)) { this.set(k, parseInt(v, 10)); } }, percent: function(k, v) { if (v.match(/^([\d]{1,3})(\.[\d]*)?%$/)) { v = parseFloat(v); if (v >= 0 && v <= 100) { this.set(k, v); return true; } } return false; } }; function parseOptions(input, callback2, keyValueDelim, groupDelim) { var groups = groupDelim ? input.split(groupDelim) : [input]; for (var i2 in groups) { if (typeof groups[i2] !== "string") { continue; } var kv = groups[i2].split(keyValueDelim); if (kv.length !== 2) { continue; } var k = kv[0].trim(); var v = kv[1].trim(); callback2(k, v); } } function parseCue(input, cue, regionList) { var oInput = input; function consumeTimeStamp() { var ts3 = parseTimeStamp(input); if (ts3 === null) { throw new ParsingError( ParsingError.Errors.BadTimeStamp, "Malformed timestamp: " + oInput ); } input = input.replace(/^[^\sa-zA-Z-]+/, ""); return ts3; } function consumeCueSettings(input2, cue2) { var settings = new Settings(); parseOptions(input2, function(k, v) { switch (k) { case "region": for (var i2 = regionList.length - 1; i2 >= 0; i2--) { if (regionList[i2].id === v) { settings.set(k, regionList[i2].region); break; } } break; case "vertical": settings.alt(k, v, ["rl", "lr"]); break; case "line": var vals = v.split(","), vals0 = vals[0]; settings.integer(k, vals0); settings.percent(k, vals0) ? settings.set("snapToLines", false) : null; settings.alt(k, vals0, ["auto"]); if (vals.length === 2) { settings.alt("lineAlign", vals[1], ["start", "center", "end"]); } break; case "position": vals = v.split(","); settings.percent(k, vals[0]); if (vals.length === 2) { settings.alt("positionAlign", vals[1], ["start", "center", "end"]); } break; case "size": settings.percent(k, v); break; case "align": settings.alt(k, v, ["start", "center", "end", "left", "right"]); break; } }, /:/, /\s/); cue2.region = settings.get("region", null); cue2.vertical = settings.get("vertical", ""); try { cue2.line = settings.get("line", "auto"); } catch (e) { } cue2.lineAlign = settings.get("lineAlign", "start"); cue2.snapToLines = settings.get("snapToLines", true); cue2.size = settings.get("size", 100); try { cue2.align = settings.get("align", "center"); } catch (e) { cue2.align = settings.get("align", "middle"); } try { cue2.position = settings.get("position", "auto"); } catch (e) { cue2.position = settings.get("position", { start: 0, left: 0, center: 50, middle: 50, end: 100, right: 100 }, cue2.align); } cue2.positionAlign = settings.get("positionAlign", { start: "start", left: "start", center: "center", middle: "center", end: "end", right: "end" }, cue2.align); } function skipWhitespace() { input = input.replace(/^\s+/, ""); } skipWhitespace(); cue.startTime = consumeTimeStamp(); skipWhitespace(); if (input.substr(0, 3) !== "-->") { throw new ParsingError( ParsingError.Errors.BadTimeStamp, "Malformed time stamp (time stamps must be separated by '-->'): " + oInput ); } input = input.substr(3); skipWhitespace(); cue.endTime = consumeTimeStamp(); skipWhitespace(); consumeCueSettings(input, cue); } var TEXTAREA_ELEMENT = document$1.createElement && document$1.createElement("textarea"); var TAG_NAME = { c: "span", i: "i", b: "b", u: "u", ruby: "ruby", rt: "rt", v: "span", lang: "span" }; var DEFAULT_COLOR_CLASS = { white: "rgba(255,255,255,1)", lime: "rgba(0,255,0,1)", cyan: "rgba(0,255,255,1)", red: "rgba(255,0,0,1)", yellow: "rgba(255,255,0,1)", magenta: "rgba(255,0,255,1)", blue: "rgba(0,0,255,1)", black: "rgba(0,0,0,1)" }; var TAG_ANNOTATION = { v: "title", lang: "lang" }; var NEEDS_PARENT = { rt: "ruby" }; function parseContent(window2, input) { function nextToken() { if (!input) { return null; } function consume(result) { input = input.substr(result.length); return result; } var m2 = input.match(/^([^<]*)(<[^>]*>?)?/); return consume(m2[1] ? m2[1] : m2[2]); } function unescape2(s) { TEXTAREA_ELEMENT.innerHTML = s; s = TEXTAREA_ELEMENT.textContent; TEXTAREA_ELEMENT.textContent = ""; return s; } function shouldAdd(current2, element) { return !NEEDS_PARENT[element.localName] || NEEDS_PARENT[element.localName] === current2.localName; } function createElement(type2, annotation) { var tagName = TAG_NAME[type2]; if (!tagName) { return null; } var element = window2.document.createElement(tagName); var name = TAG_ANNOTATION[type2]; if (name && annotation) { element[name] = annotation.trim(); } return element; } var rootDiv = window2.document.createElement("div"), current = rootDiv, t2, tagStack = []; while ((t2 = nextToken()) !== null) { if (t2[0] === "<") { if (t2[1] === "/") { if (tagStack.length && tagStack[tagStack.length - 1] === t2.substr(2).replace(">", "")) { tagStack.pop(); current = current.parentNode; } continue; } var ts3 = parseTimeStamp(t2.substr(1, t2.length - 2)); var node; if (ts3) { node = window2.document.createProcessingInstruction("timestamp", ts3); current.appendChild(node); continue; } var m = t2.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/); if (!m) { continue; } node = createElement(m[1], m[3]); if (!node) { continue; } if (!shouldAdd(current, node)) { continue; } if (m[2]) { var classes = m[2].split("."); classes.forEach(function(cl) { var bgColor = /^bg_/.test(cl); var colorName = bgColor ? cl.slice(3) : cl; if (DEFAULT_COLOR_CLASS.hasOwnProperty(colorName)) { var propName = bgColor ? "background-color" : "color"; var propValue = DEFAULT_COLOR_CLASS[colorName]; node.style[propName] = propValue; } }); node.className = classes.join(" "); } tagStack.push(m[1]); current.appendChild(node); current = node; continue; } current.appendChild(window2.document.createTextNode(unescape2(t2))); } return rootDiv; } var strongRTLRanges = [ [1470, 1470], [1472, 1472], [1475, 1475], [1478, 1478], [1488, 1514], [1520, 1524], [1544, 1544], [1547, 1547], [1549, 1549], [1563, 1563], [1566, 1610], [1645, 1647], [1649, 1749], [1765, 1766], [1774, 1775], [1786, 1805], [1807, 1808], [1810, 1839], [1869, 1957], [1969, 1969], [1984, 2026], [2036, 2037], [2042, 2042], [2048, 2069], [2074, 2074], [2084, 2084], [2088, 2088], [2096, 2110], [2112, 2136], [2142, 2142], [2208, 2208], [2210, 2220], [8207, 8207], [64285, 64285], [64287, 64296], [64298, 64310], [64312, 64316], [64318, 64318], [64320, 64321], [64323, 64324], [64326, 64449], [64467, 64829], [64848, 64911], [64914, 64967], [65008, 65020], [65136, 65140], [65142, 65276], [67584, 67589], [67592, 67592], [67594, 67637], [67639, 67640], [67644, 67644], [67647, 67669], [67671, 67679], [67840, 67867], [67872, 67897], [67903, 67903], [67968, 68023], [68030, 68031], [68096, 68096], [68112, 68115], [68117, 68119], [68121, 68147], [68160, 68167], [68176, 68184], [68192, 68223], [68352, 68405], [68416, 68437], [68440, 68466], [68472, 68479], [68608, 68680], [126464, 126467], [126469, 126495], [126497, 126498], [126500, 126500], [126503, 126503], [126505, 126514], [126516, 126519], [126521, 126521], [126523, 126523], [126530, 126530], [126535, 126535], [126537, 126537], [126539, 126539], [126541, 126543], [126545, 126546], [126548, 126548], [126551, 126551], [126553, 126553], [126555, 126555], [126557, 126557], [126559, 126559], [126561, 126562], [126564, 126564], [126567, 126570], [126572, 126578], [126580, 126583], [126585, 126588], [126590, 126590], [126592, 126601], [126603, 126619], [126625, 126627], [126629, 126633], [126635, 126651], [1114109, 1114109] ]; function isStrongRTLChar(charCode) { for (var i2 = 0; i2 < strongRTLRanges.length; i2++) { var currentRange = strongRTLRanges[i2]; if (charCode >= currentRange[0] && charCode <= currentRange[1]) { return true; } } return false; } function determineBidi(cueDiv) { var nodeStack = [], text = "", charCode; if (!cueDiv || !cueDiv.childNodes) { return "ltr"; } function pushNodes(nodeStack2, node) { for (var i3 = node.childNodes.length - 1; i3 >= 0; i3--) { nodeStack2.push(node.childNodes[i3]); } } function nextTextNode(nodeStack2) { if (!nodeStack2 || !nodeStack2.length) { return null; } var node = nodeStack2.pop(), text2 = node.textContent || node.innerText; if (text2) { var m = text2.match(/^.*(\n|\r)/); if (m) { nodeStack2.length = 0; return m[0]; } return text2; } if (node.tagName === "ruby") { return nextTextNode(nodeStack2); } if (node.childNodes) { pushNodes(nodeStack2, node); return nextTextNode(nodeStack2); } } pushNodes(nodeStack, cueDiv); while (text = nextTextNode(nodeStack)) { for (var i2 = 0; i2 < text.length; i2++) { charCode = text.charCodeAt(i2); if (isStrongRTLChar(charCode)) { return "rtl"; } } } return "ltr"; } function computeLinePos(cue) { if (typeof cue.line === "number" && (cue.snapToLines || cue.line >= 0 && cue.line <= 100)) { return cue.line; } if (!cue.track || !cue.track.textTrackList || !cue.track.textTrackList.mediaElement) { return -1; } var track = cue.track, trackList = track.textTrackList, count = 0; for (var i2 = 0; i2 < trackList.length && trackList[i2] !== track; i2++) { if (trackList[i2].mode === "showing") { count++; } } return ++count * -1; } function StyleBox() { } StyleBox.prototype.applyStyles = function(styles, div) { div = div || this.div; for (var prop in styles) { if (styles.hasOwnProperty(prop)) { div.style[prop] = styles[prop]; } } }; StyleBox.prototype.formatStyle = function(val, unit) { return val === 0 ? 0 : val + unit; }; function CueStyleBox(window2, cue, styleOptions) { StyleBox.call(this); this.cue = cue; this.cueDiv = parseContent(window2, cue.text); var styles = { color: "rgba(255, 255, 255, 1)", backgroundColor: "rgba(0, 0, 0, 0.8)", position: "relative", left: 0, right: 0, top: 0, bottom: 0, display: "inline", writingMode: cue.vertical === "" ? "horizontal-tb" : cue.vertical === "lr" ? "vertical-lr" : "vertical-rl", unicodeBidi: "plaintext" }; this.applyStyles(styles, this.cueDiv); this.div = window2.document.createElement("div"); styles = { direction: determineBidi(this.cueDiv), writingMode: cue.vertical === "" ? "horizontal-tb" : cue.vertical === "lr" ? "vertical-lr" : "vertical-rl", unicodeBidi: "plaintext", textAlign: cue.align === "middle" ? "center" : cue.align, font: styleOptions.font, whiteSpace: "pre-line", position: "absolute" }; this.applyStyles(styles); this.div.appendChild(this.cueDiv); var textPos = 0; switch (cue.positionAlign) { case "start": textPos = cue.position; break; case "center": textPos = cue.position - cue.size / 2; break; case "end": textPos = cue.position - cue.size; break; } if (cue.vertical === "") { this.applyStyles({ left: this.formatStyle(textPos, "%"), width: this.formatStyle(cue.size, "%") }); } else { this.applyStyles({ top: this.formatStyle(textPos, "%"), height: this.formatStyle(cue.size, "%") }); } this.move = function(box) { this.applyStyles({ top: this.formatStyle(box.top, "px"), bottom: this.formatStyle(box.bottom, "px"), left: this.formatStyle(box.left, "px"), right: this.formatStyle(box.right, "px"), height: this.formatStyle(box.height, "px"), width: this.formatStyle(box.width, "px") }); }; } CueStyleBox.prototype = _objCreate(StyleBox.prototype); CueStyleBox.prototype.constructor = CueStyleBox; function BoxPosition(obj) { var lh, height2, width2, top; if (obj.div) { height2 = obj.div.offsetHeight; width2 = obj.div.offsetWidth; top = obj.div.offsetTop; var rects = (rects = obj.div.childNodes) && (rects = rects[0]) && rects.getClientRects && rects.getClientRects(); obj = obj.div.getBoundingClientRect(); lh = rects ? Math.max(rects[0] && rects[0].height || 0, obj.height / rects.length) : 0; } this.left = obj.left; this.right = obj.right; this.top = obj.top || top; this.height = obj.height || height2; this.bottom = obj.bottom || top + (obj.height || height2); this.width = obj.width || width2; this.lineHeight = lh !== void 0 ? lh : obj.lineHeight; } BoxPosition.prototype.move = function(axis, toMove) { toMove = toMove !== void 0 ? toMove : this.lineHeight; switch (axis) { case "+x": this.left += toMove; this.right += toMove; break; case "-x": this.left -= toMove; this.right -= toMove; break; case "+y": this.top += toMove; this.bottom += toMove; break; case "-y": this.top -= toMove; this.bottom -= toMove; break; } }; BoxPosition.prototype.overlaps = function(b2) { return this.left < b2.right && this.right > b2.left && this.top < b2.bottom && this.bottom > b2.top; }; BoxPosition.prototype.overlapsAny = function(boxes) { for (var i2 = 0; i2 < boxes.length; i2++) { if (this.overlaps(boxes[i2])) { return true; } } return false; }; BoxPosition.prototype.within = function(container) { return this.top >= container.top && this.bottom <= container.bottom && this.left >= container.left && this.right <= container.right; }; BoxPosition.prototype.overlapsOppositeAxis = function(container, axis) { switch (axis) { case "+x": return this.left < container.left; case "-x": return this.right > container.right; case "+y": return this.top < container.top; case "-y": return this.bottom > container.bottom; } }; BoxPosition.prototype.intersectPercentage = function(b2) { var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)), y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)), intersectArea = x * y; return intersectArea / (this.height * this.width); }; BoxPosition.prototype.toCSSCompatValues = function(reference) { return { top: this.top - reference.top, bottom: reference.bottom - this.bottom, left: this.left - reference.left, right: reference.right - this.right, height: this.height, width: this.width }; }; BoxPosition.getSimpleBoxPosition = function(obj) { var height2 = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0; var width2 = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0; var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0; obj = obj.div ? obj.div.getBoundingClientRect() : obj.tagName ? obj.getBoundingClientRect() : obj; var ret = { left: obj.left, right: obj.right, top: obj.top || top, height: obj.height || height2, bottom: obj.bottom || top + (obj.height || height2), width: obj.width || width2 }; return ret; }; function moveBoxToLinePosition(window2, styleBox, containerBox, boxPositions) { function findBestPosition(b, axis2) { var bestPosition2, specifiedPosition = new BoxPosition(b), percentage = 1; for (var i2 = 0; i2 < axis2.length; i2++) { while (b.overlapsOppositeAxis(containerBox, axis2[i2]) || b.within(containerBox) && b.overlapsAny(boxPositions)) { b.move(axis2[i2]); } if (b.within(containerBox)) { return b; } var p = b.intersectPercentage(containerBox); if (percentage > p) { bestPosition2 = new BoxPosition(b); percentage = p; } b = new BoxPosition(specifiedPosition); } return bestPosition2 || specifiedPosition; } var boxPosition = new BoxPosition(styleBox), cue = styleBox.cue, linePos = computeLinePos(cue), axis = []; if (cue.snapToLines) { var size; switch (cue.vertical) { case "": axis = ["+y", "-y"]; size = "height"; break; case "rl": axis = ["+x", "-x"]; size = "width"; break; case "lr": axis = ["-x", "+x"]; size = "width"; break; } var step = boxPosition.lineHeight, position2 = step * Math.round(linePos), maxPosition = containerBox[size] + step, initialAxis = axis[0]; if (Math.abs(position2) > maxPosition) { position2 = position2 < 0 ? -1 : 1; position2 *= Math.ceil(maxPosition / step) * step; } if (linePos < 0) { position2 += cue.vertical === "" ? containerBox.height : containerBox.width; axis = axis.reverse(); } boxPosition.move(initialAxis, position2); } else { var calculatedPercentage = boxPosition.lineHeight / containerBox.height * 100; switch (cue.lineAlign) { case "center": linePos -= calculatedPercentage / 2; break; case "end": linePos -= calculatedPercentage; break; } switch (cue.vertical) { case "": styleBox.applyStyles({ top: styleBox.formatStyle(linePos, "%") }); break; case "rl": styleBox.applyStyles({ left: styleBox.formatStyle(linePos, "%") }); break; case "lr": styleBox.applyStyles({ right: styleBox.formatStyle(linePos, "%") }); break; } axis = ["+y", "-x", "+x", "-y"]; boxPosition = new BoxPosition(styleBox); } var bestPosition = findBestPosition(boxPosition, axis); styleBox.move(bestPosition.toCSSCompatValues(containerBox)); } function WebVTT$1() { } WebVTT$1.StringDecoder = function() { return { decode: function(data) { if (!data) { return ""; } if (typeof data !== "string") { throw new Error("Error - expected string data."); } return decodeURIComponent(encodeURIComponent(data)); } }; }; WebVTT$1.convertCueToDOMTree = function(window2, cuetext) { if (!window2 || !cuetext) { return null; } return parseContent(window2, cuetext); }; var FONT_SIZE_PERCENT = 0.05; var FONT_STYLE = "sans-serif"; var CUE_BACKGROUND_PADDING = "1.5%"; WebVTT$1.processCues = function(window2, cues, overlay) { if (!window2 || !cues || !overlay) { return null; } while (overlay.firstChild) { overlay.removeChild(overlay.firstChild); } var paddedOverlay = window2.document.createElement("div"); paddedOverlay.style.position = "absolute"; paddedOverlay.style.left = "0"; paddedOverlay.style.right = "0"; paddedOverlay.style.top = "0"; paddedOverlay.style.bottom = "0"; paddedOverlay.style.margin = CUE_BACKGROUND_PADDING; overlay.appendChild(paddedOverlay); function shouldCompute(cues2) { for (var i3 = 0; i3 < cues2.length; i3++) { if (cues2[i3].hasBeenReset || !cues2[i3].displayState) { return true; } } return false; } if (!shouldCompute(cues)) { for (var i2 = 0; i2 < cues.length; i2++) { paddedOverlay.appendChild(cues[i2].displayState); } return; } var boxPositions = [], containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay), fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100; var styleOptions = { font: fontSize + "px " + FONT_STYLE }; (function() { var styleBox, cue; for (var i3 = 0; i3 < cues.length; i3++) { cue = cues[i3]; styleBox = new CueStyleBox(window2, cue, styleOptions); paddedOverlay.appendChild(styleBox.div); moveBoxToLinePosition(window2, styleBox, containerBox, boxPositions); cue.displayState = styleBox.div; boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox)); } })(); }; WebVTT$1.Parser = function(window2, vttjs2, decoder) { if (!decoder) { decoder = vttjs2; vttjs2 = {}; } if (!vttjs2) { vttjs2 = {}; } this.window = window2; this.vttjs = vttjs2; this.state = "INITIAL"; this.buffer = ""; this.decoder = decoder || new TextDecoder("utf8"); this.regionList = []; }; WebVTT$1.Parser.prototype = { reportOrThrowError: function(e) { if (e instanceof ParsingError) { this.onparsingerror && this.onparsingerror(e); } else { throw e; } }, parse: function(data) { var self2 = this; if (data) { self2.buffer += self2.decoder.decode(data, { stream: true }); } function collectNextLine() { var buffer = self2.buffer; var pos = 0; while (pos < buffer.length && buffer[pos] !== "\r" && buffer[pos] !== "\n") { ++pos; } var line2 = buffer.substr(0, pos); if (buffer[pos] === "\r") { ++pos; } if (buffer[pos] === "\n") { ++pos; } self2.buffer = buffer.substr(pos); return line2; } function parseRegion(input) { var settings = new Settings(); parseOptions(input, function(k, v) { switch (k) { case "id": settings.set(k, v); break; case "width": settings.percent(k, v); break; case "lines": settings.integer(k, v); break; case "regionanchor": case "viewportanchor": var xy = v.split(","); if (xy.length !== 2) { break; } var anchor = new Settings(); anchor.percent("x", xy[0]); anchor.percent("y", xy[1]); if (!anchor.has("x") || !anchor.has("y")) { break; } settings.set(k + "X", anchor.get("x")); settings.set(k + "Y", anchor.get("y")); break; case "scroll": settings.alt(k, v, ["up"]); break; } }, /=/, /\s/); if (settings.has("id")) { var region = new (self2.vttjs.VTTRegion || self2.window.VTTRegion)(); region.width = settings.get("width", 100); region.lines = settings.get("lines", 3); region.regionAnchorX = settings.get("regionanchorX", 0); region.regionAnchorY = settings.get("regionanchorY", 100); region.viewportAnchorX = settings.get("viewportanchorX", 0); region.viewportAnchorY = settings.get("viewportanchorY", 100); region.scroll = settings.get("scroll", ""); self2.onregion && self2.onregion(region); self2.regionList.push({ id: settings.get("id"), region }); } } function parseTimestampMap(input) { var settings = new Settings(); parseOptions(input, function(k, v) { switch (k) { case "MPEGT": settings.integer(k + "S", v); break; case "LOCA": settings.set(k + "L", parseTimeStamp(v)); break; } }, /[^\d]:/, /,/); self2.ontimestampmap && self2.ontimestampmap({ "MPEGTS": settings.get("MPEGTS"), "LOCAL": settings.get("LOCAL") }); } function parseHeader(input) { if (input.match(/X-TIMESTAMP-MAP/)) { parseOptions(input, function(k, v) { switch (k) { case "X-TIMESTAMP-MAP": parseTimestampMap(v); break; } }, /=/); } else { parseOptions(input, function(k, v) { switch (k) { case "Region": parseRegion(v); break; } }, /:/); } } try { var line; if (self2.state === "INITIAL") { if (!/\r\n|\n/.test(self2.buffer)) { return this; } line = collectNextLine(); var m = line.match(/^WEBVTT([ \t].*)?$/); if (!m || !m[0]) { throw new ParsingError(ParsingError.Errors.BadSignature); } self2.state = "HEADER"; } var alreadyCollectedLine = false; while (self2.buffer) { if (!/\r\n|\n/.test(self2.buffer)) { return this; } if (!alreadyCollectedLine) { line = collectNextLine(); } else { alreadyCollectedLine = false; } switch (self2.state) { case "HEADER": if (/:/.test(line)) { parseHeader(line); } else if (!line) { self2.state = "ID"; } continue; case "NOTE": if (!line) { self2.state = "ID"; } continue; case "ID": if (/^NOTE($|[ \t])/.test(line)) { self2.state = "NOTE"; break; } if (!line) { continue; } self2.cue = new (self2.vttjs.VTTCue || self2.window.VTTCue)(0, 0, ""); try { self2.cue.align = "center"; } catch (e) { self2.cue.align = "middle"; } self2.state = "CUE"; if (line.indexOf("-->") === -1) { self2.cue.id = line; continue; } case "CUE": try { parseCue(line, self2.cue, self2.regionList); } catch (e) { self2.reportOrThrowError(e); self2.cue = null; self2.state = "BADCUE"; continue; } self2.state = "CUETEXT"; continue; case "CUETEXT": var hasSubstring = line.indexOf("-->") !== -1; if (!line || hasSubstring && (alreadyCollectedLine = true)) { self2.oncue && self2.oncue(self2.cue); self2.cue = null; self2.state = "ID"; continue; } if (self2.cue.text) { self2.cue.text += "\n"; } self2.cue.text += line.replace(/\u2028/g, "\n").replace(/u2029/g, "\n"); continue; case "BADCUE": if (!line) { self2.state = "ID"; } continue; } } } catch (e) { self2.reportOrThrowError(e); if (self2.state === "CUETEXT" && self2.cue && self2.oncue) { self2.oncue(self2.cue); } self2.cue = null; self2.state = self2.state === "INITIAL" ? "BADWEBVTT" : "BADCUE"; } return this; }, flush: function() { var self2 = this; try { self2.buffer += self2.decoder.decode(); if (self2.cue || self2.state === "HEADER") { self2.buffer += "\n\n"; self2.parse(); } if (self2.state === "INITIAL") { throw new ParsingError(ParsingError.Errors.BadSignature); } } catch (e) { self2.reportOrThrowError(e); } self2.onflush && self2.onflush(); return this; } }; var vtt$1 = WebVTT$1; var autoKeyword = "auto"; var directionSetting = { "": 1, "lr": 1, "rl": 1 }; var alignSetting = { "start": 1, "center": 1, "end": 1, "left": 1, "right": 1, "auto": 1, "line-left": 1, "line-right": 1 }; function findDirectionSetting(value) { if (typeof value !== "string") { return false; } var dir = directionSetting[value.toLowerCase()]; return dir ? value.toLowerCase() : false; } function findAlignSetting(value) { if (typeof value !== "string") { return false; } var align = alignSetting[value.toLowerCase()]; return align ? value.toLowerCase() : false; } function VTTCue(startTime, endTime, text) { this.hasBeenReset = false; var _id = ""; var _pauseOnExit = false; var _startTime = startTime; var _endTime = endTime; var _text = text; var _region = null; var _vertical = ""; var _snapToLines = true; var _line = "auto"; var _lineAlign = "start"; var _position = "auto"; var _positionAlign = "auto"; var _size = 100; var _align = "center"; Object.defineProperties(this, { "id": { enumerable: true, get: function() { return _id; }, set: function(value) { _id = "" + value; } }, "pauseOnExit": { enumerable: true, get: function() { return _pauseOnExit; }, set: function(value) { _pauseOnExit = !!value; } }, "startTime": { enumerable: true, get: function() { return _startTime; }, set: function(value) { if (typeof value !== "number") { throw new TypeError("Start time must be set to a number."); } _startTime = value; this.hasBeenReset = true; } }, "endTime": { enumerable: true, get: function() { return _endTime; }, set: function(value) { if (typeof value !== "number") { throw new TypeError("End time must be set to a number."); } _endTime = value; this.hasBeenReset = true; } }, "text": { enumerable: true, get: function() { return _text; }, set: function(value) { _text = "" + value; this.hasBeenReset = true; } }, "region": { enumerable: true, get: function() { return _region; }, set: function(value) { _region = value; this.hasBeenReset = true; } }, "vertical": { enumerable: true, get: function() { return _vertical; }, set: function(value) { var setting = findDirectionSetting(value); if (setting === false) { throw new SyntaxError("Vertical: an invalid or illegal direction string was specified."); } _vertical = setting; this.hasBeenReset = true; } }, "snapToLines": { enumerable: true, get: function() { return _snapToLines; }, set: function(value) { _snapToLines = !!value; this.hasBeenReset = true; } }, "line": { enumerable: true, get: function() { return _line; }, set: function(value) { if (typeof value !== "number" && value !== autoKeyword) { throw new SyntaxError("Line: an invalid number or illegal string was specified."); } _line = value; this.hasBeenReset = true; } }, "lineAlign": { enumerable: true, get: function() { return _lineAlign; }, set: function(value) { var setting = findAlignSetting(value); if (!setting) { console.warn("lineAlign: an invalid or illegal string was specified."); } else { _lineAlign = setting; this.hasBeenReset = true; } } }, "position": { enumerable: true, get: function() { return _position; }, set: function(value) { if (value < 0 || value > 100) { throw new Error("Position must be between 0 and 100."); } _position = value; this.hasBeenReset = true; } }, "positionAlign": { enumerable: true, get: function() { return _positionAlign; }, set: function(value) { var setting = findAlignSetting(value); if (!setting) { console.warn("positionAlign: an invalid or illegal string was specified."); } else { _positionAlign = setting; this.hasBeenReset = true; } } }, "size": { enumerable: true, get: function() { return _size; }, set: function(value) { if (value < 0 || value > 100) { throw new Error("Size must be between 0 and 100."); } _size = value; this.hasBeenReset = true; } }, "align": { enumerable: true, get: function() { return _align; }, set: function(value) { var setting = findAlignSetting(value); if (!setting) { throw new SyntaxError("align: an invalid or illegal alignment string was specified."); } _align = setting; this.hasBeenReset = true; } } }); this.displayState = void 0; } VTTCue.prototype.getCueAsHTML = function() { return WebVTT.convertCueToDOMTree(window, this.text); }; var vttcue = VTTCue; var scrollSetting = { "": true, "up": true }; function findScrollSetting(value) { if (typeof value !== "string") { return false; } var scroll = scrollSetting[value.toLowerCase()]; return scroll ? value.toLowerCase() : false; } function isValidPercentValue(value) { return typeof value === "number" && (value >= 0 && value <= 100); } function VTTRegion() { var _width = 100; var _lines = 3; var _regionAnchorX = 0; var _regionAnchorY = 100; var _viewportAnchorX = 0; var _viewportAnchorY = 100; var _scroll = ""; Object.defineProperties(this, { "width": { enumerable: true, get: function() { return _width; }, set: function(value) { if (!isValidPercentValue(value)) { throw new Error("Width must be between 0 and 100."); } _width = value; } }, "lines": { enumerable: true, get: function() { return _lines; }, set: function(value) { if (typeof value !== "number") { throw new TypeError("Lines must be set to a number."); } _lines = value; } }, "regionAnchorY": { enumerable: true, get: function() { return _regionAnchorY; }, set: function(value) { if (!isValidPercentValue(value)) { throw new Error("RegionAnchorX must be between 0 and 100."); } _regionAnchorY = value; } }, "regionAnchorX": { enumerable: true, get: function() { return _regionAnchorX; }, set: function(value) { if (!isValidPercentValue(value)) { throw new Error("RegionAnchorY must be between 0 and 100."); } _regionAnchorX = value; } }, "viewportAnchorY": { enumerable: true, get: function() { return _viewportAnchorY; }, set: function(value) { if (!isValidPercentValue(value)) { throw new Error("ViewportAnchorY must be between 0 and 100."); } _viewportAnchorY = value; } }, "viewportAnchorX": { enumerable: true, get: function() { return _viewportAnchorX; }, set: function(value) { if (!isValidPercentValue(value)) { throw new Error("ViewportAnchorX must be between 0 and 100."); } _viewportAnchorX = value; } }, "scroll": { enumerable: true, get: function() { return _scroll; }, set: function(value) { var setting = findScrollSetting(value); if (setting === false) { console.warn("Scroll: an invalid or illegal string was specified."); } else { _scroll = setting; } } } }); } var vttregion = VTTRegion; var window$1 = window_1; var vttjs = browserIndex.exports = { WebVTT: vtt$1, VTTCue: vttcue, VTTRegion: vttregion }; window$1.vttjs = vttjs; window$1.WebVTT = vttjs.WebVTT; var cueShim = vttjs.VTTCue; var regionShim = vttjs.VTTRegion; var nativeVTTCue = window$1.VTTCue; var nativeVTTRegion = window$1.VTTRegion; vttjs.shim = function() { window$1.VTTCue = cueShim; window$1.VTTRegion = regionShim; }; vttjs.restore = function() { window$1.VTTCue = nativeVTTCue; window$1.VTTRegion = nativeVTTRegion; }; if (!window$1.VTTCue) { vttjs.shim(); } var vtt = browserIndex.exports; var urlToolkit = { exports: {} }; (function(module2, exports2) { (function(root2) { var URL_REGEX = /^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/; var FIRST_SEGMENT_REGEX = /^(?=([^\/?#]*))\1([^]*)$/; var SLASH_DOT_REGEX = /(?:\/|^)\.(?=\/)/g; var SLASH_DOT_DOT_REGEX = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g; var URLToolkit2 = { buildAbsoluteURL: function(baseURL, relativeURL, opts) { opts = opts || {}; baseURL = baseURL.trim(); relativeURL = relativeURL.trim(); if (!relativeURL) { if (!opts.alwaysNormalize) { return baseURL; } var basePartsForNormalise = URLToolkit2.parseURL(baseURL); if (!basePartsForNormalise) { throw new Error("Error trying to parse base URL."); } basePartsForNormalise.path = URLToolkit2.normalizePath( basePartsForNormalise.path ); return URLToolkit2.buildURLFromParts(basePartsForNormalise); } var relativeParts = URLToolkit2.parseURL(relativeURL); if (!relativeParts) { throw new Error("Error trying to parse relative URL."); } if (relativeParts.scheme) { if (!opts.alwaysNormalize) { return relativeURL; } relativeParts.path = URLToolkit2.normalizePath(relativeParts.path); return URLToolkit2.buildURLFromParts(relativeParts); } var baseParts = URLToolkit2.parseURL(baseURL); if (!baseParts) { throw new Error("Error trying to parse base URL."); } if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== "/") { var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path); baseParts.netLoc = pathParts[1]; baseParts.path = pathParts[2]; } if (baseParts.netLoc && !baseParts.path) { baseParts.path = "/"; } var builtParts = { scheme: baseParts.scheme, netLoc: relativeParts.netLoc, path: null, params: relativeParts.params, query: relativeParts.query, fragment: relativeParts.fragment }; if (!relativeParts.netLoc) { builtParts.netLoc = baseParts.netLoc; if (relativeParts.path[0] !== "/") { if (!relativeParts.path) { builtParts.path = baseParts.path; if (!relativeParts.params) { builtParts.params = baseParts.params; if (!relativeParts.query) { builtParts.query = baseParts.query; } } } else { var baseURLPath = baseParts.path; var newPath = baseURLPath.substring(0, baseURLPath.lastIndexOf("/") + 1) + relativeParts.path; builtParts.path = URLToolkit2.normalizePath(newPath); } } } if (builtParts.path === null) { builtParts.path = opts.alwaysNormalize ? URLToolkit2.normalizePath(relativeParts.path) : relativeParts.path; } return URLToolkit2.buildURLFromParts(builtParts); }, parseURL: function(url) { var parts = URL_REGEX.exec(url); if (!parts) { return null; } return { scheme: parts[1] || "", netLoc: parts[2] || "", path: parts[3] || "", params: parts[4] || "", query: parts[5] || "", fragment: parts[6] || "" }; }, normalizePath: function(path) { path = path.split("").reverse().join("").replace(SLASH_DOT_REGEX, ""); while (path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, "")).length) { } return path.split("").reverse().join(""); }, buildURLFromParts: function(parts) { return parts.scheme + parts.netLoc + parts.path + parts.params + parts.query + parts.fragment; } }; module2.exports = URLToolkit2; })(); })(urlToolkit); var URLToolkit = urlToolkit.exports; var DEFAULT_LOCATION$2 = "http://example.com"; var resolveUrl$4 = function resolveUrl(baseUrl, relativeUrl) { if (/^[a-z]+:/i.test(relativeUrl)) { return relativeUrl; } if (/^data:/.test(baseUrl)) { baseUrl = window_1.location && window_1.location.href || ""; } var nativeURL = typeof window_1.URL === "function"; var protocolLess = /^\/\//.test(baseUrl); var removeLocation = !window_1.location && !/\/\//i.test(baseUrl); if (nativeURL) { baseUrl = new window_1.URL(baseUrl, window_1.location || DEFAULT_LOCATION$2); } else if (!/\/\//i.test(baseUrl)) { baseUrl = URLToolkit.buildAbsoluteURL(window_1.location && window_1.location.href || "", baseUrl); } if (nativeURL) { var newUrl = new URL(relativeUrl, baseUrl); if (removeLocation) { return newUrl.href.slice(DEFAULT_LOCATION$2.length); } else if (protocolLess) { return newUrl.href.slice(newUrl.protocol.length); } return newUrl.href; } return URLToolkit.buildAbsoluteURL(baseUrl, relativeUrl); }; var Stream$1 = /* @__PURE__ */ function() { function Stream2() { this.listeners = {}; } var _proto = Stream2.prototype; _proto.on = function on3(type2, listener) { if (!this.listeners[type2]) { this.listeners[type2] = []; } this.listeners[type2].push(listener); }; _proto.off = function off2(type2, listener) { if (!this.listeners[type2]) { return false; } var index2 = this.listeners[type2].indexOf(listener); this.listeners[type2] = this.listeners[type2].slice(0); this.listeners[type2].splice(index2, 1); return index2 > -1; }; _proto.trigger = function trigger2(type2) { var callbacks = this.listeners[type2]; if (!callbacks) { return; } if (arguments.length === 2) { var length = callbacks.length; for (var i2 = 0; i2 < length; ++i2) { callbacks[i2].call(this, arguments[1]); } } else { var args = Array.prototype.slice.call(arguments, 1); var _length = callbacks.length; for (var _i = 0; _i < _length; ++_i) { callbacks[_i].apply(this, args); } } }; _proto.dispose = function dispose() { this.listeners = {}; }; _proto.pipe = function pipe(destination2) { this.on("data", function(data) { destination2.push(data); }); }; return Stream2; }(); var atob$2 = function atob(s) { return window_1.atob ? window_1.atob(s) : Buffer.from(s, "base64").toString("binary"); }; function decodeB64ToUint8Array$2(b64Text) { var decodedString = atob$2(b64Text); var array = new Uint8Array(decodedString.length); for (var i2 = 0; i2 < decodedString.length; i2++) { array[i2] = decodedString.charCodeAt(i2); } return array; } /*! @name m3u8-parser @version 6.1.0 @license Apache-2.0 */ class LineStream$1 extends Stream$1 { constructor() { super(); this.buffer = ""; } push(data) { let nextNewline; this.buffer += data; nextNewline = this.buffer.indexOf("\n"); for (; nextNewline > -1; nextNewline = this.buffer.indexOf("\n")) { this.trigger("data", this.buffer.substring(0, nextNewline)); this.buffer = this.buffer.substring(nextNewline + 1); } } } const TAB$1 = String.fromCharCode(9); const parseByterange$1 = function(byterangeString) { const match = /([0-9.]*)?@?([0-9.]*)?/.exec(byterangeString || ""); const result = {}; if (match[1]) { result.length = parseInt(match[1], 10); } if (match[2]) { result.offset = parseInt(match[2], 10); } return result; }; const attributeSeparator$1 = function() { const key = "[^=]*"; const value = '"[^"]*"|[^,]*'; const keyvalue = "(?:" + key + ")=(?:" + value + ")"; return new RegExp("(?:^|,)(" + keyvalue + ")"); }; const parseAttributes$3 = function(attributes) { const result = {}; if (!attributes) { return result; } const attrs = attributes.split(attributeSeparator$1()); let i2 = attrs.length; let attr; while (i2--) { if (attrs[i2] === "") { continue; } attr = /([^=]*)=(.*)/.exec(attrs[i2]).slice(1); attr[0] = attr[0].replace(/^\s+|\s+$/g, ""); attr[1] = attr[1].replace(/^\s+|\s+$/g, ""); attr[1] = attr[1].replace(/^['"](.*)['"]$/g, "$1"); result[attr[0]] = attr[1]; } return result; }; class ParseStream$1 extends Stream$1 { constructor() { super(); this.customParsers = []; this.tagMappers = []; } push(line) { let match; let event2; line = line.trim(); if (line.length === 0) { return; } if (line[0] !== "#") { this.trigger("data", { type: "uri", uri: line }); return; } const newLines = this.tagMappers.reduce((acc, mapper) => { const mappedLine = mapper(line); if (mappedLine === line) { return acc; } return acc.concat([mappedLine]); }, [line]); newLines.forEach((newLine) => { for (let i2 = 0; i2 < this.customParsers.length; i2++) { if (this.customParsers[i2].call(this, newLine)) { return; } } if (newLine.indexOf("#EXT") !== 0) { this.trigger("data", { type: "comment", text: newLine.slice(1) }); return; } newLine = newLine.replace("\r", ""); match = /^#EXTM3U/.exec(newLine); if (match) { this.trigger("data", { type: "tag", tagType: "m3u" }); return; } match = /^#EXTINF:([0-9\.]*)?,?(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "inf" }; if (match[1]) { event2.duration = parseFloat(match[1]); } if (match[2]) { event2.title = match[2]; } this.trigger("data", event2); return; } match = /^#EXT-X-TARGETDURATION:([0-9.]*)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "targetduration" }; if (match[1]) { event2.duration = parseInt(match[1], 10); } this.trigger("data", event2); return; } match = /^#EXT-X-VERSION:([0-9.]*)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "version" }; if (match[1]) { event2.version = parseInt(match[1], 10); } this.trigger("data", event2); return; } match = /^#EXT-X-MEDIA-SEQUENCE:(\-?[0-9.]*)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "media-sequence" }; if (match[1]) { event2.number = parseInt(match[1], 10); } this.trigger("data", event2); return; } match = /^#EXT-X-DISCONTINUITY-SEQUENCE:(\-?[0-9.]*)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "discontinuity-sequence" }; if (match[1]) { event2.number = parseInt(match[1], 10); } this.trigger("data", event2); return; } match = /^#EXT-X-PLAYLIST-TYPE:(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "playlist-type" }; if (match[1]) { event2.playlistType = match[1]; } this.trigger("data", event2); return; } match = /^#EXT-X-BYTERANGE:(.*)?$/.exec(newLine); if (match) { event2 = _extends$2(parseByterange$1(match[1]), { type: "tag", tagType: "byterange" }); this.trigger("data", event2); return; } match = /^#EXT-X-ALLOW-CACHE:(YES|NO)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "allow-cache" }; if (match[1]) { event2.allowed = !/NO/.test(match[1]); } this.trigger("data", event2); return; } match = /^#EXT-X-MAP:(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "map" }; if (match[1]) { const attributes = parseAttributes$3(match[1]); if (attributes.URI) { event2.uri = attributes.URI; } if (attributes.BYTERANGE) { event2.byterange = parseByterange$1(attributes.BYTERANGE); } } this.trigger("data", event2); return; } match = /^#EXT-X-STREAM-INF:(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "stream-inf" }; if (match[1]) { event2.attributes = parseAttributes$3(match[1]); if (event2.attributes.RESOLUTION) { const split2 = event2.attributes.RESOLUTION.split("x"); const resolution = {}; if (split2[0]) { resolution.width = parseInt(split2[0], 10); } if (split2[1]) { resolution.height = parseInt(split2[1], 10); } event2.attributes.RESOLUTION = resolution; } if (event2.attributes.BANDWIDTH) { event2.attributes.BANDWIDTH = parseInt(event2.attributes.BANDWIDTH, 10); } if (event2.attributes["FRAME-RATE"]) { event2.attributes["FRAME-RATE"] = parseFloat(event2.attributes["FRAME-RATE"]); } if (event2.attributes["PROGRAM-ID"]) { event2.attributes["PROGRAM-ID"] = parseInt(event2.attributes["PROGRAM-ID"], 10); } } this.trigger("data", event2); return; } match = /^#EXT-X-MEDIA:(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "media" }; if (match[1]) { event2.attributes = parseAttributes$3(match[1]); } this.trigger("data", event2); return; } match = /^#EXT-X-ENDLIST/.exec(newLine); if (match) { this.trigger("data", { type: "tag", tagType: "endlist" }); return; } match = /^#EXT-X-DISCONTINUITY/.exec(newLine); if (match) { this.trigger("data", { type: "tag", tagType: "discontinuity" }); return; } match = /^#EXT-X-PROGRAM-DATE-TIME:(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "program-date-time" }; if (match[1]) { event2.dateTimeString = match[1]; event2.dateTimeObject = new Date(match[1]); } this.trigger("data", event2); return; } match = /^#EXT-X-KEY:(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "key" }; if (match[1]) { event2.attributes = parseAttributes$3(match[1]); if (event2.attributes.IV) { if (event2.attributes.IV.substring(0, 2).toLowerCase() === "0x") { event2.attributes.IV = event2.attributes.IV.substring(2); } event2.attributes.IV = event2.attributes.IV.match(/.{8}/g); event2.attributes.IV[0] = parseInt(event2.attributes.IV[0], 16); event2.attributes.IV[1] = parseInt(event2.attributes.IV[1], 16); event2.attributes.IV[2] = parseInt(event2.attributes.IV[2], 16); event2.attributes.IV[3] = parseInt(event2.attributes.IV[3], 16); event2.attributes.IV = new Uint32Array(event2.attributes.IV); } } this.trigger("data", event2); return; } match = /^#EXT-X-START:(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "start" }; if (match[1]) { event2.attributes = parseAttributes$3(match[1]); event2.attributes["TIME-OFFSET"] = parseFloat(event2.attributes["TIME-OFFSET"]); event2.attributes.PRECISE = /YES/.test(event2.attributes.PRECISE); } this.trigger("data", event2); return; } match = /^#EXT-X-CUE-OUT-CONT:(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "cue-out-cont" }; if (match[1]) { event2.data = match[1]; } else { event2.data = ""; } this.trigger("data", event2); return; } match = /^#EXT-X-CUE-OUT:(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "cue-out" }; if (match[1]) { event2.data = match[1]; } else { event2.data = ""; } this.trigger("data", event2); return; } match = /^#EXT-X-CUE-IN:(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "cue-in" }; if (match[1]) { event2.data = match[1]; } else { event2.data = ""; } this.trigger("data", event2); return; } match = /^#EXT-X-SKIP:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "skip" }; event2.attributes = parseAttributes$3(match[1]); if (event2.attributes.hasOwnProperty("SKIPPED-SEGMENTS")) { event2.attributes["SKIPPED-SEGMENTS"] = parseInt(event2.attributes["SKIPPED-SEGMENTS"], 10); } if (event2.attributes.hasOwnProperty("RECENTLY-REMOVED-DATERANGES")) { event2.attributes["RECENTLY-REMOVED-DATERANGES"] = event2.attributes["RECENTLY-REMOVED-DATERANGES"].split(TAB$1); } this.trigger("data", event2); return; } match = /^#EXT-X-PART:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "part" }; event2.attributes = parseAttributes$3(match[1]); ["DURATION"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseFloat(event2.attributes[key]); } }); ["INDEPENDENT", "GAP"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = /YES/.test(event2.attributes[key]); } }); if (event2.attributes.hasOwnProperty("BYTERANGE")) { event2.attributes.byterange = parseByterange$1(event2.attributes.BYTERANGE); } this.trigger("data", event2); return; } match = /^#EXT-X-SERVER-CONTROL:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "server-control" }; event2.attributes = parseAttributes$3(match[1]); ["CAN-SKIP-UNTIL", "PART-HOLD-BACK", "HOLD-BACK"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseFloat(event2.attributes[key]); } }); ["CAN-SKIP-DATERANGES", "CAN-BLOCK-RELOAD"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = /YES/.test(event2.attributes[key]); } }); this.trigger("data", event2); return; } match = /^#EXT-X-PART-INF:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "part-inf" }; event2.attributes = parseAttributes$3(match[1]); ["PART-TARGET"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseFloat(event2.attributes[key]); } }); this.trigger("data", event2); return; } match = /^#EXT-X-PRELOAD-HINT:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "preload-hint" }; event2.attributes = parseAttributes$3(match[1]); ["BYTERANGE-START", "BYTERANGE-LENGTH"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseInt(event2.attributes[key], 10); const subkey = key === "BYTERANGE-LENGTH" ? "length" : "offset"; event2.attributes.byterange = event2.attributes.byterange || {}; event2.attributes.byterange[subkey] = event2.attributes[key]; delete event2.attributes[key]; } }); this.trigger("data", event2); return; } match = /^#EXT-X-RENDITION-REPORT:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "rendition-report" }; event2.attributes = parseAttributes$3(match[1]); ["LAST-MSN", "LAST-PART"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseInt(event2.attributes[key], 10); } }); this.trigger("data", event2); return; } match = /^#EXT-X-DATERANGE:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "daterange" }; event2.attributes = parseAttributes$3(match[1]); ["ID", "CLASS"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = String(event2.attributes[key]); } }); ["START-DATE", "END-DATE"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = new Date(event2.attributes[key]); } }); ["DURATION", "PLANNED-DURATION"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseFloat(event2.attributes[key]); } }); ["END-ON-NEXT"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = /YES/i.test(event2.attributes[key]); } }); ["SCTE35-CMD", " SCTE35-OUT", "SCTE35-IN"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = event2.attributes[key].toString(16); } }); const clientAttributePattern = /^X-([A-Z]+-)+[A-Z]+$/; for (const key in event2.attributes) { if (!clientAttributePattern.test(key)) { continue; } const isHexaDecimal = /[0-9A-Fa-f]{6}/g.test(event2.attributes[key]); const isDecimalFloating = /^\d+(\.\d+)?$/.test(event2.attributes[key]); event2.attributes[key] = isHexaDecimal ? event2.attributes[key].toString(16) : isDecimalFloating ? parseFloat(event2.attributes[key]) : String(event2.attributes[key]); } this.trigger("data", event2); return; } this.trigger("data", { type: "tag", data: newLine.slice(4) }); }); } addParser({ expression, customType, dataParser, segment }) { if (typeof dataParser !== "function") { dataParser = (line) => line; } this.customParsers.push((line) => { const match = expression.exec(line); if (match) { this.trigger("data", { type: "custom", data: dataParser(line), customType, segment }); return true; } }); } addTagMapper({ expression, map }) { const mapFn = (line) => { if (expression.test(line)) { return map(line); } return line; }; this.tagMappers.push(mapFn); } } const camelCase$1 = (str) => str.toLowerCase().replace(/-(\w)/g, (a) => a[1].toUpperCase()); const camelCaseKeys$1 = function(attributes) { const result = {}; Object.keys(attributes).forEach(function(key) { result[camelCase$1(key)] = attributes[key]; }); return result; }; const setHoldBack$1 = function(manifest) { const { serverControl, targetDuration, partTargetDuration } = manifest; if (!serverControl) { return; } const tag = "#EXT-X-SERVER-CONTROL"; const hb = "holdBack"; const phb = "partHoldBack"; const minTargetDuration = targetDuration && targetDuration * 3; const minPartDuration = partTargetDuration && partTargetDuration * 2; if (targetDuration && !serverControl.hasOwnProperty(hb)) { serverControl[hb] = minTargetDuration; this.trigger("info", { message: `${tag} defaulting HOLD-BACK to targetDuration * 3 (${minTargetDuration}).` }); } if (minTargetDuration && serverControl[hb] < minTargetDuration) { this.trigger("warn", { message: `${tag} clamping HOLD-BACK (${serverControl[hb]}) to targetDuration * 3 (${minTargetDuration})` }); serverControl[hb] = minTargetDuration; } if (partTargetDuration && !serverControl.hasOwnProperty(phb)) { serverControl[phb] = partTargetDuration * 3; this.trigger("info", { message: `${tag} defaulting PART-HOLD-BACK to partTargetDuration * 3 (${serverControl[phb]}).` }); } if (partTargetDuration && serverControl[phb] < minPartDuration) { this.trigger("warn", { message: `${tag} clamping PART-HOLD-BACK (${serverControl[phb]}) to partTargetDuration * 2 (${minPartDuration}).` }); serverControl[phb] = minPartDuration; } }; class Parser$1 extends Stream$1 { constructor() { super(); this.lineStream = new LineStream$1(); this.parseStream = new ParseStream$1(); this.lineStream.pipe(this.parseStream); const self2 = this; const uris = []; let currentUri = {}; let currentMap; let key; let hasParts = false; const noop2 = function() { }; const defaultMediaGroups = { "AUDIO": {}, "VIDEO": {}, "CLOSED-CAPTIONS": {}, "SUBTITLES": {} }; const widevineUuid = "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"; let currentTimeline = 0; this.manifest = { allowCache: true, discontinuityStarts: [], segments: [] }; let lastByterangeEnd = 0; let lastPartByterangeEnd = 0; const daterangeTags = {}; this.on("end", () => { if (currentUri.uri || !currentUri.parts && !currentUri.preloadHints) { return; } if (!currentUri.map && currentMap) { currentUri.map = currentMap; } if (!currentUri.key && key) { currentUri.key = key; } if (!currentUri.timeline && typeof currentTimeline === "number") { currentUri.timeline = currentTimeline; } this.manifest.preloadSegment = currentUri; }); this.parseStream.on("data", function(entry) { let mediaGroup; let rendition; ({ tag() { ({ version() { if (entry.version) { this.manifest.version = entry.version; } }, "allow-cache"() { this.manifest.allowCache = entry.allowed; if (!("allowed" in entry)) { this.trigger("info", { message: "defaulting allowCache to YES" }); this.manifest.allowCache = true; } }, byterange() { const byterange = {}; if ("length" in entry) { currentUri.byterange = byterange; byterange.length = entry.length; if (!("offset" in entry)) { entry.offset = lastByterangeEnd; } } if ("offset" in entry) { currentUri.byterange = byterange; byterange.offset = entry.offset; } lastByterangeEnd = byterange.offset + byterange.length; }, endlist() { this.manifest.endList = true; }, inf() { if (!("mediaSequence" in this.manifest)) { this.manifest.mediaSequence = 0; this.trigger("info", { message: "defaulting media sequence to zero" }); } if (!("discontinuitySequence" in this.manifest)) { this.manifest.discontinuitySequence = 0; this.trigger("info", { message: "defaulting discontinuity sequence to zero" }); } if (entry.duration > 0) { currentUri.duration = entry.duration; } if (entry.duration === 0) { currentUri.duration = 0.01; this.trigger("info", { message: "updating zero segment duration to a small value" }); } this.manifest.segments = uris; }, key() { if (!entry.attributes) { this.trigger("warn", { message: "ignoring key declaration without attribute list" }); return; } if (entry.attributes.METHOD === "NONE") { key = null; return; } if (!entry.attributes.URI) { this.trigger("warn", { message: "ignoring key declaration without URI" }); return; } if (entry.attributes.KEYFORMAT === "com.apple.streamingkeydelivery") { this.manifest.contentProtection = this.manifest.contentProtection || {}; this.manifest.contentProtection["com.apple.fps.1_0"] = { attributes: entry.attributes }; return; } if (entry.attributes.KEYFORMAT === "com.microsoft.playready") { this.manifest.contentProtection = this.manifest.contentProtection || {}; this.manifest.contentProtection["com.microsoft.playready"] = { uri: entry.attributes.URI }; return; } if (entry.attributes.KEYFORMAT === widevineUuid) { const VALID_METHODS = ["SAMPLE-AES", "SAMPLE-AES-CTR", "SAMPLE-AES-CENC"]; if (VALID_METHODS.indexOf(entry.attributes.METHOD) === -1) { this.trigger("warn", { message: "invalid key method provided for Widevine" }); return; } if (entry.attributes.METHOD === "SAMPLE-AES-CENC") { this.trigger("warn", { message: "SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead" }); } if (entry.attributes.URI.substring(0, 23) !== "data:text/plain;base64,") { this.trigger("warn", { message: "invalid key URI provided for Widevine" }); return; } if (!(entry.attributes.KEYID && entry.attributes.KEYID.substring(0, 2) === "0x")) { this.trigger("warn", { message: "invalid key ID provided for Widevine" }); return; } this.manifest.contentProtection = this.manifest.contentProtection || {}; this.manifest.contentProtection["com.widevine.alpha"] = { attributes: { schemeIdUri: entry.attributes.KEYFORMAT, keyId: entry.attributes.KEYID.substring(2) }, pssh: decodeB64ToUint8Array$2(entry.attributes.URI.split(",")[1]) }; return; } if (!entry.attributes.METHOD) { this.trigger("warn", { message: "defaulting key method to AES-128" }); } key = { method: entry.attributes.METHOD || "AES-128", uri: entry.attributes.URI }; if (typeof entry.attributes.IV !== "undefined") { key.iv = entry.attributes.IV; } }, "media-sequence"() { if (!isFinite(entry.number)) { this.trigger("warn", { message: "ignoring invalid media sequence: " + entry.number }); return; } this.manifest.mediaSequence = entry.number; }, "discontinuity-sequence"() { if (!isFinite(entry.number)) { this.trigger("warn", { message: "ignoring invalid discontinuity sequence: " + entry.number }); return; } this.manifest.discontinuitySequence = entry.number; currentTimeline = entry.number; }, "playlist-type"() { if (!/VOD|EVENT/.test(entry.playlistType)) { this.trigger("warn", { message: "ignoring unknown playlist type: " + entry.playlist }); return; } this.manifest.playlistType = entry.playlistType; }, map() { currentMap = {}; if (entry.uri) { currentMap.uri = entry.uri; } if (entry.byterange) { currentMap.byterange = entry.byterange; } if (key) { currentMap.key = key; } }, "stream-inf"() { this.manifest.playlists = uris; this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups; if (!entry.attributes) { this.trigger("warn", { message: "ignoring empty stream-inf attributes" }); return; } if (!currentUri.attributes) { currentUri.attributes = {}; } _extends$2(currentUri.attributes, entry.attributes); }, media() { this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups; if (!(entry.attributes && entry.attributes.TYPE && entry.attributes["GROUP-ID"] && entry.attributes.NAME)) { this.trigger("warn", { message: "ignoring incomplete or missing media group" }); return; } const mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE]; mediaGroupType[entry.attributes["GROUP-ID"]] = mediaGroupType[entry.attributes["GROUP-ID"]] || {}; mediaGroup = mediaGroupType[entry.attributes["GROUP-ID"]]; rendition = { default: /yes/i.test(entry.attributes.DEFAULT) }; if (rendition.default) { rendition.autoselect = true; } else { rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT); } if (entry.attributes.LANGUAGE) { rendition.language = entry.attributes.LANGUAGE; } if (entry.attributes.URI) { rendition.uri = entry.attributes.URI; } if (entry.attributes["INSTREAM-ID"]) { rendition.instreamId = entry.attributes["INSTREAM-ID"]; } if (entry.attributes.CHARACTERISTICS) { rendition.characteristics = entry.attributes.CHARACTERISTICS; } if (entry.attributes.FORCED) { rendition.forced = /yes/i.test(entry.attributes.FORCED); } mediaGroup[entry.attributes.NAME] = rendition; }, discontinuity() { currentTimeline += 1; currentUri.discontinuity = true; this.manifest.discontinuityStarts.push(uris.length); }, "program-date-time"() { if (typeof this.manifest.dateTimeString === "undefined") { this.manifest.dateTimeString = entry.dateTimeString; this.manifest.dateTimeObject = entry.dateTimeObject; } currentUri.dateTimeString = entry.dateTimeString; currentUri.dateTimeObject = entry.dateTimeObject; }, targetduration() { if (!isFinite(entry.duration) || entry.duration < 0) { this.trigger("warn", { message: "ignoring invalid target duration: " + entry.duration }); return; } this.manifest.targetDuration = entry.duration; setHoldBack$1.call(this, this.manifest); }, start() { if (!entry.attributes || isNaN(entry.attributes["TIME-OFFSET"])) { this.trigger("warn", { message: "ignoring start declaration without appropriate attribute list" }); return; } this.manifest.start = { timeOffset: entry.attributes["TIME-OFFSET"], precise: entry.attributes.PRECISE }; }, "cue-out"() { currentUri.cueOut = entry.data; }, "cue-out-cont"() { currentUri.cueOutCont = entry.data; }, "cue-in"() { currentUri.cueIn = entry.data; }, "skip"() { this.manifest.skip = camelCaseKeys$1(entry.attributes); this.warnOnMissingAttributes_("#EXT-X-SKIP", entry.attributes, ["SKIPPED-SEGMENTS"]); }, "part"() { hasParts = true; const segmentIndex = this.manifest.segments.length; const part = camelCaseKeys$1(entry.attributes); currentUri.parts = currentUri.parts || []; currentUri.parts.push(part); if (part.byterange) { if (!part.byterange.hasOwnProperty("offset")) { part.byterange.offset = lastPartByterangeEnd; } lastPartByterangeEnd = part.byterange.offset + part.byterange.length; } const partIndex = currentUri.parts.length - 1; this.warnOnMissingAttributes_(`#EXT-X-PART #${partIndex} for segment #${segmentIndex}`, entry.attributes, ["URI", "DURATION"]); if (this.manifest.renditionReports) { this.manifest.renditionReports.forEach((r2, i2) => { if (!r2.hasOwnProperty("lastPart")) { this.trigger("warn", { message: `#EXT-X-RENDITION-REPORT #${i2} lacks required attribute(s): LAST-PART` }); } }); } }, "server-control"() { const attrs = this.manifest.serverControl = camelCaseKeys$1(entry.attributes); if (!attrs.hasOwnProperty("canBlockReload")) { attrs.canBlockReload = false; this.trigger("info", { message: "#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false" }); } setHoldBack$1.call(this, this.manifest); if (attrs.canSkipDateranges && !attrs.hasOwnProperty("canSkipUntil")) { this.trigger("warn", { message: "#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set" }); } }, "preload-hint"() { const segmentIndex = this.manifest.segments.length; const hint = camelCaseKeys$1(entry.attributes); const isPart = hint.type && hint.type === "PART"; currentUri.preloadHints = currentUri.preloadHints || []; currentUri.preloadHints.push(hint); if (hint.byterange) { if (!hint.byterange.hasOwnProperty("offset")) { hint.byterange.offset = isPart ? lastPartByterangeEnd : 0; if (isPart) { lastPartByterangeEnd = hint.byterange.offset + hint.byterange.length; } } } const index2 = currentUri.preloadHints.length - 1; this.warnOnMissingAttributes_(`#EXT-X-PRELOAD-HINT #${index2} for segment #${segmentIndex}`, entry.attributes, ["TYPE", "URI"]); if (!hint.type) { return; } for (let i2 = 0; i2 < currentUri.preloadHints.length - 1; i2++) { const otherHint = currentUri.preloadHints[i2]; if (!otherHint.type) { continue; } if (otherHint.type === hint.type) { this.trigger("warn", { message: `#EXT-X-PRELOAD-HINT #${index2} for segment #${segmentIndex} has the same TYPE ${hint.type} as preload hint #${i2}` }); } } }, "rendition-report"() { const report = camelCaseKeys$1(entry.attributes); this.manifest.renditionReports = this.manifest.renditionReports || []; this.manifest.renditionReports.push(report); const index2 = this.manifest.renditionReports.length - 1; const required = ["LAST-MSN", "URI"]; if (hasParts) { required.push("LAST-PART"); } this.warnOnMissingAttributes_(`#EXT-X-RENDITION-REPORT #${index2}`, entry.attributes, required); }, "part-inf"() { this.manifest.partInf = camelCaseKeys$1(entry.attributes); this.warnOnMissingAttributes_("#EXT-X-PART-INF", entry.attributes, ["PART-TARGET"]); if (this.manifest.partInf.partTarget) { this.manifest.partTargetDuration = this.manifest.partInf.partTarget; } setHoldBack$1.call(this, this.manifest); }, "daterange"() { this.manifest.daterange = this.manifest.daterange || []; this.manifest.daterange.push(camelCaseKeys$1(entry.attributes)); const index2 = this.manifest.daterange.length - 1; this.warnOnMissingAttributes_(`#EXT-X-DATERANGE #${index2}`, entry.attributes, ["ID", "START-DATE"]); const daterange = this.manifest.daterange[index2]; if (daterange.endDate && daterange.startDate && new Date(daterange.endDate) < new Date(daterange.startDate)) { this.trigger("warn", { message: "EXT-X-DATERANGE END-DATE must be equal to or later than the value of the START-DATE" }); } if (daterange.duration && daterange.duration < 0) { this.trigger("warn", { message: "EXT-X-DATERANGE DURATION must not be negative" }); } if (daterange.plannedDuration && daterange.plannedDuration < 0) { this.trigger("warn", { message: "EXT-X-DATERANGE PLANNED-DURATION must not be negative" }); } const endOnNextYes = !!daterange.endOnNext; if (endOnNextYes && !daterange.class) { this.trigger("warn", { message: "EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must have a CLASS attribute" }); } if (endOnNextYes && (daterange.duration || daterange.endDate)) { this.trigger("warn", { message: "EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must not contain DURATION or END-DATE attributes" }); } if (daterange.duration && daterange.endDate) { const startDate = daterange.startDate; const newDateInSeconds = startDate.setSeconds(startDate.getSeconds() + daterange.duration); this.manifest.daterange[index2].endDate = new Date(newDateInSeconds); } if (daterange && !this.manifest.dateTimeString) { this.trigger("warn", { message: "A playlist with EXT-X-DATERANGE tag must contain atleast one EXT-X-PROGRAM-DATE-TIME tag" }); } if (!daterangeTags[daterange.id]) { daterangeTags[daterange.id] = daterange; } else { for (const attribute in daterangeTags[daterange.id]) { if (daterangeTags[daterange.id][attribute] !== daterange[attribute]) { this.trigger("warn", { message: "EXT-X-DATERANGE tags with the same ID in a playlist must have the same attributes and same attribute values" }); break; } } } } }[entry.tagType] || noop2).call(self2); }, uri() { currentUri.uri = entry.uri; uris.push(currentUri); if (this.manifest.targetDuration && !("duration" in currentUri)) { this.trigger("warn", { message: "defaulting segment duration to the target duration" }); currentUri.duration = this.manifest.targetDuration; } if (key) { currentUri.key = key; } currentUri.timeline = currentTimeline; if (currentMap) { currentUri.map = currentMap; } lastPartByterangeEnd = 0; currentUri = {}; }, comment() { }, custom() { if (entry.segment) { currentUri.custom = currentUri.custom || {}; currentUri.custom[entry.customType] = entry.data; } else { this.manifest.custom = this.manifest.custom || {}; this.manifest.custom[entry.customType] = entry.data; } } })[entry.type].call(self2); }); } warnOnMissingAttributes_(identifier, attributes, required) { const missing = []; required.forEach(function(key) { if (!attributes.hasOwnProperty(key)) { missing.push(key); } }); if (missing.length) { this.trigger("warn", { message: `${identifier} lacks required attribute(s): ${missing.join(", ")}` }); } } push(chunk) { this.lineStream.push(chunk); } end() { this.lineStream.push("\n"); this.trigger("end"); } addParser(options2) { this.parseStream.addParser(options2); } addTagMapper(options2) { this.parseStream.addTagMapper(options2); } } var regexs$1 = { mp4: /^(av0?1|avc0?[1234]|vp0?9|flac|opus|mp3|mp4a|mp4v|stpp.ttml.im1t)/, webm: /^(vp0?[89]|av0?1|opus|vorbis)/, ogg: /^(vp0?[89]|theora|flac|opus|vorbis)/, video: /^(av0?1|avc0?[1234]|vp0?[89]|hvc1|hev1|theora|mp4v)/, audio: /^(mp4a|flac|vorbis|opus|ac-[34]|ec-3|alac|mp3|speex|aac)/, text: /^(stpp.ttml.im1t)/, muxerVideo: /^(avc0?1)/, muxerAudio: /^(mp4a)/, muxerText: /a^/ }; var mediaTypes$1 = ["video", "audio", "text"]; var upperMediaTypes$1 = ["Video", "Audio", "Text"]; var translateLegacyCodec$1 = function translateLegacyCodec(codec) { if (!codec) { return codec; } return codec.replace(/avc1\.(\d+)\.(\d+)/i, function(orig, profile, avcLevel) { var profileHex = ("00" + Number(profile).toString(16)).slice(-2); var avcLevelHex = ("00" + Number(avcLevel).toString(16)).slice(-2); return "avc1." + profileHex + "00" + avcLevelHex; }); }; var parseCodecs$1 = function parseCodecs(codecString) { if (codecString === void 0) { codecString = ""; } var codecs = codecString.split(","); var result = []; codecs.forEach(function(codec) { codec = codec.trim(); var codecType; mediaTypes$1.forEach(function(name) { var match = regexs$1[name].exec(codec.toLowerCase()); if (!match || match.length <= 1) { return; } codecType = name; var type2 = codec.substring(0, match[1].length); var details = codec.replace(type2, ""); result.push({ type: type2, details, mediaType: name }); }); if (!codecType) { result.push({ type: codec, details: "", mediaType: "unknown" }); } }); return result; }; var codecsFromDefault$1 = function codecsFromDefault(master, audioGroupId) { if (!master.mediaGroups.AUDIO || !audioGroupId) { return null; } var audioGroup = master.mediaGroups.AUDIO[audioGroupId]; if (!audioGroup) { return null; } for (var name in audioGroup) { var audioType = audioGroup[name]; if (audioType.default && audioType.playlists) { return parseCodecs$1(audioType.playlists[0].attributes.CODECS); } } return null; }; var isAudioCodec$1 = function isAudioCodec(codec) { if (codec === void 0) { codec = ""; } return regexs$1.audio.test(codec.trim().toLowerCase()); }; var isTextCodec$1 = function isTextCodec(codec) { if (codec === void 0) { codec = ""; } return regexs$1.text.test(codec.trim().toLowerCase()); }; var getMimeForCodec$1 = function getMimeForCodec(codecString) { if (!codecString || typeof codecString !== "string") { return; } var codecs = codecString.toLowerCase().split(",").map(function(c) { return translateLegacyCodec$1(c.trim()); }); var type2 = "video"; if (codecs.length === 1 && isAudioCodec$1(codecs[0])) { type2 = "audio"; } else if (codecs.length === 1 && isTextCodec$1(codecs[0])) { type2 = "application"; } var container = "mp4"; if (codecs.every(function(c) { return regexs$1.mp4.test(c); })) { container = "mp4"; } else if (codecs.every(function(c) { return regexs$1.webm.test(c); })) { container = "webm"; } else if (codecs.every(function(c) { return regexs$1.ogg.test(c); })) { container = "ogg"; } return type2 + "/" + container + ';codecs="' + codecString + '"'; }; var browserSupportsCodec$1 = function browserSupportsCodec(codecString) { if (codecString === void 0) { codecString = ""; } return window_1.MediaSource && window_1.MediaSource.isTypeSupported && window_1.MediaSource.isTypeSupported(getMimeForCodec$1(codecString)) || false; }; var muxerSupportsCodec$1 = function muxerSupportsCodec(codecString) { if (codecString === void 0) { codecString = ""; } return codecString.toLowerCase().split(",").every(function(codec) { codec = codec.trim(); for (var i2 = 0; i2 < upperMediaTypes$1.length; i2++) { var type2 = upperMediaTypes$1[i2]; if (regexs$1["muxer" + type2].test(codec)) { return true; } } return false; }); }; var DEFAULT_AUDIO_CODEC$1 = "mp4a.40.2"; var DEFAULT_VIDEO_CODEC$1 = "avc1.4d400d"; var MPEGURL_REGEX$1 = /^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i; var DASH_REGEX$1 = /^application\/dash\+xml/i; var simpleTypeFromSourceType$1 = function simpleTypeFromSourceType(type2) { if (MPEGURL_REGEX$1.test(type2)) { return "hls"; } if (DASH_REGEX$1.test(type2)) { return "dash"; } if (type2 === "application/vnd.videojs.vhs+json") { return "vhs-json"; } return null; }; var countBits$1 = function countBits(x) { return x.toString(2).length; }; var countBytes$1 = function countBytes(x) { return Math.ceil(countBits$1(x) / 8); }; var isArrayBufferView$1 = function isArrayBufferView(obj) { if (ArrayBuffer.isView === "function") { return ArrayBuffer.isView(obj); } return obj && obj.buffer instanceof ArrayBuffer; }; var isTypedArray$1 = function isTypedArray(obj) { return isArrayBufferView$1(obj); }; var toUint8$1 = function toUint8(bytes) { if (bytes instanceof Uint8Array) { return bytes; } if (!Array.isArray(bytes) && !isTypedArray$1(bytes) && !(bytes instanceof ArrayBuffer)) { if (typeof bytes !== "number" || typeof bytes === "number" && bytes !== bytes) { bytes = 0; } else { bytes = [bytes]; } } return new Uint8Array(bytes && bytes.buffer || bytes, bytes && bytes.byteOffset || 0, bytes && bytes.byteLength || 0); }; var BigInt$1 = window_1.BigInt || Number; var BYTE_TABLE$1 = [BigInt$1("0x1"), BigInt$1("0x100"), BigInt$1("0x10000"), BigInt$1("0x1000000"), BigInt$1("0x100000000"), BigInt$1("0x10000000000"), BigInt$1("0x1000000000000"), BigInt$1("0x100000000000000"), BigInt$1("0x10000000000000000")]; (function() { var a = new Uint16Array([65484]); var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength); if (b[0] === 255) { return "big"; } if (b[0] === 204) { return "little"; } return "unknown"; })(); var bytesToNumber$1 = function bytesToNumber(bytes, _temp) { var _ref = _temp === void 0 ? {} : _temp, _ref$signed = _ref.signed, signed = _ref$signed === void 0 ? false : _ref$signed, _ref$le = _ref.le, le = _ref$le === void 0 ? false : _ref$le; bytes = toUint8$1(bytes); var fn2 = le ? "reduce" : "reduceRight"; var obj = bytes[fn2] ? bytes[fn2] : Array.prototype[fn2]; var number = obj.call(bytes, function(total, byte, i2) { var exponent = le ? i2 : Math.abs(i2 + 1 - bytes.length); return total + BigInt$1(byte) * BYTE_TABLE$1[exponent]; }, BigInt$1(0)); if (signed) { var max2 = BYTE_TABLE$1[bytes.length] / BigInt$1(2) - BigInt$1(1); number = BigInt$1(number); if (number > max2) { number -= max2; number -= max2; number -= BigInt$1(2); } } return Number(number); }; var numberToBytes$1 = function numberToBytes(number, _temp2) { var _ref2 = _temp2 === void 0 ? {} : _temp2, _ref2$le = _ref2.le, le = _ref2$le === void 0 ? false : _ref2$le; if (typeof number !== "bigint" && typeof number !== "number" || typeof number === "number" && number !== number) { number = 0; } number = BigInt$1(number); var byteCount = countBytes$1(number); var bytes = new Uint8Array(new ArrayBuffer(byteCount)); for (var i2 = 0; i2 < byteCount; i2++) { var byteIndex = le ? i2 : Math.abs(i2 + 1 - bytes.length); bytes[byteIndex] = Number(number / BYTE_TABLE$1[i2] & BigInt$1(255)); if (number < 0) { bytes[byteIndex] = Math.abs(~bytes[byteIndex]); bytes[byteIndex] -= i2 === 0 ? 1 : 2; } } return bytes; }; var stringToBytes$1 = function stringToBytes(string, stringIsBytes) { if (typeof string !== "string" && string && typeof string.toString === "function") { string = string.toString(); } if (typeof string !== "string") { return new Uint8Array(); } if (!stringIsBytes) { string = unescape(encodeURIComponent(string)); } var view = new Uint8Array(string.length); for (var i2 = 0; i2 < string.length; i2++) { view[i2] = string.charCodeAt(i2); } return view; }; var concatTypedArrays$1 = function concatTypedArrays() { for (var _len = arguments.length, buffers = new Array(_len), _key = 0; _key < _len; _key++) { buffers[_key] = arguments[_key]; } buffers = buffers.filter(function(b) { return b && (b.byteLength || b.length) && typeof b !== "string"; }); if (buffers.length <= 1) { return toUint8$1(buffers[0]); } var totalLen = buffers.reduce(function(total, buf, i2) { return total + (buf.byteLength || buf.length); }, 0); var tempBuffer = new Uint8Array(totalLen); var offset = 0; buffers.forEach(function(buf) { buf = toUint8$1(buf); tempBuffer.set(buf, offset); offset += buf.byteLength; }); return tempBuffer; }; var bytesMatch$1 = function bytesMatch(a, b, _temp3) { var _ref3 = _temp3 === void 0 ? {} : _temp3, _ref3$offset = _ref3.offset, offset = _ref3$offset === void 0 ? 0 : _ref3$offset, _ref3$mask = _ref3.mask, mask = _ref3$mask === void 0 ? [] : _ref3$mask; a = toUint8$1(a); b = toUint8$1(b); var fn2 = b.every ? b.every : Array.prototype.every; return b.length && a.length - offset >= b.length && fn2.call(b, function(bByte, i2) { var aByte = mask[i2] ? mask[i2] & a[offset + i2] : a[offset + i2]; return bByte === aByte; }); }; var DEFAULT_LOCATION$1 = "http://example.com"; var resolveUrl$3 = function resolveUrl2(baseUrl, relativeUrl) { if (/^[a-z]+:/i.test(relativeUrl)) { return relativeUrl; } if (/^data:/.test(baseUrl)) { baseUrl = window_1.location && window_1.location.href || ""; } var nativeURL = typeof window_1.URL === "function"; var protocolLess = /^\/\//.test(baseUrl); var removeLocation = !window_1.location && !/\/\//i.test(baseUrl); if (nativeURL) { baseUrl = new window_1.URL(baseUrl, window_1.location || DEFAULT_LOCATION$1); } else if (!/\/\//i.test(baseUrl)) { baseUrl = URLToolkit.buildAbsoluteURL(window_1.location && window_1.location.href || "", baseUrl); } if (nativeURL) { var newUrl = new URL(relativeUrl, baseUrl); if (removeLocation) { return newUrl.href.slice(DEFAULT_LOCATION$1.length); } else if (protocolLess) { return newUrl.href.slice(newUrl.protocol.length); } return newUrl.href; } return URLToolkit.buildAbsoluteURL(baseUrl, relativeUrl); }; var forEachMediaGroup$3 = function forEachMediaGroup(master, groups, callback2) { groups.forEach(function(mediaType) { for (var groupKey in master.mediaGroups[mediaType]) { for (var labelKey in master.mediaGroups[mediaType][groupKey]) { var mediaProperties = master.mediaGroups[mediaType][groupKey][labelKey]; callback2(mediaProperties, mediaType, groupKey, labelKey); } } }); }; var atob$1 = function atob2(s) { return window_1.atob ? window_1.atob(s) : Buffer.from(s, "base64").toString("binary"); }; function decodeB64ToUint8Array$1(b64Text) { var decodedString = atob$1(b64Text); var array = new Uint8Array(decodedString.length); for (var i2 = 0; i2 < decodedString.length; i2++) { array[i2] = decodedString.charCodeAt(i2); } return array; } var dom$1 = {}; var conventions$2 = {}; function find$1(list, predicate, ac) { if (ac === void 0) { ac = Array.prototype; } if (list && typeof ac.find === "function") { return ac.find.call(list, predicate); } for (var i2 = 0; i2 < list.length; i2++) { if (Object.prototype.hasOwnProperty.call(list, i2)) { var item = list[i2]; if (predicate.call(void 0, item, i2, list)) { return item; } } } } function freeze(object, oc) { if (oc === void 0) { oc = Object; } return oc && typeof oc.freeze === "function" ? oc.freeze(object) : object; } function assign$1(target, source) { if (target === null || typeof target !== "object") { throw new TypeError("target is not an object"); } for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } return target; } var MIME_TYPE = freeze({ HTML: "text/html", isHTML: function(value) { return value === MIME_TYPE.HTML; }, XML_APPLICATION: "application/xml", XML_TEXT: "text/xml", XML_XHTML_APPLICATION: "application/xhtml+xml", XML_SVG_IMAGE: "image/svg+xml" }); var NAMESPACE$3 = freeze({ HTML: "http://www.w3.org/1999/xhtml", isHTML: function(uri) { return uri === NAMESPACE$3.HTML; }, SVG: "http://www.w3.org/2000/svg", XML: "http://www.w3.org/XML/1998/namespace", XMLNS: "http://www.w3.org/2000/xmlns/" }); conventions$2.assign = assign$1; conventions$2.find = find$1; conventions$2.freeze = freeze; conventions$2.MIME_TYPE = MIME_TYPE; conventions$2.NAMESPACE = NAMESPACE$3; var conventions$1 = conventions$2; var find = conventions$1.find; var NAMESPACE$2 = conventions$1.NAMESPACE; function notEmptyString(input) { return input !== ""; } function splitOnASCIIWhitespace(input) { return input ? input.split(/[\t\n\f\r ]+/).filter(notEmptyString) : []; } function orderedSetReducer(current, element) { if (!current.hasOwnProperty(element)) { current[element] = true; } return current; } function toOrderedSet(input) { if (!input) return []; var list = splitOnASCIIWhitespace(input); return Object.keys(list.reduce(orderedSetReducer, {})); } function arrayIncludes(list) { return function(element) { return list && list.indexOf(element) !== -1; }; } function copy(src, dest) { for (var p in src) { if (Object.prototype.hasOwnProperty.call(src, p)) { dest[p] = src[p]; } } } function _extends(Class, Super) { var pt2 = Class.prototype; if (!(pt2 instanceof Super)) { let t2 = function() { }; t2.prototype = Super.prototype; t2 = new t2(); copy(pt2, t2); Class.prototype = pt2 = t2; } if (pt2.constructor != Class) { if (typeof Class != "function") { console.error("unknown Class:" + Class); } pt2.constructor = Class; } } var NodeType = {}; var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; var TEXT_NODE = NodeType.TEXT_NODE = 3; var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; var ENTITY_NODE = NodeType.ENTITY_NODE = 6; var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; var COMMENT_NODE = NodeType.COMMENT_NODE = 8; var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; var NOTATION_NODE = NodeType.NOTATION_NODE = 12; var ExceptionCode = {}; var ExceptionMessage = {}; ExceptionCode.INDEX_SIZE_ERR = (ExceptionMessage[1] = "Index size error", 1); ExceptionCode.DOMSTRING_SIZE_ERR = (ExceptionMessage[2] = "DOMString size error", 2); var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = (ExceptionMessage[3] = "Hierarchy request error", 3); ExceptionCode.WRONG_DOCUMENT_ERR = (ExceptionMessage[4] = "Wrong document", 4); ExceptionCode.INVALID_CHARACTER_ERR = (ExceptionMessage[5] = "Invalid character", 5); ExceptionCode.NO_DATA_ALLOWED_ERR = (ExceptionMessage[6] = "No data allowed", 6); ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = (ExceptionMessage[7] = "No modification allowed", 7); var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = (ExceptionMessage[8] = "Not found", 8); ExceptionCode.NOT_SUPPORTED_ERR = (ExceptionMessage[9] = "Not supported", 9); var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = (ExceptionMessage[10] = "Attribute in use", 10); ExceptionCode.INVALID_STATE_ERR = (ExceptionMessage[11] = "Invalid state", 11); ExceptionCode.SYNTAX_ERR = (ExceptionMessage[12] = "Syntax error", 12); ExceptionCode.INVALID_MODIFICATION_ERR = (ExceptionMessage[13] = "Invalid modification", 13); ExceptionCode.NAMESPACE_ERR = (ExceptionMessage[14] = "Invalid namespace", 14); ExceptionCode.INVALID_ACCESS_ERR = (ExceptionMessage[15] = "Invalid access", 15); function DOMException(code, message) { if (message instanceof Error) { var error = message; } else { error = this; Error.call(this, ExceptionMessage[code]); this.message = ExceptionMessage[code]; if (Error.captureStackTrace) Error.captureStackTrace(this, DOMException); } error.code = code; if (message) this.message = this.message + ": " + message; return error; } DOMException.prototype = Error.prototype; copy(ExceptionCode, DOMException); function NodeList() { } NodeList.prototype = { length: 0, item: function(index2) { return this[index2] || null; }, toString: function(isHTML, nodeFilter) { for (var buf = [], i2 = 0; i2 < this.length; i2++) { serializeToString(this[i2], buf, isHTML, nodeFilter); } return buf.join(""); }, filter: function(predicate) { return Array.prototype.filter.call(this, predicate); }, indexOf: function(item) { return Array.prototype.indexOf.call(this, item); } }; function LiveNodeList(node, refresh) { this._node = node; this._refresh = refresh; _updateLiveList(this); } function _updateLiveList(list) { var inc = list._node._inc || list._node.ownerDocument._inc; if (list._inc != inc) { var ls = list._refresh(list._node); __set__(list, "length", ls.length); copy(ls, list); list._inc = inc; } } LiveNodeList.prototype.item = function(i2) { _updateLiveList(this); return this[i2]; }; _extends(LiveNodeList, NodeList); function NamedNodeMap() { } function _findNodeIndex(list, node) { var i2 = list.length; while (i2--) { if (list[i2] === node) { return i2; } } } function _addNamedNode(el, list, newAttr, oldAttr) { if (oldAttr) { list[_findNodeIndex(list, oldAttr)] = newAttr; } else { list[list.length++] = newAttr; } if (el) { newAttr.ownerElement = el; var doc = el.ownerDocument; if (doc) { oldAttr && _onRemoveAttribute(doc, el, oldAttr); _onAddAttribute(doc, el, newAttr); } } } function _removeNamedNode(el, list, attr) { var i2 = _findNodeIndex(list, attr); if (i2 >= 0) { var lastIndex = list.length - 1; while (i2 < lastIndex) { list[i2] = list[++i2]; } list.length = lastIndex; if (el) { var doc = el.ownerDocument; if (doc) { _onRemoveAttribute(doc, el, attr); attr.ownerElement = null; } } } else { throw new DOMException(NOT_FOUND_ERR, new Error(el.tagName + "@" + attr)); } } NamedNodeMap.prototype = { length: 0, item: NodeList.prototype.item, getNamedItem: function(key) { var i2 = this.length; while (i2--) { var attr = this[i2]; if (attr.nodeName == key) { return attr; } } }, setNamedItem: function(attr) { var el = attr.ownerElement; if (el && el != this._ownerElement) { throw new DOMException(INUSE_ATTRIBUTE_ERR); } var oldAttr = this.getNamedItem(attr.nodeName); _addNamedNode(this._ownerElement, this, attr, oldAttr); return oldAttr; }, setNamedItemNS: function(attr) { var el = attr.ownerElement, oldAttr; if (el && el != this._ownerElement) { throw new DOMException(INUSE_ATTRIBUTE_ERR); } oldAttr = this.getNamedItemNS(attr.namespaceURI, attr.localName); _addNamedNode(this._ownerElement, this, attr, oldAttr); return oldAttr; }, removeNamedItem: function(key) { var attr = this.getNamedItem(key); _removeNamedNode(this._ownerElement, this, attr); return attr; }, removeNamedItemNS: function(namespaceURI, localName) { var attr = this.getNamedItemNS(namespaceURI, localName); _removeNamedNode(this._ownerElement, this, attr); return attr; }, getNamedItemNS: function(namespaceURI, localName) { var i2 = this.length; while (i2--) { var node = this[i2]; if (node.localName == localName && node.namespaceURI == namespaceURI) { return node; } } return null; } }; function DOMImplementation$1() { } DOMImplementation$1.prototype = { hasFeature: function(feature2, version2) { return true; }, createDocument: function(namespaceURI, qualifiedName, doctype) { var doc = new Document(); doc.implementation = this; doc.childNodes = new NodeList(); doc.doctype = doctype || null; if (doctype) { doc.appendChild(doctype); } if (qualifiedName) { var root2 = doc.createElementNS(namespaceURI, qualifiedName); doc.appendChild(root2); } return doc; }, createDocumentType: function(qualifiedName, publicId, systemId) { var node = new DocumentType(); node.name = qualifiedName; node.nodeName = qualifiedName; node.publicId = publicId || ""; node.systemId = systemId || ""; return node; } }; function Node() { } Node.prototype = { firstChild: null, lastChild: null, previousSibling: null, nextSibling: null, attributes: null, parentNode: null, childNodes: null, ownerDocument: null, nodeValue: null, namespaceURI: null, prefix: null, localName: null, insertBefore: function(newChild, refChild) { return _insertBefore(this, newChild, refChild); }, replaceChild: function(newChild, oldChild) { _insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument); if (oldChild) { this.removeChild(oldChild); } }, removeChild: function(oldChild) { return _removeChild(this, oldChild); }, appendChild: function(newChild) { return this.insertBefore(newChild, null); }, hasChildNodes: function() { return this.firstChild != null; }, cloneNode: function(deep) { return cloneNode(this.ownerDocument || this, this, deep); }, normalize: function() { var child = this.firstChild; while (child) { var next = child.nextSibling; if (next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE) { this.removeChild(next); child.appendData(next.data); } else { child.normalize(); child = next; } } }, isSupported: function(feature2, version2) { return this.ownerDocument.implementation.hasFeature(feature2, version2); }, hasAttributes: function() { return this.attributes.length > 0; }, lookupPrefix: function(namespaceURI) { var el = this; while (el) { var map = el._nsMap; if (map) { for (var n in map) { if (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) { return n; } } } el = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode; } return null; }, lookupNamespaceURI: function(prefix) { var el = this; while (el) { var map = el._nsMap; if (map) { if (Object.prototype.hasOwnProperty.call(map, prefix)) { return map[prefix]; } } el = el.nodeType == ATTRIBUTE_NODE ? el.ownerDocument : el.parentNode; } return null; }, isDefaultNamespace: function(namespaceURI) { var prefix = this.lookupPrefix(namespaceURI); return prefix == null; } }; function _xmlEncoder(c) { return c == "<" && "<" || c == ">" && ">" || c == "&" && "&" || c == '"' && """ || "&#" + c.charCodeAt() + ";"; } copy(NodeType, Node); copy(NodeType, Node.prototype); function _visitNode(node, callback2) { if (callback2(node)) { return true; } if (node = node.firstChild) { do { if (_visitNode(node, callback2)) { return true; } } while (node = node.nextSibling); } } function Document() { this.ownerDocument = this; } function _onAddAttribute(doc, el, newAttr) { doc && doc._inc++; var ns = newAttr.namespaceURI; if (ns === NAMESPACE$2.XMLNS) { el._nsMap[newAttr.prefix ? newAttr.localName : ""] = newAttr.value; } } function _onRemoveAttribute(doc, el, newAttr, remove2) { doc && doc._inc++; var ns = newAttr.namespaceURI; if (ns === NAMESPACE$2.XMLNS) { delete el._nsMap[newAttr.prefix ? newAttr.localName : ""]; } } function _onUpdateChild(doc, el, newChild) { if (doc && doc._inc) { doc._inc++; var cs = el.childNodes; if (newChild) { cs[cs.length++] = newChild; } else { var child = el.firstChild; var i2 = 0; while (child) { cs[i2++] = child; child = child.nextSibling; } cs.length = i2; delete cs[cs.length]; } } } function _removeChild(parentNode, child) { var previous = child.previousSibling; var next = child.nextSibling; if (previous) { previous.nextSibling = next; } else { parentNode.firstChild = next; } if (next) { next.previousSibling = previous; } else { parentNode.lastChild = previous; } child.parentNode = null; child.previousSibling = null; child.nextSibling = null; _onUpdateChild(parentNode.ownerDocument, parentNode); return child; } function hasValidParentNodeType(node) { return node && (node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE); } function hasInsertableNodeType(node) { return node && (isElementNode(node) || isTextNode$2(node) || isDocTypeNode(node) || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.COMMENT_NODE || node.nodeType === Node.PROCESSING_INSTRUCTION_NODE); } function isDocTypeNode(node) { return node && node.nodeType === Node.DOCUMENT_TYPE_NODE; } function isElementNode(node) { return node && node.nodeType === Node.ELEMENT_NODE; } function isTextNode$2(node) { return node && node.nodeType === Node.TEXT_NODE; } function isElementInsertionPossible(doc, child) { var parentChildNodes = doc.childNodes || []; if (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) { return false; } var docTypeNode = find(parentChildNodes, isDocTypeNode); return !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child)); } function isElementReplacementPossible(doc, child) { var parentChildNodes = doc.childNodes || []; function hasElementChildThatIsNotChild(node) { return isElementNode(node) && node !== child; } if (find(parentChildNodes, hasElementChildThatIsNotChild)) { return false; } var docTypeNode = find(parentChildNodes, isDocTypeNode); return !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child)); } function assertPreInsertionValidity1to5(parent, node, child) { if (!hasValidParentNodeType(parent)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Unexpected parent node type " + parent.nodeType); } if (child && child.parentNode !== parent) { throw new DOMException(NOT_FOUND_ERR, "child not in parent"); } if (!hasInsertableNodeType(node) || isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE) { throw new DOMException( HIERARCHY_REQUEST_ERR, "Unexpected node type " + node.nodeType + " for parent node type " + parent.nodeType ); } } function assertPreInsertionValidityInDocument(parent, node, child) { var parentChildNodes = parent.childNodes || []; var nodeChildNodes = node.childNodes || []; if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { var nodeChildElements = nodeChildNodes.filter(isElementNode); if (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode$2)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "More than one element or text in fragment"); } if (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Element in fragment can not be inserted before doctype"); } } if (isElementNode(node)) { if (!isElementInsertionPossible(parent, child)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Only one element can be added and only after doctype"); } } if (isDocTypeNode(node)) { if (find(parentChildNodes, isDocTypeNode)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Only one doctype is allowed"); } var parentElementChild = find(parentChildNodes, isElementNode); if (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Doctype can only be inserted before an element"); } if (!child && parentElementChild) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Doctype can not be appended since element is present"); } } } function assertPreReplacementValidityInDocument(parent, node, child) { var parentChildNodes = parent.childNodes || []; var nodeChildNodes = node.childNodes || []; if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { var nodeChildElements = nodeChildNodes.filter(isElementNode); if (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode$2)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "More than one element or text in fragment"); } if (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Element in fragment can not be inserted before doctype"); } } if (isElementNode(node)) { if (!isElementReplacementPossible(parent, child)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Only one element can be added and only after doctype"); } } if (isDocTypeNode(node)) { let hasDoctypeChildThatIsNotChild = function(node2) { return isDocTypeNode(node2) && node2 !== child; }; if (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Only one doctype is allowed"); } var parentElementChild = find(parentChildNodes, isElementNode); if (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) { throw new DOMException(HIERARCHY_REQUEST_ERR, "Doctype can only be inserted before an element"); } } } function _insertBefore(parent, node, child, _inDocumentAssertion) { assertPreInsertionValidity1to5(parent, node, child); if (parent.nodeType === Node.DOCUMENT_NODE) { (_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child); } var cp = node.parentNode; if (cp) { cp.removeChild(node); } if (node.nodeType === DOCUMENT_FRAGMENT_NODE) { var newFirst = node.firstChild; if (newFirst == null) { return node; } var newLast = node.lastChild; } else { newFirst = newLast = node; } var pre = child ? child.previousSibling : parent.lastChild; newFirst.previousSibling = pre; newLast.nextSibling = child; if (pre) { pre.nextSibling = newFirst; } else { parent.firstChild = newFirst; } if (child == null) { parent.lastChild = newLast; } else { child.previousSibling = newLast; } do { newFirst.parentNode = parent; } while (newFirst !== newLast && (newFirst = newFirst.nextSibling)); _onUpdateChild(parent.ownerDocument || parent, parent); if (node.nodeType == DOCUMENT_FRAGMENT_NODE) { node.firstChild = node.lastChild = null; } return node; } function _appendSingleChild(parentNode, newChild) { if (newChild.parentNode) { newChild.parentNode.removeChild(newChild); } newChild.parentNode = parentNode; newChild.previousSibling = parentNode.lastChild; newChild.nextSibling = null; if (newChild.previousSibling) { newChild.previousSibling.nextSibling = newChild; } else { parentNode.firstChild = newChild; } parentNode.lastChild = newChild; _onUpdateChild(parentNode.ownerDocument, parentNode, newChild); return newChild; } Document.prototype = { nodeName: "#document", nodeType: DOCUMENT_NODE, doctype: null, documentElement: null, _inc: 1, insertBefore: function(newChild, refChild) { if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { var child = newChild.firstChild; while (child) { var next = child.nextSibling; this.insertBefore(child, refChild); child = next; } return newChild; } _insertBefore(this, newChild, refChild); newChild.ownerDocument = this; if (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) { this.documentElement = newChild; } return newChild; }, removeChild: function(oldChild) { if (this.documentElement == oldChild) { this.documentElement = null; } return _removeChild(this, oldChild); }, replaceChild: function(newChild, oldChild) { _insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument); newChild.ownerDocument = this; if (oldChild) { this.removeChild(oldChild); } if (isElementNode(newChild)) { this.documentElement = newChild; } }, importNode: function(importedNode, deep) { return importNode(this, importedNode, deep); }, getElementById: function(id) { var rtv = null; _visitNode(this.documentElement, function(node) { if (node.nodeType == ELEMENT_NODE) { if (node.getAttribute("id") == id) { rtv = node; return true; } } }); return rtv; }, getElementsByClassName: function(classNames) { var classNamesSet = toOrderedSet(classNames); return new LiveNodeList(this, function(base2) { var ls = []; if (classNamesSet.length > 0) { _visitNode(base2.documentElement, function(node) { if (node !== base2 && node.nodeType === ELEMENT_NODE) { var nodeClassNames = node.getAttribute("class"); if (nodeClassNames) { var matches = classNames === nodeClassNames; if (!matches) { var nodeClassNamesSet = toOrderedSet(nodeClassNames); matches = classNamesSet.every(arrayIncludes(nodeClassNamesSet)); } if (matches) { ls.push(node); } } } }); } return ls; }); }, createElement: function(tagName) { var node = new Element$1(); node.ownerDocument = this; node.nodeName = tagName; node.tagName = tagName; node.localName = tagName; node.childNodes = new NodeList(); var attrs = node.attributes = new NamedNodeMap(); attrs._ownerElement = node; return node; }, createDocumentFragment: function() { var node = new DocumentFragment(); node.ownerDocument = this; node.childNodes = new NodeList(); return node; }, createTextNode: function(data) { var node = new Text(); node.ownerDocument = this; node.appendData(data); return node; }, createComment: function(data) { var node = new Comment(); node.ownerDocument = this; node.appendData(data); return node; }, createCDATASection: function(data) { var node = new CDATASection(); node.ownerDocument = this; node.appendData(data); return node; }, createProcessingInstruction: function(target, data) { var node = new ProcessingInstruction(); node.ownerDocument = this; node.tagName = node.target = target; node.nodeValue = node.data = data; return node; }, createAttribute: function(name) { var node = new Attr(); node.ownerDocument = this; node.name = name; node.nodeName = name; node.localName = name; node.specified = true; return node; }, createEntityReference: function(name) { var node = new EntityReference(); node.ownerDocument = this; node.nodeName = name; return node; }, createElementNS: function(namespaceURI, qualifiedName) { var node = new Element$1(); var pl = qualifiedName.split(":"); var attrs = node.attributes = new NamedNodeMap(); node.childNodes = new NodeList(); node.ownerDocument = this; node.nodeName = qualifiedName; node.tagName = qualifiedName; node.namespaceURI = namespaceURI; if (pl.length == 2) { node.prefix = pl[0]; node.localName = pl[1]; } else { node.localName = qualifiedName; } attrs._ownerElement = node; return node; }, createAttributeNS: function(namespaceURI, qualifiedName) { var node = new Attr(); var pl = qualifiedName.split(":"); node.ownerDocument = this; node.nodeName = qualifiedName; node.name = qualifiedName; node.namespaceURI = namespaceURI; node.specified = true; if (pl.length == 2) { node.prefix = pl[0]; node.localName = pl[1]; } else { node.localName = qualifiedName; } return node; } }; _extends(Document, Node); function Element$1() { this._nsMap = {}; } Element$1.prototype = { nodeType: ELEMENT_NODE, hasAttribute: function(name) { return this.getAttributeNode(name) != null; }, getAttribute: function(name) { var attr = this.getAttributeNode(name); return attr && attr.value || ""; }, getAttributeNode: function(name) { return this.attributes.getNamedItem(name); }, setAttribute: function(name, value) { var attr = this.ownerDocument.createAttribute(name); attr.value = attr.nodeValue = "" + value; this.setAttributeNode(attr); }, removeAttribute: function(name) { var attr = this.getAttributeNode(name); attr && this.removeAttributeNode(attr); }, appendChild: function(newChild) { if (newChild.nodeType === DOCUMENT_FRAGMENT_NODE) { return this.insertBefore(newChild, null); } else { return _appendSingleChild(this, newChild); } }, setAttributeNode: function(newAttr) { return this.attributes.setNamedItem(newAttr); }, setAttributeNodeNS: function(newAttr) { return this.attributes.setNamedItemNS(newAttr); }, removeAttributeNode: function(oldAttr) { return this.attributes.removeNamedItem(oldAttr.nodeName); }, removeAttributeNS: function(namespaceURI, localName) { var old = this.getAttributeNodeNS(namespaceURI, localName); old && this.removeAttributeNode(old); }, hasAttributeNS: function(namespaceURI, localName) { return this.getAttributeNodeNS(namespaceURI, localName) != null; }, getAttributeNS: function(namespaceURI, localName) { var attr = this.getAttributeNodeNS(namespaceURI, localName); return attr && attr.value || ""; }, setAttributeNS: function(namespaceURI, qualifiedName, value) { var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); attr.value = attr.nodeValue = "" + value; this.setAttributeNode(attr); }, getAttributeNodeNS: function(namespaceURI, localName) { return this.attributes.getNamedItemNS(namespaceURI, localName); }, getElementsByTagName: function(tagName) { return new LiveNodeList(this, function(base2) { var ls = []; _visitNode(base2, function(node) { if (node !== base2 && node.nodeType == ELEMENT_NODE && (tagName === "*" || node.tagName == tagName)) { ls.push(node); } }); return ls; }); }, getElementsByTagNameNS: function(namespaceURI, localName) { return new LiveNodeList(this, function(base2) { var ls = []; _visitNode(base2, function(node) { if (node !== base2 && node.nodeType === ELEMENT_NODE && (namespaceURI === "*" || node.namespaceURI === namespaceURI) && (localName === "*" || node.localName == localName)) { ls.push(node); } }); return ls; }); } }; Document.prototype.getElementsByTagName = Element$1.prototype.getElementsByTagName; Document.prototype.getElementsByTagNameNS = Element$1.prototype.getElementsByTagNameNS; _extends(Element$1, Node); function Attr() { } Attr.prototype.nodeType = ATTRIBUTE_NODE; _extends(Attr, Node); function CharacterData() { } CharacterData.prototype = { data: "", substringData: function(offset, count) { return this.data.substring(offset, offset + count); }, appendData: function(text) { text = this.data + text; this.nodeValue = this.data = text; this.length = text.length; }, insertData: function(offset, text) { this.replaceData(offset, 0, text); }, appendChild: function(newChild) { throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR]); }, deleteData: function(offset, count) { this.replaceData(offset, count, ""); }, replaceData: function(offset, count, text) { var start2 = this.data.substring(0, offset); var end = this.data.substring(offset + count); text = start2 + text + end; this.nodeValue = this.data = text; this.length = text.length; } }; _extends(CharacterData, Node); function Text() { } Text.prototype = { nodeName: "#text", nodeType: TEXT_NODE, splitText: function(offset) { var text = this.data; var newText = text.substring(offset); text = text.substring(0, offset); this.data = this.nodeValue = text; this.length = text.length; var newNode = this.ownerDocument.createTextNode(newText); if (this.parentNode) { this.parentNode.insertBefore(newNode, this.nextSibling); } return newNode; } }; _extends(Text, CharacterData); function Comment() { } Comment.prototype = { nodeName: "#comment", nodeType: COMMENT_NODE }; _extends(Comment, CharacterData); function CDATASection() { } CDATASection.prototype = { nodeName: "#cdata-section", nodeType: CDATA_SECTION_NODE }; _extends(CDATASection, CharacterData); function DocumentType() { } DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; _extends(DocumentType, Node); function Notation() { } Notation.prototype.nodeType = NOTATION_NODE; _extends(Notation, Node); function Entity() { } Entity.prototype.nodeType = ENTITY_NODE; _extends(Entity, Node); function EntityReference() { } EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; _extends(EntityReference, Node); function DocumentFragment() { } DocumentFragment.prototype.nodeName = "#document-fragment"; DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; _extends(DocumentFragment, Node); function ProcessingInstruction() { } ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; _extends(ProcessingInstruction, Node); function XMLSerializer() { } XMLSerializer.prototype.serializeToString = function(node, isHtml, nodeFilter) { return nodeSerializeToString.call(node, isHtml, nodeFilter); }; Node.prototype.toString = nodeSerializeToString; function nodeSerializeToString(isHtml, nodeFilter) { var buf = []; var refNode = this.nodeType == 9 && this.documentElement || this; var prefix = refNode.prefix; var uri = refNode.namespaceURI; if (uri && prefix == null) { var prefix = refNode.lookupPrefix(uri); if (prefix == null) { var visibleNamespaces = [ { namespace: uri, prefix: null } ]; } } serializeToString(this, buf, isHtml, nodeFilter, visibleNamespaces); return buf.join(""); } function needNamespaceDefine(node, isHTML, visibleNamespaces) { var prefix = node.prefix || ""; var uri = node.namespaceURI; if (!uri) { return false; } if (prefix === "xml" && uri === NAMESPACE$2.XML || uri === NAMESPACE$2.XMLNS) { return false; } var i2 = visibleNamespaces.length; while (i2--) { var ns = visibleNamespaces[i2]; if (ns.prefix === prefix) { return ns.namespace !== uri; } } return true; } function addSerializedAttribute(buf, qualifiedName, value) { buf.push(" ", qualifiedName, '="', value.replace(/[<>&"\t\n\r]/g, _xmlEncoder), '"'); } function serializeToString(node, buf, isHTML, nodeFilter, visibleNamespaces) { if (!visibleNamespaces) { visibleNamespaces = []; } if (nodeFilter) { node = nodeFilter(node); if (node) { if (typeof node == "string") { buf.push(node); return; } } else { return; } } switch (node.nodeType) { case ELEMENT_NODE: var attrs = node.attributes; var len = attrs.length; var child = node.firstChild; var nodeName = node.tagName; isHTML = NAMESPACE$2.isHTML(node.namespaceURI) || isHTML; var prefixedNodeName = nodeName; if (!isHTML && !node.prefix && node.namespaceURI) { var defaultNS; for (var ai = 0; ai < attrs.length; ai++) { if (attrs.item(ai).name === "xmlns") { defaultNS = attrs.item(ai).value; break; } } if (!defaultNS) { for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) { var namespace = visibleNamespaces[nsi]; if (namespace.prefix === "" && namespace.namespace === node.namespaceURI) { defaultNS = namespace.namespace; break; } } } if (defaultNS !== node.namespaceURI) { for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) { var namespace = visibleNamespaces[nsi]; if (namespace.namespace === node.namespaceURI) { if (namespace.prefix) { prefixedNodeName = namespace.prefix + ":" + nodeName; } break; } } } } buf.push("<", prefixedNodeName); for (var i2 = 0; i2 < len; i2++) { var attr = attrs.item(i2); if (attr.prefix == "xmlns") { visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value }); } else if (attr.nodeName == "xmlns") { visibleNamespaces.push({ prefix: "", namespace: attr.value }); } } for (var i2 = 0; i2 < len; i2++) { var attr = attrs.item(i2); if (needNamespaceDefine(attr, isHTML, visibleNamespaces)) { var prefix = attr.prefix || ""; var uri = attr.namespaceURI; addSerializedAttribute(buf, prefix ? "xmlns:" + prefix : "xmlns", uri); visibleNamespaces.push({ prefix, namespace: uri }); } serializeToString(attr, buf, isHTML, nodeFilter, visibleNamespaces); } if (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) { var prefix = node.prefix || ""; var uri = node.namespaceURI; addSerializedAttribute(buf, prefix ? "xmlns:" + prefix : "xmlns", uri); visibleNamespaces.push({ prefix, namespace: uri }); } if (child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)) { buf.push(">"); if (isHTML && /^script$/i.test(nodeName)) { while (child) { if (child.data) { buf.push(child.data); } else { serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); } child = child.nextSibling; } } else { while (child) { serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); child = child.nextSibling; } } buf.push(""); } else { buf.push("/>"); } return; case DOCUMENT_NODE: case DOCUMENT_FRAGMENT_NODE: var child = node.firstChild; while (child) { serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice()); child = child.nextSibling; } return; case ATTRIBUTE_NODE: return addSerializedAttribute(buf, node.name, node.value); case TEXT_NODE: return buf.push( node.data.replace(/[<&>]/g, _xmlEncoder) ); case CDATA_SECTION_NODE: return buf.push(""); case COMMENT_NODE: return buf.push(""); case DOCUMENT_TYPE_NODE: var pubid = node.publicId; var sysid = node.systemId; buf.push(""); } else if (sysid && sysid != ".") { buf.push(" SYSTEM ", sysid, ">"); } else { var sub = node.internalSubset; if (sub) { buf.push(" [", sub, "]"); } buf.push(">"); } return; case PROCESSING_INSTRUCTION_NODE: return buf.push(""); case ENTITY_REFERENCE_NODE: return buf.push("&", node.nodeName, ";"); default: buf.push("??", node.nodeName); } } function importNode(doc, node, deep) { var node2; switch (node.nodeType) { case ELEMENT_NODE: node2 = node.cloneNode(false); node2.ownerDocument = doc; case DOCUMENT_FRAGMENT_NODE: break; case ATTRIBUTE_NODE: deep = true; break; } if (!node2) { node2 = node.cloneNode(false); } node2.ownerDocument = doc; node2.parentNode = null; if (deep) { var child = node.firstChild; while (child) { node2.appendChild(importNode(doc, child, deep)); child = child.nextSibling; } } return node2; } function cloneNode(doc, node, deep) { var node2 = new node.constructor(); for (var n in node) { if (Object.prototype.hasOwnProperty.call(node, n)) { var v = node[n]; if (typeof v != "object") { if (v != node2[n]) { node2[n] = v; } } } } if (node.childNodes) { node2.childNodes = new NodeList(); } node2.ownerDocument = doc; switch (node2.nodeType) { case ELEMENT_NODE: var attrs = node.attributes; var attrs2 = node2.attributes = new NamedNodeMap(); var len = attrs.length; attrs2._ownerElement = node2; for (var i2 = 0; i2 < len; i2++) { node2.setAttributeNode(cloneNode(doc, attrs.item(i2), true)); } break; case ATTRIBUTE_NODE: deep = true; } if (deep) { var child = node.firstChild; while (child) { node2.appendChild(cloneNode(doc, child, deep)); child = child.nextSibling; } } return node2; } function __set__(object, key, value) { object[key] = value; } try { if (Object.defineProperty) { let getTextContent = function(node) { switch (node.nodeType) { case ELEMENT_NODE: case DOCUMENT_FRAGMENT_NODE: var buf = []; node = node.firstChild; while (node) { if (node.nodeType !== 7 && node.nodeType !== 8) { buf.push(getTextContent(node)); } node = node.nextSibling; } return buf.join(""); default: return node.nodeValue; } }; Object.defineProperty(LiveNodeList.prototype, "length", { get: function() { _updateLiveList(this); return this.$$length; } }); Object.defineProperty(Node.prototype, "textContent", { get: function() { return getTextContent(this); }, set: function(data) { switch (this.nodeType) { case ELEMENT_NODE: case DOCUMENT_FRAGMENT_NODE: while (this.firstChild) { this.removeChild(this.firstChild); } if (data || String(data)) { this.appendChild(this.ownerDocument.createTextNode(data)); } break; default: this.data = data; this.value = data; this.nodeValue = data; } } }); __set__ = function(object, key, value) { object["$$" + key] = value; }; } } catch (e) { } dom$1.DocumentType = DocumentType; dom$1.DOMException = DOMException; dom$1.DOMImplementation = DOMImplementation$1; dom$1.Element = Element$1; dom$1.Node = Node; dom$1.NodeList = NodeList; dom$1.XMLSerializer = XMLSerializer; var domParser = {}; var entities$1 = {}; (function(exports2) { var freeze2 = conventions$2.freeze; exports2.XML_ENTITIES = freeze2({ amp: "&", apos: "'", gt: ">", lt: "<", quot: '"' }); exports2.HTML_ENTITIES = freeze2({ lt: "<", gt: ">", amp: "&", quot: '"', apos: "'", Agrave: "\xC0", Aacute: "\xC1", Acirc: "\xC2", Atilde: "\xC3", Auml: "\xC4", Aring: "\xC5", AElig: "\xC6", Ccedil: "\xC7", Egrave: "\xC8", Eacute: "\xC9", Ecirc: "\xCA", Euml: "\xCB", Igrave: "\xCC", Iacute: "\xCD", Icirc: "\xCE", Iuml: "\xCF", ETH: "\xD0", Ntilde: "\xD1", Ograve: "\xD2", Oacute: "\xD3", Ocirc: "\xD4", Otilde: "\xD5", Ouml: "\xD6", Oslash: "\xD8", Ugrave: "\xD9", Uacute: "\xDA", Ucirc: "\xDB", Uuml: "\xDC", Yacute: "\xDD", THORN: "\xDE", szlig: "\xDF", agrave: "\xE0", aacute: "\xE1", acirc: "\xE2", atilde: "\xE3", auml: "\xE4", aring: "\xE5", aelig: "\xE6", ccedil: "\xE7", egrave: "\xE8", eacute: "\xE9", ecirc: "\xEA", euml: "\xEB", igrave: "\xEC", iacute: "\xED", icirc: "\xEE", iuml: "\xEF", eth: "\xF0", ntilde: "\xF1", ograve: "\xF2", oacute: "\xF3", ocirc: "\xF4", otilde: "\xF5", ouml: "\xF6", oslash: "\xF8", ugrave: "\xF9", uacute: "\xFA", ucirc: "\xFB", uuml: "\xFC", yacute: "\xFD", thorn: "\xFE", yuml: "\xFF", nbsp: "\xA0", iexcl: "\xA1", cent: "\xA2", pound: "\xA3", curren: "\xA4", yen: "\xA5", brvbar: "\xA6", sect: "\xA7", uml: "\xA8", copy: "\xA9", ordf: "\xAA", laquo: "\xAB", not: "\xAC", shy: "\xAD\xAD", reg: "\xAE", macr: "\xAF", deg: "\xB0", plusmn: "\xB1", sup2: "\xB2", sup3: "\xB3", acute: "\xB4", micro: "\xB5", para: "\xB6", middot: "\xB7", cedil: "\xB8", sup1: "\xB9", ordm: "\xBA", raquo: "\xBB", frac14: "\xBC", frac12: "\xBD", frac34: "\xBE", iquest: "\xBF", times: "\xD7", divide: "\xF7", forall: "\u2200", part: "\u2202", exist: "\u2203", empty: "\u2205", nabla: "\u2207", isin: "\u2208", notin: "\u2209", ni: "\u220B", prod: "\u220F", sum: "\u2211", minus: "\u2212", lowast: "\u2217", radic: "\u221A", prop: "\u221D", infin: "\u221E", ang: "\u2220", and: "\u2227", or: "\u2228", cap: "\u2229", cup: "\u222A", "int": "\u222B", there4: "\u2234", sim: "\u223C", cong: "\u2245", asymp: "\u2248", ne: "\u2260", equiv: "\u2261", le: "\u2264", ge: "\u2265", sub: "\u2282", sup: "\u2283", nsub: "\u2284", sube: "\u2286", supe: "\u2287", oplus: "\u2295", otimes: "\u2297", perp: "\u22A5", sdot: "\u22C5", Alpha: "\u0391", Beta: "\u0392", Gamma: "\u0393", Delta: "\u0394", Epsilon: "\u0395", Zeta: "\u0396", Eta: "\u0397", Theta: "\u0398", Iota: "\u0399", Kappa: "\u039A", Lambda: "\u039B", Mu: "\u039C", Nu: "\u039D", Xi: "\u039E", Omicron: "\u039F", Pi: "\u03A0", Rho: "\u03A1", Sigma: "\u03A3", Tau: "\u03A4", Upsilon: "\u03A5", Phi: "\u03A6", Chi: "\u03A7", Psi: "\u03A8", Omega: "\u03A9", alpha: "\u03B1", beta: "\u03B2", gamma: "\u03B3", delta: "\u03B4", epsilon: "\u03B5", zeta: "\u03B6", eta: "\u03B7", theta: "\u03B8", iota: "\u03B9", kappa: "\u03BA", lambda: "\u03BB", mu: "\u03BC", nu: "\u03BD", xi: "\u03BE", omicron: "\u03BF", pi: "\u03C0", rho: "\u03C1", sigmaf: "\u03C2", sigma: "\u03C3", tau: "\u03C4", upsilon: "\u03C5", phi: "\u03C6", chi: "\u03C7", psi: "\u03C8", omega: "\u03C9", thetasym: "\u03D1", upsih: "\u03D2", piv: "\u03D6", OElig: "\u0152", oelig: "\u0153", Scaron: "\u0160", scaron: "\u0161", Yuml: "\u0178", fnof: "\u0192", circ: "\u02C6", tilde: "\u02DC", ensp: "\u2002", emsp: "\u2003", thinsp: "\u2009", zwnj: "\u200C", zwj: "\u200D", lrm: "\u200E", rlm: "\u200F", ndash: "\u2013", mdash: "\u2014", lsquo: "\u2018", rsquo: "\u2019", sbquo: "\u201A", ldquo: "\u201C", rdquo: "\u201D", bdquo: "\u201E", dagger: "\u2020", Dagger: "\u2021", bull: "\u2022", hellip: "\u2026", permil: "\u2030", prime: "\u2032", Prime: "\u2033", lsaquo: "\u2039", rsaquo: "\u203A", oline: "\u203E", euro: "\u20AC", trade: "\u2122", larr: "\u2190", uarr: "\u2191", rarr: "\u2192", darr: "\u2193", harr: "\u2194", crarr: "\u21B5", lceil: "\u2308", rceil: "\u2309", lfloor: "\u230A", rfloor: "\u230B", loz: "\u25CA", spades: "\u2660", clubs: "\u2663", hearts: "\u2665", diams: "\u2666" }); exports2.entityMap = exports2.HTML_ENTITIES; })(entities$1); var sax$1 = {}; var NAMESPACE$1 = conventions$2.NAMESPACE; var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/; var nameChar = new RegExp("[\\-\\.0-9" + nameStartChar.source.slice(1, -1) + "\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"); var tagNamePattern = new RegExp("^" + nameStartChar.source + nameChar.source + "*(?::" + nameStartChar.source + nameChar.source + "*)?$"); var S_TAG = 0; var S_ATTR = 1; var S_ATTR_SPACE = 2; var S_EQ = 3; var S_ATTR_NOQUOT_VALUE = 4; var S_ATTR_END = 5; var S_TAG_SPACE = 6; var S_TAG_CLOSE = 7; function ParseError$1(message, locator) { this.message = message; this.locator = locator; if (Error.captureStackTrace) Error.captureStackTrace(this, ParseError$1); } ParseError$1.prototype = new Error(); ParseError$1.prototype.name = ParseError$1.name; function XMLReader$1() { } XMLReader$1.prototype = { parse: function(source, defaultNSMap, entityMap) { var domBuilder = this.domBuilder; domBuilder.startDocument(); _copy(defaultNSMap, defaultNSMap = {}); parse$2( source, defaultNSMap, entityMap, domBuilder, this.errorHandler ); domBuilder.endDocument(); } }; function parse$2(source, defaultNSMapCopy, entityMap, domBuilder, errorHandler) { function fixedFromCharCode(code) { if (code > 65535) { code -= 65536; var surrogate1 = 55296 + (code >> 10), surrogate2 = 56320 + (code & 1023); return String.fromCharCode(surrogate1, surrogate2); } else { return String.fromCharCode(code); } } function entityReplacer(a2) { var k = a2.slice(1, -1); if (Object.hasOwnProperty.call(entityMap, k)) { return entityMap[k]; } else if (k.charAt(0) === "#") { return fixedFromCharCode(parseInt(k.substr(1).replace("x", "0x"))); } else { errorHandler.error("entity not found:" + a2); return a2; } } function appendText(end2) { if (end2 > start2) { var xt2 = source.substring(start2, end2).replace(/&#?\w+;/g, entityReplacer); locator && position2(start2); domBuilder.characters(xt2, 0, end2 - start2); start2 = end2; } } function position2(p, m) { while (p >= lineEnd && (m = linePattern.exec(source))) { lineStart = m.index; lineEnd = lineStart + m[0].length; locator.lineNumber++; } locator.columnNumber = p - lineStart + 1; } var lineStart = 0; var lineEnd = 0; var linePattern = /.*(?:\r\n?|\n)|.*$/g; var locator = domBuilder.locator; var parseStack = [{ currentNSMap: defaultNSMapCopy }]; var closeMap = {}; var start2 = 0; while (true) { try { var tagStart = source.indexOf("<", start2); if (tagStart < 0) { if (!source.substr(start2).match(/^\s*$/)) { var doc = domBuilder.doc; var text = doc.createTextNode(source.substr(start2)); doc.appendChild(text); domBuilder.currentElement = text; } return; } if (tagStart > start2) { appendText(tagStart); } switch (source.charAt(tagStart + 1)) { case "/": var end = source.indexOf(">", tagStart + 3); var tagName = source.substring(tagStart + 2, end).replace(/[ \t\n\r]+$/g, ""); var config = parseStack.pop(); if (end < 0) { tagName = source.substring(tagStart + 2).replace(/[\s<].*/, ""); errorHandler.error("end tag name: " + tagName + " is not complete:" + config.tagName); end = tagStart + 1 + tagName.length; } else if (tagName.match(/\s start2) { start2 = end; } else { appendText(Math.max(tagStart, start2) + 1); } } } function copyLocator(f, t2) { t2.lineNumber = f.lineNumber; t2.columnNumber = f.columnNumber; return t2; } function parseElementStartPart(source, start2, el, currentNSMap, entityReplacer, errorHandler) { function addAttribute(qname, value2, startIndex) { if (el.attributeNames.hasOwnProperty(qname)) { errorHandler.fatalError("Attribute " + qname + " redefined"); } el.addValue( qname, value2.replace(/[\t\n\r]/g, " ").replace(/&#?\w+;/g, entityReplacer), startIndex ); } var attrName; var value; var p = ++start2; var s = S_TAG; while (true) { var c = source.charAt(p); switch (c) { case "=": if (s === S_ATTR) { attrName = source.slice(start2, p); s = S_EQ; } else if (s === S_ATTR_SPACE) { s = S_EQ; } else { throw new Error("attribute equal must after attrName"); } break; case "'": case '"': if (s === S_EQ || s === S_ATTR) { if (s === S_ATTR) { errorHandler.warning('attribute value must after "="'); attrName = source.slice(start2, p); } start2 = p + 1; p = source.indexOf(c, start2); if (p > 0) { value = source.slice(start2, p); addAttribute(attrName, value, start2 - 1); s = S_ATTR_END; } else { throw new Error("attribute value no end '" + c + "' match"); } } else if (s == S_ATTR_NOQUOT_VALUE) { value = source.slice(start2, p); addAttribute(attrName, value, start2); errorHandler.warning('attribute "' + attrName + '" missed start quot(' + c + ")!!"); start2 = p + 1; s = S_ATTR_END; } else { throw new Error('attribute value must after "="'); } break; case "/": switch (s) { case S_TAG: el.setTagName(source.slice(start2, p)); case S_ATTR_END: case S_TAG_SPACE: case S_TAG_CLOSE: s = S_TAG_CLOSE; el.closed = true; case S_ATTR_NOQUOT_VALUE: case S_ATTR: break; case S_ATTR_SPACE: el.closed = true; break; default: throw new Error("attribute invalid close char('/')"); } break; case "": errorHandler.error("unexpected end of input"); if (s == S_TAG) { el.setTagName(source.slice(start2, p)); } return p; case ">": switch (s) { case S_TAG: el.setTagName(source.slice(start2, p)); case S_ATTR_END: case S_TAG_SPACE: case S_TAG_CLOSE: break; case S_ATTR_NOQUOT_VALUE: case S_ATTR: value = source.slice(start2, p); if (value.slice(-1) === "/") { el.closed = true; value = value.slice(0, -1); } case S_ATTR_SPACE: if (s === S_ATTR_SPACE) { value = attrName; } if (s == S_ATTR_NOQUOT_VALUE) { errorHandler.warning('attribute "' + value + '" missed quot(")!'); addAttribute(attrName, value, start2); } else { if (!NAMESPACE$1.isHTML(currentNSMap[""]) || !value.match(/^(?:disabled|checked|selected)$/i)) { errorHandler.warning('attribute "' + value + '" missed value!! "' + value + '" instead!!'); } addAttribute(value, value, start2); } break; case S_EQ: throw new Error("attribute value missed!!"); } return p; case "\x80": c = " "; default: if (c <= " ") { switch (s) { case S_TAG: el.setTagName(source.slice(start2, p)); s = S_TAG_SPACE; break; case S_ATTR: attrName = source.slice(start2, p); s = S_ATTR_SPACE; break; case S_ATTR_NOQUOT_VALUE: var value = source.slice(start2, p); errorHandler.warning('attribute "' + value + '" missed quot(")!!'); addAttribute(attrName, value, start2); case S_ATTR_END: s = S_TAG_SPACE; break; } } else { switch (s) { case S_ATTR_SPACE: el.tagName; if (!NAMESPACE$1.isHTML(currentNSMap[""]) || !attrName.match(/^(?:disabled|checked|selected)$/i)) { errorHandler.warning('attribute "' + attrName + '" missed value!! "' + attrName + '" instead2!!'); } addAttribute(attrName, attrName, start2); start2 = p; s = S_ATTR; break; case S_ATTR_END: errorHandler.warning('attribute space is required"' + attrName + '"!!'); case S_TAG_SPACE: s = S_ATTR; start2 = p; break; case S_EQ: s = S_ATTR_NOQUOT_VALUE; start2 = p; break; case S_TAG_CLOSE: throw new Error("elements closed character '/' and '>' must be connected to"); } } } p++; } } function appendElement$1(el, domBuilder, currentNSMap) { var tagName = el.tagName; var localNSMap = null; var i2 = el.length; while (i2--) { var a = el[i2]; var qName = a.qName; var value = a.value; var nsp = qName.indexOf(":"); if (nsp > 0) { var prefix = a.prefix = qName.slice(0, nsp); var localName = qName.slice(nsp + 1); var nsPrefix = prefix === "xmlns" && localName; } else { localName = qName; prefix = null; nsPrefix = qName === "xmlns" && ""; } a.localName = localName; if (nsPrefix !== false) { if (localNSMap == null) { localNSMap = {}; _copy(currentNSMap, currentNSMap = {}); } currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; a.uri = NAMESPACE$1.XMLNS; domBuilder.startPrefixMapping(nsPrefix, value); } } var i2 = el.length; while (i2--) { a = el[i2]; var prefix = a.prefix; if (prefix) { if (prefix === "xml") { a.uri = NAMESPACE$1.XML; } if (prefix !== "xmlns") { a.uri = currentNSMap[prefix || ""]; } } } var nsp = tagName.indexOf(":"); if (nsp > 0) { prefix = el.prefix = tagName.slice(0, nsp); localName = el.localName = tagName.slice(nsp + 1); } else { prefix = null; localName = el.localName = tagName; } var ns = el.uri = currentNSMap[prefix || ""]; domBuilder.startElement(ns, localName, tagName, el); if (el.closed) { domBuilder.endElement(ns, localName, tagName); if (localNSMap) { for (prefix in localNSMap) { if (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) { domBuilder.endPrefixMapping(prefix); } } } } else { el.currentNSMap = currentNSMap; el.localNSMap = localNSMap; return true; } } function parseHtmlSpecialContent(source, elStartEnd, tagName, entityReplacer, domBuilder) { if (/^(?:script|textarea)$/i.test(tagName)) { var elEndStart = source.indexOf("", elStartEnd); var text = source.substring(elStartEnd + 1, elEndStart); if (/[&<]/.test(text)) { if (/^script$/i.test(tagName)) { domBuilder.characters(text, 0, text.length); return elEndStart; } text = text.replace(/&#?\w+;/g, entityReplacer); domBuilder.characters(text, 0, text.length); return elEndStart; } } return elStartEnd + 1; } function fixSelfClosed(source, elStartEnd, tagName, closeMap) { var pos = closeMap[tagName]; if (pos == null) { pos = source.lastIndexOf(""); if (pos < elStartEnd) { pos = source.lastIndexOf("", start2 + 4); if (end > start2) { domBuilder.comment(source, start2 + 4, end - start2 - 4); return end + 3; } else { errorHandler.error("Unclosed comment"); return -1; } } else { return -1; } default: if (source.substr(start2 + 3, 6) == "CDATA[") { var end = source.indexOf("]]>", start2 + 9); domBuilder.startCDATA(); domBuilder.characters(source, start2 + 9, end - start2 - 9); domBuilder.endCDATA(); return end + 3; } var matchs = split(source, start2); var len = matchs.length; if (len > 1 && /!doctype/i.test(matchs[0][0])) { var name = matchs[1][0]; var pubid = false; var sysid = false; if (len > 3) { if (/^public$/i.test(matchs[2][0])) { pubid = matchs[3][0]; sysid = len > 4 && matchs[4][0]; } else if (/^system$/i.test(matchs[2][0])) { sysid = matchs[3][0]; } } var lastMatch = matchs[len - 1]; domBuilder.startDTD(name, pubid, sysid); domBuilder.endDTD(); return lastMatch.index + lastMatch[0].length; } } return -1; } function parseInstruction(source, start2, domBuilder) { var end = source.indexOf("?>", start2); if (end) { var match = source.substring(start2, end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/); if (match) { match[0].length; domBuilder.processingInstruction(match[1], match[2]); return end + 2; } else { return -1; } } return -1; } function ElementAttributes() { this.attributeNames = {}; } ElementAttributes.prototype = { setTagName: function(tagName) { if (!tagNamePattern.test(tagName)) { throw new Error("invalid tagName:" + tagName); } this.tagName = tagName; }, addValue: function(qName, value, offset) { if (!tagNamePattern.test(qName)) { throw new Error("invalid attribute:" + qName); } this.attributeNames[qName] = this.length; this[this.length++] = { qName, value, offset }; }, length: 0, getLocalName: function(i2) { return this[i2].localName; }, getLocator: function(i2) { return this[i2].locator; }, getQName: function(i2) { return this[i2].qName; }, getURI: function(i2) { return this[i2].uri; }, getValue: function(i2) { return this[i2].value; } }; function split(source, start2) { var match; var buf = []; var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g; reg.lastIndex = start2; reg.exec(source); while (match = reg.exec(source)) { buf.push(match); if (match[1]) return buf; } } sax$1.XMLReader = XMLReader$1; sax$1.ParseError = ParseError$1; var conventions = conventions$2; var dom = dom$1; var entities = entities$1; var sax = sax$1; var DOMImplementation = dom.DOMImplementation; var NAMESPACE = conventions.NAMESPACE; var ParseError = sax.ParseError; var XMLReader = sax.XMLReader; function normalizeLineEndings(input) { return input.replace(/\r[\n\u0085]/g, "\n").replace(/[\r\u0085\u2028]/g, "\n"); } function DOMParser$1(options2) { this.options = options2 || { locator: {} }; } DOMParser$1.prototype.parseFromString = function(source, mimeType) { var options2 = this.options; var sax2 = new XMLReader(); var domBuilder = options2.domBuilder || new DOMHandler(); var errorHandler = options2.errorHandler; var locator = options2.locator; var defaultNSMap = options2.xmlns || {}; var isHTML = /\/x?html?$/.test(mimeType); var entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES; if (locator) { domBuilder.setDocumentLocator(locator); } sax2.errorHandler = buildErrorHandler(errorHandler, domBuilder, locator); sax2.domBuilder = options2.domBuilder || domBuilder; if (isHTML) { defaultNSMap[""] = NAMESPACE.HTML; } defaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML; var normalize = options2.normalizeLineEndings || normalizeLineEndings; if (source && typeof source === "string") { sax2.parse( normalize(source), defaultNSMap, entityMap ); } else { sax2.errorHandler.error("invalid doc source"); } return domBuilder.doc; }; function buildErrorHandler(errorImpl, domBuilder, locator) { if (!errorImpl) { if (domBuilder instanceof DOMHandler) { return domBuilder; } errorImpl = domBuilder; } var errorHandler = {}; var isCallback = errorImpl instanceof Function; locator = locator || {}; function build(key) { var fn2 = errorImpl[key]; if (!fn2 && isCallback) { fn2 = errorImpl.length == 2 ? function(msg) { errorImpl(key, msg); } : errorImpl; } errorHandler[key] = fn2 && function(msg) { fn2("[xmldom " + key + "] " + msg + _locator(locator)); } || function() { }; } build("warning"); build("error"); build("fatalError"); return errorHandler; } function DOMHandler() { this.cdata = false; } function position(locator, node) { node.lineNumber = locator.lineNumber; node.columnNumber = locator.columnNumber; } DOMHandler.prototype = { startDocument: function() { this.doc = new DOMImplementation().createDocument(null, null, null); if (this.locator) { this.doc.documentURI = this.locator.systemId; } }, startElement: function(namespaceURI, localName, qName, attrs) { var doc = this.doc; var el = doc.createElementNS(namespaceURI, qName || localName); var len = attrs.length; appendElement(this, el); this.currentElement = el; this.locator && position(this.locator, el); for (var i2 = 0; i2 < len; i2++) { var namespaceURI = attrs.getURI(i2); var value = attrs.getValue(i2); var qName = attrs.getQName(i2); var attr = doc.createAttributeNS(namespaceURI, qName); this.locator && position(attrs.getLocator(i2), attr); attr.value = attr.nodeValue = value; el.setAttributeNode(attr); } }, endElement: function(namespaceURI, localName, qName) { var current = this.currentElement; current.tagName; this.currentElement = current.parentNode; }, startPrefixMapping: function(prefix, uri) { }, endPrefixMapping: function(prefix) { }, processingInstruction: function(target, data) { var ins = this.doc.createProcessingInstruction(target, data); this.locator && position(this.locator, ins); appendElement(this, ins); }, ignorableWhitespace: function(ch, start2, length) { }, characters: function(chars, start2, length) { chars = _toString.apply(this, arguments); if (chars) { if (this.cdata) { var charNode = this.doc.createCDATASection(chars); } else { var charNode = this.doc.createTextNode(chars); } if (this.currentElement) { this.currentElement.appendChild(charNode); } else if (/^\s*$/.test(chars)) { this.doc.appendChild(charNode); } this.locator && position(this.locator, charNode); } }, skippedEntity: function(name) { }, endDocument: function() { this.doc.normalize(); }, setDocumentLocator: function(locator) { if (this.locator = locator) { locator.lineNumber = 0; } }, comment: function(chars, start2, length) { chars = _toString.apply(this, arguments); var comm = this.doc.createComment(chars); this.locator && position(this.locator, comm); appendElement(this, comm); }, startCDATA: function() { this.cdata = true; }, endCDATA: function() { this.cdata = false; }, startDTD: function(name, publicId, systemId) { var impl = this.doc.implementation; if (impl && impl.createDocumentType) { var dt2 = impl.createDocumentType(name, publicId, systemId); this.locator && position(this.locator, dt2); appendElement(this, dt2); this.doc.doctype = dt2; } }, warning: function(error) { console.warn("[xmldom warning] " + error, _locator(this.locator)); }, error: function(error) { console.error("[xmldom error] " + error, _locator(this.locator)); }, fatalError: function(error) { throw new ParseError(error, this.locator); } }; function _locator(l) { if (l) { return "\n@" + (l.systemId || "") + "#[line:" + l.lineNumber + ",col:" + l.columnNumber + "]"; } } function _toString(chars, start2, length) { if (typeof chars == "string") { return chars.substr(start2, length); } else { if (chars.length >= start2 + length || start2) { return new java.lang.String(chars, start2, length) + ""; } return chars; } } "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g, function(key) { DOMHandler.prototype[key] = function() { return null; }; }); function appendElement(hander, node) { if (!hander.currentElement) { hander.doc.appendChild(node); } else { hander.currentElement.appendChild(node); } } domParser.__DOMHandler = DOMHandler; domParser.normalizeLineEndings = normalizeLineEndings; domParser.DOMParser = DOMParser$1; var DOMParser = domParser.DOMParser; /*! @name mpd-parser @version 1.1.1 @license Apache-2.0 */ const isObject$3 = (obj) => { return !!obj && typeof obj === "object"; }; const merge$3 = (...objects) => { return objects.reduce((result, source) => { if (typeof source !== "object") { return result; } Object.keys(source).forEach((key) => { if (Array.isArray(result[key]) && Array.isArray(source[key])) { result[key] = result[key].concat(source[key]); } else if (isObject$3(result[key]) && isObject$3(source[key])) { result[key] = merge$3(result[key], source[key]); } else { result[key] = source[key]; } }); return result; }, {}); }; const values$1 = (o) => Object.keys(o).map((k) => o[k]); const range$1 = (start2, end) => { const result = []; for (let i2 = start2; i2 < end; i2++) { result.push(i2); } return result; }; const flatten$1 = (lists) => lists.reduce((x, y) => x.concat(y), []); const from$1 = (list) => { if (!list.length) { return []; } const result = []; for (let i2 = 0; i2 < list.length; i2++) { result.push(list[i2]); } return result; }; const findIndexes$1 = (l, key) => l.reduce((a, e, i2) => { if (e[key]) { a.push(i2); } return a; }, []); const union$1 = (lists, keyFunction) => { return values$1(lists.reduce((acc, list) => { list.forEach((el) => { acc[keyFunction(el)] = el; }); return acc; }, {})); }; var errors$1 = { INVALID_NUMBER_OF_PERIOD: "INVALID_NUMBER_OF_PERIOD", DASH_EMPTY_MANIFEST: "DASH_EMPTY_MANIFEST", DASH_INVALID_XML: "DASH_INVALID_XML", NO_BASE_URL: "NO_BASE_URL", MISSING_SEGMENT_INFORMATION: "MISSING_SEGMENT_INFORMATION", SEGMENT_TIME_UNSPECIFIED: "SEGMENT_TIME_UNSPECIFIED", UNSUPPORTED_UTC_TIMING_SCHEME: "UNSUPPORTED_UTC_TIMING_SCHEME" }; const urlTypeToSegment$1 = ({ baseUrl = "", source = "", range: range3 = "", indexRange = "" }) => { const segment = { uri: source, resolvedUri: resolveUrl$3(baseUrl || "", source) }; if (range3 || indexRange) { const rangeStr = range3 ? range3 : indexRange; const ranges = rangeStr.split("-"); let startRange = window_1.BigInt ? window_1.BigInt(ranges[0]) : parseInt(ranges[0], 10); let endRange = window_1.BigInt ? window_1.BigInt(ranges[1]) : parseInt(ranges[1], 10); if (startRange < Number.MAX_SAFE_INTEGER && typeof startRange === "bigint") { startRange = Number(startRange); } if (endRange < Number.MAX_SAFE_INTEGER && typeof endRange === "bigint") { endRange = Number(endRange); } let length; if (typeof endRange === "bigint" || typeof startRange === "bigint") { length = window_1.BigInt(endRange) - window_1.BigInt(startRange) + window_1.BigInt(1); } else { length = endRange - startRange + 1; } if (typeof length === "bigint" && length < Number.MAX_SAFE_INTEGER) { length = Number(length); } segment.byterange = { length, offset: startRange }; } return segment; }; const byteRangeToString$1 = (byterange) => { let endRange; if (typeof byterange.offset === "bigint" || typeof byterange.length === "bigint") { endRange = window_1.BigInt(byterange.offset) + window_1.BigInt(byterange.length) - window_1.BigInt(1); } else { endRange = byterange.offset + byterange.length - 1; } return `${byterange.offset}-${endRange}`; }; const parseEndNumber$1 = (endNumber) => { if (endNumber && typeof endNumber !== "number") { endNumber = parseInt(endNumber, 10); } if (isNaN(endNumber)) { return null; } return endNumber; }; const segmentRange$1 = { static(attributes) { const { duration: duration5, timescale: timescale2 = 1, sourceDuration, periodDuration } = attributes; const endNumber = parseEndNumber$1(attributes.endNumber); const segmentDuration = duration5 / timescale2; if (typeof endNumber === "number") { return { start: 0, end: endNumber }; } if (typeof periodDuration === "number") { return { start: 0, end: periodDuration / segmentDuration }; } return { start: 0, end: sourceDuration / segmentDuration }; }, dynamic(attributes) { const { NOW, clientOffset, availabilityStartTime: availabilityStartTime2, timescale: timescale2 = 1, duration: duration5, periodStart = 0, minimumUpdatePeriod: minimumUpdatePeriod2 = 0, timeShiftBufferDepth: timeShiftBufferDepth2 = Infinity } = attributes; const endNumber = parseEndNumber$1(attributes.endNumber); const now2 = (NOW + clientOffset) / 1e3; const periodStartWC = availabilityStartTime2 + periodStart; const periodEndWC = now2 + minimumUpdatePeriod2; const periodDuration = periodEndWC - periodStartWC; const segmentCount = Math.ceil(periodDuration * timescale2 / duration5); const availableStart = Math.floor((now2 - periodStartWC - timeShiftBufferDepth2) * timescale2 / duration5); const availableEnd = Math.floor((now2 - periodStartWC) * timescale2 / duration5); return { start: Math.max(0, availableStart), end: typeof endNumber === "number" ? endNumber : Math.min(segmentCount, availableEnd) }; } }; const toSegments$1 = (attributes) => (number) => { const { duration: duration5, timescale: timescale2 = 1, periodStart, startNumber: startNumber2 = 1 } = attributes; return { number: startNumber2 + number, duration: duration5 / timescale2, timeline: periodStart, time: number * duration5 }; }; const parseByDuration$1 = (attributes) => { const { type: type2, duration: duration5, timescale: timescale2 = 1, periodDuration, sourceDuration } = attributes; const { start: start2, end } = segmentRange$1[type2](attributes); const segments = range$1(start2, end).map(toSegments$1(attributes)); if (type2 === "static") { const index2 = segments.length - 1; const sectionDuration = typeof periodDuration === "number" ? periodDuration : sourceDuration; segments[index2].duration = sectionDuration - duration5 / timescale2 * index2; } return segments; }; const segmentsFromBase$1 = (attributes) => { const { baseUrl, initialization = {}, sourceDuration, indexRange = "", periodStart, presentationTime, number = 0, duration: duration5 } = attributes; if (!baseUrl) { throw new Error(errors$1.NO_BASE_URL); } const initSegment = urlTypeToSegment$1({ baseUrl, source: initialization.sourceURL, range: initialization.range }); const segment = urlTypeToSegment$1({ baseUrl, source: baseUrl, indexRange }); segment.map = initSegment; if (duration5) { const segmentTimeInfo = parseByDuration$1(attributes); if (segmentTimeInfo.length) { segment.duration = segmentTimeInfo[0].duration; segment.timeline = segmentTimeInfo[0].timeline; } } else if (sourceDuration) { segment.duration = sourceDuration; segment.timeline = periodStart; } segment.presentationTime = presentationTime || periodStart; segment.number = number; return [segment]; }; const addSidxSegmentsToPlaylist$1$1 = (playlist, sidx, baseUrl) => { const initSegment = playlist.sidx.map ? playlist.sidx.map : null; const sourceDuration = playlist.sidx.duration; const timeline = playlist.timeline || 0; const sidxByteRange = playlist.sidx.byterange; const sidxEnd = sidxByteRange.offset + sidxByteRange.length; const timescale2 = sidx.timescale; const mediaReferences = sidx.references.filter((r2) => r2.referenceType !== 1); const segments = []; const type2 = playlist.endList ? "static" : "dynamic"; const periodStart = playlist.sidx.timeline; let presentationTime = periodStart; let number = playlist.mediaSequence || 0; let startIndex; if (typeof sidx.firstOffset === "bigint") { startIndex = window_1.BigInt(sidxEnd) + sidx.firstOffset; } else { startIndex = sidxEnd + sidx.firstOffset; } for (let i2 = 0; i2 < mediaReferences.length; i2++) { const reference = sidx.references[i2]; const size = reference.referencedSize; const duration5 = reference.subsegmentDuration; let endIndex; if (typeof startIndex === "bigint") { endIndex = startIndex + window_1.BigInt(size) - window_1.BigInt(1); } else { endIndex = startIndex + size - 1; } const indexRange = `${startIndex}-${endIndex}`; const attributes = { baseUrl, timescale: timescale2, timeline, periodStart, presentationTime, number, duration: duration5, sourceDuration, indexRange, type: type2 }; const segment = segmentsFromBase$1(attributes)[0]; if (initSegment) { segment.map = initSegment; } segments.push(segment); if (typeof startIndex === "bigint") { startIndex += window_1.BigInt(size); } else { startIndex += size; } presentationTime += duration5 / timescale2; number++; } playlist.segments = segments; return playlist; }; const SUPPORTED_MEDIA_TYPES$1 = ["AUDIO", "SUBTITLES"]; const TIME_FUDGE$1 = 1 / 60; const getUniqueTimelineStarts$1 = (timelineStarts) => { return union$1(timelineStarts, ({ timeline }) => timeline).sort((a, b) => a.timeline > b.timeline ? 1 : -1); }; const findPlaylistWithName$1 = (playlists, name) => { for (let i2 = 0; i2 < playlists.length; i2++) { if (playlists[i2].attributes.NAME === name) { return playlists[i2]; } } return null; }; const getMediaGroupPlaylists$1 = (manifest) => { let mediaGroupPlaylists = []; forEachMediaGroup$3(manifest, SUPPORTED_MEDIA_TYPES$1, (properties, type2, group, label2) => { mediaGroupPlaylists = mediaGroupPlaylists.concat(properties.playlists || []); }); return mediaGroupPlaylists; }; const updateMediaSequenceForPlaylist$1 = ({ playlist, mediaSequence }) => { playlist.mediaSequence = mediaSequence; playlist.segments.forEach((segment, index2) => { segment.number = playlist.mediaSequence + index2; }); }; const updateSequenceNumbers$1 = ({ oldPlaylists, newPlaylists, timelineStarts }) => { newPlaylists.forEach((playlist) => { playlist.discontinuitySequence = timelineStarts.findIndex(function({ timeline }) { return timeline === playlist.timeline; }); const oldPlaylist = findPlaylistWithName$1(oldPlaylists, playlist.attributes.NAME); if (!oldPlaylist) { return; } if (playlist.sidx) { return; } const firstNewSegment = playlist.segments[0]; const oldMatchingSegmentIndex = oldPlaylist.segments.findIndex(function(oldSegment) { return Math.abs(oldSegment.presentationTime - firstNewSegment.presentationTime) < TIME_FUDGE$1; }); if (oldMatchingSegmentIndex === -1) { updateMediaSequenceForPlaylist$1({ playlist, mediaSequence: oldPlaylist.mediaSequence + oldPlaylist.segments.length }); playlist.segments[0].discontinuity = true; playlist.discontinuityStarts.unshift(0); if (!oldPlaylist.segments.length && playlist.timeline > oldPlaylist.timeline || oldPlaylist.segments.length && playlist.timeline > oldPlaylist.segments[oldPlaylist.segments.length - 1].timeline) { playlist.discontinuitySequence--; } return; } const oldMatchingSegment = oldPlaylist.segments[oldMatchingSegmentIndex]; if (oldMatchingSegment.discontinuity && !firstNewSegment.discontinuity) { firstNewSegment.discontinuity = true; playlist.discontinuityStarts.unshift(0); playlist.discontinuitySequence--; } updateMediaSequenceForPlaylist$1({ playlist, mediaSequence: oldPlaylist.segments[oldMatchingSegmentIndex].number }); }); }; const positionManifestOnTimeline$1 = ({ oldManifest, newManifest }) => { const oldPlaylists = oldManifest.playlists.concat(getMediaGroupPlaylists$1(oldManifest)); const newPlaylists = newManifest.playlists.concat(getMediaGroupPlaylists$1(newManifest)); newManifest.timelineStarts = getUniqueTimelineStarts$1([oldManifest.timelineStarts, newManifest.timelineStarts]); updateSequenceNumbers$1({ oldPlaylists, newPlaylists, timelineStarts: newManifest.timelineStarts }); return newManifest; }; const generateSidxKey$1 = (sidx) => sidx && sidx.uri + "-" + byteRangeToString$1(sidx.byterange); const mergeDiscontiguousPlaylists$1 = (playlists) => { const mergedPlaylists = values$1(playlists.reduce((acc, playlist) => { const name = playlist.attributes.id + (playlist.attributes.lang || ""); if (!acc[name]) { acc[name] = playlist; acc[name].attributes.timelineStarts = []; } else { if (playlist.segments) { if (playlist.segments[0]) { playlist.segments[0].discontinuity = true; } acc[name].segments.push(...playlist.segments); } if (playlist.attributes.contentProtection) { acc[name].attributes.contentProtection = playlist.attributes.contentProtection; } } acc[name].attributes.timelineStarts.push({ start: playlist.attributes.periodStart, timeline: playlist.attributes.periodStart }); return acc; }, {})); return mergedPlaylists.map((playlist) => { playlist.discontinuityStarts = findIndexes$1(playlist.segments || [], "discontinuity"); return playlist; }); }; const addSidxSegmentsToPlaylist$2 = (playlist, sidxMapping) => { const sidxKey = generateSidxKey$1(playlist.sidx); const sidxMatch = sidxKey && sidxMapping[sidxKey] && sidxMapping[sidxKey].sidx; if (sidxMatch) { addSidxSegmentsToPlaylist$1$1(playlist, sidxMatch, playlist.sidx.resolvedUri); } return playlist; }; const addSidxSegmentsToPlaylists$1 = (playlists, sidxMapping = {}) => { if (!Object.keys(sidxMapping).length) { return playlists; } for (const i2 in playlists) { playlists[i2] = addSidxSegmentsToPlaylist$2(playlists[i2], sidxMapping); } return playlists; }; const formatAudioPlaylist$1 = ({ attributes, segments, sidx, mediaSequence, discontinuitySequence, discontinuityStarts }, isAudioOnly3) => { const playlist = { attributes: { NAME: attributes.id, BANDWIDTH: attributes.bandwidth, CODECS: attributes.codecs, ["PROGRAM-ID"]: 1 }, uri: "", endList: attributes.type === "static", timeline: attributes.periodStart, resolvedUri: "", targetDuration: attributes.duration, discontinuitySequence, discontinuityStarts, timelineStarts: attributes.timelineStarts, mediaSequence, segments }; if (attributes.contentProtection) { playlist.contentProtection = attributes.contentProtection; } if (sidx) { playlist.sidx = sidx; } if (isAudioOnly3) { playlist.attributes.AUDIO = "audio"; playlist.attributes.SUBTITLES = "subs"; } return playlist; }; const formatVttPlaylist$1 = ({ attributes, segments, mediaSequence, discontinuityStarts, discontinuitySequence }) => { if (typeof segments === "undefined") { segments = [{ uri: attributes.baseUrl, timeline: attributes.periodStart, resolvedUri: attributes.baseUrl || "", duration: attributes.sourceDuration, number: 0 }]; attributes.duration = attributes.sourceDuration; } const m3u8Attributes = { NAME: attributes.id, BANDWIDTH: attributes.bandwidth, ["PROGRAM-ID"]: 1 }; if (attributes.codecs) { m3u8Attributes.CODECS = attributes.codecs; } return { attributes: m3u8Attributes, uri: "", endList: attributes.type === "static", timeline: attributes.periodStart, resolvedUri: attributes.baseUrl || "", targetDuration: attributes.duration, timelineStarts: attributes.timelineStarts, discontinuityStarts, discontinuitySequence, mediaSequence, segments }; }; const organizeAudioPlaylists$1 = (playlists, sidxMapping = {}, isAudioOnly3 = false) => { let mainPlaylist; const formattedPlaylists = playlists.reduce((a, playlist) => { const role = playlist.attributes.role && playlist.attributes.role.value || ""; const language = playlist.attributes.lang || ""; let label2 = playlist.attributes.label || "main"; if (language && !playlist.attributes.label) { const roleLabel = role ? ` (${role})` : ""; label2 = `${playlist.attributes.lang}${roleLabel}`; } if (!a[label2]) { a[label2] = { language, autoselect: true, default: role === "main", playlists: [], uri: "" }; } const formatted = addSidxSegmentsToPlaylist$2(formatAudioPlaylist$1(playlist, isAudioOnly3), sidxMapping); a[label2].playlists.push(formatted); if (typeof mainPlaylist === "undefined" && role === "main") { mainPlaylist = playlist; mainPlaylist.default = true; } return a; }, {}); if (!mainPlaylist) { const firstLabel = Object.keys(formattedPlaylists)[0]; formattedPlaylists[firstLabel].default = true; } return formattedPlaylists; }; const organizeVttPlaylists$1 = (playlists, sidxMapping = {}) => { return playlists.reduce((a, playlist) => { const label2 = playlist.attributes.label || playlist.attributes.lang || "text"; if (!a[label2]) { a[label2] = { language: label2, default: false, autoselect: false, playlists: [], uri: "" }; } a[label2].playlists.push(addSidxSegmentsToPlaylist$2(formatVttPlaylist$1(playlist), sidxMapping)); return a; }, {}); }; const organizeCaptionServices$1 = (captionServices) => captionServices.reduce((svcObj, svc) => { if (!svc) { return svcObj; } svc.forEach((service) => { const { channel, language } = service; svcObj[language] = { autoselect: false, default: false, instreamId: channel, language }; if (service.hasOwnProperty("aspectRatio")) { svcObj[language].aspectRatio = service.aspectRatio; } if (service.hasOwnProperty("easyReader")) { svcObj[language].easyReader = service.easyReader; } if (service.hasOwnProperty("3D")) { svcObj[language]["3D"] = service["3D"]; } }); return svcObj; }, {}); const formatVideoPlaylist$1 = ({ attributes, segments, sidx, discontinuityStarts }) => { const playlist = { attributes: { NAME: attributes.id, AUDIO: "audio", SUBTITLES: "subs", RESOLUTION: { width: attributes.width, height: attributes.height }, CODECS: attributes.codecs, BANDWIDTH: attributes.bandwidth, ["PROGRAM-ID"]: 1 }, uri: "", endList: attributes.type === "static", timeline: attributes.periodStart, resolvedUri: "", targetDuration: attributes.duration, discontinuityStarts, timelineStarts: attributes.timelineStarts, segments }; if (attributes.frameRate) { playlist.attributes["FRAME-RATE"] = attributes.frameRate; } if (attributes.contentProtection) { playlist.contentProtection = attributes.contentProtection; } if (sidx) { playlist.sidx = sidx; } return playlist; }; const videoOnly$1 = ({ attributes }) => attributes.mimeType === "video/mp4" || attributes.mimeType === "video/webm" || attributes.contentType === "video"; const audioOnly$1 = ({ attributes }) => attributes.mimeType === "audio/mp4" || attributes.mimeType === "audio/webm" || attributes.contentType === "audio"; const vttOnly$1 = ({ attributes }) => attributes.mimeType === "text/vtt" || attributes.contentType === "text"; const addMediaSequenceValues$1 = (playlists, timelineStarts) => { playlists.forEach((playlist) => { playlist.mediaSequence = 0; playlist.discontinuitySequence = timelineStarts.findIndex(function({ timeline }) { return timeline === playlist.timeline; }); if (!playlist.segments) { return; } playlist.segments.forEach((segment, index2) => { segment.number = index2; }); }); }; const flattenMediaGroupPlaylists$1 = (mediaGroupObject) => { if (!mediaGroupObject) { return []; } return Object.keys(mediaGroupObject).reduce((acc, label2) => { const labelContents = mediaGroupObject[label2]; return acc.concat(labelContents.playlists); }, []); }; const toM3u8$1 = ({ dashPlaylists, locations, sidxMapping = {}, previousManifest, eventStream }) => { if (!dashPlaylists.length) { return {}; } const { sourceDuration: duration5, type: type2, suggestedPresentationDelay: suggestedPresentationDelay2, minimumUpdatePeriod: minimumUpdatePeriod2 } = dashPlaylists[0].attributes; const videoPlaylists = mergeDiscontiguousPlaylists$1(dashPlaylists.filter(videoOnly$1)).map(formatVideoPlaylist$1); const audioPlaylists = mergeDiscontiguousPlaylists$1(dashPlaylists.filter(audioOnly$1)); const vttPlaylists = mergeDiscontiguousPlaylists$1(dashPlaylists.filter(vttOnly$1)); const captions = dashPlaylists.map((playlist) => playlist.attributes.captionServices).filter(Boolean); const manifest = { allowCache: true, discontinuityStarts: [], segments: [], endList: true, mediaGroups: { AUDIO: {}, VIDEO: {}, ["CLOSED-CAPTIONS"]: {}, SUBTITLES: {} }, uri: "", duration: duration5, playlists: addSidxSegmentsToPlaylists$1(videoPlaylists, sidxMapping) }; if (minimumUpdatePeriod2 >= 0) { manifest.minimumUpdatePeriod = minimumUpdatePeriod2 * 1e3; } if (locations) { manifest.locations = locations; } if (type2 === "dynamic") { manifest.suggestedPresentationDelay = suggestedPresentationDelay2; } if (eventStream && eventStream.length > 0) { manifest.eventStream = eventStream; } const isAudioOnly3 = manifest.playlists.length === 0; const organizedAudioGroup = audioPlaylists.length ? organizeAudioPlaylists$1(audioPlaylists, sidxMapping, isAudioOnly3) : null; const organizedVttGroup = vttPlaylists.length ? organizeVttPlaylists$1(vttPlaylists, sidxMapping) : null; const formattedPlaylists = videoPlaylists.concat(flattenMediaGroupPlaylists$1(organizedAudioGroup), flattenMediaGroupPlaylists$1(organizedVttGroup)); const playlistTimelineStarts = formattedPlaylists.map(({ timelineStarts }) => timelineStarts); manifest.timelineStarts = getUniqueTimelineStarts$1(playlistTimelineStarts); addMediaSequenceValues$1(formattedPlaylists, manifest.timelineStarts); if (organizedAudioGroup) { manifest.mediaGroups.AUDIO.audio = organizedAudioGroup; } if (organizedVttGroup) { manifest.mediaGroups.SUBTITLES.subs = organizedVttGroup; } if (captions.length) { manifest.mediaGroups["CLOSED-CAPTIONS"].cc = organizeCaptionServices$1(captions); } if (previousManifest) { return positionManifestOnTimeline$1({ oldManifest: previousManifest, newManifest: manifest }); } return manifest; }; const getLiveRValue$1 = (attributes, time, duration5) => { const { NOW, clientOffset, availabilityStartTime: availabilityStartTime2, timescale: timescale2 = 1, periodStart = 0, minimumUpdatePeriod: minimumUpdatePeriod2 = 0 } = attributes; const now2 = (NOW + clientOffset) / 1e3; const periodStartWC = availabilityStartTime2 + periodStart; const periodEndWC = now2 + minimumUpdatePeriod2; const periodDuration = periodEndWC - periodStartWC; return Math.ceil((periodDuration * timescale2 - time) / duration5); }; const parseByTimeline$1 = (attributes, segmentTimeline) => { const { type: type2, minimumUpdatePeriod: minimumUpdatePeriod2 = 0, media = "", sourceDuration, timescale: timescale2 = 1, startNumber: startNumber2 = 1, periodStart: timeline } = attributes; const segments = []; let time = -1; for (let sIndex = 0; sIndex < segmentTimeline.length; sIndex++) { const S = segmentTimeline[sIndex]; const duration5 = S.d; const repeat = S.r || 0; const segmentTime = S.t || 0; if (time < 0) { time = segmentTime; } if (segmentTime && segmentTime > time) { time = segmentTime; } let count; if (repeat < 0) { const nextS = sIndex + 1; if (nextS === segmentTimeline.length) { if (type2 === "dynamic" && minimumUpdatePeriod2 > 0 && media.indexOf("$Number$") > 0) { count = getLiveRValue$1(attributes, time, duration5); } else { count = (sourceDuration * timescale2 - time) / duration5; } } else { count = (segmentTimeline[nextS].t - time) / duration5; } } else { count = repeat + 1; } const end = startNumber2 + segments.length + count; let number = startNumber2 + segments.length; while (number < end) { segments.push({ number, duration: duration5 / timescale2, time, timeline }); time += duration5; number++; } } return segments; }; const identifierPattern$1 = /\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g; const identifierReplacement$1 = (values3) => (match, identifier, format, width2) => { if (match === "$$") { return "$"; } if (typeof values3[identifier] === "undefined") { return match; } const value = "" + values3[identifier]; if (identifier === "RepresentationID") { return value; } if (!format) { width2 = 1; } else { width2 = parseInt(width2, 10); } if (value.length >= width2) { return value; } return `${new Array(width2 - value.length + 1).join("0")}${value}`; }; const constructTemplateUrl$1 = (url, values3) => url.replace(identifierPattern$1, identifierReplacement$1(values3)); const parseTemplateInfo$1 = (attributes, segmentTimeline) => { if (!attributes.duration && !segmentTimeline) { return [{ number: attributes.startNumber || 1, duration: attributes.sourceDuration, time: 0, timeline: attributes.periodStart }]; } if (attributes.duration) { return parseByDuration$1(attributes); } return parseByTimeline$1(attributes, segmentTimeline); }; const segmentsFromTemplate$1 = (attributes, segmentTimeline) => { const templateValues = { RepresentationID: attributes.id, Bandwidth: attributes.bandwidth || 0 }; const { initialization = { sourceURL: "", range: "" } } = attributes; const mapSegment = urlTypeToSegment$1({ baseUrl: attributes.baseUrl, source: constructTemplateUrl$1(initialization.sourceURL, templateValues), range: initialization.range }); const segments = parseTemplateInfo$1(attributes, segmentTimeline); return segments.map((segment) => { templateValues.Number = segment.number; templateValues.Time = segment.time; const uri = constructTemplateUrl$1(attributes.media || "", templateValues); const timescale2 = attributes.timescale || 1; const presentationTimeOffset2 = attributes.presentationTimeOffset || 0; const presentationTime = attributes.periodStart + (segment.time - presentationTimeOffset2) / timescale2; const map = { uri, timeline: segment.timeline, duration: segment.duration, resolvedUri: resolveUrl$3(attributes.baseUrl || "", uri), map: mapSegment, number: segment.number, presentationTime }; return map; }); }; const SegmentURLToSegmentObject$1 = (attributes, segmentUrl) => { const { baseUrl, initialization = {} } = attributes; const initSegment = urlTypeToSegment$1({ baseUrl, source: initialization.sourceURL, range: initialization.range }); const segment = urlTypeToSegment$1({ baseUrl, source: segmentUrl.media, range: segmentUrl.mediaRange }); segment.map = initSegment; return segment; }; const segmentsFromList$1 = (attributes, segmentTimeline) => { const { duration: duration5, segmentUrls = [], periodStart } = attributes; if (!duration5 && !segmentTimeline || duration5 && segmentTimeline) { throw new Error(errors$1.SEGMENT_TIME_UNSPECIFIED); } const segmentUrlMap = segmentUrls.map((segmentUrlObject) => SegmentURLToSegmentObject$1(attributes, segmentUrlObject)); let segmentTimeInfo; if (duration5) { segmentTimeInfo = parseByDuration$1(attributes); } if (segmentTimeline) { segmentTimeInfo = parseByTimeline$1(attributes, segmentTimeline); } const segments = segmentTimeInfo.map((segmentTime, index2) => { if (segmentUrlMap[index2]) { const segment = segmentUrlMap[index2]; const timescale2 = attributes.timescale || 1; const presentationTimeOffset2 = attributes.presentationTimeOffset || 0; segment.timeline = segmentTime.timeline; segment.duration = segmentTime.duration; segment.number = segmentTime.number; segment.presentationTime = periodStart + (segmentTime.time - presentationTimeOffset2) / timescale2; return segment; } }).filter((segment) => segment); return segments; }; const generateSegments$1 = ({ attributes, segmentInfo }) => { let segmentAttributes; let segmentsFn; if (segmentInfo.template) { segmentsFn = segmentsFromTemplate$1; segmentAttributes = merge$3(attributes, segmentInfo.template); } else if (segmentInfo.base) { segmentsFn = segmentsFromBase$1; segmentAttributes = merge$3(attributes, segmentInfo.base); } else if (segmentInfo.list) { segmentsFn = segmentsFromList$1; segmentAttributes = merge$3(attributes, segmentInfo.list); } const segmentsInfo = { attributes }; if (!segmentsFn) { return segmentsInfo; } const segments = segmentsFn(segmentAttributes, segmentInfo.segmentTimeline); if (segmentAttributes.duration) { const { duration: duration5, timescale: timescale2 = 1 } = segmentAttributes; segmentAttributes.duration = duration5 / timescale2; } else if (segments.length) { segmentAttributes.duration = segments.reduce((max2, segment) => { return Math.max(max2, Math.ceil(segment.duration)); }, 0); } else { segmentAttributes.duration = 0; } segmentsInfo.attributes = segmentAttributes; segmentsInfo.segments = segments; if (segmentInfo.base && segmentAttributes.indexRange) { segmentsInfo.sidx = segments[0]; segmentsInfo.segments = []; } return segmentsInfo; }; const toPlaylists$1 = (representations) => representations.map(generateSegments$1); const findChildren$1 = (element, name) => from$1(element.childNodes).filter(({ tagName }) => tagName === name); const getContent$1 = (element) => element.textContent.trim(); const parseDivisionValue$1 = (value) => { return parseFloat(value.split("/").reduce((prev, current) => prev / current)); }; const parseDuration$1 = (str) => { const SECONDS_IN_YEAR = 365 * 24 * 60 * 60; const SECONDS_IN_MONTH = 30 * 24 * 60 * 60; const SECONDS_IN_DAY = 24 * 60 * 60; const SECONDS_IN_HOUR = 60 * 60; const SECONDS_IN_MIN = 60; const durationRegex = /P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)D)?(?:T(?:(\d*)H)?(?:(\d*)M)?(?:([\d.]*)S)?)?/; const match = durationRegex.exec(str); if (!match) { return 0; } const [year, month, day, hour, minute, second] = match.slice(1); return parseFloat(year || 0) * SECONDS_IN_YEAR + parseFloat(month || 0) * SECONDS_IN_MONTH + parseFloat(day || 0) * SECONDS_IN_DAY + parseFloat(hour || 0) * SECONDS_IN_HOUR + parseFloat(minute || 0) * SECONDS_IN_MIN + parseFloat(second || 0); }; const parseDate$1 = (str) => { const dateRegex = /^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/; if (dateRegex.test(str)) { str += "Z"; } return Date.parse(str); }; const parsers$1 = { mediaPresentationDuration(value) { return parseDuration$1(value); }, availabilityStartTime(value) { return parseDate$1(value) / 1e3; }, minimumUpdatePeriod(value) { return parseDuration$1(value); }, suggestedPresentationDelay(value) { return parseDuration$1(value); }, type(value) { return value; }, timeShiftBufferDepth(value) { return parseDuration$1(value); }, start(value) { return parseDuration$1(value); }, width(value) { return parseInt(value, 10); }, height(value) { return parseInt(value, 10); }, bandwidth(value) { return parseInt(value, 10); }, frameRate(value) { return parseDivisionValue$1(value); }, startNumber(value) { return parseInt(value, 10); }, timescale(value) { return parseInt(value, 10); }, presentationTimeOffset(value) { return parseInt(value, 10); }, duration(value) { const parsedValue = parseInt(value, 10); if (isNaN(parsedValue)) { return parseDuration$1(value); } return parsedValue; }, d(value) { return parseInt(value, 10); }, t(value) { return parseInt(value, 10); }, r(value) { return parseInt(value, 10); }, presentationTime(value) { return parseInt(value, 10); }, DEFAULT(value) { return value; } }; const parseAttributes$2 = (el) => { if (!(el && el.attributes)) { return {}; } return from$1(el.attributes).reduce((a, e) => { const parseFn = parsers$1[e.name] || parsers$1.DEFAULT; a[e.name] = parseFn(e.value); return a; }, {}); }; const keySystemsMap$1 = { "urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b": "org.w3.clearkey", "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed": "com.widevine.alpha", "urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95": "com.microsoft.playready", "urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb": "com.adobe.primetime" }; const buildBaseUrls$1 = (referenceUrls, baseUrlElements) => { if (!baseUrlElements.length) { return referenceUrls; } return flatten$1(referenceUrls.map(function(reference) { return baseUrlElements.map(function(baseUrlElement) { return resolveUrl$3(reference, getContent$1(baseUrlElement)); }); })); }; const getSegmentInformation$1 = (adaptationSet) => { const segmentTemplate = findChildren$1(adaptationSet, "SegmentTemplate")[0]; const segmentList = findChildren$1(adaptationSet, "SegmentList")[0]; const segmentUrls = segmentList && findChildren$1(segmentList, "SegmentURL").map((s) => merge$3({ tag: "SegmentURL" }, parseAttributes$2(s))); const segmentBase = findChildren$1(adaptationSet, "SegmentBase")[0]; const segmentTimelineParentNode = segmentList || segmentTemplate; const segmentTimeline = segmentTimelineParentNode && findChildren$1(segmentTimelineParentNode, "SegmentTimeline")[0]; const segmentInitializationParentNode = segmentList || segmentBase || segmentTemplate; const segmentInitialization = segmentInitializationParentNode && findChildren$1(segmentInitializationParentNode, "Initialization")[0]; const template = segmentTemplate && parseAttributes$2(segmentTemplate); if (template && segmentInitialization) { template.initialization = segmentInitialization && parseAttributes$2(segmentInitialization); } else if (template && template.initialization) { template.initialization = { sourceURL: template.initialization }; } const segmentInfo = { template, segmentTimeline: segmentTimeline && findChildren$1(segmentTimeline, "S").map((s) => parseAttributes$2(s)), list: segmentList && merge$3(parseAttributes$2(segmentList), { segmentUrls, initialization: parseAttributes$2(segmentInitialization) }), base: segmentBase && merge$3(parseAttributes$2(segmentBase), { initialization: parseAttributes$2(segmentInitialization) }) }; Object.keys(segmentInfo).forEach((key) => { if (!segmentInfo[key]) { delete segmentInfo[key]; } }); return segmentInfo; }; const inheritBaseUrls$1 = (adaptationSetAttributes, adaptationSetBaseUrls, adaptationSetSegmentInfo) => (representation) => { const repBaseUrlElements = findChildren$1(representation, "BaseURL"); const repBaseUrls = buildBaseUrls$1(adaptationSetBaseUrls, repBaseUrlElements); const attributes = merge$3(adaptationSetAttributes, parseAttributes$2(representation)); const representationSegmentInfo = getSegmentInformation$1(representation); return repBaseUrls.map((baseUrl) => { return { segmentInfo: merge$3(adaptationSetSegmentInfo, representationSegmentInfo), attributes: merge$3(attributes, { baseUrl }) }; }); }; const generateKeySystemInformation$1 = (contentProtectionNodes) => { return contentProtectionNodes.reduce((acc, node) => { const attributes = parseAttributes$2(node); if (attributes.schemeIdUri) { attributes.schemeIdUri = attributes.schemeIdUri.toLowerCase(); } const keySystem = keySystemsMap$1[attributes.schemeIdUri]; if (keySystem) { acc[keySystem] = { attributes }; const psshNode = findChildren$1(node, "cenc:pssh")[0]; if (psshNode) { const pssh = getContent$1(psshNode); acc[keySystem].pssh = pssh && decodeB64ToUint8Array$1(pssh); } } return acc; }, {}); }; const parseCaptionServiceMetadata$1 = (service) => { if (service.schemeIdUri === "urn:scte:dash:cc:cea-608:2015") { const values3 = typeof service.value !== "string" ? [] : service.value.split(";"); return values3.map((value) => { let channel; let language; language = value; if (/^CC\d=/.test(value)) { [channel, language] = value.split("="); } else if (/^CC\d$/.test(value)) { channel = value; } return { channel, language }; }); } else if (service.schemeIdUri === "urn:scte:dash:cc:cea-708:2015") { const values3 = typeof service.value !== "string" ? [] : service.value.split(";"); return values3.map((value) => { const flags = { "channel": void 0, "language": void 0, "aspectRatio": 1, "easyReader": 0, "3D": 0 }; if (/=/.test(value)) { const [channel, opts = ""] = value.split("="); flags.channel = channel; flags.language = value; opts.split(",").forEach((opt) => { const [name, val] = opt.split(":"); if (name === "lang") { flags.language = val; } else if (name === "er") { flags.easyReader = Number(val); } else if (name === "war") { flags.aspectRatio = Number(val); } else if (name === "3D") { flags["3D"] = Number(val); } }); } else { flags.language = value; } if (flags.channel) { flags.channel = "SERVICE" + flags.channel; } return flags; }); } }; const toEventStream = (period) => { return flatten$1(findChildren$1(period.node, "EventStream").map((eventStream) => { const eventStreamAttributes = parseAttributes$2(eventStream); const schemeIdUri = eventStreamAttributes.schemeIdUri; return findChildren$1(eventStream, "Event").map((event2) => { const eventAttributes = parseAttributes$2(event2); const presentationTime = eventAttributes.presentationTime || 0; const timescale2 = eventStreamAttributes.timescale || 1; const duration5 = eventAttributes.duration || 0; const start2 = presentationTime / timescale2 + period.attributes.start; return { schemeIdUri, value: eventStreamAttributes.value, id: eventAttributes.id, start: start2, end: start2 + duration5 / timescale2, messageData: getContent$1(event2) || eventAttributes.messageData, contentEncoding: eventStreamAttributes.contentEncoding, presentationTimeOffset: eventStreamAttributes.presentationTimeOffset || 0 }; }); })); }; const toRepresentations$1 = (periodAttributes, periodBaseUrls, periodSegmentInfo) => (adaptationSet) => { const adaptationSetAttributes = parseAttributes$2(adaptationSet); const adaptationSetBaseUrls = buildBaseUrls$1(periodBaseUrls, findChildren$1(adaptationSet, "BaseURL")); const role = findChildren$1(adaptationSet, "Role")[0]; const roleAttributes = { role: parseAttributes$2(role) }; let attrs = merge$3(periodAttributes, adaptationSetAttributes, roleAttributes); const accessibility = findChildren$1(adaptationSet, "Accessibility")[0]; const captionServices = parseCaptionServiceMetadata$1(parseAttributes$2(accessibility)); if (captionServices) { attrs = merge$3(attrs, { captionServices }); } const label2 = findChildren$1(adaptationSet, "Label")[0]; if (label2 && label2.childNodes.length) { const labelVal = label2.childNodes[0].nodeValue.trim(); attrs = merge$3(attrs, { label: labelVal }); } const contentProtection = generateKeySystemInformation$1(findChildren$1(adaptationSet, "ContentProtection")); if (Object.keys(contentProtection).length) { attrs = merge$3(attrs, { contentProtection }); } const segmentInfo = getSegmentInformation$1(adaptationSet); const representations = findChildren$1(adaptationSet, "Representation"); const adaptationSetSegmentInfo = merge$3(periodSegmentInfo, segmentInfo); return flatten$1(representations.map(inheritBaseUrls$1(attrs, adaptationSetBaseUrls, adaptationSetSegmentInfo))); }; const toAdaptationSets$1 = (mpdAttributes, mpdBaseUrls) => (period, index2) => { const periodBaseUrls = buildBaseUrls$1(mpdBaseUrls, findChildren$1(period.node, "BaseURL")); const periodAttributes = merge$3(mpdAttributes, { periodStart: period.attributes.start }); if (typeof period.attributes.duration === "number") { periodAttributes.periodDuration = period.attributes.duration; } const adaptationSets = findChildren$1(period.node, "AdaptationSet"); const periodSegmentInfo = getSegmentInformation$1(period.node); return flatten$1(adaptationSets.map(toRepresentations$1(periodAttributes, periodBaseUrls, periodSegmentInfo))); }; const getPeriodStart$1 = ({ attributes, priorPeriodAttributes, mpdType }) => { if (typeof attributes.start === "number") { return attributes.start; } if (priorPeriodAttributes && typeof priorPeriodAttributes.start === "number" && typeof priorPeriodAttributes.duration === "number") { return priorPeriodAttributes.start + priorPeriodAttributes.duration; } if (!priorPeriodAttributes && mpdType === "static") { return 0; } return null; }; const inheritAttributes$1 = (mpd, options2 = {}) => { const { manifestUri = "", NOW = Date.now(), clientOffset = 0 } = options2; const periodNodes = findChildren$1(mpd, "Period"); if (!periodNodes.length) { throw new Error(errors$1.INVALID_NUMBER_OF_PERIOD); } const locations = findChildren$1(mpd, "Location"); const mpdAttributes = parseAttributes$2(mpd); const mpdBaseUrls = buildBaseUrls$1([manifestUri], findChildren$1(mpd, "BaseURL")); mpdAttributes.type = mpdAttributes.type || "static"; mpdAttributes.sourceDuration = mpdAttributes.mediaPresentationDuration || 0; mpdAttributes.NOW = NOW; mpdAttributes.clientOffset = clientOffset; if (locations.length) { mpdAttributes.locations = locations.map(getContent$1); } const periods = []; periodNodes.forEach((node, index2) => { const attributes = parseAttributes$2(node); const priorPeriod = periods[index2 - 1]; attributes.start = getPeriodStart$1({ attributes, priorPeriodAttributes: priorPeriod ? priorPeriod.attributes : null, mpdType: mpdAttributes.type }); periods.push({ node, attributes }); }); return { locations: mpdAttributes.locations, representationInfo: flatten$1(periods.map(toAdaptationSets$1(mpdAttributes, mpdBaseUrls))), eventStream: flatten$1(periods.map(toEventStream)) }; }; const stringToMpdXml$1 = (manifestString) => { if (manifestString === "") { throw new Error(errors$1.DASH_EMPTY_MANIFEST); } const parser2 = new DOMParser(); let xml; let mpd; try { xml = parser2.parseFromString(manifestString, "application/xml"); mpd = xml && xml.documentElement.tagName === "MPD" ? xml.documentElement : null; } catch (e) { } if (!mpd || mpd && mpd.getElementsByTagName("parsererror").length > 0) { throw new Error(errors$1.DASH_INVALID_XML); } return mpd; }; const parseUTCTimingScheme$1 = (mpd) => { const UTCTimingNode = findChildren$1(mpd, "UTCTiming")[0]; if (!UTCTimingNode) { return null; } const attributes = parseAttributes$2(UTCTimingNode); switch (attributes.schemeIdUri) { case "urn:mpeg:dash:utc:http-head:2014": case "urn:mpeg:dash:utc:http-head:2012": attributes.method = "HEAD"; break; case "urn:mpeg:dash:utc:http-xsdate:2014": case "urn:mpeg:dash:utc:http-iso:2014": case "urn:mpeg:dash:utc:http-xsdate:2012": case "urn:mpeg:dash:utc:http-iso:2012": attributes.method = "GET"; break; case "urn:mpeg:dash:utc:direct:2014": case "urn:mpeg:dash:utc:direct:2012": attributes.method = "DIRECT"; attributes.value = Date.parse(attributes.value); break; case "urn:mpeg:dash:utc:http-ntp:2014": case "urn:mpeg:dash:utc:ntp:2014": case "urn:mpeg:dash:utc:sntp:2014": default: throw new Error(errors$1.UNSUPPORTED_UTC_TIMING_SCHEME); } return attributes; }; const parse$1 = (manifestString, options2 = {}) => { const parsedManifestInfo = inheritAttributes$1(stringToMpdXml$1(manifestString), options2); const playlists = toPlaylists$1(parsedManifestInfo.representationInfo); return toM3u8$1({ dashPlaylists: playlists, locations: parsedManifestInfo.locations, sidxMapping: options2.sidxMapping, previousManifest: options2.previousManifest, eventStream: parsedManifestInfo.eventStream }); }; const parseUTCTiming$1 = (manifestString) => parseUTCTimingScheme$1(stringToMpdXml$1(manifestString)); var MAX_UINT32$1 = Math.pow(2, 32); var getUint64$3 = function(uint8) { var dv = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength); var value; if (dv.getBigUint64) { value = dv.getBigUint64(0); if (value < Number.MAX_SAFE_INTEGER) { return Number(value); } return value; } return dv.getUint32(0) * MAX_UINT32$1 + dv.getUint32(4); }; var numbers$1 = { getUint64: getUint64$3, MAX_UINT32: MAX_UINT32$1 }; var getUint64$2 = numbers$1.getUint64; var parseSidx$1 = function(data) { var view = new DataView(data.buffer, data.byteOffset, data.byteLength), result = { version: data[0], flags: new Uint8Array(data.subarray(1, 4)), references: [], referenceId: view.getUint32(4), timescale: view.getUint32(8) }, i2 = 12; if (result.version === 0) { result.earliestPresentationTime = view.getUint32(i2); result.firstOffset = view.getUint32(i2 + 4); i2 += 8; } else { result.earliestPresentationTime = getUint64$2(data.subarray(i2)); result.firstOffset = getUint64$2(data.subarray(i2 + 8)); i2 += 16; } i2 += 2; var referenceCount = view.getUint16(i2); i2 += 2; for (; referenceCount > 0; i2 += 12, referenceCount--) { result.references.push({ referenceType: (data[i2] & 128) >>> 7, referencedSize: view.getUint32(i2) & 2147483647, subsegmentDuration: view.getUint32(i2 + 4), startsWithSap: !!(data[i2 + 8] & 128), sapType: (data[i2 + 8] & 112) >>> 4, sapDeltaTime: view.getUint32(i2 + 8) & 268435455 }); } return result; }; var parseSidx_1$1 = parseSidx$1; var ID3$1 = toUint8$1([73, 68, 51]); var getId3Size$1 = function getId3Size(bytes, offset) { if (offset === void 0) { offset = 0; } bytes = toUint8$1(bytes); var flags = bytes[offset + 5]; var returnSize = bytes[offset + 6] << 21 | bytes[offset + 7] << 14 | bytes[offset + 8] << 7 | bytes[offset + 9]; var footerPresent = (flags & 16) >> 4; if (footerPresent) { return returnSize + 20; } return returnSize + 10; }; var getId3Offset$1 = function getId3Offset(bytes, offset) { if (offset === void 0) { offset = 0; } bytes = toUint8$1(bytes); if (bytes.length - offset < 10 || !bytesMatch$1(bytes, ID3$1, { offset })) { return offset; } offset += getId3Size$1(bytes, offset); return getId3Offset(bytes, offset); }; var normalizePath$3 = function normalizePath(path) { if (typeof path === "string") { return stringToBytes$1(path); } if (typeof path === "number") { return path; } return path; }; var normalizePaths$3 = function normalizePaths(paths) { if (!Array.isArray(paths)) { return [normalizePath$3(paths)]; } return paths.map(function(p) { return normalizePath$3(p); }); }; var findBox$1 = function findBox(bytes, paths, complete) { if (complete === void 0) { complete = false; } paths = normalizePaths$3(paths); bytes = toUint8$1(bytes); var results = []; if (!paths.length) { return results; } var i2 = 0; while (i2 < bytes.length) { var size = (bytes[i2] << 24 | bytes[i2 + 1] << 16 | bytes[i2 + 2] << 8 | bytes[i2 + 3]) >>> 0; var type2 = bytes.subarray(i2 + 4, i2 + 8); if (size === 0) { break; } var end = i2 + size; if (end > bytes.length) { if (complete) { break; } end = bytes.length; } var data = bytes.subarray(i2 + 8, end); if (bytesMatch$1(type2, paths[0])) { if (paths.length === 1) { results.push(data); } else { results.push.apply(results, findBox(data, paths.slice(1), complete)); } } i2 = end; } return results; }; var EBML_TAGS$1 = { EBML: toUint8$1([26, 69, 223, 163]), DocType: toUint8$1([66, 130]), Segment: toUint8$1([24, 83, 128, 103]), SegmentInfo: toUint8$1([21, 73, 169, 102]), Tracks: toUint8$1([22, 84, 174, 107]), Track: toUint8$1([174]), TrackNumber: toUint8$1([215]), DefaultDuration: toUint8$1([35, 227, 131]), TrackEntry: toUint8$1([174]), TrackType: toUint8$1([131]), FlagDefault: toUint8$1([136]), CodecID: toUint8$1([134]), CodecPrivate: toUint8$1([99, 162]), VideoTrack: toUint8$1([224]), AudioTrack: toUint8$1([225]), Cluster: toUint8$1([31, 67, 182, 117]), Timestamp: toUint8$1([231]), TimestampScale: toUint8$1([42, 215, 177]), BlockGroup: toUint8$1([160]), BlockDuration: toUint8$1([155]), Block: toUint8$1([161]), SimpleBlock: toUint8$1([163]) }; var LENGTH_TABLE$1 = [128, 64, 32, 16, 8, 4, 2, 1]; var getLength$1 = function getLength(byte) { var len = 1; for (var i2 = 0; i2 < LENGTH_TABLE$1.length; i2++) { if (byte & LENGTH_TABLE$1[i2]) { break; } len++; } return len; }; var getvint$1 = function getvint(bytes, offset, removeLength, signed) { if (removeLength === void 0) { removeLength = true; } if (signed === void 0) { signed = false; } var length = getLength$1(bytes[offset]); var valueBytes = bytes.subarray(offset, offset + length); if (removeLength) { valueBytes = Array.prototype.slice.call(bytes, offset, offset + length); valueBytes[0] ^= LENGTH_TABLE$1[length - 1]; } return { length, value: bytesToNumber$1(valueBytes, { signed }), bytes: valueBytes }; }; var normalizePath$2 = function normalizePath2(path) { if (typeof path === "string") { return path.match(/.{1,2}/g).map(function(p) { return normalizePath2(p); }); } if (typeof path === "number") { return numberToBytes$1(path); } return path; }; var normalizePaths$2 = function normalizePaths2(paths) { if (!Array.isArray(paths)) { return [normalizePath$2(paths)]; } return paths.map(function(p) { return normalizePath$2(p); }); }; var getInfinityDataSize$1 = function getInfinityDataSize(id, bytes, offset) { if (offset >= bytes.length) { return bytes.length; } var innerid = getvint$1(bytes, offset, false); if (bytesMatch$1(id.bytes, innerid.bytes)) { return offset; } var dataHeader = getvint$1(bytes, offset + innerid.length); return getInfinityDataSize(id, bytes, offset + dataHeader.length + dataHeader.value + innerid.length); }; var findEbml$1 = function findEbml(bytes, paths) { paths = normalizePaths$2(paths); bytes = toUint8$1(bytes); var results = []; if (!paths.length) { return results; } var i2 = 0; while (i2 < bytes.length) { var id = getvint$1(bytes, i2, false); var dataHeader = getvint$1(bytes, i2 + id.length); var dataStart = i2 + id.length + dataHeader.length; if (dataHeader.value === 127) { dataHeader.value = getInfinityDataSize$1(id, bytes, dataStart); if (dataHeader.value !== bytes.length) { dataHeader.value -= dataStart; } } var dataEnd = dataStart + dataHeader.value > bytes.length ? bytes.length : dataStart + dataHeader.value; var data = bytes.subarray(dataStart, dataEnd); if (bytesMatch$1(paths[0], id.bytes)) { if (paths.length === 1) { results.push(data); } else { results = results.concat(findEbml(data, paths.slice(1))); } } var totalLength = id.length + dataHeader.length + data.length; i2 += totalLength; } return results; }; var NAL_TYPE_ONE$1 = toUint8$1([0, 0, 0, 1]); var NAL_TYPE_TWO$1 = toUint8$1([0, 0, 1]); var EMULATION_PREVENTION$1 = toUint8$1([0, 0, 3]); var discardEmulationPreventionBytes$1 = function discardEmulationPreventionBytes(bytes) { var positions = []; var i2 = 1; while (i2 < bytes.length - 2) { if (bytesMatch$1(bytes.subarray(i2, i2 + 3), EMULATION_PREVENTION$1)) { positions.push(i2 + 2); i2++; } i2++; } if (positions.length === 0) { return bytes; } var newLength = bytes.length - positions.length; var newData = new Uint8Array(newLength); var sourceIndex = 0; for (i2 = 0; i2 < newLength; sourceIndex++, i2++) { if (sourceIndex === positions[0]) { sourceIndex++; positions.shift(); } newData[i2] = bytes[sourceIndex]; } return newData; }; var findNal$1 = function findNal(bytes, dataType, types, nalLimit) { if (nalLimit === void 0) { nalLimit = Infinity; } bytes = toUint8$1(bytes); types = [].concat(types); var i2 = 0; var nalStart; var nalsFound = 0; while (i2 < bytes.length && (nalsFound < nalLimit || nalStart)) { var nalOffset = void 0; if (bytesMatch$1(bytes.subarray(i2), NAL_TYPE_ONE$1)) { nalOffset = 4; } else if (bytesMatch$1(bytes.subarray(i2), NAL_TYPE_TWO$1)) { nalOffset = 3; } if (!nalOffset) { i2++; continue; } nalsFound++; if (nalStart) { return discardEmulationPreventionBytes$1(bytes.subarray(nalStart, i2)); } var nalType = void 0; if (dataType === "h264") { nalType = bytes[i2 + nalOffset] & 31; } else if (dataType === "h265") { nalType = bytes[i2 + nalOffset] >> 1 & 63; } if (types.indexOf(nalType) !== -1) { nalStart = i2 + nalOffset; } i2 += nalOffset + (dataType === "h264" ? 1 : 2); } return bytes.subarray(0, 0); }; var findH264Nal$1 = function findH264Nal(bytes, type2, nalLimit) { return findNal$1(bytes, "h264", type2, nalLimit); }; var findH265Nal$1 = function findH265Nal(bytes, type2, nalLimit) { return findNal$1(bytes, "h265", type2, nalLimit); }; var CONSTANTS$1 = { "webm": toUint8$1([119, 101, 98, 109]), "matroska": toUint8$1([109, 97, 116, 114, 111, 115, 107, 97]), "flac": toUint8$1([102, 76, 97, 67]), "ogg": toUint8$1([79, 103, 103, 83]), "ac3": toUint8$1([11, 119]), "riff": toUint8$1([82, 73, 70, 70]), "avi": toUint8$1([65, 86, 73]), "wav": toUint8$1([87, 65, 86, 69]), "3gp": toUint8$1([102, 116, 121, 112, 51, 103]), "mp4": toUint8$1([102, 116, 121, 112]), "fmp4": toUint8$1([115, 116, 121, 112]), "mov": toUint8$1([102, 116, 121, 112, 113, 116]), "moov": toUint8$1([109, 111, 111, 118]), "moof": toUint8$1([109, 111, 111, 102]) }; var _isLikely$1 = { aac: function aac(bytes) { var offset = getId3Offset$1(bytes); return bytesMatch$1(bytes, [255, 16], { offset, mask: [255, 22] }); }, mp3: function mp3(bytes) { var offset = getId3Offset$1(bytes); return bytesMatch$1(bytes, [255, 2], { offset, mask: [255, 6] }); }, webm: function webm(bytes) { var docType = findEbml$1(bytes, [EBML_TAGS$1.EBML, EBML_TAGS$1.DocType])[0]; return bytesMatch$1(docType, CONSTANTS$1.webm); }, mkv: function mkv(bytes) { var docType = findEbml$1(bytes, [EBML_TAGS$1.EBML, EBML_TAGS$1.DocType])[0]; return bytesMatch$1(docType, CONSTANTS$1.matroska); }, mp4: function mp4(bytes) { if (_isLikely$1["3gp"](bytes) || _isLikely$1.mov(bytes)) { return false; } if (bytesMatch$1(bytes, CONSTANTS$1.mp4, { offset: 4 }) || bytesMatch$1(bytes, CONSTANTS$1.fmp4, { offset: 4 })) { return true; } if (bytesMatch$1(bytes, CONSTANTS$1.moof, { offset: 4 }) || bytesMatch$1(bytes, CONSTANTS$1.moov, { offset: 4 })) { return true; } }, mov: function mov(bytes) { return bytesMatch$1(bytes, CONSTANTS$1.mov, { offset: 4 }); }, "3gp": function gp(bytes) { return bytesMatch$1(bytes, CONSTANTS$1["3gp"], { offset: 4 }); }, ac3: function ac3(bytes) { var offset = getId3Offset$1(bytes); return bytesMatch$1(bytes, CONSTANTS$1.ac3, { offset }); }, ts: function ts(bytes) { if (bytes.length < 189 && bytes.length >= 1) { return bytes[0] === 71; } var i2 = 0; while (i2 + 188 < bytes.length && i2 < 188) { if (bytes[i2] === 71 && bytes[i2 + 188] === 71) { return true; } i2 += 1; } return false; }, flac: function flac(bytes) { var offset = getId3Offset$1(bytes); return bytesMatch$1(bytes, CONSTANTS$1.flac, { offset }); }, ogg: function ogg(bytes) { return bytesMatch$1(bytes, CONSTANTS$1.ogg); }, avi: function avi(bytes) { return bytesMatch$1(bytes, CONSTANTS$1.riff) && bytesMatch$1(bytes, CONSTANTS$1.avi, { offset: 8 }); }, wav: function wav(bytes) { return bytesMatch$1(bytes, CONSTANTS$1.riff) && bytesMatch$1(bytes, CONSTANTS$1.wav, { offset: 8 }); }, "h264": function h264(bytes) { return findH264Nal$1(bytes, 7, 3).length; }, "h265": function h265(bytes) { return findH265Nal$1(bytes, [32, 33], 3).length; } }; var isLikelyTypes$1 = Object.keys(_isLikely$1).filter(function(t2) { return t2 !== "ts" && t2 !== "h264" && t2 !== "h265"; }).concat(["ts", "h264", "h265"]); isLikelyTypes$1.forEach(function(type2) { var isLikelyFn = _isLikely$1[type2]; _isLikely$1[type2] = function(bytes) { return isLikelyFn(toUint8$1(bytes)); }; }); var isLikely$1 = _isLikely$1; var detectContainerForBytes$1 = function detectContainerForBytes(bytes) { bytes = toUint8$1(bytes); for (var i2 = 0; i2 < isLikelyTypes$1.length; i2++) { var type2 = isLikelyTypes$1[i2]; if (isLikely$1[type2](bytes)) { return type2; } } return ""; }; var isLikelyFmp4MediaSegment$1 = function isLikelyFmp4MediaSegment(bytes) { return findBox$1(bytes, ["moof"]).length > 0; }; var ONE_SECOND_IN_TS$1 = 9e4, secondsToVideoTs$1, secondsToAudioTs$1, videoTsToSeconds$1, audioTsToSeconds$1, audioTsToVideoTs$1, videoTsToAudioTs$1, metadataTsToSeconds$1; secondsToVideoTs$1 = function(seconds) { return seconds * ONE_SECOND_IN_TS$1; }; secondsToAudioTs$1 = function(seconds, sampleRate) { return seconds * sampleRate; }; videoTsToSeconds$1 = function(timestamp) { return timestamp / ONE_SECOND_IN_TS$1; }; audioTsToSeconds$1 = function(timestamp, sampleRate) { return timestamp / sampleRate; }; audioTsToVideoTs$1 = function(timestamp, sampleRate) { return secondsToVideoTs$1(audioTsToSeconds$1(timestamp, sampleRate)); }; videoTsToAudioTs$1 = function(timestamp, sampleRate) { return secondsToAudioTs$1(videoTsToSeconds$1(timestamp), sampleRate); }; metadataTsToSeconds$1 = function(timestamp, timelineStartPts, keepOriginalTimestamps) { return videoTsToSeconds$1(keepOriginalTimestamps ? timestamp : timestamp - timelineStartPts); }; var clock$1 = { ONE_SECOND_IN_TS: ONE_SECOND_IN_TS$1, secondsToVideoTs: secondsToVideoTs$1, secondsToAudioTs: secondsToAudioTs$1, videoTsToSeconds: videoTsToSeconds$1, audioTsToSeconds: audioTsToSeconds$1, audioTsToVideoTs: audioTsToVideoTs$1, videoTsToAudioTs: videoTsToAudioTs$1, metadataTsToSeconds: metadataTsToSeconds$1 }; /** * @license * Video.js 8.3.0 * Copyright Brightcove, Inc. * Available under Apache License Version 2.0 * * * Includes vtt.js * Available under Apache License Version 2.0 * */ var version$6$1 = "8.3.0"; const hooks_$1 = {}; const hooks$1 = function(type2, fn2) { hooks_$1[type2] = hooks_$1[type2] || []; if (fn2) { hooks_$1[type2] = hooks_$1[type2].concat(fn2); } return hooks_$1[type2]; }; const hook$1 = function(type2, fn2) { hooks$1(type2, fn2); }; const removeHook$1 = function(type2, fn2) { const index2 = hooks$1(type2).indexOf(fn2); if (index2 <= -1) { return false; } hooks_$1[type2] = hooks_$1[type2].slice(); hooks_$1[type2].splice(index2, 1); return true; }; const hookOnce$1 = function(type2, fn2) { hooks$1(type2, [].concat(fn2).map((original) => { const wrapper = (...args) => { removeHook$1(type2, wrapper); return original(...args); }; return wrapper; })); }; const FullscreenApi$1 = { prefixed: true }; const apiMap$1 = [ ["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror", "fullscreen"], ["webkitRequestFullscreen", "webkitExitFullscreen", "webkitFullscreenElement", "webkitFullscreenEnabled", "webkitfullscreenchange", "webkitfullscreenerror", "-webkit-full-screen"], ["mozRequestFullScreen", "mozCancelFullScreen", "mozFullScreenElement", "mozFullScreenEnabled", "mozfullscreenchange", "mozfullscreenerror", "-moz-full-screen"], ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError", "-ms-fullscreen"] ]; const specApi$1 = apiMap$1[0]; let browserApi$1; for (let i2 = 0; i2 < apiMap$1.length; i2++) { if (apiMap$1[i2][1] in document_1) { browserApi$1 = apiMap$1[i2]; break; } } if (browserApi$1) { for (let i2 = 0; i2 < browserApi$1.length; i2++) { FullscreenApi$1[specApi$1[i2]] = browserApi$1[i2]; } FullscreenApi$1.prefixed = browserApi$1[0] !== specApi$1[0]; } let history$1 = []; const LogByTypeFactory$1 = (name, log2) => (type2, level, args) => { const lvl = log2.levels[level]; const lvlRegExp = new RegExp(`^(${lvl})$`); if (type2 !== "log") { args.unshift(type2.toUpperCase() + ":"); } args.unshift(name + ":"); if (history$1) { history$1.push([].concat(args)); const splice2 = history$1.length - 1e3; history$1.splice(0, splice2 > 0 ? splice2 : 0); } if (!window_1.console) { return; } let fn2 = window_1.console[type2]; if (!fn2 && type2 === "debug") { fn2 = window_1.console.info || window_1.console.log; } if (!fn2 || !lvl || !lvlRegExp.test(type2)) { return; } fn2[Array.isArray(args) ? "apply" : "call"](window_1.console, args); }; function createLogger$1$1(name) { let level = "info"; let logByType; const log2 = function(...args) { logByType("log", level, args); }; logByType = LogByTypeFactory$1(name, log2); log2.createLogger = (subname) => createLogger$1$1(name + ": " + subname); log2.levels = { all: "debug|log|warn|error", off: "", debug: "debug|log|warn|error", info: "log|warn|error", warn: "warn|error", error: "error", DEFAULT: level }; log2.level = (lvl) => { if (typeof lvl === "string") { if (!log2.levels.hasOwnProperty(lvl)) { throw new Error(`"${lvl}" in not a valid log level`); } level = lvl; } return level; }; log2.history = () => history$1 ? [].concat(history$1) : []; log2.history.filter = (fname) => { return (history$1 || []).filter((historyItem) => { return new RegExp(`.*${fname}.*`).test(historyItem[0]); }); }; log2.history.clear = () => { if (history$1) { history$1.length = 0; } }; log2.history.disable = () => { if (history$1 !== null) { history$1.length = 0; history$1 = null; } }; log2.history.enable = () => { if (history$1 === null) { history$1 = []; } }; log2.error = (...args) => logByType("error", level, args); log2.warn = (...args) => logByType("warn", level, args); log2.debug = (...args) => logByType("debug", level, args); return log2; } const log$1$1 = createLogger$1$1("VIDEOJS"); const createLogger$2 = log$1$1.createLogger; const toString$1 = Object.prototype.toString; const keys$1 = function(object) { return isObject$2(object) ? Object.keys(object) : []; }; function each$1(object, fn2) { keys$1(object).forEach((key) => fn2(object[key], key)); } function reduce$1(object, fn2, initial = 0) { return keys$1(object).reduce((accum, key) => fn2(accum, object[key], key), initial); } function isObject$2(value) { return !!value && typeof value === "object"; } function isPlain$1(value) { return isObject$2(value) && toString$1.call(value) === "[object Object]" && value.constructor === Object; } function merge$1(...sources) { const result = {}; sources.forEach((source) => { if (!source) { return; } each$1(source, (value, key) => { if (!isPlain$1(value)) { result[key] = value; return; } if (!isPlain$1(result[key])) { result[key] = {}; } result[key] = merge$1(result[key], value); }); }); return result; } function defineLazyProperty$1(obj, key, getValue2, setter = true) { const set4 = (value) => Object.defineProperty(obj, key, { value, enumerable: true, writable: true }); const options2 = { configurable: true, enumerable: true, get() { const value = getValue2(); set4(value); return value; } }; if (setter) { options2.set = set4; } return Object.defineProperty(obj, key, options2); } var Obj = /* @__PURE__ */ Object.freeze({ __proto__: null, each: each$1, reduce: reduce$1, isObject: isObject$2, isPlain: isPlain$1, merge: merge$1, defineLazyProperty: defineLazyProperty$1 }); let IS_IPOD$1 = false; let IOS_VERSION$1 = null; let IS_ANDROID$1 = false; let ANDROID_VERSION$1; let IS_FIREFOX$1 = false; let IS_EDGE$1 = false; let IS_CHROMIUM = false; let IS_CHROME$1 = false; let CHROMIUM_VERSION = null; let CHROME_VERSION$1 = null; let IE_VERSION$1 = null; let IS_SAFARI$1 = false; let IS_WINDOWS$1 = false; let IS_IPAD$1 = false; let IS_IPHONE$1 = false; const TOUCH_ENABLED$1 = Boolean(isReal$1() && ("ontouchstart" in window_1 || window_1.navigator.maxTouchPoints || window_1.DocumentTouch && window_1.document instanceof window_1.DocumentTouch)); const UAD = window_1.navigator && window_1.navigator.userAgentData; if (UAD) { IS_ANDROID$1 = UAD.platform === "Android"; IS_EDGE$1 = Boolean(UAD.brands.find((b) => b.brand === "Microsoft Edge")); IS_CHROMIUM = Boolean(UAD.brands.find((b) => b.brand === "Chromium")); IS_CHROME$1 = !IS_EDGE$1 && IS_CHROMIUM; CHROMIUM_VERSION = CHROME_VERSION$1 = (UAD.brands.find((b) => b.brand === "Chromium") || {}).version || null; IS_WINDOWS$1 = UAD.platform === "Windows"; } if (!IS_CHROMIUM) { const USER_AGENT2 = window_1.navigator && window_1.navigator.userAgent || ""; IS_IPOD$1 = /iPod/i.test(USER_AGENT2); IOS_VERSION$1 = function() { const match = USER_AGENT2.match(/OS (\d+)_/i); if (match && match[1]) { return match[1]; } return null; }(); IS_ANDROID$1 = /Android/i.test(USER_AGENT2); ANDROID_VERSION$1 = function() { const match = USER_AGENT2.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i); if (!match) { return null; } const major = match[1] && parseFloat(match[1]); const minor = match[2] && parseFloat(match[2]); if (major && minor) { return parseFloat(match[1] + "." + match[2]); } else if (major) { return major; } return null; }(); IS_FIREFOX$1 = /Firefox/i.test(USER_AGENT2); IS_EDGE$1 = /Edg/i.test(USER_AGENT2); IS_CHROMIUM = /Chrome/i.test(USER_AGENT2) || /CriOS/i.test(USER_AGENT2); IS_CHROME$1 = !IS_EDGE$1 && IS_CHROMIUM; CHROMIUM_VERSION = CHROME_VERSION$1 = function() { const match = USER_AGENT2.match(/(Chrome|CriOS)\/(\d+)/); if (match && match[2]) { return parseFloat(match[2]); } return null; }(); IE_VERSION$1 = function() { const result = /MSIE\s(\d+)\.\d/.exec(USER_AGENT2); let version2 = result && parseFloat(result[1]); if (!version2 && /Trident\/7.0/i.test(USER_AGENT2) && /rv:11.0/.test(USER_AGENT2)) { version2 = 11; } return version2; }(); IS_SAFARI$1 = /Safari/i.test(USER_AGENT2) && !IS_CHROME$1 && !IS_ANDROID$1 && !IS_EDGE$1; IS_WINDOWS$1 = /Windows/i.test(USER_AGENT2); IS_IPAD$1 = /iPad/i.test(USER_AGENT2) || IS_SAFARI$1 && TOUCH_ENABLED$1 && !/iPhone/i.test(USER_AGENT2); IS_IPHONE$1 = /iPhone/i.test(USER_AGENT2) && !IS_IPAD$1; } const IS_IOS$1 = IS_IPHONE$1 || IS_IPAD$1 || IS_IPOD$1; const IS_ANY_SAFARI$1 = (IS_SAFARI$1 || IS_IOS$1) && !IS_CHROME$1; var browser$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, get IS_IPOD() { return IS_IPOD$1; }, get IOS_VERSION() { return IOS_VERSION$1; }, get IS_ANDROID() { return IS_ANDROID$1; }, get ANDROID_VERSION() { return ANDROID_VERSION$1; }, get IS_FIREFOX() { return IS_FIREFOX$1; }, get IS_EDGE() { return IS_EDGE$1; }, get IS_CHROMIUM() { return IS_CHROMIUM; }, get IS_CHROME() { return IS_CHROME$1; }, get CHROMIUM_VERSION() { return CHROMIUM_VERSION; }, get CHROME_VERSION() { return CHROME_VERSION$1; }, get IE_VERSION() { return IE_VERSION$1; }, get IS_SAFARI() { return IS_SAFARI$1; }, get IS_WINDOWS() { return IS_WINDOWS$1; }, get IS_IPAD() { return IS_IPAD$1; }, get IS_IPHONE() { return IS_IPHONE$1; }, TOUCH_ENABLED: TOUCH_ENABLED$1, IS_IOS: IS_IOS$1, IS_ANY_SAFARI: IS_ANY_SAFARI$1 }); function isNonBlankString$1(str) { return typeof str === "string" && Boolean(str.trim()); } function throwIfWhitespace$1(str) { if (str.indexOf(" ") >= 0) { throw new Error("class has illegal whitespace characters"); } } function isReal$1() { return document_1 === window_1.document; } function isEl$1(value) { return isObject$2(value) && value.nodeType === 1; } function isInFrame$1() { try { return window_1.parent !== window_1.self; } catch (x) { return true; } } function createQuerier$1(method) { return function(selector, context) { if (!isNonBlankString$1(selector)) { return document_1[method](null); } if (isNonBlankString$1(context)) { context = document_1.querySelector(context); } const ctx = isEl$1(context) ? context : document_1; return ctx[method] && ctx[method](selector); }; } function createEl$1(tagName = "div", properties = {}, attributes = {}, content) { const el = document_1.createElement(tagName); Object.getOwnPropertyNames(properties).forEach(function(propName) { const val = properties[propName]; if (propName === "textContent") { textContent$1(el, val); } else if (el[propName] !== val || propName === "tabIndex") { el[propName] = val; } }); Object.getOwnPropertyNames(attributes).forEach(function(attrName) { el.setAttribute(attrName, attributes[attrName]); }); if (content) { appendContent$1(el, content); } return el; } function textContent$1(el, text) { if (typeof el.textContent === "undefined") { el.innerText = text; } else { el.textContent = text; } return el; } function prependTo$1(child, parent) { if (parent.firstChild) { parent.insertBefore(child, parent.firstChild); } else { parent.appendChild(child); } } function hasClass$1(element, classToCheck) { throwIfWhitespace$1(classToCheck); return element.classList.contains(classToCheck); } function addClass$1(element, ...classesToAdd) { element.classList.add(...classesToAdd.reduce((prev, current) => prev.concat(current.split(/\s+/)), [])); return element; } function removeClass$1(element, ...classesToRemove) { if (!element) { log$1$1.warn("removeClass was called with an element that doesn't exist"); return null; } element.classList.remove(...classesToRemove.reduce((prev, current) => prev.concat(current.split(/\s+/)), [])); return element; } function toggleClass$1(element, classToToggle, predicate) { if (typeof predicate === "function") { predicate = predicate(element, classToToggle); } if (typeof predicate !== "boolean") { predicate = void 0; } classToToggle.split(/\s+/).forEach((className) => element.classList.toggle(className, predicate)); return element; } function setAttributes$1(el, attributes) { Object.getOwnPropertyNames(attributes).forEach(function(attrName) { const attrValue = attributes[attrName]; if (attrValue === null || typeof attrValue === "undefined" || attrValue === false) { el.removeAttribute(attrName); } else { el.setAttribute(attrName, attrValue === true ? "" : attrValue); } }); } function getAttributes$1(tag) { const obj = {}; const knownBooleans = ",autoplay,controls,playsinline,loop,muted,default,defaultMuted,"; if (tag && tag.attributes && tag.attributes.length > 0) { const attrs = tag.attributes; for (let i2 = attrs.length - 1; i2 >= 0; i2--) { const attrName = attrs[i2].name; let attrVal = attrs[i2].value; if (typeof tag[attrName] === "boolean" || knownBooleans.indexOf("," + attrName + ",") !== -1) { attrVal = attrVal !== null ? true : false; } obj[attrName] = attrVal; } } return obj; } function getAttribute$1(el, attribute) { return el.getAttribute(attribute); } function setAttribute$1(el, attribute, value) { el.setAttribute(attribute, value); } function removeAttribute$1(el, attribute) { el.removeAttribute(attribute); } function blockTextSelection$1() { document_1.body.focus(); document_1.onselectstart = function() { return false; }; } function unblockTextSelection$1() { document_1.onselectstart = function() { return true; }; } function getBoundingClientRect$1(el) { if (el && el.getBoundingClientRect && el.parentNode) { const rect = el.getBoundingClientRect(); const result = {}; ["bottom", "height", "left", "right", "top", "width"].forEach((k) => { if (rect[k] !== void 0) { result[k] = rect[k]; } }); if (!result.height) { result.height = parseFloat(computedStyle$1(el, "height")); } if (!result.width) { result.width = parseFloat(computedStyle$1(el, "width")); } return result; } } function findPosition$1(el) { if (!el || el && !el.offsetParent) { return { left: 0, top: 0, width: 0, height: 0 }; } const width2 = el.offsetWidth; const height2 = el.offsetHeight; let left = 0; let top = 0; while (el.offsetParent && el !== document_1[FullscreenApi$1.fullscreenElement]) { left += el.offsetLeft; top += el.offsetTop; el = el.offsetParent; } return { left, top, width: width2, height: height2 }; } function getPointerPosition$1(el, event2) { const translated = { x: 0, y: 0 }; if (IS_IOS$1) { let item = el; while (item && item.nodeName.toLowerCase() !== "html") { const transform3 = computedStyle$1(item, "transform"); if (/^matrix/.test(transform3)) { const values3 = transform3.slice(7, -1).split(/,\s/).map(Number); translated.x += values3[4]; translated.y += values3[5]; } else if (/^matrix3d/.test(transform3)) { const values3 = transform3.slice(9, -1).split(/,\s/).map(Number); translated.x += values3[12]; translated.y += values3[13]; } item = item.parentNode; } } const position2 = {}; const boxTarget = findPosition$1(event2.target); const box = findPosition$1(el); const boxW = box.width; const boxH = box.height; let offsetY = event2.offsetY - (box.top - boxTarget.top); let offsetX = event2.offsetX - (box.left - boxTarget.left); if (event2.changedTouches) { offsetX = event2.changedTouches[0].pageX - box.left; offsetY = event2.changedTouches[0].pageY + box.top; if (IS_IOS$1) { offsetX -= translated.x; offsetY -= translated.y; } } position2.y = 1 - Math.max(0, Math.min(1, offsetY / boxH)); position2.x = Math.max(0, Math.min(1, offsetX / boxW)); return position2; } function isTextNode$1(value) { return isObject$2(value) && value.nodeType === 3; } function emptyEl$1(el) { while (el.firstChild) { el.removeChild(el.firstChild); } return el; } function normalizeContent$1(content) { if (typeof content === "function") { content = content(); } return (Array.isArray(content) ? content : [content]).map((value) => { if (typeof value === "function") { value = value(); } if (isEl$1(value) || isTextNode$1(value)) { return value; } if (typeof value === "string" && /\S/.test(value)) { return document_1.createTextNode(value); } }).filter((value) => value); } function appendContent$1(el, content) { normalizeContent$1(content).forEach((node) => el.appendChild(node)); return el; } function insertContent$1(el, content) { return appendContent$1(emptyEl$1(el), content); } function isSingleLeftClick$1(event2) { if (event2.button === void 0 && event2.buttons === void 0) { return true; } if (event2.button === 0 && event2.buttons === void 0) { return true; } if (event2.type === "mouseup" && event2.button === 0 && event2.buttons === 0) { return true; } if (event2.button !== 0 || event2.buttons !== 1) { return false; } return true; } const $$1 = createQuerier$1("querySelector"); const $$$1 = createQuerier$1("querySelectorAll"); function computedStyle$1(el, prop) { if (!el || !prop) { return ""; } if (typeof window_1.getComputedStyle === "function") { let computedStyleValue; try { computedStyleValue = window_1.getComputedStyle(el); } catch (e) { return ""; } return computedStyleValue ? computedStyleValue.getPropertyValue(prop) || computedStyleValue[prop] : ""; } return ""; } var Dom$2 = /* @__PURE__ */ Object.freeze({ __proto__: null, isReal: isReal$1, isEl: isEl$1, isInFrame: isInFrame$1, createEl: createEl$1, textContent: textContent$1, prependTo: prependTo$1, hasClass: hasClass$1, addClass: addClass$1, removeClass: removeClass$1, toggleClass: toggleClass$1, setAttributes: setAttributes$1, getAttributes: getAttributes$1, getAttribute: getAttribute$1, setAttribute: setAttribute$1, removeAttribute: removeAttribute$1, blockTextSelection: blockTextSelection$1, unblockTextSelection: unblockTextSelection$1, getBoundingClientRect: getBoundingClientRect$1, findPosition: findPosition$1, getPointerPosition: getPointerPosition$1, isTextNode: isTextNode$1, emptyEl: emptyEl$1, normalizeContent: normalizeContent$1, appendContent: appendContent$1, insertContent: insertContent$1, isSingleLeftClick: isSingleLeftClick$1, $: $$1, $$: $$$1, computedStyle: computedStyle$1 }); let _windowLoaded$1 = false; let videojs$1$1; const autoSetup$1 = function() { if (videojs$1$1.options.autoSetup === false) { return; } const vids = Array.prototype.slice.call(document_1.getElementsByTagName("video")); const audios = Array.prototype.slice.call(document_1.getElementsByTagName("audio")); const divs = Array.prototype.slice.call(document_1.getElementsByTagName("video-js")); const mediaEls = vids.concat(audios, divs); if (mediaEls && mediaEls.length > 0) { for (let i2 = 0, e = mediaEls.length; i2 < e; i2++) { const mediaEl = mediaEls[i2]; if (mediaEl && mediaEl.getAttribute) { if (mediaEl.player === void 0) { const options2 = mediaEl.getAttribute("data-setup"); if (options2 !== null) { videojs$1$1(mediaEl); } } } else { autoSetupTimeout$1(1); break; } } } else if (!_windowLoaded$1) { autoSetupTimeout$1(1); } }; function autoSetupTimeout$1(wait, vjs) { if (!isReal$1()) { return; } if (vjs) { videojs$1$1 = vjs; } window_1.setTimeout(autoSetup$1, wait); } function setWindowLoaded$1() { _windowLoaded$1 = true; window_1.removeEventListener("load", setWindowLoaded$1); } if (isReal$1()) { if (document_1.readyState === "complete") { setWindowLoaded$1(); } else { window_1.addEventListener("load", setWindowLoaded$1); } } const createStyleElement$1 = function(className) { const style = document_1.createElement("style"); style.className = className; return style; }; const setTextContent$1 = function(el, content) { if (el.styleSheet) { el.styleSheet.cssText = content; } else { el.textContent = content; } }; var DomData$1 = /* @__PURE__ */ new WeakMap(); const _initialGuid$1 = 3; let _guid$1 = _initialGuid$1; function newGUID$1() { return _guid$1++; } function _cleanUpEvents$1(elem, type2) { if (!DomData$1.has(elem)) { return; } const data = DomData$1.get(elem); if (data.handlers[type2].length === 0) { delete data.handlers[type2]; if (elem.removeEventListener) { elem.removeEventListener(type2, data.dispatcher, false); } else if (elem.detachEvent) { elem.detachEvent("on" + type2, data.dispatcher); } } if (Object.getOwnPropertyNames(data.handlers).length <= 0) { delete data.handlers; delete data.dispatcher; delete data.disabled; } if (Object.getOwnPropertyNames(data).length === 0) { DomData$1.delete(elem); } } function _handleMultipleEvents$1(fn2, elem, types, callback2) { types.forEach(function(type2) { fn2(elem, type2, callback2); }); } function fixEvent$1(event2) { if (event2.fixed_) { return event2; } function returnTrue() { return true; } function returnFalse() { return false; } if (!event2 || !event2.isPropagationStopped || !event2.isImmediatePropagationStopped) { const old = event2 || window_1.event; event2 = {}; for (const key in old) { if (key !== "layerX" && key !== "layerY" && key !== "keyLocation" && key !== "webkitMovementX" && key !== "webkitMovementY" && key !== "path") { if (!(key === "returnValue" && old.preventDefault)) { event2[key] = old[key]; } } } if (!event2.target) { event2.target = event2.srcElement || document_1; } if (!event2.relatedTarget) { event2.relatedTarget = event2.fromElement === event2.target ? event2.toElement : event2.fromElement; } event2.preventDefault = function() { if (old.preventDefault) { old.preventDefault(); } event2.returnValue = false; old.returnValue = false; event2.defaultPrevented = true; }; event2.defaultPrevented = false; event2.stopPropagation = function() { if (old.stopPropagation) { old.stopPropagation(); } event2.cancelBubble = true; old.cancelBubble = true; event2.isPropagationStopped = returnTrue; }; event2.isPropagationStopped = returnFalse; event2.stopImmediatePropagation = function() { if (old.stopImmediatePropagation) { old.stopImmediatePropagation(); } event2.isImmediatePropagationStopped = returnTrue; event2.stopPropagation(); }; event2.isImmediatePropagationStopped = returnFalse; if (event2.clientX !== null && event2.clientX !== void 0) { const doc = document_1.documentElement; const body = document_1.body; event2.pageX = event2.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); event2.pageY = event2.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); } event2.which = event2.charCode || event2.keyCode; if (event2.button !== null && event2.button !== void 0) { event2.button = event2.button & 1 ? 0 : event2.button & 4 ? 1 : event2.button & 2 ? 2 : 0; } } event2.fixed_ = true; return event2; } let _supportsPassive$1; const supportsPassive$1 = function() { if (typeof _supportsPassive$1 !== "boolean") { _supportsPassive$1 = false; try { const opts = Object.defineProperty({}, "passive", { get() { _supportsPassive$1 = true; } }); window_1.addEventListener("test", null, opts); window_1.removeEventListener("test", null, opts); } catch (e) { } } return _supportsPassive$1; }; const passiveEvents$1 = ["touchstart", "touchmove"]; function on$1(elem, type2, fn2) { if (Array.isArray(type2)) { return _handleMultipleEvents$1(on$1, elem, type2, fn2); } if (!DomData$1.has(elem)) { DomData$1.set(elem, {}); } const data = DomData$1.get(elem); if (!data.handlers) { data.handlers = {}; } if (!data.handlers[type2]) { data.handlers[type2] = []; } if (!fn2.guid) { fn2.guid = newGUID$1(); } data.handlers[type2].push(fn2); if (!data.dispatcher) { data.disabled = false; data.dispatcher = function(event2, hash) { if (data.disabled) { return; } event2 = fixEvent$1(event2); const handlers = data.handlers[event2.type]; if (handlers) { const handlersCopy = handlers.slice(0); for (let m = 0, n = handlersCopy.length; m < n; m++) { if (event2.isImmediatePropagationStopped()) { break; } else { try { handlersCopy[m].call(elem, event2, hash); } catch (e) { log$1$1.error(e); } } } } }; } if (data.handlers[type2].length === 1) { if (elem.addEventListener) { let options2 = false; if (supportsPassive$1() && passiveEvents$1.indexOf(type2) > -1) { options2 = { passive: true }; } elem.addEventListener(type2, data.dispatcher, options2); } else if (elem.attachEvent) { elem.attachEvent("on" + type2, data.dispatcher); } } } function off$1(elem, type2, fn2) { if (!DomData$1.has(elem)) { return; } const data = DomData$1.get(elem); if (!data.handlers) { return; } if (Array.isArray(type2)) { return _handleMultipleEvents$1(off$1, elem, type2, fn2); } const removeType = function(el, t2) { data.handlers[t2] = []; _cleanUpEvents$1(el, t2); }; if (type2 === void 0) { for (const t2 in data.handlers) { if (Object.prototype.hasOwnProperty.call(data.handlers || {}, t2)) { removeType(elem, t2); } } return; } const handlers = data.handlers[type2]; if (!handlers) { return; } if (!fn2) { removeType(elem, type2); return; } if (fn2.guid) { for (let n = 0; n < handlers.length; n++) { if (handlers[n].guid === fn2.guid) { handlers.splice(n--, 1); } } } _cleanUpEvents$1(elem, type2); } function trigger$1(elem, event2, hash) { const elemData = DomData$1.has(elem) ? DomData$1.get(elem) : {}; const parent = elem.parentNode || elem.ownerDocument; if (typeof event2 === "string") { event2 = { type: event2, target: elem }; } else if (!event2.target) { event2.target = elem; } event2 = fixEvent$1(event2); if (elemData.dispatcher) { elemData.dispatcher.call(elem, event2, hash); } if (parent && !event2.isPropagationStopped() && event2.bubbles === true) { trigger$1.call(null, parent, event2, hash); } else if (!parent && !event2.defaultPrevented && event2.target && event2.target[event2.type]) { if (!DomData$1.has(event2.target)) { DomData$1.set(event2.target, {}); } const targetData = DomData$1.get(event2.target); if (event2.target[event2.type]) { targetData.disabled = true; if (typeof event2.target[event2.type] === "function") { event2.target[event2.type](); } targetData.disabled = false; } } return !event2.defaultPrevented; } function one$1(elem, type2, fn2) { if (Array.isArray(type2)) { return _handleMultipleEvents$1(one$1, elem, type2, fn2); } const func = function() { off$1(elem, type2, func); fn2.apply(this, arguments); }; func.guid = fn2.guid = fn2.guid || newGUID$1(); on$1(elem, type2, func); } function any$1(elem, type2, fn2) { const func = function() { off$1(elem, type2, func); fn2.apply(this, arguments); }; func.guid = fn2.guid = fn2.guid || newGUID$1(); on$1(elem, type2, func); } var Events$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, fixEvent: fixEvent$1, on: on$1, off: off$1, trigger: trigger$1, one: one$1, any: any$1 }); const UPDATE_REFRESH_INTERVAL$1 = 30; const bind_ = function(context, fn2, uid) { if (!fn2.guid) { fn2.guid = newGUID$1(); } const bound = fn2.bind(context); bound.guid = uid ? uid + "_" + fn2.guid : fn2.guid; return bound; }; const throttle$1 = function(fn2, wait) { let last = window_1.performance.now(); const throttled = function(...args) { const now2 = window_1.performance.now(); if (now2 - last >= wait) { fn2(...args); last = now2; } }; return throttled; }; const debounce$1 = function(func, wait, immediate, context = window_1) { let timeout; const cancel = () => { context.clearTimeout(timeout); timeout = null; }; const debounced = function() { const self2 = this; const args = arguments; let later = function() { timeout = null; later = null; if (!immediate) { func.apply(self2, args); } }; if (!timeout && immediate) { func.apply(self2, args); } context.clearTimeout(timeout); timeout = context.setTimeout(later, wait); }; debounced.cancel = cancel; return debounced; }; var Fn = /* @__PURE__ */ Object.freeze({ __proto__: null, UPDATE_REFRESH_INTERVAL: UPDATE_REFRESH_INTERVAL$1, bind_, throttle: throttle$1, debounce: debounce$1 }); let EVENT_MAP$1; class EventTarget$2$1 { on(type2, fn2) { const ael = this.addEventListener; this.addEventListener = () => { }; on$1(this, type2, fn2); this.addEventListener = ael; } off(type2, fn2) { off$1(this, type2, fn2); } one(type2, fn2) { const ael = this.addEventListener; this.addEventListener = () => { }; one$1(this, type2, fn2); this.addEventListener = ael; } any(type2, fn2) { const ael = this.addEventListener; this.addEventListener = () => { }; any$1(this, type2, fn2); this.addEventListener = ael; } trigger(event2) { const type2 = event2.type || event2; if (typeof event2 === "string") { event2 = { type: type2 }; } event2 = fixEvent$1(event2); if (this.allowedEvents_[type2] && this["on" + type2]) { this["on" + type2](event2); } trigger$1(this, event2); } queueTrigger(event2) { if (!EVENT_MAP$1) { EVENT_MAP$1 = /* @__PURE__ */ new Map(); } const type2 = event2.type || event2; let map = EVENT_MAP$1.get(this); if (!map) { map = /* @__PURE__ */ new Map(); EVENT_MAP$1.set(this, map); } const oldTimeout = map.get(type2); map.delete(type2); window_1.clearTimeout(oldTimeout); const timeout = window_1.setTimeout(() => { map.delete(type2); if (map.size === 0) { map = null; EVENT_MAP$1.delete(this); } this.trigger(event2); }, 0); map.set(type2, timeout); } } EventTarget$2$1.prototype.allowedEvents_ = {}; EventTarget$2$1.prototype.addEventListener = EventTarget$2$1.prototype.on; EventTarget$2$1.prototype.removeEventListener = EventTarget$2$1.prototype.off; EventTarget$2$1.prototype.dispatchEvent = EventTarget$2$1.prototype.trigger; const objName$1 = (obj) => { if (typeof obj.name === "function") { return obj.name(); } if (typeof obj.name === "string") { return obj.name; } if (obj.name_) { return obj.name_; } if (obj.constructor && obj.constructor.name) { return obj.constructor.name; } return typeof obj; }; const isEvented$1 = (object) => object instanceof EventTarget$2$1 || !!object.eventBusEl_ && ["on", "one", "off", "trigger"].every((k) => typeof object[k] === "function"); const addEventedCallback$1 = (target, callback2) => { if (isEvented$1(target)) { callback2(); } else { if (!target.eventedCallbacks) { target.eventedCallbacks = []; } target.eventedCallbacks.push(callback2); } }; const isValidEventType$1 = (type2) => typeof type2 === "string" && /\S/.test(type2) || Array.isArray(type2) && !!type2.length; const validateTarget$1 = (target, obj, fnName) => { if (!target || !target.nodeName && !isEvented$1(target)) { throw new Error(`Invalid target for ${objName$1(obj)}#${fnName}; must be a DOM node or evented object.`); } }; const validateEventType$1 = (type2, obj, fnName) => { if (!isValidEventType$1(type2)) { throw new Error(`Invalid event type for ${objName$1(obj)}#${fnName}; must be a non-empty string or array.`); } }; const validateListener$1 = (listener, obj, fnName) => { if (typeof listener !== "function") { throw new Error(`Invalid listener for ${objName$1(obj)}#${fnName}; must be a function.`); } }; const normalizeListenArgs$1 = (self2, args, fnName) => { const isTargetingSelf = args.length < 3 || args[0] === self2 || args[0] === self2.eventBusEl_; let target; let type2; let listener; if (isTargetingSelf) { target = self2.eventBusEl_; if (args.length >= 3) { args.shift(); } [type2, listener] = args; } else { [target, type2, listener] = args; } validateTarget$1(target, self2, fnName); validateEventType$1(type2, self2, fnName); validateListener$1(listener, self2, fnName); listener = bind_(self2, listener); return { isTargetingSelf, target, type: type2, listener }; }; const listen$1 = (target, method, type2, listener) => { validateTarget$1(target, target, method); if (target.nodeName) { Events$1[method](target, type2, listener); } else { target[method](type2, listener); } }; const EventedMixin$1 = { on(...args) { const { isTargetingSelf, target, type: type2, listener } = normalizeListenArgs$1(this, args, "on"); listen$1(target, "on", type2, listener); if (!isTargetingSelf) { const removeListenerOnDispose = () => this.off(target, type2, listener); removeListenerOnDispose.guid = listener.guid; const removeRemoverOnTargetDispose = () => this.off("dispose", removeListenerOnDispose); removeRemoverOnTargetDispose.guid = listener.guid; listen$1(this, "on", "dispose", removeListenerOnDispose); listen$1(target, "on", "dispose", removeRemoverOnTargetDispose); } }, one(...args) { const { isTargetingSelf, target, type: type2, listener } = normalizeListenArgs$1(this, args, "one"); if (isTargetingSelf) { listen$1(target, "one", type2, listener); } else { const wrapper = (...largs) => { this.off(target, type2, wrapper); listener.apply(null, largs); }; wrapper.guid = listener.guid; listen$1(target, "one", type2, wrapper); } }, any(...args) { const { isTargetingSelf, target, type: type2, listener } = normalizeListenArgs$1(this, args, "any"); if (isTargetingSelf) { listen$1(target, "any", type2, listener); } else { const wrapper = (...largs) => { this.off(target, type2, wrapper); listener.apply(null, largs); }; wrapper.guid = listener.guid; listen$1(target, "any", type2, wrapper); } }, off(targetOrType, typeOrListener, listener) { if (!targetOrType || isValidEventType$1(targetOrType)) { off$1(this.eventBusEl_, targetOrType, typeOrListener); } else { const target = targetOrType; const type2 = typeOrListener; validateTarget$1(target, this, "off"); validateEventType$1(type2, this, "off"); validateListener$1(listener, this, "off"); listener = bind_(this, listener); this.off("dispose", listener); if (target.nodeName) { off$1(target, type2, listener); off$1(target, "dispose", listener); } else if (isEvented$1(target)) { target.off(type2, listener); target.off("dispose", listener); } } }, trigger(event2, hash) { validateTarget$1(this.eventBusEl_, this, "trigger"); const type2 = event2 && typeof event2 !== "string" ? event2.type : event2; if (!isValidEventType$1(type2)) { throw new Error(`Invalid event type for ${objName$1(this)}#trigger; must be a non-empty string or object with a type key that has a non-empty value.`); } return trigger$1(this.eventBusEl_, event2, hash); } }; function evented$1(target, options2 = {}) { const { eventBusKey } = options2; if (eventBusKey) { if (!target[eventBusKey].nodeName) { throw new Error(`The eventBusKey "${eventBusKey}" does not refer to an element.`); } target.eventBusEl_ = target[eventBusKey]; } else { target.eventBusEl_ = createEl$1("span", { className: "vjs-event-bus" }); } Object.assign(target, EventedMixin$1); if (target.eventedCallbacks) { target.eventedCallbacks.forEach((callback2) => { callback2(); }); } target.on("dispose", () => { target.off(); [target, target.el_, target.eventBusEl_].forEach(function(val) { if (val && DomData$1.has(val)) { DomData$1.delete(val); } }); window_1.setTimeout(() => { target.eventBusEl_ = null; }, 0); }); return target; } const StatefulMixin$1 = { state: {}, setState(stateUpdates) { if (typeof stateUpdates === "function") { stateUpdates = stateUpdates(); } let changes; each$1(stateUpdates, (value, key) => { if (this.state[key] !== value) { changes = changes || {}; changes[key] = { from: this.state[key], to: value }; } this.state[key] = value; }); if (changes && isEvented$1(this)) { this.trigger({ changes, type: "statechanged" }); } return changes; } }; function stateful$1(target, defaultState) { Object.assign(target, StatefulMixin$1); target.state = Object.assign({}, target.state, defaultState); if (typeof target.handleStateChanged === "function" && isEvented$1(target)) { target.on("statechanged", target.handleStateChanged); } return target; } const toLowerCase$1 = function(string) { if (typeof string !== "string") { return string; } return string.replace(/./, (w) => w.toLowerCase()); }; const toTitleCase$1$1 = function(string) { if (typeof string !== "string") { return string; } return string.replace(/./, (w) => w.toUpperCase()); }; const titleCaseEquals$1 = function(str1, str2) { return toTitleCase$1$1(str1) === toTitleCase$1$1(str2); }; var Str = /* @__PURE__ */ Object.freeze({ __proto__: null, toLowerCase: toLowerCase$1, toTitleCase: toTitleCase$1$1, titleCaseEquals: titleCaseEquals$1 }); class Component$1$1 { constructor(player, options2, ready) { if (!player && this.play) { this.player_ = player = this; } else { this.player_ = player; } this.isDisposed_ = false; this.parentComponent_ = null; this.options_ = merge$1({}, this.options_); options2 = this.options_ = merge$1(this.options_, options2); this.id_ = options2.id || options2.el && options2.el.id; if (!this.id_) { const id = player && player.id && player.id() || "no_player"; this.id_ = `${id}_component_${newGUID$1()}`; } this.name_ = options2.name || null; if (options2.el) { this.el_ = options2.el; } else if (options2.createEl !== false) { this.el_ = this.createEl(); } if (options2.className && this.el_) { options2.className.split(" ").forEach((c) => this.addClass(c)); } ["on", "off", "one", "any", "trigger"].forEach((fn2) => { this[fn2] = void 0; }); if (options2.evented !== false) { evented$1(this, { eventBusKey: this.el_ ? "el_" : null }); this.handleLanguagechange = this.handleLanguagechange.bind(this); this.on(this.player_, "languagechange", this.handleLanguagechange); } stateful$1(this, this.constructor.defaultState); this.children_ = []; this.childIndex_ = {}; this.childNameIndex_ = {}; this.setTimeoutIds_ = /* @__PURE__ */ new Set(); this.setIntervalIds_ = /* @__PURE__ */ new Set(); this.rafIds_ = /* @__PURE__ */ new Set(); this.namedRafs_ = /* @__PURE__ */ new Map(); this.clearingTimersOnDispose_ = false; if (options2.initChildren !== false) { this.initChildren(); } this.ready(ready); if (options2.reportTouchActivity !== false) { this.enableTouchActivity(); } } on(type2, fn2) { } off(type2, fn2) { } one(type2, fn2) { } any(type2, fn2) { } trigger(event2) { } dispose(options2 = {}) { if (this.isDisposed_) { return; } if (this.readyQueue_) { this.readyQueue_.length = 0; } this.trigger({ type: "dispose", bubbles: false }); this.isDisposed_ = true; if (this.children_) { for (let i2 = this.children_.length - 1; i2 >= 0; i2--) { if (this.children_[i2].dispose) { this.children_[i2].dispose(); } } } this.children_ = null; this.childIndex_ = null; this.childNameIndex_ = null; this.parentComponent_ = null; if (this.el_) { if (this.el_.parentNode) { if (options2.restoreEl) { this.el_.parentNode.replaceChild(options2.restoreEl, this.el_); } else { this.el_.parentNode.removeChild(this.el_); } } this.el_ = null; } this.player_ = null; } isDisposed() { return Boolean(this.isDisposed_); } player() { return this.player_; } options(obj) { if (!obj) { return this.options_; } this.options_ = merge$1(this.options_, obj); return this.options_; } el() { return this.el_; } createEl(tagName, properties, attributes) { return createEl$1(tagName, properties, attributes); } localize(string, tokens, defaultValue2 = string) { const code = this.player_.language && this.player_.language(); const languages = this.player_.languages && this.player_.languages(); const language = languages && languages[code]; const primaryCode = code && code.split("-")[0]; const primaryLang = languages && languages[primaryCode]; let localizedString = defaultValue2; if (language && language[string]) { localizedString = language[string]; } else if (primaryLang && primaryLang[string]) { localizedString = primaryLang[string]; } if (tokens) { localizedString = localizedString.replace(/\{(\d+)\}/g, function(match, index2) { const value = tokens[index2 - 1]; let ret = value; if (typeof value === "undefined") { ret = match; } return ret; }); } return localizedString; } handleLanguagechange() { } contentEl() { return this.contentEl_ || this.el_; } id() { return this.id_; } name() { return this.name_; } children() { return this.children_; } getChildById(id) { return this.childIndex_[id]; } getChild(name) { if (!name) { return; } return this.childNameIndex_[name]; } getDescendant(...names2) { names2 = names2.reduce((acc, n) => acc.concat(n), []); let currentChild = this; for (let i2 = 0; i2 < names2.length; i2++) { currentChild = currentChild.getChild(names2[i2]); if (!currentChild || !currentChild.getChild) { return; } } return currentChild; } addChild(child, options2 = {}, index2 = this.children_.length) { let component; let componentName; if (typeof child === "string") { componentName = toTitleCase$1$1(child); const componentClassName = options2.componentClass || componentName; options2.name = componentName; const ComponentClass = Component$1$1.getComponent(componentClassName); if (!ComponentClass) { throw new Error(`Component ${componentClassName} does not exist`); } if (typeof ComponentClass !== "function") { return null; } component = new ComponentClass(this.player_ || this, options2); } else { component = child; } if (component.parentComponent_) { component.parentComponent_.removeChild(component); } this.children_.splice(index2, 0, component); component.parentComponent_ = this; if (typeof component.id === "function") { this.childIndex_[component.id()] = component; } componentName = componentName || component.name && toTitleCase$1$1(component.name()); if (componentName) { this.childNameIndex_[componentName] = component; this.childNameIndex_[toLowerCase$1(componentName)] = component; } if (typeof component.el === "function" && component.el()) { let refNode = null; if (this.children_[index2 + 1]) { if (this.children_[index2 + 1].el_) { refNode = this.children_[index2 + 1].el_; } else if (isEl$1(this.children_[index2 + 1])) { refNode = this.children_[index2 + 1]; } } this.contentEl().insertBefore(component.el(), refNode); } return component; } removeChild(component) { if (typeof component === "string") { component = this.getChild(component); } if (!component || !this.children_) { return; } let childFound = false; for (let i2 = this.children_.length - 1; i2 >= 0; i2--) { if (this.children_[i2] === component) { childFound = true; this.children_.splice(i2, 1); break; } } if (!childFound) { return; } component.parentComponent_ = null; this.childIndex_[component.id()] = null; this.childNameIndex_[toTitleCase$1$1(component.name())] = null; this.childNameIndex_[toLowerCase$1(component.name())] = null; const compEl = component.el(); if (compEl && compEl.parentNode === this.contentEl()) { this.contentEl().removeChild(component.el()); } } initChildren() { const children = this.options_.children; if (children) { const parentOptions = this.options_; const handleAdd = (child) => { const name = child.name; let opts = child.opts; if (parentOptions[name] !== void 0) { opts = parentOptions[name]; } if (opts === false) { return; } if (opts === true) { opts = {}; } opts.playerOptions = this.options_.playerOptions; const newChild = this.addChild(name, opts); if (newChild) { this[name] = newChild; } }; let workingChildren; const Tech2 = Component$1$1.getComponent("Tech"); if (Array.isArray(children)) { workingChildren = children; } else { workingChildren = Object.keys(children); } workingChildren.concat(Object.keys(this.options_).filter(function(child) { return !workingChildren.some(function(wchild) { if (typeof wchild === "string") { return child === wchild; } return child === wchild.name; }); })).map((child) => { let name; let opts; if (typeof child === "string") { name = child; opts = children[name] || this.options_[name] || {}; } else { name = child.name; opts = child; } return { name, opts }; }).filter((child) => { const c = Component$1$1.getComponent(child.opts.componentClass || toTitleCase$1$1(child.name)); return c && !Tech2.isTech(c); }).forEach(handleAdd); } } buildCSSClass() { return ""; } ready(fn2, sync = false) { if (!fn2) { return; } if (!this.isReady_) { this.readyQueue_ = this.readyQueue_ || []; this.readyQueue_.push(fn2); return; } if (sync) { fn2.call(this); } else { this.setTimeout(fn2, 1); } } triggerReady() { this.isReady_ = true; this.setTimeout(function() { const readyQueue = this.readyQueue_; this.readyQueue_ = []; if (readyQueue && readyQueue.length > 0) { readyQueue.forEach(function(fn2) { fn2.call(this); }, this); } this.trigger("ready"); }, 1); } $(selector, context) { return $$1(selector, context || this.contentEl()); } $$(selector, context) { return $$$1(selector, context || this.contentEl()); } hasClass(classToCheck) { return hasClass$1(this.el_, classToCheck); } addClass(...classesToAdd) { addClass$1(this.el_, ...classesToAdd); } removeClass(...classesToRemove) { removeClass$1(this.el_, ...classesToRemove); } toggleClass(classToToggle, predicate) { toggleClass$1(this.el_, classToToggle, predicate); } show() { this.removeClass("vjs-hidden"); } hide() { this.addClass("vjs-hidden"); } lockShowing() { this.addClass("vjs-lock-showing"); } unlockShowing() { this.removeClass("vjs-lock-showing"); } getAttribute(attribute) { return getAttribute$1(this.el_, attribute); } setAttribute(attribute, value) { setAttribute$1(this.el_, attribute, value); } removeAttribute(attribute) { removeAttribute$1(this.el_, attribute); } width(num, skipListeners) { return this.dimension("width", num, skipListeners); } height(num, skipListeners) { return this.dimension("height", num, skipListeners); } dimensions(width2, height2) { this.width(width2, true); this.height(height2); } dimension(widthOrHeight, num, skipListeners) { if (num !== void 0) { if (num === null || num !== num) { num = 0; } if (("" + num).indexOf("%") !== -1 || ("" + num).indexOf("px") !== -1) { this.el_.style[widthOrHeight] = num; } else if (num === "auto") { this.el_.style[widthOrHeight] = ""; } else { this.el_.style[widthOrHeight] = num + "px"; } if (!skipListeners) { this.trigger("componentresize"); } return; } if (!this.el_) { return 0; } const val = this.el_.style[widthOrHeight]; const pxIndex = val.indexOf("px"); if (pxIndex !== -1) { return parseInt(val.slice(0, pxIndex), 10); } return parseInt(this.el_["offset" + toTitleCase$1$1(widthOrHeight)], 10); } currentDimension(widthOrHeight) { let computedWidthOrHeight = 0; if (widthOrHeight !== "width" && widthOrHeight !== "height") { throw new Error("currentDimension only accepts width or height value"); } computedWidthOrHeight = computedStyle$1(this.el_, widthOrHeight); computedWidthOrHeight = parseFloat(computedWidthOrHeight); if (computedWidthOrHeight === 0 || isNaN(computedWidthOrHeight)) { const rule = `offset${toTitleCase$1$1(widthOrHeight)}`; computedWidthOrHeight = this.el_[rule]; } return computedWidthOrHeight; } currentDimensions() { return { width: this.currentDimension("width"), height: this.currentDimension("height") }; } currentWidth() { return this.currentDimension("width"); } currentHeight() { return this.currentDimension("height"); } focus() { this.el_.focus(); } blur() { this.el_.blur(); } handleKeyDown(event2) { if (this.player_) { if (!keycode.isEventKey(event2, "Tab")) { event2.stopPropagation(); } this.player_.handleKeyDown(event2); } } handleKeyPress(event2) { this.handleKeyDown(event2); } emitTapEvents() { let touchStart = 0; let firstTouch = null; const tapMovementThreshold = 10; const touchTimeThreshold = 200; let couldBeTap; this.on("touchstart", function(event2) { if (event2.touches.length === 1) { firstTouch = { pageX: event2.touches[0].pageX, pageY: event2.touches[0].pageY }; touchStart = window_1.performance.now(); couldBeTap = true; } }); this.on("touchmove", function(event2) { if (event2.touches.length > 1) { couldBeTap = false; } else if (firstTouch) { const xdiff = event2.touches[0].pageX - firstTouch.pageX; const ydiff = event2.touches[0].pageY - firstTouch.pageY; const touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff); if (touchDistance > tapMovementThreshold) { couldBeTap = false; } } }); const noTap = function() { couldBeTap = false; }; this.on("touchleave", noTap); this.on("touchcancel", noTap); this.on("touchend", function(event2) { firstTouch = null; if (couldBeTap === true) { const touchTime = window_1.performance.now() - touchStart; if (touchTime < touchTimeThreshold) { event2.preventDefault(); this.trigger("tap"); } } }); } enableTouchActivity() { if (!this.player() || !this.player().reportUserActivity) { return; } const report = bind_(this.player(), this.player().reportUserActivity); let touchHolding; this.on("touchstart", function() { report(); this.clearInterval(touchHolding); touchHolding = this.setInterval(report, 250); }); const touchEnd = function(event2) { report(); this.clearInterval(touchHolding); }; this.on("touchmove", report); this.on("touchend", touchEnd); this.on("touchcancel", touchEnd); } setTimeout(fn2, timeout) { var timeoutId; fn2 = bind_(this, fn2); this.clearTimersOnDispose_(); timeoutId = window_1.setTimeout(() => { if (this.setTimeoutIds_.has(timeoutId)) { this.setTimeoutIds_.delete(timeoutId); } fn2(); }, timeout); this.setTimeoutIds_.add(timeoutId); return timeoutId; } clearTimeout(timeoutId) { if (this.setTimeoutIds_.has(timeoutId)) { this.setTimeoutIds_.delete(timeoutId); window_1.clearTimeout(timeoutId); } return timeoutId; } setInterval(fn2, interval) { fn2 = bind_(this, fn2); this.clearTimersOnDispose_(); const intervalId = window_1.setInterval(fn2, interval); this.setIntervalIds_.add(intervalId); return intervalId; } clearInterval(intervalId) { if (this.setIntervalIds_.has(intervalId)) { this.setIntervalIds_.delete(intervalId); window_1.clearInterval(intervalId); } return intervalId; } requestAnimationFrame(fn2) { this.clearTimersOnDispose_(); var id; fn2 = bind_(this, fn2); id = window_1.requestAnimationFrame(() => { if (this.rafIds_.has(id)) { this.rafIds_.delete(id); } fn2(); }); this.rafIds_.add(id); return id; } requestNamedAnimationFrame(name, fn2) { if (this.namedRafs_.has(name)) { return; } this.clearTimersOnDispose_(); fn2 = bind_(this, fn2); const id = this.requestAnimationFrame(() => { fn2(); if (this.namedRafs_.has(name)) { this.namedRafs_.delete(name); } }); this.namedRafs_.set(name, id); return name; } cancelNamedAnimationFrame(name) { if (!this.namedRafs_.has(name)) { return; } this.cancelAnimationFrame(this.namedRafs_.get(name)); this.namedRafs_.delete(name); } cancelAnimationFrame(id) { if (this.rafIds_.has(id)) { this.rafIds_.delete(id); window_1.cancelAnimationFrame(id); } return id; } clearTimersOnDispose_() { if (this.clearingTimersOnDispose_) { return; } this.clearingTimersOnDispose_ = true; this.one("dispose", () => { [["namedRafs_", "cancelNamedAnimationFrame"], ["rafIds_", "cancelAnimationFrame"], ["setTimeoutIds_", "clearTimeout"], ["setIntervalIds_", "clearInterval"]].forEach(([idName, cancelName]) => { this[idName].forEach((val, key) => this[cancelName](key)); }); this.clearingTimersOnDispose_ = false; }); } static registerComponent(name, ComponentToRegister) { if (typeof name !== "string" || !name) { throw new Error(`Illegal component name, "${name}"; must be a non-empty string.`); } const Tech2 = Component$1$1.getComponent("Tech"); const isTech = Tech2 && Tech2.isTech(ComponentToRegister); const isComp = Component$1$1 === ComponentToRegister || Component$1$1.prototype.isPrototypeOf(ComponentToRegister.prototype); if (isTech || !isComp) { let reason; if (isTech) { reason = "techs must be registered using Tech.registerTech()"; } else { reason = "must be a Component subclass"; } throw new Error(`Illegal component, "${name}"; ${reason}.`); } name = toTitleCase$1$1(name); if (!Component$1$1.components_) { Component$1$1.components_ = {}; } const Player2 = Component$1$1.getComponent("Player"); if (name === "Player" && Player2 && Player2.players) { const players = Player2.players; const playerNames = Object.keys(players); if (players && playerNames.length > 0 && playerNames.map((pname) => players[pname]).every(Boolean)) { throw new Error("Can not register Player component after player has been created."); } } Component$1$1.components_[name] = ComponentToRegister; Component$1$1.components_[toLowerCase$1(name)] = ComponentToRegister; return ComponentToRegister; } static getComponent(name) { if (!name || !Component$1$1.components_) { return; } return Component$1$1.components_[name]; } } Component$1$1.registerComponent("Component", Component$1$1); function rangeCheck$1(fnName, index2, maxIndex) { if (typeof index2 !== "number" || index2 < 0 || index2 > maxIndex) { throw new Error(`Failed to execute '${fnName}' on 'TimeRanges': The index provided (${index2}) is non-numeric or out of bounds (0-${maxIndex}).`); } } function getRange$1(fnName, valueIndex, ranges, rangeIndex) { rangeCheck$1(fnName, rangeIndex, ranges.length - 1); return ranges[rangeIndex][valueIndex]; } function createTimeRangesObj$1(ranges) { let timeRangesObj; if (ranges === void 0 || ranges.length === 0) { timeRangesObj = { length: 0, start() { throw new Error("This TimeRanges object is empty"); }, end() { throw new Error("This TimeRanges object is empty"); } }; } else { timeRangesObj = { length: ranges.length, start: getRange$1.bind(null, "start", 0, ranges), end: getRange$1.bind(null, "end", 1, ranges) }; } if (window_1.Symbol && window_1.Symbol.iterator) { timeRangesObj[window_1.Symbol.iterator] = () => (ranges || []).values(); } return timeRangesObj; } function createTimeRanges$1(start2, end) { if (Array.isArray(start2)) { return createTimeRangesObj$1(start2); } else if (start2 === void 0 || end === void 0) { return createTimeRangesObj$1(); } return createTimeRangesObj$1([[start2, end]]); } const defaultImplementation$1 = function(seconds, guide) { seconds = seconds < 0 ? 0 : seconds; let s = Math.floor(seconds % 60); let m = Math.floor(seconds / 60 % 60); let h2 = Math.floor(seconds / 3600); const gm = Math.floor(guide / 60 % 60); const gh = Math.floor(guide / 3600); if (isNaN(seconds) || seconds === Infinity) { h2 = m = s = "-"; } h2 = h2 > 0 || gh > 0 ? h2 + ":" : ""; m = ((h2 || gm >= 10) && m < 10 ? "0" + m : m) + ":"; s = s < 10 ? "0" + s : s; return h2 + m + s; }; let implementation$1 = defaultImplementation$1; function setFormatTime$1(customImplementation) { implementation$1 = customImplementation; } function resetFormatTime$1() { implementation$1 = defaultImplementation$1; } function formatTime$1(seconds, guide = seconds) { return implementation$1(seconds, guide); } var Time = /* @__PURE__ */ Object.freeze({ __proto__: null, createTimeRanges: createTimeRanges$1, createTimeRange: createTimeRanges$1, setFormatTime: setFormatTime$1, resetFormatTime: resetFormatTime$1, formatTime: formatTime$1 }); function bufferedPercent$1(buffered, duration5) { let bufferedDuration = 0; let start2; let end; if (!duration5) { return 0; } if (!buffered || !buffered.length) { buffered = createTimeRanges$1(0, 0); } for (let i2 = 0; i2 < buffered.length; i2++) { start2 = buffered.start(i2); end = buffered.end(i2); if (end > duration5) { end = duration5; } bufferedDuration += end - start2; } return bufferedDuration / duration5; } function MediaError$1(value) { if (value instanceof MediaError$1) { return value; } if (typeof value === "number") { this.code = value; } else if (typeof value === "string") { this.message = value; } else if (isObject$2(value)) { if (typeof value.code === "number") { this.code = value.code; } Object.assign(this, value); } if (!this.message) { this.message = MediaError$1.defaultMessages[this.code] || ""; } } MediaError$1.prototype.code = 0; MediaError$1.prototype.message = ""; MediaError$1.prototype.status = null; MediaError$1.errorTypes = ["MEDIA_ERR_CUSTOM", "MEDIA_ERR_ABORTED", "MEDIA_ERR_NETWORK", "MEDIA_ERR_DECODE", "MEDIA_ERR_SRC_NOT_SUPPORTED", "MEDIA_ERR_ENCRYPTED"]; MediaError$1.defaultMessages = { 1: "You aborted the media playback", 2: "A network error caused the media download to fail part-way.", 3: "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.", 4: "The media could not be loaded, either because the server or network failed or because the format is not supported.", 5: "The media is encrypted and we do not have the keys to decrypt it." }; for (let errNum = 0; errNum < MediaError$1.errorTypes.length; errNum++) { MediaError$1[MediaError$1.errorTypes[errNum]] = errNum; MediaError$1.prototype[MediaError$1.errorTypes[errNum]] = errNum; } function isPromise$1(value) { return value !== void 0 && value !== null && typeof value.then === "function"; } function silencePromise$1(value) { if (isPromise$1(value)) { value.then(null, (e) => { }); } } const trackToJson_$1 = function(track) { const ret = ["kind", "label", "language", "id", "inBandMetadataTrackDispatchType", "mode", "src"].reduce((acc, prop, i2) => { if (track[prop]) { acc[prop] = track[prop]; } return acc; }, { cues: track.cues && Array.prototype.map.call(track.cues, function(cue) { return { startTime: cue.startTime, endTime: cue.endTime, text: cue.text, id: cue.id }; }) }); return ret; }; const textTracksToJson$1 = function(tech) { const trackEls = tech.$$("track"); const trackObjs = Array.prototype.map.call(trackEls, (t2) => t2.track); const tracks = Array.prototype.map.call(trackEls, function(trackEl) { const json = trackToJson_$1(trackEl.track); if (trackEl.src) { json.src = trackEl.src; } return json; }); return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) { return trackObjs.indexOf(track) === -1; }).map(trackToJson_$1)); }; const jsonToTextTracks$1 = function(json, tech) { json.forEach(function(track) { const addedTrack = tech.addRemoteTextTrack(track).track; if (!track.src && track.cues) { track.cues.forEach((cue) => addedTrack.addCue(cue)); } }); return tech.textTracks(); }; var textTrackConverter$1 = { textTracksToJson: textTracksToJson$1, jsonToTextTracks: jsonToTextTracks$1, trackToJson_: trackToJson_$1 }; const MODAL_CLASS_NAME$1 = "vjs-modal-dialog"; class ModalDialog$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.handleKeyDown_ = (e) => this.handleKeyDown(e); this.close_ = (e) => this.close(e); this.opened_ = this.hasBeenOpened_ = this.hasBeenFilled_ = false; this.closeable(!this.options_.uncloseable); this.content(this.options_.content); this.contentEl_ = createEl$1("div", { className: `${MODAL_CLASS_NAME$1}-content` }, { role: "document" }); this.descEl_ = createEl$1("p", { className: `${MODAL_CLASS_NAME$1}-description vjs-control-text`, id: this.el().getAttribute("aria-describedby") }); textContent$1(this.descEl_, this.description()); this.el_.appendChild(this.descEl_); this.el_.appendChild(this.contentEl_); } createEl() { return super.createEl("div", { className: this.buildCSSClass(), tabIndex: -1 }, { "aria-describedby": `${this.id()}_description`, "aria-hidden": "true", "aria-label": this.label(), "role": "dialog" }); } dispose() { this.contentEl_ = null; this.descEl_ = null; this.previouslyActiveEl_ = null; super.dispose(); } buildCSSClass() { return `${MODAL_CLASS_NAME$1} vjs-hidden ${super.buildCSSClass()}`; } label() { return this.localize(this.options_.label || "Modal Window"); } description() { let desc = this.options_.description || this.localize("This is a modal window."); if (this.closeable()) { desc += " " + this.localize("This modal can be closed by pressing the Escape key or activating the close button."); } return desc; } open() { if (!this.opened_) { const player = this.player(); this.trigger("beforemodalopen"); this.opened_ = true; if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) { this.fill(); } this.wasPlaying_ = !player.paused(); if (this.options_.pauseOnOpen && this.wasPlaying_) { player.pause(); } this.on("keydown", this.handleKeyDown_); this.hadControls_ = player.controls(); player.controls(false); this.show(); this.conditionalFocus_(); this.el().setAttribute("aria-hidden", "false"); this.trigger("modalopen"); this.hasBeenOpened_ = true; } } opened(value) { if (typeof value === "boolean") { this[value ? "open" : "close"](); } return this.opened_; } close() { if (!this.opened_) { return; } const player = this.player(); this.trigger("beforemodalclose"); this.opened_ = false; if (this.wasPlaying_ && this.options_.pauseOnOpen) { player.play(); } this.off("keydown", this.handleKeyDown_); if (this.hadControls_) { player.controls(true); } this.hide(); this.el().setAttribute("aria-hidden", "true"); this.trigger("modalclose"); this.conditionalBlur_(); if (this.options_.temporary) { this.dispose(); } } closeable(value) { if (typeof value === "boolean") { const closeable = this.closeable_ = !!value; let close = this.getChild("closeButton"); if (closeable && !close) { const temp = this.contentEl_; this.contentEl_ = this.el_; close = this.addChild("closeButton", { controlText: "Close Modal Dialog" }); this.contentEl_ = temp; this.on(close, "close", this.close_); } if (!closeable && close) { this.off(close, "close", this.close_); this.removeChild(close); close.dispose(); } } return this.closeable_; } fill() { this.fillWith(this.content()); } fillWith(content) { const contentEl = this.contentEl(); const parentEl = contentEl.parentNode; const nextSiblingEl = contentEl.nextSibling; this.trigger("beforemodalfill"); this.hasBeenFilled_ = true; parentEl.removeChild(contentEl); this.empty(); insertContent$1(contentEl, content); this.trigger("modalfill"); if (nextSiblingEl) { parentEl.insertBefore(contentEl, nextSiblingEl); } else { parentEl.appendChild(contentEl); } const closeButton = this.getChild("closeButton"); if (closeButton) { parentEl.appendChild(closeButton.el_); } } empty() { this.trigger("beforemodalempty"); emptyEl$1(this.contentEl()); this.trigger("modalempty"); } content(value) { if (typeof value !== "undefined") { this.content_ = value; } return this.content_; } conditionalFocus_() { const activeEl = document_1.activeElement; const playerEl = this.player_.el_; this.previouslyActiveEl_ = null; if (playerEl.contains(activeEl) || playerEl === activeEl) { this.previouslyActiveEl_ = activeEl; this.focus(); } } conditionalBlur_() { if (this.previouslyActiveEl_) { this.previouslyActiveEl_.focus(); this.previouslyActiveEl_ = null; } } handleKeyDown(event2) { event2.stopPropagation(); if (keycode.isEventKey(event2, "Escape") && this.closeable()) { event2.preventDefault(); this.close(); return; } if (!keycode.isEventKey(event2, "Tab")) { return; } const focusableEls = this.focusableEls_(); const activeEl = this.el_.querySelector(":focus"); let focusIndex; for (let i2 = 0; i2 < focusableEls.length; i2++) { if (activeEl === focusableEls[i2]) { focusIndex = i2; break; } } if (document_1.activeElement === this.el_) { focusIndex = 0; } if (event2.shiftKey && focusIndex === 0) { focusableEls[focusableEls.length - 1].focus(); event2.preventDefault(); } else if (!event2.shiftKey && focusIndex === focusableEls.length - 1) { focusableEls[0].focus(); event2.preventDefault(); } } focusableEls_() { const allChildren = this.el_.querySelectorAll("*"); return Array.prototype.filter.call(allChildren, (child) => { return (child instanceof window_1.HTMLAnchorElement || child instanceof window_1.HTMLAreaElement) && child.hasAttribute("href") || (child instanceof window_1.HTMLInputElement || child instanceof window_1.HTMLSelectElement || child instanceof window_1.HTMLTextAreaElement || child instanceof window_1.HTMLButtonElement) && !child.hasAttribute("disabled") || child instanceof window_1.HTMLIFrameElement || child instanceof window_1.HTMLObjectElement || child instanceof window_1.HTMLEmbedElement || child.hasAttribute("tabindex") && child.getAttribute("tabindex") !== -1 || child.hasAttribute("contenteditable"); }); } } ModalDialog$1.prototype.options_ = { pauseOnOpen: true, temporary: true }; Component$1$1.registerComponent("ModalDialog", ModalDialog$1); class TrackList$1 extends EventTarget$2$1 { constructor(tracks = []) { super(); this.tracks_ = []; Object.defineProperty(this, "length", { get() { return this.tracks_.length; } }); for (let i2 = 0; i2 < tracks.length; i2++) { this.addTrack(tracks[i2]); } } addTrack(track) { const index2 = this.tracks_.length; if (!("" + index2 in this)) { Object.defineProperty(this, index2, { get() { return this.tracks_[index2]; } }); } if (this.tracks_.indexOf(track) === -1) { this.tracks_.push(track); this.trigger({ track, type: "addtrack", target: this }); } track.labelchange_ = () => { this.trigger({ track, type: "labelchange", target: this }); }; if (isEvented$1(track)) { track.addEventListener("labelchange", track.labelchange_); } } removeTrack(rtrack) { let track; for (let i2 = 0, l = this.length; i2 < l; i2++) { if (this[i2] === rtrack) { track = this[i2]; if (track.off) { track.off(); } this.tracks_.splice(i2, 1); break; } } if (!track) { return; } this.trigger({ track, type: "removetrack", target: this }); } getTrackById(id) { let result = null; for (let i2 = 0, l = this.length; i2 < l; i2++) { const track = this[i2]; if (track.id === id) { result = track; break; } } return result; } } TrackList$1.prototype.allowedEvents_ = { change: "change", addtrack: "addtrack", removetrack: "removetrack", labelchange: "labelchange" }; for (const event2 in TrackList$1.prototype.allowedEvents_) { TrackList$1.prototype["on" + event2] = null; } const disableOthers$1$1 = function(list, track) { for (let i2 = 0; i2 < list.length; i2++) { if (!Object.keys(list[i2]).length || track.id === list[i2].id) { continue; } list[i2].enabled = false; } }; class AudioTrackList$1 extends TrackList$1 { constructor(tracks = []) { for (let i2 = tracks.length - 1; i2 >= 0; i2--) { if (tracks[i2].enabled) { disableOthers$1$1(tracks, tracks[i2]); break; } } super(tracks); this.changing_ = false; } addTrack(track) { if (track.enabled) { disableOthers$1$1(this, track); } super.addTrack(track); if (!track.addEventListener) { return; } track.enabledChange_ = () => { if (this.changing_) { return; } this.changing_ = true; disableOthers$1$1(this, track); this.changing_ = false; this.trigger("change"); }; track.addEventListener("enabledchange", track.enabledChange_); } removeTrack(rtrack) { super.removeTrack(rtrack); if (rtrack.removeEventListener && rtrack.enabledChange_) { rtrack.removeEventListener("enabledchange", rtrack.enabledChange_); rtrack.enabledChange_ = null; } } } const disableOthers$2 = function(list, track) { for (let i2 = 0; i2 < list.length; i2++) { if (!Object.keys(list[i2]).length || track.id === list[i2].id) { continue; } list[i2].selected = false; } }; class VideoTrackList$1 extends TrackList$1 { constructor(tracks = []) { for (let i2 = tracks.length - 1; i2 >= 0; i2--) { if (tracks[i2].selected) { disableOthers$2(tracks, tracks[i2]); break; } } super(tracks); this.changing_ = false; Object.defineProperty(this, "selectedIndex", { get() { for (let i2 = 0; i2 < this.length; i2++) { if (this[i2].selected) { return i2; } } return -1; }, set() { } }); } addTrack(track) { if (track.selected) { disableOthers$2(this, track); } super.addTrack(track); if (!track.addEventListener) { return; } track.selectedChange_ = () => { if (this.changing_) { return; } this.changing_ = true; disableOthers$2(this, track); this.changing_ = false; this.trigger("change"); }; track.addEventListener("selectedchange", track.selectedChange_); } removeTrack(rtrack) { super.removeTrack(rtrack); if (rtrack.removeEventListener && rtrack.selectedChange_) { rtrack.removeEventListener("selectedchange", rtrack.selectedChange_); rtrack.selectedChange_ = null; } } } class TextTrackList$1 extends TrackList$1 { addTrack(track) { super.addTrack(track); if (!this.queueChange_) { this.queueChange_ = () => this.queueTrigger("change"); } if (!this.triggerSelectedlanguagechange) { this.triggerSelectedlanguagechange_ = () => this.trigger("selectedlanguagechange"); } track.addEventListener("modechange", this.queueChange_); const nonLanguageTextTrackKind = ["metadata", "chapters"]; if (nonLanguageTextTrackKind.indexOf(track.kind) === -1) { track.addEventListener("modechange", this.triggerSelectedlanguagechange_); } } removeTrack(rtrack) { super.removeTrack(rtrack); if (rtrack.removeEventListener) { if (this.queueChange_) { rtrack.removeEventListener("modechange", this.queueChange_); } if (this.selectedlanguagechange_) { rtrack.removeEventListener("modechange", this.triggerSelectedlanguagechange_); } } } } class HtmlTrackElementList$1 { constructor(trackElements = []) { this.trackElements_ = []; Object.defineProperty(this, "length", { get() { return this.trackElements_.length; } }); for (let i2 = 0, length = trackElements.length; i2 < length; i2++) { this.addTrackElement_(trackElements[i2]); } } addTrackElement_(trackElement) { const index2 = this.trackElements_.length; if (!("" + index2 in this)) { Object.defineProperty(this, index2, { get() { return this.trackElements_[index2]; } }); } if (this.trackElements_.indexOf(trackElement) === -1) { this.trackElements_.push(trackElement); } } getTrackElementByTrack_(track) { let trackElement_; for (let i2 = 0, length = this.trackElements_.length; i2 < length; i2++) { if (track === this.trackElements_[i2].track) { trackElement_ = this.trackElements_[i2]; break; } } return trackElement_; } removeTrackElement_(trackElement) { for (let i2 = 0, length = this.trackElements_.length; i2 < length; i2++) { if (trackElement === this.trackElements_[i2]) { if (this.trackElements_[i2].track && typeof this.trackElements_[i2].track.off === "function") { this.trackElements_[i2].track.off(); } if (typeof this.trackElements_[i2].off === "function") { this.trackElements_[i2].off(); } this.trackElements_.splice(i2, 1); break; } } } } class TextTrackCueList$1 { constructor(cues) { TextTrackCueList$1.prototype.setCues_.call(this, cues); Object.defineProperty(this, "length", { get() { return this.length_; } }); } setCues_(cues) { const oldLength = this.length || 0; let i2 = 0; const l = cues.length; this.cues_ = cues; this.length_ = cues.length; const defineProp = function(index2) { if (!("" + index2 in this)) { Object.defineProperty(this, "" + index2, { get() { return this.cues_[index2]; } }); } }; if (oldLength < l) { i2 = oldLength; for (; i2 < l; i2++) { defineProp.call(this, i2); } } } getCueById(id) { let result = null; for (let i2 = 0, l = this.length; i2 < l; i2++) { const cue = this[i2]; if (cue.id === id) { result = cue; break; } } return result; } } const VideoTrackKind$1 = { alternative: "alternative", captions: "captions", main: "main", sign: "sign", subtitles: "subtitles", commentary: "commentary" }; const AudioTrackKind$1 = { "alternative": "alternative", "descriptions": "descriptions", "main": "main", "main-desc": "main-desc", "translation": "translation", "commentary": "commentary" }; const TextTrackKind$1 = { subtitles: "subtitles", captions: "captions", descriptions: "descriptions", chapters: "chapters", metadata: "metadata" }; const TextTrackMode$1 = { disabled: "disabled", hidden: "hidden", showing: "showing" }; class Track$1 extends EventTarget$2$1 { constructor(options2 = {}) { super(); const trackProps = { id: options2.id || "vjs_track_" + newGUID$1(), kind: options2.kind || "", language: options2.language || "" }; let label2 = options2.label || ""; for (const key in trackProps) { Object.defineProperty(this, key, { get() { return trackProps[key]; }, set() { } }); } Object.defineProperty(this, "label", { get() { return label2; }, set(newLabel) { if (newLabel !== label2) { label2 = newLabel; this.trigger("labelchange"); } } }); } } const parseUrl$1 = function(url) { const props = ["protocol", "hostname", "port", "pathname", "search", "hash", "host"]; const a = document_1.createElement("a"); a.href = url; const details = {}; for (let i2 = 0; i2 < props.length; i2++) { details[props[i2]] = a[props[i2]]; } if (details.protocol === "http:") { details.host = details.host.replace(/:80$/, ""); } if (details.protocol === "https:") { details.host = details.host.replace(/:443$/, ""); } if (!details.protocol) { details.protocol = window_1.location.protocol; } if (!details.host) { details.host = window_1.location.host; } return details; }; const getAbsoluteURL$1 = function(url) { if (!url.match(/^https?:\/\//)) { const a = document_1.createElement("a"); a.href = url; url = a.href; } return url; }; const getFileExtension$1 = function(path) { if (typeof path === "string") { const splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/; const pathParts = splitPathRe.exec(path); if (pathParts) { return pathParts.pop().toLowerCase(); } } return ""; }; const isCrossOrigin$1 = function(url, winLoc = window_1.location) { const urlInfo = parseUrl$1(url); const srcProtocol = urlInfo.protocol === ":" ? winLoc.protocol : urlInfo.protocol; const crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host; return crossOrigin; }; var Url$2 = /* @__PURE__ */ Object.freeze({ __proto__: null, parseUrl: parseUrl$1, getAbsoluteURL: getAbsoluteURL$1, getFileExtension: getFileExtension$1, isCrossOrigin: isCrossOrigin$1 }); const parseCues$1 = function(srcContent, track) { const parser2 = new window_1.WebVTT.Parser(window_1, window_1.vttjs, window_1.WebVTT.StringDecoder()); const errors2 = []; parser2.oncue = function(cue) { track.addCue(cue); }; parser2.onparsingerror = function(error) { errors2.push(error); }; parser2.onflush = function() { track.trigger({ type: "loadeddata", target: track }); }; parser2.parse(srcContent); if (errors2.length > 0) { if (window_1.console && window_1.console.groupCollapsed) { window_1.console.groupCollapsed(`Text Track parsing errors for ${track.src}`); } errors2.forEach((error) => log$1$1.error(error)); if (window_1.console && window_1.console.groupEnd) { window_1.console.groupEnd(); } } parser2.flush(); }; const loadTrack$1 = function(src, track) { const opts = { uri: src }; const crossOrigin = isCrossOrigin$1(src); if (crossOrigin) { opts.cors = crossOrigin; } const withCredentials = track.tech_.crossOrigin() === "use-credentials"; if (withCredentials) { opts.withCredentials = withCredentials; } XHR(opts, bind_(this, function(err, response, responseBody) { if (err) { return log$1$1.error(err, response); } track.loaded_ = true; if (typeof window_1.WebVTT !== "function") { if (track.tech_) { track.tech_.any(["vttjsloaded", "vttjserror"], (event2) => { if (event2.type === "vttjserror") { log$1$1.error(`vttjs failed to load, stopping trying to process ${track.src}`); return; } return parseCues$1(responseBody, track); }); } } else { parseCues$1(responseBody, track); } })); }; class TextTrack$1 extends Track$1 { constructor(options2 = {}) { if (!options2.tech) { throw new Error("A tech was not provided."); } const settings = merge$1(options2, { kind: TextTrackKind$1[options2.kind] || "subtitles", language: options2.language || options2.srclang || "" }); let mode = TextTrackMode$1[settings.mode] || "disabled"; const default_ = settings.default; if (settings.kind === "metadata" || settings.kind === "chapters") { mode = "hidden"; } super(settings); this.tech_ = settings.tech; this.cues_ = []; this.activeCues_ = []; this.preload_ = this.tech_.preloadTextTracks !== false; const cues = new TextTrackCueList$1(this.cues_); const activeCues = new TextTrackCueList$1(this.activeCues_); let changed = false; this.timeupdateHandler = bind_(this, function(event2 = {}) { if (this.tech_.isDisposed()) { return; } if (!this.tech_.isReady_) { if (event2.type !== "timeupdate") { this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); } return; } this.activeCues = this.activeCues; if (changed) { this.trigger("cuechange"); changed = false; } if (event2.type !== "timeupdate") { this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); } }); const disposeHandler = () => { this.stopTracking(); }; this.tech_.one("dispose", disposeHandler); if (mode !== "disabled") { this.startTracking(); } Object.defineProperties(this, { default: { get() { return default_; }, set() { } }, mode: { get() { return mode; }, set(newMode) { if (!TextTrackMode$1[newMode]) { return; } if (mode === newMode) { return; } mode = newMode; if (!this.preload_ && mode !== "disabled" && this.cues.length === 0) { loadTrack$1(this.src, this); } this.stopTracking(); if (mode !== "disabled") { this.startTracking(); } this.trigger("modechange"); } }, cues: { get() { if (!this.loaded_) { return null; } return cues; }, set() { } }, activeCues: { get() { if (!this.loaded_) { return null; } if (this.cues.length === 0) { return activeCues; } const ct2 = this.tech_.currentTime(); const active = []; for (let i2 = 0, l = this.cues.length; i2 < l; i2++) { const cue = this.cues[i2]; if (cue.startTime <= ct2 && cue.endTime >= ct2) { active.push(cue); } } changed = false; if (active.length !== this.activeCues_.length) { changed = true; } else { for (let i2 = 0; i2 < active.length; i2++) { if (this.activeCues_.indexOf(active[i2]) === -1) { changed = true; } } } this.activeCues_ = active; activeCues.setCues_(this.activeCues_); return activeCues; }, set() { } } }); if (settings.src) { this.src = settings.src; if (!this.preload_) { this.loaded_ = true; } if (this.preload_ || settings.kind !== "subtitles" && settings.kind !== "captions") { loadTrack$1(this.src, this); } } else { this.loaded_ = true; } } startTracking() { this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); this.tech_.on("timeupdate", this.timeupdateHandler); } stopTracking() { if (this.rvf_) { this.tech_.cancelVideoFrameCallback(this.rvf_); this.rvf_ = void 0; } this.tech_.off("timeupdate", this.timeupdateHandler); } addCue(originalCue) { let cue = originalCue; if (window_1.vttjs && !(originalCue instanceof window_1.vttjs.VTTCue)) { cue = new window_1.vttjs.VTTCue(originalCue.startTime, originalCue.endTime, originalCue.text); for (const prop in originalCue) { if (!(prop in cue)) { cue[prop] = originalCue[prop]; } } cue.id = originalCue.id; cue.originalCue_ = originalCue; } const tracks = this.tech_.textTracks(); for (let i2 = 0; i2 < tracks.length; i2++) { if (tracks[i2] !== this) { tracks[i2].removeCue(cue); } } this.cues_.push(cue); this.cues.setCues_(this.cues_); } removeCue(removeCue) { let i2 = this.cues_.length; while (i2--) { const cue = this.cues_[i2]; if (cue === removeCue || cue.originalCue_ && cue.originalCue_ === removeCue) { this.cues_.splice(i2, 1); this.cues.setCues_(this.cues_); break; } } } } TextTrack$1.prototype.allowedEvents_ = { cuechange: "cuechange" }; class AudioTrack$1 extends Track$1 { constructor(options2 = {}) { const settings = merge$1(options2, { kind: AudioTrackKind$1[options2.kind] || "" }); super(settings); let enabled = false; Object.defineProperty(this, "enabled", { get() { return enabled; }, set(newEnabled) { if (typeof newEnabled !== "boolean" || newEnabled === enabled) { return; } enabled = newEnabled; this.trigger("enabledchange"); } }); if (settings.enabled) { this.enabled = settings.enabled; } this.loaded_ = true; } } class VideoTrack$1 extends Track$1 { constructor(options2 = {}) { const settings = merge$1(options2, { kind: VideoTrackKind$1[options2.kind] || "" }); super(settings); let selected = false; Object.defineProperty(this, "selected", { get() { return selected; }, set(newSelected) { if (typeof newSelected !== "boolean" || newSelected === selected) { return; } selected = newSelected; this.trigger("selectedchange"); } }); if (settings.selected) { this.selected = settings.selected; } } } class HTMLTrackElement$1 extends EventTarget$2$1 { constructor(options2 = {}) { super(); let readyState; const track = new TextTrack$1(options2); this.kind = track.kind; this.src = track.src; this.srclang = track.language; this.label = track.label; this.default = track.default; Object.defineProperties(this, { readyState: { get() { return readyState; } }, track: { get() { return track; } } }); readyState = HTMLTrackElement$1.NONE; track.addEventListener("loadeddata", () => { readyState = HTMLTrackElement$1.LOADED; this.trigger({ type: "load", target: this }); }); } } HTMLTrackElement$1.prototype.allowedEvents_ = { load: "load" }; HTMLTrackElement$1.NONE = 0; HTMLTrackElement$1.LOADING = 1; HTMLTrackElement$1.LOADED = 2; HTMLTrackElement$1.ERROR = 3; const NORMAL$1 = { audio: { ListClass: AudioTrackList$1, TrackClass: AudioTrack$1, capitalName: "Audio" }, video: { ListClass: VideoTrackList$1, TrackClass: VideoTrack$1, capitalName: "Video" }, text: { ListClass: TextTrackList$1, TrackClass: TextTrack$1, capitalName: "Text" } }; Object.keys(NORMAL$1).forEach(function(type2) { NORMAL$1[type2].getterName = `${type2}Tracks`; NORMAL$1[type2].privateName = `${type2}Tracks_`; }); const REMOTE$1 = { remoteText: { ListClass: TextTrackList$1, TrackClass: TextTrack$1, capitalName: "RemoteText", getterName: "remoteTextTracks", privateName: "remoteTextTracks_" }, remoteTextEl: { ListClass: HtmlTrackElementList$1, TrackClass: HTMLTrackElement$1, capitalName: "RemoteTextTrackEls", getterName: "remoteTextTrackEls", privateName: "remoteTextTrackEls_" } }; const ALL$1 = Object.assign({}, NORMAL$1, REMOTE$1); REMOTE$1.names = Object.keys(REMOTE$1); NORMAL$1.names = Object.keys(NORMAL$1); ALL$1.names = [].concat(REMOTE$1.names).concat(NORMAL$1.names); function createTrackHelper$1(self2, kind, label2, language, options2 = {}) { const tracks = self2.textTracks(); options2.kind = kind; if (label2) { options2.label = label2; } if (language) { options2.language = language; } options2.tech = self2; const track = new ALL$1.text.TrackClass(options2); tracks.addTrack(track); return track; } class Tech$2 extends Component$1$1 { constructor(options2 = {}, ready = function() { }) { options2.reportTouchActivity = false; super(null, options2, ready); this.onDurationChange_ = (e) => this.onDurationChange(e); this.trackProgress_ = (e) => this.trackProgress(e); this.trackCurrentTime_ = (e) => this.trackCurrentTime(e); this.stopTrackingCurrentTime_ = (e) => this.stopTrackingCurrentTime(e); this.disposeSourceHandler_ = (e) => this.disposeSourceHandler(e); this.queuedHanders_ = /* @__PURE__ */ new Set(); this.hasStarted_ = false; this.on("playing", function() { this.hasStarted_ = true; }); this.on("loadstart", function() { this.hasStarted_ = false; }); ALL$1.names.forEach((name) => { const props = ALL$1[name]; if (options2 && options2[props.getterName]) { this[props.privateName] = options2[props.getterName]; } }); if (!this.featuresProgressEvents) { this.manualProgressOn(); } if (!this.featuresTimeupdateEvents) { this.manualTimeUpdatesOn(); } ["Text", "Audio", "Video"].forEach((track) => { if (options2[`native${track}Tracks`] === false) { this[`featuresNative${track}Tracks`] = false; } }); if (options2.nativeCaptions === false || options2.nativeTextTracks === false) { this.featuresNativeTextTracks = false; } else if (options2.nativeCaptions === true || options2.nativeTextTracks === true) { this.featuresNativeTextTracks = true; } if (!this.featuresNativeTextTracks) { this.emulateTextTracks(); } this.preloadTextTracks = options2.preloadTextTracks !== false; this.autoRemoteTextTracks_ = new ALL$1.text.ListClass(); this.initTrackListeners(); if (!options2.nativeControlsForTouch) { this.emitTapEvents(); } if (this.constructor) { this.name_ = this.constructor.name || "Unknown Tech"; } } triggerSourceset(src) { if (!this.isReady_) { this.one("ready", () => this.setTimeout(() => this.triggerSourceset(src), 1)); } this.trigger({ src, type: "sourceset" }); } manualProgressOn() { this.on("durationchange", this.onDurationChange_); this.manualProgress = true; this.one("ready", this.trackProgress_); } manualProgressOff() { this.manualProgress = false; this.stopTrackingProgress(); this.off("durationchange", this.onDurationChange_); } trackProgress(event2) { this.stopTrackingProgress(); this.progressInterval = this.setInterval(bind_(this, function() { const numBufferedPercent = this.bufferedPercent(); if (this.bufferedPercent_ !== numBufferedPercent) { this.trigger("progress"); } this.bufferedPercent_ = numBufferedPercent; if (numBufferedPercent === 1) { this.stopTrackingProgress(); } }), 500); } onDurationChange(event2) { this.duration_ = this.duration(); } buffered() { return createTimeRanges$1(0, 0); } bufferedPercent() { return bufferedPercent$1(this.buffered(), this.duration_); } stopTrackingProgress() { this.clearInterval(this.progressInterval); } manualTimeUpdatesOn() { this.manualTimeUpdates = true; this.on("play", this.trackCurrentTime_); this.on("pause", this.stopTrackingCurrentTime_); } manualTimeUpdatesOff() { this.manualTimeUpdates = false; this.stopTrackingCurrentTime(); this.off("play", this.trackCurrentTime_); this.off("pause", this.stopTrackingCurrentTime_); } trackCurrentTime() { if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); } this.currentTimeInterval = this.setInterval(function() { this.trigger({ type: "timeupdate", target: this, manuallyTriggered: true }); }, 250); } stopTrackingCurrentTime() { this.clearInterval(this.currentTimeInterval); this.trigger({ type: "timeupdate", target: this, manuallyTriggered: true }); } dispose() { this.clearTracks(NORMAL$1.names); if (this.manualProgress) { this.manualProgressOff(); } if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); } super.dispose(); } clearTracks(types) { types = [].concat(types); types.forEach((type2) => { const list = this[`${type2}Tracks`]() || []; let i2 = list.length; while (i2--) { const track = list[i2]; if (type2 === "text") { this.removeRemoteTextTrack(track); } list.removeTrack(track); } }); } cleanupAutoTextTracks() { const list = this.autoRemoteTextTracks_ || []; let i2 = list.length; while (i2--) { const track = list[i2]; this.removeRemoteTextTrack(track); } } reset() { } crossOrigin() { } setCrossOrigin() { } error(err) { if (err !== void 0) { this.error_ = new MediaError$1(err); this.trigger("error"); } return this.error_; } played() { if (this.hasStarted_) { return createTimeRanges$1(0, 0); } return createTimeRanges$1(); } play() { } setScrubbing(_isScrubbing) { } scrubbing() { } setCurrentTime(_seconds) { if (this.manualTimeUpdates) { this.trigger({ type: "timeupdate", target: this, manuallyTriggered: true }); } } initTrackListeners() { NORMAL$1.names.forEach((name) => { const props = NORMAL$1[name]; const trackListChanges = () => { this.trigger(`${name}trackchange`); }; const tracks = this[props.getterName](); tracks.addEventListener("removetrack", trackListChanges); tracks.addEventListener("addtrack", trackListChanges); this.on("dispose", () => { tracks.removeEventListener("removetrack", trackListChanges); tracks.removeEventListener("addtrack", trackListChanges); }); }); } addWebVttScript_() { if (window_1.WebVTT) { return; } if (document_1.body.contains(this.el())) { if (!this.options_["vtt.js"] && isPlain$1(vtt) && Object.keys(vtt).length > 0) { this.trigger("vttjsloaded"); return; } const script = document_1.createElement("script"); script.src = this.options_["vtt.js"] || "https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js"; script.onload = () => { this.trigger("vttjsloaded"); }; script.onerror = () => { this.trigger("vttjserror"); }; this.on("dispose", () => { script.onload = null; script.onerror = null; }); window_1.WebVTT = true; this.el().parentNode.appendChild(script); } else { this.ready(this.addWebVttScript_); } } emulateTextTracks() { const tracks = this.textTracks(); const remoteTracks = this.remoteTextTracks(); const handleAddTrack = (e) => tracks.addTrack(e.track); const handleRemoveTrack = (e) => tracks.removeTrack(e.track); remoteTracks.on("addtrack", handleAddTrack); remoteTracks.on("removetrack", handleRemoveTrack); this.addWebVttScript_(); const updateDisplay = () => this.trigger("texttrackchange"); const textTracksChanges = () => { updateDisplay(); for (let i2 = 0; i2 < tracks.length; i2++) { const track = tracks[i2]; track.removeEventListener("cuechange", updateDisplay); if (track.mode === "showing") { track.addEventListener("cuechange", updateDisplay); } } }; textTracksChanges(); tracks.addEventListener("change", textTracksChanges); tracks.addEventListener("addtrack", textTracksChanges); tracks.addEventListener("removetrack", textTracksChanges); this.on("dispose", function() { remoteTracks.off("addtrack", handleAddTrack); remoteTracks.off("removetrack", handleRemoveTrack); tracks.removeEventListener("change", textTracksChanges); tracks.removeEventListener("addtrack", textTracksChanges); tracks.removeEventListener("removetrack", textTracksChanges); for (let i2 = 0; i2 < tracks.length; i2++) { const track = tracks[i2]; track.removeEventListener("cuechange", updateDisplay); } }); } addTextTrack(kind, label2, language) { if (!kind) { throw new Error("TextTrack kind is required but was not provided"); } return createTrackHelper$1(this, kind, label2, language); } createRemoteTextTrack(options2) { const track = merge$1(options2, { tech: this }); return new REMOTE$1.remoteTextEl.TrackClass(track); } addRemoteTextTrack(options2 = {}, manualCleanup) { const htmlTrackElement = this.createRemoteTextTrack(options2); if (typeof manualCleanup !== "boolean") { manualCleanup = false; } this.remoteTextTrackEls().addTrackElement_(htmlTrackElement); this.remoteTextTracks().addTrack(htmlTrackElement.track); if (manualCleanup === false) { this.ready(() => this.autoRemoteTextTracks_.addTrack(htmlTrackElement.track)); } return htmlTrackElement; } removeRemoteTextTrack(track) { const trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track); this.remoteTextTrackEls().removeTrackElement_(trackElement); this.remoteTextTracks().removeTrack(track); this.autoRemoteTextTracks_.removeTrack(track); } getVideoPlaybackQuality() { return {}; } requestPictureInPicture() { return Promise.reject(); } disablePictureInPicture() { return true; } setDisablePictureInPicture() { } requestVideoFrameCallback(cb) { const id = newGUID$1(); if (!this.isReady_ || this.paused()) { this.queuedHanders_.add(id); this.one("playing", () => { if (this.queuedHanders_.has(id)) { this.queuedHanders_.delete(id); cb(); } }); } else { this.requestNamedAnimationFrame(id, cb); } return id; } cancelVideoFrameCallback(id) { if (this.queuedHanders_.has(id)) { this.queuedHanders_.delete(id); } else { this.cancelNamedAnimationFrame(id); } } setPoster() { } playsinline() { } setPlaysinline() { } overrideNativeAudioTracks(override) { } overrideNativeVideoTracks(override) { } canPlayType(_type) { return ""; } static canPlayType(_type) { return ""; } static canPlaySource(srcObj, options2) { return Tech$2.canPlayType(srcObj.type); } static isTech(component) { return component.prototype instanceof Tech$2 || component instanceof Tech$2 || component === Tech$2; } static registerTech(name, tech) { if (!Tech$2.techs_) { Tech$2.techs_ = {}; } if (!Tech$2.isTech(tech)) { throw new Error(`Tech ${name} must be a Tech`); } if (!Tech$2.canPlayType) { throw new Error("Techs must have a static canPlayType method on them"); } if (!Tech$2.canPlaySource) { throw new Error("Techs must have a static canPlaySource method on them"); } name = toTitleCase$1$1(name); Tech$2.techs_[name] = tech; Tech$2.techs_[toLowerCase$1(name)] = tech; if (name !== "Tech") { Tech$2.defaultTechOrder_.push(name); } return tech; } static getTech(name) { if (!name) { return; } if (Tech$2.techs_ && Tech$2.techs_[name]) { return Tech$2.techs_[name]; } name = toTitleCase$1$1(name); if (window_1 && window_1.videojs && window_1.videojs[name]) { log$1$1.warn(`The ${name} tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)`); return window_1.videojs[name]; } } } ALL$1.names.forEach(function(name) { const props = ALL$1[name]; Tech$2.prototype[props.getterName] = function() { this[props.privateName] = this[props.privateName] || new props.ListClass(); return this[props.privateName]; }; }); Tech$2.prototype.featuresVolumeControl = true; Tech$2.prototype.featuresMuteControl = true; Tech$2.prototype.featuresFullscreenResize = false; Tech$2.prototype.featuresPlaybackRate = false; Tech$2.prototype.featuresProgressEvents = false; Tech$2.prototype.featuresSourceset = false; Tech$2.prototype.featuresTimeupdateEvents = false; Tech$2.prototype.featuresNativeTextTracks = false; Tech$2.prototype.featuresVideoFrameCallback = false; Tech$2.withSourceHandlers = function(_Tech) { _Tech.registerSourceHandler = function(handler, index2) { let handlers = _Tech.sourceHandlers; if (!handlers) { handlers = _Tech.sourceHandlers = []; } if (index2 === void 0) { index2 = handlers.length; } handlers.splice(index2, 0, handler); }; _Tech.canPlayType = function(type2) { const handlers = _Tech.sourceHandlers || []; let can; for (let i2 = 0; i2 < handlers.length; i2++) { can = handlers[i2].canPlayType(type2); if (can) { return can; } } return ""; }; _Tech.selectSourceHandler = function(source, options2) { const handlers = _Tech.sourceHandlers || []; let can; for (let i2 = 0; i2 < handlers.length; i2++) { can = handlers[i2].canHandleSource(source, options2); if (can) { return handlers[i2]; } } return null; }; _Tech.canPlaySource = function(srcObj, options2) { const sh = _Tech.selectSourceHandler(srcObj, options2); if (sh) { return sh.canHandleSource(srcObj, options2); } return ""; }; const deferrable = ["seekable", "seeking", "duration"]; deferrable.forEach(function(fnName) { const originalFn = this[fnName]; if (typeof originalFn !== "function") { return; } this[fnName] = function() { if (this.sourceHandler_ && this.sourceHandler_[fnName]) { return this.sourceHandler_[fnName].apply(this.sourceHandler_, arguments); } return originalFn.apply(this, arguments); }; }, _Tech.prototype); _Tech.prototype.setSource = function(source) { let sh = _Tech.selectSourceHandler(source, this.options_); if (!sh) { if (_Tech.nativeSourceHandler) { sh = _Tech.nativeSourceHandler; } else { log$1$1.error("No source handler found for the current source."); } } this.disposeSourceHandler(); this.off("dispose", this.disposeSourceHandler_); if (sh !== _Tech.nativeSourceHandler) { this.currentSource_ = source; } this.sourceHandler_ = sh.handleSource(source, this, this.options_); this.one("dispose", this.disposeSourceHandler_); }; _Tech.prototype.disposeSourceHandler = function() { if (this.currentSource_) { this.clearTracks(["audio", "video"]); this.currentSource_ = null; } this.cleanupAutoTextTracks(); if (this.sourceHandler_) { if (this.sourceHandler_.dispose) { this.sourceHandler_.dispose(); } this.sourceHandler_ = null; } }; }; Component$1$1.registerComponent("Tech", Tech$2); Tech$2.registerTech("Tech", Tech$2); Tech$2.defaultTechOrder_ = []; const middlewares$1 = {}; const middlewareInstances$1 = {}; const TERMINATOR$1 = {}; function use$1(type2, middleware) { middlewares$1[type2] = middlewares$1[type2] || []; middlewares$1[type2].push(middleware); } function setSource$1(player, src, next) { player.setTimeout(() => setSourceHelper$1(src, middlewares$1[src.type], next, player), 1); } function setTech$1(middleware, tech) { middleware.forEach((mw) => mw.setTech && mw.setTech(tech)); } function get$1(middleware, tech, method) { return middleware.reduceRight(middlewareIterator$1(method), tech[method]()); } function set$1(middleware, tech, method, arg) { return tech[method](middleware.reduce(middlewareIterator$1(method), arg)); } function mediate$1(middleware, tech, method, arg = null) { const callMethod = "call" + toTitleCase$1$1(method); const middlewareValue = middleware.reduce(middlewareIterator$1(callMethod), arg); const terminated = middlewareValue === TERMINATOR$1; const returnValue = terminated ? null : tech[method](middlewareValue); executeRight$1(middleware, method, returnValue, terminated); return returnValue; } const allowedGetters$1 = { buffered: 1, currentTime: 1, duration: 1, muted: 1, played: 1, paused: 1, seekable: 1, volume: 1, ended: 1 }; const allowedSetters$1 = { setCurrentTime: 1, setMuted: 1, setVolume: 1 }; const allowedMediators$1 = { play: 1, pause: 1 }; function middlewareIterator$1(method) { return (value, mw) => { if (value === TERMINATOR$1) { return TERMINATOR$1; } if (mw[method]) { return mw[method](value); } return value; }; } function executeRight$1(mws, method, value, terminated) { for (let i2 = mws.length - 1; i2 >= 0; i2--) { const mw = mws[i2]; if (mw[method]) { mw[method](terminated, value); } } } function clearCacheForPlayer$1(player) { middlewareInstances$1[player.id()] = null; } function getOrCreateFactory$1(player, mwFactory) { const mws = middlewareInstances$1[player.id()]; let mw = null; if (mws === void 0 || mws === null) { mw = mwFactory(player); middlewareInstances$1[player.id()] = [[mwFactory, mw]]; return mw; } for (let i2 = 0; i2 < mws.length; i2++) { const [mwf, mwi] = mws[i2]; if (mwf !== mwFactory) { continue; } mw = mwi; } if (mw === null) { mw = mwFactory(player); mws.push([mwFactory, mw]); } return mw; } function setSourceHelper$1(src = {}, middleware = [], next, player, acc = [], lastRun = false) { const [mwFactory, ...mwrest] = middleware; if (typeof mwFactory === "string") { setSourceHelper$1(src, middlewares$1[mwFactory], next, player, acc, lastRun); } else if (mwFactory) { const mw = getOrCreateFactory$1(player, mwFactory); if (!mw.setSource) { acc.push(mw); return setSourceHelper$1(src, mwrest, next, player, acc, lastRun); } mw.setSource(Object.assign({}, src), function(err, _src) { if (err) { return setSourceHelper$1(src, mwrest, next, player, acc, lastRun); } acc.push(mw); setSourceHelper$1(_src, src.type === _src.type ? mwrest : middlewares$1[_src.type], next, player, acc, lastRun); }); } else if (mwrest.length) { setSourceHelper$1(src, mwrest, next, player, acc, lastRun); } else if (lastRun) { next(src, acc); } else { setSourceHelper$1(src, middlewares$1["*"], next, player, acc, true); } } const MimetypesKind$1 = { opus: "video/ogg", ogv: "video/ogg", mp4: "video/mp4", mov: "video/mp4", m4v: "video/mp4", mkv: "video/x-matroska", m4a: "audio/mp4", mp3: "audio/mpeg", aac: "audio/aac", caf: "audio/x-caf", flac: "audio/flac", oga: "audio/ogg", wav: "audio/wav", m3u8: "application/x-mpegURL", mpd: "application/dash+xml", jpg: "image/jpeg", jpeg: "image/jpeg", gif: "image/gif", png: "image/png", svg: "image/svg+xml", webp: "image/webp" }; const getMimetype$1 = function(src = "") { const ext = getFileExtension$1(src); const mimetype = MimetypesKind$1[ext.toLowerCase()]; return mimetype || ""; }; const findMimetype$1 = (player, src) => { if (!src) { return ""; } if (player.cache_.source.src === src && player.cache_.source.type) { return player.cache_.source.type; } const matchingSources = player.cache_.sources.filter((s) => s.src === src); if (matchingSources.length) { return matchingSources[0].type; } const sources = player.$$("source"); for (let i2 = 0; i2 < sources.length; i2++) { const s = sources[i2]; if (s.type && s.src && s.src === src) { return s.type; } } return getMimetype$1(src); }; const filterSource$1 = function(src) { if (Array.isArray(src)) { let newsrc = []; src.forEach(function(srcobj) { srcobj = filterSource$1(srcobj); if (Array.isArray(srcobj)) { newsrc = newsrc.concat(srcobj); } else if (isObject$2(srcobj)) { newsrc.push(srcobj); } }); src = newsrc; } else if (typeof src === "string" && src.trim()) { src = [fixSource$1({ src })]; } else if (isObject$2(src) && typeof src.src === "string" && src.src && src.src.trim()) { src = [fixSource$1(src)]; } else { src = []; } return src; }; function fixSource$1(src) { if (!src.type) { const mimetype = getMimetype$1(src.src); if (mimetype) { src.type = mimetype; } } return src; } class MediaLoader$1 extends Component$1$1 { constructor(player, options2, ready) { const options_ = merge$1({ createEl: false }, options2); super(player, options_, ready); if (!options2.playerOptions.sources || options2.playerOptions.sources.length === 0) { for (let i2 = 0, j = options2.playerOptions.techOrder; i2 < j.length; i2++) { const techName = toTitleCase$1$1(j[i2]); let tech = Tech$2.getTech(techName); if (!techName) { tech = Component$1$1.getComponent(techName); } if (tech && tech.isSupported()) { player.loadTech_(techName); break; } } } else { player.src(options2.playerOptions.sources); } } } Component$1$1.registerComponent("MediaLoader", MediaLoader$1); class ClickableComponent$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); if (this.options_.controlText) { this.controlText(this.options_.controlText); } this.handleMouseOver_ = (e) => this.handleMouseOver(e); this.handleMouseOut_ = (e) => this.handleMouseOut(e); this.handleClick_ = (e) => this.handleClick(e); this.handleKeyDown_ = (e) => this.handleKeyDown(e); this.emitTapEvents(); this.enable(); } createEl(tag = "div", props = {}, attributes = {}) { props = Object.assign({ className: this.buildCSSClass(), tabIndex: 0 }, props); if (tag === "button") { log$1$1.error(`Creating a ClickableComponent with an HTML element of ${tag} is not supported; use a Button instead.`); } attributes = Object.assign({ role: "button" }, attributes); this.tabIndex_ = props.tabIndex; const el = createEl$1(tag, props, attributes); el.appendChild(createEl$1("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": true })); this.createControlTextEl(el); return el; } dispose() { this.controlTextEl_ = null; super.dispose(); } createControlTextEl(el) { this.controlTextEl_ = createEl$1("span", { className: "vjs-control-text" }, { "aria-live": "polite" }); if (el) { el.appendChild(this.controlTextEl_); } this.controlText(this.controlText_, el); return this.controlTextEl_; } controlText(text, el = this.el()) { if (text === void 0) { return this.controlText_ || "Need Text"; } const localizedText = this.localize(text); this.controlText_ = text; textContent$1(this.controlTextEl_, localizedText); if (!this.nonIconControl && !this.player_.options_.noUITitleAttributes) { el.setAttribute("title", localizedText); } } buildCSSClass() { return `vjs-control vjs-button ${super.buildCSSClass()}`; } enable() { if (!this.enabled_) { this.enabled_ = true; this.removeClass("vjs-disabled"); this.el_.setAttribute("aria-disabled", "false"); if (typeof this.tabIndex_ !== "undefined") { this.el_.setAttribute("tabIndex", this.tabIndex_); } this.on(["tap", "click"], this.handleClick_); this.on("keydown", this.handleKeyDown_); } } disable() { this.enabled_ = false; this.addClass("vjs-disabled"); this.el_.setAttribute("aria-disabled", "true"); if (typeof this.tabIndex_ !== "undefined") { this.el_.removeAttribute("tabIndex"); } this.off("mouseover", this.handleMouseOver_); this.off("mouseout", this.handleMouseOut_); this.off(["tap", "click"], this.handleClick_); this.off("keydown", this.handleKeyDown_); } handleLanguagechange() { this.controlText(this.controlText_); } handleClick(event2) { if (this.options_.clickHandler) { this.options_.clickHandler.call(this, arguments); } } handleKeyDown(event2) { if (keycode.isEventKey(event2, "Space") || keycode.isEventKey(event2, "Enter")) { event2.preventDefault(); event2.stopPropagation(); this.trigger("click"); } else { super.handleKeyDown(event2); } } } Component$1$1.registerComponent("ClickableComponent", ClickableComponent$1); class PosterImage$1 extends ClickableComponent$1 { constructor(player, options2) { super(player, options2); this.update(); this.update_ = (e) => this.update(e); player.on("posterchange", this.update_); } dispose() { this.player().off("posterchange", this.update_); super.dispose(); } createEl() { return createEl$1("div", { className: "vjs-poster" }); } crossOrigin(value) { if (typeof value === "undefined") { if (this.$("img")) { return this.$("img").crossOrigin; } else if (this.player_.tech_ && this.player_.tech_.isReady_) { return this.player_.crossOrigin(); } return this.player_.options_.crossOrigin || this.player_.options_.crossorigin || null; } if (value !== null && value !== "anonymous" && value !== "use-credentials") { this.player_.log.warn(`crossOrigin must be null, "anonymous" or "use-credentials", given "${value}"`); return; } if (this.$("img")) { this.$("img").crossOrigin = value; } return; } update(event2) { const url = this.player().poster(); this.setSrc(url); if (url) { this.show(); } else { this.hide(); } } setSrc(url) { if (!url) { this.el_.textContent = ""; return; } if (!this.$("img")) { this.el_.appendChild(createEl$1("picture", { className: "vjs-poster", tabIndex: -1 }, {}, createEl$1("img", { loading: "lazy", crossOrigin: this.crossOrigin() }, { alt: "" }))); } this.$("img").src = url; } handleClick(event2) { if (!this.player_.controls()) { return; } if (this.player_.tech(true)) { this.player_.tech(true).focus(); } if (this.player_.paused()) { silencePromise$1(this.player_.play()); } else { this.player_.pause(); } } } PosterImage$1.prototype.crossorigin = PosterImage$1.prototype.crossOrigin; Component$1$1.registerComponent("PosterImage", PosterImage$1); const darkGray$1 = "#222"; const lightGray$1 = "#ccc"; const fontMap$1 = { monospace: "monospace", sansSerif: "sans-serif", serif: "serif", monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace', monospaceSerif: '"Courier New", monospace', proportionalSansSerif: "sans-serif", proportionalSerif: "serif", casual: '"Comic Sans MS", Impact, fantasy', script: '"Monotype Corsiva", cursive', smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif' }; function constructColor$1(color2, opacity) { let hex; if (color2.length === 4) { hex = color2[1] + color2[1] + color2[2] + color2[2] + color2[3] + color2[3]; } else if (color2.length === 7) { hex = color2.slice(1); } else { throw new Error("Invalid color code provided, " + color2 + "; must be formatted as e.g. #f0e or #f604e2."); } return "rgba(" + parseInt(hex.slice(0, 2), 16) + "," + parseInt(hex.slice(2, 4), 16) + "," + parseInt(hex.slice(4, 6), 16) + "," + opacity + ")"; } function tryUpdateStyle$1(el, style, rule) { try { el.style[style] = rule; } catch (e) { return; } } class TextTrackDisplay$1 extends Component$1$1 { constructor(player, options2, ready) { super(player, options2, ready); const updateDisplayHandler = (e) => this.updateDisplay(e); player.on("loadstart", (e) => this.toggleDisplay(e)); player.on("texttrackchange", updateDisplayHandler); player.on("loadedmetadata", (e) => this.preselectTrack(e)); player.ready(bind_(this, function() { if (player.tech_ && player.tech_.featuresNativeTextTracks) { this.hide(); return; } player.on("fullscreenchange", updateDisplayHandler); player.on("playerresize", updateDisplayHandler); const screenOrientation = window_1.screen.orientation || window_1; const changeOrientationEvent = window_1.screen.orientation ? "change" : "orientationchange"; screenOrientation.addEventListener(changeOrientationEvent, updateDisplayHandler); player.on("dispose", () => screenOrientation.removeEventListener(changeOrientationEvent, updateDisplayHandler)); const tracks = this.options_.playerOptions.tracks || []; for (let i2 = 0; i2 < tracks.length; i2++) { this.player_.addRemoteTextTrack(tracks[i2], true); } this.preselectTrack(); })); } preselectTrack() { const modes = { captions: 1, subtitles: 1 }; const trackList = this.player_.textTracks(); const userPref = this.player_.cache_.selectedLanguage; let firstDesc; let firstCaptions; let preferredTrack; for (let i2 = 0; i2 < trackList.length; i2++) { const track = trackList[i2]; if (userPref && userPref.enabled && userPref.language && userPref.language === track.language && track.kind in modes) { if (track.kind === userPref.kind) { preferredTrack = track; } else if (!preferredTrack) { preferredTrack = track; } } else if (userPref && !userPref.enabled) { preferredTrack = null; firstDesc = null; firstCaptions = null; } else if (track.default) { if (track.kind === "descriptions" && !firstDesc) { firstDesc = track; } else if (track.kind in modes && !firstCaptions) { firstCaptions = track; } } } if (preferredTrack) { preferredTrack.mode = "showing"; } else if (firstCaptions) { firstCaptions.mode = "showing"; } else if (firstDesc) { firstDesc.mode = "showing"; } } toggleDisplay() { if (this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks) { this.hide(); } else { this.show(); } } createEl() { return super.createEl("div", { className: "vjs-text-track-display" }, { "translate": "yes", "aria-live": "off", "aria-atomic": "true" }); } clearDisplay() { if (typeof window_1.WebVTT === "function") { window_1.WebVTT.processCues(window_1, [], this.el_); } } updateDisplay() { const tracks = this.player_.textTracks(); const allowMultipleShowingTracks = this.options_.allowMultipleShowingTracks; this.clearDisplay(); if (allowMultipleShowingTracks) { const showingTracks = []; for (let i3 = 0; i3 < tracks.length; ++i3) { const track = tracks[i3]; if (track.mode !== "showing") { continue; } showingTracks.push(track); } this.updateForTrack(showingTracks); return; } let descriptionsTrack = null; let captionsSubtitlesTrack = null; let i2 = tracks.length; while (i2--) { const track = tracks[i2]; if (track.mode === "showing") { if (track.kind === "descriptions") { descriptionsTrack = track; } else { captionsSubtitlesTrack = track; } } } if (captionsSubtitlesTrack) { if (this.getAttribute("aria-live") !== "off") { this.setAttribute("aria-live", "off"); } this.updateForTrack(captionsSubtitlesTrack); } else if (descriptionsTrack) { if (this.getAttribute("aria-live") !== "assertive") { this.setAttribute("aria-live", "assertive"); } this.updateForTrack(descriptionsTrack); } } updateDisplayState(track) { const overrides = this.player_.textTrackSettings.getValues(); const cues = track.activeCues; let i2 = cues.length; while (i2--) { const cue = cues[i2]; if (!cue) { continue; } const cueDiv = cue.displayState; if (overrides.color) { cueDiv.firstChild.style.color = overrides.color; } if (overrides.textOpacity) { tryUpdateStyle$1(cueDiv.firstChild, "color", constructColor$1(overrides.color || "#fff", overrides.textOpacity)); } if (overrides.backgroundColor) { cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor; } if (overrides.backgroundOpacity) { tryUpdateStyle$1(cueDiv.firstChild, "backgroundColor", constructColor$1(overrides.backgroundColor || "#000", overrides.backgroundOpacity)); } if (overrides.windowColor) { if (overrides.windowOpacity) { tryUpdateStyle$1(cueDiv, "backgroundColor", constructColor$1(overrides.windowColor, overrides.windowOpacity)); } else { cueDiv.style.backgroundColor = overrides.windowColor; } } if (overrides.edgeStyle) { if (overrides.edgeStyle === "dropshadow") { cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray$1}, 2px 2px 4px ${darkGray$1}, 2px 2px 5px ${darkGray$1}`; } else if (overrides.edgeStyle === "raised") { cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray$1}, 2px 2px ${darkGray$1}, 3px 3px ${darkGray$1}`; } else if (overrides.edgeStyle === "depressed") { cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray$1}, 0 1px ${lightGray$1}, -1px -1px ${darkGray$1}, 0 -1px ${darkGray$1}`; } else if (overrides.edgeStyle === "uniform") { cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray$1}, 0 0 4px ${darkGray$1}, 0 0 4px ${darkGray$1}, 0 0 4px ${darkGray$1}`; } } if (overrides.fontPercent && overrides.fontPercent !== 1) { const fontSize = window_1.parseFloat(cueDiv.style.fontSize); cueDiv.style.fontSize = fontSize * overrides.fontPercent + "px"; cueDiv.style.height = "auto"; cueDiv.style.top = "auto"; } if (overrides.fontFamily && overrides.fontFamily !== "default") { if (overrides.fontFamily === "small-caps") { cueDiv.firstChild.style.fontVariant = "small-caps"; } else { cueDiv.firstChild.style.fontFamily = fontMap$1[overrides.fontFamily]; } } } } updateForTrack(tracks) { if (!Array.isArray(tracks)) { tracks = [tracks]; } if (typeof window_1.WebVTT !== "function" || tracks.every((track) => { return !track.activeCues; })) { return; } const cues = []; for (let i2 = 0; i2 < tracks.length; ++i2) { const track = tracks[i2]; for (let j = 0; j < track.activeCues.length; ++j) { cues.push(track.activeCues[j]); } } window_1.WebVTT.processCues(window_1, cues, this.el_); for (let i2 = 0; i2 < tracks.length; ++i2) { const track = tracks[i2]; for (let j = 0; j < track.activeCues.length; ++j) { const cueEl = track.activeCues[j].displayState; addClass$1(cueEl, "vjs-text-track-cue", "vjs-text-track-cue-" + (track.language ? track.language : i2)); if (track.language) { setAttribute$1(cueEl, "lang", track.language); } } if (this.player_.textTrackSettings) { this.updateDisplayState(track); } } } } Component$1$1.registerComponent("TextTrackDisplay", TextTrackDisplay$1); class LoadingSpinner$1 extends Component$1$1 { createEl() { const isAudio = this.player_.isAudio(); const playerType = this.localize(isAudio ? "Audio Player" : "Video Player"); const controlText = createEl$1("span", { className: "vjs-control-text", textContent: this.localize("{1} is loading.", [playerType]) }); const el = super.createEl("div", { className: "vjs-loading-spinner", dir: "ltr" }); el.appendChild(controlText); return el; } handleLanguagechange() { this.$(".vjs-control-text").textContent = this.localize("{1} is loading.", [this.player_.isAudio() ? "Audio Player" : "Video Player"]); } } Component$1$1.registerComponent("LoadingSpinner", LoadingSpinner$1); class Button$1 extends ClickableComponent$1 { createEl(tag, props = {}, attributes = {}) { tag = "button"; props = Object.assign({ className: this.buildCSSClass() }, props); attributes = Object.assign({ type: "button" }, attributes); const el = createEl$1(tag, props, attributes); el.appendChild(createEl$1("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": true })); this.createControlTextEl(el); return el; } addChild(child, options2 = {}) { const className = this.constructor.name; log$1$1.warn(`Adding an actionable (user controllable) child to a Button (${className}) is not supported; use a ClickableComponent instead.`); return Component$1$1.prototype.addChild.call(this, child, options2); } enable() { super.enable(); this.el_.removeAttribute("disabled"); } disable() { super.disable(); this.el_.setAttribute("disabled", "disabled"); } handleKeyDown(event2) { if (keycode.isEventKey(event2, "Space") || keycode.isEventKey(event2, "Enter")) { event2.stopPropagation(); return; } super.handleKeyDown(event2); } } Component$1$1.registerComponent("Button", Button$1); class BigPlayButton$1 extends Button$1 { constructor(player, options2) { super(player, options2); this.mouseused_ = false; this.on("mousedown", (e) => this.handleMouseDown(e)); } buildCSSClass() { return "vjs-big-play-button"; } handleClick(event2) { const playPromise = this.player_.play(); if (this.mouseused_ && event2.clientX && event2.clientY) { silencePromise$1(playPromise); if (this.player_.tech(true)) { this.player_.tech(true).focus(); } return; } const cb = this.player_.getChild("controlBar"); const playToggle = cb && cb.getChild("playToggle"); if (!playToggle) { this.player_.tech(true).focus(); return; } const playFocus = () => playToggle.focus(); if (isPromise$1(playPromise)) { playPromise.then(playFocus, () => { }); } else { this.setTimeout(playFocus, 1); } } handleKeyDown(event2) { this.mouseused_ = false; super.handleKeyDown(event2); } handleMouseDown(event2) { this.mouseused_ = true; } } BigPlayButton$1.prototype.controlText_ = "Play Video"; Component$1$1.registerComponent("BigPlayButton", BigPlayButton$1); class CloseButton$1 extends Button$1 { constructor(player, options2) { super(player, options2); this.controlText(options2 && options2.controlText || this.localize("Close")); } buildCSSClass() { return `vjs-close-button ${super.buildCSSClass()}`; } handleClick(event2) { this.trigger({ type: "close", bubbles: false }); } handleKeyDown(event2) { if (keycode.isEventKey(event2, "Esc")) { event2.preventDefault(); event2.stopPropagation(); this.trigger("click"); } else { super.handleKeyDown(event2); } } } Component$1$1.registerComponent("CloseButton", CloseButton$1); class PlayToggle$1 extends Button$1 { constructor(player, options2 = {}) { super(player, options2); options2.replay = options2.replay === void 0 || options2.replay; this.on(player, "play", (e) => this.handlePlay(e)); this.on(player, "pause", (e) => this.handlePause(e)); if (options2.replay) { this.on(player, "ended", (e) => this.handleEnded(e)); } } buildCSSClass() { return `vjs-play-control ${super.buildCSSClass()}`; } handleClick(event2) { if (this.player_.paused()) { silencePromise$1(this.player_.play()); } else { this.player_.pause(); } } handleSeeked(event2) { this.removeClass("vjs-ended"); if (this.player_.paused()) { this.handlePause(event2); } else { this.handlePlay(event2); } } handlePlay(event2) { this.removeClass("vjs-ended", "vjs-paused"); this.addClass("vjs-playing"); this.controlText("Pause"); } handlePause(event2) { this.removeClass("vjs-playing"); this.addClass("vjs-paused"); this.controlText("Play"); } handleEnded(event2) { this.removeClass("vjs-playing"); this.addClass("vjs-ended"); this.controlText("Replay"); this.one(this.player_, "seeked", (e) => this.handleSeeked(e)); } } PlayToggle$1.prototype.controlText_ = "Play"; Component$1$1.registerComponent("PlayToggle", PlayToggle$1); class TimeDisplay$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.on(player, ["timeupdate", "ended"], (e) => this.updateContent(e)); this.updateTextNode_(); } createEl() { const className = this.buildCSSClass(); const el = super.createEl("div", { className: `${className} vjs-time-control vjs-control` }); const span = createEl$1("span", { className: "vjs-control-text", textContent: `${this.localize(this.labelText_)}\xA0` }, { role: "presentation" }); el.appendChild(span); this.contentEl_ = createEl$1("span", { className: `${className}-display` }, { role: "presentation" }); el.appendChild(this.contentEl_); return el; } dispose() { this.contentEl_ = null; this.textNode_ = null; super.dispose(); } updateTextNode_(time = 0) { time = formatTime$1(time); if (this.formattedTime_ === time) { return; } this.formattedTime_ = time; this.requestNamedAnimationFrame("TimeDisplay#updateTextNode_", () => { if (!this.contentEl_) { return; } let oldNode = this.textNode_; if (oldNode && this.contentEl_.firstChild !== oldNode) { oldNode = null; log$1$1.warn("TimeDisplay#updateTextnode_: Prevented replacement of text node element since it was no longer a child of this node. Appending a new node instead."); } this.textNode_ = document_1.createTextNode(this.formattedTime_); if (!this.textNode_) { return; } if (oldNode) { this.contentEl_.replaceChild(this.textNode_, oldNode); } else { this.contentEl_.appendChild(this.textNode_); } }); } updateContent(event2) { } } TimeDisplay$1.prototype.labelText_ = "Time"; TimeDisplay$1.prototype.controlText_ = "Time"; Component$1$1.registerComponent("TimeDisplay", TimeDisplay$1); class CurrentTimeDisplay$1 extends TimeDisplay$1 { buildCSSClass() { return "vjs-current-time"; } updateContent(event2) { let time; if (this.player_.ended()) { time = this.player_.duration(); } else { time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); } this.updateTextNode_(time); } } CurrentTimeDisplay$1.prototype.labelText_ = "Current Time"; CurrentTimeDisplay$1.prototype.controlText_ = "Current Time"; Component$1$1.registerComponent("CurrentTimeDisplay", CurrentTimeDisplay$1); class DurationDisplay$1 extends TimeDisplay$1 { constructor(player, options2) { super(player, options2); const updateContent = (e) => this.updateContent(e); this.on(player, "durationchange", updateContent); this.on(player, "loadstart", updateContent); this.on(player, "loadedmetadata", updateContent); } buildCSSClass() { return "vjs-duration"; } updateContent(event2) { const duration5 = this.player_.duration(); this.updateTextNode_(duration5); } } DurationDisplay$1.prototype.labelText_ = "Duration"; DurationDisplay$1.prototype.controlText_ = "Duration"; Component$1$1.registerComponent("DurationDisplay", DurationDisplay$1); class TimeDivider$1 extends Component$1$1 { createEl() { const el = super.createEl("div", { className: "vjs-time-control vjs-time-divider" }, { "aria-hidden": true }); const div = super.createEl("div"); const span = super.createEl("span", { textContent: "/" }); div.appendChild(span); el.appendChild(div); return el; } } Component$1$1.registerComponent("TimeDivider", TimeDivider$1); class RemainingTimeDisplay$1 extends TimeDisplay$1 { constructor(player, options2) { super(player, options2); this.on(player, "durationchange", (e) => this.updateContent(e)); } buildCSSClass() { return "vjs-remaining-time"; } createEl() { const el = super.createEl(); if (this.options_.displayNegative !== false) { el.insertBefore(createEl$1("span", {}, { "aria-hidden": true }, "-"), this.contentEl_); } return el; } updateContent(event2) { if (typeof this.player_.duration() !== "number") { return; } let time; if (this.player_.ended()) { time = 0; } else if (this.player_.remainingTimeDisplay) { time = this.player_.remainingTimeDisplay(); } else { time = this.player_.remainingTime(); } this.updateTextNode_(time); } } RemainingTimeDisplay$1.prototype.labelText_ = "Remaining Time"; RemainingTimeDisplay$1.prototype.controlText_ = "Remaining Time"; Component$1$1.registerComponent("RemainingTimeDisplay", RemainingTimeDisplay$1); class LiveDisplay$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.updateShowing(); this.on(this.player(), "durationchange", (e) => this.updateShowing(e)); } createEl() { const el = super.createEl("div", { className: "vjs-live-control vjs-control" }); this.contentEl_ = createEl$1("div", { className: "vjs-live-display" }, { "aria-live": "off" }); this.contentEl_.appendChild(createEl$1("span", { className: "vjs-control-text", textContent: `${this.localize("Stream Type")}\xA0` })); this.contentEl_.appendChild(document_1.createTextNode(this.localize("LIVE"))); el.appendChild(this.contentEl_); return el; } dispose() { this.contentEl_ = null; super.dispose(); } updateShowing(event2) { if (this.player().duration() === Infinity) { this.show(); } else { this.hide(); } } } Component$1$1.registerComponent("LiveDisplay", LiveDisplay$1); class SeekToLive$1 extends Button$1 { constructor(player, options2) { super(player, options2); this.updateLiveEdgeStatus(); if (this.player_.liveTracker) { this.updateLiveEdgeStatusHandler_ = (e) => this.updateLiveEdgeStatus(e); this.on(this.player_.liveTracker, "liveedgechange", this.updateLiveEdgeStatusHandler_); } } createEl() { const el = super.createEl("button", { className: "vjs-seek-to-live-control vjs-control" }); this.textEl_ = createEl$1("span", { className: "vjs-seek-to-live-text", textContent: this.localize("LIVE") }, { "aria-hidden": "true" }); el.appendChild(this.textEl_); return el; } updateLiveEdgeStatus() { if (!this.player_.liveTracker || this.player_.liveTracker.atLiveEdge()) { this.setAttribute("aria-disabled", true); this.addClass("vjs-at-live-edge"); this.controlText("Seek to live, currently playing live"); } else { this.setAttribute("aria-disabled", false); this.removeClass("vjs-at-live-edge"); this.controlText("Seek to live, currently behind live"); } } handleClick() { this.player_.liveTracker.seekToLiveEdge(); } dispose() { if (this.player_.liveTracker) { this.off(this.player_.liveTracker, "liveedgechange", this.updateLiveEdgeStatusHandler_); } this.textEl_ = null; super.dispose(); } } SeekToLive$1.prototype.controlText_ = "Seek to live, currently playing live"; Component$1$1.registerComponent("SeekToLive", SeekToLive$1); function clamp$1(number, min2, max2) { number = Number(number); return Math.min(max2, Math.max(min2, isNaN(number) ? min2 : number)); } var Num = /* @__PURE__ */ Object.freeze({ __proto__: null, clamp: clamp$1 }); class Slider$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.handleMouseDown_ = (e) => this.handleMouseDown(e); this.handleMouseUp_ = (e) => this.handleMouseUp(e); this.handleKeyDown_ = (e) => this.handleKeyDown(e); this.handleClick_ = (e) => this.handleClick(e); this.handleMouseMove_ = (e) => this.handleMouseMove(e); this.update_ = (e) => this.update(e); this.bar = this.getChild(this.options_.barName); this.vertical(!!this.options_.vertical); this.enable(); } enabled() { return this.enabled_; } enable() { if (this.enabled()) { return; } this.on("mousedown", this.handleMouseDown_); this.on("touchstart", this.handleMouseDown_); this.on("keydown", this.handleKeyDown_); this.on("click", this.handleClick_); this.on(this.player_, "controlsvisible", this.update); if (this.playerEvent) { this.on(this.player_, this.playerEvent, this.update); } this.removeClass("disabled"); this.setAttribute("tabindex", 0); this.enabled_ = true; } disable() { if (!this.enabled()) { return; } const doc = this.bar.el_.ownerDocument; this.off("mousedown", this.handleMouseDown_); this.off("touchstart", this.handleMouseDown_); this.off("keydown", this.handleKeyDown_); this.off("click", this.handleClick_); this.off(this.player_, "controlsvisible", this.update_); this.off(doc, "mousemove", this.handleMouseMove_); this.off(doc, "mouseup", this.handleMouseUp_); this.off(doc, "touchmove", this.handleMouseMove_); this.off(doc, "touchend", this.handleMouseUp_); this.removeAttribute("tabindex"); this.addClass("disabled"); if (this.playerEvent) { this.off(this.player_, this.playerEvent, this.update); } this.enabled_ = false; } createEl(type2, props = {}, attributes = {}) { props.className = props.className + " vjs-slider"; props = Object.assign({ tabIndex: 0 }, props); attributes = Object.assign({ "role": "slider", "aria-valuenow": 0, "aria-valuemin": 0, "aria-valuemax": 100 }, attributes); return super.createEl(type2, props, attributes); } handleMouseDown(event2) { const doc = this.bar.el_.ownerDocument; if (event2.type === "mousedown") { event2.preventDefault(); } if (event2.type === "touchstart" && !IS_CHROME$1) { event2.preventDefault(); } blockTextSelection$1(); this.addClass("vjs-sliding"); this.trigger("slideractive"); this.on(doc, "mousemove", this.handleMouseMove_); this.on(doc, "mouseup", this.handleMouseUp_); this.on(doc, "touchmove", this.handleMouseMove_); this.on(doc, "touchend", this.handleMouseUp_); this.handleMouseMove(event2, true); } handleMouseMove(event2) { } handleMouseUp(event2) { const doc = this.bar.el_.ownerDocument; unblockTextSelection$1(); this.removeClass("vjs-sliding"); this.trigger("sliderinactive"); this.off(doc, "mousemove", this.handleMouseMove_); this.off(doc, "mouseup", this.handleMouseUp_); this.off(doc, "touchmove", this.handleMouseMove_); this.off(doc, "touchend", this.handleMouseUp_); this.update(); } update() { if (!this.el_ || !this.bar) { return; } const progress = this.getProgress(); if (progress === this.progress_) { return progress; } this.progress_ = progress; this.requestNamedAnimationFrame("Slider#update", () => { const sizeKey = this.vertical() ? "height" : "width"; this.bar.el().style[sizeKey] = (progress * 100).toFixed(2) + "%"; }); return progress; } getProgress() { return Number(clamp$1(this.getPercent(), 0, 1).toFixed(4)); } calculateDistance(event2) { const position2 = getPointerPosition$1(this.el_, event2); if (this.vertical()) { return position2.y; } return position2.x; } handleKeyDown(event2) { if (keycode.isEventKey(event2, "Left") || keycode.isEventKey(event2, "Down")) { event2.preventDefault(); event2.stopPropagation(); this.stepBack(); } else if (keycode.isEventKey(event2, "Right") || keycode.isEventKey(event2, "Up")) { event2.preventDefault(); event2.stopPropagation(); this.stepForward(); } else { super.handleKeyDown(event2); } } handleClick(event2) { event2.stopPropagation(); event2.preventDefault(); } vertical(bool) { if (bool === void 0) { return this.vertical_ || false; } this.vertical_ = !!bool; if (this.vertical_) { this.addClass("vjs-slider-vertical"); } else { this.addClass("vjs-slider-horizontal"); } } } Component$1$1.registerComponent("Slider", Slider$1); const percentify$1 = (time, end) => clamp$1(time / end * 100, 0, 100).toFixed(2) + "%"; class LoadProgressBar$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.partEls_ = []; this.on(player, "progress", (e) => this.update(e)); } createEl() { const el = super.createEl("div", { className: "vjs-load-progress" }); const wrapper = createEl$1("span", { className: "vjs-control-text" }); const loadedText = createEl$1("span", { textContent: this.localize("Loaded") }); const separator = document_1.createTextNode(": "); this.percentageEl_ = createEl$1("span", { className: "vjs-control-text-loaded-percentage", textContent: "0%" }); el.appendChild(wrapper); wrapper.appendChild(loadedText); wrapper.appendChild(separator); wrapper.appendChild(this.percentageEl_); return el; } dispose() { this.partEls_ = null; this.percentageEl_ = null; super.dispose(); } update(event2) { this.requestNamedAnimationFrame("LoadProgressBar#update", () => { const liveTracker = this.player_.liveTracker; const buffered = this.player_.buffered(); const duration5 = liveTracker && liveTracker.isLive() ? liveTracker.seekableEnd() : this.player_.duration(); const bufferedEnd = this.player_.bufferedEnd(); const children = this.partEls_; const percent = percentify$1(bufferedEnd, duration5); if (this.percent_ !== percent) { this.el_.style.width = percent; textContent$1(this.percentageEl_, percent); this.percent_ = percent; } for (let i2 = 0; i2 < buffered.length; i2++) { const start2 = buffered.start(i2); const end = buffered.end(i2); let part = children[i2]; if (!part) { part = this.el_.appendChild(createEl$1()); children[i2] = part; } if (part.dataset.start === start2 && part.dataset.end === end) { continue; } part.dataset.start = start2; part.dataset.end = end; part.style.left = percentify$1(start2, bufferedEnd); part.style.width = percentify$1(end - start2, bufferedEnd); } for (let i2 = children.length; i2 > buffered.length; i2--) { this.el_.removeChild(children[i2 - 1]); } children.length = buffered.length; }); } } Component$1$1.registerComponent("LoadProgressBar", LoadProgressBar$1); class TimeTooltip$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.update = throttle$1(bind_(this, this.update), UPDATE_REFRESH_INTERVAL$1); } createEl() { return super.createEl("div", { className: "vjs-time-tooltip" }, { "aria-hidden": "true" }); } update(seekBarRect, seekBarPoint, content) { const tooltipRect = findPosition$1(this.el_); const playerRect = getBoundingClientRect$1(this.player_.el()); const seekBarPointPx = seekBarRect.width * seekBarPoint; if (!playerRect || !tooltipRect) { return; } const spaceLeftOfPoint = seekBarRect.left - playerRect.left + seekBarPointPx; const spaceRightOfPoint = seekBarRect.width - seekBarPointPx + (playerRect.right - seekBarRect.right); let pullTooltipBy = tooltipRect.width / 2; if (spaceLeftOfPoint < pullTooltipBy) { pullTooltipBy += pullTooltipBy - spaceLeftOfPoint; } else if (spaceRightOfPoint < pullTooltipBy) { pullTooltipBy = spaceRightOfPoint; } if (pullTooltipBy < 0) { pullTooltipBy = 0; } else if (pullTooltipBy > tooltipRect.width) { pullTooltipBy = tooltipRect.width; } pullTooltipBy = Math.round(pullTooltipBy); this.el_.style.right = `-${pullTooltipBy}px`; this.write(content); } write(content) { textContent$1(this.el_, content); } updateTime(seekBarRect, seekBarPoint, time, cb) { this.requestNamedAnimationFrame("TimeTooltip#updateTime", () => { let content; const duration5 = this.player_.duration(); if (this.player_.liveTracker && this.player_.liveTracker.isLive()) { const liveWindow = this.player_.liveTracker.liveWindow(); const secondsBehind = liveWindow - seekBarPoint * liveWindow; content = (secondsBehind < 1 ? "" : "-") + formatTime$1(secondsBehind, liveWindow); } else { content = formatTime$1(time, duration5); } this.update(seekBarRect, seekBarPoint, content); if (cb) { cb(); } }); } } Component$1$1.registerComponent("TimeTooltip", TimeTooltip$1); class PlayProgressBar$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.update = throttle$1(bind_(this, this.update), UPDATE_REFRESH_INTERVAL$1); } createEl() { return super.createEl("div", { className: "vjs-play-progress vjs-slider-bar" }, { "aria-hidden": "true" }); } update(seekBarRect, seekBarPoint) { const timeTooltip = this.getChild("timeTooltip"); if (!timeTooltip) { return; } const time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); timeTooltip.updateTime(seekBarRect, seekBarPoint, time); } } PlayProgressBar$1.prototype.options_ = { children: [] }; if (!IS_IOS$1 && !IS_ANDROID$1) { PlayProgressBar$1.prototype.options_.children.push("timeTooltip"); } Component$1$1.registerComponent("PlayProgressBar", PlayProgressBar$1); class MouseTimeDisplay$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.update = throttle$1(bind_(this, this.update), UPDATE_REFRESH_INTERVAL$1); } createEl() { return super.createEl("div", { className: "vjs-mouse-display" }); } update(seekBarRect, seekBarPoint) { const time = seekBarPoint * this.player_.duration(); this.getChild("timeTooltip").updateTime(seekBarRect, seekBarPoint, time, () => { this.el_.style.left = `${seekBarRect.width * seekBarPoint}px`; }); } } MouseTimeDisplay$1.prototype.options_ = { children: ["timeTooltip"] }; Component$1$1.registerComponent("MouseTimeDisplay", MouseTimeDisplay$1); const STEP_SECONDS$1 = 5; const PAGE_KEY_MULTIPLIER$1 = 12; class SeekBar$1 extends Slider$1 { constructor(player, options2) { super(player, options2); this.setEventHandlers_(); } setEventHandlers_() { this.update_ = bind_(this, this.update); this.update = throttle$1(this.update_, UPDATE_REFRESH_INTERVAL$1); this.on(this.player_, ["ended", "durationchange", "timeupdate"], this.update); if (this.player_.liveTracker) { this.on(this.player_.liveTracker, "liveedgechange", this.update); } this.updateInterval = null; this.enableIntervalHandler_ = (e) => this.enableInterval_(e); this.disableIntervalHandler_ = (e) => this.disableInterval_(e); this.on(this.player_, ["playing"], this.enableIntervalHandler_); this.on(this.player_, ["ended", "pause", "waiting"], this.disableIntervalHandler_); if ("hidden" in document_1 && "visibilityState" in document_1) { this.on(document_1, "visibilitychange", this.toggleVisibility_); } } toggleVisibility_(e) { if (document_1.visibilityState === "hidden") { this.cancelNamedAnimationFrame("SeekBar#update"); this.cancelNamedAnimationFrame("Slider#update"); this.disableInterval_(e); } else { if (!this.player_.ended() && !this.player_.paused()) { this.enableInterval_(); } this.update(); } } enableInterval_() { if (this.updateInterval) { return; } this.updateInterval = this.setInterval(this.update, UPDATE_REFRESH_INTERVAL$1); } disableInterval_(e) { if (this.player_.liveTracker && this.player_.liveTracker.isLive() && e && e.type !== "ended") { return; } if (!this.updateInterval) { return; } this.clearInterval(this.updateInterval); this.updateInterval = null; } createEl() { return super.createEl("div", { className: "vjs-progress-holder" }, { "aria-label": this.localize("Progress Bar") }); } update(event2) { if (document_1.visibilityState === "hidden") { return; } const percent = super.update(); this.requestNamedAnimationFrame("SeekBar#update", () => { const currentTime = this.player_.ended() ? this.player_.duration() : this.getCurrentTime_(); const liveTracker = this.player_.liveTracker; let duration5 = this.player_.duration(); if (liveTracker && liveTracker.isLive()) { duration5 = this.player_.liveTracker.liveCurrentTime(); } if (this.percent_ !== percent) { this.el_.setAttribute("aria-valuenow", (percent * 100).toFixed(2)); this.percent_ = percent; } if (this.currentTime_ !== currentTime || this.duration_ !== duration5) { this.el_.setAttribute("aria-valuetext", this.localize("progress bar timing: currentTime={1} duration={2}", [formatTime$1(currentTime, duration5), formatTime$1(duration5, duration5)], "{1} of {2}")); this.currentTime_ = currentTime; this.duration_ = duration5; } if (this.bar) { this.bar.update(getBoundingClientRect$1(this.el()), this.getProgress()); } }); return percent; } userSeek_(ct2) { if (this.player_.liveTracker && this.player_.liveTracker.isLive()) { this.player_.liveTracker.nextSeekedFromUser(); } this.player_.currentTime(ct2); } getCurrentTime_() { return this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); } getPercent() { const currentTime = this.getCurrentTime_(); let percent; const liveTracker = this.player_.liveTracker; if (liveTracker && liveTracker.isLive()) { percent = (currentTime - liveTracker.seekableStart()) / liveTracker.liveWindow(); if (liveTracker.atLiveEdge()) { percent = 1; } } else { percent = currentTime / this.player_.duration(); } return percent; } handleMouseDown(event2) { if (!isSingleLeftClick$1(event2)) { return; } event2.stopPropagation(); this.videoWasPlaying = !this.player_.paused(); this.player_.pause(); super.handleMouseDown(event2); } handleMouseMove(event2, mouseDown = false) { if (!isSingleLeftClick$1(event2)) { return; } if (!mouseDown && !this.player_.scrubbing()) { this.player_.scrubbing(true); } let newTime; const distance2 = this.calculateDistance(event2); const liveTracker = this.player_.liveTracker; if (!liveTracker || !liveTracker.isLive()) { newTime = distance2 * this.player_.duration(); if (newTime === this.player_.duration()) { newTime = newTime - 0.1; } } else { if (distance2 >= 0.99) { liveTracker.seekToLiveEdge(); return; } const seekableStart = liveTracker.seekableStart(); const seekableEnd = liveTracker.liveCurrentTime(); newTime = seekableStart + distance2 * liveTracker.liveWindow(); if (newTime >= seekableEnd) { newTime = seekableEnd; } if (newTime <= seekableStart) { newTime = seekableStart + 0.1; } if (newTime === Infinity) { return; } } this.userSeek_(newTime); } enable() { super.enable(); const mouseTimeDisplay = this.getChild("mouseTimeDisplay"); if (!mouseTimeDisplay) { return; } mouseTimeDisplay.show(); } disable() { super.disable(); const mouseTimeDisplay = this.getChild("mouseTimeDisplay"); if (!mouseTimeDisplay) { return; } mouseTimeDisplay.hide(); } handleMouseUp(event2) { super.handleMouseUp(event2); if (event2) { event2.stopPropagation(); } this.player_.scrubbing(false); this.player_.trigger({ type: "timeupdate", target: this, manuallyTriggered: true }); if (this.videoWasPlaying) { silencePromise$1(this.player_.play()); } else { this.update_(); } } stepForward() { this.userSeek_(this.player_.currentTime() + STEP_SECONDS$1); } stepBack() { this.userSeek_(this.player_.currentTime() - STEP_SECONDS$1); } handleAction(event2) { if (this.player_.paused()) { this.player_.play(); } else { this.player_.pause(); } } handleKeyDown(event2) { const liveTracker = this.player_.liveTracker; if (keycode.isEventKey(event2, "Space") || keycode.isEventKey(event2, "Enter")) { event2.preventDefault(); event2.stopPropagation(); this.handleAction(event2); } else if (keycode.isEventKey(event2, "Home")) { event2.preventDefault(); event2.stopPropagation(); this.userSeek_(0); } else if (keycode.isEventKey(event2, "End")) { event2.preventDefault(); event2.stopPropagation(); if (liveTracker && liveTracker.isLive()) { this.userSeek_(liveTracker.liveCurrentTime()); } else { this.userSeek_(this.player_.duration()); } } else if (/^[0-9]$/.test(keycode(event2))) { event2.preventDefault(); event2.stopPropagation(); const gotoFraction = (keycode.codes[keycode(event2)] - keycode.codes["0"]) * 10 / 100; if (liveTracker && liveTracker.isLive()) { this.userSeek_(liveTracker.seekableStart() + liveTracker.liveWindow() * gotoFraction); } else { this.userSeek_(this.player_.duration() * gotoFraction); } } else if (keycode.isEventKey(event2, "PgDn")) { event2.preventDefault(); event2.stopPropagation(); this.userSeek_(this.player_.currentTime() - STEP_SECONDS$1 * PAGE_KEY_MULTIPLIER$1); } else if (keycode.isEventKey(event2, "PgUp")) { event2.preventDefault(); event2.stopPropagation(); this.userSeek_(this.player_.currentTime() + STEP_SECONDS$1 * PAGE_KEY_MULTIPLIER$1); } else { super.handleKeyDown(event2); } } dispose() { this.disableInterval_(); this.off(this.player_, ["ended", "durationchange", "timeupdate"], this.update); if (this.player_.liveTracker) { this.off(this.player_.liveTracker, "liveedgechange", this.update); } this.off(this.player_, ["playing"], this.enableIntervalHandler_); this.off(this.player_, ["ended", "pause", "waiting"], this.disableIntervalHandler_); if ("hidden" in document_1 && "visibilityState" in document_1) { this.off(document_1, "visibilitychange", this.toggleVisibility_); } super.dispose(); } } SeekBar$1.prototype.options_ = { children: ["loadProgressBar", "playProgressBar"], barName: "playProgressBar" }; if (!IS_IOS$1 && !IS_ANDROID$1) { SeekBar$1.prototype.options_.children.splice(1, 0, "mouseTimeDisplay"); } Component$1$1.registerComponent("SeekBar", SeekBar$1); class ProgressControl$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.handleMouseMove = throttle$1(bind_(this, this.handleMouseMove), UPDATE_REFRESH_INTERVAL$1); this.throttledHandleMouseSeek = throttle$1(bind_(this, this.handleMouseSeek), UPDATE_REFRESH_INTERVAL$1); this.handleMouseUpHandler_ = (e) => this.handleMouseUp(e); this.handleMouseDownHandler_ = (e) => this.handleMouseDown(e); this.enable(); } createEl() { return super.createEl("div", { className: "vjs-progress-control vjs-control" }); } handleMouseMove(event2) { const seekBar = this.getChild("seekBar"); if (!seekBar) { return; } const playProgressBar = seekBar.getChild("playProgressBar"); const mouseTimeDisplay = seekBar.getChild("mouseTimeDisplay"); if (!playProgressBar && !mouseTimeDisplay) { return; } const seekBarEl = seekBar.el(); const seekBarRect = findPosition$1(seekBarEl); let seekBarPoint = getPointerPosition$1(seekBarEl, event2).x; seekBarPoint = clamp$1(seekBarPoint, 0, 1); if (mouseTimeDisplay) { mouseTimeDisplay.update(seekBarRect, seekBarPoint); } if (playProgressBar) { playProgressBar.update(seekBarRect, seekBar.getProgress()); } } handleMouseSeek(event2) { const seekBar = this.getChild("seekBar"); if (seekBar) { seekBar.handleMouseMove(event2); } } enabled() { return this.enabled_; } disable() { this.children().forEach((child) => child.disable && child.disable()); if (!this.enabled()) { return; } this.off(["mousedown", "touchstart"], this.handleMouseDownHandler_); this.off(this.el_, "mousemove", this.handleMouseMove); this.removeListenersAddedOnMousedownAndTouchstart(); this.addClass("disabled"); this.enabled_ = false; if (this.player_.scrubbing()) { const seekBar = this.getChild("seekBar"); this.player_.scrubbing(false); if (seekBar.videoWasPlaying) { silencePromise$1(this.player_.play()); } } } enable() { this.children().forEach((child) => child.enable && child.enable()); if (this.enabled()) { return; } this.on(["mousedown", "touchstart"], this.handleMouseDownHandler_); this.on(this.el_, "mousemove", this.handleMouseMove); this.removeClass("disabled"); this.enabled_ = true; } removeListenersAddedOnMousedownAndTouchstart() { const doc = this.el_.ownerDocument; this.off(doc, "mousemove", this.throttledHandleMouseSeek); this.off(doc, "touchmove", this.throttledHandleMouseSeek); this.off(doc, "mouseup", this.handleMouseUpHandler_); this.off(doc, "touchend", this.handleMouseUpHandler_); } handleMouseDown(event2) { const doc = this.el_.ownerDocument; const seekBar = this.getChild("seekBar"); if (seekBar) { seekBar.handleMouseDown(event2); } this.on(doc, "mousemove", this.throttledHandleMouseSeek); this.on(doc, "touchmove", this.throttledHandleMouseSeek); this.on(doc, "mouseup", this.handleMouseUpHandler_); this.on(doc, "touchend", this.handleMouseUpHandler_); } handleMouseUp(event2) { const seekBar = this.getChild("seekBar"); if (seekBar) { seekBar.handleMouseUp(event2); } this.removeListenersAddedOnMousedownAndTouchstart(); } } ProgressControl$1.prototype.options_ = { children: ["seekBar"] }; Component$1$1.registerComponent("ProgressControl", ProgressControl$1); class PictureInPictureToggle$1 extends Button$1 { constructor(player, options2) { super(player, options2); this.on(player, ["enterpictureinpicture", "leavepictureinpicture"], (e) => this.handlePictureInPictureChange(e)); this.on(player, ["disablepictureinpicturechanged", "loadedmetadata"], (e) => this.handlePictureInPictureEnabledChange(e)); this.on(player, ["loadedmetadata", "audioonlymodechange", "audiopostermodechange"], () => { const isSourceAudio = player.currentType().substring(0, 5) === "audio"; if (isSourceAudio || player.audioPosterMode() || player.audioOnlyMode()) { if (player.isInPictureInPicture()) { player.exitPictureInPicture(); } this.hide(); } else { this.show(); } }); this.disable(); } buildCSSClass() { return `vjs-picture-in-picture-control ${super.buildCSSClass()}`; } handlePictureInPictureEnabledChange() { if (document_1.pictureInPictureEnabled && this.player_.disablePictureInPicture() === false || this.player_.options_.enableDocumentPictureInPicture && "documentPictureInPicture" in window_1) { this.enable(); } else { this.disable(); } } handlePictureInPictureChange(event2) { if (this.player_.isInPictureInPicture()) { this.controlText("Exit Picture-in-Picture"); } else { this.controlText("Picture-in-Picture"); } this.handlePictureInPictureEnabledChange(); } handleClick(event2) { if (!this.player_.isInPictureInPicture()) { this.player_.requestPictureInPicture(); } else { this.player_.exitPictureInPicture(); } } } PictureInPictureToggle$1.prototype.controlText_ = "Picture-in-Picture"; Component$1$1.registerComponent("PictureInPictureToggle", PictureInPictureToggle$1); class FullscreenToggle$1 extends Button$1 { constructor(player, options2) { super(player, options2); this.on(player, "fullscreenchange", (e) => this.handleFullscreenChange(e)); if (document_1[player.fsApi_.fullscreenEnabled] === false) { this.disable(); } } buildCSSClass() { return `vjs-fullscreen-control ${super.buildCSSClass()}`; } handleFullscreenChange(event2) { if (this.player_.isFullscreen()) { this.controlText("Exit Fullscreen"); } else { this.controlText("Fullscreen"); } } handleClick(event2) { if (!this.player_.isFullscreen()) { this.player_.requestFullscreen(); } else { this.player_.exitFullscreen(); } } } FullscreenToggle$1.prototype.controlText_ = "Fullscreen"; Component$1$1.registerComponent("FullscreenToggle", FullscreenToggle$1); const checkVolumeSupport$1 = function(self2, player) { if (player.tech_ && !player.tech_.featuresVolumeControl) { self2.addClass("vjs-hidden"); } self2.on(player, "loadstart", function() { if (!player.tech_.featuresVolumeControl) { self2.addClass("vjs-hidden"); } else { self2.removeClass("vjs-hidden"); } }); }; class VolumeLevel$1 extends Component$1$1 { createEl() { const el = super.createEl("div", { className: "vjs-volume-level" }); el.appendChild(super.createEl("span", { className: "vjs-control-text" })); return el; } } Component$1$1.registerComponent("VolumeLevel", VolumeLevel$1); class VolumeLevelTooltip$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.update = throttle$1(bind_(this, this.update), UPDATE_REFRESH_INTERVAL$1); } createEl() { return super.createEl("div", { className: "vjs-volume-tooltip" }, { "aria-hidden": "true" }); } update(rangeBarRect, rangeBarPoint, vertical, content) { if (!vertical) { const tooltipRect = getBoundingClientRect$1(this.el_); const playerRect = getBoundingClientRect$1(this.player_.el()); const volumeBarPointPx = rangeBarRect.width * rangeBarPoint; if (!playerRect || !tooltipRect) { return; } const spaceLeftOfPoint = rangeBarRect.left - playerRect.left + volumeBarPointPx; const spaceRightOfPoint = rangeBarRect.width - volumeBarPointPx + (playerRect.right - rangeBarRect.right); let pullTooltipBy = tooltipRect.width / 2; if (spaceLeftOfPoint < pullTooltipBy) { pullTooltipBy += pullTooltipBy - spaceLeftOfPoint; } else if (spaceRightOfPoint < pullTooltipBy) { pullTooltipBy = spaceRightOfPoint; } if (pullTooltipBy < 0) { pullTooltipBy = 0; } else if (pullTooltipBy > tooltipRect.width) { pullTooltipBy = tooltipRect.width; } this.el_.style.right = `-${pullTooltipBy}px`; } this.write(`${content}%`); } write(content) { textContent$1(this.el_, content); } updateVolume(rangeBarRect, rangeBarPoint, vertical, volume, cb) { this.requestNamedAnimationFrame("VolumeLevelTooltip#updateVolume", () => { this.update(rangeBarRect, rangeBarPoint, vertical, volume.toFixed(0)); if (cb) { cb(); } }); } } Component$1$1.registerComponent("VolumeLevelTooltip", VolumeLevelTooltip$1); class MouseVolumeLevelDisplay$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); this.update = throttle$1(bind_(this, this.update), UPDATE_REFRESH_INTERVAL$1); } createEl() { return super.createEl("div", { className: "vjs-mouse-display" }); } update(rangeBarRect, rangeBarPoint, vertical) { const volume = 100 * rangeBarPoint; this.getChild("volumeLevelTooltip").updateVolume(rangeBarRect, rangeBarPoint, vertical, volume, () => { if (vertical) { this.el_.style.bottom = `${rangeBarRect.height * rangeBarPoint}px`; } else { this.el_.style.left = `${rangeBarRect.width * rangeBarPoint}px`; } }); } } MouseVolumeLevelDisplay$1.prototype.options_ = { children: ["volumeLevelTooltip"] }; Component$1$1.registerComponent("MouseVolumeLevelDisplay", MouseVolumeLevelDisplay$1); class VolumeBar$1 extends Slider$1 { constructor(player, options2) { super(player, options2); this.on("slideractive", (e) => this.updateLastVolume_(e)); this.on(player, "volumechange", (e) => this.updateARIAAttributes(e)); player.ready(() => this.updateARIAAttributes()); } createEl() { return super.createEl("div", { className: "vjs-volume-bar vjs-slider-bar" }, { "aria-label": this.localize("Volume Level"), "aria-live": "polite" }); } handleMouseDown(event2) { if (!isSingleLeftClick$1(event2)) { return; } super.handleMouseDown(event2); } handleMouseMove(event2) { const mouseVolumeLevelDisplay = this.getChild("mouseVolumeLevelDisplay"); if (mouseVolumeLevelDisplay) { const volumeBarEl = this.el(); const volumeBarRect = getBoundingClientRect$1(volumeBarEl); const vertical = this.vertical(); let volumeBarPoint = getPointerPosition$1(volumeBarEl, event2); volumeBarPoint = vertical ? volumeBarPoint.y : volumeBarPoint.x; volumeBarPoint = clamp$1(volumeBarPoint, 0, 1); mouseVolumeLevelDisplay.update(volumeBarRect, volumeBarPoint, vertical); } if (!isSingleLeftClick$1(event2)) { return; } this.checkMuted(); this.player_.volume(this.calculateDistance(event2)); } checkMuted() { if (this.player_.muted()) { this.player_.muted(false); } } getPercent() { if (this.player_.muted()) { return 0; } return this.player_.volume(); } stepForward() { this.checkMuted(); this.player_.volume(this.player_.volume() + 0.1); } stepBack() { this.checkMuted(); this.player_.volume(this.player_.volume() - 0.1); } updateARIAAttributes(event2) { const ariaValue = this.player_.muted() ? 0 : this.volumeAsPercentage_(); this.el_.setAttribute("aria-valuenow", ariaValue); this.el_.setAttribute("aria-valuetext", ariaValue + "%"); } volumeAsPercentage_() { return Math.round(this.player_.volume() * 100); } updateLastVolume_() { const volumeBeforeDrag = this.player_.volume(); this.one("sliderinactive", () => { if (this.player_.volume() === 0) { this.player_.lastVolume_(volumeBeforeDrag); } }); } } VolumeBar$1.prototype.options_ = { children: ["volumeLevel"], barName: "volumeLevel" }; if (!IS_IOS$1 && !IS_ANDROID$1) { VolumeBar$1.prototype.options_.children.splice(0, 0, "mouseVolumeLevelDisplay"); } VolumeBar$1.prototype.playerEvent = "volumechange"; Component$1$1.registerComponent("VolumeBar", VolumeBar$1); class VolumeControl$1 extends Component$1$1 { constructor(player, options2 = {}) { options2.vertical = options2.vertical || false; if (typeof options2.volumeBar === "undefined" || isPlain$1(options2.volumeBar)) { options2.volumeBar = options2.volumeBar || {}; options2.volumeBar.vertical = options2.vertical; } super(player, options2); checkVolumeSupport$1(this, player); this.throttledHandleMouseMove = throttle$1(bind_(this, this.handleMouseMove), UPDATE_REFRESH_INTERVAL$1); this.handleMouseUpHandler_ = (e) => this.handleMouseUp(e); this.on("mousedown", (e) => this.handleMouseDown(e)); this.on("touchstart", (e) => this.handleMouseDown(e)); this.on("mousemove", (e) => this.handleMouseMove(e)); this.on(this.volumeBar, ["focus", "slideractive"], () => { this.volumeBar.addClass("vjs-slider-active"); this.addClass("vjs-slider-active"); this.trigger("slideractive"); }); this.on(this.volumeBar, ["blur", "sliderinactive"], () => { this.volumeBar.removeClass("vjs-slider-active"); this.removeClass("vjs-slider-active"); this.trigger("sliderinactive"); }); } createEl() { let orientationClass = "vjs-volume-horizontal"; if (this.options_.vertical) { orientationClass = "vjs-volume-vertical"; } return super.createEl("div", { className: `vjs-volume-control vjs-control ${orientationClass}` }); } handleMouseDown(event2) { const doc = this.el_.ownerDocument; this.on(doc, "mousemove", this.throttledHandleMouseMove); this.on(doc, "touchmove", this.throttledHandleMouseMove); this.on(doc, "mouseup", this.handleMouseUpHandler_); this.on(doc, "touchend", this.handleMouseUpHandler_); } handleMouseUp(event2) { const doc = this.el_.ownerDocument; this.off(doc, "mousemove", this.throttledHandleMouseMove); this.off(doc, "touchmove", this.throttledHandleMouseMove); this.off(doc, "mouseup", this.handleMouseUpHandler_); this.off(doc, "touchend", this.handleMouseUpHandler_); } handleMouseMove(event2) { this.volumeBar.handleMouseMove(event2); } } VolumeControl$1.prototype.options_ = { children: ["volumeBar"] }; Component$1$1.registerComponent("VolumeControl", VolumeControl$1); const checkMuteSupport$1 = function(self2, player) { if (player.tech_ && !player.tech_.featuresMuteControl) { self2.addClass("vjs-hidden"); } self2.on(player, "loadstart", function() { if (!player.tech_.featuresMuteControl) { self2.addClass("vjs-hidden"); } else { self2.removeClass("vjs-hidden"); } }); }; class MuteToggle$1 extends Button$1 { constructor(player, options2) { super(player, options2); checkMuteSupport$1(this, player); this.on(player, ["loadstart", "volumechange"], (e) => this.update(e)); } buildCSSClass() { return `vjs-mute-control ${super.buildCSSClass()}`; } handleClick(event2) { const vol = this.player_.volume(); const lastVolume = this.player_.lastVolume_(); if (vol === 0) { const volumeToSet = lastVolume < 0.1 ? 0.1 : lastVolume; this.player_.volume(volumeToSet); this.player_.muted(false); } else { this.player_.muted(this.player_.muted() ? false : true); } } update(event2) { this.updateIcon_(); this.updateControlText_(); } updateIcon_() { const vol = this.player_.volume(); let level = 3; if (IS_IOS$1 && this.player_.tech_ && this.player_.tech_.el_) { this.player_.muted(this.player_.tech_.el_.muted); } if (vol === 0 || this.player_.muted()) { level = 0; } else if (vol < 0.33) { level = 1; } else if (vol < 0.67) { level = 2; } removeClass$1(this.el_, [0, 1, 2, 3].reduce((str, i2) => str + `${i2 ? " " : ""}vjs-vol-${i2}`, "")); addClass$1(this.el_, `vjs-vol-${level}`); } updateControlText_() { const soundOff = this.player_.muted() || this.player_.volume() === 0; const text = soundOff ? "Unmute" : "Mute"; if (this.controlText() !== text) { this.controlText(text); } } } MuteToggle$1.prototype.controlText_ = "Mute"; Component$1$1.registerComponent("MuteToggle", MuteToggle$1); class VolumePanel$1 extends Component$1$1 { constructor(player, options2 = {}) { if (typeof options2.inline !== "undefined") { options2.inline = options2.inline; } else { options2.inline = true; } if (typeof options2.volumeControl === "undefined" || isPlain$1(options2.volumeControl)) { options2.volumeControl = options2.volumeControl || {}; options2.volumeControl.vertical = !options2.inline; } super(player, options2); this.handleKeyPressHandler_ = (e) => this.handleKeyPress(e); this.on(player, ["loadstart"], (e) => this.volumePanelState_(e)); this.on(this.muteToggle, "keyup", (e) => this.handleKeyPress(e)); this.on(this.volumeControl, "keyup", (e) => this.handleVolumeControlKeyUp(e)); this.on("keydown", (e) => this.handleKeyPress(e)); this.on("mouseover", (e) => this.handleMouseOver(e)); this.on("mouseout", (e) => this.handleMouseOut(e)); this.on(this.volumeControl, ["slideractive"], this.sliderActive_); this.on(this.volumeControl, ["sliderinactive"], this.sliderInactive_); } sliderActive_() { this.addClass("vjs-slider-active"); } sliderInactive_() { this.removeClass("vjs-slider-active"); } volumePanelState_() { if (this.volumeControl.hasClass("vjs-hidden") && this.muteToggle.hasClass("vjs-hidden")) { this.addClass("vjs-hidden"); } if (this.volumeControl.hasClass("vjs-hidden") && !this.muteToggle.hasClass("vjs-hidden")) { this.addClass("vjs-mute-toggle-only"); } } createEl() { let orientationClass = "vjs-volume-panel-horizontal"; if (!this.options_.inline) { orientationClass = "vjs-volume-panel-vertical"; } return super.createEl("div", { className: `vjs-volume-panel vjs-control ${orientationClass}` }); } dispose() { this.handleMouseOut(); super.dispose(); } handleVolumeControlKeyUp(event2) { if (keycode.isEventKey(event2, "Esc")) { this.muteToggle.focus(); } } handleMouseOver(event2) { this.addClass("vjs-hover"); on$1(document_1, "keyup", this.handleKeyPressHandler_); } handleMouseOut(event2) { this.removeClass("vjs-hover"); off$1(document_1, "keyup", this.handleKeyPressHandler_); } handleKeyPress(event2) { if (keycode.isEventKey(event2, "Esc")) { this.handleMouseOut(); } } } VolumePanel$1.prototype.options_ = { children: ["muteToggle", "volumeControl"] }; Component$1$1.registerComponent("VolumePanel", VolumePanel$1); class SkipForward extends Button$1 { constructor(player, options2) { super(player, options2); this.validOptions = [5, 10, 30]; this.skipTime = this.getSkipForwardTime(); if (this.skipTime && this.validOptions.includes(this.skipTime)) { this.controlText(this.localize("Skip forward {1} seconds", [this.skipTime])); this.show(); } else { this.hide(); } } getSkipForwardTime() { const playerOptions = this.options_.playerOptions; return playerOptions.controlBar && playerOptions.controlBar.skipButtons && playerOptions.controlBar.skipButtons.forward; } buildCSSClass() { return `vjs-skip-forward-${this.getSkipForwardTime()} ${super.buildCSSClass()}`; } handleClick(event2) { const currentVideoTime = this.player_.currentTime(); const liveTracker = this.player_.liveTracker; const duration5 = liveTracker && liveTracker.isLive() ? liveTracker.seekableEnd() : this.player_.duration(); let newTime; if (currentVideoTime + this.skipTime <= duration5) { newTime = currentVideoTime + this.skipTime; } else { newTime = duration5; } this.player_.currentTime(newTime); } handleLanguagechange() { this.controlText(this.localize("Skip forward {1} seconds", [this.skipTime])); } } Component$1$1.registerComponent("SkipForward", SkipForward); class SkipBackward extends Button$1 { constructor(player, options2) { super(player, options2); this.validOptions = [5, 10, 30]; this.skipTime = this.getSkipBackwardTime(); if (this.skipTime && this.validOptions.includes(this.skipTime)) { this.controlText(this.localize("Skip backward {1} seconds", [this.skipTime])); this.show(); } else { this.hide(); } } getSkipBackwardTime() { const playerOptions = this.options_.playerOptions; return playerOptions.controlBar && playerOptions.controlBar.skipButtons && playerOptions.controlBar.skipButtons.backward; } buildCSSClass() { return `vjs-skip-backward-${this.getSkipBackwardTime()} ${super.buildCSSClass()}`; } handleClick(event2) { const currentVideoTime = this.player_.currentTime(); const liveTracker = this.player_.liveTracker; const seekableStart = liveTracker && liveTracker.isLive() && liveTracker.seekableStart(); let newTime; if (seekableStart && currentVideoTime - this.skipTime <= seekableStart) { newTime = seekableStart; } else if (currentVideoTime >= this.skipTime) { newTime = currentVideoTime - this.skipTime; } else { newTime = 0; } this.player_.currentTime(newTime); } handleLanguagechange() { this.controlText(this.localize("Skip backward {1} seconds", [this.skipTime])); } } SkipBackward.prototype.controlText_ = "Skip Backward"; Component$1$1.registerComponent("SkipBackward", SkipBackward); class Menu$1 extends Component$1$1 { constructor(player, options2) { super(player, options2); if (options2) { this.menuButton_ = options2.menuButton; } this.focusedChild_ = -1; this.on("keydown", (e) => this.handleKeyDown(e)); this.boundHandleBlur_ = (e) => this.handleBlur(e); this.boundHandleTapClick_ = (e) => this.handleTapClick(e); } addEventListenerForItem(component) { if (!(component instanceof Component$1$1)) { return; } this.on(component, "blur", this.boundHandleBlur_); this.on(component, ["tap", "click"], this.boundHandleTapClick_); } removeEventListenerForItem(component) { if (!(component instanceof Component$1$1)) { return; } this.off(component, "blur", this.boundHandleBlur_); this.off(component, ["tap", "click"], this.boundHandleTapClick_); } removeChild(component) { if (typeof component === "string") { component = this.getChild(component); } this.removeEventListenerForItem(component); super.removeChild(component); } addItem(component) { const childComponent = this.addChild(component); if (childComponent) { this.addEventListenerForItem(childComponent); } } createEl() { const contentElType = this.options_.contentElType || "ul"; this.contentEl_ = createEl$1(contentElType, { className: "vjs-menu-content" }); this.contentEl_.setAttribute("role", "menu"); const el = super.createEl("div", { append: this.contentEl_, className: "vjs-menu" }); el.appendChild(this.contentEl_); on$1(el, "click", function(event2) { event2.preventDefault(); event2.stopImmediatePropagation(); }); return el; } dispose() { this.contentEl_ = null; this.boundHandleBlur_ = null; this.boundHandleTapClick_ = null; super.dispose(); } handleBlur(event2) { const relatedTarget = event2.relatedTarget || document_1.activeElement; if (!this.children().some((element) => { return element.el() === relatedTarget; })) { const btn = this.menuButton_; if (btn && btn.buttonPressed_ && relatedTarget !== btn.el().firstChild) { btn.unpressButton(); } } } handleTapClick(event2) { if (this.menuButton_) { this.menuButton_.unpressButton(); const childComponents = this.children(); if (!Array.isArray(childComponents)) { return; } const foundComponent = childComponents.filter((component) => component.el() === event2.target)[0]; if (!foundComponent) { return; } if (foundComponent.name() !== "CaptionSettingsMenuItem") { this.menuButton_.focus(); } } } handleKeyDown(event2) { if (keycode.isEventKey(event2, "Left") || keycode.isEventKey(event2, "Down")) { event2.preventDefault(); event2.stopPropagation(); this.stepForward(); } else if (keycode.isEventKey(event2, "Right") || keycode.isEventKey(event2, "Up")) { event2.preventDefault(); event2.stopPropagation(); this.stepBack(); } } stepForward() { let stepChild = 0; if (this.focusedChild_ !== void 0) { stepChild = this.focusedChild_ + 1; } this.focus(stepChild); } stepBack() { let stepChild = 0; if (this.focusedChild_ !== void 0) { stepChild = this.focusedChild_ - 1; } this.focus(stepChild); } focus(item = 0) { const children = this.children().slice(); const haveTitle = children.length && children[0].hasClass("vjs-menu-title"); if (haveTitle) { children.shift(); } if (children.length > 0) { if (item < 0) { item = 0; } else if (item >= children.length) { item = children.length - 1; } this.focusedChild_ = item; children[item].el_.focus(); } } } Component$1$1.registerComponent("Menu", Menu$1); class MenuButton$1 extends Component$1$1 { constructor(player, options2 = {}) { super(player, options2); this.menuButton_ = new Button$1(player, options2); this.menuButton_.controlText(this.controlText_); this.menuButton_.el_.setAttribute("aria-haspopup", "true"); const buttonClass = Button$1.prototype.buildCSSClass(); this.menuButton_.el_.className = this.buildCSSClass() + " " + buttonClass; this.menuButton_.removeClass("vjs-control"); this.addChild(this.menuButton_); this.update(); this.enabled_ = true; const handleClick = (e) => this.handleClick(e); this.handleMenuKeyUp_ = (e) => this.handleMenuKeyUp(e); this.on(this.menuButton_, "tap", handleClick); this.on(this.menuButton_, "click", handleClick); this.on(this.menuButton_, "keydown", (e) => this.handleKeyDown(e)); this.on(this.menuButton_, "mouseenter", () => { this.addClass("vjs-hover"); this.menu.show(); on$1(document_1, "keyup", this.handleMenuKeyUp_); }); this.on("mouseleave", (e) => this.handleMouseLeave(e)); this.on("keydown", (e) => this.handleSubmenuKeyDown(e)); } update() { const menu = this.createMenu(); if (this.menu) { this.menu.dispose(); this.removeChild(this.menu); } this.menu = menu; this.addChild(menu); this.buttonPressed_ = false; this.menuButton_.el_.setAttribute("aria-expanded", "false"); if (this.items && this.items.length <= this.hideThreshold_) { this.hide(); this.menu.contentEl_.removeAttribute("role"); } else { this.show(); this.menu.contentEl_.setAttribute("role", "menu"); } } createMenu() { const menu = new Menu$1(this.player_, { menuButton: this }); this.hideThreshold_ = 0; if (this.options_.title) { const titleEl = createEl$1("li", { className: "vjs-menu-title", textContent: toTitleCase$1$1(this.options_.title), tabIndex: -1 }); const titleComponent = new Component$1$1(this.player_, { el: titleEl }); menu.addItem(titleComponent); } this.items = this.createItems(); if (this.items) { for (let i2 = 0; i2 < this.items.length; i2++) { menu.addItem(this.items[i2]); } } return menu; } createItems() { } createEl() { return super.createEl("div", { className: this.buildWrapperCSSClass() }, {}); } buildWrapperCSSClass() { let menuButtonClass = "vjs-menu-button"; if (this.options_.inline === true) { menuButtonClass += "-inline"; } else { menuButtonClass += "-popup"; } const buttonClass = Button$1.prototype.buildCSSClass(); return `vjs-menu-button ${menuButtonClass} ${buttonClass} ${super.buildCSSClass()}`; } buildCSSClass() { let menuButtonClass = "vjs-menu-button"; if (this.options_.inline === true) { menuButtonClass += "-inline"; } else { menuButtonClass += "-popup"; } return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`; } controlText(text, el = this.menuButton_.el()) { return this.menuButton_.controlText(text, el); } dispose() { this.handleMouseLeave(); super.dispose(); } handleClick(event2) { if (this.buttonPressed_) { this.unpressButton(); } else { this.pressButton(); } } handleMouseLeave(event2) { this.removeClass("vjs-hover"); off$1(document_1, "keyup", this.handleMenuKeyUp_); } focus() { this.menuButton_.focus(); } blur() { this.menuButton_.blur(); } handleKeyDown(event2) { if (keycode.isEventKey(event2, "Esc") || keycode.isEventKey(event2, "Tab")) { if (this.buttonPressed_) { this.unpressButton(); } if (!keycode.isEventKey(event2, "Tab")) { event2.preventDefault(); this.menuButton_.focus(); } } else if (keycode.isEventKey(event2, "Up") || keycode.isEventKey(event2, "Down")) { if (!this.buttonPressed_) { event2.preventDefault(); this.pressButton(); } } } handleMenuKeyUp(event2) { if (keycode.isEventKey(event2, "Esc") || keycode.isEventKey(event2, "Tab")) { this.removeClass("vjs-hover"); } } handleSubmenuKeyPress(event2) { this.handleSubmenuKeyDown(event2); } handleSubmenuKeyDown(event2) { if (keycode.isEventKey(event2, "Esc") || keycode.isEventKey(event2, "Tab")) { if (this.buttonPressed_) { this.unpressButton(); } if (!keycode.isEventKey(event2, "Tab")) { event2.preventDefault(); this.menuButton_.focus(); } } } pressButton() { if (this.enabled_) { this.buttonPressed_ = true; this.menu.show(); this.menu.lockShowing(); this.menuButton_.el_.setAttribute("aria-expanded", "true"); if (IS_IOS$1 && isInFrame$1()) { return; } this.menu.focus(); } } unpressButton() { if (this.enabled_) { this.buttonPressed_ = false; this.menu.unlockShowing(); this.menu.hide(); this.menuButton_.el_.setAttribute("aria-expanded", "false"); } } disable() { this.unpressButton(); this.enabled_ = false; this.addClass("vjs-disabled"); this.menuButton_.disable(); } enable() { this.enabled_ = true; this.removeClass("vjs-disabled"); this.menuButton_.enable(); } } Component$1$1.registerComponent("MenuButton", MenuButton$1); class TrackButton$1 extends MenuButton$1 { constructor(player, options2) { const tracks = options2.tracks; super(player, options2); if (this.items.length <= 1) { this.hide(); } if (!tracks) { return; } const updateHandler = bind_(this, this.update); tracks.addEventListener("removetrack", updateHandler); tracks.addEventListener("addtrack", updateHandler); tracks.addEventListener("labelchange", updateHandler); this.player_.on("ready", updateHandler); this.player_.on("dispose", function() { tracks.removeEventListener("removetrack", updateHandler); tracks.removeEventListener("addtrack", updateHandler); tracks.removeEventListener("labelchange", updateHandler); }); } } Component$1$1.registerComponent("TrackButton", TrackButton$1); const MenuKeys$1 = ["Tab", "Esc", "Up", "Down", "Right", "Left"]; class MenuItem$1 extends ClickableComponent$1 { constructor(player, options2) { super(player, options2); this.selectable = options2.selectable; this.isSelected_ = options2.selected || false; this.multiSelectable = options2.multiSelectable; this.selected(this.isSelected_); if (this.selectable) { if (this.multiSelectable) { this.el_.setAttribute("role", "menuitemcheckbox"); } else { this.el_.setAttribute("role", "menuitemradio"); } } else { this.el_.setAttribute("role", "menuitem"); } } createEl(type2, props, attrs) { this.nonIconControl = true; const el = super.createEl("li", Object.assign({ className: "vjs-menu-item", tabIndex: -1 }, props), attrs); el.replaceChild(createEl$1("span", { className: "vjs-menu-item-text", textContent: this.localize(this.options_.label) }), el.querySelector(".vjs-icon-placeholder")); return el; } handleKeyDown(event2) { if (!MenuKeys$1.some((key) => keycode.isEventKey(event2, key))) { super.handleKeyDown(event2); } } handleClick(event2) { this.selected(true); } selected(selected) { if (this.selectable) { if (selected) { this.addClass("vjs-selected"); this.el_.setAttribute("aria-checked", "true"); this.controlText(", selected"); this.isSelected_ = true; } else { this.removeClass("vjs-selected"); this.el_.setAttribute("aria-checked", "false"); this.controlText(""); this.isSelected_ = false; } } } } Component$1$1.registerComponent("MenuItem", MenuItem$1); class TextTrackMenuItem$1 extends MenuItem$1 { constructor(player, options2) { const track = options2.track; const tracks = player.textTracks(); options2.label = track.label || track.language || "Unknown"; options2.selected = track.mode === "showing"; super(player, options2); this.track = track; this.kinds = (options2.kinds || [options2.kind || this.track.kind]).filter(Boolean); const changeHandler = (...args) => { this.handleTracksChange.apply(this, args); }; const selectedLanguageChangeHandler = (...args) => { this.handleSelectedLanguageChange.apply(this, args); }; player.on(["loadstart", "texttrackchange"], changeHandler); tracks.addEventListener("change", changeHandler); tracks.addEventListener("selectedlanguagechange", selectedLanguageChangeHandler); this.on("dispose", function() { player.off(["loadstart", "texttrackchange"], changeHandler); tracks.removeEventListener("change", changeHandler); tracks.removeEventListener("selectedlanguagechange", selectedLanguageChangeHandler); }); if (tracks.onchange === void 0) { let event2; this.on(["tap", "click"], function() { if (typeof window_1.Event !== "object") { try { event2 = new window_1.Event("change"); } catch (err) { } } if (!event2) { event2 = document_1.createEvent("Event"); event2.initEvent("change", true, true); } tracks.dispatchEvent(event2); }); } this.handleTracksChange(); } handleClick(event2) { const referenceTrack = this.track; const tracks = this.player_.textTracks(); super.handleClick(event2); if (!tracks) { return; } for (let i2 = 0; i2 < tracks.length; i2++) { const track = tracks[i2]; if (this.kinds.indexOf(track.kind) === -1) { continue; } if (track === referenceTrack) { if (track.mode !== "showing") { track.mode = "showing"; } } else if (track.mode !== "disabled") { track.mode = "disabled"; } } } handleTracksChange(event2) { const shouldBeSelected = this.track.mode === "showing"; if (shouldBeSelected !== this.isSelected_) { this.selected(shouldBeSelected); } } handleSelectedLanguageChange(event2) { if (this.track.mode === "showing") { const selectedLanguage = this.player_.cache_.selectedLanguage; if (selectedLanguage && selectedLanguage.enabled && selectedLanguage.language === this.track.language && selectedLanguage.kind !== this.track.kind) { return; } this.player_.cache_.selectedLanguage = { enabled: true, language: this.track.language, kind: this.track.kind }; } } dispose() { this.track = null; super.dispose(); } } Component$1$1.registerComponent("TextTrackMenuItem", TextTrackMenuItem$1); class OffTextTrackMenuItem$1 extends TextTrackMenuItem$1 { constructor(player, options2) { options2.track = { player, kind: options2.kind, kinds: options2.kinds, default: false, mode: "disabled" }; if (!options2.kinds) { options2.kinds = [options2.kind]; } if (options2.label) { options2.track.label = options2.label; } else { options2.track.label = options2.kinds.join(" and ") + " off"; } options2.selectable = true; options2.multiSelectable = false; super(player, options2); } handleTracksChange(event2) { const tracks = this.player().textTracks(); let shouldBeSelected = true; for (let i2 = 0, l = tracks.length; i2 < l; i2++) { const track = tracks[i2]; if (this.options_.kinds.indexOf(track.kind) > -1 && track.mode === "showing") { shouldBeSelected = false; break; } } if (shouldBeSelected !== this.isSelected_) { this.selected(shouldBeSelected); } } handleSelectedLanguageChange(event2) { const tracks = this.player().textTracks(); let allHidden = true; for (let i2 = 0, l = tracks.length; i2 < l; i2++) { const track = tracks[i2]; if (["captions", "descriptions", "subtitles"].indexOf(track.kind) > -1 && track.mode === "showing") { allHidden = false; break; } } if (allHidden) { this.player_.cache_.selectedLanguage = { enabled: false }; } } handleLanguagechange() { this.$(".vjs-menu-item-text").textContent = this.player_.localize(this.options_.label); super.handleLanguagechange(); } } Component$1$1.registerComponent("OffTextTrackMenuItem", OffTextTrackMenuItem$1); class TextTrackButton$1 extends TrackButton$1 { constructor(player, options2 = {}) { options2.tracks = player.textTracks(); super(player, options2); } createItems(items = [], TrackMenuItem = TextTrackMenuItem$1) { let label2; if (this.label_) { label2 = `${this.label_} off`; } items.push(new OffTextTrackMenuItem$1(this.player_, { kinds: this.kinds_, kind: this.kind_, label: label2 })); this.hideThreshold_ += 1; const tracks = this.player_.textTracks(); if (!Array.isArray(this.kinds_)) { this.kinds_ = [this.kind_]; } for (let i2 = 0; i2 < tracks.length; i2++) { const track = tracks[i2]; if (this.kinds_.indexOf(track.kind) > -1) { const item = new TrackMenuItem(this.player_, { track, kinds: this.kinds_, kind: this.kind_, selectable: true, multiSelectable: false }); item.addClass(`vjs-${track.kind}-menu-item`); items.push(item); } } return items; } } Component$1$1.registerComponent("TextTrackButton", TextTrackButton$1); class ChaptersTrackMenuItem$1 extends MenuItem$1 { constructor(player, options2) { const track = options2.track; const cue = options2.cue; const currentTime = player.currentTime(); options2.selectable = true; options2.multiSelectable = false; options2.label = cue.text; options2.selected = cue.startTime <= currentTime && currentTime < cue.endTime; super(player, options2); this.track = track; this.cue = cue; } handleClick(event2) { super.handleClick(); this.player_.currentTime(this.cue.startTime); } } Component$1$1.registerComponent("ChaptersTrackMenuItem", ChaptersTrackMenuItem$1); class ChaptersButton$1 extends TextTrackButton$1 { constructor(player, options2, ready) { super(player, options2, ready); this.selectCurrentItem_ = () => { this.items.forEach((item) => { item.selected(this.track_.activeCues[0] === item.cue); }); }; } buildCSSClass() { return `vjs-chapters-button ${super.buildCSSClass()}`; } buildWrapperCSSClass() { return `vjs-chapters-button ${super.buildWrapperCSSClass()}`; } update(event2) { if (event2 && event2.track && event2.track.kind !== "chapters") { return; } const track = this.findChaptersTrack(); if (track !== this.track_) { this.setTrack(track); super.update(); } else if (!this.items || track && track.cues && track.cues.length !== this.items.length) { super.update(); } } setTrack(track) { if (this.track_ === track) { return; } if (!this.updateHandler_) { this.updateHandler_ = this.update.bind(this); } if (this.track_) { const remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_); if (remoteTextTrackEl) { remoteTextTrackEl.removeEventListener("load", this.updateHandler_); } this.track_.removeEventListener("cuechange", this.selectCurrentItem_); this.track_ = null; } this.track_ = track; if (this.track_) { this.track_.mode = "hidden"; const remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_); if (remoteTextTrackEl) { remoteTextTrackEl.addEventListener("load", this.updateHandler_); } this.track_.addEventListener("cuechange", this.selectCurrentItem_); } } findChaptersTrack() { const tracks = this.player_.textTracks() || []; for (let i2 = tracks.length - 1; i2 >= 0; i2--) { const track = tracks[i2]; if (track.kind === this.kind_) { return track; } } } getMenuCaption() { if (this.track_ && this.track_.label) { return this.track_.label; } return this.localize(toTitleCase$1$1(this.kind_)); } createMenu() { this.options_.title = this.getMenuCaption(); return super.createMenu(); } createItems() { const items = []; if (!this.track_) { return items; } const cues = this.track_.cues; if (!cues) { return items; } for (let i2 = 0, l = cues.length; i2 < l; i2++) { const cue = cues[i2]; const mi = new ChaptersTrackMenuItem$1(this.player_, { track: this.track_, cue }); items.push(mi); } return items; } } ChaptersButton$1.prototype.kind_ = "chapters"; ChaptersButton$1.prototype.controlText_ = "Chapters"; Component$1$1.registerComponent("ChaptersButton", ChaptersButton$1); class DescriptionsButton$1 extends TextTrackButton$1 { constructor(player, options2, ready) { super(player, options2, ready); const tracks = player.textTracks(); const changeHandler = bind_(this, this.handleTracksChange); tracks.addEventListener("change", changeHandler); this.on("dispose", function() { tracks.removeEventListener("change", changeHandler); }); } handleTracksChange(event2) { const tracks = this.player().textTracks(); let disabled = false; for (let i2 = 0, l = tracks.length; i2 < l; i2++) { const track = tracks[i2]; if (track.kind !== this.kind_ && track.mode === "showing") { disabled = true; break; } } if (disabled) { this.disable(); } else { this.enable(); } } buildCSSClass() { return `vjs-descriptions-button ${super.buildCSSClass()}`; } buildWrapperCSSClass() { return `vjs-descriptions-button ${super.buildWrapperCSSClass()}`; } } DescriptionsButton$1.prototype.kind_ = "descriptions"; DescriptionsButton$1.prototype.controlText_ = "Descriptions"; Component$1$1.registerComponent("DescriptionsButton", DescriptionsButton$1); class SubtitlesButton$1 extends TextTrackButton$1 { constructor(player, options2, ready) { super(player, options2, ready); } buildCSSClass() { return `vjs-subtitles-button ${super.buildCSSClass()}`; } buildWrapperCSSClass() { return `vjs-subtitles-button ${super.buildWrapperCSSClass()}`; } } SubtitlesButton$1.prototype.kind_ = "subtitles"; SubtitlesButton$1.prototype.controlText_ = "Subtitles"; Component$1$1.registerComponent("SubtitlesButton", SubtitlesButton$1); class CaptionSettingsMenuItem$1 extends TextTrackMenuItem$1 { constructor(player, options2) { options2.track = { player, kind: options2.kind, label: options2.kind + " settings", selectable: false, default: false, mode: "disabled" }; options2.selectable = false; options2.name = "CaptionSettingsMenuItem"; super(player, options2); this.addClass("vjs-texttrack-settings"); this.controlText(", opens " + options2.kind + " settings dialog"); } handleClick(event2) { this.player().getChild("textTrackSettings").open(); } handleLanguagechange() { this.$(".vjs-menu-item-text").textContent = this.player_.localize(this.options_.kind + " settings"); super.handleLanguagechange(); } } Component$1$1.registerComponent("CaptionSettingsMenuItem", CaptionSettingsMenuItem$1); class CaptionsButton$1 extends TextTrackButton$1 { constructor(player, options2, ready) { super(player, options2, ready); } buildCSSClass() { return `vjs-captions-button ${super.buildCSSClass()}`; } buildWrapperCSSClass() { return `vjs-captions-button ${super.buildWrapperCSSClass()}`; } createItems() { const items = []; if (!(this.player().tech_ && this.player().tech_.featuresNativeTextTracks) && this.player().getChild("textTrackSettings")) { items.push(new CaptionSettingsMenuItem$1(this.player_, { kind: this.kind_ })); this.hideThreshold_ += 1; } return super.createItems(items); } } CaptionsButton$1.prototype.kind_ = "captions"; CaptionsButton$1.prototype.controlText_ = "Captions"; Component$1$1.registerComponent("CaptionsButton", CaptionsButton$1); class SubsCapsMenuItem$1 extends TextTrackMenuItem$1 { createEl(type2, props, attrs) { const el = super.createEl(type2, props, attrs); const parentSpan = el.querySelector(".vjs-menu-item-text"); if (this.options_.track.kind === "captions") { parentSpan.appendChild(createEl$1("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": true })); parentSpan.appendChild(createEl$1("span", { className: "vjs-control-text", textContent: ` ${this.localize("Captions")}` })); } return el; } } Component$1$1.registerComponent("SubsCapsMenuItem", SubsCapsMenuItem$1); class SubsCapsButton$1 extends TextTrackButton$1 { constructor(player, options2 = {}) { super(player, options2); this.label_ = "subtitles"; if (["en", "en-us", "en-ca", "fr-ca"].indexOf(this.player_.language_) > -1) { this.label_ = "captions"; } this.menuButton_.controlText(toTitleCase$1$1(this.label_)); } buildCSSClass() { return `vjs-subs-caps-button ${super.buildCSSClass()}`; } buildWrapperCSSClass() { return `vjs-subs-caps-button ${super.buildWrapperCSSClass()}`; } createItems() { let items = []; if (!(this.player().tech_ && this.player().tech_.featuresNativeTextTracks) && this.player().getChild("textTrackSettings")) { items.push(new CaptionSettingsMenuItem$1(this.player_, { kind: this.label_ })); this.hideThreshold_ += 1; } items = super.createItems(items, SubsCapsMenuItem$1); return items; } } SubsCapsButton$1.prototype.kinds_ = ["captions", "subtitles"]; SubsCapsButton$1.prototype.controlText_ = "Subtitles"; Component$1$1.registerComponent("SubsCapsButton", SubsCapsButton$1); class AudioTrackMenuItem$1 extends MenuItem$1 { constructor(player, options2) { const track = options2.track; const tracks = player.audioTracks(); options2.label = track.label || track.language || "Unknown"; options2.selected = track.enabled; super(player, options2); this.track = track; this.addClass(`vjs-${track.kind}-menu-item`); const changeHandler = (...args) => { this.handleTracksChange.apply(this, args); }; tracks.addEventListener("change", changeHandler); this.on("dispose", () => { tracks.removeEventListener("change", changeHandler); }); } createEl(type2, props, attrs) { const el = super.createEl(type2, props, attrs); const parentSpan = el.querySelector(".vjs-menu-item-text"); if (this.options_.track.kind === "main-desc") { parentSpan.appendChild(createEl$1("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": true })); parentSpan.appendChild(createEl$1("span", { className: "vjs-control-text", textContent: " " + this.localize("Descriptions") })); } return el; } handleClick(event2) { super.handleClick(event2); this.track.enabled = true; if (this.player_.tech_.featuresNativeAudioTracks) { const tracks = this.player_.audioTracks(); for (let i2 = 0; i2 < tracks.length; i2++) { const track = tracks[i2]; if (track === this.track) { continue; } track.enabled = track === this.track; } } } handleTracksChange(event2) { this.selected(this.track.enabled); } } Component$1$1.registerComponent("AudioTrackMenuItem", AudioTrackMenuItem$1); class AudioTrackButton$1 extends TrackButton$1 { constructor(player, options2 = {}) { options2.tracks = player.audioTracks(); super(player, options2); } buildCSSClass() { return `vjs-audio-button ${super.buildCSSClass()}`; } buildWrapperCSSClass() { return `vjs-audio-button ${super.buildWrapperCSSClass()}`; } createItems(items = []) { this.hideThreshold_ = 1; const tracks = this.player_.audioTracks(); for (let i2 = 0; i2 < tracks.length; i2++) { const track = tracks[i2]; items.push(new AudioTrackMenuItem$1(this.player_, { track, selectable: true, multiSelectable: false })); } return items; } } AudioTrackButton$1.prototype.controlText_ = "Audio Track"; Component$1$1.registerComponent("AudioTrackButton", AudioTrackButton$1); class PlaybackRateMenuItem$1 extends MenuItem$1 { constructor(player, options2) { const label2 = options2.rate; const rate = parseFloat(label2, 10); options2.label = label2; options2.selected = rate === player.playbackRate(); options2.selectable = true; options2.multiSelectable = false; super(player, options2); this.label = label2; this.rate = rate; this.on(player, "ratechange", (e) => this.update(e)); } handleClick(event2) { super.handleClick(); this.player().playbackRate(this.rate); } update(event2) { this.selected(this.player().playbackRate() === this.rate); } } PlaybackRateMenuItem$1.prototype.contentElType = "button"; Component$1$1.registerComponent("PlaybackRateMenuItem", PlaybackRateMenuItem$1); class PlaybackRateMenuButton$1 extends MenuButton$1 { constructor(player, options2) { super(player, options2); this.menuButton_.el_.setAttribute("aria-describedby", this.labelElId_); this.updateVisibility(); this.updateLabel(); this.on(player, "loadstart", (e) => this.updateVisibility(e)); this.on(player, "ratechange", (e) => this.updateLabel(e)); this.on(player, "playbackrateschange", (e) => this.handlePlaybackRateschange(e)); } createEl() { const el = super.createEl(); this.labelElId_ = "vjs-playback-rate-value-label-" + this.id_; this.labelEl_ = createEl$1("div", { className: "vjs-playback-rate-value", id: this.labelElId_, textContent: "1x" }); el.appendChild(this.labelEl_); return el; } dispose() { this.labelEl_ = null; super.dispose(); } buildCSSClass() { return `vjs-playback-rate ${super.buildCSSClass()}`; } buildWrapperCSSClass() { return `vjs-playback-rate ${super.buildWrapperCSSClass()}`; } createItems() { const rates = this.playbackRates(); const items = []; for (let i2 = rates.length - 1; i2 >= 0; i2--) { items.push(new PlaybackRateMenuItem$1(this.player(), { rate: rates[i2] + "x" })); } return items; } handlePlaybackRateschange(event2) { this.update(); } playbackRates() { const player = this.player(); return player.playbackRates && player.playbackRates() || []; } playbackRateSupported() { return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this.playbackRates() && this.playbackRates().length > 0; } updateVisibility(event2) { if (this.playbackRateSupported()) { this.removeClass("vjs-hidden"); } else { this.addClass("vjs-hidden"); } } updateLabel(event2) { if (this.playbackRateSupported()) { this.labelEl_.textContent = this.player().playbackRate() + "x"; } } } PlaybackRateMenuButton$1.prototype.controlText_ = "Playback Rate"; Component$1$1.registerComponent("PlaybackRateMenuButton", PlaybackRateMenuButton$1); class Spacer$1 extends Component$1$1 { buildCSSClass() { return `vjs-spacer ${super.buildCSSClass()}`; } createEl(tag = "div", props = {}, attributes = {}) { if (!props.className) { props.className = this.buildCSSClass(); } return super.createEl(tag, props, attributes); } } Component$1$1.registerComponent("Spacer", Spacer$1); class CustomControlSpacer$1 extends Spacer$1 { buildCSSClass() { return `vjs-custom-control-spacer ${super.buildCSSClass()}`; } createEl() { return super.createEl("div", { className: this.buildCSSClass(), textContent: "\xA0" }); } } Component$1$1.registerComponent("CustomControlSpacer", CustomControlSpacer$1); class ControlBar$1 extends Component$1$1 { createEl() { return super.createEl("div", { className: "vjs-control-bar", dir: "ltr" }); } } ControlBar$1.prototype.options_ = { children: ["playToggle", "skipBackward", "skipForward", "volumePanel", "currentTimeDisplay", "timeDivider", "durationDisplay", "progressControl", "liveDisplay", "seekToLive", "remainingTimeDisplay", "customControlSpacer", "playbackRateMenuButton", "chaptersButton", "descriptionsButton", "subsCapsButton", "audioTrackButton", "fullscreenToggle"] }; if ("exitPictureInPicture" in document_1) { ControlBar$1.prototype.options_.children.splice(ControlBar$1.prototype.options_.children.length - 1, 0, "pictureInPictureToggle"); } Component$1$1.registerComponent("ControlBar", ControlBar$1); class ErrorDisplay$1 extends ModalDialog$1 { constructor(player, options2) { super(player, options2); this.on(player, "error", (e) => this.open(e)); } buildCSSClass() { return `vjs-error-display ${super.buildCSSClass()}`; } content() { const error = this.player().error(); return error ? this.localize(error.message) : ""; } } ErrorDisplay$1.prototype.options_ = Object.assign({}, ModalDialog$1.prototype.options_, { pauseOnOpen: false, fillAlways: true, temporary: false, uncloseable: true }); Component$1$1.registerComponent("ErrorDisplay", ErrorDisplay$1); const LOCAL_STORAGE_KEY$1$1 = "vjs-text-track-settings"; const COLOR_BLACK$1 = ["#000", "Black"]; const COLOR_BLUE$1 = ["#00F", "Blue"]; const COLOR_CYAN$1 = ["#0FF", "Cyan"]; const COLOR_GREEN$1 = ["#0F0", "Green"]; const COLOR_MAGENTA$1 = ["#F0F", "Magenta"]; const COLOR_RED$1 = ["#F00", "Red"]; const COLOR_WHITE$1 = ["#FFF", "White"]; const COLOR_YELLOW$1 = ["#FF0", "Yellow"]; const OPACITY_OPAQUE$1 = ["1", "Opaque"]; const OPACITY_SEMI$1 = ["0.5", "Semi-Transparent"]; const OPACITY_TRANS$1 = ["0", "Transparent"]; const selectConfigs$1 = { backgroundColor: { selector: ".vjs-bg-color > select", id: "captions-background-color-%s", label: "Color", options: [COLOR_BLACK$1, COLOR_WHITE$1, COLOR_RED$1, COLOR_GREEN$1, COLOR_BLUE$1, COLOR_YELLOW$1, COLOR_MAGENTA$1, COLOR_CYAN$1] }, backgroundOpacity: { selector: ".vjs-bg-opacity > select", id: "captions-background-opacity-%s", label: "Opacity", options: [OPACITY_OPAQUE$1, OPACITY_SEMI$1, OPACITY_TRANS$1] }, color: { selector: ".vjs-text-color > select", id: "captions-foreground-color-%s", label: "Color", options: [COLOR_WHITE$1, COLOR_BLACK$1, COLOR_RED$1, COLOR_GREEN$1, COLOR_BLUE$1, COLOR_YELLOW$1, COLOR_MAGENTA$1, COLOR_CYAN$1] }, edgeStyle: { selector: ".vjs-edge-style > select", id: "%s", label: "Text Edge Style", options: [["none", "None"], ["raised", "Raised"], ["depressed", "Depressed"], ["uniform", "Uniform"], ["dropshadow", "Dropshadow"]] }, fontFamily: { selector: ".vjs-font-family > select", id: "captions-font-family-%s", label: "Font Family", options: [["proportionalSansSerif", "Proportional Sans-Serif"], ["monospaceSansSerif", "Monospace Sans-Serif"], ["proportionalSerif", "Proportional Serif"], ["monospaceSerif", "Monospace Serif"], ["casual", "Casual"], ["script", "Script"], ["small-caps", "Small Caps"]] }, fontPercent: { selector: ".vjs-font-percent > select", id: "captions-font-size-%s", label: "Font Size", options: [["0.50", "50%"], ["0.75", "75%"], ["1.00", "100%"], ["1.25", "125%"], ["1.50", "150%"], ["1.75", "175%"], ["2.00", "200%"], ["3.00", "300%"], ["4.00", "400%"]], default: 2, parser: (v) => v === "1.00" ? null : Number(v) }, textOpacity: { selector: ".vjs-text-opacity > select", id: "captions-foreground-opacity-%s", label: "Opacity", options: [OPACITY_OPAQUE$1, OPACITY_SEMI$1] }, windowColor: { selector: ".vjs-window-color > select", id: "captions-window-color-%s", label: "Color" }, windowOpacity: { selector: ".vjs-window-opacity > select", id: "captions-window-opacity-%s", label: "Opacity", options: [OPACITY_TRANS$1, OPACITY_SEMI$1, OPACITY_OPAQUE$1] } }; selectConfigs$1.windowColor.options = selectConfigs$1.backgroundColor.options; function parseOptionValue$1(value, parser2) { if (parser2) { value = parser2(value); } if (value && value !== "none") { return value; } } function getSelectedOptionValue$1(el, parser2) { const value = el.options[el.options.selectedIndex].value; return parseOptionValue$1(value, parser2); } function setSelectedOption$1(el, value, parser2) { if (!value) { return; } for (let i2 = 0; i2 < el.options.length; i2++) { if (parseOptionValue$1(el.options[i2].value, parser2) === value) { el.selectedIndex = i2; break; } } } class TextTrackSettings$1 extends ModalDialog$1 { constructor(player, options2) { options2.temporary = false; super(player, options2); this.updateDisplay = this.updateDisplay.bind(this); this.fill(); this.hasBeenOpened_ = this.hasBeenFilled_ = true; this.endDialog = createEl$1("p", { className: "vjs-control-text", textContent: this.localize("End of dialog window.") }); this.el().appendChild(this.endDialog); this.setDefaults(); if (options2.persistTextTrackSettings === void 0) { this.options_.persistTextTrackSettings = this.options_.playerOptions.persistTextTrackSettings; } this.on(this.$(".vjs-done-button"), "click", () => { this.saveSettings(); this.close(); }); this.on(this.$(".vjs-default-button"), "click", () => { this.setDefaults(); this.updateDisplay(); }); each$1(selectConfigs$1, (config) => { this.on(this.$(config.selector), "change", this.updateDisplay); }); if (this.options_.persistTextTrackSettings) { this.restoreSettings(); } } dispose() { this.endDialog = null; super.dispose(); } createElSelect_(key, legendId = "", type2 = "label") { const config = selectConfigs$1[key]; const id = config.id.replace("%s", this.id_); const selectLabelledbyIds = [legendId, id].join(" ").trim(); return [`<${type2} id="${id}" class="${type2 === "label" ? "vjs-label" : ""}">`, this.localize(config.label), ``, `").join(""); } createElFgColor_() { const legendId = `captions-text-legend-${this.id_}`; return ['
', ``, this.localize("Text"), "", '', this.createElSelect_("color", legendId), "", '', this.createElSelect_("textOpacity", legendId), "", "
"].join(""); } createElBgColor_() { const legendId = `captions-background-${this.id_}`; return ['
', ``, this.localize("Text Background"), "", '', this.createElSelect_("backgroundColor", legendId), "", '', this.createElSelect_("backgroundOpacity", legendId), "", "
"].join(""); } createElWinColor_() { const legendId = `captions-window-${this.id_}`; return ['
', ``, this.localize("Caption Area Background"), "", '', this.createElSelect_("windowColor", legendId), "", '', this.createElSelect_("windowOpacity", legendId), "", "
"].join(""); } createElColors_() { return createEl$1("div", { className: "vjs-track-settings-colors", innerHTML: [this.createElFgColor_(), this.createElBgColor_(), this.createElWinColor_()].join("") }); } createElFont_() { return createEl$1("div", { className: "vjs-track-settings-font", innerHTML: ['
', this.createElSelect_("fontPercent", "", "legend"), "
", '
', this.createElSelect_("edgeStyle", "", "legend"), "
", '
', this.createElSelect_("fontFamily", "", "legend"), "
"].join("") }); } createElControls_() { const defaultsDescription = this.localize("restore all settings to the default values"); return createEl$1("div", { className: "vjs-track-settings-controls", innerHTML: [`", ``].join("") }); } content() { return [this.createElColors_(), this.createElFont_(), this.createElControls_()]; } label() { return this.localize("Caption Settings Dialog"); } description() { return this.localize("Beginning of dialog window. Escape will cancel and close the window."); } buildCSSClass() { return super.buildCSSClass() + " vjs-text-track-settings"; } getValues() { return reduce$1(selectConfigs$1, (accum, config, key) => { const value = getSelectedOptionValue$1(this.$(config.selector), config.parser); if (value !== void 0) { accum[key] = value; } return accum; }, {}); } setValues(values3) { each$1(selectConfigs$1, (config, key) => { setSelectedOption$1(this.$(config.selector), values3[key], config.parser); }); } setDefaults() { each$1(selectConfigs$1, (config) => { const index2 = config.hasOwnProperty("default") ? config.default : 0; this.$(config.selector).selectedIndex = index2; }); } restoreSettings() { let values3; try { values3 = JSON.parse(window_1.localStorage.getItem(LOCAL_STORAGE_KEY$1$1)); } catch (err) { log$1$1.warn(err); } if (values3) { this.setValues(values3); } } saveSettings() { if (!this.options_.persistTextTrackSettings) { return; } const values3 = this.getValues(); try { if (Object.keys(values3).length) { window_1.localStorage.setItem(LOCAL_STORAGE_KEY$1$1, JSON.stringify(values3)); } else { window_1.localStorage.removeItem(LOCAL_STORAGE_KEY$1$1); } } catch (err) { log$1$1.warn(err); } } updateDisplay() { const ttDisplay = this.player_.getChild("textTrackDisplay"); if (ttDisplay) { ttDisplay.updateDisplay(); } } conditionalBlur_() { this.previouslyActiveEl_ = null; const cb = this.player_.controlBar; const subsCapsBtn = cb && cb.subsCapsButton; const ccBtn = cb && cb.captionsButton; if (subsCapsBtn) { subsCapsBtn.focus(); } else if (ccBtn) { ccBtn.focus(); } } handleLanguagechange() { this.fill(); } } Component$1$1.registerComponent("TextTrackSettings", TextTrackSettings$1); class ResizeManager$1 extends Component$1$1 { constructor(player, options2) { let RESIZE_OBSERVER_AVAILABLE = options2.ResizeObserver || window_1.ResizeObserver; if (options2.ResizeObserver === null) { RESIZE_OBSERVER_AVAILABLE = false; } const options_ = merge$1({ createEl: !RESIZE_OBSERVER_AVAILABLE, reportTouchActivity: false }, options2); super(player, options_); this.ResizeObserver = options2.ResizeObserver || window_1.ResizeObserver; this.loadListener_ = null; this.resizeObserver_ = null; this.debouncedHandler_ = debounce$1(() => { this.resizeHandler(); }, 100, false, this); if (RESIZE_OBSERVER_AVAILABLE) { this.resizeObserver_ = new this.ResizeObserver(this.debouncedHandler_); this.resizeObserver_.observe(player.el()); } else { this.loadListener_ = () => { if (!this.el_ || !this.el_.contentWindow) { return; } const debouncedHandler_ = this.debouncedHandler_; let unloadListener_ = this.unloadListener_ = function() { off$1(this, "resize", debouncedHandler_); off$1(this, "unload", unloadListener_); unloadListener_ = null; }; on$1(this.el_.contentWindow, "unload", unloadListener_); on$1(this.el_.contentWindow, "resize", debouncedHandler_); }; this.one("load", this.loadListener_); } } createEl() { return super.createEl("iframe", { className: "vjs-resize-manager", tabIndex: -1, title: this.localize("No content") }, { "aria-hidden": "true" }); } resizeHandler() { if (!this.player_ || !this.player_.trigger) { return; } this.player_.trigger("playerresize"); } dispose() { if (this.debouncedHandler_) { this.debouncedHandler_.cancel(); } if (this.resizeObserver_) { if (this.player_.el()) { this.resizeObserver_.unobserve(this.player_.el()); } this.resizeObserver_.disconnect(); } if (this.loadListener_) { this.off("load", this.loadListener_); } if (this.el_ && this.el_.contentWindow && this.unloadListener_) { this.unloadListener_.call(this.el_.contentWindow); } this.ResizeObserver = null; this.resizeObserver = null; this.debouncedHandler_ = null; this.loadListener_ = null; super.dispose(); } } Component$1$1.registerComponent("ResizeManager", ResizeManager$1); const defaults$2 = { trackingThreshold: 20, liveTolerance: 15 }; class LiveTracker$1 extends Component$1$1 { constructor(player, options2) { const options_ = merge$1(defaults$2, options2, { createEl: false }); super(player, options_); this.trackLiveHandler_ = () => this.trackLive_(); this.handlePlay_ = (e) => this.handlePlay(e); this.handleFirstTimeupdate_ = (e) => this.handleFirstTimeupdate(e); this.handleSeeked_ = (e) => this.handleSeeked(e); this.seekToLiveEdge_ = (e) => this.seekToLiveEdge(e); this.reset_(); this.on(this.player_, "durationchange", (e) => this.handleDurationchange(e)); this.on(this.player_, "canplay", () => this.toggleTracking()); } trackLive_() { const seekable3 = this.player_.seekable(); if (!seekable3 || !seekable3.length) { return; } const newTime = Number(window_1.performance.now().toFixed(4)); const deltaTime = this.lastTime_ === -1 ? 0 : (newTime - this.lastTime_) / 1e3; this.lastTime_ = newTime; this.pastSeekEnd_ = this.pastSeekEnd() + deltaTime; const liveCurrentTime = this.liveCurrentTime(); const currentTime = this.player_.currentTime(); let isBehind = this.player_.paused() || this.seekedBehindLive_ || Math.abs(liveCurrentTime - currentTime) > this.options_.liveTolerance; if (!this.timeupdateSeen_ || liveCurrentTime === Infinity) { isBehind = false; } if (isBehind !== this.behindLiveEdge_) { this.behindLiveEdge_ = isBehind; this.trigger("liveedgechange"); } } handleDurationchange() { this.toggleTracking(); } toggleTracking() { if (this.player_.duration() === Infinity && this.liveWindow() >= this.options_.trackingThreshold) { if (this.player_.options_.liveui) { this.player_.addClass("vjs-liveui"); } this.startTracking(); } else { this.player_.removeClass("vjs-liveui"); this.stopTracking(); } } startTracking() { if (this.isTracking()) { return; } if (!this.timeupdateSeen_) { this.timeupdateSeen_ = this.player_.hasStarted(); } this.trackingInterval_ = this.setInterval(this.trackLiveHandler_, UPDATE_REFRESH_INTERVAL$1); this.trackLive_(); this.on(this.player_, ["play", "pause"], this.trackLiveHandler_); if (!this.timeupdateSeen_) { this.one(this.player_, "play", this.handlePlay_); this.one(this.player_, "timeupdate", this.handleFirstTimeupdate_); } else { this.on(this.player_, "seeked", this.handleSeeked_); } } handleFirstTimeupdate() { this.timeupdateSeen_ = true; this.on(this.player_, "seeked", this.handleSeeked_); } handleSeeked() { const timeDiff = Math.abs(this.liveCurrentTime() - this.player_.currentTime()); this.seekedBehindLive_ = this.nextSeekedFromUser_ && timeDiff > 2; this.nextSeekedFromUser_ = false; this.trackLive_(); } handlePlay() { this.one(this.player_, "timeupdate", this.seekToLiveEdge_); } reset_() { this.lastTime_ = -1; this.pastSeekEnd_ = 0; this.lastSeekEnd_ = -1; this.behindLiveEdge_ = true; this.timeupdateSeen_ = false; this.seekedBehindLive_ = false; this.nextSeekedFromUser_ = false; this.clearInterval(this.trackingInterval_); this.trackingInterval_ = null; this.off(this.player_, ["play", "pause"], this.trackLiveHandler_); this.off(this.player_, "seeked", this.handleSeeked_); this.off(this.player_, "play", this.handlePlay_); this.off(this.player_, "timeupdate", this.handleFirstTimeupdate_); this.off(this.player_, "timeupdate", this.seekToLiveEdge_); } nextSeekedFromUser() { this.nextSeekedFromUser_ = true; } stopTracking() { if (!this.isTracking()) { return; } this.reset_(); this.trigger("liveedgechange"); } seekableEnd() { const seekable3 = this.player_.seekable(); const seekableEnds = []; let i2 = seekable3 ? seekable3.length : 0; while (i2--) { seekableEnds.push(seekable3.end(i2)); } return seekableEnds.length ? seekableEnds.sort()[seekableEnds.length - 1] : Infinity; } seekableStart() { const seekable3 = this.player_.seekable(); const seekableStarts = []; let i2 = seekable3 ? seekable3.length : 0; while (i2--) { seekableStarts.push(seekable3.start(i2)); } return seekableStarts.length ? seekableStarts.sort()[0] : 0; } liveWindow() { const liveCurrentTime = this.liveCurrentTime(); if (liveCurrentTime === Infinity) { return 0; } return liveCurrentTime - this.seekableStart(); } isLive() { return this.isTracking(); } atLiveEdge() { return !this.behindLiveEdge(); } liveCurrentTime() { return this.pastSeekEnd() + this.seekableEnd(); } pastSeekEnd() { const seekableEnd = this.seekableEnd(); if (this.lastSeekEnd_ !== -1 && seekableEnd !== this.lastSeekEnd_) { this.pastSeekEnd_ = 0; } this.lastSeekEnd_ = seekableEnd; return this.pastSeekEnd_; } behindLiveEdge() { return this.behindLiveEdge_; } isTracking() { return typeof this.trackingInterval_ === "number"; } seekToLiveEdge() { this.seekedBehindLive_ = false; if (this.atLiveEdge()) { return; } this.nextSeekedFromUser_ = false; this.player_.currentTime(this.liveCurrentTime()); } dispose() { this.stopTracking(); super.dispose(); } } Component$1$1.registerComponent("LiveTracker", LiveTracker$1); class TitleBar extends Component$1$1 { constructor(player, options2) { super(player, options2); this.on("statechanged", (e) => this.updateDom_()); this.updateDom_(); } createEl() { this.els = { title: createEl$1("div", { className: "vjs-title-bar-title", id: `vjs-title-bar-title-${newGUID$1()}` }), description: createEl$1("div", { className: "vjs-title-bar-description", id: `vjs-title-bar-description-${newGUID$1()}` }) }; return createEl$1("div", { className: "vjs-title-bar" }, {}, Object.values(this.els)); } updateDom_() { const tech = this.player_.tech_; const techEl = tech && tech.el_; const techAriaAttrs = { title: "aria-labelledby", description: "aria-describedby" }; ["title", "description"].forEach((k) => { const value = this.state[k]; const el = this.els[k]; const techAriaAttr = techAriaAttrs[k]; emptyEl$1(el); if (value) { textContent$1(el, value); } if (techEl) { techEl.removeAttribute(techAriaAttr); if (value) { techEl.setAttribute(techAriaAttr, el.id); } } }); if (this.state.title || this.state.description) { this.show(); } else { this.hide(); } } update(options2) { this.setState(options2); } dispose() { const tech = this.player_.tech_; const techEl = tech && tech.el_; if (techEl) { techEl.removeAttribute("aria-labelledby"); techEl.removeAttribute("aria-describedby"); } super.dispose(); this.els = null; } } Component$1$1.registerComponent("TitleBar", TitleBar); const sourcesetLoad$1 = (tech) => { const el = tech.el(); if (el.hasAttribute("src")) { tech.triggerSourceset(el.src); return true; } const sources = tech.$$("source"); const srcUrls = []; let src = ""; if (!sources.length) { return false; } for (let i2 = 0; i2 < sources.length; i2++) { const url = sources[i2].src; if (url && srcUrls.indexOf(url) === -1) { srcUrls.push(url); } } if (!srcUrls.length) { return false; } if (srcUrls.length === 1) { src = srcUrls[0]; } tech.triggerSourceset(src); return true; }; const innerHTMLDescriptorPolyfill$1 = Object.defineProperty({}, "innerHTML", { get() { return this.cloneNode(true).innerHTML; }, set(v) { const dummy = document_1.createElement(this.nodeName.toLowerCase()); dummy.innerHTML = v; const docFrag = document_1.createDocumentFragment(); while (dummy.childNodes.length) { docFrag.appendChild(dummy.childNodes[0]); } this.innerText = ""; window_1.Element.prototype.appendChild.call(this, docFrag); return this.innerHTML; } }); const getDescriptor$1 = (priority, prop) => { let descriptor = {}; for (let i2 = 0; i2 < priority.length; i2++) { descriptor = Object.getOwnPropertyDescriptor(priority[i2], prop); if (descriptor && descriptor.set && descriptor.get) { break; } } descriptor.enumerable = true; descriptor.configurable = true; return descriptor; }; const getInnerHTMLDescriptor$1 = (tech) => getDescriptor$1([tech.el(), window_1.HTMLMediaElement.prototype, window_1.Element.prototype, innerHTMLDescriptorPolyfill$1], "innerHTML"); const firstSourceWatch$1 = function(tech) { const el = tech.el(); if (el.resetSourceWatch_) { return; } const old = {}; const innerDescriptor = getInnerHTMLDescriptor$1(tech); const appendWrapper = (appendFn) => (...args) => { const retval = appendFn.apply(el, args); sourcesetLoad$1(tech); return retval; }; ["append", "appendChild", "insertAdjacentHTML"].forEach((k) => { if (!el[k]) { return; } old[k] = el[k]; el[k] = appendWrapper(old[k]); }); Object.defineProperty(el, "innerHTML", merge$1(innerDescriptor, { set: appendWrapper(innerDescriptor.set) })); el.resetSourceWatch_ = () => { el.resetSourceWatch_ = null; Object.keys(old).forEach((k) => { el[k] = old[k]; }); Object.defineProperty(el, "innerHTML", innerDescriptor); }; tech.one("sourceset", el.resetSourceWatch_); }; const srcDescriptorPolyfill$1 = Object.defineProperty({}, "src", { get() { if (this.hasAttribute("src")) { return getAbsoluteURL$1(window_1.Element.prototype.getAttribute.call(this, "src")); } return ""; }, set(v) { window_1.Element.prototype.setAttribute.call(this, "src", v); return v; } }); const getSrcDescriptor$1 = (tech) => getDescriptor$1([tech.el(), window_1.HTMLMediaElement.prototype, srcDescriptorPolyfill$1], "src"); const setupSourceset$1 = function(tech) { if (!tech.featuresSourceset) { return; } const el = tech.el(); if (el.resetSourceset_) { return; } const srcDescriptor = getSrcDescriptor$1(tech); const oldSetAttribute = el.setAttribute; const oldLoad = el.load; Object.defineProperty(el, "src", merge$1(srcDescriptor, { set: (v) => { const retval = srcDescriptor.set.call(el, v); tech.triggerSourceset(el.src); return retval; } })); el.setAttribute = (n, v) => { const retval = oldSetAttribute.call(el, n, v); if (/src/i.test(n)) { tech.triggerSourceset(el.src); } return retval; }; el.load = () => { const retval = oldLoad.call(el); if (!sourcesetLoad$1(tech)) { tech.triggerSourceset(""); firstSourceWatch$1(tech); } return retval; }; if (el.currentSrc) { tech.triggerSourceset(el.currentSrc); } else if (!sourcesetLoad$1(tech)) { firstSourceWatch$1(tech); } el.resetSourceset_ = () => { el.resetSourceset_ = null; el.load = oldLoad; el.setAttribute = oldSetAttribute; Object.defineProperty(el, "src", srcDescriptor); if (el.resetSourceWatch_) { el.resetSourceWatch_(); } }; }; class Html5$2 extends Tech$2 { constructor(options2, ready) { super(options2, ready); const source = options2.source; let crossoriginTracks = false; this.featuresVideoFrameCallback = this.featuresVideoFrameCallback && this.el_.tagName === "VIDEO"; if (source && (this.el_.currentSrc !== source.src || options2.tag && options2.tag.initNetworkState_ === 3)) { this.setSource(source); } else { this.handleLateInit_(this.el_); } if (options2.enableSourceset) { this.setupSourcesetHandling_(); } this.isScrubbing_ = false; if (this.el_.hasChildNodes()) { const nodes = this.el_.childNodes; let nodesLength = nodes.length; const removeNodes = []; while (nodesLength--) { const node = nodes[nodesLength]; const nodeName = node.nodeName.toLowerCase(); if (nodeName === "track") { if (!this.featuresNativeTextTracks) { removeNodes.push(node); } else { this.remoteTextTrackEls().addTrackElement_(node); this.remoteTextTracks().addTrack(node.track); this.textTracks().addTrack(node.track); if (!crossoriginTracks && !this.el_.hasAttribute("crossorigin") && isCrossOrigin$1(node.src)) { crossoriginTracks = true; } } } } for (let i2 = 0; i2 < removeNodes.length; i2++) { this.el_.removeChild(removeNodes[i2]); } } this.proxyNativeTracks_(); if (this.featuresNativeTextTracks && crossoriginTracks) { log$1$1.warn("Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\nThis may prevent text tracks from loading."); } this.restoreMetadataTracksInIOSNativePlayer_(); if ((TOUCH_ENABLED$1 || IS_IPHONE$1) && options2.nativeControlsForTouch === true) { this.setControls(true); } this.proxyWebkitFullscreen_(); this.triggerReady(); } dispose() { if (this.el_ && this.el_.resetSourceset_) { this.el_.resetSourceset_(); } Html5$2.disposeMediaElement(this.el_); this.options_ = null; super.dispose(); } setupSourcesetHandling_() { setupSourceset$1(this); } restoreMetadataTracksInIOSNativePlayer_() { const textTracks = this.textTracks(); let metadataTracksPreFullscreenState; const takeMetadataTrackSnapshot = () => { metadataTracksPreFullscreenState = []; for (let i2 = 0; i2 < textTracks.length; i2++) { const track = textTracks[i2]; if (track.kind === "metadata") { metadataTracksPreFullscreenState.push({ track, storedMode: track.mode }); } } }; takeMetadataTrackSnapshot(); textTracks.addEventListener("change", takeMetadataTrackSnapshot); this.on("dispose", () => textTracks.removeEventListener("change", takeMetadataTrackSnapshot)); const restoreTrackMode = () => { for (let i2 = 0; i2 < metadataTracksPreFullscreenState.length; i2++) { const storedTrack = metadataTracksPreFullscreenState[i2]; if (storedTrack.track.mode === "disabled" && storedTrack.track.mode !== storedTrack.storedMode) { storedTrack.track.mode = storedTrack.storedMode; } } textTracks.removeEventListener("change", restoreTrackMode); }; this.on("webkitbeginfullscreen", () => { textTracks.removeEventListener("change", takeMetadataTrackSnapshot); textTracks.removeEventListener("change", restoreTrackMode); textTracks.addEventListener("change", restoreTrackMode); }); this.on("webkitendfullscreen", () => { textTracks.removeEventListener("change", takeMetadataTrackSnapshot); textTracks.addEventListener("change", takeMetadataTrackSnapshot); textTracks.removeEventListener("change", restoreTrackMode); }); } overrideNative_(type2, override) { if (override !== this[`featuresNative${type2}Tracks`]) { return; } const lowerCaseType = type2.toLowerCase(); if (this[`${lowerCaseType}TracksListeners_`]) { Object.keys(this[`${lowerCaseType}TracksListeners_`]).forEach((eventName) => { const elTracks = this.el()[`${lowerCaseType}Tracks`]; elTracks.removeEventListener(eventName, this[`${lowerCaseType}TracksListeners_`][eventName]); }); } this[`featuresNative${type2}Tracks`] = !override; this[`${lowerCaseType}TracksListeners_`] = null; this.proxyNativeTracksForType_(lowerCaseType); } overrideNativeAudioTracks(override) { this.overrideNative_("Audio", override); } overrideNativeVideoTracks(override) { this.overrideNative_("Video", override); } proxyNativeTracksForType_(name) { const props = NORMAL$1[name]; const elTracks = this.el()[props.getterName]; const techTracks = this[props.getterName](); if (!this[`featuresNative${props.capitalName}Tracks`] || !elTracks || !elTracks.addEventListener) { return; } const listeners = { change: (e) => { const event2 = { type: "change", target: techTracks, currentTarget: techTracks, srcElement: techTracks }; techTracks.trigger(event2); if (name === "text") { this[REMOTE$1.remoteText.getterName]().trigger(event2); } }, addtrack(e) { techTracks.addTrack(e.track); }, removetrack(e) { techTracks.removeTrack(e.track); } }; const removeOldTracks = function() { const removeTracks = []; for (let i2 = 0; i2 < techTracks.length; i2++) { let found = false; for (let j = 0; j < elTracks.length; j++) { if (elTracks[j] === techTracks[i2]) { found = true; break; } } if (!found) { removeTracks.push(techTracks[i2]); } } while (removeTracks.length) { techTracks.removeTrack(removeTracks.shift()); } }; this[props.getterName + "Listeners_"] = listeners; Object.keys(listeners).forEach((eventName) => { const listener = listeners[eventName]; elTracks.addEventListener(eventName, listener); this.on("dispose", (e) => elTracks.removeEventListener(eventName, listener)); }); this.on("loadstart", removeOldTracks); this.on("dispose", (e) => this.off("loadstart", removeOldTracks)); } proxyNativeTracks_() { NORMAL$1.names.forEach((name) => { this.proxyNativeTracksForType_(name); }); } createEl() { let el = this.options_.tag; if (!el || !(this.options_.playerElIngest || this.movingMediaElementInDOM)) { if (el) { const clone = el.cloneNode(true); if (el.parentNode) { el.parentNode.insertBefore(clone, el); } Html5$2.disposeMediaElement(el); el = clone; } else { el = document_1.createElement("video"); const tagAttributes = this.options_.tag && getAttributes$1(this.options_.tag); const attributes = merge$1({}, tagAttributes); if (!TOUCH_ENABLED$1 || this.options_.nativeControlsForTouch !== true) { delete attributes.controls; } setAttributes$1(el, Object.assign(attributes, { id: this.options_.techId, class: "vjs-tech" })); } el.playerId = this.options_.playerId; } if (typeof this.options_.preload !== "undefined") { setAttribute$1(el, "preload", this.options_.preload); } if (this.options_.disablePictureInPicture !== void 0) { el.disablePictureInPicture = this.options_.disablePictureInPicture; } const settingsAttrs = ["loop", "muted", "playsinline", "autoplay"]; for (let i2 = 0; i2 < settingsAttrs.length; i2++) { const attr = settingsAttrs[i2]; const value = this.options_[attr]; if (typeof value !== "undefined") { if (value) { setAttribute$1(el, attr, attr); } else { removeAttribute$1(el, attr); } el[attr] = value; } } return el; } handleLateInit_(el) { if (el.networkState === 0 || el.networkState === 3) { return; } if (el.readyState === 0) { let loadstartFired = false; const setLoadstartFired = function() { loadstartFired = true; }; this.on("loadstart", setLoadstartFired); const triggerLoadstart = function() { if (!loadstartFired) { this.trigger("loadstart"); } }; this.on("loadedmetadata", triggerLoadstart); this.ready(function() { this.off("loadstart", setLoadstartFired); this.off("loadedmetadata", triggerLoadstart); if (!loadstartFired) { this.trigger("loadstart"); } }); return; } const eventsToTrigger = ["loadstart"]; eventsToTrigger.push("loadedmetadata"); if (el.readyState >= 2) { eventsToTrigger.push("loadeddata"); } if (el.readyState >= 3) { eventsToTrigger.push("canplay"); } if (el.readyState >= 4) { eventsToTrigger.push("canplaythrough"); } this.ready(function() { eventsToTrigger.forEach(function(type2) { this.trigger(type2); }, this); }); } setScrubbing(isScrubbing) { this.isScrubbing_ = isScrubbing; } scrubbing() { return this.isScrubbing_; } setCurrentTime(seconds) { try { if (this.isScrubbing_ && this.el_.fastSeek && IS_ANY_SAFARI$1) { this.el_.fastSeek(seconds); } else { this.el_.currentTime = seconds; } } catch (e) { log$1$1(e, "Video is not ready. (Video.js)"); } } duration() { if (this.el_.duration === Infinity && IS_ANDROID$1 && IS_CHROME$1 && this.el_.currentTime === 0) { const checkProgress = () => { if (this.el_.currentTime > 0) { if (this.el_.duration === Infinity) { this.trigger("durationchange"); } this.off("timeupdate", checkProgress); } }; this.on("timeupdate", checkProgress); return NaN; } return this.el_.duration || NaN; } width() { return this.el_.offsetWidth; } height() { return this.el_.offsetHeight; } proxyWebkitFullscreen_() { if (!("webkitDisplayingFullscreen" in this.el_)) { return; } const endFn = function() { this.trigger("fullscreenchange", { isFullscreen: false }); if (this.el_.controls && !this.options_.nativeControlsForTouch && this.controls()) { this.el_.controls = false; } }; const beginFn = function() { if ("webkitPresentationMode" in this.el_ && this.el_.webkitPresentationMode !== "picture-in-picture") { this.one("webkitendfullscreen", endFn); this.trigger("fullscreenchange", { isFullscreen: true, nativeIOSFullscreen: true }); } }; this.on("webkitbeginfullscreen", beginFn); this.on("dispose", () => { this.off("webkitbeginfullscreen", beginFn); this.off("webkitendfullscreen", endFn); }); } supportsFullScreen() { return typeof this.el_.webkitEnterFullScreen === "function"; } enterFullScreen() { const video = this.el_; if (video.paused && video.networkState <= video.HAVE_METADATA) { silencePromise$1(this.el_.play()); this.setTimeout(function() { video.pause(); try { video.webkitEnterFullScreen(); } catch (e) { this.trigger("fullscreenerror", e); } }, 0); } else { try { video.webkitEnterFullScreen(); } catch (e) { this.trigger("fullscreenerror", e); } } } exitFullScreen() { if (!this.el_.webkitDisplayingFullscreen) { this.trigger("fullscreenerror", new Error("The video is not fullscreen")); return; } this.el_.webkitExitFullScreen(); } requestPictureInPicture() { return this.el_.requestPictureInPicture(); } requestVideoFrameCallback(cb) { if (this.featuresVideoFrameCallback && !this.el_.webkitKeys) { return this.el_.requestVideoFrameCallback(cb); } return super.requestVideoFrameCallback(cb); } cancelVideoFrameCallback(id) { if (this.featuresVideoFrameCallback && !this.el_.webkitKeys) { this.el_.cancelVideoFrameCallback(id); } else { super.cancelVideoFrameCallback(id); } } src(src) { if (src === void 0) { return this.el_.src; } this.setSrc(src); } reset() { Html5$2.resetMediaElement(this.el_); } currentSrc() { if (this.currentSource_) { return this.currentSource_.src; } return this.el_.currentSrc; } setControls(val) { this.el_.controls = !!val; } addTextTrack(kind, label2, language) { if (!this.featuresNativeTextTracks) { return super.addTextTrack(kind, label2, language); } return this.el_.addTextTrack(kind, label2, language); } createRemoteTextTrack(options2) { if (!this.featuresNativeTextTracks) { return super.createRemoteTextTrack(options2); } const htmlTrackElement = document_1.createElement("track"); if (options2.kind) { htmlTrackElement.kind = options2.kind; } if (options2.label) { htmlTrackElement.label = options2.label; } if (options2.language || options2.srclang) { htmlTrackElement.srclang = options2.language || options2.srclang; } if (options2.default) { htmlTrackElement.default = options2.default; } if (options2.id) { htmlTrackElement.id = options2.id; } if (options2.src) { htmlTrackElement.src = options2.src; } return htmlTrackElement; } addRemoteTextTrack(options2, manualCleanup) { const htmlTrackElement = super.addRemoteTextTrack(options2, manualCleanup); if (this.featuresNativeTextTracks) { this.el().appendChild(htmlTrackElement); } return htmlTrackElement; } removeRemoteTextTrack(track) { super.removeRemoteTextTrack(track); if (this.featuresNativeTextTracks) { const tracks = this.$$("track"); let i2 = tracks.length; while (i2--) { if (track === tracks[i2] || track === tracks[i2].track) { this.el().removeChild(tracks[i2]); } } } } getVideoPlaybackQuality() { if (typeof this.el().getVideoPlaybackQuality === "function") { return this.el().getVideoPlaybackQuality(); } const videoPlaybackQuality = {}; if (typeof this.el().webkitDroppedFrameCount !== "undefined" && typeof this.el().webkitDecodedFrameCount !== "undefined") { videoPlaybackQuality.droppedVideoFrames = this.el().webkitDroppedFrameCount; videoPlaybackQuality.totalVideoFrames = this.el().webkitDecodedFrameCount; } if (window_1.performance) { videoPlaybackQuality.creationTime = window_1.performance.now(); } return videoPlaybackQuality; } } defineLazyProperty$1(Html5$2, "TEST_VID", function() { if (!isReal$1()) { return; } const video = document_1.createElement("video"); const track = document_1.createElement("track"); track.kind = "captions"; track.srclang = "en"; track.label = "English"; video.appendChild(track); return video; }); Html5$2.isSupported = function() { try { Html5$2.TEST_VID.volume = 0.5; } catch (e) { return false; } return !!(Html5$2.TEST_VID && Html5$2.TEST_VID.canPlayType); }; Html5$2.canPlayType = function(type2) { return Html5$2.TEST_VID.canPlayType(type2); }; Html5$2.canPlaySource = function(srcObj, options2) { return Html5$2.canPlayType(srcObj.type); }; Html5$2.canControlVolume = function() { try { const volume = Html5$2.TEST_VID.volume; Html5$2.TEST_VID.volume = volume / 2 + 0.1; const canControl = volume !== Html5$2.TEST_VID.volume; if (canControl && IS_IOS$1) { window_1.setTimeout(() => { if (Html5$2 && Html5$2.prototype) { Html5$2.prototype.featuresVolumeControl = volume !== Html5$2.TEST_VID.volume; } }); return false; } return canControl; } catch (e) { return false; } }; Html5$2.canMuteVolume = function() { try { const muted = Html5$2.TEST_VID.muted; Html5$2.TEST_VID.muted = !muted; if (Html5$2.TEST_VID.muted) { setAttribute$1(Html5$2.TEST_VID, "muted", "muted"); } else { removeAttribute$1(Html5$2.TEST_VID, "muted", "muted"); } return muted !== Html5$2.TEST_VID.muted; } catch (e) { return false; } }; Html5$2.canControlPlaybackRate = function() { if (IS_ANDROID$1 && IS_CHROME$1 && CHROME_VERSION$1 < 58) { return false; } try { const playbackRate = Html5$2.TEST_VID.playbackRate; Html5$2.TEST_VID.playbackRate = playbackRate / 2 + 0.1; return playbackRate !== Html5$2.TEST_VID.playbackRate; } catch (e) { return false; } }; Html5$2.canOverrideAttributes = function() { try { const noop2 = () => { }; Object.defineProperty(document_1.createElement("video"), "src", { get: noop2, set: noop2 }); Object.defineProperty(document_1.createElement("audio"), "src", { get: noop2, set: noop2 }); Object.defineProperty(document_1.createElement("video"), "innerHTML", { get: noop2, set: noop2 }); Object.defineProperty(document_1.createElement("audio"), "innerHTML", { get: noop2, set: noop2 }); } catch (e) { return false; } return true; }; Html5$2.supportsNativeTextTracks = function() { return IS_ANY_SAFARI$1 || IS_IOS$1 && IS_CHROME$1; }; Html5$2.supportsNativeVideoTracks = function() { return !!(Html5$2.TEST_VID && Html5$2.TEST_VID.videoTracks); }; Html5$2.supportsNativeAudioTracks = function() { return !!(Html5$2.TEST_VID && Html5$2.TEST_VID.audioTracks); }; Html5$2.Events = ["loadstart", "suspend", "abort", "error", "emptied", "stalled", "loadedmetadata", "loadeddata", "canplay", "canplaythrough", "playing", "waiting", "seeking", "seeked", "ended", "durationchange", "timeupdate", "progress", "play", "pause", "ratechange", "resize", "volumechange"]; [["featuresMuteControl", "canMuteVolume"], ["featuresPlaybackRate", "canControlPlaybackRate"], ["featuresSourceset", "canOverrideAttributes"], ["featuresNativeTextTracks", "supportsNativeTextTracks"], ["featuresNativeVideoTracks", "supportsNativeVideoTracks"], ["featuresNativeAudioTracks", "supportsNativeAudioTracks"]].forEach(function([key, fn2]) { defineLazyProperty$1(Html5$2.prototype, key, () => Html5$2[fn2](), true); }); Html5$2.prototype.featuresVolumeControl = Html5$2.canControlVolume(); Html5$2.prototype.movingMediaElementInDOM = !IS_IOS$1; Html5$2.prototype.featuresFullscreenResize = true; Html5$2.prototype.featuresProgressEvents = true; Html5$2.prototype.featuresTimeupdateEvents = true; Html5$2.prototype.featuresVideoFrameCallback = !!(Html5$2.TEST_VID && Html5$2.TEST_VID.requestVideoFrameCallback); Html5$2.disposeMediaElement = function(el) { if (!el) { return; } if (el.parentNode) { el.parentNode.removeChild(el); } while (el.hasChildNodes()) { el.removeChild(el.firstChild); } el.removeAttribute("src"); if (typeof el.load === "function") { (function() { try { el.load(); } catch (e) { } })(); } }; Html5$2.resetMediaElement = function(el) { if (!el) { return; } const sources = el.querySelectorAll("source"); let i2 = sources.length; while (i2--) { el.removeChild(sources[i2]); } el.removeAttribute("src"); if (typeof el.load === "function") { (function() { try { el.load(); } catch (e) { } })(); } }; [ "muted", "defaultMuted", "autoplay", "controls", "loop", "playsinline" ].forEach(function(prop) { Html5$2.prototype[prop] = function() { return this.el_[prop] || this.el_.hasAttribute(prop); }; }); [ "muted", "defaultMuted", "autoplay", "loop", "playsinline" ].forEach(function(prop) { Html5$2.prototype["set" + toTitleCase$1$1(prop)] = function(v) { this.el_[prop] = v; if (v) { this.el_.setAttribute(prop, prop); } else { this.el_.removeAttribute(prop); } }; }); [ "paused", "currentTime", "buffered", "volume", "poster", "preload", "error", "seeking", "seekable", "ended", "playbackRate", "defaultPlaybackRate", "disablePictureInPicture", "played", "networkState", "readyState", "videoWidth", "videoHeight", "crossOrigin" ].forEach(function(prop) { Html5$2.prototype[prop] = function() { return this.el_[prop]; }; }); [ "volume", "src", "poster", "preload", "playbackRate", "defaultPlaybackRate", "disablePictureInPicture", "crossOrigin" ].forEach(function(prop) { Html5$2.prototype["set" + toTitleCase$1$1(prop)] = function(v) { this.el_[prop] = v; }; }); [ "pause", "load", "play" ].forEach(function(prop) { Html5$2.prototype[prop] = function() { return this.el_[prop](); }; }); Tech$2.withSourceHandlers(Html5$2); Html5$2.nativeSourceHandler = {}; Html5$2.nativeSourceHandler.canPlayType = function(type2) { try { return Html5$2.TEST_VID.canPlayType(type2); } catch (e) { return ""; } }; Html5$2.nativeSourceHandler.canHandleSource = function(source, options2) { if (source.type) { return Html5$2.nativeSourceHandler.canPlayType(source.type); } else if (source.src) { const ext = getFileExtension$1(source.src); return Html5$2.nativeSourceHandler.canPlayType(`video/${ext}`); } return ""; }; Html5$2.nativeSourceHandler.handleSource = function(source, tech, options2) { tech.setSrc(source.src); }; Html5$2.nativeSourceHandler.dispose = function() { }; Html5$2.registerSourceHandler(Html5$2.nativeSourceHandler); Tech$2.registerTech("Html5", Html5$2); const TECH_EVENTS_RETRIGGER$1 = [ "progress", "abort", "suspend", "emptied", "stalled", "loadedmetadata", "loadeddata", "timeupdate", "resize", "volumechange", "texttrackchange" ]; const TECH_EVENTS_QUEUE$1 = { canplay: "CanPlay", canplaythrough: "CanPlayThrough", playing: "Playing", seeked: "Seeked" }; const BREAKPOINT_ORDER$1 = ["tiny", "xsmall", "small", "medium", "large", "xlarge", "huge"]; const BREAKPOINT_CLASSES$1 = {}; BREAKPOINT_ORDER$1.forEach((k) => { const v = k.charAt(0) === "x" ? `x-${k.substring(1)}` : k; BREAKPOINT_CLASSES$1[k] = `vjs-layout-${v}`; }); const DEFAULT_BREAKPOINTS$1 = { tiny: 210, xsmall: 320, small: 425, medium: 768, large: 1440, xlarge: 2560, huge: Infinity }; class Player$1 extends Component$1$1 { constructor(tag, options2, ready) { tag.id = tag.id || options2.id || `vjs_video_${newGUID$1()}`; options2 = Object.assign(Player$1.getTagSettings(tag), options2); options2.initChildren = false; options2.createEl = false; options2.evented = false; options2.reportTouchActivity = false; if (!options2.language) { const closest = tag.closest("[lang]"); if (closest) { options2.language = closest.getAttribute("lang"); } } super(null, options2, ready); this.boundDocumentFullscreenChange_ = (e) => this.documentFullscreenChange_(e); this.boundFullWindowOnEscKey_ = (e) => this.fullWindowOnEscKey(e); this.boundUpdateStyleEl_ = (e) => this.updateStyleEl_(e); this.boundApplyInitTime_ = (e) => this.applyInitTime_(e); this.boundUpdateCurrentBreakpoint_ = (e) => this.updateCurrentBreakpoint_(e); this.boundHandleTechClick_ = (e) => this.handleTechClick_(e); this.boundHandleTechDoubleClick_ = (e) => this.handleTechDoubleClick_(e); this.boundHandleTechTouchStart_ = (e) => this.handleTechTouchStart_(e); this.boundHandleTechTouchMove_ = (e) => this.handleTechTouchMove_(e); this.boundHandleTechTouchEnd_ = (e) => this.handleTechTouchEnd_(e); this.boundHandleTechTap_ = (e) => this.handleTechTap_(e); this.isFullscreen_ = false; this.log = createLogger$2(this.id_); this.fsApi_ = FullscreenApi$1; this.isPosterFromTech_ = false; this.queuedCallbacks_ = []; this.isReady_ = false; this.hasStarted_ = false; this.userActive_ = false; this.debugEnabled_ = false; this.audioOnlyMode_ = false; this.audioPosterMode_ = false; this.audioOnlyCache_ = { playerHeight: null, hiddenChildren: [] }; if (!this.options_ || !this.options_.techOrder || !this.options_.techOrder.length) { throw new Error("No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?"); } this.tag = tag; this.tagAttributes = tag && getAttributes$1(tag); this.language(this.options_.language); if (options2.languages) { const languagesToLower = {}; Object.getOwnPropertyNames(options2.languages).forEach(function(name) { languagesToLower[name.toLowerCase()] = options2.languages[name]; }); this.languages_ = languagesToLower; } else { this.languages_ = Player$1.prototype.options_.languages; } this.resetCache_(); this.poster_ = options2.poster || ""; this.controls_ = !!options2.controls; tag.controls = false; tag.removeAttribute("controls"); this.changingSrc_ = false; this.playCallbacks_ = []; this.playTerminatedQueue_ = []; if (tag.hasAttribute("autoplay")) { this.autoplay(true); } else { this.autoplay(this.options_.autoplay); } if (options2.plugins) { Object.keys(options2.plugins).forEach((name) => { if (typeof this[name] !== "function") { throw new Error(`plugin "${name}" does not exist`); } }); } this.scrubbing_ = false; this.el_ = this.createEl(); evented$1(this, { eventBusKey: "el_" }); if (this.fsApi_.requestFullscreen) { on$1(document_1, this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_); this.on(this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_); } if (this.fluid_) { this.on(["playerreset", "resize"], this.boundUpdateStyleEl_); } const playerOptionsCopy = merge$1(this.options_); if (options2.plugins) { Object.keys(options2.plugins).forEach((name) => { this[name](options2.plugins[name]); }); } if (options2.debug) { this.debug(true); } this.options_.playerOptions = playerOptionsCopy; this.middleware_ = []; this.playbackRates(options2.playbackRates); this.initChildren(); this.isAudio(tag.nodeName.toLowerCase() === "audio"); if (this.controls()) { this.addClass("vjs-controls-enabled"); } else { this.addClass("vjs-controls-disabled"); } this.el_.setAttribute("role", "region"); if (this.isAudio()) { this.el_.setAttribute("aria-label", this.localize("Audio Player")); } else { this.el_.setAttribute("aria-label", this.localize("Video Player")); } if (this.isAudio()) { this.addClass("vjs-audio"); } if (TOUCH_ENABLED$1) { this.addClass("vjs-touch-enabled"); } if (!IS_IOS$1) { this.addClass("vjs-workinghover"); } Player$1.players[this.id_] = this; const majorVersion = version$6$1.split(".")[0]; this.addClass(`vjs-v${majorVersion}`); this.userActive(true); this.reportUserActivity(); this.one("play", (e) => this.listenForUserActivity_(e)); this.on("keydown", (e) => this.handleKeyDown(e)); this.on("languagechange", (e) => this.handleLanguagechange(e)); this.breakpoints(this.options_.breakpoints); this.responsive(this.options_.responsive); this.on("ready", () => { this.audioPosterMode(this.options_.audioPosterMode); this.audioOnlyMode(this.options_.audioOnlyMode); }); } dispose() { this.trigger("dispose"); this.off("dispose"); off$1(document_1, this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_); off$1(document_1, "keydown", this.boundFullWindowOnEscKey_); if (this.styleEl_ && this.styleEl_.parentNode) { this.styleEl_.parentNode.removeChild(this.styleEl_); this.styleEl_ = null; } Player$1.players[this.id_] = null; if (this.tag && this.tag.player) { this.tag.player = null; } if (this.el_ && this.el_.player) { this.el_.player = null; } if (this.tech_) { this.tech_.dispose(); this.isPosterFromTech_ = false; this.poster_ = ""; } if (this.playerElIngest_) { this.playerElIngest_ = null; } if (this.tag) { this.tag = null; } clearCacheForPlayer$1(this); ALL$1.names.forEach((name) => { const props = ALL$1[name]; const list = this[props.getterName](); if (list && list.off) { list.off(); } }); super.dispose({ restoreEl: this.options_.restoreEl }); } createEl() { let tag = this.tag; let el; let playerElIngest = this.playerElIngest_ = tag.parentNode && tag.parentNode.hasAttribute && tag.parentNode.hasAttribute("data-vjs-player"); const divEmbed = this.tag.tagName.toLowerCase() === "video-js"; if (playerElIngest) { el = this.el_ = tag.parentNode; } else if (!divEmbed) { el = this.el_ = super.createEl("div"); } const attrs = getAttributes$1(tag); if (divEmbed) { el = this.el_ = tag; tag = this.tag = document_1.createElement("video"); while (el.children.length) { tag.appendChild(el.firstChild); } if (!hasClass$1(el, "video-js")) { addClass$1(el, "video-js"); } el.appendChild(tag); playerElIngest = this.playerElIngest_ = el; Object.keys(el).forEach((k) => { try { tag[k] = el[k]; } catch (e) { } }); } tag.setAttribute("tabindex", "-1"); attrs.tabindex = "-1"; if (IS_CHROME$1 && IS_WINDOWS$1) { tag.setAttribute("role", "application"); attrs.role = "application"; } tag.removeAttribute("width"); tag.removeAttribute("height"); if ("width" in attrs) { delete attrs.width; } if ("height" in attrs) { delete attrs.height; } Object.getOwnPropertyNames(attrs).forEach(function(attr) { if (!(divEmbed && attr === "class")) { el.setAttribute(attr, attrs[attr]); } if (divEmbed) { tag.setAttribute(attr, attrs[attr]); } }); tag.playerId = tag.id; tag.id += "_html5_api"; tag.className = "vjs-tech"; tag.player = el.player = this; this.addClass("vjs-paused"); if (window_1.VIDEOJS_NO_DYNAMIC_STYLE !== true) { this.styleEl_ = createStyleElement$1("vjs-styles-dimensions"); const defaultsStyleEl = $$1(".vjs-styles-defaults"); const head = $$1("head"); head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild); } this.fill_ = false; this.fluid_ = false; this.width(this.options_.width); this.height(this.options_.height); this.fill(this.options_.fill); this.fluid(this.options_.fluid); this.aspectRatio(this.options_.aspectRatio); this.crossOrigin(this.options_.crossOrigin || this.options_.crossorigin); const links = tag.getElementsByTagName("a"); for (let i2 = 0; i2 < links.length; i2++) { const linkEl = links.item(i2); addClass$1(linkEl, "vjs-hidden"); linkEl.setAttribute("hidden", "hidden"); } tag.initNetworkState_ = tag.networkState; if (tag.parentNode && !playerElIngest) { tag.parentNode.insertBefore(el, tag); } prependTo$1(tag, el); this.children_.unshift(tag); this.el_.setAttribute("lang", this.language_); this.el_.setAttribute("translate", "no"); this.el_ = el; return el; } crossOrigin(value) { if (typeof value === "undefined") { return this.techGet_("crossOrigin"); } if (value !== null && value !== "anonymous" && value !== "use-credentials") { log$1$1.warn(`crossOrigin must be null, "anonymous" or "use-credentials", given "${value}"`); return; } this.techCall_("setCrossOrigin", value); if (this.posterImage) { this.posterImage.crossOrigin(value); } return; } width(value) { return this.dimension("width", value); } height(value) { return this.dimension("height", value); } dimension(dimension, value) { const privDimension = dimension + "_"; if (value === void 0) { return this[privDimension] || 0; } if (value === "" || value === "auto") { this[privDimension] = void 0; this.updateStyleEl_(); return; } const parsedVal = parseFloat(value); if (isNaN(parsedVal)) { log$1$1.error(`Improper value "${value}" supplied for for ${dimension}`); return; } this[privDimension] = parsedVal; this.updateStyleEl_(); } fluid(bool) { if (bool === void 0) { return !!this.fluid_; } this.fluid_ = !!bool; if (isEvented$1(this)) { this.off(["playerreset", "resize"], this.boundUpdateStyleEl_); } if (bool) { this.addClass("vjs-fluid"); this.fill(false); addEventedCallback$1(this, () => { this.on(["playerreset", "resize"], this.boundUpdateStyleEl_); }); } else { this.removeClass("vjs-fluid"); } this.updateStyleEl_(); } fill(bool) { if (bool === void 0) { return !!this.fill_; } this.fill_ = !!bool; if (bool) { this.addClass("vjs-fill"); this.fluid(false); } else { this.removeClass("vjs-fill"); } } aspectRatio(ratio) { if (ratio === void 0) { return this.aspectRatio_; } if (!/^\d+\:\d+$/.test(ratio)) { throw new Error("Improper value supplied for aspect ratio. The format should be width:height, for example 16:9."); } this.aspectRatio_ = ratio; this.fluid(true); this.updateStyleEl_(); } updateStyleEl_() { if (window_1.VIDEOJS_NO_DYNAMIC_STYLE === true) { const width3 = typeof this.width_ === "number" ? this.width_ : this.options_.width; const height3 = typeof this.height_ === "number" ? this.height_ : this.options_.height; const techEl = this.tech_ && this.tech_.el(); if (techEl) { if (width3 >= 0) { techEl.width = width3; } if (height3 >= 0) { techEl.height = height3; } } return; } let width2; let height2; let aspectRatio; let idClass; if (this.aspectRatio_ !== void 0 && this.aspectRatio_ !== "auto") { aspectRatio = this.aspectRatio_; } else if (this.videoWidth() > 0) { aspectRatio = this.videoWidth() + ":" + this.videoHeight(); } else { aspectRatio = "16:9"; } const ratioParts = aspectRatio.split(":"); const ratioMultiplier = ratioParts[1] / ratioParts[0]; if (this.width_ !== void 0) { width2 = this.width_; } else if (this.height_ !== void 0) { width2 = this.height_ / ratioMultiplier; } else { width2 = this.videoWidth() || 300; } if (this.height_ !== void 0) { height2 = this.height_; } else { height2 = width2 * ratioMultiplier; } if (/^[^a-zA-Z]/.test(this.id())) { idClass = "dimensions-" + this.id(); } else { idClass = this.id() + "-dimensions"; } this.addClass(idClass); setTextContent$1(this.styleEl_, ` .${idClass} { width: ${width2}px; height: ${height2}px; } .${idClass}.vjs-fluid:not(.vjs-audio-only-mode) { padding-top: ${ratioMultiplier * 100}%; } `); } loadTech_(techName, source) { if (this.tech_) { this.unloadTech_(); } const titleTechName = toTitleCase$1$1(techName); const camelTechName = techName.charAt(0).toLowerCase() + techName.slice(1); if (titleTechName !== "Html5" && this.tag) { Tech$2.getTech("Html5").disposeMediaElement(this.tag); this.tag.player = null; this.tag = null; } this.techName_ = titleTechName; this.isReady_ = false; let autoplay = this.autoplay(); if (typeof this.autoplay() === "string" || this.autoplay() === true && this.options_.normalizeAutoplay) { autoplay = false; } const techOptions = { source, autoplay, "nativeControlsForTouch": this.options_.nativeControlsForTouch, "playerId": this.id(), "techId": `${this.id()}_${camelTechName}_api`, "playsinline": this.options_.playsinline, "preload": this.options_.preload, "loop": this.options_.loop, "disablePictureInPicture": this.options_.disablePictureInPicture, "muted": this.options_.muted, "poster": this.poster(), "language": this.language(), "playerElIngest": this.playerElIngest_ || false, "vtt.js": this.options_["vtt.js"], "canOverridePoster": !!this.options_.techCanOverridePoster, "enableSourceset": this.options_.enableSourceset }; ALL$1.names.forEach((name) => { const props = ALL$1[name]; techOptions[props.getterName] = this[props.privateName]; }); Object.assign(techOptions, this.options_[titleTechName]); Object.assign(techOptions, this.options_[camelTechName]); Object.assign(techOptions, this.options_[techName.toLowerCase()]); if (this.tag) { techOptions.tag = this.tag; } if (source && source.src === this.cache_.src && this.cache_.currentTime > 0) { techOptions.startTime = this.cache_.currentTime; } const TechClass = Tech$2.getTech(techName); if (!TechClass) { throw new Error(`No Tech named '${titleTechName}' exists! '${titleTechName}' should be registered using videojs.registerTech()'`); } this.tech_ = new TechClass(techOptions); this.tech_.ready(bind_(this, this.handleTechReady_), true); textTrackConverter$1.jsonToTextTracks(this.textTracksJson_ || [], this.tech_); TECH_EVENTS_RETRIGGER$1.forEach((event2) => { this.on(this.tech_, event2, (e) => this[`handleTech${toTitleCase$1$1(event2)}_`](e)); }); Object.keys(TECH_EVENTS_QUEUE$1).forEach((event2) => { this.on(this.tech_, event2, (eventObj) => { if (this.tech_.playbackRate() === 0 && this.tech_.seeking()) { this.queuedCallbacks_.push({ callback: this[`handleTech${TECH_EVENTS_QUEUE$1[event2]}_`].bind(this), event: eventObj }); return; } this[`handleTech${TECH_EVENTS_QUEUE$1[event2]}_`](eventObj); }); }); this.on(this.tech_, "loadstart", (e) => this.handleTechLoadStart_(e)); this.on(this.tech_, "sourceset", (e) => this.handleTechSourceset_(e)); this.on(this.tech_, "waiting", (e) => this.handleTechWaiting_(e)); this.on(this.tech_, "ended", (e) => this.handleTechEnded_(e)); this.on(this.tech_, "seeking", (e) => this.handleTechSeeking_(e)); this.on(this.tech_, "play", (e) => this.handleTechPlay_(e)); this.on(this.tech_, "pause", (e) => this.handleTechPause_(e)); this.on(this.tech_, "durationchange", (e) => this.handleTechDurationChange_(e)); this.on(this.tech_, "fullscreenchange", (e, data) => this.handleTechFullscreenChange_(e, data)); this.on(this.tech_, "fullscreenerror", (e, err) => this.handleTechFullscreenError_(e, err)); this.on(this.tech_, "enterpictureinpicture", (e) => this.handleTechEnterPictureInPicture_(e)); this.on(this.tech_, "leavepictureinpicture", (e) => this.handleTechLeavePictureInPicture_(e)); this.on(this.tech_, "error", (e) => this.handleTechError_(e)); this.on(this.tech_, "posterchange", (e) => this.handleTechPosterChange_(e)); this.on(this.tech_, "textdata", (e) => this.handleTechTextData_(e)); this.on(this.tech_, "ratechange", (e) => this.handleTechRateChange_(e)); this.on(this.tech_, "loadedmetadata", this.boundUpdateStyleEl_); this.usingNativeControls(this.techGet_("controls")); if (this.controls() && !this.usingNativeControls()) { this.addTechControlsListeners_(); } if (this.tech_.el().parentNode !== this.el() && (titleTechName !== "Html5" || !this.tag)) { prependTo$1(this.tech_.el(), this.el()); } if (this.tag) { this.tag.player = null; this.tag = null; } } unloadTech_() { ALL$1.names.forEach((name) => { const props = ALL$1[name]; this[props.privateName] = this[props.getterName](); }); this.textTracksJson_ = textTrackConverter$1.textTracksToJson(this.tech_); this.isReady_ = false; this.tech_.dispose(); this.tech_ = false; if (this.isPosterFromTech_) { this.poster_ = ""; this.trigger("posterchange"); } this.isPosterFromTech_ = false; } tech(safety) { if (safety === void 0) { log$1$1.warn("Using the tech directly can be dangerous. I hope you know what you're doing.\nSee https://github.com/videojs/video.js/issues/2617 for more info.\n"); } return this.tech_; } addTechControlsListeners_() { this.removeTechControlsListeners_(); this.on(this.tech_, "click", this.boundHandleTechClick_); this.on(this.tech_, "dblclick", this.boundHandleTechDoubleClick_); this.on(this.tech_, "touchstart", this.boundHandleTechTouchStart_); this.on(this.tech_, "touchmove", this.boundHandleTechTouchMove_); this.on(this.tech_, "touchend", this.boundHandleTechTouchEnd_); this.on(this.tech_, "tap", this.boundHandleTechTap_); } removeTechControlsListeners_() { this.off(this.tech_, "tap", this.boundHandleTechTap_); this.off(this.tech_, "touchstart", this.boundHandleTechTouchStart_); this.off(this.tech_, "touchmove", this.boundHandleTechTouchMove_); this.off(this.tech_, "touchend", this.boundHandleTechTouchEnd_); this.off(this.tech_, "click", this.boundHandleTechClick_); this.off(this.tech_, "dblclick", this.boundHandleTechDoubleClick_); } handleTechReady_() { this.triggerReady(); if (this.cache_.volume) { this.techCall_("setVolume", this.cache_.volume); } this.handleTechPosterChange_(); this.handleTechDurationChange_(); } handleTechLoadStart_() { this.removeClass("vjs-ended", "vjs-seeking"); this.error(null); this.handleTechDurationChange_(); if (!this.paused()) { this.trigger("loadstart"); } else { this.hasStarted(false); this.trigger("loadstart"); } this.manualAutoplay_(this.autoplay() === true && this.options_.normalizeAutoplay ? "play" : this.autoplay()); } manualAutoplay_(type2) { if (!this.tech_ || typeof type2 !== "string") { return; } const resolveMuted = () => { const previouslyMuted = this.muted(); this.muted(true); const restoreMuted = () => { this.muted(previouslyMuted); }; this.playTerminatedQueue_.push(restoreMuted); const mutedPromise = this.play(); if (!isPromise$1(mutedPromise)) { return; } return mutedPromise.catch((err) => { restoreMuted(); throw new Error(`Rejection at manualAutoplay. Restoring muted value. ${err ? err : ""}`); }); }; let promise; if (type2 === "any" && !this.muted()) { promise = this.play(); if (isPromise$1(promise)) { promise = promise.catch(resolveMuted); } } else if (type2 === "muted" && !this.muted()) { promise = resolveMuted(); } else { promise = this.play(); } if (!isPromise$1(promise)) { return; } return promise.then(() => { this.trigger({ type: "autoplay-success", autoplay: type2 }); }).catch(() => { this.trigger({ type: "autoplay-failure", autoplay: type2 }); }); } updateSourceCaches_(srcObj = "") { let src = srcObj; let type2 = ""; if (typeof src !== "string") { src = srcObj.src; type2 = srcObj.type; } this.cache_.source = this.cache_.source || {}; this.cache_.sources = this.cache_.sources || []; if (src && !type2) { type2 = findMimetype$1(this, src); } this.cache_.source = merge$1({}, srcObj, { src, type: type2 }); const matchingSources = this.cache_.sources.filter((s) => s.src && s.src === src); const sourceElSources = []; const sourceEls = this.$$("source"); const matchingSourceEls = []; for (let i2 = 0; i2 < sourceEls.length; i2++) { const sourceObj = getAttributes$1(sourceEls[i2]); sourceElSources.push(sourceObj); if (sourceObj.src && sourceObj.src === src) { matchingSourceEls.push(sourceObj.src); } } if (matchingSourceEls.length && !matchingSources.length) { this.cache_.sources = sourceElSources; } else if (!matchingSources.length) { this.cache_.sources = [this.cache_.source]; } this.cache_.src = src; } handleTechSourceset_(event2) { if (!this.changingSrc_) { let updateSourceCaches = (src) => this.updateSourceCaches_(src); const playerSrc = this.currentSource().src; const eventSrc = event2.src; if (playerSrc && !/^blob:/.test(playerSrc) && /^blob:/.test(eventSrc)) { if (!this.lastSource_ || this.lastSource_.tech !== eventSrc && this.lastSource_.player !== playerSrc) { updateSourceCaches = () => { }; } } updateSourceCaches(eventSrc); if (!event2.src) { this.tech_.any(["sourceset", "loadstart"], (e) => { if (e.type === "sourceset") { return; } const techSrc = this.techGet("currentSrc"); this.lastSource_.tech = techSrc; this.updateSourceCaches_(techSrc); }); } } this.lastSource_ = { player: this.currentSource().src, tech: event2.src }; this.trigger({ src: event2.src, type: "sourceset" }); } hasStarted(request) { if (request === void 0) { return this.hasStarted_; } if (request === this.hasStarted_) { return; } this.hasStarted_ = request; if (this.hasStarted_) { this.addClass("vjs-has-started"); } else { this.removeClass("vjs-has-started"); } } handleTechPlay_() { this.removeClass("vjs-ended", "vjs-paused"); this.addClass("vjs-playing"); this.hasStarted(true); this.trigger("play"); } handleTechRateChange_() { if (this.tech_.playbackRate() > 0 && this.cache_.lastPlaybackRate === 0) { this.queuedCallbacks_.forEach((queued) => queued.callback(queued.event)); this.queuedCallbacks_ = []; } this.cache_.lastPlaybackRate = this.tech_.playbackRate(); this.trigger("ratechange"); } handleTechWaiting_() { this.addClass("vjs-waiting"); this.trigger("waiting"); const timeWhenWaiting = this.currentTime(); const timeUpdateListener = () => { if (timeWhenWaiting !== this.currentTime()) { this.removeClass("vjs-waiting"); this.off("timeupdate", timeUpdateListener); } }; this.on("timeupdate", timeUpdateListener); } handleTechCanPlay_() { this.removeClass("vjs-waiting"); this.trigger("canplay"); } handleTechCanPlayThrough_() { this.removeClass("vjs-waiting"); this.trigger("canplaythrough"); } handleTechPlaying_() { this.removeClass("vjs-waiting"); this.trigger("playing"); } handleTechSeeking_() { this.addClass("vjs-seeking"); this.trigger("seeking"); } handleTechSeeked_() { this.removeClass("vjs-seeking", "vjs-ended"); this.trigger("seeked"); } handleTechPause_() { this.removeClass("vjs-playing"); this.addClass("vjs-paused"); this.trigger("pause"); } handleTechEnded_() { this.addClass("vjs-ended"); this.removeClass("vjs-waiting"); if (this.options_.loop) { this.currentTime(0); this.play(); } else if (!this.paused()) { this.pause(); } this.trigger("ended"); } handleTechDurationChange_() { this.duration(this.techGet_("duration")); } handleTechClick_(event2) { if (!this.controls_) { return; } if (this.options_ === void 0 || this.options_.userActions === void 0 || this.options_.userActions.click === void 0 || this.options_.userActions.click !== false) { if (this.options_ !== void 0 && this.options_.userActions !== void 0 && typeof this.options_.userActions.click === "function") { this.options_.userActions.click.call(this, event2); } else if (this.paused()) { silencePromise$1(this.play()); } else { this.pause(); } } } handleTechDoubleClick_(event2) { if (!this.controls_) { return; } const inAllowedEls = Array.prototype.some.call(this.$$(".vjs-control-bar, .vjs-modal-dialog"), (el) => el.contains(event2.target)); if (!inAllowedEls) { if (this.options_ === void 0 || this.options_.userActions === void 0 || this.options_.userActions.doubleClick === void 0 || this.options_.userActions.doubleClick !== false) { if (this.options_ !== void 0 && this.options_.userActions !== void 0 && typeof this.options_.userActions.doubleClick === "function") { this.options_.userActions.doubleClick.call(this, event2); } else if (this.isFullscreen()) { this.exitFullscreen(); } else { this.requestFullscreen(); } } } } handleTechTap_() { this.userActive(!this.userActive()); } handleTechTouchStart_() { this.userWasActive = this.userActive(); } handleTechTouchMove_() { if (this.userWasActive) { this.reportUserActivity(); } } handleTechTouchEnd_(event2) { if (event2.cancelable) { event2.preventDefault(); } } toggleFullscreenClass_() { if (this.isFullscreen()) { this.addClass("vjs-fullscreen"); } else { this.removeClass("vjs-fullscreen"); } } documentFullscreenChange_(e) { const targetPlayer = e.target.player; if (targetPlayer && targetPlayer !== this) { return; } const el = this.el(); let isFs = document_1[this.fsApi_.fullscreenElement] === el; if (!isFs && el.matches) { isFs = el.matches(":" + this.fsApi_.fullscreen); } else if (!isFs && el.msMatchesSelector) { isFs = el.msMatchesSelector(":" + this.fsApi_.fullscreen); } this.isFullscreen(isFs); } handleTechFullscreenChange_(event2, data) { if (data) { if (data.nativeIOSFullscreen) { this.addClass("vjs-ios-native-fs"); this.tech_.one("webkitendfullscreen", () => { this.removeClass("vjs-ios-native-fs"); }); } this.isFullscreen(data.isFullscreen); } } handleTechFullscreenError_(event2, err) { this.trigger("fullscreenerror", err); } togglePictureInPictureClass_() { if (this.isInPictureInPicture()) { this.addClass("vjs-picture-in-picture"); } else { this.removeClass("vjs-picture-in-picture"); } } handleTechEnterPictureInPicture_(event2) { this.isInPictureInPicture(true); } handleTechLeavePictureInPicture_(event2) { this.isInPictureInPicture(false); } handleTechError_() { const error = this.tech_.error(); this.error(error); } handleTechTextData_() { let data = null; if (arguments.length > 1) { data = arguments[1]; } this.trigger("textdata", data); } getCache() { return this.cache_; } resetCache_() { this.cache_ = { currentTime: 0, initTime: 0, inactivityTimeout: this.options_.inactivityTimeout, duration: NaN, lastVolume: 1, lastPlaybackRate: this.defaultPlaybackRate(), media: null, src: "", source: {}, sources: [], playbackRates: [], volume: 1 }; } techCall_(method, arg) { this.ready(function() { if (method in allowedSetters$1) { return set$1(this.middleware_, this.tech_, method, arg); } else if (method in allowedMediators$1) { return mediate$1(this.middleware_, this.tech_, method, arg); } try { if (this.tech_) { this.tech_[method](arg); } } catch (e) { log$1$1(e); throw e; } }, true); } techGet_(method) { if (!this.tech_ || !this.tech_.isReady_) { return; } if (method in allowedGetters$1) { return get$1(this.middleware_, this.tech_, method); } else if (method in allowedMediators$1) { return mediate$1(this.middleware_, this.tech_, method); } try { return this.tech_[method](); } catch (e) { if (this.tech_[method] === void 0) { log$1$1(`Video.js: ${method} method not defined for ${this.techName_} playback technology.`, e); throw e; } if (e.name === "TypeError") { log$1$1(`Video.js: ${method} unavailable on ${this.techName_} playback technology element.`, e); this.tech_.isReady_ = false; throw e; } log$1$1(e); throw e; } } play() { return new Promise((resolve2) => { this.play_(resolve2); }); } play_(callback2 = silencePromise$1) { this.playCallbacks_.push(callback2); const isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); const isSafariOrIOS = Boolean(IS_ANY_SAFARI$1 || IS_IOS$1); if (this.waitToPlay_) { this.off(["ready", "loadstart"], this.waitToPlay_); this.waitToPlay_ = null; } if (!this.isReady_ || !isSrcReady) { this.waitToPlay_ = (e) => { this.play_(); }; this.one(["ready", "loadstart"], this.waitToPlay_); if (!isSrcReady && isSafariOrIOS) { this.load(); } return; } const val = this.techGet_("play"); const isNativeReplay = isSafariOrIOS && this.hasClass("vjs-ended"); if (isNativeReplay) { this.resetProgressBar_(); } if (val === null) { this.runPlayTerminatedQueue_(); } else { this.runPlayCallbacks_(val); } } runPlayTerminatedQueue_() { const queue = this.playTerminatedQueue_.slice(0); this.playTerminatedQueue_ = []; queue.forEach(function(q2) { q2(); }); } runPlayCallbacks_(val) { const callbacks = this.playCallbacks_.slice(0); this.playCallbacks_ = []; this.playTerminatedQueue_ = []; callbacks.forEach(function(cb) { cb(val); }); } pause() { this.techCall_("pause"); } paused() { return this.techGet_("paused") === false ? false : true; } played() { return this.techGet_("played") || createTimeRanges$1(0, 0); } scrubbing(isScrubbing) { if (typeof isScrubbing === "undefined") { return this.scrubbing_; } this.scrubbing_ = !!isScrubbing; this.techCall_("setScrubbing", this.scrubbing_); if (isScrubbing) { this.addClass("vjs-scrubbing"); } else { this.removeClass("vjs-scrubbing"); } } currentTime(seconds) { if (typeof seconds !== "undefined") { if (seconds < 0) { seconds = 0; } if (!this.isReady_ || this.changingSrc_ || !this.tech_ || !this.tech_.isReady_) { this.cache_.initTime = seconds; this.off("canplay", this.boundApplyInitTime_); this.one("canplay", this.boundApplyInitTime_); return; } this.techCall_("setCurrentTime", seconds); this.cache_.initTime = 0; return; } this.cache_.currentTime = this.techGet_("currentTime") || 0; return this.cache_.currentTime; } applyInitTime_() { this.currentTime(this.cache_.initTime); } duration(seconds) { if (seconds === void 0) { return this.cache_.duration !== void 0 ? this.cache_.duration : NaN; } seconds = parseFloat(seconds); if (seconds < 0) { seconds = Infinity; } if (seconds !== this.cache_.duration) { this.cache_.duration = seconds; if (seconds === Infinity) { this.addClass("vjs-live"); } else { this.removeClass("vjs-live"); } if (!isNaN(seconds)) { this.trigger("durationchange"); } } } remainingTime() { return this.duration() - this.currentTime(); } remainingTimeDisplay() { return Math.floor(this.duration()) - Math.floor(this.currentTime()); } buffered() { let buffered = this.techGet_("buffered"); if (!buffered || !buffered.length) { buffered = createTimeRanges$1(0, 0); } return buffered; } bufferedPercent() { return bufferedPercent$1(this.buffered(), this.duration()); } bufferedEnd() { const buffered = this.buffered(); const duration5 = this.duration(); let end = buffered.end(buffered.length - 1); if (end > duration5) { end = duration5; } return end; } volume(percentAsDecimal) { let vol; if (percentAsDecimal !== void 0) { vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); this.cache_.volume = vol; this.techCall_("setVolume", vol); if (vol > 0) { this.lastVolume_(vol); } return; } vol = parseFloat(this.techGet_("volume")); return isNaN(vol) ? 1 : vol; } muted(muted) { if (muted !== void 0) { this.techCall_("setMuted", muted); return; } return this.techGet_("muted") || false; } defaultMuted(defaultMuted) { if (defaultMuted !== void 0) { return this.techCall_("setDefaultMuted", defaultMuted); } return this.techGet_("defaultMuted") || false; } lastVolume_(percentAsDecimal) { if (percentAsDecimal !== void 0 && percentAsDecimal !== 0) { this.cache_.lastVolume = percentAsDecimal; return; } return this.cache_.lastVolume; } supportsFullScreen() { return this.techGet_("supportsFullScreen") || false; } isFullscreen(isFS) { if (isFS !== void 0) { const oldValue = this.isFullscreen_; this.isFullscreen_ = Boolean(isFS); if (this.isFullscreen_ !== oldValue && this.fsApi_.prefixed) { this.trigger("fullscreenchange"); } this.toggleFullscreenClass_(); return; } return this.isFullscreen_; } requestFullscreen(fullscreenOptions) { if (this.isInPictureInPicture()) { this.exitPictureInPicture(); } const self2 = this; return new Promise((resolve2, reject2) => { function offHandler() { self2.off("fullscreenerror", errorHandler); self2.off("fullscreenchange", changeHandler); } function changeHandler() { offHandler(); resolve2(); } function errorHandler(e, err) { offHandler(); reject2(err); } self2.one("fullscreenchange", changeHandler); self2.one("fullscreenerror", errorHandler); const promise = self2.requestFullscreenHelper_(fullscreenOptions); if (promise) { promise.then(offHandler, offHandler); promise.then(resolve2, reject2); } }); } requestFullscreenHelper_(fullscreenOptions) { let fsOptions; if (!this.fsApi_.prefixed) { fsOptions = this.options_.fullscreen && this.options_.fullscreen.options || {}; if (fullscreenOptions !== void 0) { fsOptions = fullscreenOptions; } } if (this.fsApi_.requestFullscreen) { const promise = this.el_[this.fsApi_.requestFullscreen](fsOptions); if (promise) { promise.then(() => this.isFullscreen(true), () => this.isFullscreen(false)); } return promise; } else if (this.tech_.supportsFullScreen() && !this.options_.preferFullWindow === true) { this.techCall_("enterFullScreen"); } else { this.enterFullWindow(); } } exitFullscreen() { const self2 = this; return new Promise((resolve2, reject2) => { function offHandler() { self2.off("fullscreenerror", errorHandler); self2.off("fullscreenchange", changeHandler); } function changeHandler() { offHandler(); resolve2(); } function errorHandler(e, err) { offHandler(); reject2(err); } self2.one("fullscreenchange", changeHandler); self2.one("fullscreenerror", errorHandler); const promise = self2.exitFullscreenHelper_(); if (promise) { promise.then(offHandler, offHandler); promise.then(resolve2, reject2); } }); } exitFullscreenHelper_() { if (this.fsApi_.requestFullscreen) { const promise = document_1[this.fsApi_.exitFullscreen](); if (promise) { silencePromise$1(promise.then(() => this.isFullscreen(false))); } return promise; } else if (this.tech_.supportsFullScreen() && !this.options_.preferFullWindow === true) { this.techCall_("exitFullScreen"); } else { this.exitFullWindow(); } } enterFullWindow() { this.isFullscreen(true); this.isFullWindow = true; this.docOrigOverflow = document_1.documentElement.style.overflow; on$1(document_1, "keydown", this.boundFullWindowOnEscKey_); document_1.documentElement.style.overflow = "hidden"; addClass$1(document_1.body, "vjs-full-window"); this.trigger("enterFullWindow"); } fullWindowOnEscKey(event2) { if (keycode.isEventKey(event2, "Esc")) { if (this.isFullscreen() === true) { if (!this.isFullWindow) { this.exitFullscreen(); } else { this.exitFullWindow(); } } } } exitFullWindow() { this.isFullscreen(false); this.isFullWindow = false; off$1(document_1, "keydown", this.boundFullWindowOnEscKey_); document_1.documentElement.style.overflow = this.docOrigOverflow; removeClass$1(document_1.body, "vjs-full-window"); this.trigger("exitFullWindow"); } disablePictureInPicture(value) { if (value === void 0) { return this.techGet_("disablePictureInPicture"); } this.techCall_("setDisablePictureInPicture", value); this.options_.disablePictureInPicture = value; this.trigger("disablepictureinpicturechanged"); } isInPictureInPicture(isPiP) { if (isPiP !== void 0) { this.isInPictureInPicture_ = !!isPiP; this.togglePictureInPictureClass_(); return; } return !!this.isInPictureInPicture_; } requestPictureInPicture() { if (this.options_.enableDocumentPictureInPicture && window_1.documentPictureInPicture) { const pipContainer = document_1.createElement(this.el().tagName); pipContainer.classList = this.el().classList; pipContainer.classList.add("vjs-pip-container"); if (this.posterImage) { pipContainer.appendChild(this.posterImage.el().cloneNode(true)); } if (this.titleBar) { pipContainer.appendChild(this.titleBar.el().cloneNode(true)); } pipContainer.appendChild(createEl$1("p", { className: "vjs-pip-text" }, {}, this.localize("Playing in picture-in-picture"))); return window_1.documentPictureInPicture.requestWindow({ initialAspectRatio: this.videoWidth() / this.videoHeight(), copyStyleSheets: true }).then((pipWindow) => { this.el_.parentNode.insertBefore(pipContainer, this.el_); pipWindow.document.body.append(this.el_); pipWindow.document.body.classList.add("vjs-pip-window"); this.player_.isInPictureInPicture(true); this.player_.trigger("enterpictureinpicture"); pipWindow.addEventListener("unload", (event2) => { const pipVideo = event2.target.querySelector(".video-js"); pipContainer.replaceWith(pipVideo); this.player_.isInPictureInPicture(false); this.player_.trigger("leavepictureinpicture"); }); return pipWindow; }); } if ("pictureInPictureEnabled" in document_1 && this.disablePictureInPicture() === false) { return this.techGet_("requestPictureInPicture"); } return Promise.reject("No PiP mode is available"); } exitPictureInPicture() { if (window_1.documentPictureInPicture && window_1.documentPictureInPicture.window) { window_1.documentPictureInPicture.window.close(); return Promise.resolve(); } if ("pictureInPictureEnabled" in document_1) { return document_1.exitPictureInPicture(); } } handleKeyDown(event2) { const { userActions } = this.options_; if (!userActions || !userActions.hotkeys) { return; } const excludeElement = (el) => { const tagName = el.tagName.toLowerCase(); if (el.isContentEditable) { return true; } const allowedInputTypes = ["button", "checkbox", "hidden", "radio", "reset", "submit"]; if (tagName === "input") { return allowedInputTypes.indexOf(el.type) === -1; } const excludedTags = ["textarea"]; return excludedTags.indexOf(tagName) !== -1; }; if (excludeElement(this.el_.ownerDocument.activeElement)) { return; } if (typeof userActions.hotkeys === "function") { userActions.hotkeys.call(this, event2); } else { this.handleHotkeys(event2); } } handleHotkeys(event2) { const hotkeys = this.options_.userActions ? this.options_.userActions.hotkeys : {}; const { fullscreenKey = (keydownEvent) => keycode.isEventKey(keydownEvent, "f"), muteKey = (keydownEvent) => keycode.isEventKey(keydownEvent, "m"), playPauseKey = (keydownEvent) => keycode.isEventKey(keydownEvent, "k") || keycode.isEventKey(keydownEvent, "Space") } = hotkeys; if (fullscreenKey.call(this, event2)) { event2.preventDefault(); event2.stopPropagation(); const FSToggle = Component$1$1.getComponent("FullscreenToggle"); if (document_1[this.fsApi_.fullscreenEnabled] !== false) { FSToggle.prototype.handleClick.call(this, event2); } } else if (muteKey.call(this, event2)) { event2.preventDefault(); event2.stopPropagation(); const MuteToggle2 = Component$1$1.getComponent("MuteToggle"); MuteToggle2.prototype.handleClick.call(this, event2); } else if (playPauseKey.call(this, event2)) { event2.preventDefault(); event2.stopPropagation(); const PlayToggle2 = Component$1$1.getComponent("PlayToggle"); PlayToggle2.prototype.handleClick.call(this, event2); } } canPlayType(type2) { let can; for (let i2 = 0, j = this.options_.techOrder; i2 < j.length; i2++) { const techName = j[i2]; let tech = Tech$2.getTech(techName); if (!tech) { tech = Component$1$1.getComponent(techName); } if (!tech) { log$1$1.error(`The "${techName}" tech is undefined. Skipped browser support check for that tech.`); continue; } if (tech.isSupported()) { can = tech.canPlayType(type2); if (can) { return can; } } } return ""; } selectSource(sources) { const techs = this.options_.techOrder.map((techName) => { return [techName, Tech$2.getTech(techName)]; }).filter(([techName, tech]) => { if (tech) { return tech.isSupported(); } log$1$1.error(`The "${techName}" tech is undefined. Skipped browser support check for that tech.`); return false; }); const findFirstPassingTechSourcePair = function(outerArray, innerArray, tester) { let found; outerArray.some((outerChoice) => { return innerArray.some((innerChoice) => { found = tester(outerChoice, innerChoice); if (found) { return true; } }); }); return found; }; let foundSourceAndTech; const flip = (fn2) => (a, b) => fn2(b, a); const finder = ([techName, tech], source) => { if (tech.canPlaySource(source, this.options_[techName.toLowerCase()])) { return { source, tech: techName }; } }; if (this.options_.sourceOrder) { foundSourceAndTech = findFirstPassingTechSourcePair(sources, techs, flip(finder)); } else { foundSourceAndTech = findFirstPassingTechSourcePair(techs, sources, finder); } return foundSourceAndTech || false; } handleSrc_(source, isRetry) { if (typeof source === "undefined") { return this.cache_.src || ""; } if (this.resetRetryOnError_) { this.resetRetryOnError_(); } const sources = filterSource$1(source); if (!sources.length) { this.setTimeout(function() { this.error({ code: 4, message: this.options_.notSupportedMessage }); }, 0); return; } this.changingSrc_ = true; if (!isRetry) { this.cache_.sources = sources; } this.updateSourceCaches_(sources[0]); setSource$1(this, sources[0], (middlewareSource, mws) => { this.middleware_ = mws; if (!isRetry) { this.cache_.sources = sources; } this.updateSourceCaches_(middlewareSource); const err = this.src_(middlewareSource); if (err) { if (sources.length > 1) { return this.handleSrc_(sources.slice(1)); } this.changingSrc_ = false; this.setTimeout(function() { this.error({ code: 4, message: this.options_.notSupportedMessage }); }, 0); this.triggerReady(); return; } setTech$1(mws, this.tech_); }); if (sources.length > 1) { const retry = () => { this.error(null); this.handleSrc_(sources.slice(1), true); }; const stopListeningForErrors = () => { this.off("error", retry); }; this.one("error", retry); this.one("playing", stopListeningForErrors); this.resetRetryOnError_ = () => { this.off("error", retry); this.off("playing", stopListeningForErrors); }; } } src(source) { return this.handleSrc_(source, false); } src_(source) { const sourceTech = this.selectSource([source]); if (!sourceTech) { return true; } if (!titleCaseEquals$1(sourceTech.tech, this.techName_)) { this.changingSrc_ = true; this.loadTech_(sourceTech.tech, sourceTech.source); this.tech_.ready(() => { this.changingSrc_ = false; }); return false; } this.ready(function() { if (this.tech_.constructor.prototype.hasOwnProperty("setSource")) { this.techCall_("setSource", source); } else { this.techCall_("src", source.src); } this.changingSrc_ = false; }, true); return false; } load() { this.techCall_("load"); } reset() { if (this.paused()) { this.doReset_(); } else { const playPromise = this.play(); silencePromise$1(playPromise.then(() => this.doReset_())); } } doReset_() { if (this.tech_) { this.tech_.clearTracks("text"); } this.resetCache_(); this.poster(""); this.loadTech_(this.options_.techOrder[0], null); this.techCall_("reset"); this.resetControlBarUI_(); if (isEvented$1(this)) { this.trigger("playerreset"); } } resetControlBarUI_() { this.resetProgressBar_(); this.resetPlaybackRate_(); this.resetVolumeBar_(); } resetProgressBar_() { this.currentTime(0); const { currentTimeDisplay, durationDisplay, progressControl, remainingTimeDisplay } = this.controlBar || {}; const { seekBar } = progressControl || {}; if (currentTimeDisplay) { currentTimeDisplay.updateContent(); } if (durationDisplay) { durationDisplay.updateContent(); } if (remainingTimeDisplay) { remainingTimeDisplay.updateContent(); } if (seekBar) { seekBar.update(); if (seekBar.loadProgressBar) { seekBar.loadProgressBar.update(); } } } resetPlaybackRate_() { this.playbackRate(this.defaultPlaybackRate()); this.handleTechRateChange_(); } resetVolumeBar_() { this.volume(1); this.trigger("volumechange"); } currentSources() { const source = this.currentSource(); const sources = []; if (Object.keys(source).length !== 0) { sources.push(source); } return this.cache_.sources || sources; } currentSource() { return this.cache_.source || {}; } currentSrc() { return this.currentSource() && this.currentSource().src || ""; } currentType() { return this.currentSource() && this.currentSource().type || ""; } preload(value) { if (value !== void 0) { this.techCall_("setPreload", value); this.options_.preload = value; return; } return this.techGet_("preload"); } autoplay(value) { if (value === void 0) { return this.options_.autoplay || false; } let techAutoplay; if (typeof value === "string" && /(any|play|muted)/.test(value) || value === true && this.options_.normalizeAutoplay) { this.options_.autoplay = value; this.manualAutoplay_(typeof value === "string" ? value : "play"); techAutoplay = false; } else if (!value) { this.options_.autoplay = false; } else { this.options_.autoplay = true; } techAutoplay = typeof techAutoplay === "undefined" ? this.options_.autoplay : techAutoplay; if (this.tech_) { this.techCall_("setAutoplay", techAutoplay); } } playsinline(value) { if (value !== void 0) { this.techCall_("setPlaysinline", value); this.options_.playsinline = value; return this; } return this.techGet_("playsinline"); } loop(value) { if (value !== void 0) { this.techCall_("setLoop", value); this.options_.loop = value; return; } return this.techGet_("loop"); } poster(src) { if (src === void 0) { return this.poster_; } if (!src) { src = ""; } if (src === this.poster_) { return; } this.poster_ = src; this.techCall_("setPoster", src); this.isPosterFromTech_ = false; this.trigger("posterchange"); } handleTechPosterChange_() { if ((!this.poster_ || this.options_.techCanOverridePoster) && this.tech_ && this.tech_.poster) { const newPoster = this.tech_.poster() || ""; if (newPoster !== this.poster_) { this.poster_ = newPoster; this.isPosterFromTech_ = true; this.trigger("posterchange"); } } } controls(bool) { if (bool === void 0) { return !!this.controls_; } bool = !!bool; if (this.controls_ === bool) { return; } this.controls_ = bool; if (this.usingNativeControls()) { this.techCall_("setControls", bool); } if (this.controls_) { this.removeClass("vjs-controls-disabled"); this.addClass("vjs-controls-enabled"); this.trigger("controlsenabled"); if (!this.usingNativeControls()) { this.addTechControlsListeners_(); } } else { this.removeClass("vjs-controls-enabled"); this.addClass("vjs-controls-disabled"); this.trigger("controlsdisabled"); if (!this.usingNativeControls()) { this.removeTechControlsListeners_(); } } } usingNativeControls(bool) { if (bool === void 0) { return !!this.usingNativeControls_; } bool = !!bool; if (this.usingNativeControls_ === bool) { return; } this.usingNativeControls_ = bool; if (this.usingNativeControls_) { this.addClass("vjs-using-native-controls"); this.trigger("usingnativecontrols"); } else { this.removeClass("vjs-using-native-controls"); this.trigger("usingcustomcontrols"); } } error(err) { if (err === void 0) { return this.error_ || null; } hooks$1("beforeerror").forEach((hookFunction) => { const newErr = hookFunction(this, err); if (!(isObject$2(newErr) && !Array.isArray(newErr) || typeof newErr === "string" || typeof newErr === "number" || newErr === null)) { this.log.error("please return a value that MediaError expects in beforeerror hooks"); return; } err = newErr; }); if (this.options_.suppressNotSupportedError && err && err.code === 4) { const triggerSuppressedError = function() { this.error(err); }; this.options_.suppressNotSupportedError = false; this.any(["click", "touchstart"], triggerSuppressedError); this.one("loadstart", function() { this.off(["click", "touchstart"], triggerSuppressedError); }); return; } if (err === null) { this.error_ = err; this.removeClass("vjs-error"); if (this.errorDisplay) { this.errorDisplay.close(); } return; } this.error_ = new MediaError$1(err); this.addClass("vjs-error"); log$1$1.error(`(CODE:${this.error_.code} ${MediaError$1.errorTypes[this.error_.code]})`, this.error_.message, this.error_); this.trigger("error"); hooks$1("error").forEach((hookFunction) => hookFunction(this, this.error_)); return; } reportUserActivity(event2) { this.userActivity_ = true; } userActive(bool) { if (bool === void 0) { return this.userActive_; } bool = !!bool; if (bool === this.userActive_) { return; } this.userActive_ = bool; if (this.userActive_) { this.userActivity_ = true; this.removeClass("vjs-user-inactive"); this.addClass("vjs-user-active"); this.trigger("useractive"); return; } if (this.tech_) { this.tech_.one("mousemove", function(e) { e.stopPropagation(); e.preventDefault(); }); } this.userActivity_ = false; this.removeClass("vjs-user-active"); this.addClass("vjs-user-inactive"); this.trigger("userinactive"); } listenForUserActivity_() { let mouseInProgress; let lastMoveX; let lastMoveY; const handleActivity = bind_(this, this.reportUserActivity); const handleMouseMove = function(e) { if (e.screenX !== lastMoveX || e.screenY !== lastMoveY) { lastMoveX = e.screenX; lastMoveY = e.screenY; handleActivity(); } }; const handleMouseDown = function() { handleActivity(); this.clearInterval(mouseInProgress); mouseInProgress = this.setInterval(handleActivity, 250); }; const handleMouseUpAndMouseLeave = function(event2) { handleActivity(); this.clearInterval(mouseInProgress); }; this.on("mousedown", handleMouseDown); this.on("mousemove", handleMouseMove); this.on("mouseup", handleMouseUpAndMouseLeave); this.on("mouseleave", handleMouseUpAndMouseLeave); const controlBar = this.getChild("controlBar"); if (controlBar && !IS_IOS$1 && !IS_ANDROID$1) { controlBar.on("mouseenter", function(event2) { if (this.player().options_.inactivityTimeout !== 0) { this.player().cache_.inactivityTimeout = this.player().options_.inactivityTimeout; } this.player().options_.inactivityTimeout = 0; }); controlBar.on("mouseleave", function(event2) { this.player().options_.inactivityTimeout = this.player().cache_.inactivityTimeout; }); } this.on("keydown", handleActivity); this.on("keyup", handleActivity); let inactivityTimeout; this.setInterval(function() { if (!this.userActivity_) { return; } this.userActivity_ = false; this.userActive(true); this.clearTimeout(inactivityTimeout); const timeout = this.options_.inactivityTimeout; if (timeout <= 0) { return; } inactivityTimeout = this.setTimeout(function() { if (!this.userActivity_) { this.userActive(false); } }, timeout); }, 250); } playbackRate(rate) { if (rate !== void 0) { this.techCall_("setPlaybackRate", rate); return; } if (this.tech_ && this.tech_.featuresPlaybackRate) { return this.cache_.lastPlaybackRate || this.techGet_("playbackRate"); } return 1; } defaultPlaybackRate(rate) { if (rate !== void 0) { return this.techCall_("setDefaultPlaybackRate", rate); } if (this.tech_ && this.tech_.featuresPlaybackRate) { return this.techGet_("defaultPlaybackRate"); } return 1; } isAudio(bool) { if (bool !== void 0) { this.isAudio_ = !!bool; return; } return !!this.isAudio_; } enableAudioOnlyUI_() { this.addClass("vjs-audio-only-mode"); const playerChildren = this.children(); const controlBar = this.getChild("ControlBar"); const controlBarHeight = controlBar && controlBar.currentHeight(); playerChildren.forEach((child) => { if (child === controlBar) { return; } if (child.el_ && !child.hasClass("vjs-hidden")) { child.hide(); this.audioOnlyCache_.hiddenChildren.push(child); } }); this.audioOnlyCache_.playerHeight = this.currentHeight(); this.height(controlBarHeight); this.trigger("audioonlymodechange"); } disableAudioOnlyUI_() { this.removeClass("vjs-audio-only-mode"); this.audioOnlyCache_.hiddenChildren.forEach((child) => child.show()); this.height(this.audioOnlyCache_.playerHeight); this.trigger("audioonlymodechange"); } audioOnlyMode(value) { if (typeof value !== "boolean" || value === this.audioOnlyMode_) { return this.audioOnlyMode_; } this.audioOnlyMode_ = value; if (value) { const exitPromises = []; if (this.isInPictureInPicture()) { exitPromises.push(this.exitPictureInPicture()); } if (this.isFullscreen()) { exitPromises.push(this.exitFullscreen()); } if (this.audioPosterMode()) { exitPromises.push(this.audioPosterMode(false)); } return Promise.all(exitPromises).then(() => this.enableAudioOnlyUI_()); } return Promise.resolve().then(() => this.disableAudioOnlyUI_()); } enablePosterModeUI_() { const tech = this.tech_ && this.tech_; tech.hide(); this.addClass("vjs-audio-poster-mode"); this.trigger("audiopostermodechange"); } disablePosterModeUI_() { const tech = this.tech_ && this.tech_; tech.show(); this.removeClass("vjs-audio-poster-mode"); this.trigger("audiopostermodechange"); } audioPosterMode(value) { if (typeof value !== "boolean" || value === this.audioPosterMode_) { return this.audioPosterMode_; } this.audioPosterMode_ = value; if (value) { if (this.audioOnlyMode()) { const audioOnlyModePromise = this.audioOnlyMode(false); return audioOnlyModePromise.then(() => { this.enablePosterModeUI_(); }); } return Promise.resolve().then(() => { this.enablePosterModeUI_(); }); } return Promise.resolve().then(() => { this.disablePosterModeUI_(); }); } addTextTrack(kind, label2, language) { if (this.tech_) { return this.tech_.addTextTrack(kind, label2, language); } } addRemoteTextTrack(options2, manualCleanup) { if (this.tech_) { return this.tech_.addRemoteTextTrack(options2, manualCleanup); } } removeRemoteTextTrack(obj = {}) { let { track } = obj; if (!track) { track = obj; } if (this.tech_) { return this.tech_.removeRemoteTextTrack(track); } } getVideoPlaybackQuality() { return this.techGet_("getVideoPlaybackQuality"); } videoWidth() { return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0; } videoHeight() { return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0; } language(code) { if (code === void 0) { return this.language_; } if (this.language_ !== String(code).toLowerCase()) { this.language_ = String(code).toLowerCase(); if (isEvented$1(this)) { this.trigger("languagechange"); } } } languages() { return merge$1(Player$1.prototype.options_.languages, this.languages_); } toJSON() { const options2 = merge$1(this.options_); const tracks = options2.tracks; options2.tracks = []; for (let i2 = 0; i2 < tracks.length; i2++) { let track = tracks[i2]; track = merge$1(track); track.player = void 0; options2.tracks[i2] = track; } return options2; } createModal(content, options2) { options2 = options2 || {}; options2.content = content || ""; const modal = new ModalDialog$1(this, options2); this.addChild(modal); modal.on("dispose", () => { this.removeChild(modal); }); modal.open(); return modal; } updateCurrentBreakpoint_() { if (!this.responsive()) { return; } const currentBreakpoint = this.currentBreakpoint(); const currentWidth = this.currentWidth(); for (let i2 = 0; i2 < BREAKPOINT_ORDER$1.length; i2++) { const candidateBreakpoint = BREAKPOINT_ORDER$1[i2]; const maxWidth = this.breakpoints_[candidateBreakpoint]; if (currentWidth <= maxWidth) { if (currentBreakpoint === candidateBreakpoint) { return; } if (currentBreakpoint) { this.removeClass(BREAKPOINT_CLASSES$1[currentBreakpoint]); } this.addClass(BREAKPOINT_CLASSES$1[candidateBreakpoint]); this.breakpoint_ = candidateBreakpoint; break; } } } removeCurrentBreakpoint_() { const className = this.currentBreakpointClass(); this.breakpoint_ = ""; if (className) { this.removeClass(className); } } breakpoints(breakpoints) { if (breakpoints === void 0) { return Object.assign(this.breakpoints_); } this.breakpoint_ = ""; this.breakpoints_ = Object.assign({}, DEFAULT_BREAKPOINTS$1, breakpoints); this.updateCurrentBreakpoint_(); return Object.assign(this.breakpoints_); } responsive(value) { if (value === void 0) { return this.responsive_; } value = Boolean(value); const current = this.responsive_; if (value === current) { return; } this.responsive_ = value; if (value) { this.on("playerresize", this.boundUpdateCurrentBreakpoint_); this.updateCurrentBreakpoint_(); } else { this.off("playerresize", this.boundUpdateCurrentBreakpoint_); this.removeCurrentBreakpoint_(); } return value; } currentBreakpoint() { return this.breakpoint_; } currentBreakpointClass() { return BREAKPOINT_CLASSES$1[this.breakpoint_] || ""; } loadMedia(media, ready) { if (!media || typeof media !== "object") { return; } this.reset(); this.cache_.media = merge$1(media); const { artist, artwork, description, poster, src, textTracks, title } = this.cache_.media; if (!artwork && poster) { this.cache_.media.artwork = [{ src: poster, type: getMimetype$1(poster) }]; } if (src) { this.src(src); } if (poster) { this.poster(poster); } if (Array.isArray(textTracks)) { textTracks.forEach((tt2) => this.addRemoteTextTrack(tt2, false)); } if (this.titleBar) { this.titleBar.update({ title, description: description || artist || "" }); } this.ready(ready); } getMedia() { if (!this.cache_.media) { const poster = this.poster(); const src = this.currentSources(); const textTracks = Array.prototype.map.call(this.remoteTextTracks(), (tt2) => ({ kind: tt2.kind, label: tt2.label, language: tt2.language, src: tt2.src })); const media = { src, textTracks }; if (poster) { media.poster = poster; media.artwork = [{ src: media.poster, type: getMimetype$1(media.poster) }]; } return media; } return merge$1(this.cache_.media); } static getTagSettings(tag) { const baseOptions = { sources: [], tracks: [] }; const tagOptions = getAttributes$1(tag); const dataSetup = tagOptions["data-setup"]; if (hasClass$1(tag, "vjs-fill")) { tagOptions.fill = true; } if (hasClass$1(tag, "vjs-fluid")) { tagOptions.fluid = true; } if (dataSetup !== null) { const [err, data] = tuple(dataSetup || "{}"); if (err) { log$1$1.error(err); } Object.assign(tagOptions, data); } Object.assign(baseOptions, tagOptions); if (tag.hasChildNodes()) { const children = tag.childNodes; for (let i2 = 0, j = children.length; i2 < j; i2++) { const child = children[i2]; const childName = child.nodeName.toLowerCase(); if (childName === "source") { baseOptions.sources.push(getAttributes$1(child)); } else if (childName === "track") { baseOptions.tracks.push(getAttributes$1(child)); } } } return baseOptions; } debug(enabled) { if (enabled === void 0) { return this.debugEnabled_; } if (enabled) { this.trigger("debugon"); this.previousLogLevel_ = this.log.level; this.log.level("debug"); this.debugEnabled_ = true; } else { this.trigger("debugoff"); this.log.level(this.previousLogLevel_); this.previousLogLevel_ = void 0; this.debugEnabled_ = false; } } playbackRates(newRates) { if (newRates === void 0) { return this.cache_.playbackRates; } if (!Array.isArray(newRates)) { return; } if (!newRates.every((rate) => typeof rate === "number")) { return; } this.cache_.playbackRates = newRates; this.trigger("playbackrateschange"); } } ALL$1.names.forEach(function(name) { const props = ALL$1[name]; Player$1.prototype[props.getterName] = function() { if (this.tech_) { return this.tech_[props.getterName](); } this[props.privateName] = this[props.privateName] || new props.ListClass(); return this[props.privateName]; }; }); Player$1.prototype.crossorigin = Player$1.prototype.crossOrigin; Player$1.players = {}; const navigator$3 = window_1.navigator; Player$1.prototype.options_ = { techOrder: Tech$2.defaultTechOrder_, html5: {}, enableSourceset: true, inactivityTimeout: 2e3, playbackRates: [], liveui: false, children: ["mediaLoader", "posterImage", "titleBar", "textTrackDisplay", "loadingSpinner", "bigPlayButton", "liveTracker", "controlBar", "errorDisplay", "textTrackSettings", "resizeManager"], language: navigator$3 && (navigator$3.languages && navigator$3.languages[0] || navigator$3.userLanguage || navigator$3.language) || "en", languages: {}, notSupportedMessage: "No compatible source was found for this media.", normalizeAutoplay: false, fullscreen: { options: { navigationUI: "hide" } }, breakpoints: {}, responsive: false, audioOnlyMode: false, audioPosterMode: false }; [ "ended", "seeking", "seekable", "networkState", "readyState" ].forEach(function(fn2) { Player$1.prototype[fn2] = function() { return this.techGet_(fn2); }; }); TECH_EVENTS_RETRIGGER$1.forEach(function(event2) { Player$1.prototype[`handleTech${toTitleCase$1$1(event2)}_`] = function() { return this.trigger(event2); }; }); Component$1$1.registerComponent("Player", Player$1); const BASE_PLUGIN_NAME$1 = "plugin"; const PLUGIN_CACHE_KEY$1 = "activePlugins_"; const pluginStorage$1 = {}; const pluginExists$1 = (name) => pluginStorage$1.hasOwnProperty(name); const getPlugin$1 = (name) => pluginExists$1(name) ? pluginStorage$1[name] : void 0; const markPluginAsActive$1 = (player, name) => { player[PLUGIN_CACHE_KEY$1] = player[PLUGIN_CACHE_KEY$1] || {}; player[PLUGIN_CACHE_KEY$1][name] = true; }; const triggerSetupEvent$1 = (player, hash, before) => { const eventName = (before ? "before" : "") + "pluginsetup"; player.trigger(eventName, hash); player.trigger(eventName + ":" + hash.name, hash); }; const createBasicPlugin$1 = function(name, plugin) { const basicPluginWrapper = function() { triggerSetupEvent$1(this, { name, plugin, instance: null }, true); const instance = plugin.apply(this, arguments); markPluginAsActive$1(this, name); triggerSetupEvent$1(this, { name, plugin, instance }); return instance; }; Object.keys(plugin).forEach(function(prop) { basicPluginWrapper[prop] = plugin[prop]; }); return basicPluginWrapper; }; const createPluginFactory$1 = (name, PluginSubClass) => { PluginSubClass.prototype.name = name; return function(...args) { triggerSetupEvent$1(this, { name, plugin: PluginSubClass, instance: null }, true); const instance = new PluginSubClass(...[this, ...args]); this[name] = () => instance; triggerSetupEvent$1(this, instance.getEventHash()); return instance; }; }; class Plugin$1 { constructor(player) { if (this.constructor === Plugin$1) { throw new Error("Plugin must be sub-classed; not directly instantiated."); } this.player = player; if (!this.log) { this.log = this.player.log.createLogger(this.name); } evented$1(this); delete this.trigger; stateful$1(this, this.constructor.defaultState); markPluginAsActive$1(player, this.name); this.dispose = this.dispose.bind(this); player.on("dispose", this.dispose); } version() { return this.constructor.VERSION; } getEventHash(hash = {}) { hash.name = this.name; hash.plugin = this.constructor; hash.instance = this; return hash; } trigger(event2, hash = {}) { return trigger$1(this.eventBusEl_, event2, this.getEventHash(hash)); } handleStateChanged(e) { } dispose() { const { name, player } = this; this.trigger("dispose"); this.off(); player.off("dispose", this.dispose); player[PLUGIN_CACHE_KEY$1][name] = false; this.player = this.state = null; player[name] = createPluginFactory$1(name, pluginStorage$1[name]); } static isBasic(plugin) { const p = typeof plugin === "string" ? getPlugin$1(plugin) : plugin; return typeof p === "function" && !Plugin$1.prototype.isPrototypeOf(p.prototype); } static registerPlugin(name, plugin) { if (typeof name !== "string") { throw new Error(`Illegal plugin name, "${name}", must be a string, was ${typeof name}.`); } if (pluginExists$1(name)) { log$1$1.warn(`A plugin named "${name}" already exists. You may want to avoid re-registering plugins!`); } else if (Player$1.prototype.hasOwnProperty(name)) { throw new Error(`Illegal plugin name, "${name}", cannot share a name with an existing player method!`); } if (typeof plugin !== "function") { throw new Error(`Illegal plugin for "${name}", must be a function, was ${typeof plugin}.`); } pluginStorage$1[name] = plugin; if (name !== BASE_PLUGIN_NAME$1) { if (Plugin$1.isBasic(plugin)) { Player$1.prototype[name] = createBasicPlugin$1(name, plugin); } else { Player$1.prototype[name] = createPluginFactory$1(name, plugin); } } return plugin; } static deregisterPlugin(name) { if (name === BASE_PLUGIN_NAME$1) { throw new Error("Cannot de-register base plugin."); } if (pluginExists$1(name)) { delete pluginStorage$1[name]; delete Player$1.prototype[name]; } } static getPlugins(names2 = Object.keys(pluginStorage$1)) { let result; names2.forEach((name) => { const plugin = getPlugin$1(name); if (plugin) { result = result || {}; result[name] = plugin; } }); return result; } static getPluginVersion(name) { const plugin = getPlugin$1(name); return plugin && plugin.VERSION || ""; } } Plugin$1.getPlugin = getPlugin$1; Plugin$1.BASE_PLUGIN_NAME = BASE_PLUGIN_NAME$1; Plugin$1.registerPlugin(BASE_PLUGIN_NAME$1, Plugin$1); Player$1.prototype.usingPlugin = function(name) { return !!this[PLUGIN_CACHE_KEY$1] && this[PLUGIN_CACHE_KEY$1][name] === true; }; Player$1.prototype.hasPlugin = function(name) { return !!pluginExists$1(name); }; function deprecate(message, fn2) { let warned = false; return function(...args) { if (!warned) { log$1$1.warn(message); } warned = true; return fn2.apply(this, args); }; } function deprecateForMajor(major, oldName, newName, fn2) { return deprecate(`${oldName} is deprecated and will be removed in ${major}.0; please use ${newName} instead.`, fn2); } const normalizeId$1 = (id) => id.indexOf("#") === 0 ? id.slice(1) : id; function videojs$2(id, options2, ready) { let player = videojs$2.getPlayer(id); if (player) { if (options2) { log$1$1.warn(`Player "${id}" is already initialised. Options will not be applied.`); } if (ready) { player.ready(ready); } return player; } const el = typeof id === "string" ? $$1("#" + normalizeId$1(id)) : id; if (!isEl$1(el)) { throw new TypeError("The element or ID supplied is not valid. (videojs)"); } if (!el.ownerDocument.defaultView || !el.ownerDocument.body.contains(el)) { log$1$1.warn("The element supplied is not included in the DOM"); } options2 = options2 || {}; if (options2.restoreEl === true) { options2.restoreEl = (el.parentNode && el.parentNode.hasAttribute("data-vjs-player") ? el.parentNode : el).cloneNode(true); } hooks$1("beforesetup").forEach((hookFunction) => { const opts = hookFunction(el, merge$1(options2)); if (!isObject$2(opts) || Array.isArray(opts)) { log$1$1.error("please return an object in beforesetup hooks"); return; } options2 = merge$1(options2, opts); }); const PlayerComponent = Component$1$1.getComponent("Player"); player = new PlayerComponent(el, options2, ready); hooks$1("setup").forEach((hookFunction) => hookFunction(player)); return player; } videojs$2.hooks_ = hooks_$1; videojs$2.hooks = hooks$1; videojs$2.hook = hook$1; videojs$2.hookOnce = hookOnce$1; videojs$2.removeHook = removeHook$1; if (window_1.VIDEOJS_NO_DYNAMIC_STYLE !== true && isReal$1()) { let style = $$1(".vjs-styles-defaults"); if (!style) { style = createStyleElement$1("vjs-styles-defaults"); const head = $$1("head"); if (head) { head.insertBefore(style, head.firstChild); } setTextContent$1(style, ` .video-js { width: 300px; height: 150px; } .vjs-fluid:not(.vjs-audio-only-mode) { padding-top: 56.25% } `); } } autoSetupTimeout$1(1, videojs$2); videojs$2.VERSION = version$6$1; videojs$2.options = Player$1.prototype.options_; videojs$2.getPlayers = () => Player$1.players; videojs$2.getPlayer = (id) => { const players = Player$1.players; let tag; if (typeof id === "string") { const nId = normalizeId$1(id); const player = players[nId]; if (player) { return player; } tag = $$1("#" + nId); } else { tag = id; } if (isEl$1(tag)) { const { player, playerId } = tag; if (player || players[playerId]) { return player || players[playerId]; } } }; videojs$2.getAllPlayers = () => Object.keys(Player$1.players).map((k) => Player$1.players[k]).filter(Boolean); videojs$2.players = Player$1.players; videojs$2.getComponent = Component$1$1.getComponent; videojs$2.registerComponent = (name, comp) => { if (Tech$2.isTech(comp)) { log$1$1.warn(`The ${name} tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)`); } Component$1$1.registerComponent.call(Component$1$1, name, comp); }; videojs$2.getTech = Tech$2.getTech; videojs$2.registerTech = Tech$2.registerTech; videojs$2.use = use$1; Object.defineProperty(videojs$2, "middleware", { value: {}, writeable: false, enumerable: true }); Object.defineProperty(videojs$2.middleware, "TERMINATOR", { value: TERMINATOR$1, writeable: false, enumerable: true }); videojs$2.browser = browser$1; videojs$2.obj = Obj; videojs$2.mergeOptions = deprecateForMajor(9, "videojs.mergeOptions", "videojs.obj.merge", merge$1); videojs$2.defineLazyProperty = deprecateForMajor(9, "videojs.defineLazyProperty", "videojs.obj.defineLazyProperty", defineLazyProperty$1); videojs$2.bind = deprecateForMajor(9, "videojs.bind", "native Function.prototype.bind", bind_); videojs$2.registerPlugin = Plugin$1.registerPlugin; videojs$2.deregisterPlugin = Plugin$1.deregisterPlugin; videojs$2.plugin = (name, plugin) => { log$1$1.warn("videojs.plugin() is deprecated; use videojs.registerPlugin() instead"); return Plugin$1.registerPlugin(name, plugin); }; videojs$2.getPlugins = Plugin$1.getPlugins; videojs$2.getPlugin = Plugin$1.getPlugin; videojs$2.getPluginVersion = Plugin$1.getPluginVersion; videojs$2.addLanguage = function(code, data) { code = ("" + code).toLowerCase(); videojs$2.options.languages = merge$1(videojs$2.options.languages, { [code]: data }); return videojs$2.options.languages[code]; }; videojs$2.log = log$1$1; videojs$2.createLogger = createLogger$2; videojs$2.time = Time; videojs$2.createTimeRange = deprecateForMajor(9, "videojs.createTimeRange", "videojs.time.createTimeRanges", createTimeRanges$1); videojs$2.createTimeRanges = deprecateForMajor(9, "videojs.createTimeRanges", "videojs.time.createTimeRanges", createTimeRanges$1); videojs$2.formatTime = deprecateForMajor(9, "videojs.formatTime", "videojs.time.formatTime", formatTime$1); videojs$2.setFormatTime = deprecateForMajor(9, "videojs.setFormatTime", "videojs.time.setFormatTime", setFormatTime$1); videojs$2.resetFormatTime = deprecateForMajor(9, "videojs.resetFormatTime", "videojs.time.resetFormatTime", resetFormatTime$1); videojs$2.parseUrl = deprecateForMajor(9, "videojs.parseUrl", "videojs.url.parseUrl", parseUrl$1); videojs$2.isCrossOrigin = deprecateForMajor(9, "videojs.isCrossOrigin", "videojs.url.isCrossOrigin", isCrossOrigin$1); videojs$2.EventTarget = EventTarget$2$1; videojs$2.any = any$1; videojs$2.on = on$1; videojs$2.one = one$1; videojs$2.off = off$1; videojs$2.trigger = trigger$1; videojs$2.xhr = XHR; videojs$2.TextTrack = TextTrack$1; videojs$2.AudioTrack = AudioTrack$1; videojs$2.VideoTrack = VideoTrack$1; ["isEl", "isTextNode", "createEl", "hasClass", "addClass", "removeClass", "toggleClass", "setAttributes", "getAttributes", "emptyEl", "appendContent", "insertContent"].forEach((k) => { videojs$2[k] = function() { log$1$1.warn(`videojs.${k}() is deprecated; use videojs.dom.${k}() instead`); return Dom$2[k].apply(null, arguments); }; }); videojs$2.computedStyle = deprecateForMajor(9, "videojs.computedStyle", "videojs.dom.computedStyle", computedStyle$1); videojs$2.dom = Dom$2; videojs$2.fn = Fn; videojs$2.num = Num; videojs$2.str = Str; videojs$2.url = Url$2; /*! @name videojs-contrib-quality-levels @version 3.0.0 @license Apache-2.0 */ class QualityLevel { constructor(representation) { let level = this; level.id = representation.id; level.label = level.id; level.width = representation.width; level.height = representation.height; level.bitrate = representation.bandwidth; level.frameRate = representation.frameRate; level.enabled_ = representation.enabled; Object.defineProperty(level, "enabled", { get() { return level.enabled_(); }, set(enable) { level.enabled_(enable); } }); return level; } } class QualityLevelList extends videojs$2.EventTarget { constructor() { super(); let list = this; list.levels_ = []; list.selectedIndex_ = -1; Object.defineProperty(list, "selectedIndex", { get() { return list.selectedIndex_; } }); Object.defineProperty(list, "length", { get() { return list.levels_.length; } }); return list; } addQualityLevel(representation) { let qualityLevel = this.getQualityLevelById(representation.id); if (qualityLevel) { return qualityLevel; } const index2 = this.levels_.length; qualityLevel = new QualityLevel(representation); if (!("" + index2 in this)) { Object.defineProperty(this, index2, { get() { return this.levels_[index2]; } }); } this.levels_.push(qualityLevel); this.trigger({ qualityLevel, type: "addqualitylevel" }); return qualityLevel; } removeQualityLevel(qualityLevel) { let removed = null; for (let i2 = 0, l = this.length; i2 < l; i2++) { if (this[i2] === qualityLevel) { removed = this.levels_.splice(i2, 1)[0]; if (this.selectedIndex_ === i2) { this.selectedIndex_ = -1; } else if (this.selectedIndex_ > i2) { this.selectedIndex_--; } break; } } if (removed) { this.trigger({ qualityLevel, type: "removequalitylevel" }); } return removed; } getQualityLevelById(id) { for (let i2 = 0, l = this.length; i2 < l; i2++) { const level = this[i2]; if (level.id === id) { return level; } } return null; } dispose() { this.selectedIndex_ = -1; this.levels_.length = 0; } } QualityLevelList.prototype.allowedEvents_ = { change: "change", addqualitylevel: "addqualitylevel", removequalitylevel: "removequalitylevel" }; for (const event2 in QualityLevelList.prototype.allowedEvents_) { QualityLevelList.prototype["on" + event2] = null; } var version$5$1 = "3.0.0"; const registerPlugin$1 = videojs$2.registerPlugin || videojs$2.plugin; const initPlugin$1 = function(player, options2) { const originalPluginFn = player.qualityLevels; const qualityLevelList = new QualityLevelList(); const disposeHandler = function() { qualityLevelList.dispose(); player.qualityLevels = originalPluginFn; player.off("dispose", disposeHandler); }; player.on("dispose", disposeHandler); player.qualityLevels = () => qualityLevelList; player.qualityLevels.VERSION = version$5$1; return qualityLevelList; }; const qualityLevels = function(options2) { return initPlugin$1(this, videojs$2.mergeOptions({}, options2)); }; registerPlugin$1("qualityLevels", qualityLevels); qualityLevels.VERSION = version$5$1; /*! @name @videojs/http-streaming @version 3.0.2 @license Apache-2.0 */ const resolveUrl$2 = resolveUrl$4; const resolveManifestRedirect$1 = (url, req) => { if (req && req.responseURL && url !== req.responseURL) { return req.responseURL; } return url; }; const logger$1 = (source) => { if (videojs$2.log.debug) { return videojs$2.log.debug.bind(videojs$2, "VHS:", `${source} >`); } return function() { }; }; function merge$2(...args) { const context = videojs$2.obj || videojs$2; const fn2 = context.merge || context.mergeOptions; return fn2.apply(context, args); } function createTimeRanges$2(...args) { const context = videojs$2.time || videojs$2; const fn2 = context.createTimeRanges || context.createTimeRanges; return fn2.apply(context, args); } const TIME_FUDGE_FACTOR$1 = 1 / 30; const SAFE_TIME_DELTA$1 = TIME_FUDGE_FACTOR$1 * 3; const filterRanges$1 = function(timeRanges, predicate) { const results = []; let i2; if (timeRanges && timeRanges.length) { for (i2 = 0; i2 < timeRanges.length; i2++) { if (predicate(timeRanges.start(i2), timeRanges.end(i2))) { results.push([timeRanges.start(i2), timeRanges.end(i2)]); } } } return createTimeRanges$2(results); }; const findRange$1 = function(buffered, time) { return filterRanges$1(buffered, function(start2, end) { return start2 - SAFE_TIME_DELTA$1 <= time && end + SAFE_TIME_DELTA$1 >= time; }); }; const findNextRange$1 = function(timeRanges, time) { return filterRanges$1(timeRanges, function(start2) { return start2 - TIME_FUDGE_FACTOR$1 >= time; }); }; const findGaps$1 = function(buffered) { if (buffered.length < 2) { return createTimeRanges$2(); } const ranges = []; for (let i2 = 1; i2 < buffered.length; i2++) { const start2 = buffered.end(i2 - 1); const end = buffered.start(i2); ranges.push([start2, end]); } return createTimeRanges$2(ranges); }; const bufferIntersection$1 = function(bufferA, bufferB) { let start2 = null; let end = null; let arity = 0; const extents = []; const ranges = []; if (!bufferA || !bufferA.length || !bufferB || !bufferB.length) { return createTimeRanges$2(); } let count = bufferA.length; while (count--) { extents.push({ time: bufferA.start(count), type: "start" }); extents.push({ time: bufferA.end(count), type: "end" }); } count = bufferB.length; while (count--) { extents.push({ time: bufferB.start(count), type: "start" }); extents.push({ time: bufferB.end(count), type: "end" }); } extents.sort(function(a, b) { return a.time - b.time; }); for (count = 0; count < extents.length; count++) { if (extents[count].type === "start") { arity++; if (arity === 2) { start2 = extents[count].time; } } else if (extents[count].type === "end") { arity--; if (arity === 1) { end = extents[count].time; } } if (start2 !== null && end !== null) { ranges.push([start2, end]); start2 = null; end = null; } } return createTimeRanges$2(ranges); }; const printableRange$1 = (range3) => { const strArr = []; if (!range3 || !range3.length) { return ""; } for (let i2 = 0; i2 < range3.length; i2++) { strArr.push(range3.start(i2) + " => " + range3.end(i2)); } return strArr.join(", "); }; const timeUntilRebuffer$1 = function(buffered, currentTime, playbackRate = 1) { const bufferedEnd = buffered.length ? buffered.end(buffered.length - 1) : 0; return (bufferedEnd - currentTime) / playbackRate; }; const timeRangesToArray$1 = (timeRanges) => { const timeRangesList = []; for (let i2 = 0; i2 < timeRanges.length; i2++) { timeRangesList.push({ start: timeRanges.start(i2), end: timeRanges.end(i2) }); } return timeRangesList; }; const isRangeDifferent$1 = function(a, b) { if (a === b) { return false; } if (!a && b || !b && a) { return true; } if (a.length !== b.length) { return true; } for (let i2 = 0; i2 < a.length; i2++) { if (a.start(i2) !== b.start(i2) || a.end(i2) !== b.end(i2)) { return true; } } return false; }; const lastBufferedEnd$1 = function(a) { if (!a || !a.length || !a.end) { return; } return a.end(a.length - 1); }; const timeAheadOf$1 = function(range3, startTime) { let time = 0; if (!range3 || !range3.length) { return time; } for (let i2 = 0; i2 < range3.length; i2++) { const start2 = range3.start(i2); const end = range3.end(i2); if (startTime > end) { continue; } if (startTime > start2 && startTime <= end) { time += end - startTime; continue; } time += end - start2; } return time; }; const segmentDurationWithParts$1 = (playlist, segment) => { if (!segment.preload) { return segment.duration; } let result = 0; (segment.parts || []).forEach(function(p) { result += p.duration; }); (segment.preloadHints || []).forEach(function(p) { if (p.type === "PART") { result += playlist.partTargetDuration; } }); return result; }; const getPartsAndSegments$1 = (playlist) => (playlist.segments || []).reduce((acc, segment, si) => { if (segment.parts) { segment.parts.forEach(function(part, pi) { acc.push({ duration: part.duration, segmentIndex: si, partIndex: pi, part, segment }); }); } else { acc.push({ duration: segment.duration, segmentIndex: si, partIndex: null, segment, part: null }); } return acc; }, []); const getLastParts$1 = (media) => { const lastSegment = media.segments && media.segments.length && media.segments[media.segments.length - 1]; return lastSegment && lastSegment.parts || []; }; const getKnownPartCount$1 = ({ preloadSegment }) => { if (!preloadSegment) { return; } const { parts, preloadHints } = preloadSegment; let partCount = (preloadHints || []).reduce((count, hint) => count + (hint.type === "PART" ? 1 : 0), 0); partCount += parts && parts.length ? parts.length : 0; return partCount; }; const liveEdgeDelay$1 = (main, media) => { if (media.endList) { return 0; } if (main && main.suggestedPresentationDelay) { return main.suggestedPresentationDelay; } const hasParts = getLastParts$1(media).length > 0; if (hasParts && media.serverControl && media.serverControl.partHoldBack) { return media.serverControl.partHoldBack; } else if (hasParts && media.partTargetDuration) { return media.partTargetDuration * 3; } else if (media.serverControl && media.serverControl.holdBack) { return media.serverControl.holdBack; } else if (media.targetDuration) { return media.targetDuration * 3; } return 0; }; const backwardDuration$1 = function(playlist, endSequence) { let result = 0; let i2 = endSequence - playlist.mediaSequence; let segment = playlist.segments[i2]; if (segment) { if (typeof segment.start !== "undefined") { return { result: segment.start, precise: true }; } if (typeof segment.end !== "undefined") { return { result: segment.end - segment.duration, precise: true }; } } while (i2--) { segment = playlist.segments[i2]; if (typeof segment.end !== "undefined") { return { result: result + segment.end, precise: true }; } result += segmentDurationWithParts$1(playlist, segment); if (typeof segment.start !== "undefined") { return { result: result + segment.start, precise: true }; } } return { result, precise: false }; }; const forwardDuration$1 = function(playlist, endSequence) { let result = 0; let segment; let i2 = endSequence - playlist.mediaSequence; for (; i2 < playlist.segments.length; i2++) { segment = playlist.segments[i2]; if (typeof segment.start !== "undefined") { return { result: segment.start - result, precise: true }; } result += segmentDurationWithParts$1(playlist, segment); if (typeof segment.end !== "undefined") { return { result: segment.end - result, precise: true }; } } return { result: -1, precise: false }; }; const intervalDuration$1 = function(playlist, endSequence, expired) { if (typeof endSequence === "undefined") { endSequence = playlist.mediaSequence + playlist.segments.length; } if (endSequence < playlist.mediaSequence) { return 0; } const backward = backwardDuration$1(playlist, endSequence); if (backward.precise) { return backward.result; } const forward = forwardDuration$1(playlist, endSequence); if (forward.precise) { return forward.result; } return backward.result + expired; }; const duration$1 = function(playlist, endSequence, expired) { if (!playlist) { return 0; } if (typeof expired !== "number") { expired = 0; } if (typeof endSequence === "undefined") { if (playlist.totalDuration) { return playlist.totalDuration; } if (!playlist.endList) { return window_1.Infinity; } } return intervalDuration$1(playlist, endSequence, expired); }; const sumDurations$1 = function({ defaultDuration, durationList, startIndex, endIndex }) { let durations = 0; if (startIndex > endIndex) { [startIndex, endIndex] = [endIndex, startIndex]; } if (startIndex < 0) { for (let i2 = startIndex; i2 < Math.min(0, endIndex); i2++) { durations += defaultDuration; } startIndex = 0; } for (let i2 = startIndex; i2 < endIndex; i2++) { durations += durationList[i2].duration; } return durations; }; const playlistEnd$1 = function(playlist, expired, useSafeLiveEnd, liveEdgePadding) { if (!playlist || !playlist.segments) { return null; } if (playlist.endList) { return duration$1(playlist); } if (expired === null) { return null; } expired = expired || 0; let lastSegmentEndTime = intervalDuration$1(playlist, playlist.mediaSequence + playlist.segments.length, expired); if (useSafeLiveEnd) { liveEdgePadding = typeof liveEdgePadding === "number" ? liveEdgePadding : liveEdgeDelay$1(null, playlist); lastSegmentEndTime -= liveEdgePadding; } return Math.max(0, lastSegmentEndTime); }; const seekable$1 = function(playlist, expired, liveEdgePadding) { const useSafeLiveEnd = true; const seekableStart = expired || 0; const seekableEnd = playlistEnd$1(playlist, expired, useSafeLiveEnd, liveEdgePadding); if (seekableEnd === null) { return createTimeRanges$2(); } return createTimeRanges$2(seekableStart, seekableEnd); }; const getMediaInfoForTime$1 = function({ playlist, currentTime, startingSegmentIndex, startingPartIndex, startTime, exactManifestTimings }) { let time = currentTime - startTime; const partsAndSegments = getPartsAndSegments$1(playlist); let startIndex = 0; for (let i2 = 0; i2 < partsAndSegments.length; i2++) { const partAndSegment = partsAndSegments[i2]; if (startingSegmentIndex !== partAndSegment.segmentIndex) { continue; } if (typeof startingPartIndex === "number" && typeof partAndSegment.partIndex === "number" && startingPartIndex !== partAndSegment.partIndex) { continue; } startIndex = i2; break; } if (time < 0) { if (startIndex > 0) { for (let i2 = startIndex - 1; i2 >= 0; i2--) { const partAndSegment = partsAndSegments[i2]; time += partAndSegment.duration; if (exactManifestTimings) { if (time < 0) { continue; } } else if (time + TIME_FUDGE_FACTOR$1 <= 0) { continue; } return { partIndex: partAndSegment.partIndex, segmentIndex: partAndSegment.segmentIndex, startTime: startTime - sumDurations$1({ defaultDuration: playlist.targetDuration, durationList: partsAndSegments, startIndex, endIndex: i2 }) }; } } return { partIndex: partsAndSegments[0] && partsAndSegments[0].partIndex || null, segmentIndex: partsAndSegments[0] && partsAndSegments[0].segmentIndex || 0, startTime: currentTime }; } if (startIndex < 0) { for (let i2 = startIndex; i2 < 0; i2++) { time -= playlist.targetDuration; if (time < 0) { return { partIndex: partsAndSegments[0] && partsAndSegments[0].partIndex || null, segmentIndex: partsAndSegments[0] && partsAndSegments[0].segmentIndex || 0, startTime: currentTime }; } } startIndex = 0; } for (let i2 = startIndex; i2 < partsAndSegments.length; i2++) { const partAndSegment = partsAndSegments[i2]; time -= partAndSegment.duration; if (exactManifestTimings) { if (time > 0) { continue; } } else if (time - TIME_FUDGE_FACTOR$1 >= 0) { continue; } return { partIndex: partAndSegment.partIndex, segmentIndex: partAndSegment.segmentIndex, startTime: startTime + sumDurations$1({ defaultDuration: playlist.targetDuration, durationList: partsAndSegments, startIndex, endIndex: i2 }) }; } return { segmentIndex: partsAndSegments[partsAndSegments.length - 1].segmentIndex, partIndex: partsAndSegments[partsAndSegments.length - 1].partIndex, startTime: currentTime }; }; const isExcluded = function(playlist) { return playlist.excludeUntil && playlist.excludeUntil > Date.now(); }; const isIncompatible$1 = function(playlist) { return playlist.excludeUntil && playlist.excludeUntil === Infinity; }; const isEnabled$1 = function(playlist) { const excluded = isExcluded(playlist); return !playlist.disabled && !excluded; }; const isDisabled$1 = function(playlist) { return playlist.disabled; }; const isAes$1 = function(media) { for (let i2 = 0; i2 < media.segments.length; i2++) { if (media.segments[i2].key) { return true; } } return false; }; const hasAttribute$1 = function(attr, playlist) { return playlist.attributes && playlist.attributes[attr]; }; const estimateSegmentRequestTime$1 = function(segmentDuration, bandwidth2, playlist, bytesReceived = 0) { if (!hasAttribute$1("BANDWIDTH", playlist)) { return NaN; } const size = segmentDuration * playlist.attributes.BANDWIDTH; return (size - bytesReceived * 8) / bandwidth2; }; const isLowestEnabledRendition$1 = (main, media) => { if (main.playlists.length === 1) { return true; } const currentBandwidth = media.attributes.BANDWIDTH || Number.MAX_VALUE; return main.playlists.filter((playlist) => { if (!isEnabled$1(playlist)) { return false; } return (playlist.attributes.BANDWIDTH || 0) < currentBandwidth; }).length === 0; }; const playlistMatch$1 = (a, b) => { if (!a && !b || !a && b || a && !b) { return false; } if (a === b) { return true; } if (a.id && b.id && a.id === b.id) { return true; } if (a.resolvedUri && b.resolvedUri && a.resolvedUri === b.resolvedUri) { return true; } if (a.uri && b.uri && a.uri === b.uri) { return true; } return false; }; const someAudioVariant$1 = function(main, callback2) { const AUDIO5 = main && main.mediaGroups && main.mediaGroups.AUDIO || {}; let found = false; for (const groupName in AUDIO5) { for (const label2 in AUDIO5[groupName]) { found = callback2(AUDIO5[groupName][label2]); if (found) { break; } } if (found) { break; } } return !!found; }; const isAudioOnly$1 = (main) => { if (!main || !main.playlists || !main.playlists.length) { const found = someAudioVariant$1(main, (variant) => variant.playlists && variant.playlists.length || variant.uri); return found; } for (let i2 = 0; i2 < main.playlists.length; i2++) { const playlist = main.playlists[i2]; const CODECS = playlist.attributes && playlist.attributes.CODECS; if (CODECS && CODECS.split(",").every((c) => isAudioCodec$1(c))) { continue; } const found = someAudioVariant$1(main, (variant) => playlistMatch$1(playlist, variant)); if (found) { continue; } return false; } return true; }; var Playlist$1 = { liveEdgeDelay: liveEdgeDelay$1, duration: duration$1, seekable: seekable$1, getMediaInfoForTime: getMediaInfoForTime$1, isEnabled: isEnabled$1, isDisabled: isDisabled$1, isExcluded, isIncompatible: isIncompatible$1, playlistEnd: playlistEnd$1, isAes: isAes$1, hasAttribute: hasAttribute$1, estimateSegmentRequestTime: estimateSegmentRequestTime$1, isLowestEnabledRendition: isLowestEnabledRendition$1, isAudioOnly: isAudioOnly$1, playlistMatch: playlistMatch$1, segmentDurationWithParts: segmentDurationWithParts$1 }; const { log: log$2 } = videojs$2; const createPlaylistID$1 = (index2, uri) => { return `${index2}-${uri}`; }; const groupID$1 = (type2, group, label2) => { return `placeholder-uri-${type2}-${group}-${label2}`; }; const parseManifest$1 = ({ onwarn, oninfo, manifestString, customTagParsers = [], customTagMappers = [], llhls }) => { const parser2 = new Parser$1(); if (onwarn) { parser2.on("warn", onwarn); } if (oninfo) { parser2.on("info", oninfo); } customTagParsers.forEach((customParser) => parser2.addParser(customParser)); customTagMappers.forEach((mapper) => parser2.addTagMapper(mapper)); parser2.push(manifestString); parser2.end(); const manifest = parser2.manifest; if (!llhls) { ["preloadSegment", "skip", "serverControl", "renditionReports", "partInf", "partTargetDuration"].forEach(function(k) { if (manifest.hasOwnProperty(k)) { delete manifest[k]; } }); if (manifest.segments) { manifest.segments.forEach(function(segment) { ["parts", "preloadHints"].forEach(function(k) { if (segment.hasOwnProperty(k)) { delete segment[k]; } }); }); } } if (!manifest.targetDuration) { let targetDuration = 10; if (manifest.segments && manifest.segments.length) { targetDuration = manifest.segments.reduce((acc, s) => Math.max(acc, s.duration), 0); } if (onwarn) { onwarn(`manifest has no targetDuration defaulting to ${targetDuration}`); } manifest.targetDuration = targetDuration; } const parts = getLastParts$1(manifest); if (parts.length && !manifest.partTargetDuration) { const partTargetDuration = parts.reduce((acc, p) => Math.max(acc, p.duration), 0); if (onwarn) { onwarn(`manifest has no partTargetDuration defaulting to ${partTargetDuration}`); log$2.error("LL-HLS manifest has parts but lacks required #EXT-X-PART-INF:PART-TARGET value. See https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-09#section-4.4.3.7. Playback is not guaranteed."); } manifest.partTargetDuration = partTargetDuration; } return manifest; }; const forEachMediaGroup$2 = (main, callback2) => { if (!main.mediaGroups) { return; } ["AUDIO", "SUBTITLES"].forEach((mediaType) => { if (!main.mediaGroups[mediaType]) { return; } for (const groupKey in main.mediaGroups[mediaType]) { for (const labelKey in main.mediaGroups[mediaType][groupKey]) { const mediaProperties = main.mediaGroups[mediaType][groupKey][labelKey]; callback2(mediaProperties, mediaType, groupKey, labelKey); } } }); }; const setupMediaPlaylist$1 = ({ playlist, uri, id }) => { playlist.id = id; playlist.playlistErrors_ = 0; if (uri) { playlist.uri = uri; } playlist.attributes = playlist.attributes || {}; }; const setupMediaPlaylists$1 = (main) => { let i2 = main.playlists.length; while (i2--) { const playlist = main.playlists[i2]; setupMediaPlaylist$1({ playlist, id: createPlaylistID$1(i2, playlist.uri) }); playlist.resolvedUri = resolveUrl$2(main.uri, playlist.uri); main.playlists[playlist.id] = playlist; main.playlists[playlist.uri] = playlist; if (!playlist.attributes.BANDWIDTH) { log$2.warn("Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute."); } } }; const resolveMediaGroupUris$1 = (main) => { forEachMediaGroup$2(main, (properties) => { if (properties.uri) { properties.resolvedUri = resolveUrl$2(main.uri, properties.uri); } }); }; const mainForMedia = (media, uri) => { const id = createPlaylistID$1(0, uri); const main = { mediaGroups: { "AUDIO": {}, "VIDEO": {}, "CLOSED-CAPTIONS": {}, "SUBTITLES": {} }, uri: window_1.location.href, resolvedUri: window_1.location.href, playlists: [{ uri, id, resolvedUri: uri, attributes: {} }] }; main.playlists[id] = main.playlists[0]; main.playlists[uri] = main.playlists[0]; return main; }; const addPropertiesToMain = (main, uri, createGroupID = groupID$1) => { main.uri = uri; for (let i2 = 0; i2 < main.playlists.length; i2++) { if (!main.playlists[i2].uri) { const phonyUri = `placeholder-uri-${i2}`; main.playlists[i2].uri = phonyUri; } } const audioOnlyMain = isAudioOnly$1(main); forEachMediaGroup$2(main, (properties, mediaType, groupKey, labelKey) => { if (!properties.playlists || !properties.playlists.length) { if (audioOnlyMain && mediaType === "AUDIO" && !properties.uri) { for (let i2 = 0; i2 < main.playlists.length; i2++) { const p = main.playlists[i2]; if (p.attributes && p.attributes.AUDIO && p.attributes.AUDIO === groupKey) { return; } } } properties.playlists = [_extends$2({}, properties)]; } properties.playlists.forEach(function(p, i2) { const groupId = createGroupID(mediaType, groupKey, labelKey, p); const id = createPlaylistID$1(i2, groupId); if (p.uri) { p.resolvedUri = p.resolvedUri || resolveUrl$2(main.uri, p.uri); } else { p.uri = i2 === 0 ? groupId : id; p.resolvedUri = p.uri; } p.id = p.id || id; p.attributes = p.attributes || {}; main.playlists[p.id] = p; main.playlists[p.uri] = p; }); }); setupMediaPlaylists$1(main); resolveMediaGroupUris$1(main); }; const { EventTarget: EventTarget$1$1 } = videojs$2; const addLLHLSQueryDirectives$1 = (uri, media) => { if (media.endList || !media.serverControl) { return uri; } const parameters = {}; if (media.serverControl.canBlockReload) { const { preloadSegment } = media; let nextMSN = media.mediaSequence + media.segments.length; if (preloadSegment) { const parts = preloadSegment.parts || []; const nextPart = getKnownPartCount$1(media) - 1; if (nextPart > -1 && nextPart !== parts.length - 1) { parameters._HLS_part = nextPart; } if (nextPart > -1 || parts.length) { nextMSN--; } } parameters._HLS_msn = nextMSN; } if (media.serverControl && media.serverControl.canSkipUntil) { parameters._HLS_skip = media.serverControl.canSkipDateranges ? "v2" : "YES"; } if (Object.keys(parameters).length) { const parsedUri = new window_1.URL(uri); ["_HLS_skip", "_HLS_msn", "_HLS_part"].forEach(function(name) { if (!parameters.hasOwnProperty(name)) { return; } parsedUri.searchParams.set(name, parameters[name]); }); uri = parsedUri.toString(); } return uri; }; const updateSegment$1 = (a, b) => { if (!a) { return b; } const result = merge$2(a, b); if (a.preloadHints && !b.preloadHints) { delete result.preloadHints; } if (a.parts && !b.parts) { delete result.parts; } else if (a.parts && b.parts) { for (let i2 = 0; i2 < b.parts.length; i2++) { if (a.parts && a.parts[i2]) { result.parts[i2] = merge$2(a.parts[i2], b.parts[i2]); } } } if (!a.skipped && b.skipped) { result.skipped = false; } if (a.preload && !b.preload) { result.preload = false; } return result; }; const updateSegments$1 = (original, update, offset) => { const oldSegments = original.slice(); const newSegments = update.slice(); offset = offset || 0; const result = []; let currentMap; for (let newIndex = 0; newIndex < newSegments.length; newIndex++) { const oldSegment = oldSegments[newIndex + offset]; const newSegment = newSegments[newIndex]; if (oldSegment) { currentMap = oldSegment.map || currentMap; result.push(updateSegment$1(oldSegment, newSegment)); } else { if (currentMap && !newSegment.map) { newSegment.map = currentMap; } result.push(newSegment); } } return result; }; const resolveSegmentUris$1 = (segment, baseUri) => { if (!segment.resolvedUri && segment.uri) { segment.resolvedUri = resolveUrl$2(baseUri, segment.uri); } if (segment.key && !segment.key.resolvedUri) { segment.key.resolvedUri = resolveUrl$2(baseUri, segment.key.uri); } if (segment.map && !segment.map.resolvedUri) { segment.map.resolvedUri = resolveUrl$2(baseUri, segment.map.uri); } if (segment.map && segment.map.key && !segment.map.key.resolvedUri) { segment.map.key.resolvedUri = resolveUrl$2(baseUri, segment.map.key.uri); } if (segment.parts && segment.parts.length) { segment.parts.forEach((p) => { if (p.resolvedUri) { return; } p.resolvedUri = resolveUrl$2(baseUri, p.uri); }); } if (segment.preloadHints && segment.preloadHints.length) { segment.preloadHints.forEach((p) => { if (p.resolvedUri) { return; } p.resolvedUri = resolveUrl$2(baseUri, p.uri); }); } }; const getAllSegments$1 = function(media) { const segments = media.segments || []; const preloadSegment = media.preloadSegment; if (preloadSegment && preloadSegment.parts && preloadSegment.parts.length) { if (preloadSegment.preloadHints) { for (let i2 = 0; i2 < preloadSegment.preloadHints.length; i2++) { if (preloadSegment.preloadHints[i2].type === "MAP") { return segments; } } } preloadSegment.duration = media.targetDuration; preloadSegment.preload = true; segments.push(preloadSegment); } return segments; }; const isPlaylistUnchanged$1 = (a, b) => a === b || a.segments && b.segments && a.segments.length === b.segments.length && a.endList === b.endList && a.mediaSequence === b.mediaSequence && a.preloadSegment === b.preloadSegment; const updateMain$1 = (main, newMedia, unchangedCheck = isPlaylistUnchanged$1) => { const result = merge$2(main, {}); const oldMedia = result.playlists[newMedia.id]; if (!oldMedia) { return null; } if (unchangedCheck(oldMedia, newMedia)) { return null; } newMedia.segments = getAllSegments$1(newMedia); const mergedPlaylist = merge$2(oldMedia, newMedia); if (mergedPlaylist.preloadSegment && !newMedia.preloadSegment) { delete mergedPlaylist.preloadSegment; } if (oldMedia.segments) { if (newMedia.skip) { newMedia.segments = newMedia.segments || []; for (let i2 = 0; i2 < newMedia.skip.skippedSegments; i2++) { newMedia.segments.unshift({ skipped: true }); } } mergedPlaylist.segments = updateSegments$1(oldMedia.segments, newMedia.segments, newMedia.mediaSequence - oldMedia.mediaSequence); } mergedPlaylist.segments.forEach((segment) => { resolveSegmentUris$1(segment, mergedPlaylist.resolvedUri); }); for (let i2 = 0; i2 < result.playlists.length; i2++) { if (result.playlists[i2].id === newMedia.id) { result.playlists[i2] = mergedPlaylist; } } result.playlists[newMedia.id] = mergedPlaylist; result.playlists[newMedia.uri] = mergedPlaylist; forEachMediaGroup$2(main, (properties, mediaType, groupKey, labelKey) => { if (!properties.playlists) { return; } for (let i2 = 0; i2 < properties.playlists.length; i2++) { if (newMedia.id === properties.playlists[i2].id) { properties.playlists[i2] = mergedPlaylist; } } }); return result; }; const refreshDelay$1 = (media, update) => { const segments = media.segments || []; const lastSegment = segments[segments.length - 1]; const lastPart = lastSegment && lastSegment.parts && lastSegment.parts[lastSegment.parts.length - 1]; const lastDuration = lastPart && lastPart.duration || lastSegment && lastSegment.duration; if (update && lastDuration) { return lastDuration * 1e3; } return (media.partTargetDuration || media.targetDuration || 10) * 500; }; class PlaylistLoader$1 extends EventTarget$1$1 { constructor(src, vhs, options2 = {}) { super(); if (!src) { throw new Error("A non-empty playlist URL or object is required"); } this.logger_ = logger$1("PlaylistLoader"); const { withCredentials = false } = options2; this.src = src; this.vhs_ = vhs; this.withCredentials = withCredentials; const vhsOptions = vhs.options_; this.customTagParsers = vhsOptions && vhsOptions.customTagParsers || []; this.customTagMappers = vhsOptions && vhsOptions.customTagMappers || []; this.llhls = vhsOptions && vhsOptions.llhls; this.state = "HAVE_NOTHING"; this.handleMediaupdatetimeout_ = this.handleMediaupdatetimeout_.bind(this); this.on("mediaupdatetimeout", this.handleMediaupdatetimeout_); } handleMediaupdatetimeout_() { if (this.state !== "HAVE_METADATA") { return; } const media = this.media(); let uri = resolveUrl$2(this.main.uri, media.uri); if (this.llhls) { uri = addLLHLSQueryDirectives$1(uri, media); } this.state = "HAVE_CURRENT_METADATA"; this.request = this.vhs_.xhr({ uri, withCredentials: this.withCredentials }, (error, req) => { if (!this.request) { return; } if (error) { return this.playlistRequestError(this.request, this.media(), "HAVE_METADATA"); } this.haveMetadata({ playlistString: this.request.responseText, url: this.media().uri, id: this.media().id }); }); } playlistRequestError(xhr, playlist, startingState) { const { uri, id } = playlist; this.request = null; if (startingState) { this.state = startingState; } this.error = { playlist: this.main.playlists[id], status: xhr.status, message: `HLS playlist request error at URL: ${uri}.`, responseText: xhr.responseText, code: xhr.status >= 500 ? 4 : 2 }; this.trigger("error"); } parseManifest_({ url, manifestString }) { return parseManifest$1({ onwarn: ({ message }) => this.logger_(`m3u8-parser warn for ${url}: ${message}`), oninfo: ({ message }) => this.logger_(`m3u8-parser info for ${url}: ${message}`), manifestString, customTagParsers: this.customTagParsers, customTagMappers: this.customTagMappers, llhls: this.llhls }); } haveMetadata({ playlistString, playlistObject, url, id }) { this.request = null; this.state = "HAVE_METADATA"; const playlist = playlistObject || this.parseManifest_({ url, manifestString: playlistString }); playlist.lastRequest = Date.now(); setupMediaPlaylist$1({ playlist, uri: url, id }); const update = updateMain$1(this.main, playlist); this.targetDuration = playlist.partTargetDuration || playlist.targetDuration; this.pendingMedia_ = null; if (update) { this.main = update; this.media_ = this.main.playlists[id]; } else { this.trigger("playlistunchanged"); } this.updateMediaUpdateTimeout_(refreshDelay$1(this.media(), !!update)); this.trigger("loadedplaylist"); } dispose() { this.trigger("dispose"); this.stopRequest(); window_1.clearTimeout(this.mediaUpdateTimeout); window_1.clearTimeout(this.finalRenditionTimeout); this.off(); } stopRequest() { if (this.request) { const oldRequest = this.request; this.request = null; oldRequest.onreadystatechange = null; oldRequest.abort(); } } media(playlist, shouldDelay) { if (!playlist) { return this.media_; } if (this.state === "HAVE_NOTHING") { throw new Error("Cannot switch media playlist from " + this.state); } if (typeof playlist === "string") { if (!this.main.playlists[playlist]) { throw new Error("Unknown playlist URI: " + playlist); } playlist = this.main.playlists[playlist]; } window_1.clearTimeout(this.finalRenditionTimeout); if (shouldDelay) { const delay = (playlist.partTargetDuration || playlist.targetDuration) / 2 * 1e3 || 5 * 1e3; this.finalRenditionTimeout = window_1.setTimeout(this.media.bind(this, playlist, false), delay); return; } const startingState = this.state; const mediaChange = !this.media_ || playlist.id !== this.media_.id; const mainPlaylistRef = this.main.playlists[playlist.id]; if (mainPlaylistRef && mainPlaylistRef.endList || playlist.endList && playlist.segments.length) { if (this.request) { this.request.onreadystatechange = null; this.request.abort(); this.request = null; } this.state = "HAVE_METADATA"; this.media_ = playlist; if (mediaChange) { this.trigger("mediachanging"); if (startingState === "HAVE_MAIN_MANIFEST") { this.trigger("loadedmetadata"); } else { this.trigger("mediachange"); } } return; } this.updateMediaUpdateTimeout_(refreshDelay$1(playlist, true)); if (!mediaChange) { return; } this.state = "SWITCHING_MEDIA"; if (this.request) { if (playlist.resolvedUri === this.request.url) { return; } this.request.onreadystatechange = null; this.request.abort(); this.request = null; } if (this.media_) { this.trigger("mediachanging"); } this.pendingMedia_ = playlist; this.request = this.vhs_.xhr({ uri: playlist.resolvedUri, withCredentials: this.withCredentials }, (error, req) => { if (!this.request) { return; } playlist.lastRequest = Date.now(); playlist.resolvedUri = resolveManifestRedirect$1(playlist.resolvedUri, req); if (error) { return this.playlistRequestError(this.request, playlist, startingState); } this.haveMetadata({ playlistString: req.responseText, url: playlist.uri, id: playlist.id }); if (startingState === "HAVE_MAIN_MANIFEST") { this.trigger("loadedmetadata"); } else { this.trigger("mediachange"); } }); } pause() { if (this.mediaUpdateTimeout) { window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; } this.stopRequest(); if (this.state === "HAVE_NOTHING") { this.started = false; } if (this.state === "SWITCHING_MEDIA") { if (this.media_) { this.state = "HAVE_METADATA"; } else { this.state = "HAVE_MAIN_MANIFEST"; } } else if (this.state === "HAVE_CURRENT_METADATA") { this.state = "HAVE_METADATA"; } } load(shouldDelay) { if (this.mediaUpdateTimeout) { window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; } const media = this.media(); if (shouldDelay) { const delay = media ? (media.partTargetDuration || media.targetDuration) / 2 * 1e3 : 5 * 1e3; this.mediaUpdateTimeout = window_1.setTimeout(() => { this.mediaUpdateTimeout = null; this.load(); }, delay); return; } if (!this.started) { this.start(); return; } if (media && !media.endList) { this.trigger("mediaupdatetimeout"); } else { this.trigger("loadedplaylist"); } } updateMediaUpdateTimeout_(delay) { if (this.mediaUpdateTimeout) { window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; } if (!this.media() || this.media().endList) { return; } this.mediaUpdateTimeout = window_1.setTimeout(() => { this.mediaUpdateTimeout = null; this.trigger("mediaupdatetimeout"); this.updateMediaUpdateTimeout_(delay); }, delay); } start() { this.started = true; if (typeof this.src === "object") { if (!this.src.uri) { this.src.uri = window_1.location.href; } this.src.resolvedUri = this.src.uri; setTimeout(() => { this.setupInitialPlaylist(this.src); }, 0); return; } this.request = this.vhs_.xhr({ uri: this.src, withCredentials: this.withCredentials }, (error, req) => { if (!this.request) { return; } this.request = null; if (error) { this.error = { status: req.status, message: `HLS playlist request error at URL: ${this.src}.`, responseText: req.responseText, code: 2 }; if (this.state === "HAVE_NOTHING") { this.started = false; } return this.trigger("error"); } this.src = resolveManifestRedirect$1(this.src, req); const manifest = this.parseManifest_({ manifestString: req.responseText, url: this.src }); this.setupInitialPlaylist(manifest); }); } srcUri() { return typeof this.src === "string" ? this.src : this.src.uri; } setupInitialPlaylist(manifest) { this.state = "HAVE_MAIN_MANIFEST"; if (manifest.playlists) { this.main = manifest; addPropertiesToMain(this.main, this.srcUri()); manifest.playlists.forEach((playlist) => { playlist.segments = getAllSegments$1(playlist); playlist.segments.forEach((segment) => { resolveSegmentUris$1(segment, playlist.resolvedUri); }); }); this.trigger("loadedplaylist"); if (!this.request) { this.media(this.main.playlists[0]); } return; } const uri = this.srcUri() || window_1.location.href; this.main = mainForMedia(manifest, uri); this.haveMetadata({ playlistObject: manifest, url: uri, id: this.main.playlists[0].id }); this.trigger("loadedmetadata"); } } const { xhr: videojsXHR$1 } = videojs$2; const callbackWrapper$1 = function(request, error, response, callback2) { const reqResponse = request.responseType === "arraybuffer" ? request.response : request.responseText; if (!error && reqResponse) { request.responseTime = Date.now(); request.roundTripTime = request.responseTime - request.requestTime; request.bytesReceived = reqResponse.byteLength || reqResponse.length; if (!request.bandwidth) { request.bandwidth = Math.floor(request.bytesReceived / request.roundTripTime * 8 * 1e3); } } if (response.headers) { request.responseHeaders = response.headers; } if (error && error.code === "ETIMEDOUT") { request.timedout = true; } if (!error && !request.aborted && response.statusCode !== 200 && response.statusCode !== 206 && response.statusCode !== 0) { error = new Error("XHR Failed with a response of: " + (request && (reqResponse || request.responseText))); } callback2(error, request); }; const xhrFactory$1 = function() { const xhr = function XhrFunction(options2, callback2) { options2 = merge$2({ timeout: 45e3 }, options2); const beforeRequest = XhrFunction.beforeRequest || videojs$2.Vhs.xhr.beforeRequest; if (beforeRequest && typeof beforeRequest === "function") { const newOptions = beforeRequest(options2); if (newOptions) { options2 = newOptions; } } const xhrMethod = videojs$2.Vhs.xhr.original === true ? videojsXHR$1 : videojs$2.Vhs.xhr; const request = xhrMethod(options2, function(error, response) { return callbackWrapper$1(request, error, response, callback2); }); const originalAbort = request.abort; request.abort = function() { request.aborted = true; return originalAbort.apply(request, arguments); }; request.uri = options2.uri; request.requestTime = Date.now(); return request; }; xhr.original = true; return xhr; }; const byterangeStr$1 = function(byterange) { let byterangeEnd; const byterangeStart = byterange.offset; if (typeof byterange.offset === "bigint" || typeof byterange.length === "bigint") { byterangeEnd = window_1.BigInt(byterange.offset) + window_1.BigInt(byterange.length) - window_1.BigInt(1); } else { byterangeEnd = byterange.offset + byterange.length - 1; } return "bytes=" + byterangeStart + "-" + byterangeEnd; }; const segmentXhrHeaders$1 = function(segment) { const headers = {}; if (segment.byterange) { headers.Range = byterangeStr$1(segment.byterange); } return headers; }; const textRange$1 = function(range3, i2) { return range3.start(i2) + "-" + range3.end(i2); }; const formatHexString$1 = function(e, i2) { const value = e.toString(16); return "00".substring(0, 2 - value.length) + value + (i2 % 2 ? " " : ""); }; const formatAsciiString$1 = function(e) { if (e >= 32 && e < 126) { return String.fromCharCode(e); } return "."; }; const createTransferableMessage$1 = function(message) { const transferable = {}; Object.keys(message).forEach((key) => { const value = message[key]; if (isArrayBufferView$1(value)) { transferable[key] = { bytes: value.buffer, byteOffset: value.byteOffset, byteLength: value.byteLength }; } else { transferable[key] = value; } }); return transferable; }; const initSegmentId$1 = function(initSegment) { const byterange = initSegment.byterange || { length: Infinity, offset: 0 }; return [byterange.length, byterange.offset, initSegment.resolvedUri].join(","); }; const segmentKeyId$1 = function(key) { return key.resolvedUri; }; const hexDump$1 = (data) => { const bytes = Array.prototype.slice.call(data); const step = 16; let result = ""; let hex; let ascii; for (let j = 0; j < bytes.length / step; j++) { hex = bytes.slice(j * step, j * step + step).map(formatHexString$1).join(""); ascii = bytes.slice(j * step, j * step + step).map(formatAsciiString$1).join(""); result += hex + " " + ascii + "\n"; } return result; }; const tagDump$1 = ({ bytes }) => hexDump$1(bytes); const textRanges$1 = (ranges) => { let result = ""; let i2; for (i2 = 0; i2 < ranges.length; i2++) { result += textRange$1(ranges, i2) + " "; } return result; }; var utils$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, createTransferableMessage: createTransferableMessage$1, initSegmentId: initSegmentId$1, segmentKeyId: segmentKeyId$1, hexDump: hexDump$1, tagDump: tagDump$1, textRanges: textRanges$1 }); const SEGMENT_END_FUDGE_PERCENT$1 = 0.25; const playerTimeToProgramTime$1 = (playerTime, segment) => { if (!segment.dateTimeObject) { return null; } const transmuxerPrependedSeconds = segment.videoTimingInfo.transmuxerPrependedSeconds; const transmuxedStart = segment.videoTimingInfo.transmuxedPresentationStart; const startOfSegment = transmuxedStart + transmuxerPrependedSeconds; const offsetFromSegmentStart = playerTime - startOfSegment; return new Date(segment.dateTimeObject.getTime() + offsetFromSegmentStart * 1e3); }; const originalSegmentVideoDuration$1 = (videoTimingInfo) => { return videoTimingInfo.transmuxedPresentationEnd - videoTimingInfo.transmuxedPresentationStart - videoTimingInfo.transmuxerPrependedSeconds; }; const findSegmentForProgramTime$1 = (programTime, playlist) => { let dateTimeObject; try { dateTimeObject = new Date(programTime); } catch (e) { return null; } if (!playlist || !playlist.segments || playlist.segments.length === 0) { return null; } let segment = playlist.segments[0]; if (dateTimeObject < segment.dateTimeObject) { return null; } for (let i2 = 0; i2 < playlist.segments.length - 1; i2++) { segment = playlist.segments[i2]; const nextSegmentStart = playlist.segments[i2 + 1].dateTimeObject; if (dateTimeObject < nextSegmentStart) { break; } } const lastSegment = playlist.segments[playlist.segments.length - 1]; const lastSegmentStart = lastSegment.dateTimeObject; const lastSegmentDuration = lastSegment.videoTimingInfo ? originalSegmentVideoDuration$1(lastSegment.videoTimingInfo) : lastSegment.duration + lastSegment.duration * SEGMENT_END_FUDGE_PERCENT$1; const lastSegmentEnd = new Date(lastSegmentStart.getTime() + lastSegmentDuration * 1e3); if (dateTimeObject > lastSegmentEnd) { return null; } if (dateTimeObject > lastSegmentStart) { segment = lastSegment; } return { segment, estimatedStart: segment.videoTimingInfo ? segment.videoTimingInfo.transmuxedPresentationStart : Playlist$1.duration(playlist, playlist.mediaSequence + playlist.segments.indexOf(segment)), type: segment.videoTimingInfo ? "accurate" : "estimate" }; }; const findSegmentForPlayerTime$1 = (time, playlist) => { if (!playlist || !playlist.segments || playlist.segments.length === 0) { return null; } let segmentEnd = 0; let segment; for (let i2 = 0; i2 < playlist.segments.length; i2++) { segment = playlist.segments[i2]; segmentEnd = segment.videoTimingInfo ? segment.videoTimingInfo.transmuxedPresentationEnd : segmentEnd + segment.duration; if (time <= segmentEnd) { break; } } const lastSegment = playlist.segments[playlist.segments.length - 1]; if (lastSegment.videoTimingInfo && lastSegment.videoTimingInfo.transmuxedPresentationEnd < time) { return null; } if (time > segmentEnd) { if (time > segmentEnd + lastSegment.duration * SEGMENT_END_FUDGE_PERCENT$1) { return null; } segment = lastSegment; } return { segment, estimatedStart: segment.videoTimingInfo ? segment.videoTimingInfo.transmuxedPresentationStart : segmentEnd - segment.duration, type: segment.videoTimingInfo ? "accurate" : "estimate" }; }; const getOffsetFromTimestamp$1 = (comparisonTimeStamp, programTime) => { let segmentDateTime; let programDateTime; try { segmentDateTime = new Date(comparisonTimeStamp); programDateTime = new Date(programTime); } catch (e) { } const segmentTimeEpoch = segmentDateTime.getTime(); const programTimeEpoch = programDateTime.getTime(); return (programTimeEpoch - segmentTimeEpoch) / 1e3; }; const verifyProgramDateTimeTags$1 = (playlist) => { if (!playlist.segments || playlist.segments.length === 0) { return false; } for (let i2 = 0; i2 < playlist.segments.length; i2++) { const segment = playlist.segments[i2]; if (!segment.dateTimeObject) { return false; } } return true; }; const getProgramTime$1 = ({ playlist, time = void 0, callback: callback2 }) => { if (!callback2) { throw new Error("getProgramTime: callback must be provided"); } if (!playlist || time === void 0) { return callback2({ message: "getProgramTime: playlist and time must be provided" }); } const matchedSegment = findSegmentForPlayerTime$1(time, playlist); if (!matchedSegment) { return callback2({ message: "valid programTime was not found" }); } if (matchedSegment.type === "estimate") { return callback2({ message: "Accurate programTime could not be determined. Please seek to e.seekTime and try again", seekTime: matchedSegment.estimatedStart }); } const programTimeObject = { mediaSeconds: time }; const programTime = playerTimeToProgramTime$1(time, matchedSegment.segment); if (programTime) { programTimeObject.programDateTime = programTime.toISOString(); } return callback2(null, programTimeObject); }; const seekToProgramTime$1 = ({ programTime, playlist, retryCount = 2, seekTo, pauseAfterSeek = true, tech, callback: callback2 }) => { if (!callback2) { throw new Error("seekToProgramTime: callback must be provided"); } if (typeof programTime === "undefined" || !playlist || !seekTo) { return callback2({ message: "seekToProgramTime: programTime, seekTo and playlist must be provided" }); } if (!playlist.endList && !tech.hasStarted_) { return callback2({ message: "player must be playing a live stream to start buffering" }); } if (!verifyProgramDateTimeTags$1(playlist)) { return callback2({ message: "programDateTime tags must be provided in the manifest " + playlist.resolvedUri }); } const matchedSegment = findSegmentForProgramTime$1(programTime, playlist); if (!matchedSegment) { return callback2({ message: `${programTime} was not found in the stream` }); } const segment = matchedSegment.segment; const mediaOffset = getOffsetFromTimestamp$1(segment.dateTimeObject, programTime); if (matchedSegment.type === "estimate") { if (retryCount === 0) { return callback2({ message: `${programTime} is not buffered yet. Try again` }); } seekTo(matchedSegment.estimatedStart + mediaOffset); tech.one("seeked", () => { seekToProgramTime$1({ programTime, playlist, retryCount: retryCount - 1, seekTo, pauseAfterSeek, tech, callback: callback2 }); }); return; } const seekToTime = segment.start + mediaOffset; const seekedCallback = () => { return callback2(null, tech.currentTime()); }; tech.one("seeked", seekedCallback); if (pauseAfterSeek) { tech.pause(); } seekTo(seekToTime); }; const callbackOnCompleted$1 = (request, cb) => { if (request.readyState === 4) { return cb(); } return; }; const containerRequest$1 = (uri, xhr, cb) => { let bytes = []; let id3Offset; let finished = false; const endRequestAndCallback = function(err, req, type2, _bytes) { req.abort(); finished = true; return cb(err, req, type2, _bytes); }; const progressListener = function(error, request2) { if (finished) { return; } if (error) { return endRequestAndCallback(error, request2, "", bytes); } const newPart = request2.responseText.substring(bytes && bytes.byteLength || 0, request2.responseText.length); bytes = concatTypedArrays$1(bytes, stringToBytes$1(newPart, true)); id3Offset = id3Offset || getId3Offset$1(bytes); if (bytes.length < 10 || id3Offset && bytes.length < id3Offset + 2) { return callbackOnCompleted$1(request2, () => endRequestAndCallback(error, request2, "", bytes)); } const type2 = detectContainerForBytes$1(bytes); if (type2 === "ts" && bytes.length < 188) { return callbackOnCompleted$1(request2, () => endRequestAndCallback(error, request2, "", bytes)); } if (!type2 && bytes.length < 376) { return callbackOnCompleted$1(request2, () => endRequestAndCallback(error, request2, "", bytes)); } return endRequestAndCallback(null, request2, type2, bytes); }; const options2 = { uri, beforeSend(request2) { request2.overrideMimeType("text/plain; charset=x-user-defined"); request2.addEventListener("progress", function({ total, loaded }) { return callbackWrapper$1(request2, null, { statusCode: request2.status }, progressListener); }); } }; const request = xhr(options2, function(error, response) { return callbackWrapper$1(request, error, response, progressListener); }); return request; }; const { EventTarget: EventTarget$3 } = videojs$2; const dashPlaylistUnchanged$1 = function(a, b) { if (!isPlaylistUnchanged$1(a, b)) { return false; } if (a.sidx && b.sidx && (a.sidx.offset !== b.sidx.offset || a.sidx.length !== b.sidx.length)) { return false; } else if (!a.sidx && b.sidx || a.sidx && !b.sidx) { return false; } if (a.segments && !b.segments || !a.segments && b.segments) { return false; } if (!a.segments && !b.segments) { return true; } for (let i2 = 0; i2 < a.segments.length; i2++) { const aSegment = a.segments[i2]; const bSegment = b.segments[i2]; if (aSegment.uri !== bSegment.uri) { return false; } if (!aSegment.byterange && !bSegment.byterange) { continue; } const aByterange = aSegment.byterange; const bByterange = bSegment.byterange; if (aByterange && !bByterange || !aByterange && bByterange) { return false; } if (aByterange.offset !== bByterange.offset || aByterange.length !== bByterange.length) { return false; } } return true; }; const dashGroupId$1 = (type2, group, label2, playlist) => { const playlistId = playlist.attributes.NAME || label2; return `placeholder-uri-${type2}-${group}-${playlistId}`; }; const parseMainXml = ({ mainXml, srcUrl, clientOffset, sidxMapping, previousManifest }) => { const manifest = parse$1(mainXml, { manifestUri: srcUrl, clientOffset, sidxMapping, previousManifest }); addPropertiesToMain(manifest, srcUrl, dashGroupId$1); return manifest; }; const removeOldMediaGroupLabels$1 = (update, newMain) => { forEachMediaGroup$2(update, (properties, type2, group, label2) => { if (!(label2 in newMain.mediaGroups[type2][group])) { delete update.mediaGroups[type2][group][label2]; } }); }; const updateMain = (oldMain, newMain, sidxMapping) => { let noChanges = true; let update = merge$2(oldMain, { duration: newMain.duration, minimumUpdatePeriod: newMain.minimumUpdatePeriod, timelineStarts: newMain.timelineStarts }); for (let i2 = 0; i2 < newMain.playlists.length; i2++) { const playlist = newMain.playlists[i2]; if (playlist.sidx) { const sidxKey = generateSidxKey$1(playlist.sidx); if (sidxMapping && sidxMapping[sidxKey] && sidxMapping[sidxKey].sidx) { addSidxSegmentsToPlaylist$1$1(playlist, sidxMapping[sidxKey].sidx, playlist.sidx.resolvedUri); } } const playlistUpdate = updateMain$1(update, playlist, dashPlaylistUnchanged$1); if (playlistUpdate) { update = playlistUpdate; noChanges = false; } } forEachMediaGroup$2(newMain, (properties, type2, group, label2) => { if (properties.playlists && properties.playlists.length) { const id = properties.playlists[0].id; const playlistUpdate = updateMain$1(update, properties.playlists[0], dashPlaylistUnchanged$1); if (playlistUpdate) { update = playlistUpdate; if (!(label2 in update.mediaGroups[type2][group])) { update.mediaGroups[type2][group][label2] = properties; } update.mediaGroups[type2][group][label2].playlists[0] = update.playlists[id]; noChanges = false; } } }); removeOldMediaGroupLabels$1(update, newMain); if (newMain.minimumUpdatePeriod !== oldMain.minimumUpdatePeriod) { noChanges = false; } if (noChanges) { return null; } return update; }; const equivalentSidx$1 = (a, b) => { const neitherMap = Boolean(!a.map && !b.map); const equivalentMap = neitherMap || Boolean(a.map && b.map && a.map.byterange.offset === b.map.byterange.offset && a.map.byterange.length === b.map.byterange.length); return equivalentMap && a.uri === b.uri && a.byterange.offset === b.byterange.offset && a.byterange.length === b.byterange.length; }; const compareSidxEntry$1 = (playlists, oldSidxMapping) => { const newSidxMapping = {}; for (const id in playlists) { const playlist = playlists[id]; const currentSidxInfo = playlist.sidx; if (currentSidxInfo) { const key = generateSidxKey$1(currentSidxInfo); if (!oldSidxMapping[key]) { break; } const savedSidxInfo = oldSidxMapping[key].sidxInfo; if (equivalentSidx$1(savedSidxInfo, currentSidxInfo)) { newSidxMapping[key] = oldSidxMapping[key]; } } } return newSidxMapping; }; const filterChangedSidxMappings$1 = (main, oldSidxMapping) => { const videoSidx = compareSidxEntry$1(main.playlists, oldSidxMapping); let mediaGroupSidx = videoSidx; forEachMediaGroup$2(main, (properties, mediaType, groupKey, labelKey) => { if (properties.playlists && properties.playlists.length) { const playlists = properties.playlists; mediaGroupSidx = merge$2(mediaGroupSidx, compareSidxEntry$1(playlists, oldSidxMapping)); } }); return mediaGroupSidx; }; class DashPlaylistLoader$1 extends EventTarget$3 { constructor(srcUrlOrPlaylist, vhs, options2 = {}, mainPlaylistLoader) { super(); this.mainPlaylistLoader_ = mainPlaylistLoader || this; if (!mainPlaylistLoader) { this.isMain_ = true; } const { withCredentials = false } = options2; this.vhs_ = vhs; this.withCredentials = withCredentials; if (!srcUrlOrPlaylist) { throw new Error("A non-empty playlist URL or object is required"); } this.on("minimumUpdatePeriod", () => { this.refreshXml_(); }); this.on("mediaupdatetimeout", () => { this.refreshMedia_(this.media().id); }); this.state = "HAVE_NOTHING"; this.loadedPlaylists_ = {}; this.logger_ = logger$1("DashPlaylistLoader"); if (this.isMain_) { this.mainPlaylistLoader_.srcUrl = srcUrlOrPlaylist; this.mainPlaylistLoader_.sidxMapping_ = {}; } else { this.childPlaylist_ = srcUrlOrPlaylist; } } requestErrored_(err, request, startingState) { if (!this.request) { return true; } this.request = null; if (err) { this.error = typeof err === "object" && !(err instanceof Error) ? err : { status: request.status, message: "DASH request error at URL: " + request.uri, response: request.response, code: 2 }; if (startingState) { this.state = startingState; } this.trigger("error"); return true; } } addSidxSegments_(playlist, startingState, cb) { const sidxKey = playlist.sidx && generateSidxKey$1(playlist.sidx); if (!playlist.sidx || !sidxKey || this.mainPlaylistLoader_.sidxMapping_[sidxKey]) { this.mediaRequest_ = window_1.setTimeout(() => cb(false), 0); return; } const uri = resolveManifestRedirect$1(playlist.sidx.resolvedUri); const fin = (err, request) => { if (this.requestErrored_(err, request, startingState)) { return; } const sidxMapping = this.mainPlaylistLoader_.sidxMapping_; let sidx; try { sidx = parseSidx_1$1(toUint8$1(request.response).subarray(8)); } catch (e) { this.requestErrored_(e, request, startingState); return; } sidxMapping[sidxKey] = { sidxInfo: playlist.sidx, sidx }; addSidxSegmentsToPlaylist$1$1(playlist, sidx, playlist.sidx.resolvedUri); return cb(true); }; this.request = containerRequest$1(uri, this.vhs_.xhr, (err, request, container, bytes) => { if (err) { return fin(err, request); } if (!container || container !== "mp4") { return fin({ status: request.status, message: `Unsupported ${container || "unknown"} container type for sidx segment at URL: ${uri}`, response: "", playlist, internal: true, playlistExclusionDuration: Infinity, code: 2 }, request); } const { offset, length } = playlist.sidx.byterange; if (bytes.length >= length + offset) { return fin(err, { response: bytes.subarray(offset, offset + length), status: request.status, uri: request.uri }); } this.request = this.vhs_.xhr({ uri, responseType: "arraybuffer", headers: segmentXhrHeaders$1({ byterange: playlist.sidx.byterange }) }, fin); }); } dispose() { this.trigger("dispose"); this.stopRequest(); this.loadedPlaylists_ = {}; window_1.clearTimeout(this.minimumUpdatePeriodTimeout_); window_1.clearTimeout(this.mediaRequest_); window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; this.mediaRequest_ = null; this.minimumUpdatePeriodTimeout_ = null; if (this.mainPlaylistLoader_.createMupOnMedia_) { this.off("loadedmetadata", this.mainPlaylistLoader_.createMupOnMedia_); this.mainPlaylistLoader_.createMupOnMedia_ = null; } this.off(); } hasPendingRequest() { return this.request || this.mediaRequest_; } stopRequest() { if (this.request) { const oldRequest = this.request; this.request = null; oldRequest.onreadystatechange = null; oldRequest.abort(); } } media(playlist) { if (!playlist) { return this.media_; } if (this.state === "HAVE_NOTHING") { throw new Error("Cannot switch media playlist from " + this.state); } const startingState = this.state; if (typeof playlist === "string") { if (!this.mainPlaylistLoader_.main.playlists[playlist]) { throw new Error("Unknown playlist URI: " + playlist); } playlist = this.mainPlaylistLoader_.main.playlists[playlist]; } const mediaChange = !this.media_ || playlist.id !== this.media_.id; if (mediaChange && this.loadedPlaylists_[playlist.id] && this.loadedPlaylists_[playlist.id].endList) { this.state = "HAVE_METADATA"; this.media_ = playlist; if (mediaChange) { this.trigger("mediachanging"); this.trigger("mediachange"); } return; } if (!mediaChange) { return; } if (this.media_) { this.trigger("mediachanging"); } this.addSidxSegments_(playlist, startingState, (sidxChanged) => { this.haveMetadata({ startingState, playlist }); }); } haveMetadata({ startingState, playlist }) { this.state = "HAVE_METADATA"; this.loadedPlaylists_[playlist.id] = playlist; this.mediaRequest_ = null; this.refreshMedia_(playlist.id); if (startingState === "HAVE_MAIN_MANIFEST") { this.trigger("loadedmetadata"); } else { this.trigger("mediachange"); } } pause() { if (this.mainPlaylistLoader_.createMupOnMedia_) { this.off("loadedmetadata", this.mainPlaylistLoader_.createMupOnMedia_); this.mainPlaylistLoader_.createMupOnMedia_ = null; } this.stopRequest(); window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; if (this.isMain_) { window_1.clearTimeout(this.mainPlaylistLoader_.minimumUpdatePeriodTimeout_); this.mainPlaylistLoader_.minimumUpdatePeriodTimeout_ = null; } if (this.state === "HAVE_NOTHING") { this.started = false; } } load(isFinalRendition) { window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; const media = this.media(); if (isFinalRendition) { const delay = media ? media.targetDuration / 2 * 1e3 : 5 * 1e3; this.mediaUpdateTimeout = window_1.setTimeout(() => this.load(), delay); return; } if (!this.started) { this.start(); return; } if (media && !media.endList) { if (this.isMain_ && !this.minimumUpdatePeriodTimeout_) { this.trigger("minimumUpdatePeriod"); this.updateMinimumUpdatePeriodTimeout_(); } this.trigger("mediaupdatetimeout"); } else { this.trigger("loadedplaylist"); } } start() { this.started = true; if (!this.isMain_) { this.mediaRequest_ = window_1.setTimeout(() => this.haveMain_(), 0); return; } this.requestMain_((req, mainChanged) => { this.haveMain_(); if (!this.hasPendingRequest() && !this.media_) { this.media(this.mainPlaylistLoader_.main.playlists[0]); } }); } requestMain_(cb) { this.request = this.vhs_.xhr({ uri: this.mainPlaylistLoader_.srcUrl, withCredentials: this.withCredentials }, (error, req) => { if (this.requestErrored_(error, req)) { if (this.state === "HAVE_NOTHING") { this.started = false; } return; } const mainChanged = req.responseText !== this.mainPlaylistLoader_.mainXml_; this.mainPlaylistLoader_.mainXml_ = req.responseText; if (req.responseHeaders && req.responseHeaders.date) { this.mainLoaded_ = Date.parse(req.responseHeaders.date); } else { this.mainLoaded_ = Date.now(); } this.mainPlaylistLoader_.srcUrl = resolveManifestRedirect$1(this.mainPlaylistLoader_.srcUrl, req); if (mainChanged) { this.handleMain_(); this.syncClientServerClock_(() => { return cb(req, mainChanged); }); return; } return cb(req, mainChanged); }); } syncClientServerClock_(done) { const utcTiming = parseUTCTiming$1(this.mainPlaylistLoader_.mainXml_); if (utcTiming === null) { this.mainPlaylistLoader_.clientOffset_ = this.mainLoaded_ - Date.now(); return done(); } if (utcTiming.method === "DIRECT") { this.mainPlaylistLoader_.clientOffset_ = utcTiming.value - Date.now(); return done(); } this.request = this.vhs_.xhr({ uri: resolveUrl$2(this.mainPlaylistLoader_.srcUrl, utcTiming.value), method: utcTiming.method, withCredentials: this.withCredentials }, (error, req) => { if (!this.request) { return; } if (error) { this.mainPlaylistLoader_.clientOffset_ = this.mainLoaded_ - Date.now(); return done(); } let serverTime; if (utcTiming.method === "HEAD") { if (!req.responseHeaders || !req.responseHeaders.date) { serverTime = this.mainLoaded_; } else { serverTime = Date.parse(req.responseHeaders.date); } } else { serverTime = Date.parse(req.responseText); } this.mainPlaylistLoader_.clientOffset_ = serverTime - Date.now(); done(); }); } haveMain_() { this.state = "HAVE_MAIN_MANIFEST"; if (this.isMain_) { this.trigger("loadedplaylist"); } else if (!this.media_) { this.media(this.childPlaylist_); } } handleMain_() { this.mediaRequest_ = null; const oldMain = this.mainPlaylistLoader_.main; let newMain = parseMainXml({ mainXml: this.mainPlaylistLoader_.mainXml_, srcUrl: this.mainPlaylistLoader_.srcUrl, clientOffset: this.mainPlaylistLoader_.clientOffset_, sidxMapping: this.mainPlaylistLoader_.sidxMapping_, previousManifest: oldMain }); if (oldMain) { newMain = updateMain(oldMain, newMain, this.mainPlaylistLoader_.sidxMapping_); } this.mainPlaylistLoader_.main = newMain ? newMain : oldMain; const location = this.mainPlaylistLoader_.main.locations && this.mainPlaylistLoader_.main.locations[0]; if (location && location !== this.mainPlaylistLoader_.srcUrl) { this.mainPlaylistLoader_.srcUrl = location; } if (!oldMain || newMain && newMain.minimumUpdatePeriod !== oldMain.minimumUpdatePeriod) { this.updateMinimumUpdatePeriodTimeout_(); } return Boolean(newMain); } updateMinimumUpdatePeriodTimeout_() { const mpl = this.mainPlaylistLoader_; if (mpl.createMupOnMedia_) { mpl.off("loadedmetadata", mpl.createMupOnMedia_); mpl.createMupOnMedia_ = null; } if (mpl.minimumUpdatePeriodTimeout_) { window_1.clearTimeout(mpl.minimumUpdatePeriodTimeout_); mpl.minimumUpdatePeriodTimeout_ = null; } let mup = mpl.main && mpl.main.minimumUpdatePeriod; if (mup === 0) { if (mpl.media()) { mup = mpl.media().targetDuration * 1e3; } else { mpl.createMupOnMedia_ = mpl.updateMinimumUpdatePeriodTimeout_; mpl.one("loadedmetadata", mpl.createMupOnMedia_); } } if (typeof mup !== "number" || mup <= 0) { if (mup < 0) { this.logger_(`found invalid minimumUpdatePeriod of ${mup}, not setting a timeout`); } return; } this.createMUPTimeout_(mup); } createMUPTimeout_(mup) { const mpl = this.mainPlaylistLoader_; mpl.minimumUpdatePeriodTimeout_ = window_1.setTimeout(() => { mpl.minimumUpdatePeriodTimeout_ = null; mpl.trigger("minimumUpdatePeriod"); mpl.createMUPTimeout_(mup); }, mup); } refreshXml_() { this.requestMain_((req, mainChanged) => { if (!mainChanged) { return; } if (this.media_) { this.media_ = this.mainPlaylistLoader_.main.playlists[this.media_.id]; } this.mainPlaylistLoader_.sidxMapping_ = filterChangedSidxMappings$1(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.sidxMapping_); this.addSidxSegments_(this.media(), this.state, (sidxChanged) => { this.refreshMedia_(this.media().id); }); }); } refreshMedia_(mediaID) { if (!mediaID) { throw new Error("refreshMedia_ must take a media id"); } if (this.media_ && this.isMain_) { this.handleMain_(); } const playlists = this.mainPlaylistLoader_.main.playlists; const mediaChanged = !this.media_ || this.media_ !== playlists[mediaID]; if (mediaChanged) { this.media_ = playlists[mediaID]; } else { this.trigger("playlistunchanged"); } if (!this.mediaUpdateTimeout) { const createMediaUpdateTimeout = () => { if (this.media().endList) { return; } this.mediaUpdateTimeout = window_1.setTimeout(() => { this.trigger("mediaupdatetimeout"); createMediaUpdateTimeout(); }, refreshDelay$1(this.media(), Boolean(mediaChanged))); }; createMediaUpdateTimeout(); } this.trigger("loadedplaylist"); } } var Config$1 = { GOAL_BUFFER_LENGTH: 30, MAX_GOAL_BUFFER_LENGTH: 60, BACK_BUFFER_LENGTH: 30, GOAL_BUFFER_LENGTH_RATE: 1, INITIAL_BANDWIDTH: 4194304, BANDWIDTH_VARIANCE: 1.2, BUFFER_LOW_WATER_LINE: 0, MAX_BUFFER_LOW_WATER_LINE: 30, EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE: 16, BUFFER_LOW_WATER_LINE_RATE: 1, BUFFER_HIGH_WATER_LINE: 30 }; const stringToArrayBuffer$1 = (string) => { const view = new Uint8Array(new ArrayBuffer(string.length)); for (let i2 = 0; i2 < string.length; i2++) { view[i2] = string.charCodeAt(i2); } return view.buffer; }; const browserWorkerPolyFill$1 = function(workerObj) { workerObj.on = workerObj.addEventListener; workerObj.off = workerObj.removeEventListener; return workerObj; }; const createObjectURL$1 = function(str) { try { return URL.createObjectURL(new Blob([str], { type: "application/javascript" })); } catch (e) { const blob = new BlobBuilder(); blob.append(str); return URL.createObjectURL(blob.getBlob()); } }; const factory$1 = function(code) { return function() { const objectUrl = createObjectURL$1(code); const worker = browserWorkerPolyFill$1(new Worker(objectUrl)); worker.objURL = objectUrl; const terminate = worker.terminate; worker.on = worker.addEventListener; worker.off = worker.removeEventListener; worker.terminate = function() { URL.revokeObjectURL(objectUrl); return terminate.call(this); }; return worker; }; }; const transform$1 = function(code) { return `var browserWorkerPolyFill = ${browserWorkerPolyFill$1.toString()}; browserWorkerPolyFill(self); ` + code; }; const getWorkerString$1 = function(fn2) { return fn2.toString().replace(/^function.+?{/, "").slice(0, -1); }; const workerCode$1$1 = transform$1(getWorkerString$1(function() { var commonjsGlobal2 = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; var Stream$8 = function() { this.init = function() { var listeners = {}; this.on = function(type3, listener) { if (!listeners[type3]) { listeners[type3] = []; } listeners[type3] = listeners[type3].concat(listener); }; this.off = function(type3, listener) { var index2; if (!listeners[type3]) { return false; } index2 = listeners[type3].indexOf(listener); listeners[type3] = listeners[type3].slice(); listeners[type3].splice(index2, 1); return index2 > -1; }; this.trigger = function(type3) { var callbacks, i2, length, args; callbacks = listeners[type3]; if (!callbacks) { return; } if (arguments.length === 2) { length = callbacks.length; for (i2 = 0; i2 < length; ++i2) { callbacks[i2].call(this, arguments[1]); } } else { args = []; i2 = arguments.length; for (i2 = 1; i2 < arguments.length; ++i2) { args.push(arguments[i2]); } length = callbacks.length; for (i2 = 0; i2 < length; ++i2) { callbacks[i2].apply(this, args); } } }; this.dispose = function() { listeners = {}; }; }; }; Stream$8.prototype.pipe = function(destination2) { this.on("data", function(data) { destination2.push(data); }); this.on("done", function(flushSource) { destination2.flush(flushSource); }); this.on("partialdone", function(flushSource) { destination2.partialFlush(flushSource); }); this.on("endedtimeline", function(flushSource) { destination2.endTimeline(flushSource); }); this.on("reset", function(flushSource) { destination2.reset(flushSource); }); return destination2; }; Stream$8.prototype.push = function(data) { this.trigger("data", data); }; Stream$8.prototype.flush = function(flushSource) { this.trigger("done", flushSource); }; Stream$8.prototype.partialFlush = function(flushSource) { this.trigger("partialdone", flushSource); }; Stream$8.prototype.endTimeline = function(flushSource) { this.trigger("endedtimeline", flushSource); }; Stream$8.prototype.reset = function(flushSource) { this.trigger("reset", flushSource); }; var stream = Stream$8; var MAX_UINT32$12 = Math.pow(2, 32); var getUint64$32 = function(uint8) { var dv = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength); var value; if (dv.getBigUint64) { value = dv.getBigUint64(0); if (value < Number.MAX_SAFE_INTEGER) { return Number(value); } return value; } return dv.getUint32(0) * MAX_UINT32$12 + dv.getUint32(4); }; var numbers2 = { getUint64: getUint64$32, MAX_UINT32: MAX_UINT32$12 }; var MAX_UINT322 = numbers2.MAX_UINT32; var box, dinf, esds, ftyp, mdat, mfhd, minf, moof, moov, mvex, mvhd, trak, tkhd, mdia, mdhd, hdlr, sdtp, stbl, stsd, traf, trex, trun$1, types, MAJOR_BRAND, MINOR_VERSION, AVC1_BRAND, VIDEO_HDLR, AUDIO_HDLR, HDLR_TYPES, VMHD, SMHD, DREF, STCO, STSC, STSZ, STTS; (function() { var i2; types = { avc1: [], avcC: [], btrt: [], dinf: [], dref: [], esds: [], ftyp: [], hdlr: [], mdat: [], mdhd: [], mdia: [], mfhd: [], minf: [], moof: [], moov: [], mp4a: [], mvex: [], mvhd: [], pasp: [], sdtp: [], smhd: [], stbl: [], stco: [], stsc: [], stsd: [], stsz: [], stts: [], styp: [], tfdt: [], tfhd: [], traf: [], trak: [], trun: [], trex: [], tkhd: [], vmhd: [] }; if (typeof Uint8Array === "undefined") { return; } for (i2 in types) { if (types.hasOwnProperty(i2)) { types[i2] = [i2.charCodeAt(0), i2.charCodeAt(1), i2.charCodeAt(2), i2.charCodeAt(3)]; } } MAJOR_BRAND = new Uint8Array(["i".charCodeAt(0), "s".charCodeAt(0), "o".charCodeAt(0), "m".charCodeAt(0)]); AVC1_BRAND = new Uint8Array(["a".charCodeAt(0), "v".charCodeAt(0), "c".charCodeAt(0), "1".charCodeAt(0)]); MINOR_VERSION = new Uint8Array([0, 0, 0, 1]); VIDEO_HDLR = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0 ]); AUDIO_HDLR = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0 ]); HDLR_TYPES = { video: VIDEO_HDLR, audio: AUDIO_HDLR }; DREF = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1 ]); SMHD = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0 ]); STCO = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0 ]); STSC = STCO; STSZ = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]); STTS = STCO; VMHD = new Uint8Array([ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ]); })(); box = function(type3) { var payload = [], size = 0, i2, result, view; for (i2 = 1; i2 < arguments.length; i2++) { payload.push(arguments[i2]); } i2 = payload.length; while (i2--) { size += payload[i2].byteLength; } result = new Uint8Array(size + 8); view = new DataView(result.buffer, result.byteOffset, result.byteLength); view.setUint32(0, result.byteLength); result.set(type3, 4); for (i2 = 0, size = 8; i2 < payload.length; i2++) { result.set(payload[i2], size); size += payload[i2].byteLength; } return result; }; dinf = function() { return box(types.dinf, box(types.dref, DREF)); }; esds = function(track) { return box(types.esds, new Uint8Array([ 0, 0, 0, 0, 3, 25, 0, 0, 0, 4, 17, 64, 21, 0, 6, 0, 0, 0, 218, 192, 0, 0, 218, 192, 5, 2, track.audioobjecttype << 3 | track.samplingfrequencyindex >>> 1, track.samplingfrequencyindex << 7 | track.channelcount << 3, 6, 1, 2 ])); }; ftyp = function() { return box(types.ftyp, MAJOR_BRAND, MINOR_VERSION, MAJOR_BRAND, AVC1_BRAND); }; hdlr = function(type3) { return box(types.hdlr, HDLR_TYPES[type3]); }; mdat = function(data) { return box(types.mdat, data); }; mdhd = function(track) { var result = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 1, 95, 144, track.duration >>> 24 & 255, track.duration >>> 16 & 255, track.duration >>> 8 & 255, track.duration & 255, 85, 196, 0, 0 ]); if (track.samplerate) { result[12] = track.samplerate >>> 24 & 255; result[13] = track.samplerate >>> 16 & 255; result[14] = track.samplerate >>> 8 & 255; result[15] = track.samplerate & 255; } return box(types.mdhd, result); }; mdia = function(track) { return box(types.mdia, mdhd(track), hdlr(track.type), minf(track)); }; mfhd = function(sequenceNumber) { return box(types.mfhd, new Uint8Array([ 0, 0, 0, 0, (sequenceNumber & 4278190080) >> 24, (sequenceNumber & 16711680) >> 16, (sequenceNumber & 65280) >> 8, sequenceNumber & 255 ])); }; minf = function(track) { return box(types.minf, track.type === "video" ? box(types.vmhd, VMHD) : box(types.smhd, SMHD), dinf(), stbl(track)); }; moof = function(sequenceNumber, tracks) { var trackFragments = [], i2 = tracks.length; while (i2--) { trackFragments[i2] = traf(tracks[i2]); } return box.apply(null, [types.moof, mfhd(sequenceNumber)].concat(trackFragments)); }; moov = function(tracks) { var i2 = tracks.length, boxes = []; while (i2--) { boxes[i2] = trak(tracks[i2]); } return box.apply(null, [types.moov, mvhd(4294967295)].concat(boxes).concat(mvex(tracks))); }; mvex = function(tracks) { var i2 = tracks.length, boxes = []; while (i2--) { boxes[i2] = trex(tracks[i2]); } return box.apply(null, [types.mvex].concat(boxes)); }; mvhd = function(duration5) { var bytes = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 95, 144, (duration5 & 4278190080) >> 24, (duration5 & 16711680) >> 16, (duration5 & 65280) >> 8, duration5 & 255, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255 ]); return box(types.mvhd, bytes); }; sdtp = function(track) { var samples = track.samples || [], bytes = new Uint8Array(4 + samples.length), flags, i2; for (i2 = 0; i2 < samples.length; i2++) { flags = samples[i2].flags; bytes[i2 + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy; } return box(types.sdtp, bytes); }; stbl = function(track) { return box(types.stbl, stsd(track), box(types.stts, STTS), box(types.stsc, STSC), box(types.stsz, STSZ), box(types.stco, STCO)); }; (function() { var videoSample, audioSample; stsd = function(track) { return box(types.stsd, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1 ]), track.type === "video" ? videoSample(track) : audioSample(track)); }; videoSample = function(track) { var sps = track.sps || [], pps = track.pps || [], sequenceParameterSets = [], pictureParameterSets = [], i2, avc1Box; for (i2 = 0; i2 < sps.length; i2++) { sequenceParameterSets.push((sps[i2].byteLength & 65280) >>> 8); sequenceParameterSets.push(sps[i2].byteLength & 255); sequenceParameterSets = sequenceParameterSets.concat(Array.prototype.slice.call(sps[i2])); } for (i2 = 0; i2 < pps.length; i2++) { pictureParameterSets.push((pps[i2].byteLength & 65280) >>> 8); pictureParameterSets.push(pps[i2].byteLength & 255); pictureParameterSets = pictureParameterSets.concat(Array.prototype.slice.call(pps[i2])); } avc1Box = [types.avc1, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (track.width & 65280) >> 8, track.width & 255, (track.height & 65280) >> 8, track.height & 255, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 19, 118, 105, 100, 101, 111, 106, 115, 45, 99, 111, 110, 116, 114, 105, 98, 45, 104, 108, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 17 ]), box(types.avcC, new Uint8Array([ 1, track.profileIdc, track.profileCompatibility, track.levelIdc, 255 ].concat( [sps.length], sequenceParameterSets, [pps.length], pictureParameterSets ))), box(types.btrt, new Uint8Array([ 0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192 ]))]; if (track.sarRatio) { var hSpacing = track.sarRatio[0], vSpacing = track.sarRatio[1]; avc1Box.push(box(types.pasp, new Uint8Array([(hSpacing & 4278190080) >> 24, (hSpacing & 16711680) >> 16, (hSpacing & 65280) >> 8, hSpacing & 255, (vSpacing & 4278190080) >> 24, (vSpacing & 16711680) >> 16, (vSpacing & 65280) >> 8, vSpacing & 255]))); } return box.apply(null, avc1Box); }; audioSample = function(track) { return box(types.mp4a, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, (track.channelcount & 65280) >> 8, track.channelcount & 255, (track.samplesize & 65280) >> 8, track.samplesize & 255, 0, 0, 0, 0, (track.samplerate & 65280) >> 8, track.samplerate & 255, 0, 0 ]), esds(track)); }; })(); tkhd = function(track) { var result = new Uint8Array([ 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, (track.id & 4278190080) >> 24, (track.id & 16711680) >> 16, (track.id & 65280) >> 8, track.id & 255, 0, 0, 0, 0, (track.duration & 4278190080) >> 24, (track.duration & 16711680) >> 16, (track.duration & 65280) >> 8, track.duration & 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, (track.width & 65280) >> 8, track.width & 255, 0, 0, (track.height & 65280) >> 8, track.height & 255, 0, 0 ]); return box(types.tkhd, result); }; traf = function(track) { var trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun, sampleDependencyTable, dataOffset, upperWordBaseMediaDecodeTime, lowerWordBaseMediaDecodeTime; trackFragmentHeader = box(types.tfhd, new Uint8Array([ 0, 0, 0, 58, (track.id & 4278190080) >> 24, (track.id & 16711680) >> 16, (track.id & 65280) >> 8, track.id & 255, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ])); upperWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime / MAX_UINT322); lowerWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime % MAX_UINT322); trackFragmentDecodeTime = box(types.tfdt, new Uint8Array([ 1, 0, 0, 0, upperWordBaseMediaDecodeTime >>> 24 & 255, upperWordBaseMediaDecodeTime >>> 16 & 255, upperWordBaseMediaDecodeTime >>> 8 & 255, upperWordBaseMediaDecodeTime & 255, lowerWordBaseMediaDecodeTime >>> 24 & 255, lowerWordBaseMediaDecodeTime >>> 16 & 255, lowerWordBaseMediaDecodeTime >>> 8 & 255, lowerWordBaseMediaDecodeTime & 255 ])); dataOffset = 32 + 20 + 8 + 16 + 8 + 8; if (track.type === "audio") { trackFragmentRun = trun$1(track, dataOffset); return box(types.traf, trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun); } sampleDependencyTable = sdtp(track); trackFragmentRun = trun$1(track, sampleDependencyTable.length + dataOffset); return box(types.traf, trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun, sampleDependencyTable); }; trak = function(track) { track.duration = track.duration || 4294967295; return box(types.trak, tkhd(track), mdia(track)); }; trex = function(track) { var result = new Uint8Array([ 0, 0, 0, 0, (track.id & 4278190080) >> 24, (track.id & 16711680) >> 16, (track.id & 65280) >> 8, track.id & 255, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1 ]); if (track.type !== "video") { result[result.length - 1] = 0; } return box(types.trex, result); }; (function() { var audioTrun, videoTrun, trunHeader; trunHeader = function(samples, offset) { var durationPresent = 0, sizePresent = 0, flagsPresent = 0, compositionTimeOffset = 0; if (samples.length) { if (samples[0].duration !== void 0) { durationPresent = 1; } if (samples[0].size !== void 0) { sizePresent = 2; } if (samples[0].flags !== void 0) { flagsPresent = 4; } if (samples[0].compositionTimeOffset !== void 0) { compositionTimeOffset = 8; } } return [ 0, 0, durationPresent | sizePresent | flagsPresent | compositionTimeOffset, 1, (samples.length & 4278190080) >>> 24, (samples.length & 16711680) >>> 16, (samples.length & 65280) >>> 8, samples.length & 255, (offset & 4278190080) >>> 24, (offset & 16711680) >>> 16, (offset & 65280) >>> 8, offset & 255 ]; }; videoTrun = function(track, offset) { var bytesOffest, bytes, header, samples, sample, i2; samples = track.samples || []; offset += 8 + 12 + 16 * samples.length; header = trunHeader(samples, offset); bytes = new Uint8Array(header.length + samples.length * 16); bytes.set(header); bytesOffest = header.length; for (i2 = 0; i2 < samples.length; i2++) { sample = samples[i2]; bytes[bytesOffest++] = (sample.duration & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.duration & 16711680) >>> 16; bytes[bytesOffest++] = (sample.duration & 65280) >>> 8; bytes[bytesOffest++] = sample.duration & 255; bytes[bytesOffest++] = (sample.size & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.size & 16711680) >>> 16; bytes[bytesOffest++] = (sample.size & 65280) >>> 8; bytes[bytesOffest++] = sample.size & 255; bytes[bytesOffest++] = sample.flags.isLeading << 2 | sample.flags.dependsOn; bytes[bytesOffest++] = sample.flags.isDependedOn << 6 | sample.flags.hasRedundancy << 4 | sample.flags.paddingValue << 1 | sample.flags.isNonSyncSample; bytes[bytesOffest++] = sample.flags.degradationPriority & 240 << 8; bytes[bytesOffest++] = sample.flags.degradationPriority & 15; bytes[bytesOffest++] = (sample.compositionTimeOffset & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.compositionTimeOffset & 16711680) >>> 16; bytes[bytesOffest++] = (sample.compositionTimeOffset & 65280) >>> 8; bytes[bytesOffest++] = sample.compositionTimeOffset & 255; } return box(types.trun, bytes); }; audioTrun = function(track, offset) { var bytes, bytesOffest, header, samples, sample, i2; samples = track.samples || []; offset += 8 + 12 + 8 * samples.length; header = trunHeader(samples, offset); bytes = new Uint8Array(header.length + samples.length * 8); bytes.set(header); bytesOffest = header.length; for (i2 = 0; i2 < samples.length; i2++) { sample = samples[i2]; bytes[bytesOffest++] = (sample.duration & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.duration & 16711680) >>> 16; bytes[bytesOffest++] = (sample.duration & 65280) >>> 8; bytes[bytesOffest++] = sample.duration & 255; bytes[bytesOffest++] = (sample.size & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.size & 16711680) >>> 16; bytes[bytesOffest++] = (sample.size & 65280) >>> 8; bytes[bytesOffest++] = sample.size & 255; } return box(types.trun, bytes); }; trun$1 = function(track, offset) { if (track.type === "audio") { return audioTrun(track, offset); } return videoTrun(track, offset); }; })(); var mp4Generator = { ftyp, mdat, moof, moov, initSegment: function(tracks) { var fileType = ftyp(), movie = moov(tracks), result; result = new Uint8Array(fileType.byteLength + movie.byteLength); result.set(fileType); result.set(movie, fileType.byteLength); return result; } }; var groupNalsIntoFrames = function(nalUnits) { var i2, currentNal, currentFrame = [], frames = []; frames.byteLength = 0; frames.nalCount = 0; frames.duration = 0; currentFrame.byteLength = 0; for (i2 = 0; i2 < nalUnits.length; i2++) { currentNal = nalUnits[i2]; if (currentNal.nalUnitType === "access_unit_delimiter_rbsp") { if (currentFrame.length) { currentFrame.duration = currentNal.dts - currentFrame.dts; frames.byteLength += currentFrame.byteLength; frames.nalCount += currentFrame.length; frames.duration += currentFrame.duration; frames.push(currentFrame); } currentFrame = [currentNal]; currentFrame.byteLength = currentNal.data.byteLength; currentFrame.pts = currentNal.pts; currentFrame.dts = currentNal.dts; } else { if (currentNal.nalUnitType === "slice_layer_without_partitioning_rbsp_idr") { currentFrame.keyFrame = true; } currentFrame.duration = currentNal.dts - currentFrame.dts; currentFrame.byteLength += currentNal.data.byteLength; currentFrame.push(currentNal); } } if (frames.length && (!currentFrame.duration || currentFrame.duration <= 0)) { currentFrame.duration = frames[frames.length - 1].duration; } frames.byteLength += currentFrame.byteLength; frames.nalCount += currentFrame.length; frames.duration += currentFrame.duration; frames.push(currentFrame); return frames; }; var groupFramesIntoGops = function(frames) { var i2, currentFrame, currentGop = [], gops = []; currentGop.byteLength = 0; currentGop.nalCount = 0; currentGop.duration = 0; currentGop.pts = frames[0].pts; currentGop.dts = frames[0].dts; gops.byteLength = 0; gops.nalCount = 0; gops.duration = 0; gops.pts = frames[0].pts; gops.dts = frames[0].dts; for (i2 = 0; i2 < frames.length; i2++) { currentFrame = frames[i2]; if (currentFrame.keyFrame) { if (currentGop.length) { gops.push(currentGop); gops.byteLength += currentGop.byteLength; gops.nalCount += currentGop.nalCount; gops.duration += currentGop.duration; } currentGop = [currentFrame]; currentGop.nalCount = currentFrame.length; currentGop.byteLength = currentFrame.byteLength; currentGop.pts = currentFrame.pts; currentGop.dts = currentFrame.dts; currentGop.duration = currentFrame.duration; } else { currentGop.duration += currentFrame.duration; currentGop.nalCount += currentFrame.length; currentGop.byteLength += currentFrame.byteLength; currentGop.push(currentFrame); } } if (gops.length && currentGop.duration <= 0) { currentGop.duration = gops[gops.length - 1].duration; } gops.byteLength += currentGop.byteLength; gops.nalCount += currentGop.nalCount; gops.duration += currentGop.duration; gops.push(currentGop); return gops; }; var extendFirstKeyFrame = function(gops) { var currentGop; if (!gops[0][0].keyFrame && gops.length > 1) { currentGop = gops.shift(); gops.byteLength -= currentGop.byteLength; gops.nalCount -= currentGop.nalCount; gops[0][0].dts = currentGop.dts; gops[0][0].pts = currentGop.pts; gops[0][0].duration += currentGop.duration; } return gops; }; var createDefaultSample = function() { return { size: 0, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0, degradationPriority: 0, isNonSyncSample: 1 } }; }; var sampleForFrame = function(frame, dataOffset) { var sample = createDefaultSample(); sample.dataOffset = dataOffset; sample.compositionTimeOffset = frame.pts - frame.dts; sample.duration = frame.duration; sample.size = 4 * frame.length; sample.size += frame.byteLength; if (frame.keyFrame) { sample.flags.dependsOn = 2; sample.flags.isNonSyncSample = 0; } return sample; }; var generateSampleTable$1 = function(gops, baseDataOffset) { var h2, i2, sample, currentGop, currentFrame, dataOffset = baseDataOffset || 0, samples = []; for (h2 = 0; h2 < gops.length; h2++) { currentGop = gops[h2]; for (i2 = 0; i2 < currentGop.length; i2++) { currentFrame = currentGop[i2]; sample = sampleForFrame(currentFrame, dataOffset); dataOffset += sample.size; samples.push(sample); } } return samples; }; var concatenateNalData = function(gops) { var h2, i2, j, currentGop, currentFrame, currentNal, dataOffset = 0, nalsByteLength = gops.byteLength, numberOfNals = gops.nalCount, totalByteLength = nalsByteLength + 4 * numberOfNals, data = new Uint8Array(totalByteLength), view = new DataView(data.buffer); for (h2 = 0; h2 < gops.length; h2++) { currentGop = gops[h2]; for (i2 = 0; i2 < currentGop.length; i2++) { currentFrame = currentGop[i2]; for (j = 0; j < currentFrame.length; j++) { currentNal = currentFrame[j]; view.setUint32(dataOffset, currentNal.data.byteLength); dataOffset += 4; data.set(currentNal.data, dataOffset); dataOffset += currentNal.data.byteLength; } } } return data; }; var generateSampleTableForFrame = function(frame, baseDataOffset) { var sample, dataOffset = baseDataOffset || 0, samples = []; sample = sampleForFrame(frame, dataOffset); samples.push(sample); return samples; }; var concatenateNalDataForFrame = function(frame) { var i2, currentNal, dataOffset = 0, nalsByteLength = frame.byteLength, numberOfNals = frame.length, totalByteLength = nalsByteLength + 4 * numberOfNals, data = new Uint8Array(totalByteLength), view = new DataView(data.buffer); for (i2 = 0; i2 < frame.length; i2++) { currentNal = frame[i2]; view.setUint32(dataOffset, currentNal.data.byteLength); dataOffset += 4; data.set(currentNal.data, dataOffset); dataOffset += currentNal.data.byteLength; } return data; }; var frameUtils$1 = { groupNalsIntoFrames, groupFramesIntoGops, extendFirstKeyFrame, generateSampleTable: generateSampleTable$1, concatenateNalData, generateSampleTableForFrame, concatenateNalDataForFrame }; var highPrefix = [33, 16, 5, 32, 164, 27]; var lowPrefix = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252]; var zeroFill = function(count) { var a = []; while (count--) { a.push(0); } return a; }; var makeTable = function(metaTable) { return Object.keys(metaTable).reduce(function(obj, key) { obj[key] = new Uint8Array(metaTable[key].reduce(function(arr, part) { return arr.concat(part); }, [])); return obj; }, {}); }; var silence; var silence_1 = function() { if (!silence) { var coneOfSilence2 = { 96e3: [highPrefix, [227, 64], zeroFill(154), [56]], 88200: [highPrefix, [231], zeroFill(170), [56]], 64e3: [highPrefix, [248, 192], zeroFill(240), [56]], 48e3: [highPrefix, [255, 192], zeroFill(268), [55, 148, 128], zeroFill(54), [112]], 44100: [highPrefix, [255, 192], zeroFill(268), [55, 163, 128], zeroFill(84), [112]], 32e3: [highPrefix, [255, 192], zeroFill(268), [55, 234], zeroFill(226), [112]], 24e3: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 112], zeroFill(126), [224]], 16e3: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 255], zeroFill(269), [223, 108], zeroFill(195), [1, 192]], 12e3: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 253, 128], zeroFill(259), [56]], 11025: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 255, 192], zeroFill(268), [55, 175, 128], zeroFill(108), [112]], 8e3: [lowPrefix, zeroFill(268), [3, 121, 16], zeroFill(47), [7]] }; silence = makeTable(coneOfSilence2); } return silence; }; var ONE_SECOND_IN_TS$4 = 9e4, secondsToVideoTs2, secondsToAudioTs2, videoTsToSeconds2, audioTsToSeconds2, audioTsToVideoTs2, videoTsToAudioTs2, metadataTsToSeconds2; secondsToVideoTs2 = function(seconds) { return seconds * ONE_SECOND_IN_TS$4; }; secondsToAudioTs2 = function(seconds, sampleRate) { return seconds * sampleRate; }; videoTsToSeconds2 = function(timestamp) { return timestamp / ONE_SECOND_IN_TS$4; }; audioTsToSeconds2 = function(timestamp, sampleRate) { return timestamp / sampleRate; }; audioTsToVideoTs2 = function(timestamp, sampleRate) { return secondsToVideoTs2(audioTsToSeconds2(timestamp, sampleRate)); }; videoTsToAudioTs2 = function(timestamp, sampleRate) { return secondsToAudioTs2(videoTsToSeconds2(timestamp), sampleRate); }; metadataTsToSeconds2 = function(timestamp, timelineStartPts, keepOriginalTimestamps) { return videoTsToSeconds2(keepOriginalTimestamps ? timestamp : timestamp - timelineStartPts); }; var clock$2 = { ONE_SECOND_IN_TS: ONE_SECOND_IN_TS$4, secondsToVideoTs: secondsToVideoTs2, secondsToAudioTs: secondsToAudioTs2, videoTsToSeconds: videoTsToSeconds2, audioTsToSeconds: audioTsToSeconds2, audioTsToVideoTs: audioTsToVideoTs2, videoTsToAudioTs: videoTsToAudioTs2, metadataTsToSeconds: metadataTsToSeconds2 }; var coneOfSilence = silence_1; var clock$12 = clock$2; var sumFrameByteLengths = function(array) { var i2, currentObj, sum = 0; for (i2 = 0; i2 < array.length; i2++) { currentObj = array[i2]; sum += currentObj.data.byteLength; } return sum; }; var prefixWithSilence = function(track, frames, audioAppendStartTs, videoBaseMediaDecodeTime) { var baseMediaDecodeTimeTs, frameDuration = 0, audioGapDuration = 0, audioFillFrameCount = 0, audioFillDuration = 0, silentFrame, i2, firstFrame; if (!frames.length) { return; } baseMediaDecodeTimeTs = clock$12.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate); frameDuration = Math.ceil(clock$12.ONE_SECOND_IN_TS / (track.samplerate / 1024)); if (audioAppendStartTs && videoBaseMediaDecodeTime) { audioGapDuration = baseMediaDecodeTimeTs - Math.max(audioAppendStartTs, videoBaseMediaDecodeTime); audioFillFrameCount = Math.floor(audioGapDuration / frameDuration); audioFillDuration = audioFillFrameCount * frameDuration; } if (audioFillFrameCount < 1 || audioFillDuration > clock$12.ONE_SECOND_IN_TS / 2) { return; } silentFrame = coneOfSilence()[track.samplerate]; if (!silentFrame) { silentFrame = frames[0].data; } for (i2 = 0; i2 < audioFillFrameCount; i2++) { firstFrame = frames[0]; frames.splice(0, 0, { data: silentFrame, dts: firstFrame.dts - frameDuration, pts: firstFrame.pts - frameDuration }); } track.baseMediaDecodeTime -= Math.floor(clock$12.videoTsToAudioTs(audioFillDuration, track.samplerate)); return audioFillDuration; }; var trimAdtsFramesByEarliestDts = function(adtsFrames, track, earliestAllowedDts) { if (track.minSegmentDts >= earliestAllowedDts) { return adtsFrames; } track.minSegmentDts = Infinity; return adtsFrames.filter(function(currentFrame) { if (currentFrame.dts >= earliestAllowedDts) { track.minSegmentDts = Math.min(track.minSegmentDts, currentFrame.dts); track.minSegmentPts = track.minSegmentDts; return true; } return false; }); }; var generateSampleTable = function(frames) { var i2, currentFrame, samples = []; for (i2 = 0; i2 < frames.length; i2++) { currentFrame = frames[i2]; samples.push({ size: currentFrame.data.byteLength, duration: 1024 }); } return samples; }; var concatenateFrameData = function(frames) { var i2, currentFrame, dataOffset = 0, data = new Uint8Array(sumFrameByteLengths(frames)); for (i2 = 0; i2 < frames.length; i2++) { currentFrame = frames[i2]; data.set(currentFrame.data, dataOffset); dataOffset += currentFrame.data.byteLength; } return data; }; var audioFrameUtils$1 = { prefixWithSilence, trimAdtsFramesByEarliestDts, generateSampleTable, concatenateFrameData }; var ONE_SECOND_IN_TS$3 = clock$2.ONE_SECOND_IN_TS; var collectDtsInfo = function(track, data) { if (typeof data.pts === "number") { if (track.timelineStartInfo.pts === void 0) { track.timelineStartInfo.pts = data.pts; } if (track.minSegmentPts === void 0) { track.minSegmentPts = data.pts; } else { track.minSegmentPts = Math.min(track.minSegmentPts, data.pts); } if (track.maxSegmentPts === void 0) { track.maxSegmentPts = data.pts; } else { track.maxSegmentPts = Math.max(track.maxSegmentPts, data.pts); } } if (typeof data.dts === "number") { if (track.timelineStartInfo.dts === void 0) { track.timelineStartInfo.dts = data.dts; } if (track.minSegmentDts === void 0) { track.minSegmentDts = data.dts; } else { track.minSegmentDts = Math.min(track.minSegmentDts, data.dts); } if (track.maxSegmentDts === void 0) { track.maxSegmentDts = data.dts; } else { track.maxSegmentDts = Math.max(track.maxSegmentDts, data.dts); } } }; var clearDtsInfo = function(track) { delete track.minSegmentDts; delete track.maxSegmentDts; delete track.minSegmentPts; delete track.maxSegmentPts; }; var calculateTrackBaseMediaDecodeTime = function(track, keepOriginalTimestamps) { var baseMediaDecodeTime, scale, minSegmentDts = track.minSegmentDts; if (!keepOriginalTimestamps) { minSegmentDts -= track.timelineStartInfo.dts; } baseMediaDecodeTime = track.timelineStartInfo.baseMediaDecodeTime; baseMediaDecodeTime += minSegmentDts; baseMediaDecodeTime = Math.max(0, baseMediaDecodeTime); if (track.type === "audio") { scale = track.samplerate / ONE_SECOND_IN_TS$3; baseMediaDecodeTime *= scale; baseMediaDecodeTime = Math.floor(baseMediaDecodeTime); } return baseMediaDecodeTime; }; var trackDecodeInfo$1 = { clearDtsInfo, calculateTrackBaseMediaDecodeTime, collectDtsInfo }; var USER_DATA_REGISTERED_ITU_T_T35 = 4, RBSP_TRAILING_BITS = 128; var parseSei = function(bytes) { var i2 = 0, result = { payloadType: -1, payloadSize: 0 }, payloadType = 0, payloadSize = 0; while (i2 < bytes.byteLength) { if (bytes[i2] === RBSP_TRAILING_BITS) { break; } while (bytes[i2] === 255) { payloadType += 255; i2++; } payloadType += bytes[i2++]; while (bytes[i2] === 255) { payloadSize += 255; i2++; } payloadSize += bytes[i2++]; if (!result.payload && payloadType === USER_DATA_REGISTERED_ITU_T_T35) { var userIdentifier = String.fromCharCode(bytes[i2 + 3], bytes[i2 + 4], bytes[i2 + 5], bytes[i2 + 6]); if (userIdentifier === "GA94") { result.payloadType = payloadType; result.payloadSize = payloadSize; result.payload = bytes.subarray(i2, i2 + payloadSize); break; } else { result.payload = void 0; } } i2 += payloadSize; payloadType = 0; payloadSize = 0; } return result; }; var parseUserData = function(sei) { if (sei.payload[0] !== 181) { return null; } if ((sei.payload[1] << 8 | sei.payload[2]) !== 49) { return null; } if (String.fromCharCode(sei.payload[3], sei.payload[4], sei.payload[5], sei.payload[6]) !== "GA94") { return null; } if (sei.payload[7] !== 3) { return null; } return sei.payload.subarray(8, sei.payload.length - 1); }; var parseCaptionPackets = function(pts, userData) { var results = [], i2, count, offset, data; if (!(userData[0] & 64)) { return results; } count = userData[0] & 31; for (i2 = 0; i2 < count; i2++) { offset = i2 * 3; data = { type: userData[offset + 2] & 3, pts }; if (userData[offset + 2] & 4) { data.ccData = userData[offset + 3] << 8 | userData[offset + 4]; results.push(data); } } return results; }; var discardEmulationPreventionBytes$12 = function(data) { var length = data.byteLength, emulationPreventionBytesPositions = [], i2 = 1, newLength, newData; while (i2 < length - 2) { if (data[i2] === 0 && data[i2 + 1] === 0 && data[i2 + 2] === 3) { emulationPreventionBytesPositions.push(i2 + 2); i2 += 2; } else { i2++; } } if (emulationPreventionBytesPositions.length === 0) { return data; } newLength = length - emulationPreventionBytesPositions.length; newData = new Uint8Array(newLength); var sourceIndex = 0; for (i2 = 0; i2 < newLength; sourceIndex++, i2++) { if (sourceIndex === emulationPreventionBytesPositions[0]) { sourceIndex++; emulationPreventionBytesPositions.shift(); } newData[i2] = data[sourceIndex]; } return newData; }; var captionPacketParser = { parseSei, parseUserData, parseCaptionPackets, discardEmulationPreventionBytes: discardEmulationPreventionBytes$12, USER_DATA_REGISTERED_ITU_T_T35 }; var Stream$7 = stream; var cea708Parser = captionPacketParser; var CaptionStream$2 = function(options2) { options2 = options2 || {}; CaptionStream$2.prototype.init.call(this); this.parse708captions_ = typeof options2.parse708captions === "boolean" ? options2.parse708captions : true; this.captionPackets_ = []; this.ccStreams_ = [ new Cea608Stream(0, 0), new Cea608Stream(0, 1), new Cea608Stream(1, 0), new Cea608Stream(1, 1) ]; if (this.parse708captions_) { this.cc708Stream_ = new Cea708Stream({ captionServices: options2.captionServices }); } this.reset(); this.ccStreams_.forEach(function(cc) { cc.on("data", this.trigger.bind(this, "data")); cc.on("partialdone", this.trigger.bind(this, "partialdone")); cc.on("done", this.trigger.bind(this, "done")); }, this); if (this.parse708captions_) { this.cc708Stream_.on("data", this.trigger.bind(this, "data")); this.cc708Stream_.on("partialdone", this.trigger.bind(this, "partialdone")); this.cc708Stream_.on("done", this.trigger.bind(this, "done")); } }; CaptionStream$2.prototype = new Stream$7(); CaptionStream$2.prototype.push = function(event2) { var sei, userData, newCaptionPackets; if (event2.nalUnitType !== "sei_rbsp") { return; } sei = cea708Parser.parseSei(event2.escapedRBSP); if (!sei.payload) { return; } if (sei.payloadType !== cea708Parser.USER_DATA_REGISTERED_ITU_T_T35) { return; } userData = cea708Parser.parseUserData(sei); if (!userData) { return; } if (event2.dts < this.latestDts_) { this.ignoreNextEqualDts_ = true; return; } else if (event2.dts === this.latestDts_ && this.ignoreNextEqualDts_) { this.numSameDts_--; if (!this.numSameDts_) { this.ignoreNextEqualDts_ = false; } return; } newCaptionPackets = cea708Parser.parseCaptionPackets(event2.pts, userData); this.captionPackets_ = this.captionPackets_.concat(newCaptionPackets); if (this.latestDts_ !== event2.dts) { this.numSameDts_ = 0; } this.numSameDts_++; this.latestDts_ = event2.dts; }; CaptionStream$2.prototype.flushCCStreams = function(flushType) { this.ccStreams_.forEach(function(cc) { return flushType === "flush" ? cc.flush() : cc.partialFlush(); }, this); }; CaptionStream$2.prototype.flushStream = function(flushType) { if (!this.captionPackets_.length) { this.flushCCStreams(flushType); return; } this.captionPackets_.forEach(function(elem, idx) { elem.presortIndex = idx; }); this.captionPackets_.sort(function(a, b) { if (a.pts === b.pts) { return a.presortIndex - b.presortIndex; } return a.pts - b.pts; }); this.captionPackets_.forEach(function(packet) { if (packet.type < 2) { this.dispatchCea608Packet(packet); } else { this.dispatchCea708Packet(packet); } }, this); this.captionPackets_.length = 0; this.flushCCStreams(flushType); }; CaptionStream$2.prototype.flush = function() { return this.flushStream("flush"); }; CaptionStream$2.prototype.partialFlush = function() { return this.flushStream("partialFlush"); }; CaptionStream$2.prototype.reset = function() { this.latestDts_ = null; this.ignoreNextEqualDts_ = false; this.numSameDts_ = 0; this.activeCea608Channel_ = [null, null]; this.ccStreams_.forEach(function(ccStream) { ccStream.reset(); }); }; CaptionStream$2.prototype.dispatchCea608Packet = function(packet) { if (this.setsTextOrXDSActive(packet)) { this.activeCea608Channel_[packet.type] = null; } else if (this.setsChannel1Active(packet)) { this.activeCea608Channel_[packet.type] = 0; } else if (this.setsChannel2Active(packet)) { this.activeCea608Channel_[packet.type] = 1; } if (this.activeCea608Channel_[packet.type] === null) { return; } this.ccStreams_[(packet.type << 1) + this.activeCea608Channel_[packet.type]].push(packet); }; CaptionStream$2.prototype.setsChannel1Active = function(packet) { return (packet.ccData & 30720) === 4096; }; CaptionStream$2.prototype.setsChannel2Active = function(packet) { return (packet.ccData & 30720) === 6144; }; CaptionStream$2.prototype.setsTextOrXDSActive = function(packet) { return (packet.ccData & 28928) === 256 || (packet.ccData & 30974) === 4138 || (packet.ccData & 30974) === 6186; }; CaptionStream$2.prototype.dispatchCea708Packet = function(packet) { if (this.parse708captions_) { this.cc708Stream_.push(packet); } }; var CHARACTER_TRANSLATION_708 = { 127: 9834, 4128: 32, 4129: 160, 4133: 8230, 4138: 352, 4140: 338, 4144: 9608, 4145: 8216, 4146: 8217, 4147: 8220, 4148: 8221, 4149: 8226, 4153: 8482, 4154: 353, 4156: 339, 4157: 8480, 4159: 376, 4214: 8539, 4215: 8540, 4216: 8541, 4217: 8542, 4218: 9168, 4219: 9124, 4220: 9123, 4221: 9135, 4222: 9126, 4223: 9121, 4256: 12600 }; var get708CharFromCode = function(code) { var newCode = CHARACTER_TRANSLATION_708[code] || code; if (code & 4096 && code === newCode) { return ""; } return String.fromCharCode(newCode); }; var within708TextBlock = function(b) { return 32 <= b && b <= 127 || 160 <= b && b <= 255; }; var Cea708Window = function(windowNum) { this.windowNum = windowNum; this.reset(); }; Cea708Window.prototype.reset = function() { this.clearText(); this.pendingNewLine = false; this.winAttr = {}; this.penAttr = {}; this.penLoc = {}; this.penColor = {}; this.visible = 0; this.rowLock = 0; this.columnLock = 0; this.priority = 0; this.relativePositioning = 0; this.anchorVertical = 0; this.anchorHorizontal = 0; this.anchorPoint = 0; this.rowCount = 1; this.virtualRowCount = this.rowCount + 1; this.columnCount = 41; this.windowStyle = 0; this.penStyle = 0; }; Cea708Window.prototype.getText = function() { return this.rows.join("\n"); }; Cea708Window.prototype.clearText = function() { this.rows = [""]; this.rowIdx = 0; }; Cea708Window.prototype.newLine = function(pts) { if (this.rows.length >= this.virtualRowCount && typeof this.beforeRowOverflow === "function") { this.beforeRowOverflow(pts); } if (this.rows.length > 0) { this.rows.push(""); this.rowIdx++; } while (this.rows.length > this.virtualRowCount) { this.rows.shift(); this.rowIdx--; } }; Cea708Window.prototype.isEmpty = function() { if (this.rows.length === 0) { return true; } else if (this.rows.length === 1) { return this.rows[0] === ""; } return false; }; Cea708Window.prototype.addText = function(text) { this.rows[this.rowIdx] += text; }; Cea708Window.prototype.backspace = function() { if (!this.isEmpty()) { var row = this.rows[this.rowIdx]; this.rows[this.rowIdx] = row.substr(0, row.length - 1); } }; var Cea708Service = function(serviceNum, encoding, stream2) { this.serviceNum = serviceNum; this.text = ""; this.currentWindow = new Cea708Window(-1); this.windows = []; this.stream = stream2; if (typeof encoding === "string") { this.createTextDecoder(encoding); } }; Cea708Service.prototype.init = function(pts, beforeRowOverflow) { this.startPts = pts; for (var win3 = 0; win3 < 8; win3++) { this.windows[win3] = new Cea708Window(win3); if (typeof beforeRowOverflow === "function") { this.windows[win3].beforeRowOverflow = beforeRowOverflow; } } }; Cea708Service.prototype.setCurrentWindow = function(windowNum) { this.currentWindow = this.windows[windowNum]; }; Cea708Service.prototype.createTextDecoder = function(encoding) { if (typeof TextDecoder === "undefined") { this.stream.trigger("log", { level: "warn", message: "The `encoding` option is unsupported without TextDecoder support" }); } else { try { this.textDecoder_ = new TextDecoder(encoding); } catch (error) { this.stream.trigger("log", { level: "warn", message: "TextDecoder could not be created with " + encoding + " encoding. " + error }); } } }; var Cea708Stream = function(options2) { options2 = options2 || {}; Cea708Stream.prototype.init.call(this); var self2 = this; var captionServices = options2.captionServices || {}; var captionServiceEncodings = {}; var serviceProps; Object.keys(captionServices).forEach((serviceName) => { serviceProps = captionServices[serviceName]; if (/^SERVICE/.test(serviceName)) { captionServiceEncodings[serviceName] = serviceProps.encoding; } }); this.serviceEncodings = captionServiceEncodings; this.current708Packet = null; this.services = {}; this.push = function(packet) { if (packet.type === 3) { self2.new708Packet(); self2.add708Bytes(packet); } else { if (self2.current708Packet === null) { self2.new708Packet(); } self2.add708Bytes(packet); } }; }; Cea708Stream.prototype = new Stream$7(); Cea708Stream.prototype.new708Packet = function() { if (this.current708Packet !== null) { this.push708Packet(); } this.current708Packet = { data: [], ptsVals: [] }; }; Cea708Stream.prototype.add708Bytes = function(packet) { var data = packet.ccData; var byte0 = data >>> 8; var byte1 = data & 255; this.current708Packet.ptsVals.push(packet.pts); this.current708Packet.data.push(byte0); this.current708Packet.data.push(byte1); }; Cea708Stream.prototype.push708Packet = function() { var packet708 = this.current708Packet; var packetData = packet708.data; var serviceNum = null; var blockSize = null; var i2 = 0; var b = packetData[i2++]; packet708.seq = b >> 6; packet708.sizeCode = b & 63; for (; i2 < packetData.length; i2++) { b = packetData[i2++]; serviceNum = b >> 5; blockSize = b & 31; if (serviceNum === 7 && blockSize > 0) { b = packetData[i2++]; serviceNum = b; } this.pushServiceBlock(serviceNum, i2, blockSize); if (blockSize > 0) { i2 += blockSize - 1; } } }; Cea708Stream.prototype.pushServiceBlock = function(serviceNum, start2, size) { var b; var i2 = start2; var packetData = this.current708Packet.data; var service = this.services[serviceNum]; if (!service) { service = this.initService(serviceNum, i2); } for (; i2 < start2 + size && i2 < packetData.length; i2++) { b = packetData[i2]; if (within708TextBlock(b)) { i2 = this.handleText(i2, service); } else if (b === 24) { i2 = this.multiByteCharacter(i2, service); } else if (b === 16) { i2 = this.extendedCommands(i2, service); } else if (128 <= b && b <= 135) { i2 = this.setCurrentWindow(i2, service); } else if (152 <= b && b <= 159) { i2 = this.defineWindow(i2, service); } else if (b === 136) { i2 = this.clearWindows(i2, service); } else if (b === 140) { i2 = this.deleteWindows(i2, service); } else if (b === 137) { i2 = this.displayWindows(i2, service); } else if (b === 138) { i2 = this.hideWindows(i2, service); } else if (b === 139) { i2 = this.toggleWindows(i2, service); } else if (b === 151) { i2 = this.setWindowAttributes(i2, service); } else if (b === 144) { i2 = this.setPenAttributes(i2, service); } else if (b === 145) { i2 = this.setPenColor(i2, service); } else if (b === 146) { i2 = this.setPenLocation(i2, service); } else if (b === 143) { service = this.reset(i2, service); } else if (b === 8) { service.currentWindow.backspace(); } else if (b === 12) { service.currentWindow.clearText(); } else if (b === 13) { service.currentWindow.pendingNewLine = true; } else if (b === 14) { service.currentWindow.clearText(); } else if (b === 141) { i2++; } else ; } }; Cea708Stream.prototype.extendedCommands = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; if (within708TextBlock(b)) { i2 = this.handleText(i2, service, { isExtended: true }); } return i2; }; Cea708Stream.prototype.getPts = function(byteIndex) { return this.current708Packet.ptsVals[Math.floor(byteIndex / 2)]; }; Cea708Stream.prototype.initService = function(serviceNum, i2) { var serviceName = "SERVICE" + serviceNum; var self2 = this; var serviceName; var encoding; if (serviceName in this.serviceEncodings) { encoding = this.serviceEncodings[serviceName]; } this.services[serviceNum] = new Cea708Service(serviceNum, encoding, self2); this.services[serviceNum].init(this.getPts(i2), function(pts) { self2.flushDisplayed(pts, self2.services[serviceNum]); }); return this.services[serviceNum]; }; Cea708Stream.prototype.handleText = function(i2, service, options2) { var isExtended = options2 && options2.isExtended; var isMultiByte = options2 && options2.isMultiByte; var packetData = this.current708Packet.data; var extended = isExtended ? 4096 : 0; var currentByte = packetData[i2]; var nextByte = packetData[i2 + 1]; var win3 = service.currentWindow; var char; var charCodeArray; if (service.textDecoder_ && !isExtended) { if (isMultiByte) { charCodeArray = [currentByte, nextByte]; i2++; } else { charCodeArray = [currentByte]; } char = service.textDecoder_.decode(new Uint8Array(charCodeArray)); } else { char = get708CharFromCode(extended | currentByte); } if (win3.pendingNewLine && !win3.isEmpty()) { win3.newLine(this.getPts(i2)); } win3.pendingNewLine = false; win3.addText(char); return i2; }; Cea708Stream.prototype.multiByteCharacter = function(i2, service) { var packetData = this.current708Packet.data; var firstByte = packetData[i2 + 1]; var secondByte = packetData[i2 + 2]; if (within708TextBlock(firstByte) && within708TextBlock(secondByte)) { i2 = this.handleText(++i2, service, { isMultiByte: true }); } return i2; }; Cea708Stream.prototype.setCurrentWindow = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var windowNum = b & 7; service.setCurrentWindow(windowNum); return i2; }; Cea708Stream.prototype.defineWindow = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var windowNum = b & 7; service.setCurrentWindow(windowNum); var win3 = service.currentWindow; b = packetData[++i2]; win3.visible = (b & 32) >> 5; win3.rowLock = (b & 16) >> 4; win3.columnLock = (b & 8) >> 3; win3.priority = b & 7; b = packetData[++i2]; win3.relativePositioning = (b & 128) >> 7; win3.anchorVertical = b & 127; b = packetData[++i2]; win3.anchorHorizontal = b; b = packetData[++i2]; win3.anchorPoint = (b & 240) >> 4; win3.rowCount = b & 15; b = packetData[++i2]; win3.columnCount = b & 63; b = packetData[++i2]; win3.windowStyle = (b & 56) >> 3; win3.penStyle = b & 7; win3.virtualRowCount = win3.rowCount + 1; return i2; }; Cea708Stream.prototype.setWindowAttributes = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var winAttr = service.currentWindow.winAttr; b = packetData[++i2]; winAttr.fillOpacity = (b & 192) >> 6; winAttr.fillRed = (b & 48) >> 4; winAttr.fillGreen = (b & 12) >> 2; winAttr.fillBlue = b & 3; b = packetData[++i2]; winAttr.borderType = (b & 192) >> 6; winAttr.borderRed = (b & 48) >> 4; winAttr.borderGreen = (b & 12) >> 2; winAttr.borderBlue = b & 3; b = packetData[++i2]; winAttr.borderType += (b & 128) >> 5; winAttr.wordWrap = (b & 64) >> 6; winAttr.printDirection = (b & 48) >> 4; winAttr.scrollDirection = (b & 12) >> 2; winAttr.justify = b & 3; b = packetData[++i2]; winAttr.effectSpeed = (b & 240) >> 4; winAttr.effectDirection = (b & 12) >> 2; winAttr.displayEffect = b & 3; return i2; }; Cea708Stream.prototype.flushDisplayed = function(pts, service) { var displayedText = []; for (var winId = 0; winId < 8; winId++) { if (service.windows[winId].visible && !service.windows[winId].isEmpty()) { displayedText.push(service.windows[winId].getText()); } } service.endPts = pts; service.text = displayedText.join("\n\n"); this.pushCaption(service); service.startPts = pts; }; Cea708Stream.prototype.pushCaption = function(service) { if (service.text !== "") { this.trigger("data", { startPts: service.startPts, endPts: service.endPts, text: service.text, stream: "cc708_" + service.serviceNum }); service.text = ""; service.startPts = service.endPts; } }; Cea708Stream.prototype.displayWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].visible = 1; } } return i2; }; Cea708Stream.prototype.hideWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].visible = 0; } } return i2; }; Cea708Stream.prototype.toggleWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].visible ^= 1; } } return i2; }; Cea708Stream.prototype.clearWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].clearText(); } } return i2; }; Cea708Stream.prototype.deleteWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].reset(); } } return i2; }; Cea708Stream.prototype.setPenAttributes = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var penAttr = service.currentWindow.penAttr; b = packetData[++i2]; penAttr.textTag = (b & 240) >> 4; penAttr.offset = (b & 12) >> 2; penAttr.penSize = b & 3; b = packetData[++i2]; penAttr.italics = (b & 128) >> 7; penAttr.underline = (b & 64) >> 6; penAttr.edgeType = (b & 56) >> 3; penAttr.fontStyle = b & 7; return i2; }; Cea708Stream.prototype.setPenColor = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var penColor = service.currentWindow.penColor; b = packetData[++i2]; penColor.fgOpacity = (b & 192) >> 6; penColor.fgRed = (b & 48) >> 4; penColor.fgGreen = (b & 12) >> 2; penColor.fgBlue = b & 3; b = packetData[++i2]; penColor.bgOpacity = (b & 192) >> 6; penColor.bgRed = (b & 48) >> 4; penColor.bgGreen = (b & 12) >> 2; penColor.bgBlue = b & 3; b = packetData[++i2]; penColor.edgeRed = (b & 48) >> 4; penColor.edgeGreen = (b & 12) >> 2; penColor.edgeBlue = b & 3; return i2; }; Cea708Stream.prototype.setPenLocation = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var penLoc = service.currentWindow.penLoc; service.currentWindow.pendingNewLine = true; b = packetData[++i2]; penLoc.row = b & 15; b = packetData[++i2]; penLoc.column = b & 63; return i2; }; Cea708Stream.prototype.reset = function(i2, service) { var pts = this.getPts(i2); this.flushDisplayed(pts, service); return this.initService(service.serviceNum, i2); }; var CHARACTER_TRANSLATION = { 42: 225, 92: 233, 94: 237, 95: 243, 96: 250, 123: 231, 124: 247, 125: 209, 126: 241, 127: 9608, 304: 174, 305: 176, 306: 189, 307: 191, 308: 8482, 309: 162, 310: 163, 311: 9834, 312: 224, 313: 160, 314: 232, 315: 226, 316: 234, 317: 238, 318: 244, 319: 251, 544: 193, 545: 201, 546: 211, 547: 218, 548: 220, 549: 252, 550: 8216, 551: 161, 552: 42, 553: 39, 554: 8212, 555: 169, 556: 8480, 557: 8226, 558: 8220, 559: 8221, 560: 192, 561: 194, 562: 199, 563: 200, 564: 202, 565: 203, 566: 235, 567: 206, 568: 207, 569: 239, 570: 212, 571: 217, 572: 249, 573: 219, 574: 171, 575: 187, 800: 195, 801: 227, 802: 205, 803: 204, 804: 236, 805: 210, 806: 242, 807: 213, 808: 245, 809: 123, 810: 125, 811: 92, 812: 94, 813: 95, 814: 124, 815: 126, 816: 196, 817: 228, 818: 214, 819: 246, 820: 223, 821: 165, 822: 164, 823: 9474, 824: 197, 825: 229, 826: 216, 827: 248, 828: 9484, 829: 9488, 830: 9492, 831: 9496 }; var getCharFromCode = function(code) { if (code === null) { return ""; } code = CHARACTER_TRANSLATION[code] || code; return String.fromCharCode(code); }; var BOTTOM_ROW = 14; var ROWS = [4352, 4384, 4608, 4640, 5376, 5408, 5632, 5664, 5888, 5920, 4096, 4864, 4896, 5120, 5152]; var createDisplayBuffer = function() { var result = [], i2 = BOTTOM_ROW + 1; while (i2--) { result.push(""); } return result; }; var Cea608Stream = function(field, dataChannel) { Cea608Stream.prototype.init.call(this); this.field_ = field || 0; this.dataChannel_ = dataChannel || 0; this.name_ = "CC" + ((this.field_ << 1 | this.dataChannel_) + 1); this.setConstants(); this.reset(); this.push = function(packet) { var data, swap, char0, char1, text; data = packet.ccData & 32639; if (data === this.lastControlCode_) { this.lastControlCode_ = null; return; } if ((data & 61440) === 4096) { this.lastControlCode_ = data; } else if (data !== this.PADDING_) { this.lastControlCode_ = null; } char0 = data >>> 8; char1 = data & 255; if (data === this.PADDING_) { return; } else if (data === this.RESUME_CAPTION_LOADING_) { this.mode_ = "popOn"; } else if (data === this.END_OF_CAPTION_) { this.mode_ = "popOn"; this.clearFormatting(packet.pts); this.flushDisplayed(packet.pts); swap = this.displayed_; this.displayed_ = this.nonDisplayed_; this.nonDisplayed_ = swap; this.startPts_ = packet.pts; } else if (data === this.ROLL_UP_2_ROWS_) { this.rollUpRows_ = 2; this.setRollUp(packet.pts); } else if (data === this.ROLL_UP_3_ROWS_) { this.rollUpRows_ = 3; this.setRollUp(packet.pts); } else if (data === this.ROLL_UP_4_ROWS_) { this.rollUpRows_ = 4; this.setRollUp(packet.pts); } else if (data === this.CARRIAGE_RETURN_) { this.clearFormatting(packet.pts); this.flushDisplayed(packet.pts); this.shiftRowsUp_(); this.startPts_ = packet.pts; } else if (data === this.BACKSPACE_) { if (this.mode_ === "popOn") { this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1); } else { this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1); } } else if (data === this.ERASE_DISPLAYED_MEMORY_) { this.flushDisplayed(packet.pts); this.displayed_ = createDisplayBuffer(); } else if (data === this.ERASE_NON_DISPLAYED_MEMORY_) { this.nonDisplayed_ = createDisplayBuffer(); } else if (data === this.RESUME_DIRECT_CAPTIONING_) { if (this.mode_ !== "paintOn") { this.flushDisplayed(packet.pts); this.displayed_ = createDisplayBuffer(); } this.mode_ = "paintOn"; this.startPts_ = packet.pts; } else if (this.isSpecialCharacter(char0, char1)) { char0 = (char0 & 3) << 8; text = getCharFromCode(char0 | char1); this[this.mode_](packet.pts, text); this.column_++; } else if (this.isExtCharacter(char0, char1)) { if (this.mode_ === "popOn") { this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1); } else { this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1); } char0 = (char0 & 3) << 8; text = getCharFromCode(char0 | char1); this[this.mode_](packet.pts, text); this.column_++; } else if (this.isMidRowCode(char0, char1)) { this.clearFormatting(packet.pts); this[this.mode_](packet.pts, " "); this.column_++; if ((char1 & 14) === 14) { this.addFormatting(packet.pts, ["i"]); } if ((char1 & 1) === 1) { this.addFormatting(packet.pts, ["u"]); } } else if (this.isOffsetControlCode(char0, char1)) { this.column_ += char1 & 3; } else if (this.isPAC(char0, char1)) { var row = ROWS.indexOf(data & 7968); if (this.mode_ === "rollUp") { if (row - this.rollUpRows_ + 1 < 0) { row = this.rollUpRows_ - 1; } this.setRollUp(packet.pts, row); } if (row !== this.row_) { this.clearFormatting(packet.pts); this.row_ = row; } if (char1 & 1 && this.formatting_.indexOf("u") === -1) { this.addFormatting(packet.pts, ["u"]); } if ((data & 16) === 16) { this.column_ = ((data & 14) >> 1) * 4; } if (this.isColorPAC(char1)) { if ((char1 & 14) === 14) { this.addFormatting(packet.pts, ["i"]); } } } else if (this.isNormalChar(char0)) { if (char1 === 0) { char1 = null; } text = getCharFromCode(char0); text += getCharFromCode(char1); this[this.mode_](packet.pts, text); this.column_ += text.length; } }; }; Cea608Stream.prototype = new Stream$7(); Cea608Stream.prototype.flushDisplayed = function(pts) { var content = this.displayed_.map(function(row, index2) { try { return row.trim(); } catch (e) { this.trigger("log", { level: "warn", message: "Skipping a malformed 608 caption at index " + index2 + "." }); return ""; } }, this).join("\n").replace(/^\n+|\n+$/g, ""); if (content.length) { this.trigger("data", { startPts: this.startPts_, endPts: pts, text: content, stream: this.name_ }); } }; Cea608Stream.prototype.reset = function() { this.mode_ = "popOn"; this.topRow_ = 0; this.startPts_ = 0; this.displayed_ = createDisplayBuffer(); this.nonDisplayed_ = createDisplayBuffer(); this.lastControlCode_ = null; this.column_ = 0; this.row_ = BOTTOM_ROW; this.rollUpRows_ = 2; this.formatting_ = []; }; Cea608Stream.prototype.setConstants = function() { if (this.dataChannel_ === 0) { this.BASE_ = 16; this.EXT_ = 17; this.CONTROL_ = (20 | this.field_) << 8; this.OFFSET_ = 23; } else if (this.dataChannel_ === 1) { this.BASE_ = 24; this.EXT_ = 25; this.CONTROL_ = (28 | this.field_) << 8; this.OFFSET_ = 31; } this.PADDING_ = 0; this.RESUME_CAPTION_LOADING_ = this.CONTROL_ | 32; this.END_OF_CAPTION_ = this.CONTROL_ | 47; this.ROLL_UP_2_ROWS_ = this.CONTROL_ | 37; this.ROLL_UP_3_ROWS_ = this.CONTROL_ | 38; this.ROLL_UP_4_ROWS_ = this.CONTROL_ | 39; this.CARRIAGE_RETURN_ = this.CONTROL_ | 45; this.RESUME_DIRECT_CAPTIONING_ = this.CONTROL_ | 41; this.BACKSPACE_ = this.CONTROL_ | 33; this.ERASE_DISPLAYED_MEMORY_ = this.CONTROL_ | 44; this.ERASE_NON_DISPLAYED_MEMORY_ = this.CONTROL_ | 46; }; Cea608Stream.prototype.isSpecialCharacter = function(char0, char1) { return char0 === this.EXT_ && char1 >= 48 && char1 <= 63; }; Cea608Stream.prototype.isExtCharacter = function(char0, char1) { return (char0 === this.EXT_ + 1 || char0 === this.EXT_ + 2) && char1 >= 32 && char1 <= 63; }; Cea608Stream.prototype.isMidRowCode = function(char0, char1) { return char0 === this.EXT_ && char1 >= 32 && char1 <= 47; }; Cea608Stream.prototype.isOffsetControlCode = function(char0, char1) { return char0 === this.OFFSET_ && char1 >= 33 && char1 <= 35; }; Cea608Stream.prototype.isPAC = function(char0, char1) { return char0 >= this.BASE_ && char0 < this.BASE_ + 8 && char1 >= 64 && char1 <= 127; }; Cea608Stream.prototype.isColorPAC = function(char1) { return char1 >= 64 && char1 <= 79 || char1 >= 96 && char1 <= 127; }; Cea608Stream.prototype.isNormalChar = function(char) { return char >= 32 && char <= 127; }; Cea608Stream.prototype.setRollUp = function(pts, newBaseRow) { if (this.mode_ !== "rollUp") { this.row_ = BOTTOM_ROW; this.mode_ = "rollUp"; this.flushDisplayed(pts); this.nonDisplayed_ = createDisplayBuffer(); this.displayed_ = createDisplayBuffer(); } if (newBaseRow !== void 0 && newBaseRow !== this.row_) { for (var i2 = 0; i2 < this.rollUpRows_; i2++) { this.displayed_[newBaseRow - i2] = this.displayed_[this.row_ - i2]; this.displayed_[this.row_ - i2] = ""; } } if (newBaseRow === void 0) { newBaseRow = this.row_; } this.topRow_ = newBaseRow - this.rollUpRows_ + 1; }; Cea608Stream.prototype.addFormatting = function(pts, format) { this.formatting_ = this.formatting_.concat(format); var text = format.reduce(function(text2, format2) { return text2 + "<" + format2 + ">"; }, ""); this[this.mode_](pts, text); }; Cea608Stream.prototype.clearFormatting = function(pts) { if (!this.formatting_.length) { return; } var text = this.formatting_.reverse().reduce(function(text2, format) { return text2 + ""; }, ""); this.formatting_ = []; this[this.mode_](pts, text); }; Cea608Stream.prototype.popOn = function(pts, text) { var baseRow = this.nonDisplayed_[this.row_]; baseRow += text; this.nonDisplayed_[this.row_] = baseRow; }; Cea608Stream.prototype.rollUp = function(pts, text) { var baseRow = this.displayed_[this.row_]; baseRow += text; this.displayed_[this.row_] = baseRow; }; Cea608Stream.prototype.shiftRowsUp_ = function() { var i2; for (i2 = 0; i2 < this.topRow_; i2++) { this.displayed_[i2] = ""; } for (i2 = this.row_ + 1; i2 < BOTTOM_ROW + 1; i2++) { this.displayed_[i2] = ""; } for (i2 = this.topRow_; i2 < this.row_; i2++) { this.displayed_[i2] = this.displayed_[i2 + 1]; } this.displayed_[this.row_] = ""; }; Cea608Stream.prototype.paintOn = function(pts, text) { var baseRow = this.displayed_[this.row_]; baseRow += text; this.displayed_[this.row_] = baseRow; }; var captionStream = { CaptionStream: CaptionStream$2, Cea608Stream, Cea708Stream }; var streamTypes = { H264_STREAM_TYPE: 27, ADTS_STREAM_TYPE: 15, METADATA_STREAM_TYPE: 21 }; var Stream$6 = stream; var MAX_TS = 8589934592; var RO_THRESH = 4294967296; var TYPE_SHARED = "shared"; var handleRollover$1 = function(value, reference) { var direction = 1; if (value > reference) { direction = -1; } while (Math.abs(reference - value) > RO_THRESH) { value += direction * MAX_TS; } return value; }; var TimestampRolloverStream$1 = function(type3) { var lastDTS, referenceDTS; TimestampRolloverStream$1.prototype.init.call(this); this.type_ = type3 || TYPE_SHARED; this.push = function(data) { if (this.type_ !== TYPE_SHARED && data.type !== this.type_) { return; } if (referenceDTS === void 0) { referenceDTS = data.dts; } data.dts = handleRollover$1(data.dts, referenceDTS); data.pts = handleRollover$1(data.pts, referenceDTS); lastDTS = data.dts; this.trigger("data", data); }; this.flush = function() { referenceDTS = lastDTS; this.trigger("done"); }; this.endTimeline = function() { this.flush(); this.trigger("endedtimeline"); }; this.discontinuity = function() { referenceDTS = void 0; lastDTS = void 0; }; this.reset = function() { this.discontinuity(); this.trigger("reset"); }; }; TimestampRolloverStream$1.prototype = new Stream$6(); var timestampRolloverStream = { TimestampRolloverStream: TimestampRolloverStream$1, handleRollover: handleRollover$1 }; var typedArrayIndexOf$1 = (typedArray2, element, fromIndex) => { if (!typedArray2) { return -1; } var currentIndex = fromIndex; for (; currentIndex < typedArray2.length; currentIndex++) { if (typedArray2[currentIndex] === element) { return currentIndex; } } return -1; }; var typedArray = { typedArrayIndexOf: typedArrayIndexOf$1 }; var typedArrayIndexOf = typedArray.typedArrayIndexOf, textEncodingDescriptionByte = { Iso88591: 0, Utf16: 1, Utf16be: 2, Utf8: 3 }, percentEncode$1 = function(bytes, start2, end) { var i2, result = ""; for (i2 = start2; i2 < end; i2++) { result += "%" + ("00" + bytes[i2].toString(16)).slice(-2); } return result; }, parseUtf8 = function(bytes, start2, end) { return decodeURIComponent(percentEncode$1(bytes, start2, end)); }, parseIso88591$1 = function(bytes, start2, end) { return unescape(percentEncode$1(bytes, start2, end)); }, parseSyncSafeInteger$1 = function(data) { return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3]; }, frameParsers = { "APIC": function(frame) { var i2 = 1, mimeTypeEndIndex, descriptionEndIndex, LINK_MIME_TYPE = "-->"; if (frame.data[0] !== textEncodingDescriptionByte.Utf8) { return; } mimeTypeEndIndex = typedArrayIndexOf(frame.data, 0, i2); if (mimeTypeEndIndex < 0) { return; } frame.mimeType = parseIso88591$1(frame.data, i2, mimeTypeEndIndex); i2 = mimeTypeEndIndex + 1; frame.pictureType = frame.data[i2]; i2++; descriptionEndIndex = typedArrayIndexOf(frame.data, 0, i2); if (descriptionEndIndex < 0) { return; } frame.description = parseUtf8(frame.data, i2, descriptionEndIndex); i2 = descriptionEndIndex + 1; if (frame.mimeType === LINK_MIME_TYPE) { frame.url = parseIso88591$1(frame.data, i2, frame.data.length); } else { frame.pictureData = frame.data.subarray(i2, frame.data.length); } }, "T*": function(frame) { if (frame.data[0] !== textEncodingDescriptionByte.Utf8) { return; } frame.value = parseUtf8(frame.data, 1, frame.data.length).replace(/\0*$/, ""); frame.values = frame.value.split("\0"); }, "TXXX": function(frame) { var descriptionEndIndex; if (frame.data[0] !== textEncodingDescriptionByte.Utf8) { return; } descriptionEndIndex = typedArrayIndexOf(frame.data, 0, 1); if (descriptionEndIndex === -1) { return; } frame.description = parseUtf8(frame.data, 1, descriptionEndIndex); frame.value = parseUtf8(frame.data, descriptionEndIndex + 1, frame.data.length).replace(/\0*$/, ""); frame.data = frame.value; }, "W*": function(frame) { frame.url = parseIso88591$1(frame.data, 0, frame.data.length).replace(/\0.*$/, ""); }, "WXXX": function(frame) { var descriptionEndIndex; if (frame.data[0] !== textEncodingDescriptionByte.Utf8) { return; } descriptionEndIndex = typedArrayIndexOf(frame.data, 0, 1); if (descriptionEndIndex === -1) { return; } frame.description = parseUtf8(frame.data, 1, descriptionEndIndex); frame.url = parseIso88591$1(frame.data, descriptionEndIndex + 1, frame.data.length).replace(/\0.*$/, ""); }, "PRIV": function(frame) { var i2; for (i2 = 0; i2 < frame.data.length; i2++) { if (frame.data[i2] === 0) { frame.owner = parseIso88591$1(frame.data, 0, i2); break; } } frame.privateData = frame.data.subarray(i2 + 1); frame.data = frame.privateData; } }; var parseId3Frames$1 = function(data) { var frameSize, frameHeader, frameStart = 10, tagSize = 0, frames = []; if (data.length < 10 || data[0] !== "I".charCodeAt(0) || data[1] !== "D".charCodeAt(0) || data[2] !== "3".charCodeAt(0)) { return; } tagSize = parseSyncSafeInteger$1(data.subarray(6, 10)); tagSize += 10; var hasExtendedHeader = data[5] & 64; if (hasExtendedHeader) { frameStart += 4; frameStart += parseSyncSafeInteger$1(data.subarray(10, 14)); tagSize -= parseSyncSafeInteger$1(data.subarray(16, 20)); } do { frameSize = parseSyncSafeInteger$1(data.subarray(frameStart + 4, frameStart + 8)); if (frameSize < 1) { break; } frameHeader = String.fromCharCode(data[frameStart], data[frameStart + 1], data[frameStart + 2], data[frameStart + 3]); var frame = { id: frameHeader, data: data.subarray(frameStart + 10, frameStart + frameSize + 10) }; frame.key = frame.id; if (frameParsers[frame.id]) { frameParsers[frame.id](frame); } else if (frame.id[0] === "T") { frameParsers["T*"](frame); } else if (frame.id[0] === "W") { frameParsers["W*"](frame); } frames.push(frame); frameStart += 10; frameStart += frameSize; } while (frameStart < tagSize); return frames; }; var parseId3 = { parseId3Frames: parseId3Frames$1, parseSyncSafeInteger: parseSyncSafeInteger$1, frameParsers }; var Stream$5 = stream, StreamTypes$3 = streamTypes, id3 = parseId3, MetadataStream; MetadataStream = function(options2) { var settings = { descriptor: options2 && options2.descriptor }, tagSize = 0, buffer = [], bufferSize = 0, i2; MetadataStream.prototype.init.call(this); this.dispatchType = StreamTypes$3.METADATA_STREAM_TYPE.toString(16); if (settings.descriptor) { for (i2 = 0; i2 < settings.descriptor.length; i2++) { this.dispatchType += ("00" + settings.descriptor[i2].toString(16)).slice(-2); } } this.push = function(chunk) { var tag, frameStart, frameSize, frame, i3, frameHeader; if (chunk.type !== "timed-metadata") { return; } if (chunk.dataAlignmentIndicator) { bufferSize = 0; buffer.length = 0; } if (buffer.length === 0 && (chunk.data.length < 10 || chunk.data[0] !== "I".charCodeAt(0) || chunk.data[1] !== "D".charCodeAt(0) || chunk.data[2] !== "3".charCodeAt(0))) { this.trigger("log", { level: "warn", message: "Skipping unrecognized metadata packet" }); return; } buffer.push(chunk); bufferSize += chunk.data.byteLength; if (buffer.length === 1) { tagSize = id3.parseSyncSafeInteger(chunk.data.subarray(6, 10)); tagSize += 10; } if (bufferSize < tagSize) { return; } tag = { data: new Uint8Array(tagSize), frames: [], pts: buffer[0].pts, dts: buffer[0].dts }; for (i3 = 0; i3 < tagSize; ) { tag.data.set(buffer[0].data.subarray(0, tagSize - i3), i3); i3 += buffer[0].data.byteLength; bufferSize -= buffer[0].data.byteLength; buffer.shift(); } frameStart = 10; if (tag.data[5] & 64) { frameStart += 4; frameStart += id3.parseSyncSafeInteger(tag.data.subarray(10, 14)); tagSize -= id3.parseSyncSafeInteger(tag.data.subarray(16, 20)); } do { frameSize = id3.parseSyncSafeInteger(tag.data.subarray(frameStart + 4, frameStart + 8)); if (frameSize < 1) { this.trigger("log", { level: "warn", message: "Malformed ID3 frame encountered. Skipping remaining metadata parsing." }); break; } frameHeader = String.fromCharCode(tag.data[frameStart], tag.data[frameStart + 1], tag.data[frameStart + 2], tag.data[frameStart + 3]); frame = { id: frameHeader, data: tag.data.subarray(frameStart + 10, frameStart + frameSize + 10) }; frame.key = frame.id; if (id3.frameParsers[frame.id]) { id3.frameParsers[frame.id](frame); } else if (frame.id[0] === "T") { id3.frameParsers["T*"](frame); } else if (frame.id[0] === "W") { id3.frameParsers["W*"](frame); } if (frame.owner === "com.apple.streaming.transportStreamTimestamp") { var d2 = frame.data, size = (d2[3] & 1) << 30 | d2[4] << 22 | d2[5] << 14 | d2[6] << 6 | d2[7] >>> 2; size *= 4; size += d2[7] & 3; frame.timeStamp = size; if (tag.pts === void 0 && tag.dts === void 0) { tag.pts = frame.timeStamp; tag.dts = frame.timeStamp; } this.trigger("timestamp", frame); } tag.frames.push(frame); frameStart += 10; frameStart += frameSize; } while (frameStart < tagSize); this.trigger("data", tag); }; }; MetadataStream.prototype = new Stream$5(); var metadataStream = MetadataStream; var Stream$4 = stream, CaptionStream$1 = captionStream, StreamTypes$2 = streamTypes, TimestampRolloverStream = timestampRolloverStream.TimestampRolloverStream; var TransportPacketStream, TransportParseStream, ElementaryStream; var MP2T_PACKET_LENGTH$1 = 188, SYNC_BYTE$1 = 71; TransportPacketStream = function() { var buffer = new Uint8Array(MP2T_PACKET_LENGTH$1), bytesInBuffer = 0; TransportPacketStream.prototype.init.call(this); this.push = function(bytes) { var startIndex = 0, endIndex = MP2T_PACKET_LENGTH$1, everything; if (bytesInBuffer) { everything = new Uint8Array(bytes.byteLength + bytesInBuffer); everything.set(buffer.subarray(0, bytesInBuffer)); everything.set(bytes, bytesInBuffer); bytesInBuffer = 0; } else { everything = bytes; } while (endIndex < everything.byteLength) { if (everything[startIndex] === SYNC_BYTE$1 && everything[endIndex] === SYNC_BYTE$1) { this.trigger("data", everything.subarray(startIndex, endIndex)); startIndex += MP2T_PACKET_LENGTH$1; endIndex += MP2T_PACKET_LENGTH$1; continue; } startIndex++; endIndex++; } if (startIndex < everything.byteLength) { buffer.set(everything.subarray(startIndex), 0); bytesInBuffer = everything.byteLength - startIndex; } }; this.flush = function() { if (bytesInBuffer === MP2T_PACKET_LENGTH$1 && buffer[0] === SYNC_BYTE$1) { this.trigger("data", buffer); bytesInBuffer = 0; } this.trigger("done"); }; this.endTimeline = function() { this.flush(); this.trigger("endedtimeline"); }; this.reset = function() { bytesInBuffer = 0; this.trigger("reset"); }; }; TransportPacketStream.prototype = new Stream$4(); TransportParseStream = function() { var parsePsi, parsePat2, parsePmt2, self2; TransportParseStream.prototype.init.call(this); self2 = this; this.packetsWaitingForPmt = []; this.programMapTable = void 0; parsePsi = function(payload, psi) { var offset = 0; if (psi.payloadUnitStartIndicator) { offset += payload[offset] + 1; } if (psi.type === "pat") { parsePat2(payload.subarray(offset), psi); } else { parsePmt2(payload.subarray(offset), psi); } }; parsePat2 = function(payload, pat) { pat.section_number = payload[7]; pat.last_section_number = payload[8]; self2.pmtPid = (payload[10] & 31) << 8 | payload[11]; pat.pmtPid = self2.pmtPid; }; parsePmt2 = function(payload, pmt) { var sectionLength, tableEnd, programInfoLength, offset; if (!(payload[5] & 1)) { return; } self2.programMapTable = { video: null, audio: null, "timed-metadata": {} }; sectionLength = (payload[1] & 15) << 8 | payload[2]; tableEnd = 3 + sectionLength - 4; programInfoLength = (payload[10] & 15) << 8 | payload[11]; offset = 12 + programInfoLength; while (offset < tableEnd) { var streamType = payload[offset]; var pid = (payload[offset + 1] & 31) << 8 | payload[offset + 2]; if (streamType === StreamTypes$2.H264_STREAM_TYPE && self2.programMapTable.video === null) { self2.programMapTable.video = pid; } else if (streamType === StreamTypes$2.ADTS_STREAM_TYPE && self2.programMapTable.audio === null) { self2.programMapTable.audio = pid; } else if (streamType === StreamTypes$2.METADATA_STREAM_TYPE) { self2.programMapTable["timed-metadata"][pid] = streamType; } offset += ((payload[offset + 3] & 15) << 8 | payload[offset + 4]) + 5; } pmt.programMapTable = self2.programMapTable; }; this.push = function(packet) { var result = {}, offset = 4; result.payloadUnitStartIndicator = !!(packet[1] & 64); result.pid = packet[1] & 31; result.pid <<= 8; result.pid |= packet[2]; if ((packet[3] & 48) >>> 4 > 1) { offset += packet[offset] + 1; } if (result.pid === 0) { result.type = "pat"; parsePsi(packet.subarray(offset), result); this.trigger("data", result); } else if (result.pid === this.pmtPid) { result.type = "pmt"; parsePsi(packet.subarray(offset), result); this.trigger("data", result); while (this.packetsWaitingForPmt.length) { this.processPes_.apply(this, this.packetsWaitingForPmt.shift()); } } else if (this.programMapTable === void 0) { this.packetsWaitingForPmt.push([packet, offset, result]); } else { this.processPes_(packet, offset, result); } }; this.processPes_ = function(packet, offset, result) { if (result.pid === this.programMapTable.video) { result.streamType = StreamTypes$2.H264_STREAM_TYPE; } else if (result.pid === this.programMapTable.audio) { result.streamType = StreamTypes$2.ADTS_STREAM_TYPE; } else { result.streamType = this.programMapTable["timed-metadata"][result.pid]; } result.type = "pes"; result.data = packet.subarray(offset); this.trigger("data", result); }; }; TransportParseStream.prototype = new Stream$4(); TransportParseStream.STREAM_TYPES = { h264: 27, adts: 15 }; ElementaryStream = function() { var self2 = this, segmentHadPmt = false, video = { data: [], size: 0 }, audio = { data: [], size: 0 }, timedMetadata = { data: [], size: 0 }, programMapTable, parsePes = function(payload, pes) { var ptsDtsFlags; const startPrefix = payload[0] << 16 | payload[1] << 8 | payload[2]; pes.data = new Uint8Array(); if (startPrefix !== 1) { return; } pes.packetLength = 6 + (payload[4] << 8 | payload[5]); pes.dataAlignmentIndicator = (payload[6] & 4) !== 0; ptsDtsFlags = payload[7]; if (ptsDtsFlags & 192) { pes.pts = (payload[9] & 14) << 27 | (payload[10] & 255) << 20 | (payload[11] & 254) << 12 | (payload[12] & 255) << 5 | (payload[13] & 254) >>> 3; pes.pts *= 4; pes.pts += (payload[13] & 6) >>> 1; pes.dts = pes.pts; if (ptsDtsFlags & 64) { pes.dts = (payload[14] & 14) << 27 | (payload[15] & 255) << 20 | (payload[16] & 254) << 12 | (payload[17] & 255) << 5 | (payload[18] & 254) >>> 3; pes.dts *= 4; pes.dts += (payload[18] & 6) >>> 1; } } pes.data = payload.subarray(9 + payload[8]); }, flushStream = function(stream2, type3, forceFlush) { var packetData = new Uint8Array(stream2.size), event2 = { type: type3 }, i2 = 0, offset = 0, packetFlushable = false, fragment; if (!stream2.data.length || stream2.size < 9) { return; } event2.trackId = stream2.data[0].pid; for (i2 = 0; i2 < stream2.data.length; i2++) { fragment = stream2.data[i2]; packetData.set(fragment.data, offset); offset += fragment.data.byteLength; } parsePes(packetData, event2); packetFlushable = type3 === "video" || event2.packetLength <= stream2.size; if (forceFlush || packetFlushable) { stream2.size = 0; stream2.data.length = 0; } if (packetFlushable) { self2.trigger("data", event2); } }; ElementaryStream.prototype.init.call(this); this.push = function(data) { ({ pat: function() { }, pes: function() { var stream2, streamType; switch (data.streamType) { case StreamTypes$2.H264_STREAM_TYPE: stream2 = video; streamType = "video"; break; case StreamTypes$2.ADTS_STREAM_TYPE: stream2 = audio; streamType = "audio"; break; case StreamTypes$2.METADATA_STREAM_TYPE: stream2 = timedMetadata; streamType = "timed-metadata"; break; default: return; } if (data.payloadUnitStartIndicator) { flushStream(stream2, streamType, true); } stream2.data.push(data); stream2.size += data.data.byteLength; }, pmt: function() { var event2 = { type: "metadata", tracks: [] }; programMapTable = data.programMapTable; if (programMapTable.video !== null) { event2.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +programMapTable.video, codec: "avc", type: "video" }); } if (programMapTable.audio !== null) { event2.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +programMapTable.audio, codec: "adts", type: "audio" }); } segmentHadPmt = true; self2.trigger("data", event2); } })[data.type](); }; this.reset = function() { video.size = 0; video.data.length = 0; audio.size = 0; audio.data.length = 0; this.trigger("reset"); }; this.flushStreams_ = function() { flushStream(video, "video"); flushStream(audio, "audio"); flushStream(timedMetadata, "timed-metadata"); }; this.flush = function() { if (!segmentHadPmt && programMapTable) { var pmt = { type: "metadata", tracks: [] }; if (programMapTable.video !== null) { pmt.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +programMapTable.video, codec: "avc", type: "video" }); } if (programMapTable.audio !== null) { pmt.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +programMapTable.audio, codec: "adts", type: "audio" }); } self2.trigger("data", pmt); } segmentHadPmt = false; this.flushStreams_(); this.trigger("done"); }; }; ElementaryStream.prototype = new Stream$4(); var m2ts$1 = { PAT_PID: 0, MP2T_PACKET_LENGTH: MP2T_PACKET_LENGTH$1, TransportPacketStream, TransportParseStream, ElementaryStream, TimestampRolloverStream, CaptionStream: CaptionStream$1.CaptionStream, Cea608Stream: CaptionStream$1.Cea608Stream, Cea708Stream: CaptionStream$1.Cea708Stream, MetadataStream: metadataStream }; for (var type2 in StreamTypes$2) { if (StreamTypes$2.hasOwnProperty(type2)) { m2ts$1[type2] = StreamTypes$2[type2]; } } var m2ts_1 = m2ts$1; var Stream$3 = stream; var ONE_SECOND_IN_TS$2 = clock$2.ONE_SECOND_IN_TS; var AdtsStream$1; var ADTS_SAMPLING_FREQUENCIES$1 = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; AdtsStream$1 = function(handlePartialSegments) { var buffer, frameNum = 0; AdtsStream$1.prototype.init.call(this); this.skipWarn_ = function(start2, end) { this.trigger("log", { level: "warn", message: `adts skiping bytes ${start2} to ${end} in frame ${frameNum} outside syncword` }); }; this.push = function(packet) { var i2 = 0, frameLength, protectionSkipBytes, oldBuffer, sampleCount, adtsFrameDuration; if (!handlePartialSegments) { frameNum = 0; } if (packet.type !== "audio") { return; } if (buffer && buffer.length) { oldBuffer = buffer; buffer = new Uint8Array(oldBuffer.byteLength + packet.data.byteLength); buffer.set(oldBuffer); buffer.set(packet.data, oldBuffer.byteLength); } else { buffer = packet.data; } var skip; while (i2 + 7 < buffer.length) { if (buffer[i2] !== 255 || (buffer[i2 + 1] & 246) !== 240) { if (typeof skip !== "number") { skip = i2; } i2++; continue; } if (typeof skip === "number") { this.skipWarn_(skip, i2); skip = null; } protectionSkipBytes = (~buffer[i2 + 1] & 1) * 2; frameLength = (buffer[i2 + 3] & 3) << 11 | buffer[i2 + 4] << 3 | (buffer[i2 + 5] & 224) >> 5; sampleCount = ((buffer[i2 + 6] & 3) + 1) * 1024; adtsFrameDuration = sampleCount * ONE_SECOND_IN_TS$2 / ADTS_SAMPLING_FREQUENCIES$1[(buffer[i2 + 2] & 60) >>> 2]; if (buffer.byteLength - i2 < frameLength) { break; } this.trigger("data", { pts: packet.pts + frameNum * adtsFrameDuration, dts: packet.dts + frameNum * adtsFrameDuration, sampleCount, audioobjecttype: (buffer[i2 + 2] >>> 6 & 3) + 1, channelcount: (buffer[i2 + 2] & 1) << 2 | (buffer[i2 + 3] & 192) >>> 6, samplerate: ADTS_SAMPLING_FREQUENCIES$1[(buffer[i2 + 2] & 60) >>> 2], samplingfrequencyindex: (buffer[i2 + 2] & 60) >>> 2, samplesize: 16, data: buffer.subarray(i2 + 7 + protectionSkipBytes, i2 + frameLength) }); frameNum++; i2 += frameLength; } if (typeof skip === "number") { this.skipWarn_(skip, i2); skip = null; } buffer = buffer.subarray(i2); }; this.flush = function() { frameNum = 0; this.trigger("done"); }; this.reset = function() { buffer = void 0; this.trigger("reset"); }; this.endTimeline = function() { buffer = void 0; this.trigger("endedtimeline"); }; }; AdtsStream$1.prototype = new Stream$3(); var adts = AdtsStream$1; var ExpGolomb$1; ExpGolomb$1 = function(workingData) { var workingBytesAvailable = workingData.byteLength, workingWord = 0, workingBitsAvailable = 0; this.length = function() { return 8 * workingBytesAvailable; }; this.bitsAvailable = function() { return 8 * workingBytesAvailable + workingBitsAvailable; }; this.loadWord = function() { var position2 = workingData.byteLength - workingBytesAvailable, workingBytes = new Uint8Array(4), availableBytes = Math.min(4, workingBytesAvailable); if (availableBytes === 0) { throw new Error("no bytes available"); } workingBytes.set(workingData.subarray(position2, position2 + availableBytes)); workingWord = new DataView(workingBytes.buffer).getUint32(0); workingBitsAvailable = availableBytes * 8; workingBytesAvailable -= availableBytes; }; this.skipBits = function(count) { var skipBytes; if (workingBitsAvailable > count) { workingWord <<= count; workingBitsAvailable -= count; } else { count -= workingBitsAvailable; skipBytes = Math.floor(count / 8); count -= skipBytes * 8; workingBytesAvailable -= skipBytes; this.loadWord(); workingWord <<= count; workingBitsAvailable -= count; } }; this.readBits = function(size) { var bits = Math.min(workingBitsAvailable, size), valu = workingWord >>> 32 - bits; workingBitsAvailable -= bits; if (workingBitsAvailable > 0) { workingWord <<= bits; } else if (workingBytesAvailable > 0) { this.loadWord(); } bits = size - bits; if (bits > 0) { return valu << bits | this.readBits(bits); } return valu; }; this.skipLeadingZeros = function() { var leadingZeroCount; for (leadingZeroCount = 0; leadingZeroCount < workingBitsAvailable; ++leadingZeroCount) { if ((workingWord & 2147483648 >>> leadingZeroCount) !== 0) { workingWord <<= leadingZeroCount; workingBitsAvailable -= leadingZeroCount; return leadingZeroCount; } } this.loadWord(); return leadingZeroCount + this.skipLeadingZeros(); }; this.skipUnsignedExpGolomb = function() { this.skipBits(1 + this.skipLeadingZeros()); }; this.skipExpGolomb = function() { this.skipBits(1 + this.skipLeadingZeros()); }; this.readUnsignedExpGolomb = function() { var clz = this.skipLeadingZeros(); return this.readBits(clz + 1) - 1; }; this.readExpGolomb = function() { var valu = this.readUnsignedExpGolomb(); if (1 & valu) { return 1 + valu >>> 1; } return -1 * (valu >>> 1); }; this.readBoolean = function() { return this.readBits(1) === 1; }; this.readUnsignedByte = function() { return this.readBits(8); }; this.loadWord(); }; var expGolomb = ExpGolomb$1; var Stream$2 = stream; var ExpGolomb = expGolomb; var H264Stream$1, NalByteStream; var PROFILES_WITH_OPTIONAL_SPS_DATA; NalByteStream = function() { var syncPoint = 0, i2, buffer; NalByteStream.prototype.init.call(this); this.push = function(data) { var swapBuffer; if (!buffer) { buffer = data.data; } else { swapBuffer = new Uint8Array(buffer.byteLength + data.data.byteLength); swapBuffer.set(buffer); swapBuffer.set(data.data, buffer.byteLength); buffer = swapBuffer; } var len = buffer.byteLength; for (; syncPoint < len - 3; syncPoint++) { if (buffer[syncPoint + 2] === 1) { i2 = syncPoint + 5; break; } } while (i2 < len) { switch (buffer[i2]) { case 0: if (buffer[i2 - 1] !== 0) { i2 += 2; break; } else if (buffer[i2 - 2] !== 0) { i2++; break; } if (syncPoint + 3 !== i2 - 2) { this.trigger("data", buffer.subarray(syncPoint + 3, i2 - 2)); } do { i2++; } while (buffer[i2] !== 1 && i2 < len); syncPoint = i2 - 2; i2 += 3; break; case 1: if (buffer[i2 - 1] !== 0 || buffer[i2 - 2] !== 0) { i2 += 3; break; } this.trigger("data", buffer.subarray(syncPoint + 3, i2 - 2)); syncPoint = i2 - 2; i2 += 3; break; default: i2 += 3; break; } } buffer = buffer.subarray(syncPoint); i2 -= syncPoint; syncPoint = 0; }; this.reset = function() { buffer = null; syncPoint = 0; this.trigger("reset"); }; this.flush = function() { if (buffer && buffer.byteLength > 3) { this.trigger("data", buffer.subarray(syncPoint + 3)); } buffer = null; syncPoint = 0; this.trigger("done"); }; this.endTimeline = function() { this.flush(); this.trigger("endedtimeline"); }; }; NalByteStream.prototype = new Stream$2(); PROFILES_WITH_OPTIONAL_SPS_DATA = { 100: true, 110: true, 122: true, 244: true, 44: true, 83: true, 86: true, 118: true, 128: true, 138: true, 139: true, 134: true }; H264Stream$1 = function() { var nalByteStream = new NalByteStream(), self2, trackId, currentPts, currentDts, discardEmulationPreventionBytes5, readSequenceParameterSet, skipScalingList; H264Stream$1.prototype.init.call(this); self2 = this; this.push = function(packet) { if (packet.type !== "video") { return; } trackId = packet.trackId; currentPts = packet.pts; currentDts = packet.dts; nalByteStream.push(packet); }; nalByteStream.on("data", function(data) { var event2 = { trackId, pts: currentPts, dts: currentDts, data, nalUnitTypeCode: data[0] & 31 }; switch (event2.nalUnitTypeCode) { case 5: event2.nalUnitType = "slice_layer_without_partitioning_rbsp_idr"; break; case 6: event2.nalUnitType = "sei_rbsp"; event2.escapedRBSP = discardEmulationPreventionBytes5(data.subarray(1)); break; case 7: event2.nalUnitType = "seq_parameter_set_rbsp"; event2.escapedRBSP = discardEmulationPreventionBytes5(data.subarray(1)); event2.config = readSequenceParameterSet(event2.escapedRBSP); break; case 8: event2.nalUnitType = "pic_parameter_set_rbsp"; break; case 9: event2.nalUnitType = "access_unit_delimiter_rbsp"; break; } self2.trigger("data", event2); }); nalByteStream.on("done", function() { self2.trigger("done"); }); nalByteStream.on("partialdone", function() { self2.trigger("partialdone"); }); nalByteStream.on("reset", function() { self2.trigger("reset"); }); nalByteStream.on("endedtimeline", function() { self2.trigger("endedtimeline"); }); this.flush = function() { nalByteStream.flush(); }; this.partialFlush = function() { nalByteStream.partialFlush(); }; this.reset = function() { nalByteStream.reset(); }; this.endTimeline = function() { nalByteStream.endTimeline(); }; skipScalingList = function(count, expGolombDecoder) { var lastScale = 8, nextScale = 8, j, deltaScale; for (j = 0; j < count; j++) { if (nextScale !== 0) { deltaScale = expGolombDecoder.readExpGolomb(); nextScale = (lastScale + deltaScale + 256) % 256; } lastScale = nextScale === 0 ? lastScale : nextScale; } }; discardEmulationPreventionBytes5 = function(data) { var length = data.byteLength, emulationPreventionBytesPositions = [], i2 = 1, newLength, newData; while (i2 < length - 2) { if (data[i2] === 0 && data[i2 + 1] === 0 && data[i2 + 2] === 3) { emulationPreventionBytesPositions.push(i2 + 2); i2 += 2; } else { i2++; } } if (emulationPreventionBytesPositions.length === 0) { return data; } newLength = length - emulationPreventionBytesPositions.length; newData = new Uint8Array(newLength); var sourceIndex = 0; for (i2 = 0; i2 < newLength; sourceIndex++, i2++) { if (sourceIndex === emulationPreventionBytesPositions[0]) { sourceIndex++; emulationPreventionBytesPositions.shift(); } newData[i2] = data[sourceIndex]; } return newData; }; readSequenceParameterSet = function(data) { var frameCropLeftOffset = 0, frameCropRightOffset = 0, frameCropTopOffset = 0, frameCropBottomOffset = 0, expGolombDecoder, profileIdc, levelIdc, profileCompatibility, chromaFormatIdc, picOrderCntType, numRefFramesInPicOrderCntCycle, picWidthInMbsMinus1, picHeightInMapUnitsMinus1, frameMbsOnlyFlag, scalingListCount, sarRatio = [1, 1], aspectRatioIdc, i2; expGolombDecoder = new ExpGolomb(data); profileIdc = expGolombDecoder.readUnsignedByte(); profileCompatibility = expGolombDecoder.readUnsignedByte(); levelIdc = expGolombDecoder.readUnsignedByte(); expGolombDecoder.skipUnsignedExpGolomb(); if (PROFILES_WITH_OPTIONAL_SPS_DATA[profileIdc]) { chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb(); if (chromaFormatIdc === 3) { expGolombDecoder.skipBits(1); } expGolombDecoder.skipUnsignedExpGolomb(); expGolombDecoder.skipUnsignedExpGolomb(); expGolombDecoder.skipBits(1); if (expGolombDecoder.readBoolean()) { scalingListCount = chromaFormatIdc !== 3 ? 8 : 12; for (i2 = 0; i2 < scalingListCount; i2++) { if (expGolombDecoder.readBoolean()) { if (i2 < 6) { skipScalingList(16, expGolombDecoder); } else { skipScalingList(64, expGolombDecoder); } } } } } expGolombDecoder.skipUnsignedExpGolomb(); picOrderCntType = expGolombDecoder.readUnsignedExpGolomb(); if (picOrderCntType === 0) { expGolombDecoder.readUnsignedExpGolomb(); } else if (picOrderCntType === 1) { expGolombDecoder.skipBits(1); expGolombDecoder.skipExpGolomb(); expGolombDecoder.skipExpGolomb(); numRefFramesInPicOrderCntCycle = expGolombDecoder.readUnsignedExpGolomb(); for (i2 = 0; i2 < numRefFramesInPicOrderCntCycle; i2++) { expGolombDecoder.skipExpGolomb(); } } expGolombDecoder.skipUnsignedExpGolomb(); expGolombDecoder.skipBits(1); picWidthInMbsMinus1 = expGolombDecoder.readUnsignedExpGolomb(); picHeightInMapUnitsMinus1 = expGolombDecoder.readUnsignedExpGolomb(); frameMbsOnlyFlag = expGolombDecoder.readBits(1); if (frameMbsOnlyFlag === 0) { expGolombDecoder.skipBits(1); } expGolombDecoder.skipBits(1); if (expGolombDecoder.readBoolean()) { frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb(); frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb(); frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb(); frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb(); } if (expGolombDecoder.readBoolean()) { if (expGolombDecoder.readBoolean()) { aspectRatioIdc = expGolombDecoder.readUnsignedByte(); switch (aspectRatioIdc) { case 1: sarRatio = [1, 1]; break; case 2: sarRatio = [12, 11]; break; case 3: sarRatio = [10, 11]; break; case 4: sarRatio = [16, 11]; break; case 5: sarRatio = [40, 33]; break; case 6: sarRatio = [24, 11]; break; case 7: sarRatio = [20, 11]; break; case 8: sarRatio = [32, 11]; break; case 9: sarRatio = [80, 33]; break; case 10: sarRatio = [18, 11]; break; case 11: sarRatio = [15, 11]; break; case 12: sarRatio = [64, 33]; break; case 13: sarRatio = [160, 99]; break; case 14: sarRatio = [4, 3]; break; case 15: sarRatio = [3, 2]; break; case 16: sarRatio = [2, 1]; break; case 255: { sarRatio = [expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte(), expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte()]; break; } } if (sarRatio) { sarRatio[0] / sarRatio[1]; } } } return { profileIdc, levelIdc, profileCompatibility, width: (picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2, height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - frameCropTopOffset * 2 - frameCropBottomOffset * 2, sarRatio }; }; }; H264Stream$1.prototype = new Stream$2(); var h2643 = { H264Stream: H264Stream$1, NalByteStream }; var ADTS_SAMPLING_FREQUENCIES = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; var parseId3TagSize = function(header, byteIndex) { var returnSize = header[byteIndex + 6] << 21 | header[byteIndex + 7] << 14 | header[byteIndex + 8] << 7 | header[byteIndex + 9], flags = header[byteIndex + 5], footerPresent = (flags & 16) >> 4; returnSize = returnSize >= 0 ? returnSize : 0; if (footerPresent) { return returnSize + 20; } return returnSize + 10; }; var getId3Offset4 = function(data, offset) { if (data.length - offset < 10 || data[offset] !== "I".charCodeAt(0) || data[offset + 1] !== "D".charCodeAt(0) || data[offset + 2] !== "3".charCodeAt(0)) { return offset; } offset += parseId3TagSize(data, offset); return getId3Offset4(data, offset); }; var isLikelyAacData$1 = function(data) { var offset = getId3Offset4(data, 0); return data.length >= offset + 2 && (data[offset] & 255) === 255 && (data[offset + 1] & 240) === 240 && (data[offset + 1] & 22) === 16; }; var parseSyncSafeInteger = function(data) { return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3]; }; var percentEncode = function(bytes, start2, end) { var i2, result = ""; for (i2 = start2; i2 < end; i2++) { result += "%" + ("00" + bytes[i2].toString(16)).slice(-2); } return result; }; var parseIso88591 = function(bytes, start2, end) { return unescape(percentEncode(bytes, start2, end)); }; var parseAdtsSize = function(header, byteIndex) { var lowThree = (header[byteIndex + 5] & 224) >> 5, middle = header[byteIndex + 4] << 3, highTwo = header[byteIndex + 3] & 3 << 11; return highTwo | middle | lowThree; }; var parseType$4 = function(header, byteIndex) { if (header[byteIndex] === "I".charCodeAt(0) && header[byteIndex + 1] === "D".charCodeAt(0) && header[byteIndex + 2] === "3".charCodeAt(0)) { return "timed-metadata"; } else if (header[byteIndex] & true && (header[byteIndex + 1] & 240) === 240) { return "audio"; } return null; }; var parseSampleRate = function(packet) { var i2 = 0; while (i2 + 5 < packet.length) { if (packet[i2] !== 255 || (packet[i2 + 1] & 246) !== 240) { i2++; continue; } return ADTS_SAMPLING_FREQUENCIES[(packet[i2 + 2] & 60) >>> 2]; } return null; }; var parseAacTimestamp = function(packet) { var frameStart, frameSize, frame, frameHeader; frameStart = 10; if (packet[5] & 64) { frameStart += 4; frameStart += parseSyncSafeInteger(packet.subarray(10, 14)); } do { frameSize = parseSyncSafeInteger(packet.subarray(frameStart + 4, frameStart + 8)); if (frameSize < 1) { return null; } frameHeader = String.fromCharCode(packet[frameStart], packet[frameStart + 1], packet[frameStart + 2], packet[frameStart + 3]); if (frameHeader === "PRIV") { frame = packet.subarray(frameStart + 10, frameStart + frameSize + 10); for (var i2 = 0; i2 < frame.byteLength; i2++) { if (frame[i2] === 0) { var owner = parseIso88591(frame, 0, i2); if (owner === "com.apple.streaming.transportStreamTimestamp") { var d2 = frame.subarray(i2 + 1); var size = (d2[3] & 1) << 30 | d2[4] << 22 | d2[5] << 14 | d2[6] << 6 | d2[7] >>> 2; size *= 4; size += d2[7] & 3; return size; } break; } } } frameStart += 10; frameStart += frameSize; } while (frameStart < packet.byteLength); return null; }; var utils2 = { isLikelyAacData: isLikelyAacData$1, parseId3TagSize, parseAdtsSize, parseType: parseType$4, parseSampleRate, parseAacTimestamp }; var Stream$12 = stream; var aacUtils = utils2; var AacStream$1; AacStream$1 = function() { var everything = new Uint8Array(), timeStamp = 0; AacStream$1.prototype.init.call(this); this.setTimestamp = function(timestamp) { timeStamp = timestamp; }; this.push = function(bytes) { var frameSize = 0, byteIndex = 0, bytesLeft, chunk, packet, tempLength; if (everything.length) { tempLength = everything.length; everything = new Uint8Array(bytes.byteLength + tempLength); everything.set(everything.subarray(0, tempLength)); everything.set(bytes, tempLength); } else { everything = bytes; } while (everything.length - byteIndex >= 3) { if (everything[byteIndex] === "I".charCodeAt(0) && everything[byteIndex + 1] === "D".charCodeAt(0) && everything[byteIndex + 2] === "3".charCodeAt(0)) { if (everything.length - byteIndex < 10) { break; } frameSize = aacUtils.parseId3TagSize(everything, byteIndex); if (byteIndex + frameSize > everything.length) { break; } chunk = { type: "timed-metadata", data: everything.subarray(byteIndex, byteIndex + frameSize) }; this.trigger("data", chunk); byteIndex += frameSize; continue; } else if ((everything[byteIndex] & 255) === 255 && (everything[byteIndex + 1] & 240) === 240) { if (everything.length - byteIndex < 7) { break; } frameSize = aacUtils.parseAdtsSize(everything, byteIndex); if (byteIndex + frameSize > everything.length) { break; } packet = { type: "audio", data: everything.subarray(byteIndex, byteIndex + frameSize), pts: timeStamp, dts: timeStamp }; this.trigger("data", packet); byteIndex += frameSize; continue; } byteIndex++; } bytesLeft = everything.length - byteIndex; if (bytesLeft > 0) { everything = everything.subarray(byteIndex); } else { everything = new Uint8Array(); } }; this.reset = function() { everything = new Uint8Array(); this.trigger("reset"); }; this.endTimeline = function() { everything = new Uint8Array(); this.trigger("endedtimeline"); }; }; AacStream$1.prototype = new Stream$12(); var aac3 = AacStream$1; var AUDIO_PROPERTIES$1 = ["audioobjecttype", "channelcount", "samplerate", "samplingfrequencyindex", "samplesize"]; var audioProperties = AUDIO_PROPERTIES$1; var VIDEO_PROPERTIES$1 = ["width", "height", "profileIdc", "levelIdc", "profileCompatibility", "sarRatio"]; var videoProperties = VIDEO_PROPERTIES$1; var Stream2 = stream; var mp43 = mp4Generator; var frameUtils = frameUtils$1; var audioFrameUtils = audioFrameUtils$1; var trackDecodeInfo = trackDecodeInfo$1; var m2ts = m2ts_1; var clock2 = clock$2; var AdtsStream = adts; var H264Stream = h2643.H264Stream; var AacStream = aac3; var isLikelyAacData = utils2.isLikelyAacData; var ONE_SECOND_IN_TS$12 = clock$2.ONE_SECOND_IN_TS; var AUDIO_PROPERTIES = audioProperties; var VIDEO_PROPERTIES = videoProperties; var VideoSegmentStream, AudioSegmentStream, Transmuxer, CoalesceStream; var retriggerForStream = function(key, event2) { event2.stream = key; this.trigger("log", event2); }; var addPipelineLogRetriggers = function(transmuxer2, pipeline) { var keys3 = Object.keys(pipeline); for (var i2 = 0; i2 < keys3.length; i2++) { var key = keys3[i2]; if (key === "headOfPipeline" || !pipeline[key].on) { continue; } pipeline[key].on("log", retriggerForStream.bind(transmuxer2, key)); } }; var arrayEquals = function(a, b) { var i2; if (a.length !== b.length) { return false; } for (i2 = 0; i2 < a.length; i2++) { if (a[i2] !== b[i2]) { return false; } } return true; }; var generateSegmentTimingInfo = function(baseMediaDecodeTime, startDts, startPts, endDts, endPts, prependedContentDuration) { var ptsOffsetFromDts = startPts - startDts, decodeDuration = endDts - startDts, presentationDuration = endPts - startPts; return { start: { dts: baseMediaDecodeTime, pts: baseMediaDecodeTime + ptsOffsetFromDts }, end: { dts: baseMediaDecodeTime + decodeDuration, pts: baseMediaDecodeTime + presentationDuration }, prependedContentDuration, baseMediaDecodeTime }; }; AudioSegmentStream = function(track, options2) { var adtsFrames = [], sequenceNumber, earliestAllowedDts = 0, audioAppendStartTs = 0, videoBaseMediaDecodeTime = Infinity; options2 = options2 || {}; sequenceNumber = options2.firstSequenceNumber || 0; AudioSegmentStream.prototype.init.call(this); this.push = function(data) { trackDecodeInfo.collectDtsInfo(track, data); if (track) { AUDIO_PROPERTIES.forEach(function(prop) { track[prop] = data[prop]; }); } adtsFrames.push(data); }; this.setEarliestDts = function(earliestDts) { earliestAllowedDts = earliestDts; }; this.setVideoBaseMediaDecodeTime = function(baseMediaDecodeTime) { videoBaseMediaDecodeTime = baseMediaDecodeTime; }; this.setAudioAppendStart = function(timestamp) { audioAppendStartTs = timestamp; }; this.flush = function() { var frames, moof2, mdat2, boxes, frameDuration, segmentDuration, videoClockCyclesOfSilencePrefixed; if (adtsFrames.length === 0) { this.trigger("done", "AudioSegmentStream"); return; } frames = audioFrameUtils.trimAdtsFramesByEarliestDts(adtsFrames, track, earliestAllowedDts); track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options2.keepOriginalTimestamps); videoClockCyclesOfSilencePrefixed = audioFrameUtils.prefixWithSilence(track, frames, audioAppendStartTs, videoBaseMediaDecodeTime); track.samples = audioFrameUtils.generateSampleTable(frames); mdat2 = mp43.mdat(audioFrameUtils.concatenateFrameData(frames)); adtsFrames = []; moof2 = mp43.moof(sequenceNumber, [track]); boxes = new Uint8Array(moof2.byteLength + mdat2.byteLength); sequenceNumber++; boxes.set(moof2); boxes.set(mdat2, moof2.byteLength); trackDecodeInfo.clearDtsInfo(track); frameDuration = Math.ceil(ONE_SECOND_IN_TS$12 * 1024 / track.samplerate); if (frames.length) { segmentDuration = frames.length * frameDuration; this.trigger("segmentTimingInfo", generateSegmentTimingInfo( clock2.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate), frames[0].dts, frames[0].pts, frames[0].dts + segmentDuration, frames[0].pts + segmentDuration, videoClockCyclesOfSilencePrefixed || 0 )); this.trigger("timingInfo", { start: frames[0].pts, end: frames[0].pts + segmentDuration }); } this.trigger("data", { track, boxes }); this.trigger("done", "AudioSegmentStream"); }; this.reset = function() { trackDecodeInfo.clearDtsInfo(track); adtsFrames = []; this.trigger("reset"); }; }; AudioSegmentStream.prototype = new Stream2(); VideoSegmentStream = function(track, options2) { var sequenceNumber, nalUnits = [], gopsToAlignWith = [], config, pps; options2 = options2 || {}; sequenceNumber = options2.firstSequenceNumber || 0; VideoSegmentStream.prototype.init.call(this); delete track.minPTS; this.gopCache_ = []; this.push = function(nalUnit) { trackDecodeInfo.collectDtsInfo(track, nalUnit); if (nalUnit.nalUnitType === "seq_parameter_set_rbsp" && !config) { config = nalUnit.config; track.sps = [nalUnit.data]; VIDEO_PROPERTIES.forEach(function(prop) { track[prop] = config[prop]; }, this); } if (nalUnit.nalUnitType === "pic_parameter_set_rbsp" && !pps) { pps = nalUnit.data; track.pps = [nalUnit.data]; } nalUnits.push(nalUnit); }; this.flush = function() { var frames, gopForFusion, gops, moof2, mdat2, boxes, prependedContentDuration = 0, firstGop, lastGop; while (nalUnits.length) { if (nalUnits[0].nalUnitType === "access_unit_delimiter_rbsp") { break; } nalUnits.shift(); } if (nalUnits.length === 0) { this.resetStream_(); this.trigger("done", "VideoSegmentStream"); return; } frames = frameUtils.groupNalsIntoFrames(nalUnits); gops = frameUtils.groupFramesIntoGops(frames); if (!gops[0][0].keyFrame) { gopForFusion = this.getGopForFusion_(nalUnits[0], track); if (gopForFusion) { prependedContentDuration = gopForFusion.duration; gops.unshift(gopForFusion); gops.byteLength += gopForFusion.byteLength; gops.nalCount += gopForFusion.nalCount; gops.pts = gopForFusion.pts; gops.dts = gopForFusion.dts; gops.duration += gopForFusion.duration; } else { gops = frameUtils.extendFirstKeyFrame(gops); } } if (gopsToAlignWith.length) { var alignedGops; if (options2.alignGopsAtEnd) { alignedGops = this.alignGopsAtEnd_(gops); } else { alignedGops = this.alignGopsAtStart_(gops); } if (!alignedGops) { this.gopCache_.unshift({ gop: gops.pop(), pps: track.pps, sps: track.sps }); this.gopCache_.length = Math.min(6, this.gopCache_.length); nalUnits = []; this.resetStream_(); this.trigger("done", "VideoSegmentStream"); return; } trackDecodeInfo.clearDtsInfo(track); gops = alignedGops; } trackDecodeInfo.collectDtsInfo(track, gops); track.samples = frameUtils.generateSampleTable(gops); mdat2 = mp43.mdat(frameUtils.concatenateNalData(gops)); track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options2.keepOriginalTimestamps); this.trigger("processedGopsInfo", gops.map(function(gop) { return { pts: gop.pts, dts: gop.dts, byteLength: gop.byteLength }; })); firstGop = gops[0]; lastGop = gops[gops.length - 1]; this.trigger("segmentTimingInfo", generateSegmentTimingInfo(track.baseMediaDecodeTime, firstGop.dts, firstGop.pts, lastGop.dts + lastGop.duration, lastGop.pts + lastGop.duration, prependedContentDuration)); this.trigger("timingInfo", { start: gops[0].pts, end: gops[gops.length - 1].pts + gops[gops.length - 1].duration }); this.gopCache_.unshift({ gop: gops.pop(), pps: track.pps, sps: track.sps }); this.gopCache_.length = Math.min(6, this.gopCache_.length); nalUnits = []; this.trigger("baseMediaDecodeTime", track.baseMediaDecodeTime); this.trigger("timelineStartInfo", track.timelineStartInfo); moof2 = mp43.moof(sequenceNumber, [track]); boxes = new Uint8Array(moof2.byteLength + mdat2.byteLength); sequenceNumber++; boxes.set(moof2); boxes.set(mdat2, moof2.byteLength); this.trigger("data", { track, boxes }); this.resetStream_(); this.trigger("done", "VideoSegmentStream"); }; this.reset = function() { this.resetStream_(); nalUnits = []; this.gopCache_.length = 0; gopsToAlignWith.length = 0; this.trigger("reset"); }; this.resetStream_ = function() { trackDecodeInfo.clearDtsInfo(track); config = void 0; pps = void 0; }; this.getGopForFusion_ = function(nalUnit) { var halfSecond = 45e3, allowableOverlap = 1e4, nearestDistance = Infinity, dtsDistance, nearestGopObj, currentGop, currentGopObj, i2; for (i2 = 0; i2 < this.gopCache_.length; i2++) { currentGopObj = this.gopCache_[i2]; currentGop = currentGopObj.gop; if (!(track.pps && arrayEquals(track.pps[0], currentGopObj.pps[0])) || !(track.sps && arrayEquals(track.sps[0], currentGopObj.sps[0]))) { continue; } if (currentGop.dts < track.timelineStartInfo.dts) { continue; } dtsDistance = nalUnit.dts - currentGop.dts - currentGop.duration; if (dtsDistance >= -allowableOverlap && dtsDistance <= halfSecond) { if (!nearestGopObj || nearestDistance > dtsDistance) { nearestGopObj = currentGopObj; nearestDistance = dtsDistance; } } } if (nearestGopObj) { return nearestGopObj.gop; } return null; }; this.alignGopsAtStart_ = function(gops) { var alignIndex, gopIndex, align, gop, byteLength, nalCount, duration5, alignedGops; byteLength = gops.byteLength; nalCount = gops.nalCount; duration5 = gops.duration; alignIndex = gopIndex = 0; while (alignIndex < gopsToAlignWith.length && gopIndex < gops.length) { align = gopsToAlignWith[alignIndex]; gop = gops[gopIndex]; if (align.pts === gop.pts) { break; } if (gop.pts > align.pts) { alignIndex++; continue; } gopIndex++; byteLength -= gop.byteLength; nalCount -= gop.nalCount; duration5 -= gop.duration; } if (gopIndex === 0) { return gops; } if (gopIndex === gops.length) { return null; } alignedGops = gops.slice(gopIndex); alignedGops.byteLength = byteLength; alignedGops.duration = duration5; alignedGops.nalCount = nalCount; alignedGops.pts = alignedGops[0].pts; alignedGops.dts = alignedGops[0].dts; return alignedGops; }; this.alignGopsAtEnd_ = function(gops) { var alignIndex, gopIndex, align, gop, alignEndIndex, matchFound; alignIndex = gopsToAlignWith.length - 1; gopIndex = gops.length - 1; alignEndIndex = null; matchFound = false; while (alignIndex >= 0 && gopIndex >= 0) { align = gopsToAlignWith[alignIndex]; gop = gops[gopIndex]; if (align.pts === gop.pts) { matchFound = true; break; } if (align.pts > gop.pts) { alignIndex--; continue; } if (alignIndex === gopsToAlignWith.length - 1) { alignEndIndex = gopIndex; } gopIndex--; } if (!matchFound && alignEndIndex === null) { return null; } var trimIndex; if (matchFound) { trimIndex = gopIndex; } else { trimIndex = alignEndIndex; } if (trimIndex === 0) { return gops; } var alignedGops = gops.slice(trimIndex); var metadata = alignedGops.reduce(function(total, gop2) { total.byteLength += gop2.byteLength; total.duration += gop2.duration; total.nalCount += gop2.nalCount; return total; }, { byteLength: 0, duration: 0, nalCount: 0 }); alignedGops.byteLength = metadata.byteLength; alignedGops.duration = metadata.duration; alignedGops.nalCount = metadata.nalCount; alignedGops.pts = alignedGops[0].pts; alignedGops.dts = alignedGops[0].dts; return alignedGops; }; this.alignGopsWith = function(newGopsToAlignWith) { gopsToAlignWith = newGopsToAlignWith; }; }; VideoSegmentStream.prototype = new Stream2(); CoalesceStream = function(options2, metadataStream2) { this.numberOfTracks = 0; this.metadataStream = metadataStream2; options2 = options2 || {}; if (typeof options2.remux !== "undefined") { this.remuxTracks = !!options2.remux; } else { this.remuxTracks = true; } if (typeof options2.keepOriginalTimestamps === "boolean") { this.keepOriginalTimestamps = options2.keepOriginalTimestamps; } else { this.keepOriginalTimestamps = false; } this.pendingTracks = []; this.videoTrack = null; this.pendingBoxes = []; this.pendingCaptions = []; this.pendingMetadata = []; this.pendingBytes = 0; this.emittedTracks = 0; CoalesceStream.prototype.init.call(this); this.push = function(output) { if (output.text) { return this.pendingCaptions.push(output); } if (output.frames) { return this.pendingMetadata.push(output); } this.pendingTracks.push(output.track); this.pendingBytes += output.boxes.byteLength; if (output.track.type === "video") { this.videoTrack = output.track; this.pendingBoxes.push(output.boxes); } if (output.track.type === "audio") { this.audioTrack = output.track; this.pendingBoxes.unshift(output.boxes); } }; }; CoalesceStream.prototype = new Stream2(); CoalesceStream.prototype.flush = function(flushSource) { var offset = 0, event2 = { captions: [], captionStreams: {}, metadata: [], info: {} }, caption, id32, initSegment, timelineStartPts = 0, i2; if (this.pendingTracks.length < this.numberOfTracks) { if (flushSource !== "VideoSegmentStream" && flushSource !== "AudioSegmentStream") { return; } else if (this.remuxTracks) { return; } else if (this.pendingTracks.length === 0) { this.emittedTracks++; if (this.emittedTracks >= this.numberOfTracks) { this.trigger("done"); this.emittedTracks = 0; } return; } } if (this.videoTrack) { timelineStartPts = this.videoTrack.timelineStartInfo.pts; VIDEO_PROPERTIES.forEach(function(prop) { event2.info[prop] = this.videoTrack[prop]; }, this); } else if (this.audioTrack) { timelineStartPts = this.audioTrack.timelineStartInfo.pts; AUDIO_PROPERTIES.forEach(function(prop) { event2.info[prop] = this.audioTrack[prop]; }, this); } if (this.videoTrack || this.audioTrack) { if (this.pendingTracks.length === 1) { event2.type = this.pendingTracks[0].type; } else { event2.type = "combined"; } this.emittedTracks += this.pendingTracks.length; initSegment = mp43.initSegment(this.pendingTracks); event2.initSegment = new Uint8Array(initSegment.byteLength); event2.initSegment.set(initSegment); event2.data = new Uint8Array(this.pendingBytes); for (i2 = 0; i2 < this.pendingBoxes.length; i2++) { event2.data.set(this.pendingBoxes[i2], offset); offset += this.pendingBoxes[i2].byteLength; } for (i2 = 0; i2 < this.pendingCaptions.length; i2++) { caption = this.pendingCaptions[i2]; caption.startTime = clock2.metadataTsToSeconds(caption.startPts, timelineStartPts, this.keepOriginalTimestamps); caption.endTime = clock2.metadataTsToSeconds(caption.endPts, timelineStartPts, this.keepOriginalTimestamps); event2.captionStreams[caption.stream] = true; event2.captions.push(caption); } for (i2 = 0; i2 < this.pendingMetadata.length; i2++) { id32 = this.pendingMetadata[i2]; id32.cueTime = clock2.metadataTsToSeconds(id32.pts, timelineStartPts, this.keepOriginalTimestamps); event2.metadata.push(id32); } event2.metadata.dispatchType = this.metadataStream.dispatchType; this.pendingTracks.length = 0; this.videoTrack = null; this.pendingBoxes.length = 0; this.pendingCaptions.length = 0; this.pendingBytes = 0; this.pendingMetadata.length = 0; this.trigger("data", event2); for (i2 = 0; i2 < event2.captions.length; i2++) { caption = event2.captions[i2]; this.trigger("caption", caption); } for (i2 = 0; i2 < event2.metadata.length; i2++) { id32 = event2.metadata[i2]; this.trigger("id3Frame", id32); } } if (this.emittedTracks >= this.numberOfTracks) { this.trigger("done"); this.emittedTracks = 0; } }; CoalesceStream.prototype.setRemux = function(val) { this.remuxTracks = val; }; Transmuxer = function(options2) { var self2 = this, hasFlushed = true, videoTrack, audioTrack; Transmuxer.prototype.init.call(this); options2 = options2 || {}; this.baseMediaDecodeTime = options2.baseMediaDecodeTime || 0; this.transmuxPipeline_ = {}; this.setupAacPipeline = function() { var pipeline = {}; this.transmuxPipeline_ = pipeline; pipeline.type = "aac"; pipeline.metadataStream = new m2ts.MetadataStream(); pipeline.aacStream = new AacStream(); pipeline.audioTimestampRolloverStream = new m2ts.TimestampRolloverStream("audio"); pipeline.timedMetadataTimestampRolloverStream = new m2ts.TimestampRolloverStream("timed-metadata"); pipeline.adtsStream = new AdtsStream(); pipeline.coalesceStream = new CoalesceStream(options2, pipeline.metadataStream); pipeline.headOfPipeline = pipeline.aacStream; pipeline.aacStream.pipe(pipeline.audioTimestampRolloverStream).pipe(pipeline.adtsStream); pipeline.aacStream.pipe(pipeline.timedMetadataTimestampRolloverStream).pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream); pipeline.metadataStream.on("timestamp", function(frame) { pipeline.aacStream.setTimestamp(frame.timeStamp); }); pipeline.aacStream.on("data", function(data) { if (data.type !== "timed-metadata" && data.type !== "audio" || pipeline.audioSegmentStream) { return; } audioTrack = audioTrack || { timelineStartInfo: { baseMediaDecodeTime: self2.baseMediaDecodeTime }, codec: "adts", type: "audio" }; pipeline.coalesceStream.numberOfTracks++; pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack, options2); pipeline.audioSegmentStream.on("log", self2.getLogTrigger_("audioSegmentStream")); pipeline.audioSegmentStream.on("timingInfo", self2.trigger.bind(self2, "audioTimingInfo")); pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream); self2.trigger("trackinfo", { hasAudio: !!audioTrack, hasVideo: !!videoTrack }); }); pipeline.coalesceStream.on("data", this.trigger.bind(this, "data")); pipeline.coalesceStream.on("done", this.trigger.bind(this, "done")); addPipelineLogRetriggers(this, pipeline); }; this.setupTsPipeline = function() { var pipeline = {}; this.transmuxPipeline_ = pipeline; pipeline.type = "ts"; pipeline.metadataStream = new m2ts.MetadataStream(); pipeline.packetStream = new m2ts.TransportPacketStream(); pipeline.parseStream = new m2ts.TransportParseStream(); pipeline.elementaryStream = new m2ts.ElementaryStream(); pipeline.timestampRolloverStream = new m2ts.TimestampRolloverStream(); pipeline.adtsStream = new AdtsStream(); pipeline.h264Stream = new H264Stream(); pipeline.captionStream = new m2ts.CaptionStream(options2); pipeline.coalesceStream = new CoalesceStream(options2, pipeline.metadataStream); pipeline.headOfPipeline = pipeline.packetStream; pipeline.packetStream.pipe(pipeline.parseStream).pipe(pipeline.elementaryStream).pipe(pipeline.timestampRolloverStream); pipeline.timestampRolloverStream.pipe(pipeline.h264Stream); pipeline.timestampRolloverStream.pipe(pipeline.adtsStream); pipeline.timestampRolloverStream.pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream); pipeline.h264Stream.pipe(pipeline.captionStream).pipe(pipeline.coalesceStream); pipeline.elementaryStream.on("data", function(data) { var i2; if (data.type === "metadata") { i2 = data.tracks.length; while (i2--) { if (!videoTrack && data.tracks[i2].type === "video") { videoTrack = data.tracks[i2]; videoTrack.timelineStartInfo.baseMediaDecodeTime = self2.baseMediaDecodeTime; } else if (!audioTrack && data.tracks[i2].type === "audio") { audioTrack = data.tracks[i2]; audioTrack.timelineStartInfo.baseMediaDecodeTime = self2.baseMediaDecodeTime; } } if (videoTrack && !pipeline.videoSegmentStream) { pipeline.coalesceStream.numberOfTracks++; pipeline.videoSegmentStream = new VideoSegmentStream(videoTrack, options2); pipeline.videoSegmentStream.on("log", self2.getLogTrigger_("videoSegmentStream")); pipeline.videoSegmentStream.on("timelineStartInfo", function(timelineStartInfo) { if (audioTrack && !options2.keepOriginalTimestamps) { audioTrack.timelineStartInfo = timelineStartInfo; pipeline.audioSegmentStream.setEarliestDts(timelineStartInfo.dts - self2.baseMediaDecodeTime); } }); pipeline.videoSegmentStream.on("processedGopsInfo", self2.trigger.bind(self2, "gopInfo")); pipeline.videoSegmentStream.on("segmentTimingInfo", self2.trigger.bind(self2, "videoSegmentTimingInfo")); pipeline.videoSegmentStream.on("baseMediaDecodeTime", function(baseMediaDecodeTime) { if (audioTrack) { pipeline.audioSegmentStream.setVideoBaseMediaDecodeTime(baseMediaDecodeTime); } }); pipeline.videoSegmentStream.on("timingInfo", self2.trigger.bind(self2, "videoTimingInfo")); pipeline.h264Stream.pipe(pipeline.videoSegmentStream).pipe(pipeline.coalesceStream); } if (audioTrack && !pipeline.audioSegmentStream) { pipeline.coalesceStream.numberOfTracks++; pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack, options2); pipeline.audioSegmentStream.on("log", self2.getLogTrigger_("audioSegmentStream")); pipeline.audioSegmentStream.on("timingInfo", self2.trigger.bind(self2, "audioTimingInfo")); pipeline.audioSegmentStream.on("segmentTimingInfo", self2.trigger.bind(self2, "audioSegmentTimingInfo")); pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream); } self2.trigger("trackinfo", { hasAudio: !!audioTrack, hasVideo: !!videoTrack }); } }); pipeline.coalesceStream.on("data", this.trigger.bind(this, "data")); pipeline.coalesceStream.on("id3Frame", function(id3Frame) { id3Frame.dispatchType = pipeline.metadataStream.dispatchType; self2.trigger("id3Frame", id3Frame); }); pipeline.coalesceStream.on("caption", this.trigger.bind(this, "caption")); pipeline.coalesceStream.on("done", this.trigger.bind(this, "done")); addPipelineLogRetriggers(this, pipeline); }; this.setBaseMediaDecodeTime = function(baseMediaDecodeTime) { var pipeline = this.transmuxPipeline_; if (!options2.keepOriginalTimestamps) { this.baseMediaDecodeTime = baseMediaDecodeTime; } if (audioTrack) { audioTrack.timelineStartInfo.dts = void 0; audioTrack.timelineStartInfo.pts = void 0; trackDecodeInfo.clearDtsInfo(audioTrack); if (pipeline.audioTimestampRolloverStream) { pipeline.audioTimestampRolloverStream.discontinuity(); } } if (videoTrack) { if (pipeline.videoSegmentStream) { pipeline.videoSegmentStream.gopCache_ = []; } videoTrack.timelineStartInfo.dts = void 0; videoTrack.timelineStartInfo.pts = void 0; trackDecodeInfo.clearDtsInfo(videoTrack); pipeline.captionStream.reset(); } if (pipeline.timestampRolloverStream) { pipeline.timestampRolloverStream.discontinuity(); } }; this.setAudioAppendStart = function(timestamp) { if (audioTrack) { this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(timestamp); } }; this.setRemux = function(val) { var pipeline = this.transmuxPipeline_; options2.remux = val; if (pipeline && pipeline.coalesceStream) { pipeline.coalesceStream.setRemux(val); } }; this.alignGopsWith = function(gopsToAlignWith) { if (videoTrack && this.transmuxPipeline_.videoSegmentStream) { this.transmuxPipeline_.videoSegmentStream.alignGopsWith(gopsToAlignWith); } }; this.getLogTrigger_ = function(key) { var self3 = this; return function(event2) { event2.stream = key; self3.trigger("log", event2); }; }; this.push = function(data) { if (hasFlushed) { var isAac = isLikelyAacData(data); if (isAac && this.transmuxPipeline_.type !== "aac") { this.setupAacPipeline(); } else if (!isAac && this.transmuxPipeline_.type !== "ts") { this.setupTsPipeline(); } hasFlushed = false; } this.transmuxPipeline_.headOfPipeline.push(data); }; this.flush = function() { hasFlushed = true; this.transmuxPipeline_.headOfPipeline.flush(); }; this.endTimeline = function() { this.transmuxPipeline_.headOfPipeline.endTimeline(); }; this.reset = function() { if (this.transmuxPipeline_.headOfPipeline) { this.transmuxPipeline_.headOfPipeline.reset(); } }; this.resetCaptions = function() { if (this.transmuxPipeline_.captionStream) { this.transmuxPipeline_.captionStream.reset(); } }; }; Transmuxer.prototype = new Stream2(); var transmuxer = { Transmuxer, VideoSegmentStream, AudioSegmentStream, AUDIO_PROPERTIES, VIDEO_PROPERTIES, generateSegmentTimingInfo }; var toUnsigned$3 = function(value) { return value >>> 0; }; var toHexString$1 = function(value) { return ("00" + value.toString(16)).slice(-2); }; var bin = { toUnsigned: toUnsigned$3, toHexString: toHexString$1 }; var parseType$3 = function(buffer) { var result = ""; result += String.fromCharCode(buffer[0]); result += String.fromCharCode(buffer[1]); result += String.fromCharCode(buffer[2]); result += String.fromCharCode(buffer[3]); return result; }; var parseType_1 = parseType$3; var toUnsigned$2 = bin.toUnsigned; var parseType$2 = parseType_1; var findBox$2 = function(data, path) { var results = [], i2, size, type3, end, subresults; if (!path.length) { return null; } for (i2 = 0; i2 < data.byteLength; ) { size = toUnsigned$2(data[i2] << 24 | data[i2 + 1] << 16 | data[i2 + 2] << 8 | data[i2 + 3]); type3 = parseType$2(data.subarray(i2 + 4, i2 + 8)); end = size > 1 ? i2 + size : data.byteLength; if (type3 === path[0]) { if (path.length === 1) { results.push(data.subarray(i2 + 8, end)); } else { subresults = findBox$2(data.subarray(i2 + 8, end), path.slice(1)); if (subresults.length) { results = results.concat(subresults); } } } i2 = end; } return results; }; var findBox_1 = findBox$2; var toUnsigned$1 = bin.toUnsigned; var getUint64$22 = numbers2.getUint64; var tfdt = function(data) { var result = { version: data[0], flags: new Uint8Array(data.subarray(1, 4)) }; if (result.version === 1) { result.baseMediaDecodeTime = getUint64$22(data.subarray(4)); } else { result.baseMediaDecodeTime = toUnsigned$1(data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]); } return result; }; var parseTfdt$2 = tfdt; var parseSampleFlags$1 = function(flags) { return { isLeading: (flags[0] & 12) >>> 2, dependsOn: flags[0] & 3, isDependedOn: (flags[1] & 192) >>> 6, hasRedundancy: (flags[1] & 48) >>> 4, paddingValue: (flags[1] & 14) >>> 1, isNonSyncSample: flags[1] & 1, degradationPriority: flags[2] << 8 | flags[3] }; }; var parseSampleFlags_1 = parseSampleFlags$1; var parseSampleFlags = parseSampleFlags_1; var trun = function(data) { var result = { version: data[0], flags: new Uint8Array(data.subarray(1, 4)), samples: [] }, view = new DataView(data.buffer, data.byteOffset, data.byteLength), dataOffsetPresent = result.flags[2] & 1, firstSampleFlagsPresent = result.flags[2] & 4, sampleDurationPresent = result.flags[1] & 1, sampleSizePresent = result.flags[1] & 2, sampleFlagsPresent = result.flags[1] & 4, sampleCompositionTimeOffsetPresent = result.flags[1] & 8, sampleCount = view.getUint32(4), offset = 8, sample; if (dataOffsetPresent) { result.dataOffset = view.getInt32(offset); offset += 4; } if (firstSampleFlagsPresent && sampleCount) { sample = { flags: parseSampleFlags(data.subarray(offset, offset + 4)) }; offset += 4; if (sampleDurationPresent) { sample.duration = view.getUint32(offset); offset += 4; } if (sampleSizePresent) { sample.size = view.getUint32(offset); offset += 4; } if (sampleCompositionTimeOffsetPresent) { if (result.version === 1) { sample.compositionTimeOffset = view.getInt32(offset); } else { sample.compositionTimeOffset = view.getUint32(offset); } offset += 4; } result.samples.push(sample); sampleCount--; } while (sampleCount--) { sample = {}; if (sampleDurationPresent) { sample.duration = view.getUint32(offset); offset += 4; } if (sampleSizePresent) { sample.size = view.getUint32(offset); offset += 4; } if (sampleFlagsPresent) { sample.flags = parseSampleFlags(data.subarray(offset, offset + 4)); offset += 4; } if (sampleCompositionTimeOffsetPresent) { if (result.version === 1) { sample.compositionTimeOffset = view.getInt32(offset); } else { sample.compositionTimeOffset = view.getUint32(offset); } offset += 4; } result.samples.push(sample); } return result; }; var parseTrun$2 = trun; var tfhd = function(data) { var view = new DataView(data.buffer, data.byteOffset, data.byteLength), result = { version: data[0], flags: new Uint8Array(data.subarray(1, 4)), trackId: view.getUint32(4) }, baseDataOffsetPresent = result.flags[2] & 1, sampleDescriptionIndexPresent = result.flags[2] & 2, defaultSampleDurationPresent = result.flags[2] & 8, defaultSampleSizePresent = result.flags[2] & 16, defaultSampleFlagsPresent = result.flags[2] & 32, durationIsEmpty = result.flags[0] & 65536, defaultBaseIsMoof = result.flags[0] & 131072, i2; i2 = 8; if (baseDataOffsetPresent) { i2 += 4; result.baseDataOffset = view.getUint32(12); i2 += 4; } if (sampleDescriptionIndexPresent) { result.sampleDescriptionIndex = view.getUint32(i2); i2 += 4; } if (defaultSampleDurationPresent) { result.defaultSampleDuration = view.getUint32(i2); i2 += 4; } if (defaultSampleSizePresent) { result.defaultSampleSize = view.getUint32(i2); i2 += 4; } if (defaultSampleFlagsPresent) { result.defaultSampleFlags = view.getUint32(i2); } if (durationIsEmpty) { result.durationIsEmpty = true; } if (!baseDataOffsetPresent && defaultBaseIsMoof) { result.baseDataOffsetIsMoof = true; } return result; }; var parseTfhd$2 = tfhd; var win2; if (typeof window !== "undefined") { win2 = window; } else if (typeof commonjsGlobal2 !== "undefined") { win2 = commonjsGlobal2; } else if (typeof self !== "undefined") { win2 = self; } else { win2 = {}; } var window_12 = win2; var discardEmulationPreventionBytes4 = captionPacketParser.discardEmulationPreventionBytes; var CaptionStream = captionStream.CaptionStream; var findBox$12 = findBox_1; var parseTfdt$1 = parseTfdt$2; var parseTrun$1 = parseTrun$2; var parseTfhd$1 = parseTfhd$2; var window$22 = window_12; var mapToSample = function(offset, samples) { var approximateOffset = offset; for (var i2 = 0; i2 < samples.length; i2++) { var sample = samples[i2]; if (approximateOffset < sample.size) { return sample; } approximateOffset -= sample.size; } return null; }; var findSeiNals = function(avcStream, samples, trackId) { var avcView = new DataView(avcStream.buffer, avcStream.byteOffset, avcStream.byteLength), result = { logs: [], seiNals: [] }, seiNal, i2, length, lastMatchedSample; for (i2 = 0; i2 + 4 < avcStream.length; i2 += length) { length = avcView.getUint32(i2); i2 += 4; if (length <= 0) { continue; } switch (avcStream[i2] & 31) { case 6: var data = avcStream.subarray(i2 + 1, i2 + 1 + length); var matchingSample = mapToSample(i2, samples); seiNal = { nalUnitType: "sei_rbsp", size: length, data, escapedRBSP: discardEmulationPreventionBytes4(data), trackId }; if (matchingSample) { seiNal.pts = matchingSample.pts; seiNal.dts = matchingSample.dts; lastMatchedSample = matchingSample; } else if (lastMatchedSample) { seiNal.pts = lastMatchedSample.pts; seiNal.dts = lastMatchedSample.dts; } else { result.logs.push({ level: "warn", message: "We've encountered a nal unit without data at " + i2 + " for trackId " + trackId + ". See mux.js#223." }); break; } result.seiNals.push(seiNal); break; } } return result; }; var parseSamples = function(truns, baseMediaDecodeTime, tfhd2) { var currentDts = baseMediaDecodeTime; var defaultSampleDuration = tfhd2.defaultSampleDuration || 0; var defaultSampleSize = tfhd2.defaultSampleSize || 0; var trackId = tfhd2.trackId; var allSamples = []; truns.forEach(function(trun2) { var trackRun = parseTrun$1(trun2); var samples = trackRun.samples; samples.forEach(function(sample) { if (sample.duration === void 0) { sample.duration = defaultSampleDuration; } if (sample.size === void 0) { sample.size = defaultSampleSize; } sample.trackId = trackId; sample.dts = currentDts; if (sample.compositionTimeOffset === void 0) { sample.compositionTimeOffset = 0; } if (typeof currentDts === "bigint") { sample.pts = currentDts + window$22.BigInt(sample.compositionTimeOffset); currentDts += window$22.BigInt(sample.duration); } else { sample.pts = currentDts + sample.compositionTimeOffset; currentDts += sample.duration; } }); allSamples = allSamples.concat(samples); }); return allSamples; }; var parseCaptionNals = function(segment, videoTrackId) { var trafs = findBox$12(segment, ["moof", "traf"]); var mdats = findBox$12(segment, ["mdat"]); var captionNals = {}; var mdatTrafPairs = []; mdats.forEach(function(mdat2, index2) { var matchingTraf = trafs[index2]; mdatTrafPairs.push({ mdat: mdat2, traf: matchingTraf }); }); mdatTrafPairs.forEach(function(pair) { var mdat2 = pair.mdat; var traf2 = pair.traf; var tfhd2 = findBox$12(traf2, ["tfhd"]); var headerInfo = parseTfhd$1(tfhd2[0]); var trackId = headerInfo.trackId; var tfdt2 = findBox$12(traf2, ["tfdt"]); var baseMediaDecodeTime = tfdt2.length > 0 ? parseTfdt$1(tfdt2[0]).baseMediaDecodeTime : 0; var truns = findBox$12(traf2, ["trun"]); var samples; var result; if (videoTrackId === trackId && truns.length > 0) { samples = parseSamples(truns, baseMediaDecodeTime, headerInfo); result = findSeiNals(mdat2, samples, trackId); if (!captionNals[trackId]) { captionNals[trackId] = { seiNals: [], logs: [] }; } captionNals[trackId].seiNals = captionNals[trackId].seiNals.concat(result.seiNals); captionNals[trackId].logs = captionNals[trackId].logs.concat(result.logs); } }); return captionNals; }; var parseEmbeddedCaptions = function(segment, trackId, timescale3) { var captionNals; if (trackId === null) { return null; } captionNals = parseCaptionNals(segment, trackId); var trackNals = captionNals[trackId] || {}; return { seiNals: trackNals.seiNals, logs: trackNals.logs, timescale: timescale3 }; }; var CaptionParser = function() { var isInitialized = false; var captionStream2; var segmentCache; var trackId; var timescale3; var parsedCaptions; var parsingPartial; this.isInitialized = function() { return isInitialized; }; this.init = function(options2) { captionStream2 = new CaptionStream(); isInitialized = true; parsingPartial = options2 ? options2.isPartial : false; captionStream2.on("data", function(event2) { event2.startTime = event2.startPts / timescale3; event2.endTime = event2.endPts / timescale3; parsedCaptions.captions.push(event2); parsedCaptions.captionStreams[event2.stream] = true; }); captionStream2.on("log", function(log2) { parsedCaptions.logs.push(log2); }); }; this.isNewInit = function(videoTrackIds, timescales) { if (videoTrackIds && videoTrackIds.length === 0 || timescales && typeof timescales === "object" && Object.keys(timescales).length === 0) { return false; } return trackId !== videoTrackIds[0] || timescale3 !== timescales[trackId]; }; this.parse = function(segment, videoTrackIds, timescales) { var parsedData; if (!this.isInitialized()) { return null; } else if (!videoTrackIds || !timescales) { return null; } else if (this.isNewInit(videoTrackIds, timescales)) { trackId = videoTrackIds[0]; timescale3 = timescales[trackId]; } else if (trackId === null || !timescale3) { segmentCache.push(segment); return null; } while (segmentCache.length > 0) { var cachedSegment = segmentCache.shift(); this.parse(cachedSegment, videoTrackIds, timescales); } parsedData = parseEmbeddedCaptions(segment, trackId, timescale3); if (parsedData && parsedData.logs) { parsedCaptions.logs = parsedCaptions.logs.concat(parsedData.logs); } if (parsedData === null || !parsedData.seiNals) { if (parsedCaptions.logs.length) { return { logs: parsedCaptions.logs, captions: [], captionStreams: [] }; } return null; } this.pushNals(parsedData.seiNals); this.flushStream(); return parsedCaptions; }; this.pushNals = function(nals) { if (!this.isInitialized() || !nals || nals.length === 0) { return null; } nals.forEach(function(nal) { captionStream2.push(nal); }); }; this.flushStream = function() { if (!this.isInitialized()) { return null; } if (!parsingPartial) { captionStream2.flush(); } else { captionStream2.partialFlush(); } }; this.clearParsedCaptions = function() { parsedCaptions.captions = []; parsedCaptions.captionStreams = {}; parsedCaptions.logs = []; }; this.resetCaptionStream = function() { if (!this.isInitialized()) { return null; } captionStream2.reset(); }; this.clearAllCaptions = function() { this.clearParsedCaptions(); this.resetCaptionStream(); }; this.reset = function() { segmentCache = []; trackId = null; timescale3 = null; if (!parsedCaptions) { parsedCaptions = { captions: [], captionStreams: {}, logs: [] }; } else { this.clearParsedCaptions(); } this.resetCaptionStream(); }; this.reset(); }; var captionParser = CaptionParser; var uint8ToCString$1 = function(data) { var index2 = 0; var curChar = String.fromCharCode(data[index2]); var retString = ""; while (curChar !== "\0") { retString += curChar; index2++; curChar = String.fromCharCode(data[index2]); } retString += curChar; return retString; }; var string = { uint8ToCString: uint8ToCString$1 }; var uint8ToCString = string.uint8ToCString; var getUint64$12 = numbers2.getUint64; var parseEmsgBox = function(boxData) { var offset = 4; var version2 = boxData[0]; var scheme_id_uri, value, timescale3, presentation_time, presentation_time_delta, event_duration, id, message_data; if (version2 === 0) { scheme_id_uri = uint8ToCString(boxData.subarray(offset)); offset += scheme_id_uri.length; value = uint8ToCString(boxData.subarray(offset)); offset += value.length; var dv = new DataView(boxData.buffer); timescale3 = dv.getUint32(offset); offset += 4; presentation_time_delta = dv.getUint32(offset); offset += 4; event_duration = dv.getUint32(offset); offset += 4; id = dv.getUint32(offset); offset += 4; } else if (version2 === 1) { var dv = new DataView(boxData.buffer); timescale3 = dv.getUint32(offset); offset += 4; presentation_time = getUint64$12(boxData.subarray(offset)); offset += 8; event_duration = dv.getUint32(offset); offset += 4; id = dv.getUint32(offset); offset += 4; scheme_id_uri = uint8ToCString(boxData.subarray(offset)); offset += scheme_id_uri.length; value = uint8ToCString(boxData.subarray(offset)); offset += value.length; } message_data = new Uint8Array(boxData.subarray(offset, boxData.byteLength)); var emsgBox = { scheme_id_uri, value, timescale: timescale3 ? timescale3 : 1, presentation_time, presentation_time_delta, event_duration, id, message_data }; return isValidEmsgBox(version2, emsgBox) ? emsgBox : void 0; }; var scaleTime = function(presentationTime, timescale3, timeDelta, offset) { return presentationTime || presentationTime === 0 ? presentationTime / timescale3 : offset + timeDelta / timescale3; }; var isValidEmsgBox = function(version2, emsg2) { var hasScheme = emsg2.scheme_id_uri !== "\0"; var isValidV0Box = version2 === 0 && isDefined(emsg2.presentation_time_delta) && hasScheme; var isValidV1Box = version2 === 1 && isDefined(emsg2.presentation_time) && hasScheme; return !(version2 > 1) && isValidV0Box || isValidV1Box; }; var isDefined = function(data) { return data !== void 0 || data !== null; }; var emsg$1 = { parseEmsgBox, scaleTime }; var toUnsigned = bin.toUnsigned; var toHexString = bin.toHexString; var findBox4 = findBox_1; var parseType$1 = parseType_1; var emsg = emsg$1; var parseTfhd = parseTfhd$2; var parseTrun = parseTrun$2; var parseTfdt = parseTfdt$2; var getUint642 = numbers2.getUint64; var timescale2, startTime, compositionStartTime, getVideoTrackIds, getTracks, getTimescaleFromMediaHeader, getEmsgID3; var window$12 = window_12; var parseId3Frames = parseId3.parseId3Frames; timescale2 = function(init) { var result = {}, traks = findBox4(init, ["moov", "trak"]); return traks.reduce(function(result2, trak2) { var tkhd2, version2, index2, id, mdhd2; tkhd2 = findBox4(trak2, ["tkhd"])[0]; if (!tkhd2) { return null; } version2 = tkhd2[0]; index2 = version2 === 0 ? 12 : 20; id = toUnsigned(tkhd2[index2] << 24 | tkhd2[index2 + 1] << 16 | tkhd2[index2 + 2] << 8 | tkhd2[index2 + 3]); mdhd2 = findBox4(trak2, ["mdia", "mdhd"])[0]; if (!mdhd2) { return null; } version2 = mdhd2[0]; index2 = version2 === 0 ? 12 : 20; result2[id] = toUnsigned(mdhd2[index2] << 24 | mdhd2[index2 + 1] << 16 | mdhd2[index2 + 2] << 8 | mdhd2[index2 + 3]); return result2; }, result); }; startTime = function(timescale3, fragment) { var trafs; trafs = findBox4(fragment, ["moof", "traf"]); var lowestTime = trafs.reduce(function(acc, traf2) { var tfhd2 = findBox4(traf2, ["tfhd"])[0]; var id = toUnsigned(tfhd2[4] << 24 | tfhd2[5] << 16 | tfhd2[6] << 8 | tfhd2[7]); var scale = timescale3[id] || 9e4; var tfdt2 = findBox4(traf2, ["tfdt"])[0]; var dv = new DataView(tfdt2.buffer, tfdt2.byteOffset, tfdt2.byteLength); var baseTime; if (tfdt2[0] === 1) { baseTime = getUint642(tfdt2.subarray(4, 12)); } else { baseTime = dv.getUint32(4); } let seconds; if (typeof baseTime === "bigint") { seconds = baseTime / window$12.BigInt(scale); } else if (typeof baseTime === "number" && !isNaN(baseTime)) { seconds = baseTime / scale; } if (seconds < Number.MAX_SAFE_INTEGER) { seconds = Number(seconds); } if (seconds < acc) { acc = seconds; } return acc; }, Infinity); return typeof lowestTime === "bigint" || isFinite(lowestTime) ? lowestTime : 0; }; compositionStartTime = function(timescales, fragment) { var trafBoxes = findBox4(fragment, ["moof", "traf"]); var baseMediaDecodeTime = 0; var compositionTimeOffset = 0; var trackId; if (trafBoxes && trafBoxes.length) { var tfhd2 = findBox4(trafBoxes[0], ["tfhd"])[0]; var trun2 = findBox4(trafBoxes[0], ["trun"])[0]; var tfdt2 = findBox4(trafBoxes[0], ["tfdt"])[0]; if (tfhd2) { var parsedTfhd = parseTfhd(tfhd2); trackId = parsedTfhd.trackId; } if (tfdt2) { var parsedTfdt = parseTfdt(tfdt2); baseMediaDecodeTime = parsedTfdt.baseMediaDecodeTime; } if (trun2) { var parsedTrun = parseTrun(trun2); if (parsedTrun.samples && parsedTrun.samples.length) { compositionTimeOffset = parsedTrun.samples[0].compositionTimeOffset || 0; } } } var timescale3 = timescales[trackId] || 9e4; if (typeof baseMediaDecodeTime === "bigint") { compositionTimeOffset = window$12.BigInt(compositionTimeOffset); timescale3 = window$12.BigInt(timescale3); } var result = (baseMediaDecodeTime + compositionTimeOffset) / timescale3; if (typeof result === "bigint" && result < Number.MAX_SAFE_INTEGER) { result = Number(result); } return result; }; getVideoTrackIds = function(init) { var traks = findBox4(init, ["moov", "trak"]); var videoTrackIds = []; traks.forEach(function(trak2) { var hdlrs = findBox4(trak2, ["mdia", "hdlr"]); var tkhds = findBox4(trak2, ["tkhd"]); hdlrs.forEach(function(hdlr2, index2) { var handlerType = parseType$1(hdlr2.subarray(8, 12)); var tkhd2 = tkhds[index2]; var view; var version2; var trackId; if (handlerType === "vide") { view = new DataView(tkhd2.buffer, tkhd2.byteOffset, tkhd2.byteLength); version2 = view.getUint8(0); trackId = version2 === 0 ? view.getUint32(12) : view.getUint32(20); videoTrackIds.push(trackId); } }); }); return videoTrackIds; }; getTimescaleFromMediaHeader = function(mdhd2) { var version2 = mdhd2[0]; var index2 = version2 === 0 ? 12 : 20; return toUnsigned(mdhd2[index2] << 24 | mdhd2[index2 + 1] << 16 | mdhd2[index2 + 2] << 8 | mdhd2[index2 + 3]); }; getTracks = function(init) { var traks = findBox4(init, ["moov", "trak"]); var tracks = []; traks.forEach(function(trak2) { var track = {}; var tkhd2 = findBox4(trak2, ["tkhd"])[0]; var view, tkhdVersion; if (tkhd2) { view = new DataView(tkhd2.buffer, tkhd2.byteOffset, tkhd2.byteLength); tkhdVersion = view.getUint8(0); track.id = tkhdVersion === 0 ? view.getUint32(12) : view.getUint32(20); } var hdlr2 = findBox4(trak2, ["mdia", "hdlr"])[0]; if (hdlr2) { var type3 = parseType$1(hdlr2.subarray(8, 12)); if (type3 === "vide") { track.type = "video"; } else if (type3 === "soun") { track.type = "audio"; } else { track.type = type3; } } var stsd2 = findBox4(trak2, ["mdia", "minf", "stbl", "stsd"])[0]; if (stsd2) { var sampleDescriptions = stsd2.subarray(8); track.codec = parseType$1(sampleDescriptions.subarray(4, 8)); var codecBox = findBox4(sampleDescriptions, [track.codec])[0]; var codecConfig, codecConfigType; if (codecBox) { if (/^[asm]vc[1-9]$/i.test(track.codec)) { codecConfig = codecBox.subarray(78); codecConfigType = parseType$1(codecConfig.subarray(4, 8)); if (codecConfigType === "avcC" && codecConfig.length > 11) { track.codec += "."; track.codec += toHexString(codecConfig[9]); track.codec += toHexString(codecConfig[10]); track.codec += toHexString(codecConfig[11]); } else { track.codec = "avc1.4d400d"; } } else if (/^mp4[a,v]$/i.test(track.codec)) { codecConfig = codecBox.subarray(28); codecConfigType = parseType$1(codecConfig.subarray(4, 8)); if (codecConfigType === "esds" && codecConfig.length > 20 && codecConfig[19] !== 0) { track.codec += "." + toHexString(codecConfig[19]); track.codec += "." + toHexString(codecConfig[20] >>> 2 & 63).replace(/^0/, ""); } else { track.codec = "mp4a.40.2"; } } else { track.codec = track.codec.toLowerCase(); } } } var mdhd2 = findBox4(trak2, ["mdia", "mdhd"])[0]; if (mdhd2) { track.timescale = getTimescaleFromMediaHeader(mdhd2); } tracks.push(track); }); return tracks; }; getEmsgID3 = function(segmentData, offset = 0) { var emsgBoxes = findBox4(segmentData, ["emsg"]); return emsgBoxes.map((data) => { var parsedBox = emsg.parseEmsgBox(new Uint8Array(data)); var parsedId3Frames = parseId3Frames(parsedBox.message_data); return { cueTime: emsg.scaleTime(parsedBox.presentation_time, parsedBox.timescale, parsedBox.presentation_time_delta, offset), duration: emsg.scaleTime(parsedBox.event_duration, parsedBox.timescale), frames: parsedId3Frames }; }); }; var probe$2 = { findBox: findBox4, parseType: parseType$1, timescale: timescale2, startTime, compositionStartTime, videoTrackIds: getVideoTrackIds, tracks: getTracks, getTimescaleFromMediaHeader, getEmsgID3 }; var StreamTypes$1 = streamTypes; var parsePid = function(packet) { var pid = packet[1] & 31; pid <<= 8; pid |= packet[2]; return pid; }; var parsePayloadUnitStartIndicator = function(packet) { return !!(packet[1] & 64); }; var parseAdaptionField = function(packet) { var offset = 0; if ((packet[3] & 48) >>> 4 > 1) { offset += packet[4] + 1; } return offset; }; var parseType = function(packet, pmtPid) { var pid = parsePid(packet); if (pid === 0) { return "pat"; } else if (pid === pmtPid) { return "pmt"; } else if (pmtPid) { return "pes"; } return null; }; var parsePat = function(packet) { var pusi = parsePayloadUnitStartIndicator(packet); var offset = 4 + parseAdaptionField(packet); if (pusi) { offset += packet[offset] + 1; } return (packet[offset + 10] & 31) << 8 | packet[offset + 11]; }; var parsePmt = function(packet) { var programMapTable = {}; var pusi = parsePayloadUnitStartIndicator(packet); var payloadOffset = 4 + parseAdaptionField(packet); if (pusi) { payloadOffset += packet[payloadOffset] + 1; } if (!(packet[payloadOffset + 5] & 1)) { return; } var sectionLength, tableEnd, programInfoLength; sectionLength = (packet[payloadOffset + 1] & 15) << 8 | packet[payloadOffset + 2]; tableEnd = 3 + sectionLength - 4; programInfoLength = (packet[payloadOffset + 10] & 15) << 8 | packet[payloadOffset + 11]; var offset = 12 + programInfoLength; while (offset < tableEnd) { var i2 = payloadOffset + offset; programMapTable[(packet[i2 + 1] & 31) << 8 | packet[i2 + 2]] = packet[i2]; offset += ((packet[i2 + 3] & 15) << 8 | packet[i2 + 4]) + 5; } return programMapTable; }; var parsePesType = function(packet, programMapTable) { var pid = parsePid(packet); var type3 = programMapTable[pid]; switch (type3) { case StreamTypes$1.H264_STREAM_TYPE: return "video"; case StreamTypes$1.ADTS_STREAM_TYPE: return "audio"; case StreamTypes$1.METADATA_STREAM_TYPE: return "timed-metadata"; default: return null; } }; var parsePesTime = function(packet) { var pusi = parsePayloadUnitStartIndicator(packet); if (!pusi) { return null; } var offset = 4 + parseAdaptionField(packet); if (offset >= packet.byteLength) { return null; } var pes = null; var ptsDtsFlags; ptsDtsFlags = packet[offset + 7]; if (ptsDtsFlags & 192) { pes = {}; pes.pts = (packet[offset + 9] & 14) << 27 | (packet[offset + 10] & 255) << 20 | (packet[offset + 11] & 254) << 12 | (packet[offset + 12] & 255) << 5 | (packet[offset + 13] & 254) >>> 3; pes.pts *= 4; pes.pts += (packet[offset + 13] & 6) >>> 1; pes.dts = pes.pts; if (ptsDtsFlags & 64) { pes.dts = (packet[offset + 14] & 14) << 27 | (packet[offset + 15] & 255) << 20 | (packet[offset + 16] & 254) << 12 | (packet[offset + 17] & 255) << 5 | (packet[offset + 18] & 254) >>> 3; pes.dts *= 4; pes.dts += (packet[offset + 18] & 6) >>> 1; } } return pes; }; var parseNalUnitType = function(type3) { switch (type3) { case 5: return "slice_layer_without_partitioning_rbsp_idr"; case 6: return "sei_rbsp"; case 7: return "seq_parameter_set_rbsp"; case 8: return "pic_parameter_set_rbsp"; case 9: return "access_unit_delimiter_rbsp"; default: return null; } }; var videoPacketContainsKeyFrame = function(packet) { var offset = 4 + parseAdaptionField(packet); var frameBuffer = packet.subarray(offset); var frameI = 0; var frameSyncPoint = 0; var foundKeyFrame = false; var nalType; for (; frameSyncPoint < frameBuffer.byteLength - 3; frameSyncPoint++) { if (frameBuffer[frameSyncPoint + 2] === 1) { frameI = frameSyncPoint + 5; break; } } while (frameI < frameBuffer.byteLength) { switch (frameBuffer[frameI]) { case 0: if (frameBuffer[frameI - 1] !== 0) { frameI += 2; break; } else if (frameBuffer[frameI - 2] !== 0) { frameI++; break; } if (frameSyncPoint + 3 !== frameI - 2) { nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 31); if (nalType === "slice_layer_without_partitioning_rbsp_idr") { foundKeyFrame = true; } } do { frameI++; } while (frameBuffer[frameI] !== 1 && frameI < frameBuffer.length); frameSyncPoint = frameI - 2; frameI += 3; break; case 1: if (frameBuffer[frameI - 1] !== 0 || frameBuffer[frameI - 2] !== 0) { frameI += 3; break; } nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 31); if (nalType === "slice_layer_without_partitioning_rbsp_idr") { foundKeyFrame = true; } frameSyncPoint = frameI - 2; frameI += 3; break; default: frameI += 3; break; } } frameBuffer = frameBuffer.subarray(frameSyncPoint); frameI -= frameSyncPoint; frameSyncPoint = 0; if (frameBuffer && frameBuffer.byteLength > 3) { nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 31); if (nalType === "slice_layer_without_partitioning_rbsp_idr") { foundKeyFrame = true; } } return foundKeyFrame; }; var probe$1 = { parseType, parsePat, parsePmt, parsePayloadUnitStartIndicator, parsePesType, parsePesTime, videoPacketContainsKeyFrame }; var StreamTypes = streamTypes; var handleRollover = timestampRolloverStream.handleRollover; var probe = {}; probe.ts = probe$1; probe.aac = utils2; var ONE_SECOND_IN_TS2 = clock$2.ONE_SECOND_IN_TS; var MP2T_PACKET_LENGTH = 188, SYNC_BYTE = 71; var parsePsi_ = function(bytes, pmt) { var startIndex = 0, endIndex = MP2T_PACKET_LENGTH, packet, type3; while (endIndex < bytes.byteLength) { if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pat": pmt.pid = probe.ts.parsePat(packet); break; case "pmt": var table = probe.ts.parsePmt(packet); pmt.table = pmt.table || {}; Object.keys(table).forEach(function(key) { pmt.table[key] = table[key]; }); break; } startIndex += MP2T_PACKET_LENGTH; endIndex += MP2T_PACKET_LENGTH; continue; } startIndex++; endIndex++; } }; var parseAudioPes_ = function(bytes, pmt, result) { var startIndex = 0, endIndex = MP2T_PACKET_LENGTH, packet, type3, pesType, pusi, parsed; var endLoop = false; while (endIndex <= bytes.byteLength) { if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pes": pesType = probe.ts.parsePesType(packet, pmt.table); pusi = probe.ts.parsePayloadUnitStartIndicator(packet); if (pesType === "audio" && pusi) { parsed = probe.ts.parsePesTime(packet); if (parsed) { parsed.type = "audio"; result.audio.push(parsed); endLoop = true; } } break; } if (endLoop) { break; } startIndex += MP2T_PACKET_LENGTH; endIndex += MP2T_PACKET_LENGTH; continue; } startIndex++; endIndex++; } endIndex = bytes.byteLength; startIndex = endIndex - MP2T_PACKET_LENGTH; endLoop = false; while (startIndex >= 0) { if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pes": pesType = probe.ts.parsePesType(packet, pmt.table); pusi = probe.ts.parsePayloadUnitStartIndicator(packet); if (pesType === "audio" && pusi) { parsed = probe.ts.parsePesTime(packet); if (parsed) { parsed.type = "audio"; result.audio.push(parsed); endLoop = true; } } break; } if (endLoop) { break; } startIndex -= MP2T_PACKET_LENGTH; endIndex -= MP2T_PACKET_LENGTH; continue; } startIndex--; endIndex--; } }; var parseVideoPes_ = function(bytes, pmt, result) { var startIndex = 0, endIndex = MP2T_PACKET_LENGTH, packet, type3, pesType, pusi, parsed, frame, i2, pes; var endLoop = false; var currentFrame = { data: [], size: 0 }; while (endIndex < bytes.byteLength) { if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pes": pesType = probe.ts.parsePesType(packet, pmt.table); pusi = probe.ts.parsePayloadUnitStartIndicator(packet); if (pesType === "video") { if (pusi && !endLoop) { parsed = probe.ts.parsePesTime(packet); if (parsed) { parsed.type = "video"; result.video.push(parsed); endLoop = true; } } if (!result.firstKeyFrame) { if (pusi) { if (currentFrame.size !== 0) { frame = new Uint8Array(currentFrame.size); i2 = 0; while (currentFrame.data.length) { pes = currentFrame.data.shift(); frame.set(pes, i2); i2 += pes.byteLength; } if (probe.ts.videoPacketContainsKeyFrame(frame)) { var firstKeyFrame = probe.ts.parsePesTime(frame); if (firstKeyFrame) { result.firstKeyFrame = firstKeyFrame; result.firstKeyFrame.type = "video"; } else { console.warn("Failed to extract PTS/DTS from PES at first keyframe. This could be an unusual TS segment, or else mux.js did not parse your TS segment correctly. If you know your TS segments do contain PTS/DTS on keyframes please file a bug report! You can try ffprobe to double check for yourself."); } } currentFrame.size = 0; } } currentFrame.data.push(packet); currentFrame.size += packet.byteLength; } } break; } if (endLoop && result.firstKeyFrame) { break; } startIndex += MP2T_PACKET_LENGTH; endIndex += MP2T_PACKET_LENGTH; continue; } startIndex++; endIndex++; } endIndex = bytes.byteLength; startIndex = endIndex - MP2T_PACKET_LENGTH; endLoop = false; while (startIndex >= 0) { if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pes": pesType = probe.ts.parsePesType(packet, pmt.table); pusi = probe.ts.parsePayloadUnitStartIndicator(packet); if (pesType === "video" && pusi) { parsed = probe.ts.parsePesTime(packet); if (parsed) { parsed.type = "video"; result.video.push(parsed); endLoop = true; } } break; } if (endLoop) { break; } startIndex -= MP2T_PACKET_LENGTH; endIndex -= MP2T_PACKET_LENGTH; continue; } startIndex--; endIndex--; } }; var adjustTimestamp_ = function(segmentInfo, baseTimestamp) { if (segmentInfo.audio && segmentInfo.audio.length) { var audioBaseTimestamp = baseTimestamp; if (typeof audioBaseTimestamp === "undefined" || isNaN(audioBaseTimestamp)) { audioBaseTimestamp = segmentInfo.audio[0].dts; } segmentInfo.audio.forEach(function(info) { info.dts = handleRollover(info.dts, audioBaseTimestamp); info.pts = handleRollover(info.pts, audioBaseTimestamp); info.dtsTime = info.dts / ONE_SECOND_IN_TS2; info.ptsTime = info.pts / ONE_SECOND_IN_TS2; }); } if (segmentInfo.video && segmentInfo.video.length) { var videoBaseTimestamp = baseTimestamp; if (typeof videoBaseTimestamp === "undefined" || isNaN(videoBaseTimestamp)) { videoBaseTimestamp = segmentInfo.video[0].dts; } segmentInfo.video.forEach(function(info) { info.dts = handleRollover(info.dts, videoBaseTimestamp); info.pts = handleRollover(info.pts, videoBaseTimestamp); info.dtsTime = info.dts / ONE_SECOND_IN_TS2; info.ptsTime = info.pts / ONE_SECOND_IN_TS2; }); if (segmentInfo.firstKeyFrame) { var frame = segmentInfo.firstKeyFrame; frame.dts = handleRollover(frame.dts, videoBaseTimestamp); frame.pts = handleRollover(frame.pts, videoBaseTimestamp); frame.dtsTime = frame.dts / ONE_SECOND_IN_TS2; frame.ptsTime = frame.pts / ONE_SECOND_IN_TS2; } } }; var inspectAac_ = function(bytes) { var endLoop = false, audioCount = 0, sampleRate = null, timestamp = null, frameSize = 0, byteIndex = 0, packet; while (bytes.length - byteIndex >= 3) { var type3 = probe.aac.parseType(bytes, byteIndex); switch (type3) { case "timed-metadata": if (bytes.length - byteIndex < 10) { endLoop = true; break; } frameSize = probe.aac.parseId3TagSize(bytes, byteIndex); if (frameSize > bytes.length) { endLoop = true; break; } if (timestamp === null) { packet = bytes.subarray(byteIndex, byteIndex + frameSize); timestamp = probe.aac.parseAacTimestamp(packet); } byteIndex += frameSize; break; case "audio": if (bytes.length - byteIndex < 7) { endLoop = true; break; } frameSize = probe.aac.parseAdtsSize(bytes, byteIndex); if (frameSize > bytes.length) { endLoop = true; break; } if (sampleRate === null) { packet = bytes.subarray(byteIndex, byteIndex + frameSize); sampleRate = probe.aac.parseSampleRate(packet); } audioCount++; byteIndex += frameSize; break; default: byteIndex++; break; } if (endLoop) { return null; } } if (sampleRate === null || timestamp === null) { return null; } var audioTimescale = ONE_SECOND_IN_TS2 / sampleRate; var result = { audio: [{ type: "audio", dts: timestamp, pts: timestamp }, { type: "audio", dts: timestamp + audioCount * 1024 * audioTimescale, pts: timestamp + audioCount * 1024 * audioTimescale }] }; return result; }; var inspectTs_ = function(bytes) { var pmt = { pid: null, table: null }; var result = {}; parsePsi_(bytes, pmt); for (var pid in pmt.table) { if (pmt.table.hasOwnProperty(pid)) { var type3 = pmt.table[pid]; switch (type3) { case StreamTypes.H264_STREAM_TYPE: result.video = []; parseVideoPes_(bytes, pmt, result); if (result.video.length === 0) { delete result.video; } break; case StreamTypes.ADTS_STREAM_TYPE: result.audio = []; parseAudioPes_(bytes, pmt, result); if (result.audio.length === 0) { delete result.audio; } break; } } } return result; }; var inspect = function(bytes, baseTimestamp) { var isAacData = probe.aac.isLikelyAacData(bytes); var result; if (isAacData) { result = inspectAac_(bytes); } else { result = inspectTs_(bytes); } if (!result || !result.audio && !result.video) { return null; } adjustTimestamp_(result, baseTimestamp); return result; }; var tsInspector = { inspect, parseAudioPes_ }; const wireTransmuxerEvents = function(self2, transmuxer2) { transmuxer2.on("data", function(segment) { const initArray = segment.initSegment; segment.initSegment = { data: initArray.buffer, byteOffset: initArray.byteOffset, byteLength: initArray.byteLength }; const typedArray2 = segment.data; segment.data = typedArray2.buffer; self2.postMessage({ action: "data", segment, byteOffset: typedArray2.byteOffset, byteLength: typedArray2.byteLength }, [segment.data]); }); transmuxer2.on("done", function(data) { self2.postMessage({ action: "done" }); }); transmuxer2.on("gopInfo", function(gopInfo) { self2.postMessage({ action: "gopInfo", gopInfo }); }); transmuxer2.on("videoSegmentTimingInfo", function(timingInfo) { const videoSegmentTimingInfo = { start: { decode: clock$2.videoTsToSeconds(timingInfo.start.dts), presentation: clock$2.videoTsToSeconds(timingInfo.start.pts) }, end: { decode: clock$2.videoTsToSeconds(timingInfo.end.dts), presentation: clock$2.videoTsToSeconds(timingInfo.end.pts) }, baseMediaDecodeTime: clock$2.videoTsToSeconds(timingInfo.baseMediaDecodeTime) }; if (timingInfo.prependedContentDuration) { videoSegmentTimingInfo.prependedContentDuration = clock$2.videoTsToSeconds(timingInfo.prependedContentDuration); } self2.postMessage({ action: "videoSegmentTimingInfo", videoSegmentTimingInfo }); }); transmuxer2.on("audioSegmentTimingInfo", function(timingInfo) { const audioSegmentTimingInfo = { start: { decode: clock$2.videoTsToSeconds(timingInfo.start.dts), presentation: clock$2.videoTsToSeconds(timingInfo.start.pts) }, end: { decode: clock$2.videoTsToSeconds(timingInfo.end.dts), presentation: clock$2.videoTsToSeconds(timingInfo.end.pts) }, baseMediaDecodeTime: clock$2.videoTsToSeconds(timingInfo.baseMediaDecodeTime) }; if (timingInfo.prependedContentDuration) { audioSegmentTimingInfo.prependedContentDuration = clock$2.videoTsToSeconds(timingInfo.prependedContentDuration); } self2.postMessage({ action: "audioSegmentTimingInfo", audioSegmentTimingInfo }); }); transmuxer2.on("id3Frame", function(id3Frame) { self2.postMessage({ action: "id3Frame", id3Frame }); }); transmuxer2.on("caption", function(caption) { self2.postMessage({ action: "caption", caption }); }); transmuxer2.on("trackinfo", function(trackInfo) { self2.postMessage({ action: "trackinfo", trackInfo }); }); transmuxer2.on("audioTimingInfo", function(audioTimingInfo) { self2.postMessage({ action: "audioTimingInfo", audioTimingInfo: { start: clock$2.videoTsToSeconds(audioTimingInfo.start), end: clock$2.videoTsToSeconds(audioTimingInfo.end) } }); }); transmuxer2.on("videoTimingInfo", function(videoTimingInfo) { self2.postMessage({ action: "videoTimingInfo", videoTimingInfo: { start: clock$2.videoTsToSeconds(videoTimingInfo.start), end: clock$2.videoTsToSeconds(videoTimingInfo.end) } }); }); transmuxer2.on("log", function(log2) { self2.postMessage({ action: "log", log: log2 }); }); }; class MessageHandlers { constructor(self2, options2) { this.options = options2 || {}; this.self = self2; this.init(); } init() { if (this.transmuxer) { this.transmuxer.dispose(); } this.transmuxer = new transmuxer.Transmuxer(this.options); wireTransmuxerEvents(this.self, this.transmuxer); } pushMp4Captions(data) { if (!this.captionParser) { this.captionParser = new captionParser(); this.captionParser.init(); } const segment = new Uint8Array(data.data, data.byteOffset, data.byteLength); const parsed = this.captionParser.parse(segment, data.trackIds, data.timescales); this.self.postMessage({ action: "mp4Captions", captions: parsed && parsed.captions || [], logs: parsed && parsed.logs || [], data: segment.buffer }, [segment.buffer]); } probeMp4StartTime({ timescales, data }) { const startTime2 = probe$2.startTime(timescales, data); this.self.postMessage({ action: "probeMp4StartTime", startTime: startTime2, data }, [data.buffer]); } probeMp4Tracks({ data }) { const tracks = probe$2.tracks(data); this.self.postMessage({ action: "probeMp4Tracks", tracks, data }, [data.buffer]); } probeTs({ data, baseStartTime }) { const tsStartTime = typeof baseStartTime === "number" && !isNaN(baseStartTime) ? baseStartTime * clock$2.ONE_SECOND_IN_TS : void 0; const timeInfo = tsInspector.inspect(data, tsStartTime); let result = null; if (timeInfo) { result = { hasVideo: timeInfo.video && timeInfo.video.length === 2 || false, hasAudio: timeInfo.audio && timeInfo.audio.length === 2 || false }; if (result.hasVideo) { result.videoStart = timeInfo.video[0].ptsTime; } if (result.hasAudio) { result.audioStart = timeInfo.audio[0].ptsTime; } } this.self.postMessage({ action: "probeTs", result, data }, [data.buffer]); } clearAllMp4Captions() { if (this.captionParser) { this.captionParser.clearAllCaptions(); } } clearParsedMp4Captions() { if (this.captionParser) { this.captionParser.clearParsedCaptions(); } } push(data) { const segment = new Uint8Array(data.data, data.byteOffset, data.byteLength); this.transmuxer.push(segment); } reset() { this.transmuxer.reset(); } setTimestampOffset(data) { const timestampOffset2 = data.timestampOffset || 0; this.transmuxer.setBaseMediaDecodeTime(Math.round(clock$2.secondsToVideoTs(timestampOffset2))); } setAudioAppendStart(data) { this.transmuxer.setAudioAppendStart(Math.ceil(clock$2.secondsToVideoTs(data.appendStart))); } setRemux(data) { this.transmuxer.setRemux(data.remux); } flush(data) { this.transmuxer.flush(); self.postMessage({ action: "done", type: "transmuxed" }); } endTimeline() { this.transmuxer.endTimeline(); self.postMessage({ action: "endedtimeline", type: "transmuxed" }); } alignGopsWith(data) { this.transmuxer.alignGopsWith(data.gopsToAlignWith.slice()); } } self.onmessage = function(event2) { if (event2.data.action === "init" && event2.data.options) { this.messageHandlers = new MessageHandlers(self, event2.data.options); return; } if (!this.messageHandlers) { this.messageHandlers = new MessageHandlers(self); } if (event2.data && event2.data.action && event2.data.action !== "init") { if (this.messageHandlers[event2.data.action]) { this.messageHandlers[event2.data.action](event2.data); } } }; })); var TransmuxWorker$1 = factory$1(workerCode$1$1); const handleData_$1 = (event2, transmuxedData, callback2) => { const { type: type2, initSegment, captions, captionStreams, metadata, videoFrameDtsTime, videoFramePtsTime } = event2.data.segment; transmuxedData.buffer.push({ captions, captionStreams, metadata }); const boxes = event2.data.segment.boxes || { data: event2.data.segment.data }; const result = { type: type2, data: new Uint8Array(boxes.data, boxes.data.byteOffset, boxes.data.byteLength), initSegment: new Uint8Array(initSegment.data, initSegment.byteOffset, initSegment.byteLength) }; if (typeof videoFrameDtsTime !== "undefined") { result.videoFrameDtsTime = videoFrameDtsTime; } if (typeof videoFramePtsTime !== "undefined") { result.videoFramePtsTime = videoFramePtsTime; } callback2(result); }; const handleDone_$1 = ({ transmuxedData, callback: callback2 }) => { transmuxedData.buffer = []; callback2(transmuxedData); }; const handleGopInfo_$1 = (event2, transmuxedData) => { transmuxedData.gopInfo = event2.data.gopInfo; }; const processTransmux$1 = (options2) => { const { transmuxer, bytes, audioAppendStart, gopsToAlignWith, remux, onData, onTrackInfo, onAudioTimingInfo, onVideoTimingInfo, onVideoSegmentTimingInfo, onAudioSegmentTimingInfo, onId3, onCaptions, onDone, onEndedTimeline, onTransmuxerLog, isEndOfTimeline } = options2; const transmuxedData = { buffer: [] }; let waitForEndedTimelineEvent = isEndOfTimeline; const handleMessage = (event2) => { if (transmuxer.currentTransmux !== options2) { return; } if (event2.data.action === "data") { handleData_$1(event2, transmuxedData, onData); } if (event2.data.action === "trackinfo") { onTrackInfo(event2.data.trackInfo); } if (event2.data.action === "gopInfo") { handleGopInfo_$1(event2, transmuxedData); } if (event2.data.action === "audioTimingInfo") { onAudioTimingInfo(event2.data.audioTimingInfo); } if (event2.data.action === "videoTimingInfo") { onVideoTimingInfo(event2.data.videoTimingInfo); } if (event2.data.action === "videoSegmentTimingInfo") { onVideoSegmentTimingInfo(event2.data.videoSegmentTimingInfo); } if (event2.data.action === "audioSegmentTimingInfo") { onAudioSegmentTimingInfo(event2.data.audioSegmentTimingInfo); } if (event2.data.action === "id3Frame") { onId3([event2.data.id3Frame], event2.data.id3Frame.dispatchType); } if (event2.data.action === "caption") { onCaptions(event2.data.caption); } if (event2.data.action === "endedtimeline") { waitForEndedTimelineEvent = false; onEndedTimeline(); } if (event2.data.action === "log") { onTransmuxerLog(event2.data.log); } if (event2.data.type !== "transmuxed") { return; } if (waitForEndedTimelineEvent) { return; } transmuxer.onmessage = null; handleDone_$1({ transmuxedData, callback: onDone }); dequeue$1(transmuxer); }; transmuxer.onmessage = handleMessage; if (audioAppendStart) { transmuxer.postMessage({ action: "setAudioAppendStart", appendStart: audioAppendStart }); } if (Array.isArray(gopsToAlignWith)) { transmuxer.postMessage({ action: "alignGopsWith", gopsToAlignWith }); } if (typeof remux !== "undefined") { transmuxer.postMessage({ action: "setRemux", remux }); } if (bytes.byteLength) { const buffer = bytes instanceof ArrayBuffer ? bytes : bytes.buffer; const byteOffset = bytes instanceof ArrayBuffer ? 0 : bytes.byteOffset; transmuxer.postMessage({ action: "push", data: buffer, byteOffset, byteLength: bytes.byteLength }, [buffer]); } if (isEndOfTimeline) { transmuxer.postMessage({ action: "endTimeline" }); } transmuxer.postMessage({ action: "flush" }); }; const dequeue$1 = (transmuxer) => { transmuxer.currentTransmux = null; if (transmuxer.transmuxQueue.length) { transmuxer.currentTransmux = transmuxer.transmuxQueue.shift(); if (typeof transmuxer.currentTransmux === "function") { transmuxer.currentTransmux(); } else { processTransmux$1(transmuxer.currentTransmux); } } }; const processAction$1 = (transmuxer, action) => { transmuxer.postMessage({ action }); dequeue$1(transmuxer); }; const enqueueAction$1 = (action, transmuxer) => { if (!transmuxer.currentTransmux) { transmuxer.currentTransmux = action; processAction$1(transmuxer, action); return; } transmuxer.transmuxQueue.push(processAction$1.bind(null, transmuxer, action)); }; const reset$1 = (transmuxer) => { enqueueAction$1("reset", transmuxer); }; const endTimeline$1 = (transmuxer) => { enqueueAction$1("endTimeline", transmuxer); }; const transmux$1 = (options2) => { if (!options2.transmuxer.currentTransmux) { options2.transmuxer.currentTransmux = options2; processTransmux$1(options2); return; } options2.transmuxer.transmuxQueue.push(options2); }; const createTransmuxer$1 = (options2) => { const transmuxer = new TransmuxWorker$1(); transmuxer.currentTransmux = null; transmuxer.transmuxQueue = []; const term = transmuxer.terminate; transmuxer.terminate = () => { transmuxer.currentTransmux = null; transmuxer.transmuxQueue.length = 0; return term.call(transmuxer); }; transmuxer.postMessage({ action: "init", options: options2 }); return transmuxer; }; var segmentTransmuxer$1 = { reset: reset$1, endTimeline: endTimeline$1, transmux: transmux$1, createTransmuxer: createTransmuxer$1 }; const workerCallback$1 = function(options2) { const transmuxer = options2.transmuxer; const endAction = options2.endAction || options2.action; const callback2 = options2.callback; const message = _extends$2({}, options2, { endAction: null, transmuxer: null, callback: null }); const listenForEndEvent = (event2) => { if (event2.data.action !== endAction) { return; } transmuxer.removeEventListener("message", listenForEndEvent); if (event2.data.data) { event2.data.data = new Uint8Array(event2.data.data, options2.byteOffset || 0, options2.byteLength || event2.data.data.byteLength); if (options2.data) { options2.data = event2.data.data; } } callback2(event2.data); }; transmuxer.addEventListener("message", listenForEndEvent); if (options2.data) { const isArrayBuffer = options2.data instanceof ArrayBuffer; message.byteOffset = isArrayBuffer ? 0 : options2.data.byteOffset; message.byteLength = options2.data.byteLength; const transfers = [isArrayBuffer ? options2.data : options2.data.buffer]; transmuxer.postMessage(message, transfers); } else { transmuxer.postMessage(message); } }; const REQUEST_ERRORS$1 = { FAILURE: 2, TIMEOUT: -101, ABORTED: -102 }; const abortAll$1 = (activeXhrs) => { activeXhrs.forEach((xhr) => { xhr.abort(); }); }; const getRequestStats$1 = (request) => { return { bandwidth: request.bandwidth, bytesReceived: request.bytesReceived || 0, roundTripTime: request.roundTripTime || 0 }; }; const getProgressStats$1 = (progressEvent) => { const request = progressEvent.target; const roundTripTime = Date.now() - request.requestTime; const stats = { bandwidth: Infinity, bytesReceived: 0, roundTripTime: roundTripTime || 0 }; stats.bytesReceived = progressEvent.loaded; stats.bandwidth = Math.floor(stats.bytesReceived / stats.roundTripTime * 8 * 1e3); return stats; }; const handleErrors$1 = (error, request) => { if (request.timedout) { return { status: request.status, message: "HLS request timed-out at URL: " + request.uri, code: REQUEST_ERRORS$1.TIMEOUT, xhr: request }; } if (request.aborted) { return { status: request.status, message: "HLS request aborted at URL: " + request.uri, code: REQUEST_ERRORS$1.ABORTED, xhr: request }; } if (error) { return { status: request.status, message: "HLS request errored at URL: " + request.uri, code: REQUEST_ERRORS$1.FAILURE, xhr: request }; } if (request.responseType === "arraybuffer" && request.response.byteLength === 0) { return { status: request.status, message: "Empty HLS response at URL: " + request.uri, code: REQUEST_ERRORS$1.FAILURE, xhr: request }; } return null; }; const handleKeyResponse$1 = (segment, objects, finishProcessingFn) => (error, request) => { const response = request.response; const errorObj = handleErrors$1(error, request); if (errorObj) { return finishProcessingFn(errorObj, segment); } if (response.byteLength !== 16) { return finishProcessingFn({ status: request.status, message: "Invalid HLS key at URL: " + request.uri, code: REQUEST_ERRORS$1.FAILURE, xhr: request }, segment); } const view = new DataView(response); const bytes = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]); for (let i2 = 0; i2 < objects.length; i2++) { objects[i2].bytes = bytes; } return finishProcessingFn(null, segment); }; const parseInitSegment$1 = (segment, callback2) => { const type2 = detectContainerForBytes$1(segment.map.bytes); if (type2 !== "mp4") { const uri = segment.map.resolvedUri || segment.map.uri; return callback2({ internal: true, message: `Found unsupported ${type2 || "unknown"} container for initialization segment at URL: ${uri}`, code: REQUEST_ERRORS$1.FAILURE }); } workerCallback$1({ action: "probeMp4Tracks", data: segment.map.bytes, transmuxer: segment.transmuxer, callback: ({ tracks, data }) => { segment.map.bytes = data; tracks.forEach(function(track) { segment.map.tracks = segment.map.tracks || {}; if (segment.map.tracks[track.type]) { return; } segment.map.tracks[track.type] = track; if (typeof track.id === "number" && track.timescale) { segment.map.timescales = segment.map.timescales || {}; segment.map.timescales[track.id] = track.timescale; } }); return callback2(null); } }); }; const handleInitSegmentResponse$1 = ({ segment, finishProcessingFn }) => (error, request) => { const errorObj = handleErrors$1(error, request); if (errorObj) { return finishProcessingFn(errorObj, segment); } const bytes = new Uint8Array(request.response); if (segment.map.key) { segment.map.encryptedBytes = bytes; return finishProcessingFn(null, segment); } segment.map.bytes = bytes; parseInitSegment$1(segment, function(parseError) { if (parseError) { parseError.xhr = request; parseError.status = request.status; return finishProcessingFn(parseError, segment); } finishProcessingFn(null, segment); }); }; const handleSegmentResponse$1 = ({ segment, finishProcessingFn, responseType }) => (error, request) => { const errorObj = handleErrors$1(error, request); if (errorObj) { return finishProcessingFn(errorObj, segment); } const newBytes = responseType === "arraybuffer" || !request.responseText ? request.response : stringToArrayBuffer$1(request.responseText.substring(segment.lastReachedChar || 0)); segment.stats = getRequestStats$1(request); if (segment.key) { segment.encryptedBytes = new Uint8Array(newBytes); } else { segment.bytes = new Uint8Array(newBytes); } return finishProcessingFn(null, segment); }; const transmuxAndNotify$1 = ({ segment, bytes, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }) => { const fmp4Tracks = segment.map && segment.map.tracks || {}; const isMuxed3 = Boolean(fmp4Tracks.audio && fmp4Tracks.video); let audioStartFn = timingInfoFn.bind(null, segment, "audio", "start"); const audioEndFn = timingInfoFn.bind(null, segment, "audio", "end"); let videoStartFn = timingInfoFn.bind(null, segment, "video", "start"); const videoEndFn = timingInfoFn.bind(null, segment, "video", "end"); const finish = () => transmux$1({ bytes, transmuxer: segment.transmuxer, audioAppendStart: segment.audioAppendStart, gopsToAlignWith: segment.gopsToAlignWith, remux: isMuxed3, onData: (result) => { result.type = result.type === "combined" ? "video" : result.type; dataFn(segment, result); }, onTrackInfo: (trackInfo) => { if (trackInfoFn) { if (isMuxed3) { trackInfo.isMuxed = true; } trackInfoFn(segment, trackInfo); } }, onAudioTimingInfo: (audioTimingInfo) => { if (audioStartFn && typeof audioTimingInfo.start !== "undefined") { audioStartFn(audioTimingInfo.start); audioStartFn = null; } if (audioEndFn && typeof audioTimingInfo.end !== "undefined") { audioEndFn(audioTimingInfo.end); } }, onVideoTimingInfo: (videoTimingInfo) => { if (videoStartFn && typeof videoTimingInfo.start !== "undefined") { videoStartFn(videoTimingInfo.start); videoStartFn = null; } if (videoEndFn && typeof videoTimingInfo.end !== "undefined") { videoEndFn(videoTimingInfo.end); } }, onVideoSegmentTimingInfo: (videoSegmentTimingInfo) => { videoSegmentTimingInfoFn(videoSegmentTimingInfo); }, onAudioSegmentTimingInfo: (audioSegmentTimingInfo) => { audioSegmentTimingInfoFn(audioSegmentTimingInfo); }, onId3: (id3Frames, dispatchType) => { id3Fn(segment, id3Frames, dispatchType); }, onCaptions: (captions) => { captionsFn(segment, [captions]); }, isEndOfTimeline, onEndedTimeline: () => { endedTimelineFn(); }, onTransmuxerLog, onDone: (result) => { if (!doneFn) { return; } result.type = result.type === "combined" ? "video" : result.type; doneFn(null, segment, result); } }); workerCallback$1({ action: "probeTs", transmuxer: segment.transmuxer, data: bytes, baseStartTime: segment.baseStartTime, callback: (data) => { segment.bytes = bytes = data.data; const probeResult = data.result; if (probeResult) { trackInfoFn(segment, { hasAudio: probeResult.hasAudio, hasVideo: probeResult.hasVideo, isMuxed: isMuxed3 }); trackInfoFn = null; if (probeResult.hasAudio && !isMuxed3) { audioStartFn(probeResult.audioStart); } if (probeResult.hasVideo) { videoStartFn(probeResult.videoStart); } audioStartFn = null; videoStartFn = null; } finish(); } }); }; const handleSegmentBytes$1 = ({ segment, bytes, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }) => { let bytesAsUint8Array = new Uint8Array(bytes); if (isLikelyFmp4MediaSegment$1(bytesAsUint8Array)) { segment.isFmp4 = true; const { tracks } = segment.map; const trackInfo = { isFmp4: true, hasVideo: !!tracks.video, hasAudio: !!tracks.audio }; if (tracks.audio && tracks.audio.codec && tracks.audio.codec !== "enca") { trackInfo.audioCodec = tracks.audio.codec; } if (tracks.video && tracks.video.codec && tracks.video.codec !== "encv") { trackInfo.videoCodec = tracks.video.codec; } if (tracks.video && tracks.audio) { trackInfo.isMuxed = true; } trackInfoFn(segment, trackInfo); const finishLoading = (captions) => { dataFn(segment, { data: bytesAsUint8Array, type: trackInfo.hasAudio && !trackInfo.isMuxed ? "audio" : "video" }); if (captions && captions.length) { captionsFn(segment, captions); } doneFn(null, segment, {}); }; workerCallback$1({ action: "probeMp4StartTime", timescales: segment.map.timescales, data: bytesAsUint8Array, transmuxer: segment.transmuxer, callback: ({ data, startTime }) => { bytes = data.buffer; segment.bytes = bytesAsUint8Array = data; if (trackInfo.hasAudio && !trackInfo.isMuxed) { timingInfoFn(segment, "audio", "start", startTime); } if (trackInfo.hasVideo) { timingInfoFn(segment, "video", "start", startTime); } if (!tracks.video || !data.byteLength || !segment.transmuxer) { finishLoading(); return; } workerCallback$1({ action: "pushMp4Captions", endAction: "mp4Captions", transmuxer: segment.transmuxer, data: bytesAsUint8Array, timescales: segment.map.timescales, trackIds: [tracks.video.id], callback: (message) => { bytes = message.data.buffer; segment.bytes = bytesAsUint8Array = message.data; message.logs.forEach(function(log2) { onTransmuxerLog(merge$2(log2, { stream: "mp4CaptionParser" })); }); finishLoading(message.captions); } }); } }); return; } if (!segment.transmuxer) { doneFn(null, segment, {}); return; } if (typeof segment.container === "undefined") { segment.container = detectContainerForBytes$1(bytesAsUint8Array); } if (segment.container !== "ts" && segment.container !== "aac") { trackInfoFn(segment, { hasAudio: false, hasVideo: false }); doneFn(null, segment, {}); return; } transmuxAndNotify$1({ segment, bytes, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); }; const decrypt$1 = function({ id, key, encryptedBytes, decryptionWorker }, callback2) { const decryptionHandler = (event2) => { if (event2.data.source === id) { decryptionWorker.removeEventListener("message", decryptionHandler); const decrypted = event2.data.decrypted; callback2(new Uint8Array(decrypted.bytes, decrypted.byteOffset, decrypted.byteLength)); } }; decryptionWorker.addEventListener("message", decryptionHandler); let keyBytes; if (key.bytes.slice) { keyBytes = key.bytes.slice(); } else { keyBytes = new Uint32Array(Array.prototype.slice.call(key.bytes)); } decryptionWorker.postMessage(createTransferableMessage$1({ source: id, encrypted: encryptedBytes, key: keyBytes, iv: key.iv }), [encryptedBytes.buffer, keyBytes.buffer]); }; const decryptSegment$1 = ({ decryptionWorker, segment, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }) => { decrypt$1({ id: segment.requestId, key: segment.key, encryptedBytes: segment.encryptedBytes, decryptionWorker }, (decryptedBytes) => { segment.bytes = decryptedBytes; handleSegmentBytes$1({ segment, bytes: segment.bytes, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); }); }; const waitForCompletion$1 = ({ activeXhrs, decryptionWorker, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }) => { let count = 0; let didError = false; return (error, segment) => { if (didError) { return; } if (error) { didError = true; abortAll$1(activeXhrs); return doneFn(error, segment); } count += 1; if (count === activeXhrs.length) { const segmentFinish = function() { if (segment.encryptedBytes) { return decryptSegment$1({ decryptionWorker, segment, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); } handleSegmentBytes$1({ segment, bytes: segment.bytes, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); }; segment.endOfAllRequests = Date.now(); if (segment.map && segment.map.encryptedBytes && !segment.map.bytes) { return decrypt$1({ decryptionWorker, id: segment.requestId + "-init", encryptedBytes: segment.map.encryptedBytes, key: segment.map.key }, (decryptedBytes) => { segment.map.bytes = decryptedBytes; parseInitSegment$1(segment, (parseError) => { if (parseError) { abortAll$1(activeXhrs); return doneFn(parseError, segment); } segmentFinish(); }); }); } segmentFinish(); } }; }; const handleLoadEnd$1 = ({ loadendState, abortFn }) => (event2) => { const request = event2.target; if (request.aborted && abortFn && !loadendState.calledAbortFn) { abortFn(); loadendState.calledAbortFn = true; } }; const handleProgress$1 = ({ segment, progressFn, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn }) => (event2) => { const request = event2.target; if (request.aborted) { return; } segment.stats = merge$2(segment.stats, getProgressStats$1(event2)); if (!segment.stats.firstBytesReceivedAt && segment.stats.bytesReceived) { segment.stats.firstBytesReceivedAt = Date.now(); } return progressFn(event2, segment); }; const mediaSegmentRequest$1 = ({ xhr, xhrOptions, decryptionWorker, segment, abortFn, progressFn, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }) => { const activeXhrs = []; const finishProcessingFn = waitForCompletion$1({ activeXhrs, decryptionWorker, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); if (segment.key && !segment.key.bytes) { const objects = [segment.key]; if (segment.map && !segment.map.bytes && segment.map.key && segment.map.key.resolvedUri === segment.key.resolvedUri) { objects.push(segment.map.key); } const keyRequestOptions = merge$2(xhrOptions, { uri: segment.key.resolvedUri, responseType: "arraybuffer" }); const keyRequestCallback = handleKeyResponse$1(segment, objects, finishProcessingFn); const keyXhr = xhr(keyRequestOptions, keyRequestCallback); activeXhrs.push(keyXhr); } if (segment.map && !segment.map.bytes) { const differentMapKey = segment.map.key && (!segment.key || segment.key.resolvedUri !== segment.map.key.resolvedUri); if (differentMapKey) { const mapKeyRequestOptions = merge$2(xhrOptions, { uri: segment.map.key.resolvedUri, responseType: "arraybuffer" }); const mapKeyRequestCallback = handleKeyResponse$1(segment, [segment.map.key], finishProcessingFn); const mapKeyXhr = xhr(mapKeyRequestOptions, mapKeyRequestCallback); activeXhrs.push(mapKeyXhr); } const initSegmentOptions = merge$2(xhrOptions, { uri: segment.map.resolvedUri, responseType: "arraybuffer", headers: segmentXhrHeaders$1(segment.map) }); const initSegmentRequestCallback = handleInitSegmentResponse$1({ segment, finishProcessingFn }); const initSegmentXhr = xhr(initSegmentOptions, initSegmentRequestCallback); activeXhrs.push(initSegmentXhr); } const segmentRequestOptions = merge$2(xhrOptions, { uri: segment.part && segment.part.resolvedUri || segment.resolvedUri, responseType: "arraybuffer", headers: segmentXhrHeaders$1(segment) }); const segmentRequestCallback = handleSegmentResponse$1({ segment, finishProcessingFn, responseType: segmentRequestOptions.responseType }); const segmentXhr = xhr(segmentRequestOptions, segmentRequestCallback); segmentXhr.addEventListener("progress", handleProgress$1({ segment, progressFn, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn })); activeXhrs.push(segmentXhr); const loadendState = {}; activeXhrs.forEach((activeXhr) => { activeXhr.addEventListener("loadend", handleLoadEnd$1({ loadendState, abortFn })); }); return () => abortAll$1(activeXhrs); }; const logFn$1$1 = logger$1("CodecUtils"); const getCodecs$1 = function(media) { const mediaAttributes = media.attributes || {}; if (mediaAttributes.CODECS) { return parseCodecs$1(mediaAttributes.CODECS); } }; const isMaat$1 = (main, media) => { const mediaAttributes = media.attributes || {}; return main && main.mediaGroups && main.mediaGroups.AUDIO && mediaAttributes.AUDIO && main.mediaGroups.AUDIO[mediaAttributes.AUDIO]; }; const isMuxed$1 = (main, media) => { if (!isMaat$1(main, media)) { return true; } const mediaAttributes = media.attributes || {}; const audioGroup = main.mediaGroups.AUDIO[mediaAttributes.AUDIO]; for (const groupId in audioGroup) { if (!audioGroup[groupId].uri && !audioGroup[groupId].playlists) { return true; } } return false; }; const unwrapCodecList$1 = function(codecList) { const codecs = {}; codecList.forEach(({ mediaType, type: type2, details }) => { codecs[mediaType] = codecs[mediaType] || []; codecs[mediaType].push(translateLegacyCodec$1(`${type2}${details}`)); }); Object.keys(codecs).forEach(function(mediaType) { if (codecs[mediaType].length > 1) { logFn$1$1(`multiple ${mediaType} codecs found as attributes: ${codecs[mediaType].join(", ")}. Setting playlist codecs to null so that we wait for mux.js to probe segments for real codecs.`); codecs[mediaType] = null; return; } codecs[mediaType] = codecs[mediaType][0]; }); return codecs; }; const codecCount$1 = function(codecObj) { let count = 0; if (codecObj.audio) { count++; } if (codecObj.video) { count++; } return count; }; const codecsForPlaylist$1 = function(main, media) { const mediaAttributes = media.attributes || {}; const codecInfo = unwrapCodecList$1(getCodecs$1(media) || []); if (isMaat$1(main, media) && !codecInfo.audio) { if (!isMuxed$1(main, media)) { const defaultCodecs = unwrapCodecList$1(codecsFromDefault$1(main, mediaAttributes.AUDIO) || []); if (defaultCodecs.audio) { codecInfo.audio = defaultCodecs.audio; } } } return codecInfo; }; const logFn$2 = logger$1("PlaylistSelector"); const representationToString$1 = function(representation) { if (!representation || !representation.playlist) { return; } const playlist = representation.playlist; return JSON.stringify({ id: playlist.id, bandwidth: representation.bandwidth, width: representation.width, height: representation.height, codecs: playlist.attributes && playlist.attributes.CODECS || "" }); }; const safeGetComputedStyle$1 = function(el, property) { if (!el) { return ""; } const result = window_1.getComputedStyle(el); if (!result) { return ""; } return result[property]; }; const stableSort$1 = function(array, sortFn) { const newArray = array.slice(); array.sort(function(left, right) { const cmp = sortFn(left, right); if (cmp === 0) { return newArray.indexOf(left) - newArray.indexOf(right); } return cmp; }); }; const comparePlaylistBandwidth$1 = function(left, right) { let leftBandwidth; let rightBandwidth; if (left.attributes.BANDWIDTH) { leftBandwidth = left.attributes.BANDWIDTH; } leftBandwidth = leftBandwidth || window_1.Number.MAX_VALUE; if (right.attributes.BANDWIDTH) { rightBandwidth = right.attributes.BANDWIDTH; } rightBandwidth = rightBandwidth || window_1.Number.MAX_VALUE; return leftBandwidth - rightBandwidth; }; const comparePlaylistResolution$1 = function(left, right) { let leftWidth; let rightWidth; if (left.attributes.RESOLUTION && left.attributes.RESOLUTION.width) { leftWidth = left.attributes.RESOLUTION.width; } leftWidth = leftWidth || window_1.Number.MAX_VALUE; if (right.attributes.RESOLUTION && right.attributes.RESOLUTION.width) { rightWidth = right.attributes.RESOLUTION.width; } rightWidth = rightWidth || window_1.Number.MAX_VALUE; if (leftWidth === rightWidth && left.attributes.BANDWIDTH && right.attributes.BANDWIDTH) { return left.attributes.BANDWIDTH - right.attributes.BANDWIDTH; } return leftWidth - rightWidth; }; let simpleSelector$1 = function(main, playerBandwidth, playerWidth, playerHeight, limitRenditionByPlayerDimensions, playlistController) { if (!main) { return; } const options2 = { bandwidth: playerBandwidth, width: playerWidth, height: playerHeight, limitRenditionByPlayerDimensions }; let playlists = main.playlists; if (Playlist$1.isAudioOnly(main)) { playlists = playlistController.getAudioTrackPlaylists_(); options2.audioOnly = true; } let sortedPlaylistReps = playlists.map((playlist) => { let bandwidth2; const width2 = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.width; const height2 = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height; bandwidth2 = playlist.attributes && playlist.attributes.BANDWIDTH; bandwidth2 = bandwidth2 || window_1.Number.MAX_VALUE; return { bandwidth: bandwidth2, width: width2, height: height2, playlist }; }); stableSort$1(sortedPlaylistReps, (left, right) => left.bandwidth - right.bandwidth); sortedPlaylistReps = sortedPlaylistReps.filter((rep2) => !Playlist$1.isIncompatible(rep2.playlist)); let enabledPlaylistReps = sortedPlaylistReps.filter((rep2) => Playlist$1.isEnabled(rep2.playlist)); if (!enabledPlaylistReps.length) { enabledPlaylistReps = sortedPlaylistReps.filter((rep2) => !Playlist$1.isDisabled(rep2.playlist)); } const bandwidthPlaylistReps = enabledPlaylistReps.filter((rep2) => rep2.bandwidth * Config$1.BANDWIDTH_VARIANCE < playerBandwidth); let highestRemainingBandwidthRep = bandwidthPlaylistReps[bandwidthPlaylistReps.length - 1]; const bandwidthBestRep = bandwidthPlaylistReps.filter((rep2) => rep2.bandwidth === highestRemainingBandwidthRep.bandwidth)[0]; if (limitRenditionByPlayerDimensions === false) { const chosenRep2 = bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0]; if (chosenRep2 && chosenRep2.playlist) { let type2 = "sortedPlaylistReps"; if (bandwidthBestRep) { type2 = "bandwidthBestRep"; } if (enabledPlaylistReps[0]) { type2 = "enabledPlaylistReps"; } logFn$2(`choosing ${representationToString$1(chosenRep2)} using ${type2} with options`, options2); return chosenRep2.playlist; } logFn$2("could not choose a playlist with options", options2); return null; } const haveResolution = bandwidthPlaylistReps.filter((rep2) => rep2.width && rep2.height); stableSort$1(haveResolution, (left, right) => left.width - right.width); const resolutionBestRepList = haveResolution.filter((rep2) => rep2.width === playerWidth && rep2.height === playerHeight); highestRemainingBandwidthRep = resolutionBestRepList[resolutionBestRepList.length - 1]; const resolutionBestRep = resolutionBestRepList.filter((rep2) => rep2.bandwidth === highestRemainingBandwidthRep.bandwidth)[0]; let resolutionPlusOneList; let resolutionPlusOneSmallest; let resolutionPlusOneRep; if (!resolutionBestRep) { resolutionPlusOneList = haveResolution.filter((rep2) => rep2.width > playerWidth || rep2.height > playerHeight); resolutionPlusOneSmallest = resolutionPlusOneList.filter((rep2) => rep2.width === resolutionPlusOneList[0].width && rep2.height === resolutionPlusOneList[0].height); highestRemainingBandwidthRep = resolutionPlusOneSmallest[resolutionPlusOneSmallest.length - 1]; resolutionPlusOneRep = resolutionPlusOneSmallest.filter((rep2) => rep2.bandwidth === highestRemainingBandwidthRep.bandwidth)[0]; } let leastPixelDiffRep; if (playlistController.leastPixelDiffSelector) { const leastPixelDiffList = haveResolution.map((rep2) => { rep2.pixelDiff = Math.abs(rep2.width - playerWidth) + Math.abs(rep2.height - playerHeight); return rep2; }); stableSort$1(leastPixelDiffList, (left, right) => { if (left.pixelDiff === right.pixelDiff) { return right.bandwidth - left.bandwidth; } return left.pixelDiff - right.pixelDiff; }); leastPixelDiffRep = leastPixelDiffList[0]; } const chosenRep = leastPixelDiffRep || resolutionPlusOneRep || resolutionBestRep || bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0]; if (chosenRep && chosenRep.playlist) { let type2 = "sortedPlaylistReps"; if (leastPixelDiffRep) { type2 = "leastPixelDiffRep"; } else if (resolutionPlusOneRep) { type2 = "resolutionPlusOneRep"; } else if (resolutionBestRep) { type2 = "resolutionBestRep"; } else if (bandwidthBestRep) { type2 = "bandwidthBestRep"; } else if (enabledPlaylistReps[0]) { type2 = "enabledPlaylistReps"; } logFn$2(`choosing ${representationToString$1(chosenRep)} using ${type2} with options`, options2); return chosenRep.playlist; } logFn$2("could not choose a playlist with options", options2); return null; }; const lastBandwidthSelector$1 = function() { const pixelRatio = this.useDevicePixelRatio ? window_1.devicePixelRatio || 1 : 1; return simpleSelector$1(this.playlists.main, this.systemBandwidth, parseInt(safeGetComputedStyle$1(this.tech_.el(), "width"), 10) * pixelRatio, parseInt(safeGetComputedStyle$1(this.tech_.el(), "height"), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.playlistController_); }; const movingAverageBandwidthSelector$1 = function(decay) { let average = -1; let lastSystemBandwidth = -1; if (decay < 0 || decay > 1) { throw new Error("Moving average bandwidth decay must be between 0 and 1."); } return function() { const pixelRatio = this.useDevicePixelRatio ? window_1.devicePixelRatio || 1 : 1; if (average < 0) { average = this.systemBandwidth; lastSystemBandwidth = this.systemBandwidth; } if (this.systemBandwidth > 0 && this.systemBandwidth !== lastSystemBandwidth) { average = decay * this.systemBandwidth + (1 - decay) * average; lastSystemBandwidth = this.systemBandwidth; } return simpleSelector$1(this.playlists.main, average, parseInt(safeGetComputedStyle$1(this.tech_.el(), "width"), 10) * pixelRatio, parseInt(safeGetComputedStyle$1(this.tech_.el(), "height"), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.playlistController_); }; }; const minRebufferMaxBandwidthSelector$1 = function(settings) { const { main, currentTime, bandwidth: bandwidth2, duration: duration5, segmentDuration, timeUntilRebuffer: timeUntilRebuffer3, currentTimeline, syncController } = settings; const compatiblePlaylists = main.playlists.filter((playlist) => !Playlist$1.isIncompatible(playlist)); let enabledPlaylists = compatiblePlaylists.filter(Playlist$1.isEnabled); if (!enabledPlaylists.length) { enabledPlaylists = compatiblePlaylists.filter((playlist) => !Playlist$1.isDisabled(playlist)); } const bandwidthPlaylists = enabledPlaylists.filter(Playlist$1.hasAttribute.bind(null, "BANDWIDTH")); const rebufferingEstimates = bandwidthPlaylists.map((playlist) => { const syncPoint = syncController.getSyncPoint(playlist, duration5, currentTimeline, currentTime); const numRequests = syncPoint ? 1 : 2; const requestTimeEstimate = Playlist$1.estimateSegmentRequestTime(segmentDuration, bandwidth2, playlist); const rebufferingImpact = requestTimeEstimate * numRequests - timeUntilRebuffer3; return { playlist, rebufferingImpact }; }); const noRebufferingPlaylists = rebufferingEstimates.filter((estimate) => estimate.rebufferingImpact <= 0); stableSort$1(noRebufferingPlaylists, (a, b) => comparePlaylistBandwidth$1(b.playlist, a.playlist)); if (noRebufferingPlaylists.length) { return noRebufferingPlaylists[0]; } stableSort$1(rebufferingEstimates, (a, b) => a.rebufferingImpact - b.rebufferingImpact); return rebufferingEstimates[0] || null; }; const lowestBitrateCompatibleVariantSelector$1 = function() { const playlists = this.playlists.main.playlists.filter(Playlist$1.isEnabled); stableSort$1(playlists, (a, b) => comparePlaylistBandwidth$1(a, b)); const playlistsWithVideo = playlists.filter((playlist) => !!codecsForPlaylist$1(this.playlists.main, playlist).video); return playlistsWithVideo[0] || null; }; const concatSegments$1 = (segmentObj) => { let offset = 0; let tempBuffer; if (segmentObj.bytes) { tempBuffer = new Uint8Array(segmentObj.bytes); segmentObj.segments.forEach((segment) => { tempBuffer.set(segment, offset); offset += segment.byteLength; }); } return tempBuffer; }; const createCaptionsTrackIfNotExists$1 = function(inbandTextTracks, tech, captionStream) { if (!inbandTextTracks[captionStream]) { tech.trigger({ type: "usage", name: "vhs-608" }); let instreamId = captionStream; if (/^cc708_/.test(captionStream)) { instreamId = "SERVICE" + captionStream.split("_")[1]; } const track = tech.textTracks().getTrackById(instreamId); if (track) { inbandTextTracks[captionStream] = track; } else { const captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {}; let label2 = captionStream; let language = captionStream; let def = false; const captionService = captionServices[instreamId]; if (captionService) { label2 = captionService.label; language = captionService.language; def = captionService.default; } inbandTextTracks[captionStream] = tech.addRemoteTextTrack({ kind: "captions", id: instreamId, default: def, label: label2, language }, false).track; } } }; const addCaptionData$1 = function({ inbandTextTracks, captionArray, timestampOffset: timestampOffset2 }) { if (!captionArray) { return; } const Cue = window_1.WebKitDataCue || window_1.VTTCue; captionArray.forEach((caption) => { const track = caption.stream; inbandTextTracks[track].addCue(new Cue(caption.startTime + timestampOffset2, caption.endTime + timestampOffset2, caption.text)); }); }; const deprecateOldCue$1 = function(cue) { Object.defineProperties(cue.frame, { id: { get() { videojs$2.log.warn("cue.frame.id is deprecated. Use cue.value.key instead."); return cue.value.key; } }, value: { get() { videojs$2.log.warn("cue.frame.value is deprecated. Use cue.value.data instead."); return cue.value.data; } }, privateData: { get() { videojs$2.log.warn("cue.frame.privateData is deprecated. Use cue.value.data instead."); return cue.value.data; } } }); }; const addMetadata$1 = ({ inbandTextTracks, metadataArray, timestampOffset: timestampOffset2, videoDuration }) => { if (!metadataArray) { return; } const Cue = window_1.WebKitDataCue || window_1.VTTCue; const metadataTrack = inbandTextTracks.metadataTrack_; if (!metadataTrack) { return; } metadataArray.forEach((metadata) => { const time = metadata.cueTime + timestampOffset2; if (typeof time !== "number" || window_1.isNaN(time) || time < 0 || !(time < Infinity)) { return; } metadata.frames.forEach((frame) => { const cue = new Cue(time, time, frame.value || frame.url || frame.data || ""); cue.frame = frame; cue.value = frame; deprecateOldCue$1(cue); metadataTrack.addCue(cue); }); }); if (!metadataTrack.cues || !metadataTrack.cues.length) { return; } const cues = metadataTrack.cues; const cuesArray = []; for (let i2 = 0; i2 < cues.length; i2++) { if (cues[i2]) { cuesArray.push(cues[i2]); } } const cuesGroupedByStartTime = cuesArray.reduce((obj, cue) => { const timeSlot = obj[cue.startTime] || []; timeSlot.push(cue); obj[cue.startTime] = timeSlot; return obj; }, {}); const sortedStartTimes = Object.keys(cuesGroupedByStartTime).sort((a, b) => Number(a) - Number(b)); sortedStartTimes.forEach((startTime, idx) => { const cueGroup = cuesGroupedByStartTime[startTime]; const nextTime = Number(sortedStartTimes[idx + 1]) || videoDuration; cueGroup.forEach((cue) => { cue.endTime = nextTime; }); }); }; const createMetadataTrackIfNotExists$1 = (inbandTextTracks, dispatchType, tech) => { if (inbandTextTracks.metadataTrack_) { return; } inbandTextTracks.metadataTrack_ = tech.addRemoteTextTrack({ kind: "metadata", label: "Timed Metadata" }, false).track; inbandTextTracks.metadataTrack_.inBandMetadataTrackDispatchType = dispatchType; }; const removeCuesFromTrack$1 = function(start2, end, track) { let i2; let cue; if (!track) { return; } if (!track.cues) { return; } i2 = track.cues.length; while (i2--) { cue = track.cues[i2]; if (cue.startTime >= start2 && cue.endTime <= end) { track.removeCue(cue); } } }; const removeDuplicateCuesFromTrack$1 = function(track) { const cues = track.cues; if (!cues) { return; } for (let i2 = 0; i2 < cues.length; i2++) { const duplicates = []; let occurrences = 0; for (let j = 0; j < cues.length; j++) { if (cues[i2].startTime === cues[j].startTime && cues[i2].endTime === cues[j].endTime && cues[i2].text === cues[j].text) { occurrences++; if (occurrences > 1) { duplicates.push(cues[j]); } } } if (duplicates.length) { duplicates.forEach((dupe) => track.removeCue(dupe)); } } }; const gopsSafeToAlignWith$1 = (buffer, currentTime, mapping) => { if (typeof currentTime === "undefined" || currentTime === null || !buffer.length) { return []; } const currentTimePts = Math.ceil((currentTime - mapping + 3) * clock$1.ONE_SECOND_IN_TS); let i2; for (i2 = 0; i2 < buffer.length; i2++) { if (buffer[i2].pts > currentTimePts) { break; } } return buffer.slice(i2); }; const updateGopBuffer$1 = (buffer, gops, replace) => { if (!gops.length) { return buffer; } if (replace) { return gops.slice(); } const start2 = gops[0].pts; let i2 = 0; for (i2; i2 < buffer.length; i2++) { if (buffer[i2].pts >= start2) { break; } } return buffer.slice(0, i2).concat(gops); }; const removeGopBuffer$1 = (buffer, start2, end, mapping) => { const startPts = Math.ceil((start2 - mapping) * clock$1.ONE_SECOND_IN_TS); const endPts = Math.ceil((end - mapping) * clock$1.ONE_SECOND_IN_TS); const updatedBuffer = buffer.slice(); let i2 = buffer.length; while (i2--) { if (buffer[i2].pts <= endPts) { break; } } if (i2 === -1) { return updatedBuffer; } let j = i2 + 1; while (j--) { if (buffer[j].pts <= startPts) { break; } } j = Math.max(j, 0); updatedBuffer.splice(j, i2 - j + 1); return updatedBuffer; }; const shallowEqual$1 = function(a, b) { if (!a && !b || !a && b || a && !b) { return false; } if (a === b) { return true; } const akeys = Object.keys(a).sort(); const bkeys = Object.keys(b).sort(); if (akeys.length !== bkeys.length) { return false; } for (let i2 = 0; i2 < akeys.length; i2++) { const key = akeys[i2]; if (key !== bkeys[i2]) { return false; } if (a[key] !== b[key]) { return false; } } return true; }; const QUOTA_EXCEEDED_ERR$1 = 22; const getSyncSegmentCandidate$1 = function(currentTimeline, segments, targetTime) { segments = segments || []; const timelineSegments = []; let time = 0; for (let i2 = 0; i2 < segments.length; i2++) { const segment = segments[i2]; if (currentTimeline === segment.timeline) { timelineSegments.push(i2); time += segment.duration; if (time > targetTime) { return i2; } } } if (timelineSegments.length === 0) { return 0; } return timelineSegments[timelineSegments.length - 1]; }; const MIN_BACK_BUFFER$1 = 1; const CHECK_BUFFER_DELAY$1 = 500; const finite$1 = (num) => typeof num === "number" && isFinite(num); const MIN_SEGMENT_DURATION_TO_SAVE_STATS$1 = 1 / 60; const illegalMediaSwitch$1 = (loaderType, startingMedia, trackInfo) => { if (loaderType !== "main" || !startingMedia || !trackInfo) { return null; } if (!trackInfo.hasAudio && !trackInfo.hasVideo) { return "Neither audio nor video found in segment."; } if (startingMedia.hasVideo && !trackInfo.hasVideo) { return "Only audio found in segment when we expected video. We can't switch to audio only from a stream that had video. To get rid of this message, please add codec information to the manifest."; } if (!startingMedia.hasVideo && trackInfo.hasVideo) { return "Video found in segment when we expected only audio. We can't switch to a stream with video from an audio only stream. To get rid of this message, please add codec information to the manifest."; } return null; }; const safeBackBufferTrimTime$1 = (seekable3, currentTime, targetDuration) => { let trimTime = currentTime - Config$1.BACK_BUFFER_LENGTH; if (seekable3.length) { trimTime = Math.max(trimTime, seekable3.start(0)); } const maxTrimTime = currentTime - targetDuration; return Math.min(maxTrimTime, trimTime); }; const segmentInfoString$1 = (segmentInfo) => { const { startOfSegment, duration: duration5, segment, part, playlist: { mediaSequence: seq, id, segments = [] }, mediaIndex: index2, partIndex, timeline } = segmentInfo; const segmentLen = segments.length - 1; let selection = "mediaIndex/partIndex increment"; if (segmentInfo.getMediaInfoForTime) { selection = `getMediaInfoForTime (${segmentInfo.getMediaInfoForTime})`; } else if (segmentInfo.isSyncRequest) { selection = "getSyncSegmentCandidate (isSyncRequest)"; } if (segmentInfo.independent) { selection += ` with independent ${segmentInfo.independent}`; } const hasPartIndex = typeof partIndex === "number"; const name = segmentInfo.segment.uri ? "segment" : "pre-segment"; const zeroBasedPartCount = hasPartIndex ? getKnownPartCount$1({ preloadSegment: segment }) - 1 : 0; return `${name} [${seq + index2}/${seq + segmentLen}]` + (hasPartIndex ? ` part [${partIndex}/${zeroBasedPartCount}]` : "") + ` segment start/end [${segment.start} => ${segment.end}]` + (hasPartIndex ? ` part start/end [${part.start} => ${part.end}]` : "") + ` startOfSegment [${startOfSegment}] duration [${duration5}] timeline [${timeline}] selected by [${selection}] playlist [${id}]`; }; const timingInfoPropertyForMedia$1 = (mediaType) => `${mediaType}TimingInfo`; const timestampOffsetForSegment$1 = ({ segmentTimeline, currentTimeline, startOfSegment, buffered, overrideCheck }) => { if (!overrideCheck && segmentTimeline === currentTimeline) { return null; } if (segmentTimeline < currentTimeline) { return startOfSegment; } return buffered.length ? buffered.end(buffered.length - 1) : startOfSegment; }; const shouldWaitForTimelineChange$1 = ({ timelineChangeController, currentTimeline, segmentTimeline, loaderType, audioDisabled }) => { if (currentTimeline === segmentTimeline) { return false; } if (loaderType === "audio") { const lastMainTimelineChange = timelineChangeController.lastTimelineChange({ type: "main" }); return !lastMainTimelineChange || lastMainTimelineChange.to !== segmentTimeline; } if (loaderType === "main" && audioDisabled) { const pendingAudioTimelineChange = timelineChangeController.pendingTimelineChange({ type: "audio" }); if (pendingAudioTimelineChange && pendingAudioTimelineChange.to === segmentTimeline) { return false; } return true; } return false; }; const mediaDuration$1 = (timingInfos) => { let maxDuration = 0; ["video", "audio"].forEach(function(type2) { const typeTimingInfo = timingInfos[`${type2}TimingInfo`]; if (!typeTimingInfo) { return; } const { start: start2, end } = typeTimingInfo; let duration5; if (typeof start2 === "bigint" || typeof end === "bigint") { duration5 = window_1.BigInt(end) - window_1.BigInt(start2); } else if (typeof start2 === "number" && typeof end === "number") { duration5 = end - start2; } if (typeof duration5 !== "undefined" && duration5 > maxDuration) { maxDuration = duration5; } }); if (typeof maxDuration === "bigint" && maxDuration < Number.MAX_SAFE_INTEGER) { maxDuration = Number(maxDuration); } return maxDuration; }; const segmentTooLong$1 = ({ segmentDuration, maxDuration }) => { if (!segmentDuration) { return false; } return Math.round(segmentDuration) > maxDuration + TIME_FUDGE_FACTOR$1; }; const getTroublesomeSegmentDurationMessage$1 = (segmentInfo, sourceType) => { if (sourceType !== "hls") { return null; } const segmentDuration = mediaDuration$1({ audioTimingInfo: segmentInfo.audioTimingInfo, videoTimingInfo: segmentInfo.videoTimingInfo }); if (!segmentDuration) { return null; } const targetDuration = segmentInfo.playlist.targetDuration; const isSegmentWayTooLong = segmentTooLong$1({ segmentDuration, maxDuration: targetDuration * 2 }); const isSegmentSlightlyTooLong = segmentTooLong$1({ segmentDuration, maxDuration: targetDuration }); const segmentTooLongMessage = `Segment with index ${segmentInfo.mediaIndex} from playlist ${segmentInfo.playlist.id} has a duration of ${segmentDuration} when the reported duration is ${segmentInfo.duration} and the target duration is ${targetDuration}. For HLS content, a duration in excess of the target duration may result in playback issues. See the HLS specification section on EXT-X-TARGETDURATION for more details: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1`; if (isSegmentWayTooLong || isSegmentSlightlyTooLong) { return { severity: isSegmentWayTooLong ? "warn" : "info", message: segmentTooLongMessage }; } return null; }; class SegmentLoader$1 extends videojs$2.EventTarget { constructor(settings, options2 = {}) { super(); if (!settings) { throw new TypeError("Initialization settings are required"); } if (typeof settings.currentTime !== "function") { throw new TypeError("No currentTime getter specified"); } if (!settings.mediaSource) { throw new TypeError("No MediaSource specified"); } this.bandwidth = settings.bandwidth; this.throughput = { rate: 0, count: 0 }; this.roundTrip = NaN; this.resetStats_(); this.mediaIndex = null; this.partIndex = null; this.hasPlayed_ = settings.hasPlayed; this.currentTime_ = settings.currentTime; this.seekable_ = settings.seekable; this.seeking_ = settings.seeking; this.duration_ = settings.duration; this.mediaSource_ = settings.mediaSource; this.vhs_ = settings.vhs; this.loaderType_ = settings.loaderType; this.currentMediaInfo_ = void 0; this.startingMediaInfo_ = void 0; this.segmentMetadataTrack_ = settings.segmentMetadataTrack; this.goalBufferLength_ = settings.goalBufferLength; this.sourceType_ = settings.sourceType; this.sourceUpdater_ = settings.sourceUpdater; this.inbandTextTracks_ = settings.inbandTextTracks; this.state_ = "INIT"; this.timelineChangeController_ = settings.timelineChangeController; this.shouldSaveSegmentTimingInfo_ = true; this.parse708captions_ = settings.parse708captions; this.useDtsForTimestampOffset_ = settings.useDtsForTimestampOffset; this.captionServices_ = settings.captionServices; this.exactManifestTimings = settings.exactManifestTimings; this.checkBufferTimeout_ = null; this.error_ = void 0; this.currentTimeline_ = -1; this.pendingSegment_ = null; this.xhrOptions_ = null; this.pendingSegments_ = []; this.audioDisabled_ = false; this.isPendingTimestampOffset_ = false; this.gopBuffer_ = []; this.timeMapping_ = 0; this.safeAppend_ = videojs$2.browser.IE_VERSION >= 11; this.appendInitSegment_ = { audio: true, video: true }; this.playlistOfLastInitSegment_ = { audio: null, video: null }; this.callQueue_ = []; this.loadQueue_ = []; this.metadataQueue_ = { id3: [], caption: [] }; this.waitingOnRemove_ = false; this.quotaExceededErrorRetryTimeout_ = null; this.activeInitSegmentId_ = null; this.initSegments_ = {}; this.cacheEncryptionKeys_ = settings.cacheEncryptionKeys; this.keyCache_ = {}; this.decrypter_ = settings.decrypter; this.syncController_ = settings.syncController; this.syncPoint_ = { segmentIndex: 0, time: 0 }; this.transmuxer_ = this.createTransmuxer_(); this.triggerSyncInfoUpdate_ = () => this.trigger("syncinfoupdate"); this.syncController_.on("syncinfoupdate", this.triggerSyncInfoUpdate_); this.mediaSource_.addEventListener("sourceopen", () => { if (!this.isEndOfStream_()) { this.ended_ = false; } }); this.fetchAtBuffer_ = false; this.logger_ = logger$1(`SegmentLoader[${this.loaderType_}]`); Object.defineProperty(this, "state", { get() { return this.state_; }, set(newState) { if (newState !== this.state_) { this.logger_(`${this.state_} -> ${newState}`); this.state_ = newState; this.trigger("statechange"); } } }); this.sourceUpdater_.on("ready", () => { if (this.hasEnoughInfoToAppend_()) { this.processCallQueue_(); } }); if (this.loaderType_ === "main") { this.timelineChangeController_.on("pendingtimelinechange", () => { if (this.hasEnoughInfoToAppend_()) { this.processCallQueue_(); } }); } if (this.loaderType_ === "audio") { this.timelineChangeController_.on("timelinechange", () => { if (this.hasEnoughInfoToLoad_()) { this.processLoadQueue_(); } if (this.hasEnoughInfoToAppend_()) { this.processCallQueue_(); } }); } } createTransmuxer_() { return segmentTransmuxer$1.createTransmuxer({ remux: false, alignGopsAtEnd: this.safeAppend_, keepOriginalTimestamps: true, parse708captions: this.parse708captions_, captionServices: this.captionServices_ }); } resetStats_() { this.mediaBytesTransferred = 0; this.mediaRequests = 0; this.mediaRequestsAborted = 0; this.mediaRequestsTimedout = 0; this.mediaRequestsErrored = 0; this.mediaTransferDuration = 0; this.mediaSecondsLoaded = 0; this.mediaAppends = 0; } dispose() { this.trigger("dispose"); this.state = "DISPOSED"; this.pause(); this.abort_(); if (this.transmuxer_) { this.transmuxer_.terminate(); } this.resetStats_(); if (this.checkBufferTimeout_) { window_1.clearTimeout(this.checkBufferTimeout_); } if (this.syncController_ && this.triggerSyncInfoUpdate_) { this.syncController_.off("syncinfoupdate", this.triggerSyncInfoUpdate_); } this.off(); } setAudio(enable) { this.audioDisabled_ = !enable; if (enable) { this.appendInitSegment_.audio = true; } else { this.sourceUpdater_.removeAudio(0, this.duration_()); } } abort() { if (this.state !== "WAITING") { if (this.pendingSegment_) { this.pendingSegment_ = null; } return; } this.abort_(); this.state = "READY"; if (!this.paused()) { this.monitorBuffer_(); } } abort_() { if (this.pendingSegment_ && this.pendingSegment_.abortRequests) { this.pendingSegment_.abortRequests(); } this.pendingSegment_ = null; this.callQueue_ = []; this.loadQueue_ = []; this.metadataQueue_.id3 = []; this.metadataQueue_.caption = []; this.timelineChangeController_.clearPendingTimelineChange(this.loaderType_); this.waitingOnRemove_ = false; window_1.clearTimeout(this.quotaExceededErrorRetryTimeout_); this.quotaExceededErrorRetryTimeout_ = null; } checkForAbort_(requestId) { if (this.state === "APPENDING" && !this.pendingSegment_) { this.state = "READY"; return true; } if (!this.pendingSegment_ || this.pendingSegment_.requestId !== requestId) { return true; } return false; } error(error) { if (typeof error !== "undefined") { this.logger_("error occurred:", error); this.error_ = error; } this.pendingSegment_ = null; return this.error_; } endOfStream() { this.ended_ = true; if (this.transmuxer_) { segmentTransmuxer$1.reset(this.transmuxer_); } this.gopBuffer_.length = 0; this.pause(); this.trigger("ended"); } buffered_() { const trackInfo = this.getMediaInfo_(); if (!this.sourceUpdater_ || !trackInfo) { return createTimeRanges$2(); } if (this.loaderType_ === "main") { const { hasAudio, hasVideo, isMuxed: isMuxed3 } = trackInfo; if (hasVideo && hasAudio && !this.audioDisabled_ && !isMuxed3) { return this.sourceUpdater_.buffered(); } if (hasVideo) { return this.sourceUpdater_.videoBuffered(); } } return this.sourceUpdater_.audioBuffered(); } initSegmentForMap(map, set4 = false) { if (!map) { return null; } const id = initSegmentId$1(map); let storedMap = this.initSegments_[id]; if (set4 && !storedMap && map.bytes) { this.initSegments_[id] = storedMap = { resolvedUri: map.resolvedUri, byterange: map.byterange, bytes: map.bytes, tracks: map.tracks, timescales: map.timescales }; } return storedMap || map; } segmentKey(key, set4 = false) { if (!key) { return null; } const id = segmentKeyId$1(key); let storedKey = this.keyCache_[id]; if (this.cacheEncryptionKeys_ && set4 && !storedKey && key.bytes) { this.keyCache_[id] = storedKey = { resolvedUri: key.resolvedUri, bytes: key.bytes }; } const result = { resolvedUri: (storedKey || key).resolvedUri }; if (storedKey) { result.bytes = storedKey.bytes; } return result; } couldBeginLoading_() { return this.playlist_ && !this.paused(); } load() { this.monitorBuffer_(); if (!this.playlist_) { return; } if (this.state === "INIT" && this.couldBeginLoading_()) { return this.init_(); } if (!this.couldBeginLoading_() || this.state !== "READY" && this.state !== "INIT") { return; } this.state = "READY"; } init_() { this.state = "READY"; this.resetEverything(); return this.monitorBuffer_(); } playlist(newPlaylist, options2 = {}) { if (!newPlaylist) { return; } const oldPlaylist = this.playlist_; const segmentInfo = this.pendingSegment_; this.playlist_ = newPlaylist; this.xhrOptions_ = options2; if (this.state === "INIT") { newPlaylist.syncInfo = { mediaSequence: newPlaylist.mediaSequence, time: 0 }; if (this.loaderType_ === "main") { this.syncController_.setDateTimeMappingForStart(newPlaylist); } } let oldId = null; if (oldPlaylist) { if (oldPlaylist.id) { oldId = oldPlaylist.id; } else if (oldPlaylist.uri) { oldId = oldPlaylist.uri; } } this.logger_(`playlist update [${oldId} => ${newPlaylist.id || newPlaylist.uri}]`); this.trigger("syncinfoupdate"); if (this.state === "INIT" && this.couldBeginLoading_()) { return this.init_(); } if (!oldPlaylist || oldPlaylist.uri !== newPlaylist.uri) { if (this.mediaIndex !== null) { if (!newPlaylist.endList) { this.resetLoader(); } else { this.resyncLoader(); } } this.currentMediaInfo_ = void 0; this.trigger("playlistupdate"); return; } const mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence; this.logger_(`live window shift [${mediaSequenceDiff}]`); if (this.mediaIndex !== null) { this.mediaIndex -= mediaSequenceDiff; if (this.mediaIndex < 0) { this.mediaIndex = null; this.partIndex = null; } else { const segment = this.playlist_.segments[this.mediaIndex]; if (this.partIndex && (!segment.parts || !segment.parts.length || !segment.parts[this.partIndex])) { const mediaIndex = this.mediaIndex; this.logger_(`currently processing part (index ${this.partIndex}) no longer exists.`); this.resetLoader(); this.mediaIndex = mediaIndex; } } } if (segmentInfo) { segmentInfo.mediaIndex -= mediaSequenceDiff; if (segmentInfo.mediaIndex < 0) { segmentInfo.mediaIndex = null; segmentInfo.partIndex = null; } else { if (segmentInfo.mediaIndex >= 0) { segmentInfo.segment = newPlaylist.segments[segmentInfo.mediaIndex]; } if (segmentInfo.partIndex >= 0 && segmentInfo.segment.parts) { segmentInfo.part = segmentInfo.segment.parts[segmentInfo.partIndex]; } } } this.syncController_.saveExpiredSegmentInfo(oldPlaylist, newPlaylist); } pause() { if (this.checkBufferTimeout_) { window_1.clearTimeout(this.checkBufferTimeout_); this.checkBufferTimeout_ = null; } } paused() { return this.checkBufferTimeout_ === null; } resetEverything(done) { this.ended_ = false; this.activeInitSegmentId_ = null; this.appendInitSegment_ = { audio: true, video: true }; this.resetLoader(); this.remove(0, Infinity, done); if (this.transmuxer_) { this.transmuxer_.postMessage({ action: "clearAllMp4Captions" }); this.transmuxer_.postMessage({ action: "reset" }); } } resetLoader() { this.fetchAtBuffer_ = false; this.resyncLoader(); } resyncLoader() { if (this.transmuxer_) { segmentTransmuxer$1.reset(this.transmuxer_); } this.mediaIndex = null; this.partIndex = null; this.syncPoint_ = null; this.isPendingTimestampOffset_ = false; this.callQueue_ = []; this.loadQueue_ = []; this.metadataQueue_.id3 = []; this.metadataQueue_.caption = []; this.abort(); if (this.transmuxer_) { this.transmuxer_.postMessage({ action: "clearParsedMp4Captions" }); } } remove(start2, end, done = () => { }, force = false) { if (end === Infinity) { end = this.duration_(); } if (end <= start2) { this.logger_("skipping remove because end ${end} is <= start ${start}"); return; } if (!this.sourceUpdater_ || !this.getMediaInfo_()) { this.logger_("skipping remove because no source updater or starting media info"); return; } let removesRemaining = 1; const removeFinished = () => { removesRemaining--; if (removesRemaining === 0) { done(); } }; if (force || !this.audioDisabled_) { removesRemaining++; this.sourceUpdater_.removeAudio(start2, end, removeFinished); } if (force || this.loaderType_ === "main") { this.gopBuffer_ = removeGopBuffer$1(this.gopBuffer_, start2, end, this.timeMapping_); removesRemaining++; this.sourceUpdater_.removeVideo(start2, end, removeFinished); } for (const track in this.inbandTextTracks_) { removeCuesFromTrack$1(start2, end, this.inbandTextTracks_[track]); } removeCuesFromTrack$1(start2, end, this.segmentMetadataTrack_); removeFinished(); } monitorBuffer_() { if (this.checkBufferTimeout_) { window_1.clearTimeout(this.checkBufferTimeout_); } this.checkBufferTimeout_ = window_1.setTimeout(this.monitorBufferTick_.bind(this), 1); } monitorBufferTick_() { if (this.state === "READY") { this.fillBuffer_(); } if (this.checkBufferTimeout_) { window_1.clearTimeout(this.checkBufferTimeout_); } this.checkBufferTimeout_ = window_1.setTimeout(this.monitorBufferTick_.bind(this), CHECK_BUFFER_DELAY$1); } fillBuffer_() { if (this.sourceUpdater_.updating()) { return; } const segmentInfo = this.chooseNextRequest_(); if (!segmentInfo) { return; } if (typeof segmentInfo.timestampOffset === "number") { this.isPendingTimestampOffset_ = false; this.timelineChangeController_.pendingTimelineChange({ type: this.loaderType_, from: this.currentTimeline_, to: segmentInfo.timeline }); } this.loadSegment_(segmentInfo); } isEndOfStream_(mediaIndex = this.mediaIndex, playlist = this.playlist_, partIndex = this.partIndex) { if (!playlist || !this.mediaSource_) { return false; } const segment = typeof mediaIndex === "number" && playlist.segments[mediaIndex]; const appendedLastSegment = mediaIndex + 1 === playlist.segments.length; const appendedLastPart = !segment || !segment.parts || partIndex + 1 === segment.parts.length; return playlist.endList && this.mediaSource_.readyState === "open" && appendedLastSegment && appendedLastPart; } chooseNextRequest_() { const buffered = this.buffered_(); const bufferedEnd = lastBufferedEnd$1(buffered) || 0; const bufferedTime = timeAheadOf$1(buffered, this.currentTime_()); const preloaded = !this.hasPlayed_() && bufferedTime >= 1; const haveEnoughBuffer = bufferedTime >= this.goalBufferLength_(); const segments = this.playlist_.segments; if (!segments.length || preloaded || haveEnoughBuffer) { return null; } this.syncPoint_ = this.syncPoint_ || this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_()); const next = { partIndex: null, mediaIndex: null, startOfSegment: null, playlist: this.playlist_, isSyncRequest: Boolean(!this.syncPoint_) }; if (next.isSyncRequest) { next.mediaIndex = getSyncSegmentCandidate$1(this.currentTimeline_, segments, bufferedEnd); } else if (this.mediaIndex !== null) { const segment = segments[this.mediaIndex]; const partIndex = typeof this.partIndex === "number" ? this.partIndex : -1; next.startOfSegment = segment.end ? segment.end : bufferedEnd; if (segment.parts && segment.parts[partIndex + 1]) { next.mediaIndex = this.mediaIndex; next.partIndex = partIndex + 1; } else { next.mediaIndex = this.mediaIndex + 1; } } else { const { segmentIndex, startTime, partIndex } = Playlist$1.getMediaInfoForTime({ exactManifestTimings: this.exactManifestTimings, playlist: this.playlist_, currentTime: this.fetchAtBuffer_ ? bufferedEnd : this.currentTime_(), startingPartIndex: this.syncPoint_.partIndex, startingSegmentIndex: this.syncPoint_.segmentIndex, startTime: this.syncPoint_.time }); next.getMediaInfoForTime = this.fetchAtBuffer_ ? `bufferedEnd ${bufferedEnd}` : `currentTime ${this.currentTime_()}`; next.mediaIndex = segmentIndex; next.startOfSegment = startTime; next.partIndex = partIndex; } const nextSegment = segments[next.mediaIndex]; let nextPart = nextSegment && typeof next.partIndex === "number" && nextSegment.parts && nextSegment.parts[next.partIndex]; if (!nextSegment || typeof next.partIndex === "number" && !nextPart) { return null; } if (typeof next.partIndex !== "number" && nextSegment.parts) { next.partIndex = 0; nextPart = nextSegment.parts[0]; } if (!bufferedTime && nextPart && !nextPart.independent) { if (next.partIndex === 0) { const lastSegment = segments[next.mediaIndex - 1]; const lastSegmentLastPart = lastSegment.parts && lastSegment.parts.length && lastSegment.parts[lastSegment.parts.length - 1]; if (lastSegmentLastPart && lastSegmentLastPart.independent) { next.mediaIndex -= 1; next.partIndex = lastSegment.parts.length - 1; next.independent = "previous segment"; } } else if (nextSegment.parts[next.partIndex - 1].independent) { next.partIndex -= 1; next.independent = "previous part"; } } const ended = this.mediaSource_ && this.mediaSource_.readyState === "ended"; if (next.mediaIndex >= segments.length - 1 && ended && !this.seeking_()) { return null; } return this.generateSegmentInfo_(next); } generateSegmentInfo_(options2) { const { independent, playlist, mediaIndex, startOfSegment, isSyncRequest, partIndex, forceTimestampOffset, getMediaInfoForTime: getMediaInfoForTime3 } = options2; const segment = playlist.segments[mediaIndex]; const part = typeof partIndex === "number" && segment.parts[partIndex]; const segmentInfo = { requestId: "segment-loader-" + Math.random(), uri: part && part.resolvedUri || segment.resolvedUri, mediaIndex, partIndex: part ? partIndex : null, isSyncRequest, startOfSegment, playlist, bytes: null, encryptedBytes: null, timestampOffset: null, timeline: segment.timeline, duration: part && part.duration || segment.duration, segment, part, byteLength: 0, transmuxer: this.transmuxer_, getMediaInfoForTime: getMediaInfoForTime3, independent }; const overrideCheck = typeof forceTimestampOffset !== "undefined" ? forceTimestampOffset : this.isPendingTimestampOffset_; segmentInfo.timestampOffset = this.timestampOffsetForSegment_({ segmentTimeline: segment.timeline, currentTimeline: this.currentTimeline_, startOfSegment, buffered: this.buffered_(), overrideCheck }); const audioBufferedEnd = lastBufferedEnd$1(this.sourceUpdater_.audioBuffered()); if (typeof audioBufferedEnd === "number") { segmentInfo.audioAppendStart = audioBufferedEnd - this.sourceUpdater_.audioTimestampOffset(); } if (this.sourceUpdater_.videoBuffered().length) { segmentInfo.gopsToAlignWith = gopsSafeToAlignWith$1( this.gopBuffer_, this.currentTime_() - this.sourceUpdater_.videoTimestampOffset(), this.timeMapping_ ); } return segmentInfo; } timestampOffsetForSegment_(options2) { return timestampOffsetForSegment$1(options2); } earlyAbortWhenNeeded_(stats) { if (this.vhs_.tech_.paused() || !this.xhrOptions_.timeout || !this.playlist_.attributes.BANDWIDTH) { return; } if (Date.now() - (stats.firstBytesReceivedAt || Date.now()) < 1e3) { return; } const currentTime = this.currentTime_(); const measuredBandwidth = stats.bandwidth; const segmentDuration = this.pendingSegment_.duration; const requestTimeRemaining = Playlist$1.estimateSegmentRequestTime(segmentDuration, measuredBandwidth, this.playlist_, stats.bytesReceived); const timeUntilRebuffer$1$1 = timeUntilRebuffer$1(this.buffered_(), currentTime, this.vhs_.tech_.playbackRate()) - 1; if (requestTimeRemaining <= timeUntilRebuffer$1$1) { return; } const switchCandidate = minRebufferMaxBandwidthSelector$1({ main: this.vhs_.playlists.main, currentTime, bandwidth: measuredBandwidth, duration: this.duration_(), segmentDuration, timeUntilRebuffer: timeUntilRebuffer$1$1, currentTimeline: this.currentTimeline_, syncController: this.syncController_ }); if (!switchCandidate) { return; } const rebufferingImpact = requestTimeRemaining - timeUntilRebuffer$1$1; const timeSavedBySwitching = rebufferingImpact - switchCandidate.rebufferingImpact; let minimumTimeSaving = 0.5; if (timeUntilRebuffer$1$1 <= TIME_FUDGE_FACTOR$1) { minimumTimeSaving = 1; } if (!switchCandidate.playlist || switchCandidate.playlist.uri === this.playlist_.uri || timeSavedBySwitching < minimumTimeSaving) { return; } this.bandwidth = switchCandidate.playlist.attributes.BANDWIDTH * Config$1.BANDWIDTH_VARIANCE + 1; this.trigger("earlyabort"); } handleAbort_(segmentInfo) { this.logger_(`Aborting ${segmentInfoString$1(segmentInfo)}`); this.mediaRequestsAborted += 1; } handleProgress_(event2, simpleSegment) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } this.trigger("progress"); } handleTrackInfo_(simpleSegment, trackInfo) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } if (this.checkForIllegalMediaSwitch(trackInfo)) { return; } trackInfo = trackInfo || {}; if (!shallowEqual$1(this.currentMediaInfo_, trackInfo)) { this.appendInitSegment_ = { audio: true, video: true }; this.startingMediaInfo_ = trackInfo; this.currentMediaInfo_ = trackInfo; this.logger_("trackinfo update", trackInfo); this.trigger("trackinfo"); } if (this.checkForAbort_(simpleSegment.requestId)) { return; } this.pendingSegment_.trackInfo = trackInfo; if (this.hasEnoughInfoToAppend_()) { this.processCallQueue_(); } } handleTimingInfo_(simpleSegment, mediaType, timeType, time) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } const segmentInfo = this.pendingSegment_; const timingInfoProperty = timingInfoPropertyForMedia$1(mediaType); segmentInfo[timingInfoProperty] = segmentInfo[timingInfoProperty] || {}; segmentInfo[timingInfoProperty][timeType] = time; this.logger_(`timinginfo: ${mediaType} - ${timeType} - ${time}`); if (this.hasEnoughInfoToAppend_()) { this.processCallQueue_(); } } handleCaptions_(simpleSegment, captionData) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } if (captionData.length === 0) { this.logger_("SegmentLoader received no captions from a caption event"); return; } const segmentInfo = this.pendingSegment_; if (!segmentInfo.hasAppendedData_) { this.metadataQueue_.caption.push(this.handleCaptions_.bind(this, simpleSegment, captionData)); return; } const timestampOffset2 = this.sourceUpdater_.videoTimestampOffset() === null ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset(); const captionTracks = {}; captionData.forEach((caption) => { captionTracks[caption.stream] = captionTracks[caption.stream] || { startTime: Infinity, captions: [], endTime: 0 }; const captionTrack = captionTracks[caption.stream]; captionTrack.startTime = Math.min(captionTrack.startTime, caption.startTime + timestampOffset2); captionTrack.endTime = Math.max(captionTrack.endTime, caption.endTime + timestampOffset2); captionTrack.captions.push(caption); }); Object.keys(captionTracks).forEach((trackName) => { const { startTime, endTime, captions } = captionTracks[trackName]; const inbandTextTracks = this.inbandTextTracks_; this.logger_(`adding cues from ${startTime} -> ${endTime} for ${trackName}`); createCaptionsTrackIfNotExists$1(inbandTextTracks, this.vhs_.tech_, trackName); removeCuesFromTrack$1(startTime, endTime, inbandTextTracks[trackName]); addCaptionData$1({ captionArray: captions, inbandTextTracks, timestampOffset: timestampOffset2 }); }); if (this.transmuxer_) { this.transmuxer_.postMessage({ action: "clearParsedMp4Captions" }); } } handleId3_(simpleSegment, id3Frames, dispatchType) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } const segmentInfo = this.pendingSegment_; if (!segmentInfo.hasAppendedData_) { this.metadataQueue_.id3.push(this.handleId3_.bind(this, simpleSegment, id3Frames, dispatchType)); return; } const timestampOffset2 = this.sourceUpdater_.videoTimestampOffset() === null ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset(); createMetadataTrackIfNotExists$1(this.inbandTextTracks_, dispatchType, this.vhs_.tech_); addMetadata$1({ inbandTextTracks: this.inbandTextTracks_, metadataArray: id3Frames, timestampOffset: timestampOffset2, videoDuration: this.duration_() }); } processMetadataQueue_() { this.metadataQueue_.id3.forEach((fn2) => fn2()); this.metadataQueue_.caption.forEach((fn2) => fn2()); this.metadataQueue_.id3 = []; this.metadataQueue_.caption = []; } processCallQueue_() { const callQueue = this.callQueue_; this.callQueue_ = []; callQueue.forEach((fun) => fun()); } processLoadQueue_() { const loadQueue = this.loadQueue_; this.loadQueue_ = []; loadQueue.forEach((fun) => fun()); } hasEnoughInfoToLoad_() { if (this.loaderType_ !== "audio") { return true; } const segmentInfo = this.pendingSegment_; if (!segmentInfo) { return false; } if (!this.getCurrentMediaInfo_()) { return true; } if (shouldWaitForTimelineChange$1({ timelineChangeController: this.timelineChangeController_, currentTimeline: this.currentTimeline_, segmentTimeline: segmentInfo.timeline, loaderType: this.loaderType_, audioDisabled: this.audioDisabled_ })) { return false; } return true; } getCurrentMediaInfo_(segmentInfo = this.pendingSegment_) { return segmentInfo && segmentInfo.trackInfo || this.currentMediaInfo_; } getMediaInfo_(segmentInfo = this.pendingSegment_) { return this.getCurrentMediaInfo_(segmentInfo) || this.startingMediaInfo_; } getPendingSegmentPlaylist() { return this.pendingSegment_ ? this.pendingSegment_.playlist : null; } hasEnoughInfoToAppend_() { if (!this.sourceUpdater_.ready()) { return false; } if (this.waitingOnRemove_ || this.quotaExceededErrorRetryTimeout_) { return false; } const segmentInfo = this.pendingSegment_; const trackInfo = this.getCurrentMediaInfo_(); if (!segmentInfo || !trackInfo) { return false; } const { hasAudio, hasVideo, isMuxed: isMuxed3 } = trackInfo; if (hasVideo && !segmentInfo.videoTimingInfo) { return false; } if (hasAudio && !this.audioDisabled_ && !isMuxed3 && !segmentInfo.audioTimingInfo) { return false; } if (shouldWaitForTimelineChange$1({ timelineChangeController: this.timelineChangeController_, currentTimeline: this.currentTimeline_, segmentTimeline: segmentInfo.timeline, loaderType: this.loaderType_, audioDisabled: this.audioDisabled_ })) { return false; } return true; } handleData_(simpleSegment, result) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } if (this.callQueue_.length || !this.hasEnoughInfoToAppend_()) { this.callQueue_.push(this.handleData_.bind(this, simpleSegment, result)); return; } const segmentInfo = this.pendingSegment_; this.setTimeMapping_(segmentInfo.timeline); this.updateMediaSecondsLoaded_(segmentInfo.part || segmentInfo.segment); if (this.mediaSource_.readyState === "closed") { return; } if (simpleSegment.map) { simpleSegment.map = this.initSegmentForMap(simpleSegment.map, true); segmentInfo.segment.map = simpleSegment.map; } if (simpleSegment.key) { this.segmentKey(simpleSegment.key, true); } segmentInfo.isFmp4 = simpleSegment.isFmp4; segmentInfo.timingInfo = segmentInfo.timingInfo || {}; if (segmentInfo.isFmp4) { this.trigger("fmp4"); segmentInfo.timingInfo.start = segmentInfo[timingInfoPropertyForMedia$1(result.type)].start; } else { const trackInfo = this.getCurrentMediaInfo_(); const useVideoTimingInfo = this.loaderType_ === "main" && trackInfo && trackInfo.hasVideo; let firstVideoFrameTimeForData; if (useVideoTimingInfo) { firstVideoFrameTimeForData = segmentInfo.videoTimingInfo.start; } segmentInfo.timingInfo.start = this.trueSegmentStart_({ currentStart: segmentInfo.timingInfo.start, playlist: segmentInfo.playlist, mediaIndex: segmentInfo.mediaIndex, currentVideoTimestampOffset: this.sourceUpdater_.videoTimestampOffset(), useVideoTimingInfo, firstVideoFrameTimeForData, videoTimingInfo: segmentInfo.videoTimingInfo, audioTimingInfo: segmentInfo.audioTimingInfo }); } this.updateAppendInitSegmentStatus(segmentInfo, result.type); this.updateSourceBufferTimestampOffset_(segmentInfo); if (segmentInfo.isSyncRequest) { this.updateTimingInfoEnd_(segmentInfo); this.syncController_.saveSegmentTimingInfo({ segmentInfo, shouldSaveTimelineMapping: this.loaderType_ === "main" }); const next = this.chooseNextRequest_(); if (next.mediaIndex !== segmentInfo.mediaIndex || next.partIndex !== segmentInfo.partIndex) { this.logger_("sync segment was incorrect, not appending"); return; } this.logger_("sync segment was correct, appending"); } segmentInfo.hasAppendedData_ = true; this.processMetadataQueue_(); this.appendData_(segmentInfo, result); } updateAppendInitSegmentStatus(segmentInfo, type2) { if (this.loaderType_ === "main" && typeof segmentInfo.timestampOffset === "number" && !segmentInfo.changedTimestampOffset) { this.appendInitSegment_ = { audio: true, video: true }; } if (this.playlistOfLastInitSegment_[type2] !== segmentInfo.playlist) { this.appendInitSegment_[type2] = true; } } getInitSegmentAndUpdateState_({ type: type2, initSegment, map, playlist }) { if (map) { const id = initSegmentId$1(map); if (this.activeInitSegmentId_ === id) { return null; } initSegment = this.initSegmentForMap(map, true).bytes; this.activeInitSegmentId_ = id; } if (initSegment && this.appendInitSegment_[type2]) { this.playlistOfLastInitSegment_[type2] = playlist; this.appendInitSegment_[type2] = false; this.activeInitSegmentId_ = null; return initSegment; } return null; } handleQuotaExceededError_({ segmentInfo, type: type2, bytes }, error) { const audioBuffered = this.sourceUpdater_.audioBuffered(); const videoBuffered = this.sourceUpdater_.videoBuffered(); if (audioBuffered.length > 1) { this.logger_("On QUOTA_EXCEEDED_ERR, found gaps in the audio buffer: " + timeRangesToArray$1(audioBuffered).join(", ")); } if (videoBuffered.length > 1) { this.logger_("On QUOTA_EXCEEDED_ERR, found gaps in the video buffer: " + timeRangesToArray$1(videoBuffered).join(", ")); } const audioBufferStart = audioBuffered.length ? audioBuffered.start(0) : 0; const audioBufferEnd = audioBuffered.length ? audioBuffered.end(audioBuffered.length - 1) : 0; const videoBufferStart = videoBuffered.length ? videoBuffered.start(0) : 0; const videoBufferEnd = videoBuffered.length ? videoBuffered.end(videoBuffered.length - 1) : 0; if (audioBufferEnd - audioBufferStart <= MIN_BACK_BUFFER$1 && videoBufferEnd - videoBufferStart <= MIN_BACK_BUFFER$1) { this.logger_(`On QUOTA_EXCEEDED_ERR, single segment too large to append to buffer, triggering an error. Appended byte length: ${bytes.byteLength}, audio buffer: ${timeRangesToArray$1(audioBuffered).join(", ")}, video buffer: ${timeRangesToArray$1(videoBuffered).join(", ")}, `); this.error({ message: "Quota exceeded error with append of a single segment of content", excludeUntil: Infinity }); this.trigger("error"); return; } this.waitingOnRemove_ = true; this.callQueue_.push(this.appendToSourceBuffer_.bind(this, { segmentInfo, type: type2, bytes })); const currentTime = this.currentTime_(); const timeToRemoveUntil = currentTime - MIN_BACK_BUFFER$1; this.logger_(`On QUOTA_EXCEEDED_ERR, removing audio/video from 0 to ${timeToRemoveUntil}`); this.remove(0, timeToRemoveUntil, () => { this.logger_(`On QUOTA_EXCEEDED_ERR, retrying append in ${MIN_BACK_BUFFER$1}s`); this.waitingOnRemove_ = false; this.quotaExceededErrorRetryTimeout_ = window_1.setTimeout(() => { this.logger_("On QUOTA_EXCEEDED_ERR, re-processing call queue"); this.quotaExceededErrorRetryTimeout_ = null; this.processCallQueue_(); }, MIN_BACK_BUFFER$1 * 1e3); }, true); } handleAppendError_({ segmentInfo, type: type2, bytes }, error) { if (!error) { return; } if (error.code === QUOTA_EXCEEDED_ERR$1) { this.handleQuotaExceededError_({ segmentInfo, type: type2, bytes }); return; } this.logger_("Received non QUOTA_EXCEEDED_ERR on append", error); this.error(`${type2} append of ${bytes.length}b failed for segment #${segmentInfo.mediaIndex} in playlist ${segmentInfo.playlist.id}`); this.trigger("appenderror"); } appendToSourceBuffer_({ segmentInfo, type: type2, initSegment, data, bytes }) { if (!bytes) { const segments = [data]; let byteLength = data.byteLength; if (initSegment) { segments.unshift(initSegment); byteLength += initSegment.byteLength; } bytes = concatSegments$1({ bytes: byteLength, segments }); } this.sourceUpdater_.appendBuffer({ segmentInfo, type: type2, bytes }, this.handleAppendError_.bind(this, { segmentInfo, type: type2, bytes })); } handleSegmentTimingInfo_(type2, requestId, segmentTimingInfo) { if (!this.pendingSegment_ || requestId !== this.pendingSegment_.requestId) { return; } const segment = this.pendingSegment_.segment; const timingInfoProperty = `${type2}TimingInfo`; if (!segment[timingInfoProperty]) { segment[timingInfoProperty] = {}; } segment[timingInfoProperty].transmuxerPrependedSeconds = segmentTimingInfo.prependedContentDuration || 0; segment[timingInfoProperty].transmuxedPresentationStart = segmentTimingInfo.start.presentation; segment[timingInfoProperty].transmuxedDecodeStart = segmentTimingInfo.start.decode; segment[timingInfoProperty].transmuxedPresentationEnd = segmentTimingInfo.end.presentation; segment[timingInfoProperty].transmuxedDecodeEnd = segmentTimingInfo.end.decode; segment[timingInfoProperty].baseMediaDecodeTime = segmentTimingInfo.baseMediaDecodeTime; } appendData_(segmentInfo, result) { const { type: type2, data } = result; if (!data || !data.byteLength) { return; } if (type2 === "audio" && this.audioDisabled_) { return; } const initSegment = this.getInitSegmentAndUpdateState_({ type: type2, initSegment: result.initSegment, playlist: segmentInfo.playlist, map: segmentInfo.isFmp4 ? segmentInfo.segment.map : null }); this.appendToSourceBuffer_({ segmentInfo, type: type2, initSegment, data }); } loadSegment_(segmentInfo) { this.state = "WAITING"; this.pendingSegment_ = segmentInfo; this.trimBackBuffer_(segmentInfo); if (typeof segmentInfo.timestampOffset === "number") { if (this.transmuxer_) { this.transmuxer_.postMessage({ action: "clearAllMp4Captions" }); } } if (!this.hasEnoughInfoToLoad_()) { this.loadQueue_.push(() => { const options2 = _extends$2({}, segmentInfo, { forceTimestampOffset: true }); _extends$2(segmentInfo, this.generateSegmentInfo_(options2)); this.isPendingTimestampOffset_ = false; this.updateTransmuxerAndRequestSegment_(segmentInfo); }); return; } this.updateTransmuxerAndRequestSegment_(segmentInfo); } updateTransmuxerAndRequestSegment_(segmentInfo) { if (this.shouldUpdateTransmuxerTimestampOffset_(segmentInfo.timestampOffset)) { this.gopBuffer_.length = 0; segmentInfo.gopsToAlignWith = []; this.timeMapping_ = 0; this.transmuxer_.postMessage({ action: "reset" }); this.transmuxer_.postMessage({ action: "setTimestampOffset", timestampOffset: segmentInfo.timestampOffset }); } const simpleSegment = this.createSimplifiedSegmentObj_(segmentInfo); const isEndOfStream = this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex); const isWalkingForward = this.mediaIndex !== null; const isDiscontinuity = segmentInfo.timeline !== this.currentTimeline_ && segmentInfo.timeline > 0; const isEndOfTimeline = isEndOfStream || isWalkingForward && isDiscontinuity; this.logger_(`Requesting ${segmentInfoString$1(segmentInfo)}`); if (simpleSegment.map && !simpleSegment.map.bytes) { this.logger_("going to request init segment."); this.appendInitSegment_ = { video: true, audio: true }; } segmentInfo.abortRequests = mediaSegmentRequest$1({ xhr: this.vhs_.xhr, xhrOptions: this.xhrOptions_, decryptionWorker: this.decrypter_, segment: simpleSegment, abortFn: this.handleAbort_.bind(this, segmentInfo), progressFn: this.handleProgress_.bind(this), trackInfoFn: this.handleTrackInfo_.bind(this), timingInfoFn: this.handleTimingInfo_.bind(this), videoSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, "video", segmentInfo.requestId), audioSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, "audio", segmentInfo.requestId), captionsFn: this.handleCaptions_.bind(this), isEndOfTimeline, endedTimelineFn: () => { this.logger_("received endedtimeline callback"); }, id3Fn: this.handleId3_.bind(this), dataFn: this.handleData_.bind(this), doneFn: this.segmentRequestFinished_.bind(this), onTransmuxerLog: ({ message, level, stream }) => { this.logger_(`${segmentInfoString$1(segmentInfo)} logged from transmuxer stream ${stream} as a ${level}: ${message}`); } }); } trimBackBuffer_(segmentInfo) { const removeToTime = safeBackBufferTrimTime$1(this.seekable_(), this.currentTime_(), this.playlist_.targetDuration || 10); if (removeToTime > 0) { this.remove(0, removeToTime); } } createSimplifiedSegmentObj_(segmentInfo) { const segment = segmentInfo.segment; const part = segmentInfo.part; const simpleSegment = { resolvedUri: part ? part.resolvedUri : segment.resolvedUri, byterange: part ? part.byterange : segment.byterange, requestId: segmentInfo.requestId, transmuxer: segmentInfo.transmuxer, audioAppendStart: segmentInfo.audioAppendStart, gopsToAlignWith: segmentInfo.gopsToAlignWith, part: segmentInfo.part }; const previousSegment = segmentInfo.playlist.segments[segmentInfo.mediaIndex - 1]; if (previousSegment && previousSegment.timeline === segment.timeline) { if (previousSegment.videoTimingInfo) { simpleSegment.baseStartTime = previousSegment.videoTimingInfo.transmuxedDecodeEnd; } else if (previousSegment.audioTimingInfo) { simpleSegment.baseStartTime = previousSegment.audioTimingInfo.transmuxedDecodeEnd; } } if (segment.key) { const iv = segment.key.iv || new Uint32Array([0, 0, 0, segmentInfo.mediaIndex + segmentInfo.playlist.mediaSequence]); simpleSegment.key = this.segmentKey(segment.key); simpleSegment.key.iv = iv; } if (segment.map) { simpleSegment.map = this.initSegmentForMap(segment.map); } return simpleSegment; } saveTransferStats_(stats) { this.mediaRequests += 1; if (stats) { this.mediaBytesTransferred += stats.bytesReceived; this.mediaTransferDuration += stats.roundTripTime; } } saveBandwidthRelatedStats_(duration5, stats) { this.pendingSegment_.byteLength = stats.bytesReceived; if (duration5 < MIN_SEGMENT_DURATION_TO_SAVE_STATS$1) { this.logger_(`Ignoring segment's bandwidth because its duration of ${duration5} is less than the min to record ${MIN_SEGMENT_DURATION_TO_SAVE_STATS$1}`); return; } this.bandwidth = stats.bandwidth; this.roundTrip = stats.roundTripTime; } handleTimeout_() { this.mediaRequestsTimedout += 1; this.bandwidth = 1; this.roundTrip = NaN; this.trigger("bandwidthupdate"); this.trigger("timeout"); } segmentRequestFinished_(error, simpleSegment, result) { if (this.callQueue_.length) { this.callQueue_.push(this.segmentRequestFinished_.bind(this, error, simpleSegment, result)); return; } this.saveTransferStats_(simpleSegment.stats); if (!this.pendingSegment_) { return; } if (simpleSegment.requestId !== this.pendingSegment_.requestId) { return; } if (error) { this.pendingSegment_ = null; this.state = "READY"; if (error.code === REQUEST_ERRORS$1.ABORTED) { return; } this.pause(); if (error.code === REQUEST_ERRORS$1.TIMEOUT) { this.handleTimeout_(); return; } this.mediaRequestsErrored += 1; this.error(error); this.trigger("error"); return; } const segmentInfo = this.pendingSegment_; this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats); segmentInfo.endOfAllRequests = simpleSegment.endOfAllRequests; if (result.gopInfo) { this.gopBuffer_ = updateGopBuffer$1(this.gopBuffer_, result.gopInfo, this.safeAppend_); } this.state = "APPENDING"; this.trigger("appending"); this.waitForAppendsToComplete_(segmentInfo); } setTimeMapping_(timeline) { const timelineMapping = this.syncController_.mappingForTimeline(timeline); if (timelineMapping !== null) { this.timeMapping_ = timelineMapping; } } updateMediaSecondsLoaded_(segment) { if (typeof segment.start === "number" && typeof segment.end === "number") { this.mediaSecondsLoaded += segment.end - segment.start; } else { this.mediaSecondsLoaded += segment.duration; } } shouldUpdateTransmuxerTimestampOffset_(timestampOffset2) { if (timestampOffset2 === null) { return false; } if (this.loaderType_ === "main" && timestampOffset2 !== this.sourceUpdater_.videoTimestampOffset()) { return true; } if (!this.audioDisabled_ && timestampOffset2 !== this.sourceUpdater_.audioTimestampOffset()) { return true; } return false; } trueSegmentStart_({ currentStart, playlist, mediaIndex, firstVideoFrameTimeForData, currentVideoTimestampOffset, useVideoTimingInfo, videoTimingInfo, audioTimingInfo }) { if (typeof currentStart !== "undefined") { return currentStart; } if (!useVideoTimingInfo) { return audioTimingInfo.start; } const previousSegment = playlist.segments[mediaIndex - 1]; if (mediaIndex === 0 || !previousSegment || typeof previousSegment.start === "undefined" || previousSegment.end !== firstVideoFrameTimeForData + currentVideoTimestampOffset) { return firstVideoFrameTimeForData; } return videoTimingInfo.start; } waitForAppendsToComplete_(segmentInfo) { const trackInfo = this.getCurrentMediaInfo_(segmentInfo); if (!trackInfo) { this.error({ message: "No starting media returned, likely due to an unsupported media format.", playlistExclusionDuration: Infinity }); this.trigger("error"); return; } const { hasAudio, hasVideo, isMuxed: isMuxed3 } = trackInfo; const waitForVideo = this.loaderType_ === "main" && hasVideo; const waitForAudio = !this.audioDisabled_ && hasAudio && !isMuxed3; segmentInfo.waitingOnAppends = 0; if (!segmentInfo.hasAppendedData_) { if (!segmentInfo.timingInfo && typeof segmentInfo.timestampOffset === "number") { this.isPendingTimestampOffset_ = true; } segmentInfo.timingInfo = { start: 0 }; segmentInfo.waitingOnAppends++; if (!this.isPendingTimestampOffset_) { this.updateSourceBufferTimestampOffset_(segmentInfo); this.processMetadataQueue_(); } this.checkAppendsDone_(segmentInfo); return; } if (waitForVideo) { segmentInfo.waitingOnAppends++; } if (waitForAudio) { segmentInfo.waitingOnAppends++; } if (waitForVideo) { this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo)); } if (waitForAudio) { this.sourceUpdater_.audioQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo)); } } checkAppendsDone_(segmentInfo) { if (this.checkForAbort_(segmentInfo.requestId)) { return; } segmentInfo.waitingOnAppends--; if (segmentInfo.waitingOnAppends === 0) { this.handleAppendsDone_(); } } checkForIllegalMediaSwitch(trackInfo) { const illegalMediaSwitchError = illegalMediaSwitch$1(this.loaderType_, this.getCurrentMediaInfo_(), trackInfo); if (illegalMediaSwitchError) { this.error({ message: illegalMediaSwitchError, playlistExclusionDuration: Infinity }); this.trigger("error"); return true; } return false; } updateSourceBufferTimestampOffset_(segmentInfo) { if (segmentInfo.timestampOffset === null || typeof segmentInfo.timingInfo.start !== "number" || segmentInfo.changedTimestampOffset || this.loaderType_ !== "main") { return; } let didChange = false; segmentInfo.timestampOffset -= this.getSegmentStartTimeForTimestampOffsetCalculation_({ videoTimingInfo: segmentInfo.segment.videoTimingInfo, audioTimingInfo: segmentInfo.segment.audioTimingInfo, timingInfo: segmentInfo.timingInfo }); segmentInfo.changedTimestampOffset = true; if (segmentInfo.timestampOffset !== this.sourceUpdater_.videoTimestampOffset()) { this.sourceUpdater_.videoTimestampOffset(segmentInfo.timestampOffset); didChange = true; } if (segmentInfo.timestampOffset !== this.sourceUpdater_.audioTimestampOffset()) { this.sourceUpdater_.audioTimestampOffset(segmentInfo.timestampOffset); didChange = true; } if (didChange) { this.trigger("timestampoffset"); } } getSegmentStartTimeForTimestampOffsetCalculation_({ videoTimingInfo, audioTimingInfo, timingInfo }) { if (!this.useDtsForTimestampOffset_) { return timingInfo.start; } if (videoTimingInfo && typeof videoTimingInfo.transmuxedDecodeStart === "number") { return videoTimingInfo.transmuxedDecodeStart; } if (audioTimingInfo && typeof audioTimingInfo.transmuxedDecodeStart === "number") { return audioTimingInfo.transmuxedDecodeStart; } return timingInfo.start; } updateTimingInfoEnd_(segmentInfo) { segmentInfo.timingInfo = segmentInfo.timingInfo || {}; const trackInfo = this.getMediaInfo_(); const useVideoTimingInfo = this.loaderType_ === "main" && trackInfo && trackInfo.hasVideo; const prioritizedTimingInfo = useVideoTimingInfo && segmentInfo.videoTimingInfo ? segmentInfo.videoTimingInfo : segmentInfo.audioTimingInfo; if (!prioritizedTimingInfo) { return; } segmentInfo.timingInfo.end = typeof prioritizedTimingInfo.end === "number" ? prioritizedTimingInfo.end : prioritizedTimingInfo.start + segmentInfo.duration; } handleAppendsDone_() { if (this.pendingSegment_) { this.trigger("appendsdone"); } if (!this.pendingSegment_) { this.state = "READY"; if (!this.paused()) { this.monitorBuffer_(); } return; } const segmentInfo = this.pendingSegment_; this.updateTimingInfoEnd_(segmentInfo); if (this.shouldSaveSegmentTimingInfo_) { this.syncController_.saveSegmentTimingInfo({ segmentInfo, shouldSaveTimelineMapping: this.loaderType_ === "main" }); } const segmentDurationMessage = getTroublesomeSegmentDurationMessage$1(segmentInfo, this.sourceType_); if (segmentDurationMessage) { if (segmentDurationMessage.severity === "warn") { videojs$2.log.warn(segmentDurationMessage.message); } else { this.logger_(segmentDurationMessage.message); } } this.recordThroughput_(segmentInfo); this.pendingSegment_ = null; this.state = "READY"; if (segmentInfo.isSyncRequest) { this.trigger("syncinfoupdate"); if (!segmentInfo.hasAppendedData_) { this.logger_(`Throwing away un-appended sync request ${segmentInfoString$1(segmentInfo)}`); return; } } this.logger_(`Appended ${segmentInfoString$1(segmentInfo)}`); this.addSegmentMetadataCue_(segmentInfo); this.fetchAtBuffer_ = true; if (this.currentTimeline_ !== segmentInfo.timeline) { this.timelineChangeController_.lastTimelineChange({ type: this.loaderType_, from: this.currentTimeline_, to: segmentInfo.timeline }); if (this.loaderType_ === "main" && !this.audioDisabled_) { this.timelineChangeController_.lastTimelineChange({ type: "audio", from: this.currentTimeline_, to: segmentInfo.timeline }); } } this.currentTimeline_ = segmentInfo.timeline; this.trigger("syncinfoupdate"); const segment = segmentInfo.segment; const part = segmentInfo.part; const badSegmentGuess = segment.end && this.currentTime_() - segment.end > segmentInfo.playlist.targetDuration * 3; const badPartGuess = part && part.end && this.currentTime_() - part.end > segmentInfo.playlist.partTargetDuration * 3; if (badSegmentGuess || badPartGuess) { this.logger_(`bad ${badSegmentGuess ? "segment" : "part"} ${segmentInfoString$1(segmentInfo)}`); this.resetEverything(); return; } const isWalkingForward = this.mediaIndex !== null; if (isWalkingForward) { this.trigger("bandwidthupdate"); } this.trigger("progress"); this.mediaIndex = segmentInfo.mediaIndex; this.partIndex = segmentInfo.partIndex; if (this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex)) { this.endOfStream(); } this.trigger("appended"); if (segmentInfo.hasAppendedData_) { this.mediaAppends++; } if (!this.paused()) { this.monitorBuffer_(); } } recordThroughput_(segmentInfo) { if (segmentInfo.duration < MIN_SEGMENT_DURATION_TO_SAVE_STATS$1) { this.logger_(`Ignoring segment's throughput because its duration of ${segmentInfo.duration} is less than the min to record ${MIN_SEGMENT_DURATION_TO_SAVE_STATS$1}`); return; } const rate = this.throughput.rate; const segmentProcessingTime = Date.now() - segmentInfo.endOfAllRequests + 1; const segmentProcessingThroughput = Math.floor(segmentInfo.byteLength / segmentProcessingTime * 8 * 1e3); this.throughput.rate += (segmentProcessingThroughput - rate) / ++this.throughput.count; } addSegmentMetadataCue_(segmentInfo) { if (!this.segmentMetadataTrack_) { return; } const segment = segmentInfo.segment; const start2 = segment.start; const end = segment.end; if (!finite$1(start2) || !finite$1(end)) { return; } removeCuesFromTrack$1(start2, end, this.segmentMetadataTrack_); const Cue = window_1.WebKitDataCue || window_1.VTTCue; const value = { custom: segment.custom, dateTimeObject: segment.dateTimeObject, dateTimeString: segment.dateTimeString, bandwidth: segmentInfo.playlist.attributes.BANDWIDTH, resolution: segmentInfo.playlist.attributes.RESOLUTION, codecs: segmentInfo.playlist.attributes.CODECS, byteLength: segmentInfo.byteLength, uri: segmentInfo.uri, timeline: segmentInfo.timeline, playlist: segmentInfo.playlist.id, start: start2, end }; const data = JSON.stringify(value); const cue = new Cue(start2, end, data); cue.value = value; this.segmentMetadataTrack_.addCue(cue); } } function noop$1() { } const toTitleCase$2 = function(string) { if (typeof string !== "string") { return string; } return string.replace(/./, (w) => w.toUpperCase()); }; const bufferTypes$1 = ["video", "audio"]; const updating = (type2, sourceUpdater) => { const sourceBuffer = sourceUpdater[`${type2}Buffer`]; return sourceBuffer && sourceBuffer.updating || sourceUpdater.queuePending[type2]; }; const nextQueueIndexOfType$1 = (type2, queue) => { for (let i2 = 0; i2 < queue.length; i2++) { const queueEntry = queue[i2]; if (queueEntry.type === "mediaSource") { return null; } if (queueEntry.type === type2) { return i2; } } return null; }; const shiftQueue$1 = (type2, sourceUpdater) => { if (sourceUpdater.queue.length === 0) { return; } let queueIndex = 0; let queueEntry = sourceUpdater.queue[queueIndex]; if (queueEntry.type === "mediaSource") { if (!sourceUpdater.updating() && sourceUpdater.mediaSource.readyState !== "closed") { sourceUpdater.queue.shift(); queueEntry.action(sourceUpdater); if (queueEntry.doneFn) { queueEntry.doneFn(); } shiftQueue$1("audio", sourceUpdater); shiftQueue$1("video", sourceUpdater); } return; } if (type2 === "mediaSource") { return; } if (!sourceUpdater.ready() || sourceUpdater.mediaSource.readyState === "closed" || updating(type2, sourceUpdater)) { return; } if (queueEntry.type !== type2) { queueIndex = nextQueueIndexOfType$1(type2, sourceUpdater.queue); if (queueIndex === null) { return; } queueEntry = sourceUpdater.queue[queueIndex]; } sourceUpdater.queue.splice(queueIndex, 1); sourceUpdater.queuePending[type2] = queueEntry; queueEntry.action(type2, sourceUpdater); if (!queueEntry.doneFn) { sourceUpdater.queuePending[type2] = null; shiftQueue$1(type2, sourceUpdater); return; } }; const cleanupBuffer$1 = (type2, sourceUpdater) => { const buffer = sourceUpdater[`${type2}Buffer`]; const titleType = toTitleCase$2(type2); if (!buffer) { return; } buffer.removeEventListener("updateend", sourceUpdater[`on${titleType}UpdateEnd_`]); buffer.removeEventListener("error", sourceUpdater[`on${titleType}Error_`]); sourceUpdater.codecs[type2] = null; sourceUpdater[`${type2}Buffer`] = null; }; const inSourceBuffers$1 = (mediaSource, sourceBuffer) => mediaSource && sourceBuffer && Array.prototype.indexOf.call(mediaSource.sourceBuffers, sourceBuffer) !== -1; const actions$1 = { appendBuffer: (bytes, segmentInfo, onError2) => (type2, sourceUpdater) => { const sourceBuffer = sourceUpdater[`${type2}Buffer`]; if (!inSourceBuffers$1(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_(`Appending segment ${segmentInfo.mediaIndex}'s ${bytes.length} bytes to ${type2}Buffer`); try { sourceBuffer.appendBuffer(bytes); } catch (e) { sourceUpdater.logger_(`Error with code ${e.code} ` + (e.code === QUOTA_EXCEEDED_ERR$1 ? "(QUOTA_EXCEEDED_ERR) " : "") + `when appending segment ${segmentInfo.mediaIndex} to ${type2}Buffer`); sourceUpdater.queuePending[type2] = null; onError2(e); } }, remove: (start2, end) => (type2, sourceUpdater) => { const sourceBuffer = sourceUpdater[`${type2}Buffer`]; if (!inSourceBuffers$1(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_(`Removing ${start2} to ${end} from ${type2}Buffer`); try { sourceBuffer.remove(start2, end); } catch (e) { sourceUpdater.logger_(`Remove ${start2} to ${end} from ${type2}Buffer failed`); } }, timestampOffset: (offset) => (type2, sourceUpdater) => { const sourceBuffer = sourceUpdater[`${type2}Buffer`]; if (!inSourceBuffers$1(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_(`Setting ${type2}timestampOffset to ${offset}`); sourceBuffer.timestampOffset = offset; }, callback: (callback2) => (type2, sourceUpdater) => { callback2(); }, endOfStream: (error) => (sourceUpdater) => { if (sourceUpdater.mediaSource.readyState !== "open") { return; } sourceUpdater.logger_(`Calling mediaSource endOfStream(${error || ""})`); try { sourceUpdater.mediaSource.endOfStream(error); } catch (e) { videojs$2.log.warn("Failed to call media source endOfStream", e); } }, duration: (duration5) => (sourceUpdater) => { sourceUpdater.logger_(`Setting mediaSource duration to ${duration5}`); try { sourceUpdater.mediaSource.duration = duration5; } catch (e) { videojs$2.log.warn("Failed to set media source duration", e); } }, abort: () => (type2, sourceUpdater) => { if (sourceUpdater.mediaSource.readyState !== "open") { return; } const sourceBuffer = sourceUpdater[`${type2}Buffer`]; if (!inSourceBuffers$1(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_(`calling abort on ${type2}Buffer`); try { sourceBuffer.abort(); } catch (e) { videojs$2.log.warn(`Failed to abort on ${type2}Buffer`, e); } }, addSourceBuffer: (type2, codec) => (sourceUpdater) => { const titleType = toTitleCase$2(type2); const mime = getMimeForCodec$1(codec); sourceUpdater.logger_(`Adding ${type2}Buffer with codec ${codec} to mediaSource`); const sourceBuffer = sourceUpdater.mediaSource.addSourceBuffer(mime); sourceBuffer.addEventListener("updateend", sourceUpdater[`on${titleType}UpdateEnd_`]); sourceBuffer.addEventListener("error", sourceUpdater[`on${titleType}Error_`]); sourceUpdater.codecs[type2] = codec; sourceUpdater[`${type2}Buffer`] = sourceBuffer; }, removeSourceBuffer: (type2) => (sourceUpdater) => { const sourceBuffer = sourceUpdater[`${type2}Buffer`]; cleanupBuffer$1(type2, sourceUpdater); if (!inSourceBuffers$1(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_(`Removing ${type2}Buffer with codec ${sourceUpdater.codecs[type2]} from mediaSource`); try { sourceUpdater.mediaSource.removeSourceBuffer(sourceBuffer); } catch (e) { videojs$2.log.warn(`Failed to removeSourceBuffer ${type2}Buffer`, e); } }, changeType: (codec) => (type2, sourceUpdater) => { const sourceBuffer = sourceUpdater[`${type2}Buffer`]; const mime = getMimeForCodec$1(codec); if (!inSourceBuffers$1(sourceUpdater.mediaSource, sourceBuffer)) { return; } if (sourceUpdater.codecs[type2] === codec) { return; } sourceUpdater.logger_(`changing ${type2}Buffer codec from ${sourceUpdater.codecs[type2]} to ${codec}`); sourceBuffer.changeType(mime); sourceUpdater.codecs[type2] = codec; } }; const pushQueue$1 = ({ type: type2, sourceUpdater, action, doneFn, name }) => { sourceUpdater.queue.push({ type: type2, action, doneFn, name }); shiftQueue$1(type2, sourceUpdater); }; const onUpdateend$1 = (type2, sourceUpdater) => (e) => { if (sourceUpdater.queuePending[type2]) { const doneFn = sourceUpdater.queuePending[type2].doneFn; sourceUpdater.queuePending[type2] = null; if (doneFn) { doneFn(sourceUpdater[`${type2}Error_`]); } } shiftQueue$1(type2, sourceUpdater); }; class SourceUpdater$1 extends videojs$2.EventTarget { constructor(mediaSource) { super(); this.mediaSource = mediaSource; this.sourceopenListener_ = () => shiftQueue$1("mediaSource", this); this.mediaSource.addEventListener("sourceopen", this.sourceopenListener_); this.logger_ = logger$1("SourceUpdater"); this.audioTimestampOffset_ = 0; this.videoTimestampOffset_ = 0; this.queue = []; this.queuePending = { audio: null, video: null }; this.delayedAudioAppendQueue_ = []; this.videoAppendQueued_ = false; this.codecs = {}; this.onVideoUpdateEnd_ = onUpdateend$1("video", this); this.onAudioUpdateEnd_ = onUpdateend$1("audio", this); this.onVideoError_ = (e) => { this.videoError_ = e; }; this.onAudioError_ = (e) => { this.audioError_ = e; }; this.createdSourceBuffers_ = false; this.initializedEme_ = false; this.triggeredReady_ = false; } initializedEme() { this.initializedEme_ = true; this.triggerReady(); } hasCreatedSourceBuffers() { return this.createdSourceBuffers_; } hasInitializedAnyEme() { return this.initializedEme_; } ready() { return this.hasCreatedSourceBuffers() && this.hasInitializedAnyEme(); } createSourceBuffers(codecs) { if (this.hasCreatedSourceBuffers()) { return; } this.addOrChangeSourceBuffers(codecs); this.createdSourceBuffers_ = true; this.trigger("createdsourcebuffers"); this.triggerReady(); } triggerReady() { if (this.ready() && !this.triggeredReady_) { this.triggeredReady_ = true; this.trigger("ready"); } } addSourceBuffer(type2, codec) { pushQueue$1({ type: "mediaSource", sourceUpdater: this, action: actions$1.addSourceBuffer(type2, codec), name: "addSourceBuffer" }); } abort(type2) { pushQueue$1({ type: type2, sourceUpdater: this, action: actions$1.abort(type2), name: "abort" }); } removeSourceBuffer(type2) { if (!this.canRemoveSourceBuffer()) { videojs$2.log.error("removeSourceBuffer is not supported!"); return; } pushQueue$1({ type: "mediaSource", sourceUpdater: this, action: actions$1.removeSourceBuffer(type2), name: "removeSourceBuffer" }); } canRemoveSourceBuffer() { return !videojs$2.browser.IE_VERSION && !videojs$2.browser.IS_FIREFOX && window_1.MediaSource && window_1.MediaSource.prototype && typeof window_1.MediaSource.prototype.removeSourceBuffer === "function"; } static canChangeType() { return window_1.SourceBuffer && window_1.SourceBuffer.prototype && typeof window_1.SourceBuffer.prototype.changeType === "function"; } canChangeType() { return this.constructor.canChangeType(); } changeType(type2, codec) { if (!this.canChangeType()) { videojs$2.log.error("changeType is not supported!"); return; } pushQueue$1({ type: type2, sourceUpdater: this, action: actions$1.changeType(codec), name: "changeType" }); } addOrChangeSourceBuffers(codecs) { if (!codecs || typeof codecs !== "object" || Object.keys(codecs).length === 0) { throw new Error("Cannot addOrChangeSourceBuffers to undefined codecs"); } Object.keys(codecs).forEach((type2) => { const codec = codecs[type2]; if (!this.hasCreatedSourceBuffers()) { return this.addSourceBuffer(type2, codec); } if (this.canChangeType()) { this.changeType(type2, codec); } }); } appendBuffer(options2, doneFn) { const { segmentInfo, type: type2, bytes } = options2; this.processedAppend_ = true; if (type2 === "audio" && this.videoBuffer && !this.videoAppendQueued_) { this.delayedAudioAppendQueue_.push([options2, doneFn]); this.logger_(`delayed audio append of ${bytes.length} until video append`); return; } const onError2 = doneFn; pushQueue$1({ type: type2, sourceUpdater: this, action: actions$1.appendBuffer(bytes, segmentInfo || { mediaIndex: -1 }, onError2), doneFn, name: "appendBuffer" }); if (type2 === "video") { this.videoAppendQueued_ = true; if (!this.delayedAudioAppendQueue_.length) { return; } const queue = this.delayedAudioAppendQueue_.slice(); this.logger_(`queuing delayed audio ${queue.length} appendBuffers`); this.delayedAudioAppendQueue_.length = 0; queue.forEach((que) => { this.appendBuffer.apply(this, que); }); } } audioBuffered() { if (!inSourceBuffers$1(this.mediaSource, this.audioBuffer)) { return createTimeRanges$2(); } return this.audioBuffer.buffered ? this.audioBuffer.buffered : createTimeRanges$2(); } videoBuffered() { if (!inSourceBuffers$1(this.mediaSource, this.videoBuffer)) { return createTimeRanges$2(); } return this.videoBuffer.buffered ? this.videoBuffer.buffered : createTimeRanges$2(); } buffered() { const video = inSourceBuffers$1(this.mediaSource, this.videoBuffer) ? this.videoBuffer : null; const audio = inSourceBuffers$1(this.mediaSource, this.audioBuffer) ? this.audioBuffer : null; if (audio && !video) { return this.audioBuffered(); } if (video && !audio) { return this.videoBuffered(); } return bufferIntersection$1(this.audioBuffered(), this.videoBuffered()); } setDuration(duration5, doneFn = noop$1) { pushQueue$1({ type: "mediaSource", sourceUpdater: this, action: actions$1.duration(duration5), name: "duration", doneFn }); } endOfStream(error = null, doneFn = noop$1) { if (typeof error !== "string") { error = void 0; } pushQueue$1({ type: "mediaSource", sourceUpdater: this, action: actions$1.endOfStream(error), name: "endOfStream", doneFn }); } removeAudio(start2, end, done = noop$1) { if (!this.audioBuffered().length || this.audioBuffered().end(0) === 0) { done(); return; } pushQueue$1({ type: "audio", sourceUpdater: this, action: actions$1.remove(start2, end), doneFn: done, name: "remove" }); } removeVideo(start2, end, done = noop$1) { if (!this.videoBuffered().length || this.videoBuffered().end(0) === 0) { done(); return; } pushQueue$1({ type: "video", sourceUpdater: this, action: actions$1.remove(start2, end), doneFn: done, name: "remove" }); } updating() { if (updating("audio", this) || updating("video", this)) { return true; } return false; } audioTimestampOffset(offset) { if (typeof offset !== "undefined" && this.audioBuffer && this.audioTimestampOffset_ !== offset) { pushQueue$1({ type: "audio", sourceUpdater: this, action: actions$1.timestampOffset(offset), name: "timestampOffset" }); this.audioTimestampOffset_ = offset; } return this.audioTimestampOffset_; } videoTimestampOffset(offset) { if (typeof offset !== "undefined" && this.videoBuffer && this.videoTimestampOffset !== offset) { pushQueue$1({ type: "video", sourceUpdater: this, action: actions$1.timestampOffset(offset), name: "timestampOffset" }); this.videoTimestampOffset_ = offset; } return this.videoTimestampOffset_; } audioQueueCallback(callback2) { if (!this.audioBuffer) { return; } pushQueue$1({ type: "audio", sourceUpdater: this, action: actions$1.callback(callback2), name: "callback" }); } videoQueueCallback(callback2) { if (!this.videoBuffer) { return; } pushQueue$1({ type: "video", sourceUpdater: this, action: actions$1.callback(callback2), name: "callback" }); } dispose() { this.trigger("dispose"); bufferTypes$1.forEach((type2) => { this.abort(type2); if (this.canRemoveSourceBuffer()) { this.removeSourceBuffer(type2); } else { this[`${type2}QueueCallback`](() => cleanupBuffer$1(type2, this)); } }); this.videoAppendQueued_ = false; this.delayedAudioAppendQueue_.length = 0; if (this.sourceopenListener_) { this.mediaSource.removeEventListener("sourceopen", this.sourceopenListener_); } this.off(); } } const uint8ToUtf8$1 = (uintArray) => decodeURIComponent(escape(String.fromCharCode.apply(null, uintArray))); const VTT_LINE_TERMINATORS$1 = new Uint8Array("\n\n".split("").map((char) => char.charCodeAt(0))); class NoVttJsError$1 extends Error { constructor() { super("Trying to parse received VTT cues, but there is no WebVTT. Make sure vtt.js is loaded."); } } class VTTSegmentLoader$1 extends SegmentLoader$1 { constructor(settings, options2 = {}) { super(settings, options2); this.mediaSource_ = null; this.subtitlesTrack_ = null; this.loaderType_ = "subtitle"; this.featuresNativeTextTracks_ = settings.featuresNativeTextTracks; this.loadVttJs = settings.loadVttJs; this.shouldSaveSegmentTimingInfo_ = false; } createTransmuxer_() { return null; } buffered_() { if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues || !this.subtitlesTrack_.cues.length) { return createTimeRanges$2(); } const cues = this.subtitlesTrack_.cues; const start2 = cues[0].startTime; const end = cues[cues.length - 1].startTime; return createTimeRanges$2([[start2, end]]); } initSegmentForMap(map, set4 = false) { if (!map) { return null; } const id = initSegmentId$1(map); let storedMap = this.initSegments_[id]; if (set4 && !storedMap && map.bytes) { const combinedByteLength = VTT_LINE_TERMINATORS$1.byteLength + map.bytes.byteLength; const combinedSegment = new Uint8Array(combinedByteLength); combinedSegment.set(map.bytes); combinedSegment.set(VTT_LINE_TERMINATORS$1, map.bytes.byteLength); this.initSegments_[id] = storedMap = { resolvedUri: map.resolvedUri, byterange: map.byterange, bytes: combinedSegment }; } return storedMap || map; } couldBeginLoading_() { return this.playlist_ && this.subtitlesTrack_ && !this.paused(); } init_() { this.state = "READY"; this.resetEverything(); return this.monitorBuffer_(); } track(track) { if (typeof track === "undefined") { return this.subtitlesTrack_; } this.subtitlesTrack_ = track; if (this.state === "INIT" && this.couldBeginLoading_()) { this.init_(); } return this.subtitlesTrack_; } remove(start2, end) { removeCuesFromTrack$1(start2, end, this.subtitlesTrack_); } fillBuffer_() { const segmentInfo = this.chooseNextRequest_(); if (!segmentInfo) { return; } if (this.syncController_.timestampOffsetForTimeline(segmentInfo.timeline) === null) { const checkTimestampOffset = () => { this.state = "READY"; if (!this.paused()) { this.monitorBuffer_(); } }; this.syncController_.one("timestampoffset", checkTimestampOffset); this.state = "WAITING_ON_TIMELINE"; return; } this.loadSegment_(segmentInfo); } timestampOffsetForSegment_() { return null; } chooseNextRequest_() { return this.skipEmptySegments_(super.chooseNextRequest_()); } skipEmptySegments_(segmentInfo) { while (segmentInfo && segmentInfo.segment.empty) { if (segmentInfo.mediaIndex + 1 >= segmentInfo.playlist.segments.length) { segmentInfo = null; break; } segmentInfo = this.generateSegmentInfo_({ playlist: segmentInfo.playlist, mediaIndex: segmentInfo.mediaIndex + 1, startOfSegment: segmentInfo.startOfSegment + segmentInfo.duration, isSyncRequest: segmentInfo.isSyncRequest }); } return segmentInfo; } stopForError(error) { this.error(error); this.state = "READY"; this.pause(); this.trigger("error"); } segmentRequestFinished_(error, simpleSegment, result) { if (!this.subtitlesTrack_) { this.state = "READY"; return; } this.saveTransferStats_(simpleSegment.stats); if (!this.pendingSegment_) { this.state = "READY"; this.mediaRequestsAborted += 1; return; } if (error) { if (error.code === REQUEST_ERRORS$1.TIMEOUT) { this.handleTimeout_(); } if (error.code === REQUEST_ERRORS$1.ABORTED) { this.mediaRequestsAborted += 1; } else { this.mediaRequestsErrored += 1; } this.stopForError(error); return; } const segmentInfo = this.pendingSegment_; this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats); if (simpleSegment.key) { this.segmentKey(simpleSegment.key, true); } this.state = "APPENDING"; this.trigger("appending"); const segment = segmentInfo.segment; if (segment.map) { segment.map.bytes = simpleSegment.map.bytes; } segmentInfo.bytes = simpleSegment.bytes; if (typeof window_1.WebVTT !== "function" && typeof this.loadVttJs === "function") { this.state = "WAITING_ON_VTTJS"; this.loadVttJs().then(() => this.segmentRequestFinished_(error, simpleSegment, result), () => this.stopForError({ message: "Error loading vtt.js" })); return; } segment.requested = true; try { this.parseVTTCues_(segmentInfo); } catch (e) { this.stopForError({ message: e.message }); return; } this.updateTimeMapping_(segmentInfo, this.syncController_.timelines[segmentInfo.timeline], this.playlist_); if (segmentInfo.cues.length) { segmentInfo.timingInfo = { start: segmentInfo.cues[0].startTime, end: segmentInfo.cues[segmentInfo.cues.length - 1].endTime }; } else { segmentInfo.timingInfo = { start: segmentInfo.startOfSegment, end: segmentInfo.startOfSegment + segmentInfo.duration }; } if (segmentInfo.isSyncRequest) { this.trigger("syncinfoupdate"); this.pendingSegment_ = null; this.state = "READY"; return; } segmentInfo.byteLength = segmentInfo.bytes.byteLength; this.mediaSecondsLoaded += segment.duration; segmentInfo.cues.forEach((cue) => { this.subtitlesTrack_.addCue(this.featuresNativeTextTracks_ ? new window_1.VTTCue(cue.startTime, cue.endTime, cue.text) : cue); }); removeDuplicateCuesFromTrack$1(this.subtitlesTrack_); this.handleAppendsDone_(); } handleData_() { } updateTimingInfoEnd_() { } parseVTTCues_(segmentInfo) { let decoder; let decodeBytesToString = false; if (typeof window_1.WebVTT !== "function") { throw new NoVttJsError$1(); } if (typeof window_1.TextDecoder === "function") { decoder = new window_1.TextDecoder("utf8"); } else { decoder = window_1.WebVTT.StringDecoder(); decodeBytesToString = true; } const parser2 = new window_1.WebVTT.Parser(window_1, window_1.vttjs, decoder); segmentInfo.cues = []; segmentInfo.timestampmap = { MPEGTS: 0, LOCAL: 0 }; parser2.oncue = segmentInfo.cues.push.bind(segmentInfo.cues); parser2.ontimestampmap = (map) => { segmentInfo.timestampmap = map; }; parser2.onparsingerror = (error) => { videojs$2.log.warn("Error encountered when parsing cues: " + error.message); }; if (segmentInfo.segment.map) { let mapData = segmentInfo.segment.map.bytes; if (decodeBytesToString) { mapData = uint8ToUtf8$1(mapData); } parser2.parse(mapData); } let segmentData = segmentInfo.bytes; if (decodeBytesToString) { segmentData = uint8ToUtf8$1(segmentData); } parser2.parse(segmentData); parser2.flush(); } updateTimeMapping_(segmentInfo, mappingObj, playlist) { const segment = segmentInfo.segment; if (!mappingObj) { return; } if (!segmentInfo.cues.length) { segment.empty = true; return; } const timestampmap = segmentInfo.timestampmap; const diff = timestampmap.MPEGTS / clock$1.ONE_SECOND_IN_TS - timestampmap.LOCAL + mappingObj.mapping; segmentInfo.cues.forEach((cue) => { cue.startTime += diff; cue.endTime += diff; }); if (!playlist.syncInfo) { const firstStart = segmentInfo.cues[0].startTime; const lastStart = segmentInfo.cues[segmentInfo.cues.length - 1].startTime; playlist.syncInfo = { mediaSequence: playlist.mediaSequence + segmentInfo.mediaIndex, time: Math.min(firstStart, lastStart - segment.duration) }; } } } const findAdCue$1 = function(track, mediaTime) { const cues = track.cues; for (let i2 = 0; i2 < cues.length; i2++) { const cue = cues[i2]; if (mediaTime >= cue.adStartTime && mediaTime <= cue.adEndTime) { return cue; } } return null; }; const updateAdCues$1 = function(media, track, offset = 0) { if (!media.segments) { return; } let mediaTime = offset; let cue; for (let i2 = 0; i2 < media.segments.length; i2++) { const segment = media.segments[i2]; if (!cue) { cue = findAdCue$1(track, mediaTime + segment.duration / 2); } if (cue) { if ("cueIn" in segment) { cue.endTime = mediaTime; cue.adEndTime = mediaTime; mediaTime += segment.duration; cue = null; continue; } if (mediaTime < cue.endTime) { mediaTime += segment.duration; continue; } cue.endTime += segment.duration; } else { if ("cueOut" in segment) { cue = new window_1.VTTCue(mediaTime, mediaTime + segment.duration, segment.cueOut); cue.adStartTime = mediaTime; cue.adEndTime = mediaTime + parseFloat(segment.cueOut); track.addCue(cue); } if ("cueOutCont" in segment) { const [adOffset, adTotal] = segment.cueOutCont.split("/").map(parseFloat); cue = new window_1.VTTCue(mediaTime, mediaTime + segment.duration, ""); cue.adStartTime = mediaTime - adOffset; cue.adEndTime = cue.adStartTime + adTotal; track.addCue(cue); } } mediaTime += segment.duration; } }; const MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC$1 = 86400; const syncPointStrategies$1 = [ { name: "VOD", run: (syncController, playlist, duration5, currentTimeline, currentTime) => { if (duration5 !== Infinity) { const syncPoint = { time: 0, segmentIndex: 0, partIndex: null }; return syncPoint; } return null; } }, { name: "ProgramDateTime", run: (syncController, playlist, duration5, currentTimeline, currentTime) => { if (!Object.keys(syncController.timelineToDatetimeMappings).length) { return null; } let syncPoint = null; let lastDistance = null; const partsAndSegments = getPartsAndSegments$1(playlist); currentTime = currentTime || 0; for (let i2 = 0; i2 < partsAndSegments.length; i2++) { const index2 = playlist.endList || currentTime === 0 ? i2 : partsAndSegments.length - (i2 + 1); const partAndSegment = partsAndSegments[index2]; const segment = partAndSegment.segment; const datetimeMapping = syncController.timelineToDatetimeMappings[segment.timeline]; if (!datetimeMapping || !segment.dateTimeObject) { continue; } const segmentTime = segment.dateTimeObject.getTime() / 1e3; let start2 = segmentTime + datetimeMapping; if (segment.parts && typeof partAndSegment.partIndex === "number") { for (let z = 0; z < partAndSegment.partIndex; z++) { start2 += segment.parts[z].duration; } } const distance2 = Math.abs(currentTime - start2); if (lastDistance !== null && (distance2 === 0 || lastDistance < distance2)) { break; } lastDistance = distance2; syncPoint = { time: start2, segmentIndex: partAndSegment.segmentIndex, partIndex: partAndSegment.partIndex }; } return syncPoint; } }, { name: "Segment", run: (syncController, playlist, duration5, currentTimeline, currentTime) => { let syncPoint = null; let lastDistance = null; currentTime = currentTime || 0; const partsAndSegments = getPartsAndSegments$1(playlist); for (let i2 = 0; i2 < partsAndSegments.length; i2++) { const index2 = playlist.endList || currentTime === 0 ? i2 : partsAndSegments.length - (i2 + 1); const partAndSegment = partsAndSegments[index2]; const segment = partAndSegment.segment; const start2 = partAndSegment.part && partAndSegment.part.start || segment && segment.start; if (segment.timeline === currentTimeline && typeof start2 !== "undefined") { const distance2 = Math.abs(currentTime - start2); if (lastDistance !== null && lastDistance < distance2) { break; } if (!syncPoint || lastDistance === null || lastDistance >= distance2) { lastDistance = distance2; syncPoint = { time: start2, segmentIndex: partAndSegment.segmentIndex, partIndex: partAndSegment.partIndex }; } } } return syncPoint; } }, { name: "Discontinuity", run: (syncController, playlist, duration5, currentTimeline, currentTime) => { let syncPoint = null; currentTime = currentTime || 0; if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) { let lastDistance = null; for (let i2 = 0; i2 < playlist.discontinuityStarts.length; i2++) { const segmentIndex = playlist.discontinuityStarts[i2]; const discontinuity = playlist.discontinuitySequence + i2 + 1; const discontinuitySync = syncController.discontinuities[discontinuity]; if (discontinuitySync) { const distance2 = Math.abs(currentTime - discontinuitySync.time); if (lastDistance !== null && lastDistance < distance2) { break; } if (!syncPoint || lastDistance === null || lastDistance >= distance2) { lastDistance = distance2; syncPoint = { time: discontinuitySync.time, segmentIndex, partIndex: null }; } } } } return syncPoint; } }, { name: "Playlist", run: (syncController, playlist, duration5, currentTimeline, currentTime) => { if (playlist.syncInfo) { const syncPoint = { time: playlist.syncInfo.time, segmentIndex: playlist.syncInfo.mediaSequence - playlist.mediaSequence, partIndex: null }; return syncPoint; } return null; } } ]; class SyncController$1 extends videojs$2.EventTarget { constructor(options2 = {}) { super(); this.timelines = []; this.discontinuities = []; this.timelineToDatetimeMappings = {}; this.logger_ = logger$1("SyncController"); } getSyncPoint(playlist, duration5, currentTimeline, currentTime) { const syncPoints = this.runStrategies_(playlist, duration5, currentTimeline, currentTime); if (!syncPoints.length) { return null; } return this.selectSyncPoint_(syncPoints, { key: "time", value: currentTime }); } getExpiredTime(playlist, duration5) { if (!playlist || !playlist.segments) { return null; } const syncPoints = this.runStrategies_(playlist, duration5, playlist.discontinuitySequence, 0); if (!syncPoints.length) { return null; } const syncPoint = this.selectSyncPoint_(syncPoints, { key: "segmentIndex", value: 0 }); if (syncPoint.segmentIndex > 0) { syncPoint.time *= -1; } return Math.abs(syncPoint.time + sumDurations$1({ defaultDuration: playlist.targetDuration, durationList: playlist.segments, startIndex: syncPoint.segmentIndex, endIndex: 0 })); } runStrategies_(playlist, duration5, currentTimeline, currentTime) { const syncPoints = []; for (let i2 = 0; i2 < syncPointStrategies$1.length; i2++) { const strategy = syncPointStrategies$1[i2]; const syncPoint = strategy.run(this, playlist, duration5, currentTimeline, currentTime); if (syncPoint) { syncPoint.strategy = strategy.name; syncPoints.push({ strategy: strategy.name, syncPoint }); } } return syncPoints; } selectSyncPoint_(syncPoints, target) { let bestSyncPoint = syncPoints[0].syncPoint; let bestDistance = Math.abs(syncPoints[0].syncPoint[target.key] - target.value); let bestStrategy = syncPoints[0].strategy; for (let i2 = 1; i2 < syncPoints.length; i2++) { const newDistance = Math.abs(syncPoints[i2].syncPoint[target.key] - target.value); if (newDistance < bestDistance) { bestDistance = newDistance; bestSyncPoint = syncPoints[i2].syncPoint; bestStrategy = syncPoints[i2].strategy; } } this.logger_(`syncPoint for [${target.key}: ${target.value}] chosen with strategy [${bestStrategy}]: [time:${bestSyncPoint.time}, segmentIndex:${bestSyncPoint.segmentIndex}` + (typeof bestSyncPoint.partIndex === "number" ? `,partIndex:${bestSyncPoint.partIndex}` : "") + "]"); return bestSyncPoint; } saveExpiredSegmentInfo(oldPlaylist, newPlaylist) { const mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence; if (mediaSequenceDiff > MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC$1) { videojs$2.log.warn(`Not saving expired segment info. Media sequence gap ${mediaSequenceDiff} is too large.`); return; } for (let i2 = mediaSequenceDiff - 1; i2 >= 0; i2--) { const lastRemovedSegment = oldPlaylist.segments[i2]; if (lastRemovedSegment && typeof lastRemovedSegment.start !== "undefined") { newPlaylist.syncInfo = { mediaSequence: oldPlaylist.mediaSequence + i2, time: lastRemovedSegment.start }; this.logger_(`playlist refresh sync: [time:${newPlaylist.syncInfo.time}, mediaSequence: ${newPlaylist.syncInfo.mediaSequence}]`); this.trigger("syncinfoupdate"); break; } } } setDateTimeMappingForStart(playlist) { this.timelineToDatetimeMappings = {}; if (playlist.segments && playlist.segments.length && playlist.segments[0].dateTimeObject) { const firstSegment = playlist.segments[0]; const playlistTimestamp = firstSegment.dateTimeObject.getTime() / 1e3; this.timelineToDatetimeMappings[firstSegment.timeline] = -playlistTimestamp; } } saveSegmentTimingInfo({ segmentInfo, shouldSaveTimelineMapping }) { const didCalculateSegmentTimeMapping = this.calculateSegmentTimeMapping_(segmentInfo, segmentInfo.timingInfo, shouldSaveTimelineMapping); const segment = segmentInfo.segment; if (didCalculateSegmentTimeMapping) { this.saveDiscontinuitySyncInfo_(segmentInfo); if (!segmentInfo.playlist.syncInfo) { segmentInfo.playlist.syncInfo = { mediaSequence: segmentInfo.playlist.mediaSequence + segmentInfo.mediaIndex, time: segment.start }; } } const dateTime = segment.dateTimeObject; if (segment.discontinuity && shouldSaveTimelineMapping && dateTime) { this.timelineToDatetimeMappings[segment.timeline] = -(dateTime.getTime() / 1e3); } } timestampOffsetForTimeline(timeline) { if (typeof this.timelines[timeline] === "undefined") { return null; } return this.timelines[timeline].time; } mappingForTimeline(timeline) { if (typeof this.timelines[timeline] === "undefined") { return null; } return this.timelines[timeline].mapping; } calculateSegmentTimeMapping_(segmentInfo, timingInfo, shouldSaveTimelineMapping) { const segment = segmentInfo.segment; const part = segmentInfo.part; let mappingObj = this.timelines[segmentInfo.timeline]; let start2; let end; if (typeof segmentInfo.timestampOffset === "number") { mappingObj = { time: segmentInfo.startOfSegment, mapping: segmentInfo.startOfSegment - timingInfo.start }; if (shouldSaveTimelineMapping) { this.timelines[segmentInfo.timeline] = mappingObj; this.trigger("timestampoffset"); this.logger_(`time mapping for timeline ${segmentInfo.timeline}: [time: ${mappingObj.time}] [mapping: ${mappingObj.mapping}]`); } start2 = segmentInfo.startOfSegment; end = timingInfo.end + mappingObj.mapping; } else if (mappingObj) { start2 = timingInfo.start + mappingObj.mapping; end = timingInfo.end + mappingObj.mapping; } else { return false; } if (part) { part.start = start2; part.end = end; } if (!segment.start || start2 < segment.start) { segment.start = start2; } segment.end = end; return true; } saveDiscontinuitySyncInfo_(segmentInfo) { const playlist = segmentInfo.playlist; const segment = segmentInfo.segment; if (segment.discontinuity) { this.discontinuities[segment.timeline] = { time: segment.start, accuracy: 0 }; } else if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) { for (let i2 = 0; i2 < playlist.discontinuityStarts.length; i2++) { const segmentIndex = playlist.discontinuityStarts[i2]; const discontinuity = playlist.discontinuitySequence + i2 + 1; const mediaIndexDiff = segmentIndex - segmentInfo.mediaIndex; const accuracy = Math.abs(mediaIndexDiff); if (!this.discontinuities[discontinuity] || this.discontinuities[discontinuity].accuracy > accuracy) { let time; if (mediaIndexDiff < 0) { time = segment.start - sumDurations$1({ defaultDuration: playlist.targetDuration, durationList: playlist.segments, startIndex: segmentInfo.mediaIndex, endIndex: segmentIndex }); } else { time = segment.end + sumDurations$1({ defaultDuration: playlist.targetDuration, durationList: playlist.segments, startIndex: segmentInfo.mediaIndex + 1, endIndex: segmentIndex }); } this.discontinuities[discontinuity] = { time, accuracy }; } } } } dispose() { this.trigger("dispose"); this.off(); } } class TimelineChangeController$1 extends videojs$2.EventTarget { constructor() { super(); this.pendingTimelineChanges_ = {}; this.lastTimelineChanges_ = {}; } clearPendingTimelineChange(type2) { this.pendingTimelineChanges_[type2] = null; this.trigger("pendingtimelinechange"); } pendingTimelineChange({ type: type2, from: from3, to }) { if (typeof from3 === "number" && typeof to === "number") { this.pendingTimelineChanges_[type2] = { type: type2, from: from3, to }; this.trigger("pendingtimelinechange"); } return this.pendingTimelineChanges_[type2]; } lastTimelineChange({ type: type2, from: from3, to }) { if (typeof from3 === "number" && typeof to === "number") { this.lastTimelineChanges_[type2] = { type: type2, from: from3, to }; delete this.pendingTimelineChanges_[type2]; this.trigger("timelinechange"); } return this.lastTimelineChanges_[type2]; } dispose() { this.trigger("dispose"); this.pendingTimelineChanges_ = {}; this.lastTimelineChanges_ = {}; this.off(); } } const workerCode$2 = transform$1(getWorkerString$1(function() { var Stream2 = /* @__PURE__ */ function() { function Stream3() { this.listeners = {}; } var _proto = Stream3.prototype; _proto.on = function on3(type2, listener) { if (!this.listeners[type2]) { this.listeners[type2] = []; } this.listeners[type2].push(listener); }; _proto.off = function off2(type2, listener) { if (!this.listeners[type2]) { return false; } var index2 = this.listeners[type2].indexOf(listener); this.listeners[type2] = this.listeners[type2].slice(0); this.listeners[type2].splice(index2, 1); return index2 > -1; }; _proto.trigger = function trigger2(type2) { var callbacks = this.listeners[type2]; if (!callbacks) { return; } if (arguments.length === 2) { var length = callbacks.length; for (var i2 = 0; i2 < length; ++i2) { callbacks[i2].call(this, arguments[1]); } } else { var args = Array.prototype.slice.call(arguments, 1); var _length = callbacks.length; for (var _i = 0; _i < _length; ++_i) { callbacks[_i].apply(this, args); } } }; _proto.dispose = function dispose() { this.listeners = {}; }; _proto.pipe = function pipe(destination2) { this.on("data", function(data) { destination2.push(data); }); }; return Stream3; }(); /*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */ function unpad(padded) { return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]); } /*! @name aes-decrypter @version 4.0.1 @license Apache-2.0 */ const precompute = function() { const tables = [[[], [], [], [], []], [[], [], [], [], []]]; const encTable = tables[0]; const decTable = tables[1]; const sbox = encTable[4]; const sboxInv = decTable[4]; let i2; let x; let xInv; const d2 = []; const th = []; let x2; let x4; let x8; let s; let tEnc; let tDec; for (i2 = 0; i2 < 256; i2++) { th[(d2[i2] = i2 << 1 ^ (i2 >> 7) * 283) ^ i2] = i2; } for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) { s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4; s = s >> 8 ^ s & 255 ^ 99; sbox[x] = s; sboxInv[s] = x; x8 = d2[x4 = d2[x2 = d2[x]]]; tDec = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008; tEnc = d2[s] * 257 ^ s * 16843008; for (i2 = 0; i2 < 4; i2++) { encTable[i2][x] = tEnc = tEnc << 24 ^ tEnc >>> 8; decTable[i2][s] = tDec = tDec << 24 ^ tDec >>> 8; } } for (i2 = 0; i2 < 5; i2++) { encTable[i2] = encTable[i2].slice(0); decTable[i2] = decTable[i2].slice(0); } return tables; }; let aesTables = null; class AES { constructor(key) { if (!aesTables) { aesTables = precompute(); } this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]]; let i2; let j; let tmp; const sbox = this._tables[0][4]; const decTable = this._tables[1]; const keyLen = key.length; let rcon = 1; if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) { throw new Error("Invalid aes key size"); } const encKey = key.slice(0); const decKey = []; this._key = [encKey, decKey]; for (i2 = keyLen; i2 < 4 * keyLen + 28; i2++) { tmp = encKey[i2 - 1]; if (i2 % keyLen === 0 || keyLen === 8 && i2 % keyLen === 4) { tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; if (i2 % keyLen === 0) { tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24; rcon = rcon << 1 ^ (rcon >> 7) * 283; } } encKey[i2] = encKey[i2 - keyLen] ^ tmp; } for (j = 0; i2; j++, i2--) { tmp = encKey[j & 3 ? i2 : i2 - 4]; if (i2 <= 4 || j < 4) { decKey[j] = tmp; } else { decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]]; } } } decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) { const key = this._key[1]; let a = encrypted0 ^ key[0]; let b = encrypted3 ^ key[1]; let c = encrypted2 ^ key[2]; let d2 = encrypted1 ^ key[3]; let a2; let b2; let c2; const nInnerRounds = key.length / 4 - 2; let i2; let kIndex = 4; const table = this._tables[1]; const table0 = table[0]; const table1 = table[1]; const table2 = table[2]; const table3 = table[3]; const sbox = table[4]; for (i2 = 0; i2 < nInnerRounds; i2++) { a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d2 & 255] ^ key[kIndex]; b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d2 >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1]; c2 = table0[c >>> 24] ^ table1[d2 >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2]; d2 = table0[d2 >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3]; kIndex += 4; a = a2; b = b2; c = c2; } for (i2 = 0; i2 < 4; i2++) { out[(3 & -i2) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d2 & 255] ^ key[kIndex++]; a2 = a; a = b; b = c; c = d2; d2 = a2; } } } class AsyncStream extends Stream2 { constructor() { super(Stream2); this.jobs = []; this.delay = 1; this.timeout_ = null; } processJob_() { this.jobs.shift()(); if (this.jobs.length) { this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay); } else { this.timeout_ = null; } } push(job) { this.jobs.push(job); if (!this.timeout_) { this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay); } } } const ntoh = function(word) { return word << 24 | (word & 65280) << 8 | (word & 16711680) >> 8 | word >>> 24; }; const decrypt3 = function(encrypted, key, initVector) { const encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2); const decipher = new AES(Array.prototype.slice.call(key)); const decrypted = new Uint8Array(encrypted.byteLength); const decrypted32 = new Int32Array(decrypted.buffer); let init0; let init1; let init2; let init3; let encrypted0; let encrypted1; let encrypted2; let encrypted3; let wordIx; init0 = initVector[0]; init1 = initVector[1]; init2 = initVector[2]; init3 = initVector[3]; for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) { encrypted0 = ntoh(encrypted32[wordIx]); encrypted1 = ntoh(encrypted32[wordIx + 1]); encrypted2 = ntoh(encrypted32[wordIx + 2]); encrypted3 = ntoh(encrypted32[wordIx + 3]); decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx); decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0); decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1); decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2); decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3); init0 = encrypted0; init1 = encrypted1; init2 = encrypted2; init3 = encrypted3; } return decrypted; }; class Decrypter2 { constructor(encrypted, key, initVector, done) { const step = Decrypter2.STEP; const encrypted32 = new Int32Array(encrypted.buffer); const decrypted = new Uint8Array(encrypted.byteLength); let i2 = 0; this.asyncStream_ = new AsyncStream(); this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i2, i2 + step), key, initVector, decrypted)); for (i2 = step; i2 < encrypted32.length; i2 += step) { initVector = new Uint32Array([ntoh(encrypted32[i2 - 4]), ntoh(encrypted32[i2 - 3]), ntoh(encrypted32[i2 - 2]), ntoh(encrypted32[i2 - 1])]); this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i2, i2 + step), key, initVector, decrypted)); } this.asyncStream_.push(function() { done(null, unpad(decrypted)); }); } static get STEP() { return 32e3; } decryptChunk_(encrypted, key, initVector, decrypted) { return function() { const bytes = decrypt3(encrypted, key, initVector); decrypted.set(bytes, encrypted.byteOffset); }; } } var commonjsGlobal2 = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; var win2; if (typeof window !== "undefined") { win2 = window; } else if (typeof commonjsGlobal2 !== "undefined") { win2 = commonjsGlobal2; } else if (typeof self !== "undefined") { win2 = self; } else { win2 = {}; } var window_12 = win2; var isArrayBufferView4 = function isArrayBufferView5(obj) { if (ArrayBuffer.isView === "function") { return ArrayBuffer.isView(obj); } return obj && obj.buffer instanceof ArrayBuffer; }; var BigInt2 = window_12.BigInt || Number; [BigInt2("0x1"), BigInt2("0x100"), BigInt2("0x10000"), BigInt2("0x1000000"), BigInt2("0x100000000"), BigInt2("0x10000000000"), BigInt2("0x1000000000000"), BigInt2("0x100000000000000"), BigInt2("0x10000000000000000")]; (function() { var a = new Uint16Array([65484]); var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength); if (b[0] === 255) { return "big"; } if (b[0] === 204) { return "little"; } return "unknown"; })(); const createTransferableMessage3 = function(message) { const transferable = {}; Object.keys(message).forEach((key) => { const value = message[key]; if (isArrayBufferView4(value)) { transferable[key] = { bytes: value.buffer, byteOffset: value.byteOffset, byteLength: value.byteLength }; } else { transferable[key] = value; } }); return transferable; }; self.onmessage = function(event2) { const data = event2.data; const encrypted = new Uint8Array(data.encrypted.bytes, data.encrypted.byteOffset, data.encrypted.byteLength); const key = new Uint32Array(data.key.bytes, data.key.byteOffset, data.key.byteLength / 4); const iv = new Uint32Array(data.iv.bytes, data.iv.byteOffset, data.iv.byteLength / 4); new Decrypter2(encrypted, key, iv, function(err, bytes) { self.postMessage(createTransferableMessage3({ source: data.source, decrypted: bytes }), [bytes.buffer]); }); }; })); var Decrypter$1 = factory$1(workerCode$2); const audioTrackKind_$1 = (properties) => { let kind = properties.default ? "main" : "alternative"; if (properties.characteristics && properties.characteristics.indexOf("public.accessibility.describes-video") >= 0) { kind = "main-desc"; } return kind; }; const stopLoaders$1 = (segmentLoader, mediaType) => { segmentLoader.abort(); segmentLoader.pause(); if (mediaType && mediaType.activePlaylistLoader) { mediaType.activePlaylistLoader.pause(); mediaType.activePlaylistLoader = null; } }; const startLoaders$1 = (playlistLoader, mediaType) => { mediaType.activePlaylistLoader = playlistLoader; playlistLoader.load(); }; const onGroupChanged$1 = (type2, settings) => () => { const { segmentLoaders: { [type2]: segmentLoader, main: mainSegmentLoader }, mediaTypes: { [type2]: mediaType } } = settings; const activeTrack2 = mediaType.activeTrack(); const activeGroup3 = mediaType.getActiveGroup(); const previousActiveLoader = mediaType.activePlaylistLoader; const lastGroup = mediaType.lastGroup_; if (activeGroup3 && lastGroup && activeGroup3.id === lastGroup.id) { return; } mediaType.lastGroup_ = activeGroup3; mediaType.lastTrack_ = activeTrack2; stopLoaders$1(segmentLoader, mediaType); if (!activeGroup3 || activeGroup3.isMainPlaylist) { return; } if (!activeGroup3.playlistLoader) { if (previousActiveLoader) { mainSegmentLoader.resetEverything(); } return; } segmentLoader.resyncLoader(); startLoaders$1(activeGroup3.playlistLoader, mediaType); }; const onGroupChanging$1 = (type2, settings) => () => { const { segmentLoaders: { [type2]: segmentLoader }, mediaTypes: { [type2]: mediaType } } = settings; mediaType.lastGroup_ = null; segmentLoader.abort(); segmentLoader.pause(); }; const onTrackChanged$1 = (type2, settings) => () => { const { mainPlaylistLoader, segmentLoaders: { [type2]: segmentLoader, main: mainSegmentLoader }, mediaTypes: { [type2]: mediaType } } = settings; const activeTrack2 = mediaType.activeTrack(); const activeGroup3 = mediaType.getActiveGroup(); const previousActiveLoader = mediaType.activePlaylistLoader; const lastTrack = mediaType.lastTrack_; if (lastTrack && activeTrack2 && lastTrack.id === activeTrack2.id) { return; } mediaType.lastGroup_ = activeGroup3; mediaType.lastTrack_ = activeTrack2; stopLoaders$1(segmentLoader, mediaType); if (!activeGroup3) { return; } if (activeGroup3.isMainPlaylist) { if (!activeTrack2 || !lastTrack || activeTrack2.id === lastTrack.id) { return; } const pc = settings.vhs.playlistController_; const newPlaylist = pc.selectPlaylist(); if (pc.media() === newPlaylist) { return; } mediaType.logger_(`track change. Switching main audio from ${lastTrack.id} to ${activeTrack2.id}`); mainPlaylistLoader.pause(); mainSegmentLoader.resetEverything(); pc.fastQualityChange_(newPlaylist); return; } if (type2 === "AUDIO") { if (!activeGroup3.playlistLoader) { mainSegmentLoader.setAudio(true); mainSegmentLoader.resetEverything(); return; } segmentLoader.setAudio(true); mainSegmentLoader.setAudio(false); } if (previousActiveLoader === activeGroup3.playlistLoader) { startLoaders$1(activeGroup3.playlistLoader, mediaType); return; } if (segmentLoader.track) { segmentLoader.track(activeTrack2); } segmentLoader.resetEverything(); startLoaders$1(activeGroup3.playlistLoader, mediaType); }; const onError$1 = { AUDIO: (type2, settings) => () => { const { segmentLoaders: { [type2]: segmentLoader }, mediaTypes: { [type2]: mediaType }, excludePlaylist } = settings; stopLoaders$1(segmentLoader, mediaType); const activeTrack2 = mediaType.activeTrack(); const activeGroup3 = mediaType.activeGroup(); const id = (activeGroup3.filter((group) => group.default)[0] || activeGroup3[0]).id; const defaultTrack = mediaType.tracks[id]; if (activeTrack2 === defaultTrack) { excludePlaylist({ error: { message: "Problem encountered loading the default audio track." } }); return; } videojs$2.log.warn("Problem encountered loading the alternate audio track.Switching back to default."); for (const trackId in mediaType.tracks) { mediaType.tracks[trackId].enabled = mediaType.tracks[trackId] === defaultTrack; } mediaType.onTrackChanged(); }, SUBTITLES: (type2, settings) => () => { const { segmentLoaders: { [type2]: segmentLoader }, mediaTypes: { [type2]: mediaType } } = settings; videojs$2.log.warn("Problem encountered loading the subtitle track.Disabling subtitle track."); stopLoaders$1(segmentLoader, mediaType); const track = mediaType.activeTrack(); if (track) { track.mode = "disabled"; } mediaType.onTrackChanged(); } }; const setupListeners$1 = { AUDIO: (type2, playlistLoader, settings) => { if (!playlistLoader) { return; } const { tech, requestOptions, segmentLoaders: { [type2]: segmentLoader } } = settings; playlistLoader.on("loadedmetadata", () => { const media = playlistLoader.media(); segmentLoader.playlist(media, requestOptions); if (!tech.paused() || media.endList && tech.preload() !== "none") { segmentLoader.load(); } }); playlistLoader.on("loadedplaylist", () => { segmentLoader.playlist(playlistLoader.media(), requestOptions); if (!tech.paused()) { segmentLoader.load(); } }); playlistLoader.on("error", onError$1[type2](type2, settings)); }, SUBTITLES: (type2, playlistLoader, settings) => { const { tech, requestOptions, segmentLoaders: { [type2]: segmentLoader }, mediaTypes: { [type2]: mediaType } } = settings; playlistLoader.on("loadedmetadata", () => { const media = playlistLoader.media(); segmentLoader.playlist(media, requestOptions); segmentLoader.track(mediaType.activeTrack()); if (!tech.paused() || media.endList && tech.preload() !== "none") { segmentLoader.load(); } }); playlistLoader.on("loadedplaylist", () => { segmentLoader.playlist(playlistLoader.media(), requestOptions); if (!tech.paused()) { segmentLoader.load(); } }); playlistLoader.on("error", onError$1[type2](type2, settings)); } }; const initialize$1 = { "AUDIO": (type2, settings) => { const { vhs, sourceType, segmentLoaders: { [type2]: segmentLoader }, requestOptions, main: { mediaGroups }, mediaTypes: { [type2]: { groups, tracks, logger_ } }, mainPlaylistLoader } = settings; const audioOnlyMain = isAudioOnly$1(mainPlaylistLoader.main); if (!mediaGroups[type2] || Object.keys(mediaGroups[type2]).length === 0) { mediaGroups[type2] = { main: { default: { default: true } } }; if (audioOnlyMain) { mediaGroups[type2].main.default.playlists = mainPlaylistLoader.main.playlists; } } for (const groupId in mediaGroups[type2]) { if (!groups[groupId]) { groups[groupId] = []; } for (const variantLabel in mediaGroups[type2][groupId]) { let properties = mediaGroups[type2][groupId][variantLabel]; let playlistLoader; if (audioOnlyMain) { logger_(`AUDIO group '${groupId}' label '${variantLabel}' is a main playlist`); properties.isMainPlaylist = true; playlistLoader = null; } else if (sourceType === "vhs-json" && properties.playlists) { playlistLoader = new PlaylistLoader$1(properties.playlists[0], vhs, requestOptions); } else if (properties.resolvedUri) { playlistLoader = new PlaylistLoader$1(properties.resolvedUri, vhs, requestOptions); } else if (properties.playlists && sourceType === "dash") { playlistLoader = new DashPlaylistLoader$1(properties.playlists[0], vhs, requestOptions, mainPlaylistLoader); } else { playlistLoader = null; } properties = merge$2({ id: variantLabel, playlistLoader }, properties); setupListeners$1[type2](type2, properties.playlistLoader, settings); groups[groupId].push(properties); if (typeof tracks[variantLabel] === "undefined") { const track = new videojs$2.AudioTrack({ id: variantLabel, kind: audioTrackKind_$1(properties), enabled: false, language: properties.language, default: properties.default, label: variantLabel }); tracks[variantLabel] = track; } } } segmentLoader.on("error", onError$1[type2](type2, settings)); }, "SUBTITLES": (type2, settings) => { const { tech, vhs, sourceType, segmentLoaders: { [type2]: segmentLoader }, requestOptions, main: { mediaGroups }, mediaTypes: { [type2]: { groups, tracks } }, mainPlaylistLoader } = settings; for (const groupId in mediaGroups[type2]) { if (!groups[groupId]) { groups[groupId] = []; } for (const variantLabel in mediaGroups[type2][groupId]) { if (mediaGroups[type2][groupId][variantLabel].forced) { continue; } let properties = mediaGroups[type2][groupId][variantLabel]; let playlistLoader; if (sourceType === "hls") { playlistLoader = new PlaylistLoader$1(properties.resolvedUri, vhs, requestOptions); } else if (sourceType === "dash") { const playlists = properties.playlists.filter((p) => p.excludeUntil !== Infinity); if (!playlists.length) { return; } playlistLoader = new DashPlaylistLoader$1(properties.playlists[0], vhs, requestOptions, mainPlaylistLoader); } else if (sourceType === "vhs-json") { playlistLoader = new PlaylistLoader$1( properties.playlists ? properties.playlists[0] : properties.resolvedUri, vhs, requestOptions ); } properties = merge$2({ id: variantLabel, playlistLoader }, properties); setupListeners$1[type2](type2, properties.playlistLoader, settings); groups[groupId].push(properties); if (typeof tracks[variantLabel] === "undefined") { const track = tech.addRemoteTextTrack({ id: variantLabel, kind: "subtitles", default: properties.default && properties.autoselect, language: properties.language, label: variantLabel }, false).track; tracks[variantLabel] = track; } } } segmentLoader.on("error", onError$1[type2](type2, settings)); }, "CLOSED-CAPTIONS": (type2, settings) => { const { tech, main: { mediaGroups }, mediaTypes: { [type2]: { groups, tracks } } } = settings; for (const groupId in mediaGroups[type2]) { if (!groups[groupId]) { groups[groupId] = []; } for (const variantLabel in mediaGroups[type2][groupId]) { const properties = mediaGroups[type2][groupId][variantLabel]; if (!/^(?:CC|SERVICE)/.test(properties.instreamId)) { continue; } const captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {}; let newProps = { label: variantLabel, language: properties.language, instreamId: properties.instreamId, default: properties.default && properties.autoselect }; if (captionServices[newProps.instreamId]) { newProps = merge$2(newProps, captionServices[newProps.instreamId]); } if (newProps.default === void 0) { delete newProps.default; } groups[groupId].push(merge$2({ id: variantLabel }, properties)); if (typeof tracks[variantLabel] === "undefined") { const track = tech.addRemoteTextTrack({ id: newProps.instreamId, kind: "captions", default: newProps.default, language: newProps.language, label: newProps.label }, false).track; tracks[variantLabel] = track; } } } } }; const groupMatch$1 = (list, media) => { for (let i2 = 0; i2 < list.length; i2++) { if (playlistMatch$1(media, list[i2])) { return true; } if (list[i2].playlists && groupMatch$1(list[i2].playlists, media)) { return true; } } return false; }; const activeGroup$1 = (type2, settings) => (track) => { const { mainPlaylistLoader, mediaTypes: { [type2]: { groups } } } = settings; const media = mainPlaylistLoader.media(); if (!media) { return null; } let variants = null; if (media.attributes[type2]) { variants = groups[media.attributes[type2]]; } const groupKeys = Object.keys(groups); if (!variants) { if (type2 === "AUDIO" && groupKeys.length > 1 && isAudioOnly$1(settings.main)) { for (let i2 = 0; i2 < groupKeys.length; i2++) { const groupPropertyList = groups[groupKeys[i2]]; if (groupMatch$1(groupPropertyList, media)) { variants = groupPropertyList; break; } } } else if (groups.main) { variants = groups.main; } else if (groupKeys.length === 1) { variants = groups[groupKeys[0]]; } } if (typeof track === "undefined") { return variants; } if (track === null || !variants) { return null; } return variants.filter((props) => props.id === track.id)[0] || null; }; const activeTrack$1 = { AUDIO: (type2, settings) => () => { const { mediaTypes: { [type2]: { tracks } } } = settings; for (const id in tracks) { if (tracks[id].enabled) { return tracks[id]; } } return null; }, SUBTITLES: (type2, settings) => () => { const { mediaTypes: { [type2]: { tracks } } } = settings; for (const id in tracks) { if (tracks[id].mode === "showing" || tracks[id].mode === "hidden") { return tracks[id]; } } return null; } }; const getActiveGroup$1 = (type2, { mediaTypes: mediaTypes2 }) => () => { const activeTrack_ = mediaTypes2[type2].activeTrack(); if (!activeTrack_) { return null; } return mediaTypes2[type2].activeGroup(activeTrack_); }; const setupMediaGroups$1 = (settings) => { ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS"].forEach((type2) => { initialize$1[type2](type2, settings); }); const { mediaTypes: mediaTypes2, mainPlaylistLoader, tech, vhs, segmentLoaders: { ["AUDIO"]: audioSegmentLoader, main: mainSegmentLoader } } = settings; ["AUDIO", "SUBTITLES"].forEach((type2) => { mediaTypes2[type2].activeGroup = activeGroup$1(type2, settings); mediaTypes2[type2].activeTrack = activeTrack$1[type2](type2, settings); mediaTypes2[type2].onGroupChanged = onGroupChanged$1(type2, settings); mediaTypes2[type2].onGroupChanging = onGroupChanging$1(type2, settings); mediaTypes2[type2].onTrackChanged = onTrackChanged$1(type2, settings); mediaTypes2[type2].getActiveGroup = getActiveGroup$1(type2, settings); }); const audioGroup = mediaTypes2.AUDIO.activeGroup(); if (audioGroup) { const groupId = (audioGroup.filter((group) => group.default)[0] || audioGroup[0]).id; mediaTypes2.AUDIO.tracks[groupId].enabled = true; mediaTypes2.AUDIO.onGroupChanged(); mediaTypes2.AUDIO.onTrackChanged(); const activeAudioGroup = mediaTypes2.AUDIO.getActiveGroup(); if (!activeAudioGroup.playlistLoader) { mainSegmentLoader.setAudio(true); } else { mainSegmentLoader.setAudio(false); audioSegmentLoader.setAudio(true); } } mainPlaylistLoader.on("mediachange", () => { ["AUDIO", "SUBTITLES"].forEach((type2) => mediaTypes2[type2].onGroupChanged()); }); mainPlaylistLoader.on("mediachanging", () => { ["AUDIO", "SUBTITLES"].forEach((type2) => mediaTypes2[type2].onGroupChanging()); }); const onAudioTrackChanged = () => { mediaTypes2.AUDIO.onTrackChanged(); tech.trigger({ type: "usage", name: "vhs-audio-change" }); }; tech.audioTracks().addEventListener("change", onAudioTrackChanged); tech.remoteTextTracks().addEventListener("change", mediaTypes2.SUBTITLES.onTrackChanged); vhs.on("dispose", () => { tech.audioTracks().removeEventListener("change", onAudioTrackChanged); tech.remoteTextTracks().removeEventListener("change", mediaTypes2.SUBTITLES.onTrackChanged); }); tech.clearTracks("audio"); for (const id in mediaTypes2.AUDIO.tracks) { tech.audioTracks().addTrack(mediaTypes2.AUDIO.tracks[id]); } }; const createMediaTypes$1 = () => { const mediaTypes2 = {}; ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS"].forEach((type2) => { mediaTypes2[type2] = { groups: {}, tracks: {}, activePlaylistLoader: null, activeGroup: noop$1, activeTrack: noop$1, getActiveGroup: noop$1, onGroupChanged: noop$1, onTrackChanged: noop$1, lastTrack_: null, logger_: logger$1(`MediaGroups[${type2}]`) }; }); return mediaTypes2; }; const ABORT_EARLY_EXCLUSION_SECONDS = 60 * 2; let Vhs$1$1; const loaderStats$1 = ["mediaRequests", "mediaRequestsAborted", "mediaRequestsTimedout", "mediaRequestsErrored", "mediaTransferDuration", "mediaBytesTransferred", "mediaAppends"]; const sumLoaderStat$1 = function(stat) { return this.audioSegmentLoader_[stat] + this.mainSegmentLoader_[stat]; }; const shouldSwitchToMedia$1 = function({ currentPlaylist, buffered, currentTime, nextPlaylist, bufferLowWaterLine, bufferHighWaterLine, duration: duration5, bufferBasedABR, log: log2 }) { if (!nextPlaylist) { videojs$2.log.warn("We received no playlist to switch to. Please check your stream."); return false; } const sharedLogLine = `allowing switch ${currentPlaylist && currentPlaylist.id || "null"} -> ${nextPlaylist.id}`; if (!currentPlaylist) { log2(`${sharedLogLine} as current playlist is not set`); return true; } if (nextPlaylist.id === currentPlaylist.id) { return false; } const isBuffered = Boolean(findRange$1(buffered, currentTime).length); if (!currentPlaylist.endList) { if (!isBuffered && typeof currentPlaylist.partTargetDuration === "number") { log2(`not ${sharedLogLine} as current playlist is live llhls, but currentTime isn't in buffered.`); return false; } log2(`${sharedLogLine} as current playlist is live`); return true; } const forwardBuffer = timeAheadOf$1(buffered, currentTime); const maxBufferLowWaterLine = bufferBasedABR ? Config$1.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE : Config$1.MAX_BUFFER_LOW_WATER_LINE; if (duration5 < maxBufferLowWaterLine) { log2(`${sharedLogLine} as duration < max low water line (${duration5} < ${maxBufferLowWaterLine})`); return true; } const nextBandwidth = nextPlaylist.attributes.BANDWIDTH; const currBandwidth = currentPlaylist.attributes.BANDWIDTH; if (nextBandwidth < currBandwidth && (!bufferBasedABR || forwardBuffer < bufferHighWaterLine)) { let logLine = `${sharedLogLine} as next bandwidth < current bandwidth (${nextBandwidth} < ${currBandwidth})`; if (bufferBasedABR) { logLine += ` and forwardBuffer < bufferHighWaterLine (${forwardBuffer} < ${bufferHighWaterLine})`; } log2(logLine); return true; } if ((!bufferBasedABR || nextBandwidth > currBandwidth) && forwardBuffer >= bufferLowWaterLine) { let logLine = `${sharedLogLine} as forwardBuffer >= bufferLowWaterLine (${forwardBuffer} >= ${bufferLowWaterLine})`; if (bufferBasedABR) { logLine += ` and next bandwidth > current bandwidth (${nextBandwidth} > ${currBandwidth})`; } log2(logLine); return true; } log2(`not ${sharedLogLine} as no switching criteria met`); return false; }; class PlaylistController extends videojs$2.EventTarget { constructor(options2) { super(); const { src, withCredentials, tech, bandwidth: bandwidth2, externVhs, useCueTags, playlistExclusionDuration, enableLowInitialPlaylist, sourceType, cacheEncryptionKeys, bufferBasedABR, leastPixelDiffSelector, captionServices } = options2; if (!src) { throw new Error("A non-empty playlist URL or JSON manifest string is required"); } let { maxPlaylistRetries } = options2; if (maxPlaylistRetries === null || typeof maxPlaylistRetries === "undefined") { maxPlaylistRetries = Infinity; } Vhs$1$1 = externVhs; this.bufferBasedABR = Boolean(bufferBasedABR); this.leastPixelDiffSelector = Boolean(leastPixelDiffSelector); this.withCredentials = withCredentials; this.tech_ = tech; this.vhs_ = tech.vhs; this.sourceType_ = sourceType; this.useCueTags_ = useCueTags; this.playlistExclusionDuration = playlistExclusionDuration; this.maxPlaylistRetries = maxPlaylistRetries; this.enableLowInitialPlaylist = enableLowInitialPlaylist; if (this.useCueTags_) { this.cueTagsTrack_ = this.tech_.addTextTrack("metadata", "ad-cues"); this.cueTagsTrack_.inBandMetadataTrackDispatchType = ""; } this.requestOptions_ = { withCredentials, maxPlaylistRetries, timeout: null }; this.on("error", this.pauseLoading); this.mediaTypes_ = createMediaTypes$1(); this.mediaSource = new window_1.MediaSource(); this.handleDurationChange_ = this.handleDurationChange_.bind(this); this.handleSourceOpen_ = this.handleSourceOpen_.bind(this); this.handleSourceEnded_ = this.handleSourceEnded_.bind(this); this.mediaSource.addEventListener("durationchange", this.handleDurationChange_); this.mediaSource.addEventListener("sourceopen", this.handleSourceOpen_); this.mediaSource.addEventListener("sourceended", this.handleSourceEnded_); this.seekable_ = createTimeRanges$2(); this.hasPlayed_ = false; this.syncController_ = new SyncController$1(options2); this.segmentMetadataTrack_ = tech.addRemoteTextTrack({ kind: "metadata", label: "segment-metadata" }, false).track; this.decrypter_ = new Decrypter$1(); this.sourceUpdater_ = new SourceUpdater$1(this.mediaSource); this.inbandTextTracks_ = {}; this.timelineChangeController_ = new TimelineChangeController$1(); const segmentLoaderSettings = { vhs: this.vhs_, parse708captions: options2.parse708captions, useDtsForTimestampOffset: options2.useDtsForTimestampOffset, captionServices, mediaSource: this.mediaSource, currentTime: this.tech_.currentTime.bind(this.tech_), seekable: () => this.seekable(), seeking: () => this.tech_.seeking(), duration: () => this.duration(), hasPlayed: () => this.hasPlayed_, goalBufferLength: () => this.goalBufferLength(), bandwidth: bandwidth2, syncController: this.syncController_, decrypter: this.decrypter_, sourceType: this.sourceType_, inbandTextTracks: this.inbandTextTracks_, cacheEncryptionKeys, sourceUpdater: this.sourceUpdater_, timelineChangeController: this.timelineChangeController_, exactManifestTimings: options2.exactManifestTimings }; this.mainPlaylistLoader_ = this.sourceType_ === "dash" ? new DashPlaylistLoader$1(src, this.vhs_, this.requestOptions_) : new PlaylistLoader$1(src, this.vhs_, this.requestOptions_); this.setupMainPlaylistLoaderListeners_(); this.mainSegmentLoader_ = new SegmentLoader$1(merge$2(segmentLoaderSettings, { segmentMetadataTrack: this.segmentMetadataTrack_, loaderType: "main" }), options2); this.audioSegmentLoader_ = new SegmentLoader$1(merge$2(segmentLoaderSettings, { loaderType: "audio" }), options2); this.subtitleSegmentLoader_ = new VTTSegmentLoader$1(merge$2(segmentLoaderSettings, { loaderType: "vtt", featuresNativeTextTracks: this.tech_.featuresNativeTextTracks, loadVttJs: () => new Promise((resolve2, reject2) => { function onLoad() { tech.off("vttjserror", onError2); resolve2(); } function onError2() { tech.off("vttjsloaded", onLoad); reject2(); } tech.one("vttjsloaded", onLoad); tech.one("vttjserror", onError2); tech.addWebVttScript_(); }) }), options2); this.setupSegmentLoaderListeners_(); if (this.bufferBasedABR) { this.mainPlaylistLoader_.one("loadedplaylist", () => this.startABRTimer_()); this.tech_.on("pause", () => this.stopABRTimer_()); this.tech_.on("play", () => this.startABRTimer_()); } loaderStats$1.forEach((stat) => { this[stat + "_"] = sumLoaderStat$1.bind(this, stat); }); this.logger_ = logger$1("pc"); this.triggeredFmp4Usage = false; if (this.tech_.preload() === "none") { this.loadOnPlay_ = () => { this.loadOnPlay_ = null; this.mainPlaylistLoader_.load(); }; this.tech_.one("play", this.loadOnPlay_); } else { this.mainPlaylistLoader_.load(); } this.timeToLoadedData__ = -1; this.mainAppendsToLoadedData__ = -1; this.audioAppendsToLoadedData__ = -1; const event2 = this.tech_.preload() === "none" ? "play" : "loadstart"; this.tech_.one(event2, () => { const timeToLoadedDataStart = Date.now(); this.tech_.one("loadeddata", () => { this.timeToLoadedData__ = Date.now() - timeToLoadedDataStart; this.mainAppendsToLoadedData__ = this.mainSegmentLoader_.mediaAppends; this.audioAppendsToLoadedData__ = this.audioSegmentLoader_.mediaAppends; }); }); } mainAppendsToLoadedData_() { return this.mainAppendsToLoadedData__; } audioAppendsToLoadedData_() { return this.audioAppendsToLoadedData__; } appendsToLoadedData_() { const main = this.mainAppendsToLoadedData_(); const audio = this.audioAppendsToLoadedData_(); if (main === -1 || audio === -1) { return -1; } return main + audio; } timeToLoadedData_() { return this.timeToLoadedData__; } checkABR_(reason = "abr") { const nextPlaylist = this.selectPlaylist(); if (nextPlaylist && this.shouldSwitchToMedia_(nextPlaylist)) { this.switchMedia_(nextPlaylist, reason); } } switchMedia_(playlist, cause, delay) { const oldMedia = this.media(); const oldId = oldMedia && (oldMedia.id || oldMedia.uri); const newId = playlist.id || playlist.uri; if (oldId && oldId !== newId) { this.logger_(`switch media ${oldId} -> ${newId} from ${cause}`); this.tech_.trigger({ type: "usage", name: `vhs-rendition-change-${cause}` }); } this.mainPlaylistLoader_.media(playlist, delay); } startABRTimer_() { this.stopABRTimer_(); this.abrTimer_ = window_1.setInterval(() => this.checkABR_(), 250); } stopABRTimer_() { if (this.tech_.scrubbing && this.tech_.scrubbing()) { return; } window_1.clearInterval(this.abrTimer_); this.abrTimer_ = null; } getAudioTrackPlaylists_() { const main = this.main(); const defaultPlaylists = main && main.playlists || []; if (!main || !main.mediaGroups || !main.mediaGroups.AUDIO) { return defaultPlaylists; } const AUDIO5 = main.mediaGroups.AUDIO; const groupKeys = Object.keys(AUDIO5); let track; if (Object.keys(this.mediaTypes_.AUDIO.groups).length) { track = this.mediaTypes_.AUDIO.activeTrack(); } else { const defaultGroup = AUDIO5.main || groupKeys.length && AUDIO5[groupKeys[0]]; for (const label2 in defaultGroup) { if (defaultGroup[label2].default) { track = { label: label2 }; break; } } } if (!track) { return defaultPlaylists; } const playlists = []; for (const group in AUDIO5) { if (AUDIO5[group][track.label]) { const properties = AUDIO5[group][track.label]; if (properties.playlists && properties.playlists.length) { playlists.push.apply(playlists, properties.playlists); } else if (properties.uri) { playlists.push(properties); } else if (main.playlists.length) { for (let i2 = 0; i2 < main.playlists.length; i2++) { const playlist = main.playlists[i2]; if (playlist.attributes && playlist.attributes.AUDIO && playlist.attributes.AUDIO === group) { playlists.push(playlist); } } } } } if (!playlists.length) { return defaultPlaylists; } return playlists; } setupMainPlaylistLoaderListeners_() { this.mainPlaylistLoader_.on("loadedmetadata", () => { const media = this.mainPlaylistLoader_.media(); const requestTimeout = media.targetDuration * 1.5 * 1e3; if (isLowestEnabledRendition$1(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.media())) { this.requestOptions_.timeout = 0; } else { this.requestOptions_.timeout = requestTimeout; } if (media.endList && this.tech_.preload() !== "none") { this.mainSegmentLoader_.playlist(media, this.requestOptions_); this.mainSegmentLoader_.load(); } setupMediaGroups$1({ sourceType: this.sourceType_, segmentLoaders: { AUDIO: this.audioSegmentLoader_, SUBTITLES: this.subtitleSegmentLoader_, main: this.mainSegmentLoader_ }, tech: this.tech_, requestOptions: this.requestOptions_, mainPlaylistLoader: this.mainPlaylistLoader_, vhs: this.vhs_, main: this.main(), mediaTypes: this.mediaTypes_, excludePlaylist: this.excludePlaylist.bind(this) }); this.triggerPresenceUsage_(this.main(), media); this.setupFirstPlay(); if (!this.mediaTypes_.AUDIO.activePlaylistLoader || this.mediaTypes_.AUDIO.activePlaylistLoader.media()) { this.trigger("selectedinitialmedia"); } else { this.mediaTypes_.AUDIO.activePlaylistLoader.one("loadedmetadata", () => { this.trigger("selectedinitialmedia"); }); } }); this.mainPlaylistLoader_.on("loadedplaylist", () => { if (this.loadOnPlay_) { this.tech_.off("play", this.loadOnPlay_); } let updatedPlaylist = this.mainPlaylistLoader_.media(); if (!updatedPlaylist) { this.excludeUnsupportedVariants_(); let selectedMedia; if (this.enableLowInitialPlaylist) { selectedMedia = this.selectInitialPlaylist(); } if (!selectedMedia) { selectedMedia = this.selectPlaylist(); } if (!selectedMedia || !this.shouldSwitchToMedia_(selectedMedia)) { return; } this.initialMedia_ = selectedMedia; this.switchMedia_(this.initialMedia_, "initial"); const haveJsonSource = this.sourceType_ === "vhs-json" && this.initialMedia_.segments; if (!haveJsonSource) { return; } updatedPlaylist = this.initialMedia_; } this.handleUpdatedMediaPlaylist(updatedPlaylist); }); this.mainPlaylistLoader_.on("error", () => { const error = this.mainPlaylistLoader_.error; this.excludePlaylist({ playlistToExclude: error.playlist, error }); }); this.mainPlaylistLoader_.on("mediachanging", () => { this.mainSegmentLoader_.abort(); this.mainSegmentLoader_.pause(); }); this.mainPlaylistLoader_.on("mediachange", () => { const media = this.mainPlaylistLoader_.media(); const requestTimeout = media.targetDuration * 1.5 * 1e3; if (isLowestEnabledRendition$1(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.media())) { this.requestOptions_.timeout = 0; } else { this.requestOptions_.timeout = requestTimeout; } this.mainPlaylistLoader_.load(); this.mainSegmentLoader_.playlist(media, this.requestOptions_); this.mainSegmentLoader_.load(); this.tech_.trigger({ type: "mediachange", bubbles: true }); }); this.mainPlaylistLoader_.on("playlistunchanged", () => { const updatedPlaylist = this.mainPlaylistLoader_.media(); if (updatedPlaylist.lastExcludeReason_ === "playlist-unchanged") { return; } const playlistOutdated = this.stuckAtPlaylistEnd_(updatedPlaylist); if (playlistOutdated) { this.excludePlaylist({ error: { message: "Playlist no longer updating.", reason: "playlist-unchanged" } }); this.tech_.trigger("playliststuck"); } }); this.mainPlaylistLoader_.on("renditiondisabled", () => { this.tech_.trigger({ type: "usage", name: "vhs-rendition-disabled" }); }); this.mainPlaylistLoader_.on("renditionenabled", () => { this.tech_.trigger({ type: "usage", name: "vhs-rendition-enabled" }); }); } handleUpdatedMediaPlaylist(updatedPlaylist) { if (this.useCueTags_) { this.updateAdCues_(updatedPlaylist); } this.mainSegmentLoader_.playlist(updatedPlaylist, this.requestOptions_); this.updateDuration(!updatedPlaylist.endList); if (!this.tech_.paused()) { this.mainSegmentLoader_.load(); if (this.audioSegmentLoader_) { this.audioSegmentLoader_.load(); } } } triggerPresenceUsage_(main, media) { const mediaGroups = main.mediaGroups || {}; let defaultDemuxed = true; const audioGroupKeys = Object.keys(mediaGroups.AUDIO); for (const mediaGroup in mediaGroups.AUDIO) { for (const label2 in mediaGroups.AUDIO[mediaGroup]) { const properties = mediaGroups.AUDIO[mediaGroup][label2]; if (!properties.uri) { defaultDemuxed = false; } } } if (defaultDemuxed) { this.tech_.trigger({ type: "usage", name: "vhs-demuxed" }); } if (Object.keys(mediaGroups.SUBTITLES).length) { this.tech_.trigger({ type: "usage", name: "vhs-webvtt" }); } if (Vhs$1$1.Playlist.isAes(media)) { this.tech_.trigger({ type: "usage", name: "vhs-aes" }); } if (audioGroupKeys.length && Object.keys(mediaGroups.AUDIO[audioGroupKeys[0]]).length > 1) { this.tech_.trigger({ type: "usage", name: "vhs-alternate-audio" }); } if (this.useCueTags_) { this.tech_.trigger({ type: "usage", name: "vhs-playlist-cue-tags" }); } } shouldSwitchToMedia_(nextPlaylist) { const currentPlaylist = this.mainPlaylistLoader_.media() || this.mainPlaylistLoader_.pendingMedia_; const currentTime = this.tech_.currentTime(); const bufferLowWaterLine = this.bufferLowWaterLine(); const bufferHighWaterLine = this.bufferHighWaterLine(); const buffered = this.tech_.buffered(); return shouldSwitchToMedia$1({ buffered, currentTime, currentPlaylist, nextPlaylist, bufferLowWaterLine, bufferHighWaterLine, duration: this.duration(), bufferBasedABR: this.bufferBasedABR, log: this.logger_ }); } setupSegmentLoaderListeners_() { this.mainSegmentLoader_.on("bandwidthupdate", () => { this.checkABR_("bandwidthupdate"); this.tech_.trigger("bandwidthupdate"); }); this.mainSegmentLoader_.on("timeout", () => { if (this.bufferBasedABR) { this.mainSegmentLoader_.load(); } }); if (!this.bufferBasedABR) { this.mainSegmentLoader_.on("progress", () => { this.trigger("progress"); }); } this.mainSegmentLoader_.on("error", () => { const error = this.mainSegmentLoader_.error(); this.excludePlaylist({ playlistToExclude: error.playlist, error }); }); this.mainSegmentLoader_.on("appenderror", () => { this.error = this.mainSegmentLoader_.error_; this.trigger("error"); }); this.mainSegmentLoader_.on("syncinfoupdate", () => { this.onSyncInfoUpdate_(); }); this.mainSegmentLoader_.on("timestampoffset", () => { this.tech_.trigger({ type: "usage", name: "vhs-timestamp-offset" }); }); this.audioSegmentLoader_.on("syncinfoupdate", () => { this.onSyncInfoUpdate_(); }); this.audioSegmentLoader_.on("appenderror", () => { this.error = this.audioSegmentLoader_.error_; this.trigger("error"); }); this.mainSegmentLoader_.on("ended", () => { this.logger_("main segment loader ended"); this.onEndOfStream(); }); this.mainSegmentLoader_.on("earlyabort", (event2) => { if (this.bufferBasedABR) { return; } this.delegateLoaders_("all", ["abort"]); this.excludePlaylist({ error: { message: "Aborted early because there isn't enough bandwidth to complete the request without rebuffering." }, playlistExclusionDuration: ABORT_EARLY_EXCLUSION_SECONDS }); }); const updateCodecs = () => { if (!this.sourceUpdater_.hasCreatedSourceBuffers()) { return this.tryToCreateSourceBuffers_(); } const codecs = this.getCodecsOrExclude_(); if (!codecs) { return; } this.sourceUpdater_.addOrChangeSourceBuffers(codecs); }; this.mainSegmentLoader_.on("trackinfo", updateCodecs); this.audioSegmentLoader_.on("trackinfo", updateCodecs); this.mainSegmentLoader_.on("fmp4", () => { if (!this.triggeredFmp4Usage) { this.tech_.trigger({ type: "usage", name: "vhs-fmp4" }); this.triggeredFmp4Usage = true; } }); this.audioSegmentLoader_.on("fmp4", () => { if (!this.triggeredFmp4Usage) { this.tech_.trigger({ type: "usage", name: "vhs-fmp4" }); this.triggeredFmp4Usage = true; } }); this.audioSegmentLoader_.on("ended", () => { this.logger_("audioSegmentLoader ended"); this.onEndOfStream(); }); } mediaSecondsLoaded_() { return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded + this.mainSegmentLoader_.mediaSecondsLoaded); } load() { this.mainSegmentLoader_.load(); if (this.mediaTypes_.AUDIO.activePlaylistLoader) { this.audioSegmentLoader_.load(); } if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) { this.subtitleSegmentLoader_.load(); } } fastQualityChange_(media = this.selectPlaylist()) { if (media === this.mainPlaylistLoader_.media()) { this.logger_("skipping fastQualityChange because new media is same as old"); return; } this.switchMedia_(media, "fast-quality"); this.mainSegmentLoader_.resetEverything(() => { if (videojs$2.browser.IE_VERSION || videojs$2.browser.IS_EDGE) { this.tech_.setCurrentTime(this.tech_.currentTime() + 0.04); } else { this.tech_.setCurrentTime(this.tech_.currentTime()); } }); } play() { if (this.setupFirstPlay()) { return; } if (this.tech_.ended()) { this.tech_.setCurrentTime(0); } if (this.hasPlayed_) { this.load(); } const seekable3 = this.tech_.seekable(); if (this.tech_.duration() === Infinity) { if (this.tech_.currentTime() < seekable3.start(0)) { return this.tech_.setCurrentTime(seekable3.end(seekable3.length - 1)); } } } setupFirstPlay() { const media = this.mainPlaylistLoader_.media(); if (!media || this.tech_.paused() || this.hasPlayed_) { return false; } if (!media.endList) { const seekable3 = this.seekable(); if (!seekable3.length) { return false; } if (videojs$2.browser.IE_VERSION && this.tech_.readyState() === 0) { this.tech_.one("loadedmetadata", () => { this.trigger("firstplay"); this.tech_.setCurrentTime(seekable3.end(0)); this.hasPlayed_ = true; }); return false; } this.trigger("firstplay"); this.tech_.setCurrentTime(seekable3.end(0)); } this.hasPlayed_ = true; this.load(); return true; } handleSourceOpen_() { this.tryToCreateSourceBuffers_(); if (this.tech_.autoplay()) { const playPromise = this.tech_.play(); if (typeof playPromise !== "undefined" && typeof playPromise.then === "function") { playPromise.then(null, (e) => { }); } } this.trigger("sourceopen"); } handleSourceEnded_() { if (!this.inbandTextTracks_.metadataTrack_) { return; } const cues = this.inbandTextTracks_.metadataTrack_.cues; if (!cues || !cues.length) { return; } const duration5 = this.duration(); cues[cues.length - 1].endTime = isNaN(duration5) || Math.abs(duration5) === Infinity ? Number.MAX_VALUE : duration5; } handleDurationChange_() { this.tech_.trigger("durationchange"); } onEndOfStream() { let isEndOfStream = this.mainSegmentLoader_.ended_; if (this.mediaTypes_.AUDIO.activePlaylistLoader) { const mainMediaInfo = this.mainSegmentLoader_.getCurrentMediaInfo_(); if (!mainMediaInfo || mainMediaInfo.hasVideo) { isEndOfStream = isEndOfStream && this.audioSegmentLoader_.ended_; } else { isEndOfStream = this.audioSegmentLoader_.ended_; } } if (!isEndOfStream) { return; } this.stopABRTimer_(); this.sourceUpdater_.endOfStream(); } stuckAtPlaylistEnd_(playlist) { const seekable3 = this.seekable(); if (!seekable3.length) { return false; } const expired = this.syncController_.getExpiredTime(playlist, this.duration()); if (expired === null) { return false; } const absolutePlaylistEnd = Vhs$1$1.Playlist.playlistEnd(playlist, expired); const currentTime = this.tech_.currentTime(); const buffered = this.tech_.buffered(); if (!buffered.length) { return absolutePlaylistEnd - currentTime <= SAFE_TIME_DELTA$1; } const bufferedEnd = buffered.end(buffered.length - 1); return bufferedEnd - currentTime <= SAFE_TIME_DELTA$1 && absolutePlaylistEnd - bufferedEnd <= SAFE_TIME_DELTA$1; } excludePlaylist({ playlistToExclude = this.mainPlaylistLoader_.media(), error = {}, playlistExclusionDuration }) { playlistToExclude = playlistToExclude || this.mainPlaylistLoader_.media(); playlistExclusionDuration = playlistExclusionDuration || error.playlistExclusionDuration || this.playlistExclusionDuration; if (!playlistToExclude) { this.error = error; if (this.mediaSource.readyState !== "open") { this.trigger("error"); } else { this.sourceUpdater_.endOfStream("network"); } return; } playlistToExclude.playlistErrors_++; const playlists = this.mainPlaylistLoader_.main.playlists; const enabledPlaylists = playlists.filter(isEnabled$1); const isFinalRendition = enabledPlaylists.length === 1 && enabledPlaylists[0] === playlistToExclude; if (playlists.length === 1 && playlistExclusionDuration !== Infinity) { videojs$2.log.warn(`Problem encountered with playlist ${playlistToExclude.id}. Trying again since it is the only playlist.`); this.tech_.trigger("retryplaylist"); return this.mainPlaylistLoader_.load(isFinalRendition); } if (isFinalRendition) { let reincluded = false; playlists.forEach((playlist) => { if (playlist === playlistToExclude) { return; } const excludeUntil2 = playlist.excludeUntil; if (typeof excludeUntil2 !== "undefined" && excludeUntil2 !== Infinity) { reincluded = true; delete playlist.excludeUntil; } }); if (reincluded) { videojs$2.log.warn("Removing other playlists from the exclusion list because the last rendition is about to be excluded."); this.tech_.trigger("retryplaylist"); } } let excludeUntil; if (playlistToExclude.playlistErrors_ > this.maxPlaylistRetries) { excludeUntil = Infinity; } else { excludeUntil = Date.now() + playlistExclusionDuration * 1e3; } playlistToExclude.excludeUntil = excludeUntil; if (error.reason) { playlistToExclude.lastExcludeReason_ = error.reason; } this.tech_.trigger("excludeplaylist"); this.tech_.trigger({ type: "usage", name: "vhs-rendition-excluded" }); const nextPlaylist = this.selectPlaylist(); if (!nextPlaylist) { this.error = "Playback cannot continue. No available working or supported playlists."; this.trigger("error"); return; } const logFn2 = error.internal ? this.logger_ : videojs$2.log.warn; const errorMessage = error.message ? " " + error.message : ""; logFn2(`${error.internal ? "Internal problem" : "Problem"} encountered with playlist ${playlistToExclude.id}.${errorMessage} Switching to playlist ${nextPlaylist.id}.`); if (nextPlaylist.attributes.AUDIO !== playlistToExclude.attributes.AUDIO) { this.delegateLoaders_("audio", ["abort", "pause"]); } if (nextPlaylist.attributes.SUBTITLES !== playlistToExclude.attributes.SUBTITLES) { this.delegateLoaders_("subtitle", ["abort", "pause"]); } this.delegateLoaders_("main", ["abort", "pause"]); const delayDuration = nextPlaylist.targetDuration / 2 * 1e3 || 5 * 1e3; const shouldDelay = typeof nextPlaylist.lastRequest === "number" && Date.now() - nextPlaylist.lastRequest <= delayDuration; return this.switchMedia_(nextPlaylist, "exclude", isFinalRendition || shouldDelay); } pauseLoading() { this.delegateLoaders_("all", ["abort", "pause"]); this.stopABRTimer_(); } delegateLoaders_(filter, fnNames) { const loaders = []; const dontFilterPlaylist = filter === "all"; if (dontFilterPlaylist || filter === "main") { loaders.push(this.mainPlaylistLoader_); } const mediaTypes2 = []; if (dontFilterPlaylist || filter === "audio") { mediaTypes2.push("AUDIO"); } if (dontFilterPlaylist || filter === "subtitle") { mediaTypes2.push("CLOSED-CAPTIONS"); mediaTypes2.push("SUBTITLES"); } mediaTypes2.forEach((mediaType) => { const loader = this.mediaTypes_[mediaType] && this.mediaTypes_[mediaType].activePlaylistLoader; if (loader) { loaders.push(loader); } }); ["main", "audio", "subtitle"].forEach((name) => { const loader = this[`${name}SegmentLoader_`]; if (loader && (filter === name || filter === "all")) { loaders.push(loader); } }); loaders.forEach((loader) => fnNames.forEach((fnName) => { if (typeof loader[fnName] === "function") { loader[fnName](); } })); } setCurrentTime(currentTime) { const buffered = findRange$1(this.tech_.buffered(), currentTime); if (!(this.mainPlaylistLoader_ && this.mainPlaylistLoader_.media())) { return 0; } if (!this.mainPlaylistLoader_.media().segments) { return 0; } if (buffered && buffered.length) { return currentTime; } this.mainSegmentLoader_.resetEverything(); this.mainSegmentLoader_.abort(); if (this.mediaTypes_.AUDIO.activePlaylistLoader) { this.audioSegmentLoader_.resetEverything(); this.audioSegmentLoader_.abort(); } if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) { this.subtitleSegmentLoader_.resetEverything(); this.subtitleSegmentLoader_.abort(); } this.load(); } duration() { if (!this.mainPlaylistLoader_) { return 0; } const media = this.mainPlaylistLoader_.media(); if (!media) { return 0; } if (!media.endList) { return Infinity; } if (this.mediaSource) { return this.mediaSource.duration; } return Vhs$1$1.Playlist.duration(media); } seekable() { return this.seekable_; } onSyncInfoUpdate_() { let audioSeekable; if (!this.mainPlaylistLoader_) { return; } let media = this.mainPlaylistLoader_.media(); if (!media) { return; } let expired = this.syncController_.getExpiredTime(media, this.duration()); if (expired === null) { return; } const main = this.mainPlaylistLoader_.main; const mainSeekable = Vhs$1$1.Playlist.seekable(media, expired, Vhs$1$1.Playlist.liveEdgeDelay(main, media)); if (mainSeekable.length === 0) { return; } if (this.mediaTypes_.AUDIO.activePlaylistLoader) { media = this.mediaTypes_.AUDIO.activePlaylistLoader.media(); expired = this.syncController_.getExpiredTime(media, this.duration()); if (expired === null) { return; } audioSeekable = Vhs$1$1.Playlist.seekable(media, expired, Vhs$1$1.Playlist.liveEdgeDelay(main, media)); if (audioSeekable.length === 0) { return; } } let oldEnd; let oldStart; if (this.seekable_ && this.seekable_.length) { oldEnd = this.seekable_.end(0); oldStart = this.seekable_.start(0); } if (!audioSeekable) { this.seekable_ = mainSeekable; } else if (audioSeekable.start(0) > mainSeekable.end(0) || mainSeekable.start(0) > audioSeekable.end(0)) { this.seekable_ = mainSeekable; } else { this.seekable_ = createTimeRanges$2([[audioSeekable.start(0) > mainSeekable.start(0) ? audioSeekable.start(0) : mainSeekable.start(0), audioSeekable.end(0) < mainSeekable.end(0) ? audioSeekable.end(0) : mainSeekable.end(0)]]); } if (this.seekable_ && this.seekable_.length) { if (this.seekable_.end(0) === oldEnd && this.seekable_.start(0) === oldStart) { return; } } this.logger_(`seekable updated [${printableRange$1(this.seekable_)}]`); this.tech_.trigger("seekablechanged"); } updateDuration(isLive) { if (this.updateDuration_) { this.mediaSource.removeEventListener("sourceopen", this.updateDuration_); this.updateDuration_ = null; } if (this.mediaSource.readyState !== "open") { this.updateDuration_ = this.updateDuration.bind(this, isLive); this.mediaSource.addEventListener("sourceopen", this.updateDuration_); return; } if (isLive) { const seekable3 = this.seekable(); if (!seekable3.length) { return; } if (isNaN(this.mediaSource.duration) || this.mediaSource.duration < seekable3.end(seekable3.length - 1)) { this.sourceUpdater_.setDuration(seekable3.end(seekable3.length - 1)); } return; } const buffered = this.tech_.buffered(); let duration5 = Vhs$1$1.Playlist.duration(this.mainPlaylistLoader_.media()); if (buffered.length > 0) { duration5 = Math.max(duration5, buffered.end(buffered.length - 1)); } if (this.mediaSource.duration !== duration5) { this.sourceUpdater_.setDuration(duration5); } } dispose() { this.trigger("dispose"); this.decrypter_.terminate(); this.mainPlaylistLoader_.dispose(); this.mainSegmentLoader_.dispose(); if (this.loadOnPlay_) { this.tech_.off("play", this.loadOnPlay_); } ["AUDIO", "SUBTITLES"].forEach((type2) => { const groups = this.mediaTypes_[type2].groups; for (const id in groups) { groups[id].forEach((group) => { if (group.playlistLoader) { group.playlistLoader.dispose(); } }); } }); this.audioSegmentLoader_.dispose(); this.subtitleSegmentLoader_.dispose(); this.sourceUpdater_.dispose(); this.timelineChangeController_.dispose(); this.stopABRTimer_(); if (this.updateDuration_) { this.mediaSource.removeEventListener("sourceopen", this.updateDuration_); } this.mediaSource.removeEventListener("durationchange", this.handleDurationChange_); this.mediaSource.removeEventListener("sourceopen", this.handleSourceOpen_); this.mediaSource.removeEventListener("sourceended", this.handleSourceEnded_); this.off(); } main() { return this.mainPlaylistLoader_.main; } media() { return this.mainPlaylistLoader_.media() || this.initialMedia_; } areMediaTypesKnown_() { const usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader; const hasMainMediaInfo = !!this.mainSegmentLoader_.getCurrentMediaInfo_(); const hasAudioMediaInfo = !usingAudioLoader ? true : !!this.audioSegmentLoader_.getCurrentMediaInfo_(); if (!hasMainMediaInfo || !hasAudioMediaInfo) { return false; } return true; } getCodecsOrExclude_() { const media = { main: this.mainSegmentLoader_.getCurrentMediaInfo_() || {}, audio: this.audioSegmentLoader_.getCurrentMediaInfo_() || {} }; const playlist = this.mainSegmentLoader_.getPendingSegmentPlaylist() || this.media(); media.video = media.main; const playlistCodecs = codecsForPlaylist$1(this.main(), playlist); const codecs = {}; const usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader; if (media.main.hasVideo) { codecs.video = playlistCodecs.video || media.main.videoCodec || DEFAULT_VIDEO_CODEC$1; } if (media.main.isMuxed) { codecs.video += `,${playlistCodecs.audio || media.main.audioCodec || DEFAULT_AUDIO_CODEC$1}`; } if (media.main.hasAudio && !media.main.isMuxed || media.audio.hasAudio || usingAudioLoader) { codecs.audio = playlistCodecs.audio || media.main.audioCodec || media.audio.audioCodec || DEFAULT_AUDIO_CODEC$1; media.audio.isFmp4 = media.main.hasAudio && !media.main.isMuxed ? media.main.isFmp4 : media.audio.isFmp4; } if (!codecs.audio && !codecs.video) { this.excludePlaylist({ playlistToExclude: playlist, error: { message: "Could not determine codecs for playlist." }, playlistExclusionDuration: Infinity }); return; } const supportFunction = (isFmp4, codec) => isFmp4 ? browserSupportsCodec$1(codec) : muxerSupportsCodec$1(codec); const unsupportedCodecs = {}; let unsupportedAudio; ["video", "audio"].forEach(function(type2) { if (codecs.hasOwnProperty(type2) && !supportFunction(media[type2].isFmp4, codecs[type2])) { const supporter = media[type2].isFmp4 ? "browser" : "muxer"; unsupportedCodecs[supporter] = unsupportedCodecs[supporter] || []; unsupportedCodecs[supporter].push(codecs[type2]); if (type2 === "audio") { unsupportedAudio = supporter; } } }); if (usingAudioLoader && unsupportedAudio && playlist.attributes.AUDIO) { const audioGroup = playlist.attributes.AUDIO; this.main().playlists.forEach((variant) => { const variantAudioGroup = variant.attributes && variant.attributes.AUDIO; if (variantAudioGroup === audioGroup && variant !== playlist) { variant.excludeUntil = Infinity; } }); this.logger_(`excluding audio group ${audioGroup} as ${unsupportedAudio} does not support codec(s): "${codecs.audio}"`); } if (Object.keys(unsupportedCodecs).length) { const message = Object.keys(unsupportedCodecs).reduce((acc, supporter) => { if (acc) { acc += ", "; } acc += `${supporter} does not support codec(s): "${unsupportedCodecs[supporter].join(",")}"`; return acc; }, "") + "."; this.excludePlaylist({ playlistToExclude: playlist, error: { internal: true, message }, playlistExclusionDuration: Infinity }); return; } if (this.sourceUpdater_.hasCreatedSourceBuffers() && !this.sourceUpdater_.canChangeType()) { const switchMessages = []; ["video", "audio"].forEach((type2) => { const newCodec = (parseCodecs$1(this.sourceUpdater_.codecs[type2] || "")[0] || {}).type; const oldCodec = (parseCodecs$1(codecs[type2] || "")[0] || {}).type; if (newCodec && oldCodec && newCodec.toLowerCase() !== oldCodec.toLowerCase()) { switchMessages.push(`"${this.sourceUpdater_.codecs[type2]}" -> "${codecs[type2]}"`); } }); if (switchMessages.length) { this.excludePlaylist({ playlistToExclude: playlist, error: { message: `Codec switching not supported: ${switchMessages.join(", ")}.`, internal: true }, playlistExclusionDuration: Infinity }); return; } } return codecs; } tryToCreateSourceBuffers_() { if (this.mediaSource.readyState !== "open" || this.sourceUpdater_.hasCreatedSourceBuffers()) { return; } if (!this.areMediaTypesKnown_()) { return; } const codecs = this.getCodecsOrExclude_(); if (!codecs) { return; } this.sourceUpdater_.createSourceBuffers(codecs); const codecString = [codecs.video, codecs.audio].filter(Boolean).join(","); this.excludeIncompatibleVariants_(codecString); } excludeUnsupportedVariants_() { const playlists = this.main().playlists; const ids = []; Object.keys(playlists).forEach((key) => { const variant = playlists[key]; if (ids.indexOf(variant.id) !== -1) { return; } ids.push(variant.id); const codecs = codecsForPlaylist$1(this.main, variant); const unsupported = []; if (codecs.audio && !muxerSupportsCodec$1(codecs.audio) && !browserSupportsCodec$1(codecs.audio)) { unsupported.push(`audio codec ${codecs.audio}`); } if (codecs.video && !muxerSupportsCodec$1(codecs.video) && !browserSupportsCodec$1(codecs.video)) { unsupported.push(`video codec ${codecs.video}`); } if (codecs.text && codecs.text === "stpp.ttml.im1t") { unsupported.push(`text codec ${codecs.text}`); } if (unsupported.length) { variant.excludeUntil = Infinity; this.logger_(`excluding ${variant.id} for unsupported: ${unsupported.join(", ")}`); } }); } excludeIncompatibleVariants_(codecString) { const ids = []; const playlists = this.main().playlists; const codecs = unwrapCodecList$1(parseCodecs$1(codecString)); const codecCount_ = codecCount$1(codecs); const videoDetails = codecs.video && parseCodecs$1(codecs.video)[0] || null; const audioDetails = codecs.audio && parseCodecs$1(codecs.audio)[0] || null; Object.keys(playlists).forEach((key) => { const variant = playlists[key]; if (ids.indexOf(variant.id) !== -1 || variant.excludeUntil === Infinity) { return; } ids.push(variant.id); const exclusionReasons = []; const variantCodecs = codecsForPlaylist$1(this.mainPlaylistLoader_.main, variant); const variantCodecCount = codecCount$1(variantCodecs); if (!variantCodecs.audio && !variantCodecs.video) { return; } if (variantCodecCount !== codecCount_) { exclusionReasons.push(`codec count "${variantCodecCount}" !== "${codecCount_}"`); } if (!this.sourceUpdater_.canChangeType()) { const variantVideoDetails = variantCodecs.video && parseCodecs$1(variantCodecs.video)[0] || null; const variantAudioDetails = variantCodecs.audio && parseCodecs$1(variantCodecs.audio)[0] || null; if (variantVideoDetails && videoDetails && variantVideoDetails.type.toLowerCase() !== videoDetails.type.toLowerCase()) { exclusionReasons.push(`video codec "${variantVideoDetails.type}" !== "${videoDetails.type}"`); } if (variantAudioDetails && audioDetails && variantAudioDetails.type.toLowerCase() !== audioDetails.type.toLowerCase()) { exclusionReasons.push(`audio codec "${variantAudioDetails.type}" !== "${audioDetails.type}"`); } } if (exclusionReasons.length) { variant.excludeUntil = Infinity; this.logger_(`excluding ${variant.id}: ${exclusionReasons.join(" && ")}`); } }); } updateAdCues_(media) { let offset = 0; const seekable3 = this.seekable(); if (seekable3.length) { offset = seekable3.start(0); } updateAdCues$1(media, this.cueTagsTrack_, offset); } goalBufferLength() { const currentTime = this.tech_.currentTime(); const initial = Config$1.GOAL_BUFFER_LENGTH; const rate = Config$1.GOAL_BUFFER_LENGTH_RATE; const max2 = Math.max(initial, Config$1.MAX_GOAL_BUFFER_LENGTH); return Math.min(initial + currentTime * rate, max2); } bufferLowWaterLine() { const currentTime = this.tech_.currentTime(); const initial = Config$1.BUFFER_LOW_WATER_LINE; const rate = Config$1.BUFFER_LOW_WATER_LINE_RATE; const max2 = Math.max(initial, Config$1.MAX_BUFFER_LOW_WATER_LINE); const newMax = Math.max(initial, Config$1.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE); return Math.min(initial + currentTime * rate, this.bufferBasedABR ? newMax : max2); } bufferHighWaterLine() { return Config$1.BUFFER_HIGH_WATER_LINE; } } const enableFunction$1 = (loader, playlistID, changePlaylistFn) => (enable) => { const playlist = loader.main.playlists[playlistID]; const incompatible = isIncompatible$1(playlist); const currentlyEnabled = isEnabled$1(playlist); if (typeof enable === "undefined") { return currentlyEnabled; } if (enable) { delete playlist.disabled; } else { playlist.disabled = true; } if (enable !== currentlyEnabled && !incompatible) { changePlaylistFn(); if (enable) { loader.trigger("renditionenabled"); } else { loader.trigger("renditiondisabled"); } } return enable; }; class Representation$1 { constructor(vhsHandler, playlist, id) { const { playlistController_: pc } = vhsHandler; const qualityChangeFunction = pc.fastQualityChange_.bind(pc); if (playlist.attributes) { const resolution = playlist.attributes.RESOLUTION; this.width = resolution && resolution.width; this.height = resolution && resolution.height; this.bandwidth = playlist.attributes.BANDWIDTH; this.frameRate = playlist.attributes["FRAME-RATE"]; } this.codecs = codecsForPlaylist$1(pc.main(), playlist); this.playlist = playlist; this.id = id; this.enabled = enableFunction$1(vhsHandler.playlists, playlist.id, qualityChangeFunction); } } const renditionSelectionMixin$1 = function(vhsHandler) { vhsHandler.representations = () => { const main = vhsHandler.playlistController_.main(); const playlists = isAudioOnly$1(main) ? vhsHandler.playlistController_.getAudioTrackPlaylists_() : main.playlists; if (!playlists) { return []; } return playlists.filter((media) => !isIncompatible$1(media)).map((e, i2) => new Representation$1(vhsHandler, e, e.id)); }; }; const timerCancelEvents$1 = ["seeking", "seeked", "pause", "playing", "error"]; class PlaybackWatcher$1 { constructor(options2) { this.playlistController_ = options2.playlistController; this.tech_ = options2.tech; this.seekable = options2.seekable; this.allowSeeksWithinUnsafeLiveWindow = options2.allowSeeksWithinUnsafeLiveWindow; this.liveRangeSafeTimeDelta = options2.liveRangeSafeTimeDelta; this.media = options2.media; this.consecutiveUpdates = 0; this.lastRecordedTime = null; this.checkCurrentTimeTimeout_ = null; this.logger_ = logger$1("PlaybackWatcher"); this.logger_("initialize"); const playHandler = () => this.monitorCurrentTime_(); const canPlayHandler = () => this.monitorCurrentTime_(); const waitingHandler = () => this.techWaiting_(); const cancelTimerHandler = () => this.resetTimeUpdate_(); const pc = this.playlistController_; const loaderTypes = ["main", "subtitle", "audio"]; const loaderChecks = {}; loaderTypes.forEach((type2) => { loaderChecks[type2] = { reset: () => this.resetSegmentDownloads_(type2), updateend: () => this.checkSegmentDownloads_(type2) }; pc[`${type2}SegmentLoader_`].on("appendsdone", loaderChecks[type2].updateend); pc[`${type2}SegmentLoader_`].on("playlistupdate", loaderChecks[type2].reset); this.tech_.on(["seeked", "seeking"], loaderChecks[type2].reset); }); const setSeekingHandlers = (fn2) => { ["main", "audio"].forEach((type2) => { pc[`${type2}SegmentLoader_`][fn2]("appended", this.seekingAppendCheck_); }); }; this.seekingAppendCheck_ = () => { if (this.fixesBadSeeks_()) { this.consecutiveUpdates = 0; this.lastRecordedTime = this.tech_.currentTime(); setSeekingHandlers("off"); } }; this.clearSeekingAppendCheck_ = () => setSeekingHandlers("off"); this.watchForBadSeeking_ = () => { this.clearSeekingAppendCheck_(); setSeekingHandlers("on"); }; this.tech_.on("seeked", this.clearSeekingAppendCheck_); this.tech_.on("seeking", this.watchForBadSeeking_); this.tech_.on("waiting", waitingHandler); this.tech_.on(timerCancelEvents$1, cancelTimerHandler); this.tech_.on("canplay", canPlayHandler); this.tech_.one("play", playHandler); this.dispose = () => { this.clearSeekingAppendCheck_(); this.logger_("dispose"); this.tech_.off("waiting", waitingHandler); this.tech_.off(timerCancelEvents$1, cancelTimerHandler); this.tech_.off("canplay", canPlayHandler); this.tech_.off("play", playHandler); this.tech_.off("seeking", this.watchForBadSeeking_); this.tech_.off("seeked", this.clearSeekingAppendCheck_); loaderTypes.forEach((type2) => { pc[`${type2}SegmentLoader_`].off("appendsdone", loaderChecks[type2].updateend); pc[`${type2}SegmentLoader_`].off("playlistupdate", loaderChecks[type2].reset); this.tech_.off(["seeked", "seeking"], loaderChecks[type2].reset); }); if (this.checkCurrentTimeTimeout_) { window_1.clearTimeout(this.checkCurrentTimeTimeout_); } this.resetTimeUpdate_(); }; } monitorCurrentTime_() { this.checkCurrentTime_(); if (this.checkCurrentTimeTimeout_) { window_1.clearTimeout(this.checkCurrentTimeTimeout_); } this.checkCurrentTimeTimeout_ = window_1.setTimeout(this.monitorCurrentTime_.bind(this), 250); } resetSegmentDownloads_(type2) { const loader = this.playlistController_[`${type2}SegmentLoader_`]; if (this[`${type2}StalledDownloads_`] > 0) { this.logger_(`resetting possible stalled download count for ${type2} loader`); } this[`${type2}StalledDownloads_`] = 0; this[`${type2}Buffered_`] = loader.buffered_(); } checkSegmentDownloads_(type2) { const pc = this.playlistController_; const loader = pc[`${type2}SegmentLoader_`]; const buffered = loader.buffered_(); const isBufferedDifferent = isRangeDifferent$1(this[`${type2}Buffered_`], buffered); this[`${type2}Buffered_`] = buffered; if (isBufferedDifferent) { this.resetSegmentDownloads_(type2); return; } this[`${type2}StalledDownloads_`]++; this.logger_(`found #${this[`${type2}StalledDownloads_`]} ${type2} appends that did not increase buffer (possible stalled download)`, { playlistId: loader.playlist_ && loader.playlist_.id, buffered: timeRangesToArray$1(buffered) }); if (this[`${type2}StalledDownloads_`] < 10) { return; } this.logger_(`${type2} loader stalled download exclusion`); this.resetSegmentDownloads_(type2); this.tech_.trigger({ type: "usage", name: `vhs-${type2}-download-exclusion` }); if (type2 === "subtitle") { return; } pc.excludePlaylist({ error: { message: `Excessive ${type2} segment downloading detected.` }, playlistExclusionDuration: Infinity }); } checkCurrentTime_() { if (this.tech_.paused() || this.tech_.seeking()) { return; } const currentTime = this.tech_.currentTime(); const buffered = this.tech_.buffered(); if (this.lastRecordedTime === currentTime && (!buffered.length || currentTime + SAFE_TIME_DELTA$1 >= buffered.end(buffered.length - 1))) { return this.techWaiting_(); } if (this.consecutiveUpdates >= 5 && currentTime === this.lastRecordedTime) { this.consecutiveUpdates++; this.waiting_(); } else if (currentTime === this.lastRecordedTime) { this.consecutiveUpdates++; } else { this.consecutiveUpdates = 0; this.lastRecordedTime = currentTime; } } resetTimeUpdate_() { this.consecutiveUpdates = 0; } fixesBadSeeks_() { const seeking = this.tech_.seeking(); if (!seeking) { return false; } const seekable3 = this.seekable(); const currentTime = this.tech_.currentTime(); const isAfterSeekableRange = this.afterSeekableWindow_(seekable3, currentTime, this.media(), this.allowSeeksWithinUnsafeLiveWindow); let seekTo; if (isAfterSeekableRange) { const seekableEnd = seekable3.end(seekable3.length - 1); seekTo = seekableEnd; } if (this.beforeSeekableWindow_(seekable3, currentTime)) { const seekableStart = seekable3.start(0); seekTo = seekableStart + (seekableStart === seekable3.end(0) ? 0 : SAFE_TIME_DELTA$1); } if (typeof seekTo !== "undefined") { this.logger_(`Trying to seek outside of seekable at time ${currentTime} with seekable range ${printableRange$1(seekable3)}. Seeking to ${seekTo}.`); this.tech_.setCurrentTime(seekTo); return true; } const sourceUpdater = this.playlistController_.sourceUpdater_; const buffered = this.tech_.buffered(); const audioBuffered = sourceUpdater.audioBuffer ? sourceUpdater.audioBuffered() : null; const videoBuffered = sourceUpdater.videoBuffer ? sourceUpdater.videoBuffered() : null; const media = this.media(); const minAppendedDuration = media.partTargetDuration ? media.partTargetDuration : (media.targetDuration - TIME_FUDGE_FACTOR$1) * 2; const bufferedToCheck = [audioBuffered, videoBuffered]; for (let i2 = 0; i2 < bufferedToCheck.length; i2++) { if (!bufferedToCheck[i2]) { continue; } const timeAhead = timeAheadOf$1(bufferedToCheck[i2], currentTime); if (timeAhead < minAppendedDuration) { return false; } } const nextRange = findNextRange$1(buffered, currentTime); if (nextRange.length === 0) { return false; } seekTo = nextRange.start(0) + SAFE_TIME_DELTA$1; this.logger_(`Buffered region starts (${nextRange.start(0)}) just beyond seek point (${currentTime}). Seeking to ${seekTo}.`); this.tech_.setCurrentTime(seekTo); return true; } waiting_() { if (this.techWaiting_()) { return; } const currentTime = this.tech_.currentTime(); const buffered = this.tech_.buffered(); const currentRange = findRange$1(buffered, currentTime); if (currentRange.length && currentTime + 3 <= currentRange.end(0)) { this.resetTimeUpdate_(); this.tech_.setCurrentTime(currentTime); this.logger_(`Stopped at ${currentTime} while inside a buffered region [${currentRange.start(0)} -> ${currentRange.end(0)}]. Attempting to resume playback by seeking to the current time.`); this.tech_.trigger({ type: "usage", name: "vhs-unknown-waiting" }); return; } } techWaiting_() { const seekable3 = this.seekable(); const currentTime = this.tech_.currentTime(); if (this.tech_.seeking()) { return true; } if (this.beforeSeekableWindow_(seekable3, currentTime)) { const livePoint = seekable3.end(seekable3.length - 1); this.logger_(`Fell out of live window at time ${currentTime}. Seeking to live point (seekable end) ${livePoint}`); this.resetTimeUpdate_(); this.tech_.setCurrentTime(livePoint); this.tech_.trigger({ type: "usage", name: "vhs-live-resync" }); return true; } const sourceUpdater = this.tech_.vhs.playlistController_.sourceUpdater_; const buffered = this.tech_.buffered(); const videoUnderflow = this.videoUnderflow_({ audioBuffered: sourceUpdater.audioBuffered(), videoBuffered: sourceUpdater.videoBuffered(), currentTime }); if (videoUnderflow) { this.resetTimeUpdate_(); this.tech_.setCurrentTime(currentTime); this.tech_.trigger({ type: "usage", name: "vhs-video-underflow" }); return true; } const nextRange = findNextRange$1(buffered, currentTime); if (nextRange.length > 0) { this.logger_(`Stopped at ${currentTime} and seeking to ${nextRange.start(0)}`); this.resetTimeUpdate_(); this.skipTheGap_(currentTime); return true; } return false; } afterSeekableWindow_(seekable3, currentTime, playlist, allowSeeksWithinUnsafeLiveWindow = false) { if (!seekable3.length) { return false; } let allowedEnd = seekable3.end(seekable3.length - 1) + SAFE_TIME_DELTA$1; const isLive = !playlist.endList; if (isLive && allowSeeksWithinUnsafeLiveWindow) { allowedEnd = seekable3.end(seekable3.length - 1) + playlist.targetDuration * 3; } if (currentTime > allowedEnd) { return true; } return false; } beforeSeekableWindow_(seekable3, currentTime) { if (seekable3.length && seekable3.start(0) > 0 && currentTime < seekable3.start(0) - this.liveRangeSafeTimeDelta) { return true; } return false; } videoUnderflow_({ videoBuffered, audioBuffered, currentTime }) { if (!videoBuffered) { return; } let gap; if (videoBuffered.length && audioBuffered.length) { const lastVideoRange = findRange$1(videoBuffered, currentTime - 3); const videoRange = findRange$1(videoBuffered, currentTime); const audioRange = findRange$1(audioBuffered, currentTime); if (audioRange.length && !videoRange.length && lastVideoRange.length) { gap = { start: lastVideoRange.end(0), end: audioRange.end(0) }; } } else { const nextRange = findNextRange$1(videoBuffered, currentTime); if (!nextRange.length) { gap = this.gapFromVideoUnderflow_(videoBuffered, currentTime); } } if (gap) { this.logger_(`Encountered a gap in video from ${gap.start} to ${gap.end}. Seeking to current time ${currentTime}`); return true; } return false; } skipTheGap_(scheduledCurrentTime) { const buffered = this.tech_.buffered(); const currentTime = this.tech_.currentTime(); const nextRange = findNextRange$1(buffered, currentTime); this.resetTimeUpdate_(); if (nextRange.length === 0 || currentTime !== scheduledCurrentTime) { return; } this.logger_("skipTheGap_:", "currentTime:", currentTime, "scheduled currentTime:", scheduledCurrentTime, "nextRange start:", nextRange.start(0)); this.tech_.setCurrentTime(nextRange.start(0) + TIME_FUDGE_FACTOR$1); this.tech_.trigger({ type: "usage", name: "vhs-gap-skip" }); } gapFromVideoUnderflow_(buffered, currentTime) { const gaps = findGaps$1(buffered); for (let i2 = 0; i2 < gaps.length; i2++) { const start2 = gaps.start(i2); const end = gaps.end(i2); if (currentTime - start2 < 4 && currentTime - start2 > 2) { return { start: start2, end }; } } return null; } } const defaultOptions$1 = { errorInterval: 30, getSource(next) { const tech = this.tech({ IWillNotUseThisInPlugins: true }); const sourceObj = tech.currentSource_ || this.currentSource(); return next(sourceObj); } }; const initPlugin$2 = function(player, options2) { let lastCalled = 0; let seekTo = 0; const localOptions = merge$2(defaultOptions$1, options2); player.ready(() => { player.trigger({ type: "usage", name: "vhs-error-reload-initialized" }); }); const loadedMetadataHandler = function() { if (seekTo) { player.currentTime(seekTo); } }; const setSource2 = function(sourceObj) { if (sourceObj === null || sourceObj === void 0) { return; } seekTo = player.duration() !== Infinity && player.currentTime() || 0; player.one("loadedmetadata", loadedMetadataHandler); player.src(sourceObj); player.trigger({ type: "usage", name: "vhs-error-reload" }); player.play(); }; const errorHandler = function() { if (Date.now() - lastCalled < localOptions.errorInterval * 1e3) { player.trigger({ type: "usage", name: "vhs-error-reload-canceled" }); return; } if (!localOptions.getSource || typeof localOptions.getSource !== "function") { videojs$2.log.error("ERROR: reloadSourceOnError - The option getSource must be a function!"); return; } lastCalled = Date.now(); return localOptions.getSource.call(player, setSource2); }; const cleanupEvents = function() { player.off("loadedmetadata", loadedMetadataHandler); player.off("error", errorHandler); player.off("dispose", cleanupEvents); }; const reinitPlugin = function(newOptions) { cleanupEvents(); initPlugin$2(player, newOptions); }; player.on("error", errorHandler); player.on("dispose", cleanupEvents); player.reloadSourceOnError = reinitPlugin; }; const reloadSourceOnError$1 = function(options2) { initPlugin$2(this, options2); }; var version$4$1 = "3.0.2"; var version$3$1 = "6.3.0"; var version$2$1 = "1.0.1"; var version$1$2 = "6.0.0"; var version$7 = "4.0.1"; const Vhs$2 = { PlaylistLoader: PlaylistLoader$1, Playlist: Playlist$1, utils: utils$1, STANDARD_PLAYLIST_SELECTOR: lastBandwidthSelector$1, INITIAL_PLAYLIST_SELECTOR: lowestBitrateCompatibleVariantSelector$1, lastBandwidthSelector: lastBandwidthSelector$1, movingAverageBandwidthSelector: movingAverageBandwidthSelector$1, comparePlaylistBandwidth: comparePlaylistBandwidth$1, comparePlaylistResolution: comparePlaylistResolution$1, xhr: xhrFactory$1() }; Object.keys(Config$1).forEach((prop) => { Object.defineProperty(Vhs$2, prop, { get() { videojs$2.log.warn(`using Vhs.${prop} is UNSAFE be sure you know what you are doing`); return Config$1[prop]; }, set(value) { videojs$2.log.warn(`using Vhs.${prop} is UNSAFE be sure you know what you are doing`); if (typeof value !== "number" || value < 0) { videojs$2.log.warn(`value of Vhs.${prop} must be greater than or equal to 0`); return; } Config$1[prop] = value; } }); }); const LOCAL_STORAGE_KEY$2 = "videojs-vhs"; const handleVhsMediaChange$1 = function(qualityLevels2, playlistLoader) { const newPlaylist = playlistLoader.media(); let selectedIndex = -1; for (let i2 = 0; i2 < qualityLevels2.length; i2++) { if (qualityLevels2[i2].id === newPlaylist.id) { selectedIndex = i2; break; } } qualityLevels2.selectedIndex_ = selectedIndex; qualityLevels2.trigger({ selectedIndex, type: "change" }); }; const handleVhsLoadedMetadata$1 = function(qualityLevels2, vhs) { vhs.representations().forEach((rep2) => { qualityLevels2.addQualityLevel(rep2); }); handleVhsMediaChange$1(qualityLevels2, vhs.playlists); }; Vhs$2.canPlaySource = function() { return videojs$2.log.warn("VHS is no longer a tech. Please remove it from your player's techOrder."); }; const emeKeySystems$1 = (keySystemOptions, mainPlaylist, audioPlaylist) => { if (!keySystemOptions) { return keySystemOptions; } let codecs = {}; if (mainPlaylist && mainPlaylist.attributes && mainPlaylist.attributes.CODECS) { codecs = unwrapCodecList$1(parseCodecs$1(mainPlaylist.attributes.CODECS)); } if (audioPlaylist && audioPlaylist.attributes && audioPlaylist.attributes.CODECS) { codecs.audio = audioPlaylist.attributes.CODECS; } const videoContentType = getMimeForCodec$1(codecs.video); const audioContentType = getMimeForCodec$1(codecs.audio); const keySystemContentTypes = {}; for (const keySystem in keySystemOptions) { keySystemContentTypes[keySystem] = {}; if (audioContentType) { keySystemContentTypes[keySystem].audioContentType = audioContentType; } if (videoContentType) { keySystemContentTypes[keySystem].videoContentType = videoContentType; } if (mainPlaylist.contentProtection && mainPlaylist.contentProtection[keySystem] && mainPlaylist.contentProtection[keySystem].pssh) { keySystemContentTypes[keySystem].pssh = mainPlaylist.contentProtection[keySystem].pssh; } if (typeof keySystemOptions[keySystem] === "string") { keySystemContentTypes[keySystem].url = keySystemOptions[keySystem]; } } return merge$2(keySystemOptions, keySystemContentTypes); }; const getAllPsshKeySystemsOptions$1 = (playlists, keySystems) => { return playlists.reduce((keySystemsArr, playlist) => { if (!playlist.contentProtection) { return keySystemsArr; } const keySystemsOptions = keySystems.reduce((keySystemsObj, keySystem) => { const keySystemOptions = playlist.contentProtection[keySystem]; if (keySystemOptions && keySystemOptions.pssh) { keySystemsObj[keySystem] = { pssh: keySystemOptions.pssh }; } return keySystemsObj; }, {}); if (Object.keys(keySystemsOptions).length) { keySystemsArr.push(keySystemsOptions); } return keySystemsArr; }, []); }; const waitForKeySessionCreation$1 = ({ player, sourceKeySystems, audioMedia, mainPlaylists }) => { if (!player.eme.initializeMediaKeys) { return Promise.resolve(); } const playlists = audioMedia ? mainPlaylists.concat([audioMedia]) : mainPlaylists; const keySystemsOptionsArr = getAllPsshKeySystemsOptions$1(playlists, Object.keys(sourceKeySystems)); const initializationFinishedPromises = []; const keySessionCreatedPromises = []; keySystemsOptionsArr.forEach((keySystemsOptions) => { keySessionCreatedPromises.push(new Promise((resolve2, reject2) => { player.tech_.one("keysessioncreated", resolve2); })); initializationFinishedPromises.push(new Promise((resolve2, reject2) => { player.eme.initializeMediaKeys({ keySystems: keySystemsOptions }, (err) => { if (err) { reject2(err); return; } resolve2(); }); })); }); return Promise.race([ Promise.all(initializationFinishedPromises), Promise.race(keySessionCreatedPromises) ]); }; const setupEmeOptions$1 = ({ player, sourceKeySystems, media, audioMedia }) => { const sourceOptions = emeKeySystems$1(sourceKeySystems, media, audioMedia); if (!sourceOptions) { return false; } player.currentSource().keySystems = sourceOptions; if (sourceOptions && !player.eme) { videojs$2.log.warn("DRM encrypted source cannot be decrypted without a DRM plugin"); return false; } return true; }; const getVhsLocalStorage$1 = () => { if (!window_1.localStorage) { return null; } const storedObject = window_1.localStorage.getItem(LOCAL_STORAGE_KEY$2); if (!storedObject) { return null; } try { return JSON.parse(storedObject); } catch (e) { return null; } }; const updateVhsLocalStorage$1 = (options2) => { if (!window_1.localStorage) { return false; } let objectToStore = getVhsLocalStorage$1(); objectToStore = objectToStore ? merge$2(objectToStore, options2) : options2; try { window_1.localStorage.setItem(LOCAL_STORAGE_KEY$2, JSON.stringify(objectToStore)); } catch (e) { return false; } return objectToStore; }; const expandDataUri$1 = (dataUri) => { if (dataUri.toLowerCase().indexOf("data:application/vnd.videojs.vhs+json,") === 0) { return JSON.parse(dataUri.substring(dataUri.indexOf(",") + 1)); } return dataUri; }; Vhs$2.supportsNativeHls = function() { if (!document_1 || !document_1.createElement) { return false; } const video = document_1.createElement("video"); if (!videojs$2.getTech("Html5").isSupported()) { return false; } const canPlay = [ "application/vnd.apple.mpegurl", "audio/mpegurl", "audio/x-mpegurl", "application/x-mpegurl", "video/x-mpegurl", "video/mpegurl", "application/mpegurl" ]; return canPlay.some(function(canItPlay) { return /maybe|probably/i.test(video.canPlayType(canItPlay)); }); }(); Vhs$2.supportsNativeDash = function() { if (!document_1 || !document_1.createElement || !videojs$2.getTech("Html5").isSupported()) { return false; } return /maybe|probably/i.test(document_1.createElement("video").canPlayType("application/dash+xml")); }(); Vhs$2.supportsTypeNatively = (type2) => { if (type2 === "hls") { return Vhs$2.supportsNativeHls; } if (type2 === "dash") { return Vhs$2.supportsNativeDash; } return false; }; Vhs$2.isSupported = function() { return videojs$2.log.warn("VHS is no longer a tech. Please remove it from your player's techOrder."); }; const Component$2 = videojs$2.getComponent("Component"); class VhsHandler$1 extends Component$2 { constructor(source, tech, options2) { super(tech, options2.vhs); if (typeof options2.initialBandwidth === "number") { this.options_.bandwidth = options2.initialBandwidth; } this.logger_ = logger$1("VhsHandler"); if (tech.options_ && tech.options_.playerId) { const _player = videojs$2.getPlayer(tech.options_.playerId); this.player_ = _player; } this.tech_ = tech; this.source_ = source; this.stats = {}; this.ignoreNextSeekingEvent_ = false; this.setOptions_(); if (this.options_.overrideNative && tech.overrideNativeAudioTracks && tech.overrideNativeVideoTracks) { tech.overrideNativeAudioTracks(true); tech.overrideNativeVideoTracks(true); } else if (this.options_.overrideNative && (tech.featuresNativeVideoTracks || tech.featuresNativeAudioTracks)) { throw new Error("Overriding native VHS requires emulated tracks. See https://git.io/vMpjB"); } this.on(document_1, ["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange", "MSFullscreenChange"], (event2) => { const fullscreenElement = document_1.fullscreenElement || document_1.webkitFullscreenElement || document_1.mozFullScreenElement || document_1.msFullscreenElement; if (fullscreenElement && fullscreenElement.contains(this.tech_.el())) { this.playlistController_.fastQualityChange_(); } else { this.playlistController_.checkABR_(); } }); this.on(this.tech_, "seeking", function() { if (this.ignoreNextSeekingEvent_) { this.ignoreNextSeekingEvent_ = false; return; } this.setCurrentTime(this.tech_.currentTime()); }); this.on(this.tech_, "error", function() { if (this.tech_.error() && this.playlistController_) { this.playlistController_.pauseLoading(); } }); this.on(this.tech_, "play", this.play); } setOptions_() { this.options_.withCredentials = this.options_.withCredentials || false; this.options_.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions === false ? false : true; this.options_.useDevicePixelRatio = this.options_.useDevicePixelRatio || false; this.options_.useBandwidthFromLocalStorage = typeof this.source_.useBandwidthFromLocalStorage !== "undefined" ? this.source_.useBandwidthFromLocalStorage : this.options_.useBandwidthFromLocalStorage || false; this.options_.useNetworkInformationApi = this.options_.useNetworkInformationApi || false; this.options_.useDtsForTimestampOffset = this.options_.useDtsForTimestampOffset || false; this.options_.customTagParsers = this.options_.customTagParsers || []; this.options_.customTagMappers = this.options_.customTagMappers || []; this.options_.cacheEncryptionKeys = this.options_.cacheEncryptionKeys || false; this.options_.llhls = this.options_.llhls === false ? false : true; this.options_.bufferBasedABR = this.options_.bufferBasedABR || false; if (typeof this.options_.playlistExclusionDuration !== "number") { this.options_.playlistExclusionDuration = 5 * 60; } if (typeof this.options_.bandwidth !== "number") { if (this.options_.useBandwidthFromLocalStorage) { const storedObject = getVhsLocalStorage$1(); if (storedObject && storedObject.bandwidth) { this.options_.bandwidth = storedObject.bandwidth; this.tech_.trigger({ type: "usage", name: "vhs-bandwidth-from-local-storage" }); } if (storedObject && storedObject.throughput) { this.options_.throughput = storedObject.throughput; this.tech_.trigger({ type: "usage", name: "vhs-throughput-from-local-storage" }); } } } if (typeof this.options_.bandwidth !== "number") { this.options_.bandwidth = Config$1.INITIAL_BANDWIDTH; } this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === Config$1.INITIAL_BANDWIDTH; ["withCredentials", "useDevicePixelRatio", "limitRenditionByPlayerDimensions", "bandwidth", "customTagParsers", "customTagMappers", "cacheEncryptionKeys", "playlistSelector", "initialPlaylistSelector", "bufferBasedABR", "liveRangeSafeTimeDelta", "llhls", "useNetworkInformationApi", "useDtsForTimestampOffset", "exactManifestTimings", "leastPixelDiffSelector"].forEach((option) => { if (typeof this.source_[option] !== "undefined") { this.options_[option] = this.source_[option]; } }); this.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions; this.useDevicePixelRatio = this.options_.useDevicePixelRatio; } src(src, type2) { if (!src) { return; } this.setOptions_(); this.options_.src = expandDataUri$1(this.source_.src); this.options_.tech = this.tech_; this.options_.externVhs = Vhs$2; this.options_.sourceType = simpleTypeFromSourceType$1(type2); this.options_.seekTo = (time) => { this.tech_.setCurrentTime(time); }; this.playlistController_ = new PlaylistController(this.options_); const playbackWatcherOptions = merge$2({ liveRangeSafeTimeDelta: SAFE_TIME_DELTA$1 }, this.options_, { seekable: () => this.seekable(), media: () => this.playlistController_.media(), playlistController: this.playlistController_ }); this.playbackWatcher_ = new PlaybackWatcher$1(playbackWatcherOptions); this.playlistController_.on("error", () => { const player = videojs$2.players[this.tech_.options_.playerId]; let error = this.playlistController_.error; if (typeof error === "object" && !error.code) { error.code = 3; } else if (typeof error === "string") { error = { message: error, code: 3 }; } player.error(error); }); const defaultSelector = this.options_.bufferBasedABR ? Vhs$2.movingAverageBandwidthSelector(0.55) : Vhs$2.STANDARD_PLAYLIST_SELECTOR; this.playlistController_.selectPlaylist = this.selectPlaylist ? this.selectPlaylist.bind(this) : defaultSelector.bind(this); this.playlistController_.selectInitialPlaylist = Vhs$2.INITIAL_PLAYLIST_SELECTOR.bind(this); this.playlists = this.playlistController_.mainPlaylistLoader_; this.mediaSource = this.playlistController_.mediaSource; Object.defineProperties(this, { selectPlaylist: { get() { return this.playlistController_.selectPlaylist; }, set(selectPlaylist) { this.playlistController_.selectPlaylist = selectPlaylist.bind(this); } }, throughput: { get() { return this.playlistController_.mainSegmentLoader_.throughput.rate; }, set(throughput) { this.playlistController_.mainSegmentLoader_.throughput.rate = throughput; this.playlistController_.mainSegmentLoader_.throughput.count = 1; } }, bandwidth: { get() { let playerBandwidthEst = this.playlistController_.mainSegmentLoader_.bandwidth; const networkInformation = window_1.navigator.connection || window_1.navigator.mozConnection || window_1.navigator.webkitConnection; const tenMbpsAsBitsPerSecond = 1e7; if (this.options_.useNetworkInformationApi && networkInformation) { const networkInfoBandwidthEstBitsPerSec = networkInformation.downlink * 1e3 * 1e3; if (networkInfoBandwidthEstBitsPerSec >= tenMbpsAsBitsPerSecond && playerBandwidthEst >= tenMbpsAsBitsPerSecond) { playerBandwidthEst = Math.max(playerBandwidthEst, networkInfoBandwidthEstBitsPerSec); } else { playerBandwidthEst = networkInfoBandwidthEstBitsPerSec; } } return playerBandwidthEst; }, set(bandwidth2) { this.playlistController_.mainSegmentLoader_.bandwidth = bandwidth2; this.playlistController_.mainSegmentLoader_.throughput = { rate: 0, count: 0 }; } }, systemBandwidth: { get() { const invBandwidth = 1 / (this.bandwidth || 1); let invThroughput; if (this.throughput > 0) { invThroughput = 1 / this.throughput; } else { invThroughput = 0; } const systemBitrate = Math.floor(1 / (invBandwidth + invThroughput)); return systemBitrate; }, set() { videojs$2.log.error('The "systemBandwidth" property is read-only'); } } }); if (this.options_.bandwidth) { this.bandwidth = this.options_.bandwidth; } if (this.options_.throughput) { this.throughput = this.options_.throughput; } Object.defineProperties(this.stats, { bandwidth: { get: () => this.bandwidth || 0, enumerable: true }, mediaRequests: { get: () => this.playlistController_.mediaRequests_() || 0, enumerable: true }, mediaRequestsAborted: { get: () => this.playlistController_.mediaRequestsAborted_() || 0, enumerable: true }, mediaRequestsTimedout: { get: () => this.playlistController_.mediaRequestsTimedout_() || 0, enumerable: true }, mediaRequestsErrored: { get: () => this.playlistController_.mediaRequestsErrored_() || 0, enumerable: true }, mediaTransferDuration: { get: () => this.playlistController_.mediaTransferDuration_() || 0, enumerable: true }, mediaBytesTransferred: { get: () => this.playlistController_.mediaBytesTransferred_() || 0, enumerable: true }, mediaSecondsLoaded: { get: () => this.playlistController_.mediaSecondsLoaded_() || 0, enumerable: true }, mediaAppends: { get: () => this.playlistController_.mediaAppends_() || 0, enumerable: true }, mainAppendsToLoadedData: { get: () => this.playlistController_.mainAppendsToLoadedData_() || 0, enumerable: true }, audioAppendsToLoadedData: { get: () => this.playlistController_.audioAppendsToLoadedData_() || 0, enumerable: true }, appendsToLoadedData: { get: () => this.playlistController_.appendsToLoadedData_() || 0, enumerable: true }, timeToLoadedData: { get: () => this.playlistController_.timeToLoadedData_() || 0, enumerable: true }, buffered: { get: () => timeRangesToArray$1(this.tech_.buffered()), enumerable: true }, currentTime: { get: () => this.tech_.currentTime(), enumerable: true }, currentSource: { get: () => this.tech_.currentSource_, enumerable: true }, currentTech: { get: () => this.tech_.name_, enumerable: true }, duration: { get: () => this.tech_.duration(), enumerable: true }, main: { get: () => this.playlists.main, enumerable: true }, playerDimensions: { get: () => this.tech_.currentDimensions(), enumerable: true }, seekable: { get: () => timeRangesToArray$1(this.tech_.seekable()), enumerable: true }, timestamp: { get: () => Date.now(), enumerable: true }, videoPlaybackQuality: { get: () => this.tech_.getVideoPlaybackQuality(), enumerable: true } }); this.tech_.one("canplay", this.playlistController_.setupFirstPlay.bind(this.playlistController_)); this.tech_.on("bandwidthupdate", () => { if (this.options_.useBandwidthFromLocalStorage) { updateVhsLocalStorage$1({ bandwidth: this.bandwidth, throughput: Math.round(this.throughput) }); } }); this.playlistController_.on("selectedinitialmedia", () => { renditionSelectionMixin$1(this); }); this.playlistController_.sourceUpdater_.on("createdsourcebuffers", () => { this.setupEme_(); }); this.on(this.playlistController_, "progress", function() { this.tech_.trigger("progress"); }); this.on(this.playlistController_, "firstplay", function() { this.ignoreNextSeekingEvent_ = true; }); this.setupQualityLevels_(); if (!this.tech_.el()) { return; } this.mediaSourceUrl_ = window_1.URL.createObjectURL(this.playlistController_.mediaSource); this.tech_.src(this.mediaSourceUrl_); } createKeySessions_() { const audioPlaylistLoader = this.playlistController_.mediaTypes_.AUDIO.activePlaylistLoader; this.logger_("waiting for EME key session creation"); waitForKeySessionCreation$1({ player: this.player_, sourceKeySystems: this.source_.keySystems, audioMedia: audioPlaylistLoader && audioPlaylistLoader.media(), mainPlaylists: this.playlists.main.playlists }).then(() => { this.logger_("created EME key session"); this.playlistController_.sourceUpdater_.initializedEme(); }).catch((err) => { this.logger_("error while creating EME key session", err); this.player_.error({ message: "Failed to initialize media keys for EME", code: 3 }); }); } handleWaitingForKey_() { this.logger_("waitingforkey fired, attempting to create any new key sessions"); this.createKeySessions_(); } setupEme_() { const audioPlaylistLoader = this.playlistController_.mediaTypes_.AUDIO.activePlaylistLoader; const didSetupEmeOptions = setupEmeOptions$1({ player: this.player_, sourceKeySystems: this.source_.keySystems, media: this.playlists.media(), audioMedia: audioPlaylistLoader && audioPlaylistLoader.media() }); this.player_.tech_.on("keystatuschange", (e) => { if (e.status !== "output-restricted") { return; } const mainPlaylist = this.playlistController_.main(); if (!mainPlaylist || !mainPlaylist.playlists) { return; } const excludedHDPlaylists = []; mainPlaylist.playlists.forEach((playlist) => { if (playlist && playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height >= 720) { if (!playlist.excludeUntil || playlist.excludeUntil < Infinity) { playlist.excludeUntil = Infinity; excludedHDPlaylists.push(playlist); } } }); if (excludedHDPlaylists.length) { videojs$2.log.warn('DRM keystatus changed to "output-restricted." Removing the following HD playlists that will most likely fail to play and clearing the buffer. This may be due to HDCP restrictions on the stream and the capabilities of the current device.', ...excludedHDPlaylists); this.playlistController_.fastQualityChange_(); } }); this.handleWaitingForKey_ = this.handleWaitingForKey_.bind(this); this.player_.tech_.on("waitingforkey", this.handleWaitingForKey_); if (videojs$2.browser.IE_VERSION === 11 || !didSetupEmeOptions) { this.playlistController_.sourceUpdater_.initializedEme(); return; } this.createKeySessions_(); } setupQualityLevels_() { const player = videojs$2.players[this.tech_.options_.playerId]; if (!player || !player.qualityLevels || this.qualityLevels_) { return; } this.qualityLevels_ = player.qualityLevels(); this.playlistController_.on("selectedinitialmedia", () => { handleVhsLoadedMetadata$1(this.qualityLevels_, this); }); this.playlists.on("mediachange", () => { handleVhsMediaChange$1(this.qualityLevels_, this.playlists); }); } static version() { return { "@videojs/http-streaming": version$4$1, "mux.js": version$3$1, "mpd-parser": version$2$1, "m3u8-parser": version$1$2, "aes-decrypter": version$7 }; } version() { return this.constructor.version(); } canChangeType() { return SourceUpdater$1.canChangeType(); } play() { this.playlistController_.play(); } setCurrentTime(currentTime) { this.playlistController_.setCurrentTime(currentTime); } duration() { return this.playlistController_.duration(); } seekable() { return this.playlistController_.seekable(); } dispose() { if (this.playbackWatcher_) { this.playbackWatcher_.dispose(); } if (this.playlistController_) { this.playlistController_.dispose(); } if (this.qualityLevels_) { this.qualityLevels_.dispose(); } if (this.tech_ && this.tech_.vhs) { delete this.tech_.vhs; } if (this.mediaSourceUrl_ && window_1.URL.revokeObjectURL) { window_1.URL.revokeObjectURL(this.mediaSourceUrl_); this.mediaSourceUrl_ = null; } if (this.tech_) { this.tech_.off("waitingforkey", this.handleWaitingForKey_); } super.dispose(); } convertToProgramTime(time, callback2) { return getProgramTime$1({ playlist: this.playlistController_.media(), time, callback: callback2 }); } seekToProgramTime(programTime, callback2, pauseAfterSeek = true, retryCount = 2) { return seekToProgramTime$1({ programTime, playlist: this.playlistController_.media(), retryCount, pauseAfterSeek, seekTo: this.options_.seekTo, tech: this.options_.tech, callback: callback2 }); } } const VhsSourceHandler$1 = { name: "videojs-http-streaming", VERSION: version$4$1, canHandleSource(srcObj, options2 = {}) { const localOptions = merge$2(videojs$2.options, options2); return VhsSourceHandler$1.canPlayType(srcObj.type, localOptions); }, handleSource(source, tech, options2 = {}) { const localOptions = merge$2(videojs$2.options, options2); tech.vhs = new VhsHandler$1(source, tech, localOptions); tech.vhs.xhr = xhrFactory$1(); tech.vhs.src(source.src, source.type); return tech.vhs; }, canPlayType(type2, options2) { const simpleType = simpleTypeFromSourceType$1(type2); if (!simpleType) { return ""; } const overrideNative = VhsSourceHandler$1.getOverrideNative(options2); const supportsTypeNatively = Vhs$2.supportsTypeNatively(simpleType); const canUseMsePlayback = !supportsTypeNatively || overrideNative; return canUseMsePlayback ? "maybe" : ""; }, getOverrideNative(options2 = {}) { const { vhs = {} } = options2; const defaultOverrideNative = !(videojs$2.browser.IS_ANY_SAFARI || videojs$2.browser.IS_IOS); const { overrideNative = defaultOverrideNative } = vhs; return overrideNative; } }; const supportsNativeMediaSources$1 = () => { return browserSupportsCodec$1("avc1.4d400d,mp4a.40.2"); }; if (supportsNativeMediaSources$1()) { videojs$2.getTech("Html5").registerSourceHandler(VhsSourceHandler$1, 0); } videojs$2.VhsHandler = VhsHandler$1; videojs$2.VhsSourceHandler = VhsSourceHandler$1; videojs$2.Vhs = Vhs$2; if (!videojs$2.use) { videojs$2.registerComponent("Vhs", Vhs$2); } videojs$2.options.vhs = videojs$2.options.vhs || {}; if (!videojs$2.getPlugin || !videojs$2.getPlugin("reloadSourceOnError")) { videojs$2.registerPlugin("reloadSourceOnError", reloadSourceOnError$1); } var videoJs = ""; function _assertThisInitialized(self2) { if (self2 === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self2; } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) { o2.__proto__ = p2; return o2; }; return _setPrototypeOf(o, p); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() { })); return true; } catch (e) { return false; } } function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct2(Parent2, args2, Class2) { var a = [null]; a.push.apply(a, args2); var Constructor = Function.bind.apply(Parent2, a); var instance = new Constructor(); if (Class2) _setPrototypeOf(instance, Class2.prototype); return instance; }; } return _construct.apply(null, arguments); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } var DEFAULT_LOCATION = "http://example.com"; var resolveUrl$1 = function resolveUrl3(baseUrl, relativeUrl) { if (/^[a-z]+:/i.test(relativeUrl)) { return relativeUrl; } if (/^data:/.test(baseUrl)) { baseUrl = window_1.location && window_1.location.href || ""; } var nativeURL = typeof window_1.URL === "function"; var protocolLess = /^\/\//.test(baseUrl); var removeLocation = !window_1.location && !/\/\//i.test(baseUrl); if (nativeURL) { baseUrl = new window_1.URL(baseUrl, window_1.location || DEFAULT_LOCATION); } else if (!/\/\//i.test(baseUrl)) { baseUrl = URLToolkit.buildAbsoluteURL(window_1.location && window_1.location.href || "", baseUrl); } if (nativeURL) { var newUrl = new URL(relativeUrl, baseUrl); if (removeLocation) { return newUrl.href.slice(DEFAULT_LOCATION.length); } else if (protocolLess) { return newUrl.href.slice(newUrl.protocol.length); } return newUrl.href; } return URLToolkit.buildAbsoluteURL(baseUrl, relativeUrl); }; var Stream = /* @__PURE__ */ function() { function Stream2() { this.listeners = {}; } var _proto = Stream2.prototype; _proto.on = function on3(type2, listener) { if (!this.listeners[type2]) { this.listeners[type2] = []; } this.listeners[type2].push(listener); }; _proto.off = function off2(type2, listener) { if (!this.listeners[type2]) { return false; } var index2 = this.listeners[type2].indexOf(listener); this.listeners[type2] = this.listeners[type2].slice(0); this.listeners[type2].splice(index2, 1); return index2 > -1; }; _proto.trigger = function trigger2(type2) { var callbacks = this.listeners[type2]; if (!callbacks) { return; } if (arguments.length === 2) { var length = callbacks.length; for (var i2 = 0; i2 < length; ++i2) { callbacks[i2].call(this, arguments[1]); } } else { var args = Array.prototype.slice.call(arguments, 1); var _length = callbacks.length; for (var _i = 0; _i < _length; ++_i) { callbacks[_i].apply(this, args); } } }; _proto.dispose = function dispose() { this.listeners = {}; }; _proto.pipe = function pipe(destination2) { this.on("data", function(data) { destination2.push(data); }); }; return Stream2; }(); var atob3 = function atob4(s) { return window_1.atob ? window_1.atob(s) : Buffer.from(s, "base64").toString("binary"); }; function decodeB64ToUint8Array(b64Text) { var decodedString = atob3(b64Text); var array = new Uint8Array(decodedString.length); for (var i2 = 0; i2 < decodedString.length; i2++) { array[i2] = decodedString.charCodeAt(i2); } return array; } /*! @name m3u8-parser @version 4.8.0 @license Apache-2.0 */ var LineStream = /* @__PURE__ */ function(_Stream) { _inheritsLoose(LineStream2, _Stream); function LineStream2() { var _this; _this = _Stream.call(this) || this; _this.buffer = ""; return _this; } var _proto = LineStream2.prototype; _proto.push = function push(data) { var nextNewline; this.buffer += data; nextNewline = this.buffer.indexOf("\n"); for (; nextNewline > -1; nextNewline = this.buffer.indexOf("\n")) { this.trigger("data", this.buffer.substring(0, nextNewline)); this.buffer = this.buffer.substring(nextNewline + 1); } }; return LineStream2; }(Stream); var TAB = String.fromCharCode(9); var parseByterange = function parseByterange2(byterangeString) { var match = /([0-9.]*)?@?([0-9.]*)?/.exec(byterangeString || ""); var result = {}; if (match[1]) { result.length = parseInt(match[1], 10); } if (match[2]) { result.offset = parseInt(match[2], 10); } return result; }; var attributeSeparator = function attributeSeparator2() { var key = "[^=]*"; var value = '"[^"]*"|[^,]*'; var keyvalue = "(?:" + key + ")=(?:" + value + ")"; return new RegExp("(?:^|,)(" + keyvalue + ")"); }; var parseAttributes$1 = function parseAttributes(attributes) { var attrs = attributes.split(attributeSeparator()); var result = {}; var i2 = attrs.length; var attr; while (i2--) { if (attrs[i2] === "") { continue; } attr = /([^=]*)=(.*)/.exec(attrs[i2]).slice(1); attr[0] = attr[0].replace(/^\s+|\s+$/g, ""); attr[1] = attr[1].replace(/^\s+|\s+$/g, ""); attr[1] = attr[1].replace(/^['"](.*)['"]$/g, "$1"); result[attr[0]] = attr[1]; } return result; }; var ParseStream = /* @__PURE__ */ function(_Stream) { _inheritsLoose(ParseStream2, _Stream); function ParseStream2() { var _this; _this = _Stream.call(this) || this; _this.customParsers = []; _this.tagMappers = []; return _this; } var _proto = ParseStream2.prototype; _proto.push = function push(line) { var _this2 = this; var match; var event2; line = line.trim(); if (line.length === 0) { return; } if (line[0] !== "#") { this.trigger("data", { type: "uri", uri: line }); return; } var newLines = this.tagMappers.reduce(function(acc, mapper) { var mappedLine = mapper(line); if (mappedLine === line) { return acc; } return acc.concat([mappedLine]); }, [line]); newLines.forEach(function(newLine) { for (var i2 = 0; i2 < _this2.customParsers.length; i2++) { if (_this2.customParsers[i2].call(_this2, newLine)) { return; } } if (newLine.indexOf("#EXT") !== 0) { _this2.trigger("data", { type: "comment", text: newLine.slice(1) }); return; } newLine = newLine.replace("\r", ""); match = /^#EXTM3U/.exec(newLine); if (match) { _this2.trigger("data", { type: "tag", tagType: "m3u" }); return; } match = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "inf" }; if (match[1]) { event2.duration = parseFloat(match[1]); } if (match[2]) { event2.title = match[2]; } _this2.trigger("data", event2); return; } match = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "targetduration" }; if (match[1]) { event2.duration = parseInt(match[1], 10); } _this2.trigger("data", event2); return; } match = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "version" }; if (match[1]) { event2.version = parseInt(match[1], 10); } _this2.trigger("data", event2); return; } match = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "media-sequence" }; if (match[1]) { event2.number = parseInt(match[1], 10); } _this2.trigger("data", event2); return; } match = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "discontinuity-sequence" }; if (match[1]) { event2.number = parseInt(match[1], 10); } _this2.trigger("data", event2); return; } match = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "playlist-type" }; if (match[1]) { event2.playlistType = match[1]; } _this2.trigger("data", event2); return; } match = /^#EXT-X-BYTERANGE:?(.*)?$/.exec(newLine); if (match) { event2 = _extends$2(parseByterange(match[1]), { type: "tag", tagType: "byterange" }); _this2.trigger("data", event2); return; } match = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "allow-cache" }; if (match[1]) { event2.allowed = !/NO/.test(match[1]); } _this2.trigger("data", event2); return; } match = /^#EXT-X-MAP:?(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "map" }; if (match[1]) { var attributes = parseAttributes$1(match[1]); if (attributes.URI) { event2.uri = attributes.URI; } if (attributes.BYTERANGE) { event2.byterange = parseByterange(attributes.BYTERANGE); } } _this2.trigger("data", event2); return; } match = /^#EXT-X-STREAM-INF:?(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "stream-inf" }; if (match[1]) { event2.attributes = parseAttributes$1(match[1]); if (event2.attributes.RESOLUTION) { var split2 = event2.attributes.RESOLUTION.split("x"); var resolution = {}; if (split2[0]) { resolution.width = parseInt(split2[0], 10); } if (split2[1]) { resolution.height = parseInt(split2[1], 10); } event2.attributes.RESOLUTION = resolution; } if (event2.attributes.BANDWIDTH) { event2.attributes.BANDWIDTH = parseInt(event2.attributes.BANDWIDTH, 10); } if (event2.attributes["FRAME-RATE"]) { event2.attributes["FRAME-RATE"] = parseFloat(event2.attributes["FRAME-RATE"]); } if (event2.attributes["PROGRAM-ID"]) { event2.attributes["PROGRAM-ID"] = parseInt(event2.attributes["PROGRAM-ID"], 10); } } _this2.trigger("data", event2); return; } match = /^#EXT-X-MEDIA:?(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "media" }; if (match[1]) { event2.attributes = parseAttributes$1(match[1]); } _this2.trigger("data", event2); return; } match = /^#EXT-X-ENDLIST/.exec(newLine); if (match) { _this2.trigger("data", { type: "tag", tagType: "endlist" }); return; } match = /^#EXT-X-DISCONTINUITY/.exec(newLine); if (match) { _this2.trigger("data", { type: "tag", tagType: "discontinuity" }); return; } match = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "program-date-time" }; if (match[1]) { event2.dateTimeString = match[1]; event2.dateTimeObject = new Date(match[1]); } _this2.trigger("data", event2); return; } match = /^#EXT-X-KEY:?(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "key" }; if (match[1]) { event2.attributes = parseAttributes$1(match[1]); if (event2.attributes.IV) { if (event2.attributes.IV.substring(0, 2).toLowerCase() === "0x") { event2.attributes.IV = event2.attributes.IV.substring(2); } event2.attributes.IV = event2.attributes.IV.match(/.{8}/g); event2.attributes.IV[0] = parseInt(event2.attributes.IV[0], 16); event2.attributes.IV[1] = parseInt(event2.attributes.IV[1], 16); event2.attributes.IV[2] = parseInt(event2.attributes.IV[2], 16); event2.attributes.IV[3] = parseInt(event2.attributes.IV[3], 16); event2.attributes.IV = new Uint32Array(event2.attributes.IV); } } _this2.trigger("data", event2); return; } match = /^#EXT-X-START:?(.*)$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "start" }; if (match[1]) { event2.attributes = parseAttributes$1(match[1]); event2.attributes["TIME-OFFSET"] = parseFloat(event2.attributes["TIME-OFFSET"]); event2.attributes.PRECISE = /YES/.test(event2.attributes.PRECISE); } _this2.trigger("data", event2); return; } match = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "cue-out-cont" }; if (match[1]) { event2.data = match[1]; } else { event2.data = ""; } _this2.trigger("data", event2); return; } match = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "cue-out" }; if (match[1]) { event2.data = match[1]; } else { event2.data = ""; } _this2.trigger("data", event2); return; } match = /^#EXT-X-CUE-IN:?(.*)?$/.exec(newLine); if (match) { event2 = { type: "tag", tagType: "cue-in" }; if (match[1]) { event2.data = match[1]; } else { event2.data = ""; } _this2.trigger("data", event2); return; } match = /^#EXT-X-SKIP:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "skip" }; event2.attributes = parseAttributes$1(match[1]); if (event2.attributes.hasOwnProperty("SKIPPED-SEGMENTS")) { event2.attributes["SKIPPED-SEGMENTS"] = parseInt(event2.attributes["SKIPPED-SEGMENTS"], 10); } if (event2.attributes.hasOwnProperty("RECENTLY-REMOVED-DATERANGES")) { event2.attributes["RECENTLY-REMOVED-DATERANGES"] = event2.attributes["RECENTLY-REMOVED-DATERANGES"].split(TAB); } _this2.trigger("data", event2); return; } match = /^#EXT-X-PART:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "part" }; event2.attributes = parseAttributes$1(match[1]); ["DURATION"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseFloat(event2.attributes[key]); } }); ["INDEPENDENT", "GAP"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = /YES/.test(event2.attributes[key]); } }); if (event2.attributes.hasOwnProperty("BYTERANGE")) { event2.attributes.byterange = parseByterange(event2.attributes.BYTERANGE); } _this2.trigger("data", event2); return; } match = /^#EXT-X-SERVER-CONTROL:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "server-control" }; event2.attributes = parseAttributes$1(match[1]); ["CAN-SKIP-UNTIL", "PART-HOLD-BACK", "HOLD-BACK"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseFloat(event2.attributes[key]); } }); ["CAN-SKIP-DATERANGES", "CAN-BLOCK-RELOAD"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = /YES/.test(event2.attributes[key]); } }); _this2.trigger("data", event2); return; } match = /^#EXT-X-PART-INF:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "part-inf" }; event2.attributes = parseAttributes$1(match[1]); ["PART-TARGET"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseFloat(event2.attributes[key]); } }); _this2.trigger("data", event2); return; } match = /^#EXT-X-PRELOAD-HINT:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "preload-hint" }; event2.attributes = parseAttributes$1(match[1]); ["BYTERANGE-START", "BYTERANGE-LENGTH"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseInt(event2.attributes[key], 10); var subkey = key === "BYTERANGE-LENGTH" ? "length" : "offset"; event2.attributes.byterange = event2.attributes.byterange || {}; event2.attributes.byterange[subkey] = event2.attributes[key]; delete event2.attributes[key]; } }); _this2.trigger("data", event2); return; } match = /^#EXT-X-RENDITION-REPORT:(.*)$/.exec(newLine); if (match && match[1]) { event2 = { type: "tag", tagType: "rendition-report" }; event2.attributes = parseAttributes$1(match[1]); ["LAST-MSN", "LAST-PART"].forEach(function(key) { if (event2.attributes.hasOwnProperty(key)) { event2.attributes[key] = parseInt(event2.attributes[key], 10); } }); _this2.trigger("data", event2); return; } _this2.trigger("data", { type: "tag", data: newLine.slice(4) }); }); }; _proto.addParser = function addParser(_ref) { var _this3 = this; var expression = _ref.expression, customType = _ref.customType, dataParser = _ref.dataParser, segment = _ref.segment; if (typeof dataParser !== "function") { dataParser = function dataParser2(line) { return line; }; } this.customParsers.push(function(line) { var match = expression.exec(line); if (match) { _this3.trigger("data", { type: "custom", data: dataParser(line), customType, segment }); return true; } }); }; _proto.addTagMapper = function addTagMapper(_ref2) { var expression = _ref2.expression, map = _ref2.map; var mapFn = function mapFn2(line) { if (expression.test(line)) { return map(line); } return line; }; this.tagMappers.push(mapFn); }; return ParseStream2; }(Stream); var camelCase = function camelCase2(str) { return str.toLowerCase().replace(/-(\w)/g, function(a) { return a[1].toUpperCase(); }); }; var camelCaseKeys = function camelCaseKeys2(attributes) { var result = {}; Object.keys(attributes).forEach(function(key) { result[camelCase(key)] = attributes[key]; }); return result; }; var setHoldBack = function setHoldBack2(manifest) { var serverControl = manifest.serverControl, targetDuration = manifest.targetDuration, partTargetDuration = manifest.partTargetDuration; if (!serverControl) { return; } var tag = "#EXT-X-SERVER-CONTROL"; var hb = "holdBack"; var phb = "partHoldBack"; var minTargetDuration = targetDuration && targetDuration * 3; var minPartDuration = partTargetDuration && partTargetDuration * 2; if (targetDuration && !serverControl.hasOwnProperty(hb)) { serverControl[hb] = minTargetDuration; this.trigger("info", { message: tag + " defaulting HOLD-BACK to targetDuration * 3 (" + minTargetDuration + ")." }); } if (minTargetDuration && serverControl[hb] < minTargetDuration) { this.trigger("warn", { message: tag + " clamping HOLD-BACK (" + serverControl[hb] + ") to targetDuration * 3 (" + minTargetDuration + ")" }); serverControl[hb] = minTargetDuration; } if (partTargetDuration && !serverControl.hasOwnProperty(phb)) { serverControl[phb] = partTargetDuration * 3; this.trigger("info", { message: tag + " defaulting PART-HOLD-BACK to partTargetDuration * 3 (" + serverControl[phb] + ")." }); } if (partTargetDuration && serverControl[phb] < minPartDuration) { this.trigger("warn", { message: tag + " clamping PART-HOLD-BACK (" + serverControl[phb] + ") to partTargetDuration * 2 (" + minPartDuration + ")." }); serverControl[phb] = minPartDuration; } }; var Parser = /* @__PURE__ */ function(_Stream) { _inheritsLoose(Parser2, _Stream); function Parser2() { var _this; _this = _Stream.call(this) || this; _this.lineStream = new LineStream(); _this.parseStream = new ParseStream(); _this.lineStream.pipe(_this.parseStream); var self2 = _assertThisInitialized(_this); var uris = []; var currentUri = {}; var currentMap; var _key; var hasParts = false; var noop2 = function noop3() { }; var defaultMediaGroups = { "AUDIO": {}, "VIDEO": {}, "CLOSED-CAPTIONS": {}, "SUBTITLES": {} }; var widevineUuid = "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"; var currentTimeline = 0; _this.manifest = { allowCache: true, discontinuityStarts: [], segments: [] }; var lastByterangeEnd = 0; var lastPartByterangeEnd = 0; _this.on("end", function() { if (currentUri.uri || !currentUri.parts && !currentUri.preloadHints) { return; } if (!currentUri.map && currentMap) { currentUri.map = currentMap; } if (!currentUri.key && _key) { currentUri.key = _key; } if (!currentUri.timeline && typeof currentTimeline === "number") { currentUri.timeline = currentTimeline; } _this.manifest.preloadSegment = currentUri; }); _this.parseStream.on("data", function(entry) { var mediaGroup; var rendition; ({ tag: function tag() { ({ version: function version2() { if (entry.version) { this.manifest.version = entry.version; } }, "allow-cache": function allowCache() { this.manifest.allowCache = entry.allowed; if (!("allowed" in entry)) { this.trigger("info", { message: "defaulting allowCache to YES" }); this.manifest.allowCache = true; } }, byterange: function byterange() { var byterange2 = {}; if ("length" in entry) { currentUri.byterange = byterange2; byterange2.length = entry.length; if (!("offset" in entry)) { entry.offset = lastByterangeEnd; } } if ("offset" in entry) { currentUri.byterange = byterange2; byterange2.offset = entry.offset; } lastByterangeEnd = byterange2.offset + byterange2.length; }, endlist: function endlist() { this.manifest.endList = true; }, inf: function inf() { if (!("mediaSequence" in this.manifest)) { this.manifest.mediaSequence = 0; this.trigger("info", { message: "defaulting media sequence to zero" }); } if (!("discontinuitySequence" in this.manifest)) { this.manifest.discontinuitySequence = 0; this.trigger("info", { message: "defaulting discontinuity sequence to zero" }); } if (entry.duration > 0) { currentUri.duration = entry.duration; } if (entry.duration === 0) { currentUri.duration = 0.01; this.trigger("info", { message: "updating zero segment duration to a small value" }); } this.manifest.segments = uris; }, key: function key() { if (!entry.attributes) { this.trigger("warn", { message: "ignoring key declaration without attribute list" }); return; } if (entry.attributes.METHOD === "NONE") { _key = null; return; } if (!entry.attributes.URI) { this.trigger("warn", { message: "ignoring key declaration without URI" }); return; } if (entry.attributes.KEYFORMAT === "com.apple.streamingkeydelivery") { this.manifest.contentProtection = this.manifest.contentProtection || {}; this.manifest.contentProtection["com.apple.fps.1_0"] = { attributes: entry.attributes }; return; } if (entry.attributes.KEYFORMAT === "com.microsoft.playready") { this.manifest.contentProtection = this.manifest.contentProtection || {}; this.manifest.contentProtection["com.microsoft.playready"] = { uri: entry.attributes.URI }; return; } if (entry.attributes.KEYFORMAT === widevineUuid) { var VALID_METHODS = ["SAMPLE-AES", "SAMPLE-AES-CTR", "SAMPLE-AES-CENC"]; if (VALID_METHODS.indexOf(entry.attributes.METHOD) === -1) { this.trigger("warn", { message: "invalid key method provided for Widevine" }); return; } if (entry.attributes.METHOD === "SAMPLE-AES-CENC") { this.trigger("warn", { message: "SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead" }); } if (entry.attributes.URI.substring(0, 23) !== "data:text/plain;base64,") { this.trigger("warn", { message: "invalid key URI provided for Widevine" }); return; } if (!(entry.attributes.KEYID && entry.attributes.KEYID.substring(0, 2) === "0x")) { this.trigger("warn", { message: "invalid key ID provided for Widevine" }); return; } this.manifest.contentProtection = this.manifest.contentProtection || {}; this.manifest.contentProtection["com.widevine.alpha"] = { attributes: { schemeIdUri: entry.attributes.KEYFORMAT, keyId: entry.attributes.KEYID.substring(2) }, pssh: decodeB64ToUint8Array(entry.attributes.URI.split(",")[1]) }; return; } if (!entry.attributes.METHOD) { this.trigger("warn", { message: "defaulting key method to AES-128" }); } _key = { method: entry.attributes.METHOD || "AES-128", uri: entry.attributes.URI }; if (typeof entry.attributes.IV !== "undefined") { _key.iv = entry.attributes.IV; } }, "media-sequence": function mediaSequence() { if (!isFinite(entry.number)) { this.trigger("warn", { message: "ignoring invalid media sequence: " + entry.number }); return; } this.manifest.mediaSequence = entry.number; }, "discontinuity-sequence": function discontinuitySequence() { if (!isFinite(entry.number)) { this.trigger("warn", { message: "ignoring invalid discontinuity sequence: " + entry.number }); return; } this.manifest.discontinuitySequence = entry.number; currentTimeline = entry.number; }, "playlist-type": function playlistType() { if (!/VOD|EVENT/.test(entry.playlistType)) { this.trigger("warn", { message: "ignoring unknown playlist type: " + entry.playlist }); return; } this.manifest.playlistType = entry.playlistType; }, map: function map() { currentMap = {}; if (entry.uri) { currentMap.uri = entry.uri; } if (entry.byterange) { currentMap.byterange = entry.byterange; } if (_key) { currentMap.key = _key; } }, "stream-inf": function streamInf() { this.manifest.playlists = uris; this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups; if (!entry.attributes) { this.trigger("warn", { message: "ignoring empty stream-inf attributes" }); return; } if (!currentUri.attributes) { currentUri.attributes = {}; } _extends$2(currentUri.attributes, entry.attributes); }, media: function media() { this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups; if (!(entry.attributes && entry.attributes.TYPE && entry.attributes["GROUP-ID"] && entry.attributes.NAME)) { this.trigger("warn", { message: "ignoring incomplete or missing media group" }); return; } var mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE]; mediaGroupType[entry.attributes["GROUP-ID"]] = mediaGroupType[entry.attributes["GROUP-ID"]] || {}; mediaGroup = mediaGroupType[entry.attributes["GROUP-ID"]]; rendition = { default: /yes/i.test(entry.attributes.DEFAULT) }; if (rendition.default) { rendition.autoselect = true; } else { rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT); } if (entry.attributes.LANGUAGE) { rendition.language = entry.attributes.LANGUAGE; } if (entry.attributes.URI) { rendition.uri = entry.attributes.URI; } if (entry.attributes["INSTREAM-ID"]) { rendition.instreamId = entry.attributes["INSTREAM-ID"]; } if (entry.attributes.CHARACTERISTICS) { rendition.characteristics = entry.attributes.CHARACTERISTICS; } if (entry.attributes.FORCED) { rendition.forced = /yes/i.test(entry.attributes.FORCED); } mediaGroup[entry.attributes.NAME] = rendition; }, discontinuity: function discontinuity() { currentTimeline += 1; currentUri.discontinuity = true; this.manifest.discontinuityStarts.push(uris.length); }, "program-date-time": function programDateTime() { if (typeof this.manifest.dateTimeString === "undefined") { this.manifest.dateTimeString = entry.dateTimeString; this.manifest.dateTimeObject = entry.dateTimeObject; } currentUri.dateTimeString = entry.dateTimeString; currentUri.dateTimeObject = entry.dateTimeObject; }, targetduration: function targetduration() { if (!isFinite(entry.duration) || entry.duration < 0) { this.trigger("warn", { message: "ignoring invalid target duration: " + entry.duration }); return; } this.manifest.targetDuration = entry.duration; setHoldBack.call(this, this.manifest); }, start: function start2() { if (!entry.attributes || isNaN(entry.attributes["TIME-OFFSET"])) { this.trigger("warn", { message: "ignoring start declaration without appropriate attribute list" }); return; } this.manifest.start = { timeOffset: entry.attributes["TIME-OFFSET"], precise: entry.attributes.PRECISE }; }, "cue-out": function cueOut() { currentUri.cueOut = entry.data; }, "cue-out-cont": function cueOutCont() { currentUri.cueOutCont = entry.data; }, "cue-in": function cueIn() { currentUri.cueIn = entry.data; }, "skip": function skip() { this.manifest.skip = camelCaseKeys(entry.attributes); this.warnOnMissingAttributes_("#EXT-X-SKIP", entry.attributes, ["SKIPPED-SEGMENTS"]); }, "part": function part() { var _this2 = this; hasParts = true; var segmentIndex = this.manifest.segments.length; var part2 = camelCaseKeys(entry.attributes); currentUri.parts = currentUri.parts || []; currentUri.parts.push(part2); if (part2.byterange) { if (!part2.byterange.hasOwnProperty("offset")) { part2.byterange.offset = lastPartByterangeEnd; } lastPartByterangeEnd = part2.byterange.offset + part2.byterange.length; } var partIndex = currentUri.parts.length - 1; this.warnOnMissingAttributes_("#EXT-X-PART #" + partIndex + " for segment #" + segmentIndex, entry.attributes, ["URI", "DURATION"]); if (this.manifest.renditionReports) { this.manifest.renditionReports.forEach(function(r2, i2) { if (!r2.hasOwnProperty("lastPart")) { _this2.trigger("warn", { message: "#EXT-X-RENDITION-REPORT #" + i2 + " lacks required attribute(s): LAST-PART" }); } }); } }, "server-control": function serverControl() { var attrs = this.manifest.serverControl = camelCaseKeys(entry.attributes); if (!attrs.hasOwnProperty("canBlockReload")) { attrs.canBlockReload = false; this.trigger("info", { message: "#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false" }); } setHoldBack.call(this, this.manifest); if (attrs.canSkipDateranges && !attrs.hasOwnProperty("canSkipUntil")) { this.trigger("warn", { message: "#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set" }); } }, "preload-hint": function preloadHint() { var segmentIndex = this.manifest.segments.length; var hint = camelCaseKeys(entry.attributes); var isPart = hint.type && hint.type === "PART"; currentUri.preloadHints = currentUri.preloadHints || []; currentUri.preloadHints.push(hint); if (hint.byterange) { if (!hint.byterange.hasOwnProperty("offset")) { hint.byterange.offset = isPart ? lastPartByterangeEnd : 0; if (isPart) { lastPartByterangeEnd = hint.byterange.offset + hint.byterange.length; } } } var index2 = currentUri.preloadHints.length - 1; this.warnOnMissingAttributes_("#EXT-X-PRELOAD-HINT #" + index2 + " for segment #" + segmentIndex, entry.attributes, ["TYPE", "URI"]); if (!hint.type) { return; } for (var i2 = 0; i2 < currentUri.preloadHints.length - 1; i2++) { var otherHint = currentUri.preloadHints[i2]; if (!otherHint.type) { continue; } if (otherHint.type === hint.type) { this.trigger("warn", { message: "#EXT-X-PRELOAD-HINT #" + index2 + " for segment #" + segmentIndex + " has the same TYPE " + hint.type + " as preload hint #" + i2 }); } } }, "rendition-report": function renditionReport() { var report = camelCaseKeys(entry.attributes); this.manifest.renditionReports = this.manifest.renditionReports || []; this.manifest.renditionReports.push(report); var index2 = this.manifest.renditionReports.length - 1; var required = ["LAST-MSN", "URI"]; if (hasParts) { required.push("LAST-PART"); } this.warnOnMissingAttributes_("#EXT-X-RENDITION-REPORT #" + index2, entry.attributes, required); }, "part-inf": function partInf() { this.manifest.partInf = camelCaseKeys(entry.attributes); this.warnOnMissingAttributes_("#EXT-X-PART-INF", entry.attributes, ["PART-TARGET"]); if (this.manifest.partInf.partTarget) { this.manifest.partTargetDuration = this.manifest.partInf.partTarget; } setHoldBack.call(this, this.manifest); } }[entry.tagType] || noop2).call(self2); }, uri: function uri() { currentUri.uri = entry.uri; uris.push(currentUri); if (this.manifest.targetDuration && !("duration" in currentUri)) { this.trigger("warn", { message: "defaulting segment duration to the target duration" }); currentUri.duration = this.manifest.targetDuration; } if (_key) { currentUri.key = _key; } currentUri.timeline = currentTimeline; if (currentMap) { currentUri.map = currentMap; } lastPartByterangeEnd = 0; currentUri = {}; }, comment: function comment() { }, custom: function custom() { if (entry.segment) { currentUri.custom = currentUri.custom || {}; currentUri.custom[entry.customType] = entry.data; } else { this.manifest.custom = this.manifest.custom || {}; this.manifest.custom[entry.customType] = entry.data; } } })[entry.type].call(self2); }); return _this; } var _proto = Parser2.prototype; _proto.warnOnMissingAttributes_ = function warnOnMissingAttributes_(identifier, attributes, required) { var missing = []; required.forEach(function(key) { if (!attributes.hasOwnProperty(key)) { missing.push(key); } }); if (missing.length) { this.trigger("warn", { message: identifier + " lacks required attribute(s): " + missing.join(", ") }); } }; _proto.push = function push(chunk) { this.lineStream.push(chunk); }; _proto.end = function end() { this.lineStream.push("\n"); this.trigger("end"); }; _proto.addParser = function addParser(options2) { this.parseStream.addParser(options2); }; _proto.addTagMapper = function addTagMapper(options2) { this.parseStream.addTagMapper(options2); }; return Parser2; }(Stream); var regexs = { mp4: /^(av0?1|avc0?[1234]|vp0?9|flac|opus|mp3|mp4a|mp4v|stpp.ttml.im1t)/, webm: /^(vp0?[89]|av0?1|opus|vorbis)/, ogg: /^(vp0?[89]|theora|flac|opus|vorbis)/, video: /^(av0?1|avc0?[1234]|vp0?[89]|hvc1|hev1|theora|mp4v)/, audio: /^(mp4a|flac|vorbis|opus|ac-[34]|ec-3|alac|mp3|speex|aac)/, text: /^(stpp.ttml.im1t)/, muxerVideo: /^(avc0?1)/, muxerAudio: /^(mp4a)/, muxerText: /a^/ }; var mediaTypes = ["video", "audio", "text"]; var upperMediaTypes = ["Video", "Audio", "Text"]; var translateLegacyCodec2 = function translateLegacyCodec3(codec) { if (!codec) { return codec; } return codec.replace(/avc1\.(\d+)\.(\d+)/i, function(orig, profile, avcLevel) { var profileHex = ("00" + Number(profile).toString(16)).slice(-2); var avcLevelHex = ("00" + Number(avcLevel).toString(16)).slice(-2); return "avc1." + profileHex + "00" + avcLevelHex; }); }; var parseCodecs2 = function parseCodecs3(codecString) { if (codecString === void 0) { codecString = ""; } var codecs = codecString.split(","); var result = []; codecs.forEach(function(codec) { codec = codec.trim(); var codecType; mediaTypes.forEach(function(name) { var match = regexs[name].exec(codec.toLowerCase()); if (!match || match.length <= 1) { return; } codecType = name; var type2 = codec.substring(0, match[1].length); var details = codec.replace(type2, ""); result.push({ type: type2, details, mediaType: name }); }); if (!codecType) { result.push({ type: codec, details: "", mediaType: "unknown" }); } }); return result; }; var codecsFromDefault2 = function codecsFromDefault3(master, audioGroupId) { if (!master.mediaGroups.AUDIO || !audioGroupId) { return null; } var audioGroup = master.mediaGroups.AUDIO[audioGroupId]; if (!audioGroup) { return null; } for (var name in audioGroup) { var audioType = audioGroup[name]; if (audioType.default && audioType.playlists) { return parseCodecs2(audioType.playlists[0].attributes.CODECS); } } return null; }; var isAudioCodec2 = function isAudioCodec3(codec) { if (codec === void 0) { codec = ""; } return regexs.audio.test(codec.trim().toLowerCase()); }; var isTextCodec2 = function isTextCodec3(codec) { if (codec === void 0) { codec = ""; } return regexs.text.test(codec.trim().toLowerCase()); }; var getMimeForCodec2 = function getMimeForCodec3(codecString) { if (!codecString || typeof codecString !== "string") { return; } var codecs = codecString.toLowerCase().split(",").map(function(c) { return translateLegacyCodec2(c.trim()); }); var type2 = "video"; if (codecs.length === 1 && isAudioCodec2(codecs[0])) { type2 = "audio"; } else if (codecs.length === 1 && isTextCodec2(codecs[0])) { type2 = "application"; } var container = "mp4"; if (codecs.every(function(c) { return regexs.mp4.test(c); })) { container = "mp4"; } else if (codecs.every(function(c) { return regexs.webm.test(c); })) { container = "webm"; } else if (codecs.every(function(c) { return regexs.ogg.test(c); })) { container = "ogg"; } return type2 + "/" + container + ';codecs="' + codecString + '"'; }; var browserSupportsCodec2 = function browserSupportsCodec3(codecString) { if (codecString === void 0) { codecString = ""; } return window_1.MediaSource && window_1.MediaSource.isTypeSupported && window_1.MediaSource.isTypeSupported(getMimeForCodec2(codecString)) || false; }; var muxerSupportsCodec2 = function muxerSupportsCodec3(codecString) { if (codecString === void 0) { codecString = ""; } return codecString.toLowerCase().split(",").every(function(codec) { codec = codec.trim(); for (var i2 = 0; i2 < upperMediaTypes.length; i2++) { var type2 = upperMediaTypes[i2]; if (regexs["muxer" + type2].test(codec)) { return true; } } return false; }); }; var DEFAULT_AUDIO_CODEC = "mp4a.40.2"; var DEFAULT_VIDEO_CODEC = "avc1.4d400d"; var MPEGURL_REGEX = /^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i; var DASH_REGEX = /^application\/dash\+xml/i; var simpleTypeFromSourceType2 = function simpleTypeFromSourceType3(type2) { if (MPEGURL_REGEX.test(type2)) { return "hls"; } if (DASH_REGEX.test(type2)) { return "dash"; } if (type2 === "application/vnd.videojs.vhs+json") { return "vhs-json"; } return null; }; var countBits2 = function countBits3(x) { return x.toString(2).length; }; var countBytes2 = function countBytes3(x) { return Math.ceil(countBits2(x) / 8); }; var isArrayBufferView2 = function isArrayBufferView3(obj) { if (ArrayBuffer.isView === "function") { return ArrayBuffer.isView(obj); } return obj && obj.buffer instanceof ArrayBuffer; }; var isTypedArray2 = function isTypedArray3(obj) { return isArrayBufferView2(obj); }; var toUint82 = function toUint83(bytes) { if (bytes instanceof Uint8Array) { return bytes; } if (!Array.isArray(bytes) && !isTypedArray2(bytes) && !(bytes instanceof ArrayBuffer)) { if (typeof bytes !== "number" || typeof bytes === "number" && bytes !== bytes) { bytes = 0; } else { bytes = [bytes]; } } return new Uint8Array(bytes && bytes.buffer || bytes, bytes && bytes.byteOffset || 0, bytes && bytes.byteLength || 0); }; var BigInt = window_1.BigInt || Number; var BYTE_TABLE = [BigInt("0x1"), BigInt("0x100"), BigInt("0x10000"), BigInt("0x1000000"), BigInt("0x100000000"), BigInt("0x10000000000"), BigInt("0x1000000000000"), BigInt("0x100000000000000"), BigInt("0x10000000000000000")]; (function() { var a = new Uint16Array([65484]); var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength); if (b[0] === 255) { return "big"; } if (b[0] === 204) { return "little"; } return "unknown"; })(); var bytesToNumber2 = function bytesToNumber3(bytes, _temp) { var _ref = _temp === void 0 ? {} : _temp, _ref$signed = _ref.signed, signed = _ref$signed === void 0 ? false : _ref$signed, _ref$le = _ref.le, le = _ref$le === void 0 ? false : _ref$le; bytes = toUint82(bytes); var fn2 = le ? "reduce" : "reduceRight"; var obj = bytes[fn2] ? bytes[fn2] : Array.prototype[fn2]; var number = obj.call(bytes, function(total, byte, i2) { var exponent = le ? i2 : Math.abs(i2 + 1 - bytes.length); return total + BigInt(byte) * BYTE_TABLE[exponent]; }, BigInt(0)); if (signed) { var max2 = BYTE_TABLE[bytes.length] / BigInt(2) - BigInt(1); number = BigInt(number); if (number > max2) { number -= max2; number -= max2; number -= BigInt(2); } } return Number(number); }; var numberToBytes2 = function numberToBytes3(number, _temp2) { var _ref2 = _temp2 === void 0 ? {} : _temp2, _ref2$le = _ref2.le, le = _ref2$le === void 0 ? false : _ref2$le; if (typeof number !== "bigint" && typeof number !== "number" || typeof number === "number" && number !== number) { number = 0; } number = BigInt(number); var byteCount = countBytes2(number); var bytes = new Uint8Array(new ArrayBuffer(byteCount)); for (var i2 = 0; i2 < byteCount; i2++) { var byteIndex = le ? i2 : Math.abs(i2 + 1 - bytes.length); bytes[byteIndex] = Number(number / BYTE_TABLE[i2] & BigInt(255)); if (number < 0) { bytes[byteIndex] = Math.abs(~bytes[byteIndex]); bytes[byteIndex] -= i2 === 0 ? 1 : 2; } } return bytes; }; var stringToBytes2 = function stringToBytes3(string, stringIsBytes) { if (typeof string !== "string" && string && typeof string.toString === "function") { string = string.toString(); } if (typeof string !== "string") { return new Uint8Array(); } if (!stringIsBytes) { string = unescape(encodeURIComponent(string)); } var view = new Uint8Array(string.length); for (var i2 = 0; i2 < string.length; i2++) { view[i2] = string.charCodeAt(i2); } return view; }; var concatTypedArrays2 = function concatTypedArrays3() { for (var _len = arguments.length, buffers = new Array(_len), _key = 0; _key < _len; _key++) { buffers[_key] = arguments[_key]; } buffers = buffers.filter(function(b) { return b && (b.byteLength || b.length) && typeof b !== "string"; }); if (buffers.length <= 1) { return toUint82(buffers[0]); } var totalLen = buffers.reduce(function(total, buf, i2) { return total + (buf.byteLength || buf.length); }, 0); var tempBuffer = new Uint8Array(totalLen); var offset = 0; buffers.forEach(function(buf) { buf = toUint82(buf); tempBuffer.set(buf, offset); offset += buf.byteLength; }); return tempBuffer; }; var bytesMatch2 = function bytesMatch3(a, b, _temp3) { var _ref3 = _temp3 === void 0 ? {} : _temp3, _ref3$offset = _ref3.offset, offset = _ref3$offset === void 0 ? 0 : _ref3$offset, _ref3$mask = _ref3.mask, mask = _ref3$mask === void 0 ? [] : _ref3$mask; a = toUint82(a); b = toUint82(b); var fn2 = b.every ? b.every : Array.prototype.every; return b.length && a.length - offset >= b.length && fn2.call(b, function(bByte, i2) { var aByte = mask[i2] ? mask[i2] & a[offset + i2] : a[offset + i2]; return bByte === aByte; }); }; var forEachMediaGroup$1 = function forEachMediaGroup2(master, groups, callback2) { groups.forEach(function(mediaType) { for (var groupKey in master.mediaGroups[mediaType]) { for (var labelKey in master.mediaGroups[mediaType][groupKey]) { var mediaProperties = master.mediaGroups[mediaType][groupKey][labelKey]; callback2(mediaProperties, mediaType, groupKey, labelKey); } } }); }; /*! @name mpd-parser @version 0.22.1 @license Apache-2.0 */ var isObject$1 = function isObject(obj) { return !!obj && typeof obj === "object"; }; var merge = function merge2() { for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) { objects[_key] = arguments[_key]; } return objects.reduce(function(result, source) { if (typeof source !== "object") { return result; } Object.keys(source).forEach(function(key) { if (Array.isArray(result[key]) && Array.isArray(source[key])) { result[key] = result[key].concat(source[key]); } else if (isObject$1(result[key]) && isObject$1(source[key])) { result[key] = merge2(result[key], source[key]); } else { result[key] = source[key]; } }); return result; }, {}); }; var values = function values2(o) { return Object.keys(o).map(function(k) { return o[k]; }); }; var range = function range2(start2, end) { var result = []; for (var i2 = start2; i2 < end; i2++) { result.push(i2); } return result; }; var flatten = function flatten2(lists) { return lists.reduce(function(x, y) { return x.concat(y); }, []); }; var from = function from2(list) { if (!list.length) { return []; } var result = []; for (var i2 = 0; i2 < list.length; i2++) { result.push(list[i2]); } return result; }; var findIndexes = function findIndexes2(l, key) { return l.reduce(function(a, e, i2) { if (e[key]) { a.push(i2); } return a; }, []); }; var findIndex = function findIndex2(list, matchingFunction) { for (var i2 = 0; i2 < list.length; i2++) { if (matchingFunction(list[i2])) { return i2; } } return -1; }; var union = function union2(lists, keyFunction) { return values(lists.reduce(function(acc, list) { list.forEach(function(el) { acc[keyFunction(el)] = el; }); return acc; }, {})); }; var errors = { INVALID_NUMBER_OF_PERIOD: "INVALID_NUMBER_OF_PERIOD", DASH_EMPTY_MANIFEST: "DASH_EMPTY_MANIFEST", DASH_INVALID_XML: "DASH_INVALID_XML", NO_BASE_URL: "NO_BASE_URL", MISSING_SEGMENT_INFORMATION: "MISSING_SEGMENT_INFORMATION", SEGMENT_TIME_UNSPECIFIED: "SEGMENT_TIME_UNSPECIFIED", UNSUPPORTED_UTC_TIMING_SCHEME: "UNSUPPORTED_UTC_TIMING_SCHEME" }; var urlTypeToSegment = function urlTypeToSegment2(_ref) { var _ref$baseUrl = _ref.baseUrl, baseUrl = _ref$baseUrl === void 0 ? "" : _ref$baseUrl, _ref$source = _ref.source, source = _ref$source === void 0 ? "" : _ref$source, _ref$range = _ref.range, range3 = _ref$range === void 0 ? "" : _ref$range, _ref$indexRange = _ref.indexRange, indexRange = _ref$indexRange === void 0 ? "" : _ref$indexRange; var segment = { uri: source, resolvedUri: resolveUrl$1(baseUrl || "", source) }; if (range3 || indexRange) { var rangeStr = range3 ? range3 : indexRange; var ranges = rangeStr.split("-"); var startRange = window_1.BigInt ? window_1.BigInt(ranges[0]) : parseInt(ranges[0], 10); var endRange = window_1.BigInt ? window_1.BigInt(ranges[1]) : parseInt(ranges[1], 10); if (startRange < Number.MAX_SAFE_INTEGER && typeof startRange === "bigint") { startRange = Number(startRange); } if (endRange < Number.MAX_SAFE_INTEGER && typeof endRange === "bigint") { endRange = Number(endRange); } var length; if (typeof endRange === "bigint" || typeof startRange === "bigint") { length = window_1.BigInt(endRange) - window_1.BigInt(startRange) + window_1.BigInt(1); } else { length = endRange - startRange + 1; } if (typeof length === "bigint" && length < Number.MAX_SAFE_INTEGER) { length = Number(length); } segment.byterange = { length, offset: startRange }; } return segment; }; var byteRangeToString = function byteRangeToString2(byterange) { var endRange; if (typeof byterange.offset === "bigint" || typeof byterange.length === "bigint") { endRange = window_1.BigInt(byterange.offset) + window_1.BigInt(byterange.length) - window_1.BigInt(1); } else { endRange = byterange.offset + byterange.length - 1; } return byterange.offset + "-" + endRange; }; var parseEndNumber = function parseEndNumber2(endNumber) { if (endNumber && typeof endNumber !== "number") { endNumber = parseInt(endNumber, 10); } if (isNaN(endNumber)) { return null; } return endNumber; }; var segmentRange = { static: function _static(attributes) { var duration5 = attributes.duration, _attributes$timescale = attributes.timescale, timescale2 = _attributes$timescale === void 0 ? 1 : _attributes$timescale, sourceDuration = attributes.sourceDuration, periodDuration = attributes.periodDuration; var endNumber = parseEndNumber(attributes.endNumber); var segmentDuration = duration5 / timescale2; if (typeof endNumber === "number") { return { start: 0, end: endNumber }; } if (typeof periodDuration === "number") { return { start: 0, end: periodDuration / segmentDuration }; } return { start: 0, end: sourceDuration / segmentDuration }; }, dynamic: function dynamic(attributes) { var NOW = attributes.NOW, clientOffset = attributes.clientOffset, availabilityStartTime2 = attributes.availabilityStartTime, _attributes$timescale2 = attributes.timescale, timescale2 = _attributes$timescale2 === void 0 ? 1 : _attributes$timescale2, duration5 = attributes.duration, _attributes$periodSta = attributes.periodStart, periodStart = _attributes$periodSta === void 0 ? 0 : _attributes$periodSta, _attributes$minimumUp = attributes.minimumUpdatePeriod, minimumUpdatePeriod2 = _attributes$minimumUp === void 0 ? 0 : _attributes$minimumUp, _attributes$timeShift = attributes.timeShiftBufferDepth, timeShiftBufferDepth2 = _attributes$timeShift === void 0 ? Infinity : _attributes$timeShift; var endNumber = parseEndNumber(attributes.endNumber); var now2 = (NOW + clientOffset) / 1e3; var periodStartWC = availabilityStartTime2 + periodStart; var periodEndWC = now2 + minimumUpdatePeriod2; var periodDuration = periodEndWC - periodStartWC; var segmentCount = Math.ceil(periodDuration * timescale2 / duration5); var availableStart = Math.floor((now2 - periodStartWC - timeShiftBufferDepth2) * timescale2 / duration5); var availableEnd = Math.floor((now2 - periodStartWC) * timescale2 / duration5); return { start: Math.max(0, availableStart), end: typeof endNumber === "number" ? endNumber : Math.min(segmentCount, availableEnd) }; } }; var toSegments = function toSegments2(attributes) { return function(number) { var duration5 = attributes.duration, _attributes$timescale3 = attributes.timescale, timescale2 = _attributes$timescale3 === void 0 ? 1 : _attributes$timescale3, periodStart = attributes.periodStart, _attributes$startNumb = attributes.startNumber, startNumber2 = _attributes$startNumb === void 0 ? 1 : _attributes$startNumb; return { number: startNumber2 + number, duration: duration5 / timescale2, timeline: periodStart, time: number * duration5 }; }; }; var parseByDuration = function parseByDuration2(attributes) { var type2 = attributes.type, duration5 = attributes.duration, _attributes$timescale4 = attributes.timescale, timescale2 = _attributes$timescale4 === void 0 ? 1 : _attributes$timescale4, periodDuration = attributes.periodDuration, sourceDuration = attributes.sourceDuration; var _segmentRange$type = segmentRange[type2](attributes), start2 = _segmentRange$type.start, end = _segmentRange$type.end; var segments = range(start2, end).map(toSegments(attributes)); if (type2 === "static") { var index2 = segments.length - 1; var sectionDuration = typeof periodDuration === "number" ? periodDuration : sourceDuration; segments[index2].duration = sectionDuration - duration5 / timescale2 * index2; } return segments; }; var segmentsFromBase = function segmentsFromBase2(attributes) { var baseUrl = attributes.baseUrl, _attributes$initializ = attributes.initialization, initialization = _attributes$initializ === void 0 ? {} : _attributes$initializ, sourceDuration = attributes.sourceDuration, _attributes$indexRang = attributes.indexRange, indexRange = _attributes$indexRang === void 0 ? "" : _attributes$indexRang, periodStart = attributes.periodStart, presentationTime = attributes.presentationTime, _attributes$number = attributes.number, number = _attributes$number === void 0 ? 0 : _attributes$number, duration5 = attributes.duration; if (!baseUrl) { throw new Error(errors.NO_BASE_URL); } var initSegment = urlTypeToSegment({ baseUrl, source: initialization.sourceURL, range: initialization.range }); var segment = urlTypeToSegment({ baseUrl, source: baseUrl, indexRange }); segment.map = initSegment; if (duration5) { var segmentTimeInfo = parseByDuration(attributes); if (segmentTimeInfo.length) { segment.duration = segmentTimeInfo[0].duration; segment.timeline = segmentTimeInfo[0].timeline; } } else if (sourceDuration) { segment.duration = sourceDuration; segment.timeline = periodStart; } segment.presentationTime = presentationTime || periodStart; segment.number = number; return [segment]; }; var addSidxSegmentsToPlaylist$1 = function addSidxSegmentsToPlaylist(playlist, sidx, baseUrl) { var initSegment = playlist.sidx.map ? playlist.sidx.map : null; var sourceDuration = playlist.sidx.duration; var timeline = playlist.timeline || 0; var sidxByteRange = playlist.sidx.byterange; var sidxEnd = sidxByteRange.offset + sidxByteRange.length; var timescale2 = sidx.timescale; var mediaReferences = sidx.references.filter(function(r2) { return r2.referenceType !== 1; }); var segments = []; var type2 = playlist.endList ? "static" : "dynamic"; var periodStart = playlist.sidx.timeline; var presentationTime = periodStart; var number = playlist.mediaSequence || 0; var startIndex; if (typeof sidx.firstOffset === "bigint") { startIndex = window_1.BigInt(sidxEnd) + sidx.firstOffset; } else { startIndex = sidxEnd + sidx.firstOffset; } for (var i2 = 0; i2 < mediaReferences.length; i2++) { var reference = sidx.references[i2]; var size = reference.referencedSize; var duration5 = reference.subsegmentDuration; var endIndex = void 0; if (typeof startIndex === "bigint") { endIndex = startIndex + window_1.BigInt(size) - window_1.BigInt(1); } else { endIndex = startIndex + size - 1; } var indexRange = startIndex + "-" + endIndex; var attributes = { baseUrl, timescale: timescale2, timeline, periodStart, presentationTime, number, duration: duration5, sourceDuration, indexRange, type: type2 }; var segment = segmentsFromBase(attributes)[0]; if (initSegment) { segment.map = initSegment; } segments.push(segment); if (typeof startIndex === "bigint") { startIndex += window_1.BigInt(size); } else { startIndex += size; } presentationTime += duration5 / timescale2; number++; } playlist.segments = segments; return playlist; }; var SUPPORTED_MEDIA_TYPES = ["AUDIO", "SUBTITLES"]; var TIME_FUDGE = 1 / 60; var getUniqueTimelineStarts = function getUniqueTimelineStarts2(timelineStarts) { return union(timelineStarts, function(_ref) { var timeline = _ref.timeline; return timeline; }).sort(function(a, b) { return a.timeline > b.timeline ? 1 : -1; }); }; var findPlaylistWithName = function findPlaylistWithName2(playlists, name) { for (var i2 = 0; i2 < playlists.length; i2++) { if (playlists[i2].attributes.NAME === name) { return playlists[i2]; } } return null; }; var getMediaGroupPlaylists = function getMediaGroupPlaylists2(manifest) { var mediaGroupPlaylists = []; forEachMediaGroup$1(manifest, SUPPORTED_MEDIA_TYPES, function(properties, type2, group, label2) { mediaGroupPlaylists = mediaGroupPlaylists.concat(properties.playlists || []); }); return mediaGroupPlaylists; }; var updateMediaSequenceForPlaylist = function updateMediaSequenceForPlaylist2(_ref2) { var playlist = _ref2.playlist, mediaSequence = _ref2.mediaSequence; playlist.mediaSequence = mediaSequence; playlist.segments.forEach(function(segment, index2) { segment.number = playlist.mediaSequence + index2; }); }; var updateSequenceNumbers = function updateSequenceNumbers2(_ref3) { var oldPlaylists = _ref3.oldPlaylists, newPlaylists = _ref3.newPlaylists, timelineStarts = _ref3.timelineStarts; newPlaylists.forEach(function(playlist) { playlist.discontinuitySequence = findIndex(timelineStarts, function(_ref4) { var timeline = _ref4.timeline; return timeline === playlist.timeline; }); var oldPlaylist = findPlaylistWithName(oldPlaylists, playlist.attributes.NAME); if (!oldPlaylist) { return; } if (playlist.sidx) { return; } var firstNewSegment = playlist.segments[0]; var oldMatchingSegmentIndex = findIndex(oldPlaylist.segments, function(oldSegment) { return Math.abs(oldSegment.presentationTime - firstNewSegment.presentationTime) < TIME_FUDGE; }); if (oldMatchingSegmentIndex === -1) { updateMediaSequenceForPlaylist({ playlist, mediaSequence: oldPlaylist.mediaSequence + oldPlaylist.segments.length }); playlist.segments[0].discontinuity = true; playlist.discontinuityStarts.unshift(0); if (!oldPlaylist.segments.length && playlist.timeline > oldPlaylist.timeline || oldPlaylist.segments.length && playlist.timeline > oldPlaylist.segments[oldPlaylist.segments.length - 1].timeline) { playlist.discontinuitySequence--; } return; } var oldMatchingSegment = oldPlaylist.segments[oldMatchingSegmentIndex]; if (oldMatchingSegment.discontinuity && !firstNewSegment.discontinuity) { firstNewSegment.discontinuity = true; playlist.discontinuityStarts.unshift(0); playlist.discontinuitySequence--; } updateMediaSequenceForPlaylist({ playlist, mediaSequence: oldPlaylist.segments[oldMatchingSegmentIndex].number }); }); }; var positionManifestOnTimeline = function positionManifestOnTimeline2(_ref5) { var oldManifest = _ref5.oldManifest, newManifest = _ref5.newManifest; var oldPlaylists = oldManifest.playlists.concat(getMediaGroupPlaylists(oldManifest)); var newPlaylists = newManifest.playlists.concat(getMediaGroupPlaylists(newManifest)); newManifest.timelineStarts = getUniqueTimelineStarts([oldManifest.timelineStarts, newManifest.timelineStarts]); updateSequenceNumbers({ oldPlaylists, newPlaylists, timelineStarts: newManifest.timelineStarts }); return newManifest; }; var generateSidxKey = function generateSidxKey2(sidx) { return sidx && sidx.uri + "-" + byteRangeToString(sidx.byterange); }; var mergeDiscontiguousPlaylists = function mergeDiscontiguousPlaylists2(playlists) { var mergedPlaylists = values(playlists.reduce(function(acc, playlist) { var name = playlist.attributes.id + (playlist.attributes.lang || ""); if (!acc[name]) { acc[name] = playlist; acc[name].attributes.timelineStarts = []; } else { if (playlist.segments) { var _acc$name$segments; if (playlist.segments[0]) { playlist.segments[0].discontinuity = true; } (_acc$name$segments = acc[name].segments).push.apply(_acc$name$segments, playlist.segments); } if (playlist.attributes.contentProtection) { acc[name].attributes.contentProtection = playlist.attributes.contentProtection; } } acc[name].attributes.timelineStarts.push({ start: playlist.attributes.periodStart, timeline: playlist.attributes.periodStart }); return acc; }, {})); return mergedPlaylists.map(function(playlist) { playlist.discontinuityStarts = findIndexes(playlist.segments || [], "discontinuity"); return playlist; }); }; var addSidxSegmentsToPlaylist2 = function addSidxSegmentsToPlaylist3(playlist, sidxMapping) { var sidxKey = generateSidxKey(playlist.sidx); var sidxMatch = sidxKey && sidxMapping[sidxKey] && sidxMapping[sidxKey].sidx; if (sidxMatch) { addSidxSegmentsToPlaylist$1(playlist, sidxMatch, playlist.sidx.resolvedUri); } return playlist; }; var addSidxSegmentsToPlaylists = function addSidxSegmentsToPlaylists2(playlists, sidxMapping) { if (sidxMapping === void 0) { sidxMapping = {}; } if (!Object.keys(sidxMapping).length) { return playlists; } for (var i2 in playlists) { playlists[i2] = addSidxSegmentsToPlaylist2(playlists[i2], sidxMapping); } return playlists; }; var formatAudioPlaylist = function formatAudioPlaylist2(_ref, isAudioOnly3) { var _attributes; var attributes = _ref.attributes, segments = _ref.segments, sidx = _ref.sidx, mediaSequence = _ref.mediaSequence, discontinuitySequence = _ref.discontinuitySequence, discontinuityStarts = _ref.discontinuityStarts; var playlist = { attributes: (_attributes = { NAME: attributes.id, BANDWIDTH: attributes.bandwidth, CODECS: attributes.codecs }, _attributes["PROGRAM-ID"] = 1, _attributes), uri: "", endList: attributes.type === "static", timeline: attributes.periodStart, resolvedUri: "", targetDuration: attributes.duration, discontinuitySequence, discontinuityStarts, timelineStarts: attributes.timelineStarts, mediaSequence, segments }; if (attributes.contentProtection) { playlist.contentProtection = attributes.contentProtection; } if (sidx) { playlist.sidx = sidx; } if (isAudioOnly3) { playlist.attributes.AUDIO = "audio"; playlist.attributes.SUBTITLES = "subs"; } return playlist; }; var formatVttPlaylist = function formatVttPlaylist2(_ref2) { var _m3u8Attributes; var attributes = _ref2.attributes, segments = _ref2.segments, mediaSequence = _ref2.mediaSequence, discontinuityStarts = _ref2.discontinuityStarts, discontinuitySequence = _ref2.discontinuitySequence; if (typeof segments === "undefined") { segments = [{ uri: attributes.baseUrl, timeline: attributes.periodStart, resolvedUri: attributes.baseUrl || "", duration: attributes.sourceDuration, number: 0 }]; attributes.duration = attributes.sourceDuration; } var m3u8Attributes = (_m3u8Attributes = { NAME: attributes.id, BANDWIDTH: attributes.bandwidth }, _m3u8Attributes["PROGRAM-ID"] = 1, _m3u8Attributes); if (attributes.codecs) { m3u8Attributes.CODECS = attributes.codecs; } return { attributes: m3u8Attributes, uri: "", endList: attributes.type === "static", timeline: attributes.periodStart, resolvedUri: attributes.baseUrl || "", targetDuration: attributes.duration, timelineStarts: attributes.timelineStarts, discontinuityStarts, discontinuitySequence, mediaSequence, segments }; }; var organizeAudioPlaylists = function organizeAudioPlaylists2(playlists, sidxMapping, isAudioOnly3) { if (sidxMapping === void 0) { sidxMapping = {}; } if (isAudioOnly3 === void 0) { isAudioOnly3 = false; } var mainPlaylist; var formattedPlaylists = playlists.reduce(function(a, playlist) { var role = playlist.attributes.role && playlist.attributes.role.value || ""; var language = playlist.attributes.lang || ""; var label2 = playlist.attributes.label || "main"; if (language && !playlist.attributes.label) { var roleLabel = role ? " (" + role + ")" : ""; label2 = "" + playlist.attributes.lang + roleLabel; } if (!a[label2]) { a[label2] = { language, autoselect: true, default: role === "main", playlists: [], uri: "" }; } var formatted = addSidxSegmentsToPlaylist2(formatAudioPlaylist(playlist, isAudioOnly3), sidxMapping); a[label2].playlists.push(formatted); if (typeof mainPlaylist === "undefined" && role === "main") { mainPlaylist = playlist; mainPlaylist.default = true; } return a; }, {}); if (!mainPlaylist) { var firstLabel = Object.keys(formattedPlaylists)[0]; formattedPlaylists[firstLabel].default = true; } return formattedPlaylists; }; var organizeVttPlaylists = function organizeVttPlaylists2(playlists, sidxMapping) { if (sidxMapping === void 0) { sidxMapping = {}; } return playlists.reduce(function(a, playlist) { var label2 = playlist.attributes.lang || "text"; if (!a[label2]) { a[label2] = { language: label2, default: false, autoselect: false, playlists: [], uri: "" }; } a[label2].playlists.push(addSidxSegmentsToPlaylist2(formatVttPlaylist(playlist), sidxMapping)); return a; }, {}); }; var organizeCaptionServices = function organizeCaptionServices2(captionServices) { return captionServices.reduce(function(svcObj, svc) { if (!svc) { return svcObj; } svc.forEach(function(service) { var channel = service.channel, language = service.language; svcObj[language] = { autoselect: false, default: false, instreamId: channel, language }; if (service.hasOwnProperty("aspectRatio")) { svcObj[language].aspectRatio = service.aspectRatio; } if (service.hasOwnProperty("easyReader")) { svcObj[language].easyReader = service.easyReader; } if (service.hasOwnProperty("3D")) { svcObj[language]["3D"] = service["3D"]; } }); return svcObj; }, {}); }; var formatVideoPlaylist = function formatVideoPlaylist2(_ref3) { var _attributes2; var attributes = _ref3.attributes, segments = _ref3.segments, sidx = _ref3.sidx, discontinuityStarts = _ref3.discontinuityStarts; var playlist = { attributes: (_attributes2 = { NAME: attributes.id, AUDIO: "audio", SUBTITLES: "subs", RESOLUTION: { width: attributes.width, height: attributes.height }, CODECS: attributes.codecs, BANDWIDTH: attributes.bandwidth }, _attributes2["PROGRAM-ID"] = 1, _attributes2), uri: "", endList: attributes.type === "static", timeline: attributes.periodStart, resolvedUri: "", targetDuration: attributes.duration, discontinuityStarts, timelineStarts: attributes.timelineStarts, segments }; if (attributes.frameRate) { playlist.attributes["FRAME-RATE"] = attributes.frameRate; } if (attributes.contentProtection) { playlist.contentProtection = attributes.contentProtection; } if (sidx) { playlist.sidx = sidx; } return playlist; }; var videoOnly = function videoOnly2(_ref4) { var attributes = _ref4.attributes; return attributes.mimeType === "video/mp4" || attributes.mimeType === "video/webm" || attributes.contentType === "video"; }; var audioOnly = function audioOnly2(_ref5) { var attributes = _ref5.attributes; return attributes.mimeType === "audio/mp4" || attributes.mimeType === "audio/webm" || attributes.contentType === "audio"; }; var vttOnly = function vttOnly2(_ref6) { var attributes = _ref6.attributes; return attributes.mimeType === "text/vtt" || attributes.contentType === "text"; }; var addMediaSequenceValues = function addMediaSequenceValues2(playlists, timelineStarts) { playlists.forEach(function(playlist) { playlist.mediaSequence = 0; playlist.discontinuitySequence = findIndex(timelineStarts, function(_ref7) { var timeline = _ref7.timeline; return timeline === playlist.timeline; }); if (!playlist.segments) { return; } playlist.segments.forEach(function(segment, index2) { segment.number = index2; }); }); }; var flattenMediaGroupPlaylists = function flattenMediaGroupPlaylists2(mediaGroupObject) { if (!mediaGroupObject) { return []; } return Object.keys(mediaGroupObject).reduce(function(acc, label2) { var labelContents = mediaGroupObject[label2]; return acc.concat(labelContents.playlists); }, []); }; var toM3u8 = function toM3u82(_ref8) { var _mediaGroups; var dashPlaylists = _ref8.dashPlaylists, locations = _ref8.locations, _ref8$sidxMapping = _ref8.sidxMapping, sidxMapping = _ref8$sidxMapping === void 0 ? {} : _ref8$sidxMapping, previousManifest = _ref8.previousManifest; if (!dashPlaylists.length) { return {}; } var _dashPlaylists$0$attr = dashPlaylists[0].attributes, duration5 = _dashPlaylists$0$attr.sourceDuration, type2 = _dashPlaylists$0$attr.type, suggestedPresentationDelay2 = _dashPlaylists$0$attr.suggestedPresentationDelay, minimumUpdatePeriod2 = _dashPlaylists$0$attr.minimumUpdatePeriod; var videoPlaylists = mergeDiscontiguousPlaylists(dashPlaylists.filter(videoOnly)).map(formatVideoPlaylist); var audioPlaylists = mergeDiscontiguousPlaylists(dashPlaylists.filter(audioOnly)); var vttPlaylists = mergeDiscontiguousPlaylists(dashPlaylists.filter(vttOnly)); var captions = dashPlaylists.map(function(playlist) { return playlist.attributes.captionServices; }).filter(Boolean); var manifest = { allowCache: true, discontinuityStarts: [], segments: [], endList: true, mediaGroups: (_mediaGroups = { AUDIO: {}, VIDEO: {} }, _mediaGroups["CLOSED-CAPTIONS"] = {}, _mediaGroups.SUBTITLES = {}, _mediaGroups), uri: "", duration: duration5, playlists: addSidxSegmentsToPlaylists(videoPlaylists, sidxMapping) }; if (minimumUpdatePeriod2 >= 0) { manifest.minimumUpdatePeriod = minimumUpdatePeriod2 * 1e3; } if (locations) { manifest.locations = locations; } if (type2 === "dynamic") { manifest.suggestedPresentationDelay = suggestedPresentationDelay2; } var isAudioOnly3 = manifest.playlists.length === 0; var organizedAudioGroup = audioPlaylists.length ? organizeAudioPlaylists(audioPlaylists, sidxMapping, isAudioOnly3) : null; var organizedVttGroup = vttPlaylists.length ? organizeVttPlaylists(vttPlaylists, sidxMapping) : null; var formattedPlaylists = videoPlaylists.concat(flattenMediaGroupPlaylists(organizedAudioGroup), flattenMediaGroupPlaylists(organizedVttGroup)); var playlistTimelineStarts = formattedPlaylists.map(function(_ref9) { var timelineStarts = _ref9.timelineStarts; return timelineStarts; }); manifest.timelineStarts = getUniqueTimelineStarts(playlistTimelineStarts); addMediaSequenceValues(formattedPlaylists, manifest.timelineStarts); if (organizedAudioGroup) { manifest.mediaGroups.AUDIO.audio = organizedAudioGroup; } if (organizedVttGroup) { manifest.mediaGroups.SUBTITLES.subs = organizedVttGroup; } if (captions.length) { manifest.mediaGroups["CLOSED-CAPTIONS"].cc = organizeCaptionServices(captions); } if (previousManifest) { return positionManifestOnTimeline({ oldManifest: previousManifest, newManifest: manifest }); } return manifest; }; var getLiveRValue = function getLiveRValue2(attributes, time, duration5) { var NOW = attributes.NOW, clientOffset = attributes.clientOffset, availabilityStartTime2 = attributes.availabilityStartTime, _attributes$timescale = attributes.timescale, timescale2 = _attributes$timescale === void 0 ? 1 : _attributes$timescale, _attributes$periodSta = attributes.periodStart, periodStart = _attributes$periodSta === void 0 ? 0 : _attributes$periodSta, _attributes$minimumUp = attributes.minimumUpdatePeriod, minimumUpdatePeriod2 = _attributes$minimumUp === void 0 ? 0 : _attributes$minimumUp; var now2 = (NOW + clientOffset) / 1e3; var periodStartWC = availabilityStartTime2 + periodStart; var periodEndWC = now2 + minimumUpdatePeriod2; var periodDuration = periodEndWC - periodStartWC; return Math.ceil((periodDuration * timescale2 - time) / duration5); }; var parseByTimeline = function parseByTimeline2(attributes, segmentTimeline) { var type2 = attributes.type, _attributes$minimumUp2 = attributes.minimumUpdatePeriod, minimumUpdatePeriod2 = _attributes$minimumUp2 === void 0 ? 0 : _attributes$minimumUp2, _attributes$media = attributes.media, media = _attributes$media === void 0 ? "" : _attributes$media, sourceDuration = attributes.sourceDuration, _attributes$timescale2 = attributes.timescale, timescale2 = _attributes$timescale2 === void 0 ? 1 : _attributes$timescale2, _attributes$startNumb = attributes.startNumber, startNumber2 = _attributes$startNumb === void 0 ? 1 : _attributes$startNumb, timeline = attributes.periodStart; var segments = []; var time = -1; for (var sIndex = 0; sIndex < segmentTimeline.length; sIndex++) { var S = segmentTimeline[sIndex]; var duration5 = S.d; var repeat = S.r || 0; var segmentTime = S.t || 0; if (time < 0) { time = segmentTime; } if (segmentTime && segmentTime > time) { time = segmentTime; } var count = void 0; if (repeat < 0) { var nextS = sIndex + 1; if (nextS === segmentTimeline.length) { if (type2 === "dynamic" && minimumUpdatePeriod2 > 0 && media.indexOf("$Number$") > 0) { count = getLiveRValue(attributes, time, duration5); } else { count = (sourceDuration * timescale2 - time) / duration5; } } else { count = (segmentTimeline[nextS].t - time) / duration5; } } else { count = repeat + 1; } var end = startNumber2 + segments.length + count; var number = startNumber2 + segments.length; while (number < end) { segments.push({ number, duration: duration5 / timescale2, time, timeline }); time += duration5; number++; } } return segments; }; var identifierPattern = /\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g; var identifierReplacement = function identifierReplacement2(values3) { return function(match, identifier, format, width2) { if (match === "$$") { return "$"; } if (typeof values3[identifier] === "undefined") { return match; } var value = "" + values3[identifier]; if (identifier === "RepresentationID") { return value; } if (!format) { width2 = 1; } else { width2 = parseInt(width2, 10); } if (value.length >= width2) { return value; } return "" + new Array(width2 - value.length + 1).join("0") + value; }; }; var constructTemplateUrl = function constructTemplateUrl2(url, values3) { return url.replace(identifierPattern, identifierReplacement(values3)); }; var parseTemplateInfo = function parseTemplateInfo2(attributes, segmentTimeline) { if (!attributes.duration && !segmentTimeline) { return [{ number: attributes.startNumber || 1, duration: attributes.sourceDuration, time: 0, timeline: attributes.periodStart }]; } if (attributes.duration) { return parseByDuration(attributes); } return parseByTimeline(attributes, segmentTimeline); }; var segmentsFromTemplate = function segmentsFromTemplate2(attributes, segmentTimeline) { var templateValues = { RepresentationID: attributes.id, Bandwidth: attributes.bandwidth || 0 }; var _attributes$initializ = attributes.initialization, initialization = _attributes$initializ === void 0 ? { sourceURL: "", range: "" } : _attributes$initializ; var mapSegment = urlTypeToSegment({ baseUrl: attributes.baseUrl, source: constructTemplateUrl(initialization.sourceURL, templateValues), range: initialization.range }); var segments = parseTemplateInfo(attributes, segmentTimeline); return segments.map(function(segment) { templateValues.Number = segment.number; templateValues.Time = segment.time; var uri = constructTemplateUrl(attributes.media || "", templateValues); var timescale2 = attributes.timescale || 1; var presentationTimeOffset2 = attributes.presentationTimeOffset || 0; var presentationTime = attributes.periodStart + (segment.time - presentationTimeOffset2) / timescale2; var map = { uri, timeline: segment.timeline, duration: segment.duration, resolvedUri: resolveUrl$1(attributes.baseUrl || "", uri), map: mapSegment, number: segment.number, presentationTime }; return map; }); }; var SegmentURLToSegmentObject = function SegmentURLToSegmentObject2(attributes, segmentUrl) { var baseUrl = attributes.baseUrl, _attributes$initializ = attributes.initialization, initialization = _attributes$initializ === void 0 ? {} : _attributes$initializ; var initSegment = urlTypeToSegment({ baseUrl, source: initialization.sourceURL, range: initialization.range }); var segment = urlTypeToSegment({ baseUrl, source: segmentUrl.media, range: segmentUrl.mediaRange }); segment.map = initSegment; return segment; }; var segmentsFromList = function segmentsFromList2(attributes, segmentTimeline) { var duration5 = attributes.duration, _attributes$segmentUr = attributes.segmentUrls, segmentUrls = _attributes$segmentUr === void 0 ? [] : _attributes$segmentUr, periodStart = attributes.periodStart; if (!duration5 && !segmentTimeline || duration5 && segmentTimeline) { throw new Error(errors.SEGMENT_TIME_UNSPECIFIED); } var segmentUrlMap = segmentUrls.map(function(segmentUrlObject) { return SegmentURLToSegmentObject(attributes, segmentUrlObject); }); var segmentTimeInfo; if (duration5) { segmentTimeInfo = parseByDuration(attributes); } if (segmentTimeline) { segmentTimeInfo = parseByTimeline(attributes, segmentTimeline); } var segments = segmentTimeInfo.map(function(segmentTime, index2) { if (segmentUrlMap[index2]) { var segment = segmentUrlMap[index2]; var timescale2 = attributes.timescale || 1; var presentationTimeOffset2 = attributes.presentationTimeOffset || 0; segment.timeline = segmentTime.timeline; segment.duration = segmentTime.duration; segment.number = segmentTime.number; segment.presentationTime = periodStart + (segmentTime.time - presentationTimeOffset2) / timescale2; return segment; } }).filter(function(segment) { return segment; }); return segments; }; var generateSegments = function generateSegments2(_ref) { var attributes = _ref.attributes, segmentInfo = _ref.segmentInfo; var segmentAttributes; var segmentsFn; if (segmentInfo.template) { segmentsFn = segmentsFromTemplate; segmentAttributes = merge(attributes, segmentInfo.template); } else if (segmentInfo.base) { segmentsFn = segmentsFromBase; segmentAttributes = merge(attributes, segmentInfo.base); } else if (segmentInfo.list) { segmentsFn = segmentsFromList; segmentAttributes = merge(attributes, segmentInfo.list); } var segmentsInfo = { attributes }; if (!segmentsFn) { return segmentsInfo; } var segments = segmentsFn(segmentAttributes, segmentInfo.segmentTimeline); if (segmentAttributes.duration) { var _segmentAttributes = segmentAttributes, duration5 = _segmentAttributes.duration, _segmentAttributes$ti = _segmentAttributes.timescale, timescale2 = _segmentAttributes$ti === void 0 ? 1 : _segmentAttributes$ti; segmentAttributes.duration = duration5 / timescale2; } else if (segments.length) { segmentAttributes.duration = segments.reduce(function(max2, segment) { return Math.max(max2, Math.ceil(segment.duration)); }, 0); } else { segmentAttributes.duration = 0; } segmentsInfo.attributes = segmentAttributes; segmentsInfo.segments = segments; if (segmentInfo.base && segmentAttributes.indexRange) { segmentsInfo.sidx = segments[0]; segmentsInfo.segments = []; } return segmentsInfo; }; var toPlaylists = function toPlaylists2(representations) { return representations.map(generateSegments); }; var findChildren = function findChildren2(element, name) { return from(element.childNodes).filter(function(_ref) { var tagName = _ref.tagName; return tagName === name; }); }; var getContent = function getContent2(element) { return element.textContent.trim(); }; var parseDivisionValue = function parseDivisionValue2(value) { return parseFloat(value.split("/").reduce(function(prev, current) { return prev / current; })); }; var parseDuration = function parseDuration2(str) { var SECONDS_IN_YEAR = 365 * 24 * 60 * 60; var SECONDS_IN_MONTH = 30 * 24 * 60 * 60; var SECONDS_IN_DAY = 24 * 60 * 60; var SECONDS_IN_HOUR = 60 * 60; var SECONDS_IN_MIN = 60; var durationRegex = /P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)D)?(?:T(?:(\d*)H)?(?:(\d*)M)?(?:([\d.]*)S)?)?/; var match = durationRegex.exec(str); if (!match) { return 0; } var _match$slice = match.slice(1), year = _match$slice[0], month = _match$slice[1], day = _match$slice[2], hour = _match$slice[3], minute = _match$slice[4], second = _match$slice[5]; return parseFloat(year || 0) * SECONDS_IN_YEAR + parseFloat(month || 0) * SECONDS_IN_MONTH + parseFloat(day || 0) * SECONDS_IN_DAY + parseFloat(hour || 0) * SECONDS_IN_HOUR + parseFloat(minute || 0) * SECONDS_IN_MIN + parseFloat(second || 0); }; var parseDate = function parseDate2(str) { var dateRegex = /^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/; if (dateRegex.test(str)) { str += "Z"; } return Date.parse(str); }; var parsers = { mediaPresentationDuration: function mediaPresentationDuration(value) { return parseDuration(value); }, availabilityStartTime: function availabilityStartTime(value) { return parseDate(value) / 1e3; }, minimumUpdatePeriod: function minimumUpdatePeriod(value) { return parseDuration(value); }, suggestedPresentationDelay: function suggestedPresentationDelay(value) { return parseDuration(value); }, type: function type(value) { return value; }, timeShiftBufferDepth: function timeShiftBufferDepth(value) { return parseDuration(value); }, start: function start(value) { return parseDuration(value); }, width: function width(value) { return parseInt(value, 10); }, height: function height(value) { return parseInt(value, 10); }, bandwidth: function bandwidth(value) { return parseInt(value, 10); }, frameRate: function frameRate(value) { return parseDivisionValue(value); }, startNumber: function startNumber(value) { return parseInt(value, 10); }, timescale: function timescale(value) { return parseInt(value, 10); }, presentationTimeOffset: function presentationTimeOffset(value) { return parseInt(value, 10); }, duration: function duration(value) { var parsedValue = parseInt(value, 10); if (isNaN(parsedValue)) { return parseDuration(value); } return parsedValue; }, d: function d(value) { return parseInt(value, 10); }, t: function t(value) { return parseInt(value, 10); }, r: function r(value) { return parseInt(value, 10); }, DEFAULT: function DEFAULT(value) { return value; } }; var parseAttributes2 = function parseAttributes3(el) { if (!(el && el.attributes)) { return {}; } return from(el.attributes).reduce(function(a, e) { var parseFn = parsers[e.name] || parsers.DEFAULT; a[e.name] = parseFn(e.value); return a; }, {}); }; var keySystemsMap = { "urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b": "org.w3.clearkey", "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed": "com.widevine.alpha", "urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95": "com.microsoft.playready", "urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb": "com.adobe.primetime" }; var buildBaseUrls = function buildBaseUrls2(referenceUrls, baseUrlElements) { if (!baseUrlElements.length) { return referenceUrls; } return flatten(referenceUrls.map(function(reference) { return baseUrlElements.map(function(baseUrlElement) { return resolveUrl$1(reference, getContent(baseUrlElement)); }); })); }; var getSegmentInformation = function getSegmentInformation2(adaptationSet) { var segmentTemplate = findChildren(adaptationSet, "SegmentTemplate")[0]; var segmentList = findChildren(adaptationSet, "SegmentList")[0]; var segmentUrls = segmentList && findChildren(segmentList, "SegmentURL").map(function(s) { return merge({ tag: "SegmentURL" }, parseAttributes2(s)); }); var segmentBase = findChildren(adaptationSet, "SegmentBase")[0]; var segmentTimelineParentNode = segmentList || segmentTemplate; var segmentTimeline = segmentTimelineParentNode && findChildren(segmentTimelineParentNode, "SegmentTimeline")[0]; var segmentInitializationParentNode = segmentList || segmentBase || segmentTemplate; var segmentInitialization = segmentInitializationParentNode && findChildren(segmentInitializationParentNode, "Initialization")[0]; var template = segmentTemplate && parseAttributes2(segmentTemplate); if (template && segmentInitialization) { template.initialization = segmentInitialization && parseAttributes2(segmentInitialization); } else if (template && template.initialization) { template.initialization = { sourceURL: template.initialization }; } var segmentInfo = { template, segmentTimeline: segmentTimeline && findChildren(segmentTimeline, "S").map(function(s) { return parseAttributes2(s); }), list: segmentList && merge(parseAttributes2(segmentList), { segmentUrls, initialization: parseAttributes2(segmentInitialization) }), base: segmentBase && merge(parseAttributes2(segmentBase), { initialization: parseAttributes2(segmentInitialization) }) }; Object.keys(segmentInfo).forEach(function(key) { if (!segmentInfo[key]) { delete segmentInfo[key]; } }); return segmentInfo; }; var inheritBaseUrls = function inheritBaseUrls2(adaptationSetAttributes, adaptationSetBaseUrls, adaptationSetSegmentInfo) { return function(representation) { var repBaseUrlElements = findChildren(representation, "BaseURL"); var repBaseUrls = buildBaseUrls(adaptationSetBaseUrls, repBaseUrlElements); var attributes = merge(adaptationSetAttributes, parseAttributes2(representation)); var representationSegmentInfo = getSegmentInformation(representation); return repBaseUrls.map(function(baseUrl) { return { segmentInfo: merge(adaptationSetSegmentInfo, representationSegmentInfo), attributes: merge(attributes, { baseUrl }) }; }); }; }; var generateKeySystemInformation = function generateKeySystemInformation2(contentProtectionNodes) { return contentProtectionNodes.reduce(function(acc, node) { var attributes = parseAttributes2(node); if (attributes.schemeIdUri) { attributes.schemeIdUri = attributes.schemeIdUri.toLowerCase(); } var keySystem = keySystemsMap[attributes.schemeIdUri]; if (keySystem) { acc[keySystem] = { attributes }; var psshNode = findChildren(node, "cenc:pssh")[0]; if (psshNode) { var pssh = getContent(psshNode); acc[keySystem].pssh = pssh && decodeB64ToUint8Array(pssh); } } return acc; }, {}); }; var parseCaptionServiceMetadata = function parseCaptionServiceMetadata2(service) { if (service.schemeIdUri === "urn:scte:dash:cc:cea-608:2015") { var values3 = typeof service.value !== "string" ? [] : service.value.split(";"); return values3.map(function(value) { var channel; var language; language = value; if (/^CC\d=/.test(value)) { var _value$split = value.split("="); channel = _value$split[0]; language = _value$split[1]; } else if (/^CC\d$/.test(value)) { channel = value; } return { channel, language }; }); } else if (service.schemeIdUri === "urn:scte:dash:cc:cea-708:2015") { var _values = typeof service.value !== "string" ? [] : service.value.split(";"); return _values.map(function(value) { var flags = { "channel": void 0, "language": void 0, "aspectRatio": 1, "easyReader": 0, "3D": 0 }; if (/=/.test(value)) { var _value$split2 = value.split("="), channel = _value$split2[0], _value$split2$ = _value$split2[1], opts = _value$split2$ === void 0 ? "" : _value$split2$; flags.channel = channel; flags.language = value; opts.split(",").forEach(function(opt) { var _opt$split = opt.split(":"), name = _opt$split[0], val = _opt$split[1]; if (name === "lang") { flags.language = val; } else if (name === "er") { flags.easyReader = Number(val); } else if (name === "war") { flags.aspectRatio = Number(val); } else if (name === "3D") { flags["3D"] = Number(val); } }); } else { flags.language = value; } if (flags.channel) { flags.channel = "SERVICE" + flags.channel; } return flags; }); } }; var toRepresentations = function toRepresentations2(periodAttributes, periodBaseUrls, periodSegmentInfo) { return function(adaptationSet) { var adaptationSetAttributes = parseAttributes2(adaptationSet); var adaptationSetBaseUrls = buildBaseUrls(periodBaseUrls, findChildren(adaptationSet, "BaseURL")); var role = findChildren(adaptationSet, "Role")[0]; var roleAttributes = { role: parseAttributes2(role) }; var attrs = merge(periodAttributes, adaptationSetAttributes, roleAttributes); var accessibility = findChildren(adaptationSet, "Accessibility")[0]; var captionServices = parseCaptionServiceMetadata(parseAttributes2(accessibility)); if (captionServices) { attrs = merge(attrs, { captionServices }); } var label2 = findChildren(adaptationSet, "Label")[0]; if (label2 && label2.childNodes.length) { var labelVal = label2.childNodes[0].nodeValue.trim(); attrs = merge(attrs, { label: labelVal }); } var contentProtection = generateKeySystemInformation(findChildren(adaptationSet, "ContentProtection")); if (Object.keys(contentProtection).length) { attrs = merge(attrs, { contentProtection }); } var segmentInfo = getSegmentInformation(adaptationSet); var representations = findChildren(adaptationSet, "Representation"); var adaptationSetSegmentInfo = merge(periodSegmentInfo, segmentInfo); return flatten(representations.map(inheritBaseUrls(attrs, adaptationSetBaseUrls, adaptationSetSegmentInfo))); }; }; var toAdaptationSets = function toAdaptationSets2(mpdAttributes, mpdBaseUrls) { return function(period, index2) { var periodBaseUrls = buildBaseUrls(mpdBaseUrls, findChildren(period.node, "BaseURL")); var periodAttributes = merge(mpdAttributes, { periodStart: period.attributes.start }); if (typeof period.attributes.duration === "number") { periodAttributes.periodDuration = period.attributes.duration; } var adaptationSets = findChildren(period.node, "AdaptationSet"); var periodSegmentInfo = getSegmentInformation(period.node); return flatten(adaptationSets.map(toRepresentations(periodAttributes, periodBaseUrls, periodSegmentInfo))); }; }; var getPeriodStart = function getPeriodStart2(_ref) { var attributes = _ref.attributes, priorPeriodAttributes = _ref.priorPeriodAttributes, mpdType = _ref.mpdType; if (typeof attributes.start === "number") { return attributes.start; } if (priorPeriodAttributes && typeof priorPeriodAttributes.start === "number" && typeof priorPeriodAttributes.duration === "number") { return priorPeriodAttributes.start + priorPeriodAttributes.duration; } if (!priorPeriodAttributes && mpdType === "static") { return 0; } return null; }; var inheritAttributes = function inheritAttributes2(mpd, options2) { if (options2 === void 0) { options2 = {}; } var _options = options2, _options$manifestUri = _options.manifestUri, manifestUri = _options$manifestUri === void 0 ? "" : _options$manifestUri, _options$NOW = _options.NOW, NOW = _options$NOW === void 0 ? Date.now() : _options$NOW, _options$clientOffset = _options.clientOffset, clientOffset = _options$clientOffset === void 0 ? 0 : _options$clientOffset; var periodNodes = findChildren(mpd, "Period"); if (!periodNodes.length) { throw new Error(errors.INVALID_NUMBER_OF_PERIOD); } var locations = findChildren(mpd, "Location"); var mpdAttributes = parseAttributes2(mpd); var mpdBaseUrls = buildBaseUrls([manifestUri], findChildren(mpd, "BaseURL")); mpdAttributes.type = mpdAttributes.type || "static"; mpdAttributes.sourceDuration = mpdAttributes.mediaPresentationDuration || 0; mpdAttributes.NOW = NOW; mpdAttributes.clientOffset = clientOffset; if (locations.length) { mpdAttributes.locations = locations.map(getContent); } var periods = []; periodNodes.forEach(function(node, index2) { var attributes = parseAttributes2(node); var priorPeriod = periods[index2 - 1]; attributes.start = getPeriodStart({ attributes, priorPeriodAttributes: priorPeriod ? priorPeriod.attributes : null, mpdType: mpdAttributes.type }); periods.push({ node, attributes }); }); return { locations: mpdAttributes.locations, representationInfo: flatten(periods.map(toAdaptationSets(mpdAttributes, mpdBaseUrls))) }; }; var stringToMpdXml = function stringToMpdXml2(manifestString) { if (manifestString === "") { throw new Error(errors.DASH_EMPTY_MANIFEST); } var parser2 = new DOMParser(); var xml; var mpd; try { xml = parser2.parseFromString(manifestString, "application/xml"); mpd = xml && xml.documentElement.tagName === "MPD" ? xml.documentElement : null; } catch (e) { } if (!mpd || mpd && mpd.getElementsByTagName("parsererror").length > 0) { throw new Error(errors.DASH_INVALID_XML); } return mpd; }; var parseUTCTimingScheme = function parseUTCTimingScheme2(mpd) { var UTCTimingNode = findChildren(mpd, "UTCTiming")[0]; if (!UTCTimingNode) { return null; } var attributes = parseAttributes2(UTCTimingNode); switch (attributes.schemeIdUri) { case "urn:mpeg:dash:utc:http-head:2014": case "urn:mpeg:dash:utc:http-head:2012": attributes.method = "HEAD"; break; case "urn:mpeg:dash:utc:http-xsdate:2014": case "urn:mpeg:dash:utc:http-iso:2014": case "urn:mpeg:dash:utc:http-xsdate:2012": case "urn:mpeg:dash:utc:http-iso:2012": attributes.method = "GET"; break; case "urn:mpeg:dash:utc:direct:2014": case "urn:mpeg:dash:utc:direct:2012": attributes.method = "DIRECT"; attributes.value = Date.parse(attributes.value); break; case "urn:mpeg:dash:utc:http-ntp:2014": case "urn:mpeg:dash:utc:ntp:2014": case "urn:mpeg:dash:utc:sntp:2014": default: throw new Error(errors.UNSUPPORTED_UTC_TIMING_SCHEME); } return attributes; }; var parse = function parse2(manifestString, options2) { if (options2 === void 0) { options2 = {}; } var parsedManifestInfo = inheritAttributes(stringToMpdXml(manifestString), options2); var playlists = toPlaylists(parsedManifestInfo.representationInfo); return toM3u8({ dashPlaylists: playlists, locations: parsedManifestInfo.locations, sidxMapping: options2.sidxMapping, previousManifest: options2.previousManifest }); }; var parseUTCTiming = function parseUTCTiming2(manifestString) { return parseUTCTimingScheme(stringToMpdXml(manifestString)); }; var MAX_UINT32 = Math.pow(2, 32); var getUint64$1 = function(uint8) { var dv = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength); var value; if (dv.getBigUint64) { value = dv.getBigUint64(0); if (value < Number.MAX_SAFE_INTEGER) { return Number(value); } return value; } return dv.getUint32(0) * MAX_UINT32 + dv.getUint32(4); }; var numbers = { getUint64: getUint64$1, MAX_UINT32 }; var getUint64 = numbers.getUint64; var parseSidx = function(data) { var view = new DataView(data.buffer, data.byteOffset, data.byteLength), result = { version: data[0], flags: new Uint8Array(data.subarray(1, 4)), references: [], referenceId: view.getUint32(4), timescale: view.getUint32(8) }, i2 = 12; if (result.version === 0) { result.earliestPresentationTime = view.getUint32(i2); result.firstOffset = view.getUint32(i2 + 4); i2 += 8; } else { result.earliestPresentationTime = getUint64(data.subarray(i2)); result.firstOffset = getUint64(data.subarray(i2 + 8)); i2 += 16; } i2 += 2; var referenceCount = view.getUint16(i2); i2 += 2; for (; referenceCount > 0; i2 += 12, referenceCount--) { result.references.push({ referenceType: (data[i2] & 128) >>> 7, referencedSize: view.getUint32(i2) & 2147483647, subsegmentDuration: view.getUint32(i2 + 4), startsWithSap: !!(data[i2 + 8] & 128), sapType: (data[i2 + 8] & 112) >>> 4, sapDeltaTime: view.getUint32(i2 + 8) & 268435455 }); } return result; }; var parseSidx_1 = parseSidx; var ID3 = toUint82([73, 68, 51]); var getId3Size2 = function getId3Size3(bytes, offset) { if (offset === void 0) { offset = 0; } bytes = toUint82(bytes); var flags = bytes[offset + 5]; var returnSize = bytes[offset + 6] << 21 | bytes[offset + 7] << 14 | bytes[offset + 8] << 7 | bytes[offset + 9]; var footerPresent = (flags & 16) >> 4; if (footerPresent) { return returnSize + 20; } return returnSize + 10; }; var getId3Offset2 = function getId3Offset3(bytes, offset) { if (offset === void 0) { offset = 0; } bytes = toUint82(bytes); if (bytes.length - offset < 10 || !bytesMatch2(bytes, ID3, { offset })) { return offset; } offset += getId3Size2(bytes, offset); return getId3Offset3(bytes, offset); }; var normalizePath$1 = function normalizePath3(path) { if (typeof path === "string") { return stringToBytes2(path); } if (typeof path === "number") { return path; } return path; }; var normalizePaths$1 = function normalizePaths3(paths) { if (!Array.isArray(paths)) { return [normalizePath$1(paths)]; } return paths.map(function(p) { return normalizePath$1(p); }); }; var findBox2 = function findBox3(bytes, paths, complete) { if (complete === void 0) { complete = false; } paths = normalizePaths$1(paths); bytes = toUint82(bytes); var results = []; if (!paths.length) { return results; } var i2 = 0; while (i2 < bytes.length) { var size = (bytes[i2] << 24 | bytes[i2 + 1] << 16 | bytes[i2 + 2] << 8 | bytes[i2 + 3]) >>> 0; var type2 = bytes.subarray(i2 + 4, i2 + 8); if (size === 0) { break; } var end = i2 + size; if (end > bytes.length) { if (complete) { break; } end = bytes.length; } var data = bytes.subarray(i2 + 8, end); if (bytesMatch2(type2, paths[0])) { if (paths.length === 1) { results.push(data); } else { results.push.apply(results, findBox3(data, paths.slice(1), complete)); } } i2 = end; } return results; }; var EBML_TAGS = { EBML: toUint82([26, 69, 223, 163]), DocType: toUint82([66, 130]), Segment: toUint82([24, 83, 128, 103]), SegmentInfo: toUint82([21, 73, 169, 102]), Tracks: toUint82([22, 84, 174, 107]), Track: toUint82([174]), TrackNumber: toUint82([215]), DefaultDuration: toUint82([35, 227, 131]), TrackEntry: toUint82([174]), TrackType: toUint82([131]), FlagDefault: toUint82([136]), CodecID: toUint82([134]), CodecPrivate: toUint82([99, 162]), VideoTrack: toUint82([224]), AudioTrack: toUint82([225]), Cluster: toUint82([31, 67, 182, 117]), Timestamp: toUint82([231]), TimestampScale: toUint82([42, 215, 177]), BlockGroup: toUint82([160]), BlockDuration: toUint82([155]), Block: toUint82([161]), SimpleBlock: toUint82([163]) }; var LENGTH_TABLE = [128, 64, 32, 16, 8, 4, 2, 1]; var getLength2 = function getLength3(byte) { var len = 1; for (var i2 = 0; i2 < LENGTH_TABLE.length; i2++) { if (byte & LENGTH_TABLE[i2]) { break; } len++; } return len; }; var getvint2 = function getvint3(bytes, offset, removeLength, signed) { if (removeLength === void 0) { removeLength = true; } if (signed === void 0) { signed = false; } var length = getLength2(bytes[offset]); var valueBytes = bytes.subarray(offset, offset + length); if (removeLength) { valueBytes = Array.prototype.slice.call(bytes, offset, offset + length); valueBytes[0] ^= LENGTH_TABLE[length - 1]; } return { length, value: bytesToNumber2(valueBytes, { signed }), bytes: valueBytes }; }; var normalizePath4 = function normalizePath5(path) { if (typeof path === "string") { return path.match(/.{1,2}/g).map(function(p) { return normalizePath5(p); }); } if (typeof path === "number") { return numberToBytes2(path); } return path; }; var normalizePaths4 = function normalizePaths5(paths) { if (!Array.isArray(paths)) { return [normalizePath4(paths)]; } return paths.map(function(p) { return normalizePath4(p); }); }; var getInfinityDataSize2 = function getInfinityDataSize3(id, bytes, offset) { if (offset >= bytes.length) { return bytes.length; } var innerid = getvint2(bytes, offset, false); if (bytesMatch2(id.bytes, innerid.bytes)) { return offset; } var dataHeader = getvint2(bytes, offset + innerid.length); return getInfinityDataSize3(id, bytes, offset + dataHeader.length + dataHeader.value + innerid.length); }; var findEbml2 = function findEbml3(bytes, paths) { paths = normalizePaths4(paths); bytes = toUint82(bytes); var results = []; if (!paths.length) { return results; } var i2 = 0; while (i2 < bytes.length) { var id = getvint2(bytes, i2, false); var dataHeader = getvint2(bytes, i2 + id.length); var dataStart = i2 + id.length + dataHeader.length; if (dataHeader.value === 127) { dataHeader.value = getInfinityDataSize2(id, bytes, dataStart); if (dataHeader.value !== bytes.length) { dataHeader.value -= dataStart; } } var dataEnd = dataStart + dataHeader.value > bytes.length ? bytes.length : dataStart + dataHeader.value; var data = bytes.subarray(dataStart, dataEnd); if (bytesMatch2(paths[0], id.bytes)) { if (paths.length === 1) { results.push(data); } else { results = results.concat(findEbml3(data, paths.slice(1))); } } var totalLength = id.length + dataHeader.length + data.length; i2 += totalLength; } return results; }; var NAL_TYPE_ONE = toUint82([0, 0, 0, 1]); var NAL_TYPE_TWO = toUint82([0, 0, 1]); var EMULATION_PREVENTION = toUint82([0, 0, 3]); var discardEmulationPreventionBytes2 = function discardEmulationPreventionBytes3(bytes) { var positions = []; var i2 = 1; while (i2 < bytes.length - 2) { if (bytesMatch2(bytes.subarray(i2, i2 + 3), EMULATION_PREVENTION)) { positions.push(i2 + 2); i2++; } i2++; } if (positions.length === 0) { return bytes; } var newLength = bytes.length - positions.length; var newData = new Uint8Array(newLength); var sourceIndex = 0; for (i2 = 0; i2 < newLength; sourceIndex++, i2++) { if (sourceIndex === positions[0]) { sourceIndex++; positions.shift(); } newData[i2] = bytes[sourceIndex]; } return newData; }; var findNal2 = function findNal3(bytes, dataType, types, nalLimit) { if (nalLimit === void 0) { nalLimit = Infinity; } bytes = toUint82(bytes); types = [].concat(types); var i2 = 0; var nalStart; var nalsFound = 0; while (i2 < bytes.length && (nalsFound < nalLimit || nalStart)) { var nalOffset = void 0; if (bytesMatch2(bytes.subarray(i2), NAL_TYPE_ONE)) { nalOffset = 4; } else if (bytesMatch2(bytes.subarray(i2), NAL_TYPE_TWO)) { nalOffset = 3; } if (!nalOffset) { i2++; continue; } nalsFound++; if (nalStart) { return discardEmulationPreventionBytes2(bytes.subarray(nalStart, i2)); } var nalType = void 0; if (dataType === "h264") { nalType = bytes[i2 + nalOffset] & 31; } else if (dataType === "h265") { nalType = bytes[i2 + nalOffset] >> 1 & 63; } if (types.indexOf(nalType) !== -1) { nalStart = i2 + nalOffset; } i2 += nalOffset + (dataType === "h264" ? 1 : 2); } return bytes.subarray(0, 0); }; var findH264Nal2 = function findH264Nal3(bytes, type2, nalLimit) { return findNal2(bytes, "h264", type2, nalLimit); }; var findH265Nal2 = function findH265Nal3(bytes, type2, nalLimit) { return findNal2(bytes, "h265", type2, nalLimit); }; var CONSTANTS = { "webm": toUint82([119, 101, 98, 109]), "matroska": toUint82([109, 97, 116, 114, 111, 115, 107, 97]), "flac": toUint82([102, 76, 97, 67]), "ogg": toUint82([79, 103, 103, 83]), "ac3": toUint82([11, 119]), "riff": toUint82([82, 73, 70, 70]), "avi": toUint82([65, 86, 73]), "wav": toUint82([87, 65, 86, 69]), "3gp": toUint82([102, 116, 121, 112, 51, 103]), "mp4": toUint82([102, 116, 121, 112]), "fmp4": toUint82([115, 116, 121, 112]), "mov": toUint82([102, 116, 121, 112, 113, 116]), "moov": toUint82([109, 111, 111, 118]), "moof": toUint82([109, 111, 111, 102]) }; var _isLikely = { aac: function aac2(bytes) { var offset = getId3Offset2(bytes); return bytesMatch2(bytes, [255, 16], { offset, mask: [255, 22] }); }, mp3: function mp32(bytes) { var offset = getId3Offset2(bytes); return bytesMatch2(bytes, [255, 2], { offset, mask: [255, 6] }); }, webm: function webm2(bytes) { var docType = findEbml2(bytes, [EBML_TAGS.EBML, EBML_TAGS.DocType])[0]; return bytesMatch2(docType, CONSTANTS.webm); }, mkv: function mkv2(bytes) { var docType = findEbml2(bytes, [EBML_TAGS.EBML, EBML_TAGS.DocType])[0]; return bytesMatch2(docType, CONSTANTS.matroska); }, mp4: function mp42(bytes) { if (_isLikely["3gp"](bytes) || _isLikely.mov(bytes)) { return false; } if (bytesMatch2(bytes, CONSTANTS.mp4, { offset: 4 }) || bytesMatch2(bytes, CONSTANTS.fmp4, { offset: 4 })) { return true; } if (bytesMatch2(bytes, CONSTANTS.moof, { offset: 4 }) || bytesMatch2(bytes, CONSTANTS.moov, { offset: 4 })) { return true; } }, mov: function mov2(bytes) { return bytesMatch2(bytes, CONSTANTS.mov, { offset: 4 }); }, "3gp": function gp2(bytes) { return bytesMatch2(bytes, CONSTANTS["3gp"], { offset: 4 }); }, ac3: function ac32(bytes) { var offset = getId3Offset2(bytes); return bytesMatch2(bytes, CONSTANTS.ac3, { offset }); }, ts: function ts2(bytes) { if (bytes.length < 189 && bytes.length >= 1) { return bytes[0] === 71; } var i2 = 0; while (i2 + 188 < bytes.length && i2 < 188) { if (bytes[i2] === 71 && bytes[i2 + 188] === 71) { return true; } i2 += 1; } return false; }, flac: function flac2(bytes) { var offset = getId3Offset2(bytes); return bytesMatch2(bytes, CONSTANTS.flac, { offset }); }, ogg: function ogg2(bytes) { return bytesMatch2(bytes, CONSTANTS.ogg); }, avi: function avi2(bytes) { return bytesMatch2(bytes, CONSTANTS.riff) && bytesMatch2(bytes, CONSTANTS.avi, { offset: 8 }); }, wav: function wav2(bytes) { return bytesMatch2(bytes, CONSTANTS.riff) && bytesMatch2(bytes, CONSTANTS.wav, { offset: 8 }); }, "h264": function h2642(bytes) { return findH264Nal2(bytes, 7, 3).length; }, "h265": function h2652(bytes) { return findH265Nal2(bytes, [32, 33], 3).length; } }; var isLikelyTypes = Object.keys(_isLikely).filter(function(t2) { return t2 !== "ts" && t2 !== "h264" && t2 !== "h265"; }).concat(["ts", "h264", "h265"]); isLikelyTypes.forEach(function(type2) { var isLikelyFn = _isLikely[type2]; _isLikely[type2] = function(bytes) { return isLikelyFn(toUint82(bytes)); }; }); var isLikely = _isLikely; var detectContainerForBytes2 = function detectContainerForBytes3(bytes) { bytes = toUint82(bytes); for (var i2 = 0; i2 < isLikelyTypes.length; i2++) { var type2 = isLikelyTypes[i2]; if (isLikely[type2](bytes)) { return type2; } } return ""; }; var isLikelyFmp4MediaSegment2 = function isLikelyFmp4MediaSegment3(bytes) { return findBox2(bytes, ["moof"]).length > 0; }; var ONE_SECOND_IN_TS = 9e4, secondsToVideoTs, secondsToAudioTs, videoTsToSeconds, audioTsToSeconds, audioTsToVideoTs, videoTsToAudioTs, metadataTsToSeconds; secondsToVideoTs = function(seconds) { return seconds * ONE_SECOND_IN_TS; }; secondsToAudioTs = function(seconds, sampleRate) { return seconds * sampleRate; }; videoTsToSeconds = function(timestamp) { return timestamp / ONE_SECOND_IN_TS; }; audioTsToSeconds = function(timestamp, sampleRate) { return timestamp / sampleRate; }; audioTsToVideoTs = function(timestamp, sampleRate) { return secondsToVideoTs(audioTsToSeconds(timestamp, sampleRate)); }; videoTsToAudioTs = function(timestamp, sampleRate) { return secondsToAudioTs(videoTsToSeconds(timestamp), sampleRate); }; metadataTsToSeconds = function(timestamp, timelineStartPts, keepOriginalTimestamps) { return videoTsToSeconds(keepOriginalTimestamps ? timestamp : timestamp - timelineStartPts); }; var clock = { ONE_SECOND_IN_TS, secondsToVideoTs, secondsToAudioTs, videoTsToSeconds, audioTsToSeconds, audioTsToVideoTs, videoTsToAudioTs, metadataTsToSeconds }; function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf2(o2) { return o2.__proto__ || Object.getPrototypeOf(o2); }; return _getPrototypeOf(o); } function _isNativeFunction(fn2) { return Function.toString.call(fn2).indexOf("[native code]") !== -1; } function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? /* @__PURE__ */ new Map() : void 0; _wrapNativeSuper = function _wrapNativeSuper2(Class2) { if (Class2 === null || !_isNativeFunction(Class2)) return Class2; if (typeof Class2 !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class2)) return _cache.get(Class2); _cache.set(Class2, Wrapper); } function Wrapper() { return _construct(Class2, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class2.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class2); }; return _wrapNativeSuper(Class); } /** * @license * Video.js 7.21.4 * Copyright Brightcove, Inc. * Available under Apache License Version 2.0 * * * Includes vtt.js * Available under Apache License Version 2.0 * */ var version$5 = "7.21.4"; var hooks_ = {}; var hooks = function hooks2(type2, fn2) { hooks_[type2] = hooks_[type2] || []; if (fn2) { hooks_[type2] = hooks_[type2].concat(fn2); } return hooks_[type2]; }; var hook = function hook2(type2, fn2) { hooks(type2, fn2); }; var removeHook = function removeHook2(type2, fn2) { var index2 = hooks(type2).indexOf(fn2); if (index2 <= -1) { return false; } hooks_[type2] = hooks_[type2].slice(); hooks_[type2].splice(index2, 1); return true; }; var hookOnce = function hookOnce2(type2, fn2) { hooks(type2, [].concat(fn2).map(function(original) { var wrapper = function wrapper2() { removeHook(type2, wrapper2); return original.apply(void 0, arguments); }; return wrapper; })); }; var FullscreenApi = { prefixed: true }; var apiMap = [ ["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror", "fullscreen"], ["webkitRequestFullscreen", "webkitExitFullscreen", "webkitFullscreenElement", "webkitFullscreenEnabled", "webkitfullscreenchange", "webkitfullscreenerror", "-webkit-full-screen"], ["mozRequestFullScreen", "mozCancelFullScreen", "mozFullScreenElement", "mozFullScreenEnabled", "mozfullscreenchange", "mozfullscreenerror", "-moz-full-screen"], ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError", "-ms-fullscreen"] ]; var specApi = apiMap[0]; var browserApi; for (var i$2 = 0; i$2 < apiMap.length; i$2++) { if (apiMap[i$2][1] in document_1) { browserApi = apiMap[i$2]; break; } } if (browserApi) { for (var _i$1 = 0; _i$1 < browserApi.length; _i$1++) { FullscreenApi[specApi[_i$1]] = browserApi[_i$1]; } FullscreenApi.prefixed = browserApi[0] !== specApi[0]; } var history = []; var LogByTypeFactory = function LogByTypeFactory2(name, log2) { return function(type2, level, args) { var lvl = log2.levels[level]; var lvlRegExp = new RegExp("^(" + lvl + ")$"); if (type2 !== "log") { args.unshift(type2.toUpperCase() + ":"); } args.unshift(name + ":"); if (history) { history.push([].concat(args)); var splice2 = history.length - 1e3; history.splice(0, splice2 > 0 ? splice2 : 0); } if (!window_1.console) { return; } var fn2 = window_1.console[type2]; if (!fn2 && type2 === "debug") { fn2 = window_1.console.info || window_1.console.log; } if (!fn2 || !lvl || !lvlRegExp.test(type2)) { return; } fn2[Array.isArray(args) ? "apply" : "call"](window_1.console, args); }; }; function createLogger$1(name) { var level = "info"; var logByType; var log2 = function log3() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } logByType("log", level, args); }; logByType = LogByTypeFactory(name, log2); log2.createLogger = function(subname) { return createLogger$1(name + ": " + subname); }; log2.levels = { all: "debug|log|warn|error", off: "", debug: "debug|log|warn|error", info: "log|warn|error", warn: "warn|error", error: "error", DEFAULT: level }; log2.level = function(lvl) { if (typeof lvl === "string") { if (!log2.levels.hasOwnProperty(lvl)) { throw new Error('"' + lvl + '" in not a valid log level'); } level = lvl; } return level; }; log2.history = function() { return history ? [].concat(history) : []; }; log2.history.filter = function(fname) { return (history || []).filter(function(historyItem) { return new RegExp(".*" + fname + ".*").test(historyItem[0]); }); }; log2.history.clear = function() { if (history) { history.length = 0; } }; log2.history.disable = function() { if (history !== null) { history.length = 0; history = null; } }; log2.history.enable = function() { if (history === null) { history = []; } }; log2.error = function() { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return logByType("error", level, args); }; log2.warn = function() { for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { args[_key3] = arguments[_key3]; } return logByType("warn", level, args); }; log2.debug = function() { for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { args[_key4] = arguments[_key4]; } return logByType("debug", level, args); }; return log2; } var log$1 = createLogger$1("VIDEOJS"); var createLogger = log$1.createLogger; var toString = Object.prototype.toString; var keys = function keys2(object) { return isObject2(object) ? Object.keys(object) : []; }; function each(object, fn2) { keys(object).forEach(function(key) { return fn2(object[key], key); }); } function reduce(object, fn2, initial) { if (initial === void 0) { initial = 0; } return keys(object).reduce(function(accum, key) { return fn2(accum, object[key], key); }, initial); } function assign(target) { for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { sources[_key - 1] = arguments[_key]; } if (Object.assign) { return _extends$2.apply(void 0, [target].concat(sources)); } sources.forEach(function(source) { if (!source) { return; } each(source, function(value, key) { target[key] = value; }); }); return target; } function isObject2(value) { return !!value && typeof value === "object"; } function isPlain(value) { return isObject2(value) && toString.call(value) === "[object Object]" && value.constructor === Object; } function computedStyle(el, prop) { if (!el || !prop) { return ""; } if (typeof window_1.getComputedStyle === "function") { var computedStyleValue; try { computedStyleValue = window_1.getComputedStyle(el); } catch (e) { return ""; } return computedStyleValue ? computedStyleValue.getPropertyValue(prop) || computedStyleValue[prop] : ""; } return ""; } var USER_AGENT = window_1.navigator && window_1.navigator.userAgent || ""; var webkitVersionMap = /AppleWebKit\/([\d.]+)/i.exec(USER_AGENT); var appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null; var IS_IPOD = /iPod/i.test(USER_AGENT); var IOS_VERSION = function() { var match = USER_AGENT.match(/OS (\d+)_/i); if (match && match[1]) { return match[1]; } return null; }(); var IS_ANDROID = /Android/i.test(USER_AGENT); var ANDROID_VERSION = function() { var match = USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i); if (!match) { return null; } var major = match[1] && parseFloat(match[1]); var minor = match[2] && parseFloat(match[2]); if (major && minor) { return parseFloat(match[1] + "." + match[2]); } else if (major) { return major; } return null; }(); var IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537; var IS_FIREFOX = /Firefox/i.test(USER_AGENT); var IS_EDGE = /Edg/i.test(USER_AGENT); var IS_CHROME = !IS_EDGE && (/Chrome/i.test(USER_AGENT) || /CriOS/i.test(USER_AGENT)); var CHROME_VERSION = function() { var match = USER_AGENT.match(/(Chrome|CriOS)\/(\d+)/); if (match && match[2]) { return parseFloat(match[2]); } return null; }(); var IE_VERSION = function() { var result = /MSIE\s(\d+)\.\d/.exec(USER_AGENT); var version2 = result && parseFloat(result[1]); if (!version2 && /Trident\/7.0/i.test(USER_AGENT) && /rv:11.0/.test(USER_AGENT)) { version2 = 11; } return version2; }(); var IS_SAFARI = /Safari/i.test(USER_AGENT) && !IS_CHROME && !IS_ANDROID && !IS_EDGE; var IS_WINDOWS = /Windows/i.test(USER_AGENT); var TOUCH_ENABLED = Boolean(isReal() && ("ontouchstart" in window_1 || window_1.navigator.maxTouchPoints || window_1.DocumentTouch && window_1.document instanceof window_1.DocumentTouch)); var IS_IPAD = /iPad/i.test(USER_AGENT) || IS_SAFARI && TOUCH_ENABLED && !/iPhone/i.test(USER_AGENT); var IS_IPHONE = /iPhone/i.test(USER_AGENT) && !IS_IPAD; var IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD; var IS_ANY_SAFARI = (IS_SAFARI || IS_IOS) && !IS_CHROME; var browser = /* @__PURE__ */ Object.freeze({ __proto__: null, IS_IPOD, IOS_VERSION, IS_ANDROID, ANDROID_VERSION, IS_NATIVE_ANDROID, IS_FIREFOX, IS_EDGE, IS_CHROME, CHROME_VERSION, IE_VERSION, IS_SAFARI, IS_WINDOWS, TOUCH_ENABLED, IS_IPAD, IS_IPHONE, IS_IOS, IS_ANY_SAFARI }); function isNonBlankString(str) { return typeof str === "string" && Boolean(str.trim()); } function throwIfWhitespace(str) { if (str.indexOf(" ") >= 0) { throw new Error("class has illegal whitespace characters"); } } function classRegExp(className) { return new RegExp("(^|\\s)" + className + "($|\\s)"); } function isReal() { return document_1 === window_1.document; } function isEl(value) { return isObject2(value) && value.nodeType === 1; } function isInFrame() { try { return window_1.parent !== window_1.self; } catch (x) { return true; } } function createQuerier(method) { return function(selector, context) { if (!isNonBlankString(selector)) { return document_1[method](null); } if (isNonBlankString(context)) { context = document_1.querySelector(context); } var ctx = isEl(context) ? context : document_1; return ctx[method] && ctx[method](selector); }; } function createEl(tagName, properties, attributes, content) { if (tagName === void 0) { tagName = "div"; } if (properties === void 0) { properties = {}; } if (attributes === void 0) { attributes = {}; } var el = document_1.createElement(tagName); Object.getOwnPropertyNames(properties).forEach(function(propName) { var val = properties[propName]; if (propName.indexOf("aria-") !== -1 || propName === "role" || propName === "type") { log$1.warn("Setting attributes in the second argument of createEl()\nhas been deprecated. Use the third argument instead.\n" + ("createEl(type, properties, attributes). Attempting to set " + propName + " to " + val + ".")); el.setAttribute(propName, val); } else if (propName === "textContent") { textContent(el, val); } else if (el[propName] !== val || propName === "tabIndex") { el[propName] = val; } }); Object.getOwnPropertyNames(attributes).forEach(function(attrName) { el.setAttribute(attrName, attributes[attrName]); }); if (content) { appendContent(el, content); } return el; } function textContent(el, text) { if (typeof el.textContent === "undefined") { el.innerText = text; } else { el.textContent = text; } return el; } function prependTo(child, parent) { if (parent.firstChild) { parent.insertBefore(child, parent.firstChild); } else { parent.appendChild(child); } } function hasClass(element, classToCheck) { throwIfWhitespace(classToCheck); if (element.classList) { return element.classList.contains(classToCheck); } return classRegExp(classToCheck).test(element.className); } function addClass(element, classToAdd) { if (element.classList) { element.classList.add(classToAdd); } else if (!hasClass(element, classToAdd)) { element.className = (element.className + " " + classToAdd).trim(); } return element; } function removeClass(element, classToRemove) { if (!element) { log$1.warn("removeClass was called with an element that doesn't exist"); return null; } if (element.classList) { element.classList.remove(classToRemove); } else { throwIfWhitespace(classToRemove); element.className = element.className.split(/\s+/).filter(function(c) { return c !== classToRemove; }).join(" "); } return element; } function toggleClass(element, classToToggle, predicate) { var has = hasClass(element, classToToggle); if (typeof predicate === "function") { predicate = predicate(element, classToToggle); } if (typeof predicate !== "boolean") { predicate = !has; } if (predicate === has) { return; } if (predicate) { addClass(element, classToToggle); } else { removeClass(element, classToToggle); } return element; } function setAttributes(el, attributes) { Object.getOwnPropertyNames(attributes).forEach(function(attrName) { var attrValue = attributes[attrName]; if (attrValue === null || typeof attrValue === "undefined" || attrValue === false) { el.removeAttribute(attrName); } else { el.setAttribute(attrName, attrValue === true ? "" : attrValue); } }); } function getAttributes(tag) { var obj = {}; var knownBooleans = ",autoplay,controls,playsinline,loop,muted,default,defaultMuted,"; if (tag && tag.attributes && tag.attributes.length > 0) { var attrs = tag.attributes; for (var i2 = attrs.length - 1; i2 >= 0; i2--) { var attrName = attrs[i2].name; var attrVal = attrs[i2].value; if (typeof tag[attrName] === "boolean" || knownBooleans.indexOf("," + attrName + ",") !== -1) { attrVal = attrVal !== null ? true : false; } obj[attrName] = attrVal; } } return obj; } function getAttribute(el, attribute) { return el.getAttribute(attribute); } function setAttribute(el, attribute, value) { el.setAttribute(attribute, value); } function removeAttribute(el, attribute) { el.removeAttribute(attribute); } function blockTextSelection() { document_1.body.focus(); document_1.onselectstart = function() { return false; }; } function unblockTextSelection() { document_1.onselectstart = function() { return true; }; } function getBoundingClientRect(el) { if (el && el.getBoundingClientRect && el.parentNode) { var rect = el.getBoundingClientRect(); var result = {}; ["bottom", "height", "left", "right", "top", "width"].forEach(function(k) { if (rect[k] !== void 0) { result[k] = rect[k]; } }); if (!result.height) { result.height = parseFloat(computedStyle(el, "height")); } if (!result.width) { result.width = parseFloat(computedStyle(el, "width")); } return result; } } function findPosition(el) { if (!el || el && !el.offsetParent) { return { left: 0, top: 0, width: 0, height: 0 }; } var width2 = el.offsetWidth; var height2 = el.offsetHeight; var left = 0; var top = 0; while (el.offsetParent && el !== document_1[FullscreenApi.fullscreenElement]) { left += el.offsetLeft; top += el.offsetTop; el = el.offsetParent; } return { left, top, width: width2, height: height2 }; } function getPointerPosition(el, event2) { var translated = { x: 0, y: 0 }; if (IS_IOS) { var item = el; while (item && item.nodeName.toLowerCase() !== "html") { var transform3 = computedStyle(item, "transform"); if (/^matrix/.test(transform3)) { var values3 = transform3.slice(7, -1).split(/,\s/).map(Number); translated.x += values3[4]; translated.y += values3[5]; } else if (/^matrix3d/.test(transform3)) { var _values = transform3.slice(9, -1).split(/,\s/).map(Number); translated.x += _values[12]; translated.y += _values[13]; } item = item.parentNode; } } var position2 = {}; var boxTarget = findPosition(event2.target); var box = findPosition(el); var boxW = box.width; var boxH = box.height; var offsetY = event2.offsetY - (box.top - boxTarget.top); var offsetX = event2.offsetX - (box.left - boxTarget.left); if (event2.changedTouches) { offsetX = event2.changedTouches[0].pageX - box.left; offsetY = event2.changedTouches[0].pageY + box.top; if (IS_IOS) { offsetX -= translated.x; offsetY -= translated.y; } } position2.y = 1 - Math.max(0, Math.min(1, offsetY / boxH)); position2.x = Math.max(0, Math.min(1, offsetX / boxW)); return position2; } function isTextNode(value) { return isObject2(value) && value.nodeType === 3; } function emptyEl(el) { while (el.firstChild) { el.removeChild(el.firstChild); } return el; } function normalizeContent(content) { if (typeof content === "function") { content = content(); } return (Array.isArray(content) ? content : [content]).map(function(value) { if (typeof value === "function") { value = value(); } if (isEl(value) || isTextNode(value)) { return value; } if (typeof value === "string" && /\S/.test(value)) { return document_1.createTextNode(value); } }).filter(function(value) { return value; }); } function appendContent(el, content) { normalizeContent(content).forEach(function(node) { return el.appendChild(node); }); return el; } function insertContent(el, content) { return appendContent(emptyEl(el), content); } function isSingleLeftClick(event2) { if (event2.button === void 0 && event2.buttons === void 0) { return true; } if (event2.button === 0 && event2.buttons === void 0) { return true; } if (event2.type === "mouseup" && event2.button === 0 && event2.buttons === 0) { return true; } if (event2.button !== 0 || event2.buttons !== 1) { return false; } return true; } var $ = createQuerier("querySelector"); var $$ = createQuerier("querySelectorAll"); var Dom$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, isReal, isEl, isInFrame, createEl, textContent, prependTo, hasClass, addClass, removeClass, toggleClass, setAttributes, getAttributes, getAttribute, setAttribute, removeAttribute, blockTextSelection, unblockTextSelection, getBoundingClientRect, findPosition, getPointerPosition, isTextNode, emptyEl, normalizeContent, appendContent, insertContent, isSingleLeftClick, $, $$ }); var _windowLoaded = false; var videojs$1; var autoSetup = function autoSetup2() { if (videojs$1.options.autoSetup === false) { return; } var vids = Array.prototype.slice.call(document_1.getElementsByTagName("video")); var audios = Array.prototype.slice.call(document_1.getElementsByTagName("audio")); var divs = Array.prototype.slice.call(document_1.getElementsByTagName("video-js")); var mediaEls = vids.concat(audios, divs); if (mediaEls && mediaEls.length > 0) { for (var i2 = 0, e = mediaEls.length; i2 < e; i2++) { var mediaEl = mediaEls[i2]; if (mediaEl && mediaEl.getAttribute) { if (mediaEl.player === void 0) { var options2 = mediaEl.getAttribute("data-setup"); if (options2 !== null) { videojs$1(mediaEl); } } } else { autoSetupTimeout(1); break; } } } else if (!_windowLoaded) { autoSetupTimeout(1); } }; function autoSetupTimeout(wait, vjs) { if (!isReal()) { return; } if (vjs) { videojs$1 = vjs; } window_1.setTimeout(autoSetup, wait); } function setWindowLoaded() { _windowLoaded = true; window_1.removeEventListener("load", setWindowLoaded); } if (isReal()) { if (document_1.readyState === "complete") { setWindowLoaded(); } else { window_1.addEventListener("load", setWindowLoaded); } } var createStyleElement = function createStyleElement2(className) { var style = document_1.createElement("style"); style.className = className; return style; }; var setTextContent = function setTextContent2(el, content) { if (el.styleSheet) { el.styleSheet.cssText = content; } else { el.textContent = content; } }; var _initialGuid = 3; var _guid = _initialGuid; function newGUID() { return _guid++; } var FakeWeakMap; if (!window_1.WeakMap) { FakeWeakMap = /* @__PURE__ */ function() { function FakeWeakMap2() { this.vdata = "vdata" + Math.floor(window_1.performance && window_1.performance.now() || Date.now()); this.data = {}; } var _proto = FakeWeakMap2.prototype; _proto.set = function set4(key, value) { var access = key[this.vdata] || newGUID(); if (!key[this.vdata]) { key[this.vdata] = access; } this.data[access] = value; return this; }; _proto.get = function get7(key) { var access = key[this.vdata]; if (access) { return this.data[access]; } log$1("We have no data for this element", key); return void 0; }; _proto.has = function has(key) { var access = key[this.vdata]; return access in this.data; }; _proto["delete"] = function _delete(key) { var access = key[this.vdata]; if (access) { delete this.data[access]; delete key[this.vdata]; } }; return FakeWeakMap2; }(); } var DomData = window_1.WeakMap ? /* @__PURE__ */ new WeakMap() : new FakeWeakMap(); function _cleanUpEvents(elem, type2) { if (!DomData.has(elem)) { return; } var data = DomData.get(elem); if (data.handlers[type2].length === 0) { delete data.handlers[type2]; if (elem.removeEventListener) { elem.removeEventListener(type2, data.dispatcher, false); } else if (elem.detachEvent) { elem.detachEvent("on" + type2, data.dispatcher); } } if (Object.getOwnPropertyNames(data.handlers).length <= 0) { delete data.handlers; delete data.dispatcher; delete data.disabled; } if (Object.getOwnPropertyNames(data).length === 0) { DomData["delete"](elem); } } function _handleMultipleEvents(fn2, elem, types, callback2) { types.forEach(function(type2) { fn2(elem, type2, callback2); }); } function fixEvent(event2) { if (event2.fixed_) { return event2; } function returnTrue() { return true; } function returnFalse() { return false; } if (!event2 || !event2.isPropagationStopped || !event2.isImmediatePropagationStopped) { var old = event2 || window_1.event; event2 = {}; for (var key in old) { if (key !== "layerX" && key !== "layerY" && key !== "keyLocation" && key !== "webkitMovementX" && key !== "webkitMovementY" && key !== "path") { if (!(key === "returnValue" && old.preventDefault)) { event2[key] = old[key]; } } } if (!event2.target) { event2.target = event2.srcElement || document_1; } if (!event2.relatedTarget) { event2.relatedTarget = event2.fromElement === event2.target ? event2.toElement : event2.fromElement; } event2.preventDefault = function() { if (old.preventDefault) { old.preventDefault(); } event2.returnValue = false; old.returnValue = false; event2.defaultPrevented = true; }; event2.defaultPrevented = false; event2.stopPropagation = function() { if (old.stopPropagation) { old.stopPropagation(); } event2.cancelBubble = true; old.cancelBubble = true; event2.isPropagationStopped = returnTrue; }; event2.isPropagationStopped = returnFalse; event2.stopImmediatePropagation = function() { if (old.stopImmediatePropagation) { old.stopImmediatePropagation(); } event2.isImmediatePropagationStopped = returnTrue; event2.stopPropagation(); }; event2.isImmediatePropagationStopped = returnFalse; if (event2.clientX !== null && event2.clientX !== void 0) { var doc = document_1.documentElement; var body = document_1.body; event2.pageX = event2.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); event2.pageY = event2.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); } event2.which = event2.charCode || event2.keyCode; if (event2.button !== null && event2.button !== void 0) { event2.button = event2.button & 1 ? 0 : event2.button & 4 ? 1 : event2.button & 2 ? 2 : 0; } } event2.fixed_ = true; return event2; } var _supportsPassive; var supportsPassive = function supportsPassive2() { if (typeof _supportsPassive !== "boolean") { _supportsPassive = false; try { var opts = Object.defineProperty({}, "passive", { get: function get7() { _supportsPassive = true; } }); window_1.addEventListener("test", null, opts); window_1.removeEventListener("test", null, opts); } catch (e) { } } return _supportsPassive; }; var passiveEvents = ["touchstart", "touchmove"]; function on(elem, type2, fn2) { if (Array.isArray(type2)) { return _handleMultipleEvents(on, elem, type2, fn2); } if (!DomData.has(elem)) { DomData.set(elem, {}); } var data = DomData.get(elem); if (!data.handlers) { data.handlers = {}; } if (!data.handlers[type2]) { data.handlers[type2] = []; } if (!fn2.guid) { fn2.guid = newGUID(); } data.handlers[type2].push(fn2); if (!data.dispatcher) { data.disabled = false; data.dispatcher = function(event2, hash) { if (data.disabled) { return; } event2 = fixEvent(event2); var handlers = data.handlers[event2.type]; if (handlers) { var handlersCopy = handlers.slice(0); for (var m = 0, n = handlersCopy.length; m < n; m++) { if (event2.isImmediatePropagationStopped()) { break; } else { try { handlersCopy[m].call(elem, event2, hash); } catch (e) { log$1.error(e); } } } } }; } if (data.handlers[type2].length === 1) { if (elem.addEventListener) { var options2 = false; if (supportsPassive() && passiveEvents.indexOf(type2) > -1) { options2 = { passive: true }; } elem.addEventListener(type2, data.dispatcher, options2); } else if (elem.attachEvent) { elem.attachEvent("on" + type2, data.dispatcher); } } } function off(elem, type2, fn2) { if (!DomData.has(elem)) { return; } var data = DomData.get(elem); if (!data.handlers) { return; } if (Array.isArray(type2)) { return _handleMultipleEvents(off, elem, type2, fn2); } var removeType = function removeType2(el, t3) { data.handlers[t3] = []; _cleanUpEvents(el, t3); }; if (type2 === void 0) { for (var t2 in data.handlers) { if (Object.prototype.hasOwnProperty.call(data.handlers || {}, t2)) { removeType(elem, t2); } } return; } var handlers = data.handlers[type2]; if (!handlers) { return; } if (!fn2) { removeType(elem, type2); return; } if (fn2.guid) { for (var n = 0; n < handlers.length; n++) { if (handlers[n].guid === fn2.guid) { handlers.splice(n--, 1); } } } _cleanUpEvents(elem, type2); } function trigger(elem, event2, hash) { var elemData = DomData.has(elem) ? DomData.get(elem) : {}; var parent = elem.parentNode || elem.ownerDocument; if (typeof event2 === "string") { event2 = { type: event2, target: elem }; } else if (!event2.target) { event2.target = elem; } event2 = fixEvent(event2); if (elemData.dispatcher) { elemData.dispatcher.call(elem, event2, hash); } if (parent && !event2.isPropagationStopped() && event2.bubbles === true) { trigger.call(null, parent, event2, hash); } else if (!parent && !event2.defaultPrevented && event2.target && event2.target[event2.type]) { if (!DomData.has(event2.target)) { DomData.set(event2.target, {}); } var targetData = DomData.get(event2.target); if (event2.target[event2.type]) { targetData.disabled = true; if (typeof event2.target[event2.type] === "function") { event2.target[event2.type](); } targetData.disabled = false; } } return !event2.defaultPrevented; } function one(elem, type2, fn2) { if (Array.isArray(type2)) { return _handleMultipleEvents(one, elem, type2, fn2); } var func = function func2() { off(elem, type2, func2); fn2.apply(this, arguments); }; func.guid = fn2.guid = fn2.guid || newGUID(); on(elem, type2, func); } function any(elem, type2, fn2) { var func = function func2() { off(elem, type2, func2); fn2.apply(this, arguments); }; func.guid = fn2.guid = fn2.guid || newGUID(); on(elem, type2, func); } var Events = /* @__PURE__ */ Object.freeze({ __proto__: null, fixEvent, on, off, trigger, one, any }); var UPDATE_REFRESH_INTERVAL = 30; var bind = function bind2(context, fn2, uid) { if (!fn2.guid) { fn2.guid = newGUID(); } var bound = fn2.bind(context); bound.guid = uid ? uid + "_" + fn2.guid : fn2.guid; return bound; }; var throttle = function throttle2(fn2, wait) { var last = window_1.performance.now(); var throttled = function throttled2() { var now2 = window_1.performance.now(); if (now2 - last >= wait) { fn2.apply(void 0, arguments); last = now2; } }; return throttled; }; var debounce = function debounce2(func, wait, immediate, context) { if (context === void 0) { context = window_1; } var timeout; var cancel = function cancel2() { context.clearTimeout(timeout); timeout = null; }; var debounced = function debounced2() { var self2 = this; var args = arguments; var _later = function later() { timeout = null; _later = null; if (!immediate) { func.apply(self2, args); } }; if (!timeout && immediate) { func.apply(self2, args); } context.clearTimeout(timeout); timeout = context.setTimeout(_later, wait); }; debounced.cancel = cancel; return debounced; }; var EventTarget$2 = function EventTarget() { }; EventTarget$2.prototype.allowedEvents_ = {}; EventTarget$2.prototype.on = function(type2, fn2) { var ael = this.addEventListener; this.addEventListener = function() { }; on(this, type2, fn2); this.addEventListener = ael; }; EventTarget$2.prototype.addEventListener = EventTarget$2.prototype.on; EventTarget$2.prototype.off = function(type2, fn2) { off(this, type2, fn2); }; EventTarget$2.prototype.removeEventListener = EventTarget$2.prototype.off; EventTarget$2.prototype.one = function(type2, fn2) { var ael = this.addEventListener; this.addEventListener = function() { }; one(this, type2, fn2); this.addEventListener = ael; }; EventTarget$2.prototype.any = function(type2, fn2) { var ael = this.addEventListener; this.addEventListener = function() { }; any(this, type2, fn2); this.addEventListener = ael; }; EventTarget$2.prototype.trigger = function(event2) { var type2 = event2.type || event2; if (typeof event2 === "string") { event2 = { type: type2 }; } event2 = fixEvent(event2); if (this.allowedEvents_[type2] && this["on" + type2]) { this["on" + type2](event2); } trigger(this, event2); }; EventTarget$2.prototype.dispatchEvent = EventTarget$2.prototype.trigger; var EVENT_MAP; EventTarget$2.prototype.queueTrigger = function(event2) { var _this = this; if (!EVENT_MAP) { EVENT_MAP = /* @__PURE__ */ new Map(); } var type2 = event2.type || event2; var map = EVENT_MAP.get(this); if (!map) { map = /* @__PURE__ */ new Map(); EVENT_MAP.set(this, map); } var oldTimeout = map.get(type2); map["delete"](type2); window_1.clearTimeout(oldTimeout); var timeout = window_1.setTimeout(function() { map["delete"](type2); if (map.size === 0) { map = null; EVENT_MAP["delete"](_this); } _this.trigger(event2); }, 0); map.set(type2, timeout); }; var objName = function objName2(obj) { if (typeof obj.name === "function") { return obj.name(); } if (typeof obj.name === "string") { return obj.name; } if (obj.name_) { return obj.name_; } if (obj.constructor && obj.constructor.name) { return obj.constructor.name; } return typeof obj; }; var isEvented = function isEvented2(object) { return object instanceof EventTarget$2 || !!object.eventBusEl_ && ["on", "one", "off", "trigger"].every(function(k) { return typeof object[k] === "function"; }); }; var addEventedCallback = function addEventedCallback2(target, callback2) { if (isEvented(target)) { callback2(); } else { if (!target.eventedCallbacks) { target.eventedCallbacks = []; } target.eventedCallbacks.push(callback2); } }; var isValidEventType = function isValidEventType2(type2) { return typeof type2 === "string" && /\S/.test(type2) || Array.isArray(type2) && !!type2.length; }; var validateTarget = function validateTarget2(target, obj, fnName) { if (!target || !target.nodeName && !isEvented(target)) { throw new Error("Invalid target for " + objName(obj) + "#" + fnName + "; must be a DOM node or evented object."); } }; var validateEventType = function validateEventType2(type2, obj, fnName) { if (!isValidEventType(type2)) { throw new Error("Invalid event type for " + objName(obj) + "#" + fnName + "; must be a non-empty string or array."); } }; var validateListener = function validateListener2(listener, obj, fnName) { if (typeof listener !== "function") { throw new Error("Invalid listener for " + objName(obj) + "#" + fnName + "; must be a function."); } }; var normalizeListenArgs = function normalizeListenArgs2(self2, args, fnName) { var isTargetingSelf = args.length < 3 || args[0] === self2 || args[0] === self2.eventBusEl_; var target; var type2; var listener; if (isTargetingSelf) { target = self2.eventBusEl_; if (args.length >= 3) { args.shift(); } type2 = args[0]; listener = args[1]; } else { target = args[0]; type2 = args[1]; listener = args[2]; } validateTarget(target, self2, fnName); validateEventType(type2, self2, fnName); validateListener(listener, self2, fnName); listener = bind(self2, listener); return { isTargetingSelf, target, type: type2, listener }; }; var listen = function listen2(target, method, type2, listener) { validateTarget(target, target, method); if (target.nodeName) { Events[method](target, type2, listener); } else { target[method](type2, listener); } }; var EventedMixin = { on: function on2() { var _this = this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var _normalizeListenArgs = normalizeListenArgs(this, args, "on"), isTargetingSelf = _normalizeListenArgs.isTargetingSelf, target = _normalizeListenArgs.target, type2 = _normalizeListenArgs.type, listener = _normalizeListenArgs.listener; listen(target, "on", type2, listener); if (!isTargetingSelf) { var removeListenerOnDispose = function removeListenerOnDispose2() { return _this.off(target, type2, listener); }; removeListenerOnDispose.guid = listener.guid; var removeRemoverOnTargetDispose = function removeRemoverOnTargetDispose2() { return _this.off("dispose", removeListenerOnDispose); }; removeRemoverOnTargetDispose.guid = listener.guid; listen(this, "on", "dispose", removeListenerOnDispose); listen(target, "on", "dispose", removeRemoverOnTargetDispose); } }, one: function one2() { var _this2 = this; for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } var _normalizeListenArgs2 = normalizeListenArgs(this, args, "one"), isTargetingSelf = _normalizeListenArgs2.isTargetingSelf, target = _normalizeListenArgs2.target, type2 = _normalizeListenArgs2.type, listener = _normalizeListenArgs2.listener; if (isTargetingSelf) { listen(target, "one", type2, listener); } else { var wrapper = function wrapper2() { _this2.off(target, type2, wrapper2); for (var _len3 = arguments.length, largs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { largs[_key3] = arguments[_key3]; } listener.apply(null, largs); }; wrapper.guid = listener.guid; listen(target, "one", type2, wrapper); } }, any: function any2() { var _this3 = this; for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { args[_key4] = arguments[_key4]; } var _normalizeListenArgs3 = normalizeListenArgs(this, args, "any"), isTargetingSelf = _normalizeListenArgs3.isTargetingSelf, target = _normalizeListenArgs3.target, type2 = _normalizeListenArgs3.type, listener = _normalizeListenArgs3.listener; if (isTargetingSelf) { listen(target, "any", type2, listener); } else { var wrapper = function wrapper2() { _this3.off(target, type2, wrapper2); for (var _len5 = arguments.length, largs = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { largs[_key5] = arguments[_key5]; } listener.apply(null, largs); }; wrapper.guid = listener.guid; listen(target, "any", type2, wrapper); } }, off: function off$12(targetOrType, typeOrListener, listener) { if (!targetOrType || isValidEventType(targetOrType)) { off(this.eventBusEl_, targetOrType, typeOrListener); } else { var target = targetOrType; var type2 = typeOrListener; validateTarget(target, this, "off"); validateEventType(type2, this, "off"); validateListener(listener, this, "off"); listener = bind(this, listener); this.off("dispose", listener); if (target.nodeName) { off(target, type2, listener); off(target, "dispose", listener); } else if (isEvented(target)) { target.off(type2, listener); target.off("dispose", listener); } } }, trigger: function trigger$12(event2, hash) { validateTarget(this.eventBusEl_, this, "trigger"); var type2 = event2 && typeof event2 !== "string" ? event2.type : event2; if (!isValidEventType(type2)) { var error = "Invalid event type for " + objName(this) + "#trigger; must be a non-empty string or object with a type key that has a non-empty value."; if (event2) { (this.log || log$1).error(error); } else { throw new Error(error); } } return trigger(this.eventBusEl_, event2, hash); } }; function evented(target, options2) { if (options2 === void 0) { options2 = {}; } var _options = options2, eventBusKey = _options.eventBusKey; if (eventBusKey) { if (!target[eventBusKey].nodeName) { throw new Error('The eventBusKey "' + eventBusKey + '" does not refer to an element.'); } target.eventBusEl_ = target[eventBusKey]; } else { target.eventBusEl_ = createEl("span", { className: "vjs-event-bus" }); } assign(target, EventedMixin); if (target.eventedCallbacks) { target.eventedCallbacks.forEach(function(callback2) { callback2(); }); } target.on("dispose", function() { target.off(); [target, target.el_, target.eventBusEl_].forEach(function(val) { if (val && DomData.has(val)) { DomData["delete"](val); } }); window_1.setTimeout(function() { target.eventBusEl_ = null; }, 0); }); return target; } var StatefulMixin = { state: {}, setState: function setState(stateUpdates) { var _this = this; if (typeof stateUpdates === "function") { stateUpdates = stateUpdates(); } var changes; each(stateUpdates, function(value, key) { if (_this.state[key] !== value) { changes = changes || {}; changes[key] = { from: _this.state[key], to: value }; } _this.state[key] = value; }); if (changes && isEvented(this)) { this.trigger({ changes, type: "statechanged" }); } return changes; } }; function stateful(target, defaultState) { assign(target, StatefulMixin); target.state = assign({}, target.state, defaultState); if (typeof target.handleStateChanged === "function" && isEvented(target)) { target.on("statechanged", target.handleStateChanged); } return target; } var toLowerCase = function toLowerCase2(string) { if (typeof string !== "string") { return string; } return string.replace(/./, function(w) { return w.toLowerCase(); }); }; var toTitleCase$1 = function toTitleCase(string) { if (typeof string !== "string") { return string; } return string.replace(/./, function(w) { return w.toUpperCase(); }); }; var titleCaseEquals = function titleCaseEquals2(str1, str2) { return toTitleCase$1(str1) === toTitleCase$1(str2); }; function mergeOptions$3() { var result = {}; for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) { sources[_key] = arguments[_key]; } sources.forEach(function(source) { if (!source) { return; } each(source, function(value, key) { if (!isPlain(value)) { result[key] = value; return; } if (!isPlain(result[key])) { result[key] = {}; } result[key] = mergeOptions$3(result[key], value); }); }); return result; } var MapSham = /* @__PURE__ */ function() { function MapSham2() { this.map_ = {}; } var _proto = MapSham2.prototype; _proto.has = function has(key) { return key in this.map_; }; _proto["delete"] = function _delete(key) { var has = this.has(key); delete this.map_[key]; return has; }; _proto.set = function set4(key, value) { this.map_[key] = value; return this; }; _proto.forEach = function forEach(callback2, thisArg) { for (var key in this.map_) { callback2.call(thisArg, this.map_[key], key, this); } }; return MapSham2; }(); var Map$1 = window_1.Map ? window_1.Map : MapSham; var SetSham = /* @__PURE__ */ function() { function SetSham2() { this.set_ = {}; } var _proto = SetSham2.prototype; _proto.has = function has(key) { return key in this.set_; }; _proto["delete"] = function _delete(key) { var has = this.has(key); delete this.set_[key]; return has; }; _proto.add = function add(key) { this.set_[key] = 1; return this; }; _proto.forEach = function forEach(callback2, thisArg) { for (var key in this.set_) { callback2.call(thisArg, key, key, this); } }; return SetSham2; }(); var Set$1 = window_1.Set ? window_1.Set : SetSham; var Component$1 = /* @__PURE__ */ function() { function Component2(player, options2, ready) { var _this = this; if (!player && this.play) { this.player_ = player = this; } else { this.player_ = player; } this.isDisposed_ = false; this.parentComponent_ = null; this.options_ = mergeOptions$3({}, this.options_); options2 = this.options_ = mergeOptions$3(this.options_, options2); this.id_ = options2.id || options2.el && options2.el.id; if (!this.id_) { var id = player && player.id && player.id() || "no_player"; this.id_ = id + "_component_" + newGUID(); } this.name_ = options2.name || null; if (options2.el) { this.el_ = options2.el; } else if (options2.createEl !== false) { this.el_ = this.createEl(); } if (options2.className && this.el_) { options2.className.split(" ").forEach(function(c) { return _this.addClass(c); }); } if (options2.evented !== false) { evented(this, { eventBusKey: this.el_ ? "el_" : null }); this.handleLanguagechange = this.handleLanguagechange.bind(this); this.on(this.player_, "languagechange", this.handleLanguagechange); } stateful(this, this.constructor.defaultState); this.children_ = []; this.childIndex_ = {}; this.childNameIndex_ = {}; this.setTimeoutIds_ = new Set$1(); this.setIntervalIds_ = new Set$1(); this.rafIds_ = new Set$1(); this.namedRafs_ = new Map$1(); this.clearingTimersOnDispose_ = false; if (options2.initChildren !== false) { this.initChildren(); } this.ready(ready); if (options2.reportTouchActivity !== false) { this.enableTouchActivity(); } } var _proto = Component2.prototype; _proto.dispose = function dispose(options2) { if (options2 === void 0) { options2 = {}; } if (this.isDisposed_) { return; } if (this.readyQueue_) { this.readyQueue_.length = 0; } this.trigger({ type: "dispose", bubbles: false }); this.isDisposed_ = true; if (this.children_) { for (var i2 = this.children_.length - 1; i2 >= 0; i2--) { if (this.children_[i2].dispose) { this.children_[i2].dispose(); } } } this.children_ = null; this.childIndex_ = null; this.childNameIndex_ = null; this.parentComponent_ = null; if (this.el_) { if (this.el_.parentNode) { if (options2.restoreEl) { this.el_.parentNode.replaceChild(options2.restoreEl, this.el_); } else { this.el_.parentNode.removeChild(this.el_); } } this.el_ = null; } this.player_ = null; }; _proto.isDisposed = function isDisposed() { return Boolean(this.isDisposed_); }; _proto.player = function player() { return this.player_; }; _proto.options = function options2(obj) { if (!obj) { return this.options_; } this.options_ = mergeOptions$3(this.options_, obj); return this.options_; }; _proto.el = function el() { return this.el_; }; _proto.createEl = function createEl$12(tagName, properties, attributes) { return createEl(tagName, properties, attributes); }; _proto.localize = function localize(string, tokens, defaultValue2) { if (defaultValue2 === void 0) { defaultValue2 = string; } var code = this.player_.language && this.player_.language(); var languages = this.player_.languages && this.player_.languages(); var language = languages && languages[code]; var primaryCode = code && code.split("-")[0]; var primaryLang = languages && languages[primaryCode]; var localizedString = defaultValue2; if (language && language[string]) { localizedString = language[string]; } else if (primaryLang && primaryLang[string]) { localizedString = primaryLang[string]; } if (tokens) { localizedString = localizedString.replace(/\{(\d+)\}/g, function(match, index2) { var value = tokens[index2 - 1]; var ret = value; if (typeof value === "undefined") { ret = match; } return ret; }); } return localizedString; }; _proto.handleLanguagechange = function handleLanguagechange() { }; _proto.contentEl = function contentEl() { return this.contentEl_ || this.el_; }; _proto.id = function id() { return this.id_; }; _proto.name = function name() { return this.name_; }; _proto.children = function children() { return this.children_; }; _proto.getChildById = function getChildById(id) { return this.childIndex_[id]; }; _proto.getChild = function getChild(name) { if (!name) { return; } return this.childNameIndex_[name]; }; _proto.getDescendant = function getDescendant() { for (var _len = arguments.length, names2 = new Array(_len), _key = 0; _key < _len; _key++) { names2[_key] = arguments[_key]; } names2 = names2.reduce(function(acc, n) { return acc.concat(n); }, []); var currentChild = this; for (var i2 = 0; i2 < names2.length; i2++) { currentChild = currentChild.getChild(names2[i2]); if (!currentChild || !currentChild.getChild) { return; } } return currentChild; }; _proto.addChild = function addChild(child, options2, index2) { if (options2 === void 0) { options2 = {}; } if (index2 === void 0) { index2 = this.children_.length; } var component; var componentName; if (typeof child === "string") { componentName = toTitleCase$1(child); var componentClassName = options2.componentClass || componentName; options2.name = componentName; var ComponentClass = Component2.getComponent(componentClassName); if (!ComponentClass) { throw new Error("Component " + componentClassName + " does not exist"); } if (typeof ComponentClass !== "function") { return null; } component = new ComponentClass(this.player_ || this, options2); } else { component = child; } if (component.parentComponent_) { component.parentComponent_.removeChild(component); } this.children_.splice(index2, 0, component); component.parentComponent_ = this; if (typeof component.id === "function") { this.childIndex_[component.id()] = component; } componentName = componentName || component.name && toTitleCase$1(component.name()); if (componentName) { this.childNameIndex_[componentName] = component; this.childNameIndex_[toLowerCase(componentName)] = component; } if (typeof component.el === "function" && component.el()) { var refNode = null; if (this.children_[index2 + 1]) { if (this.children_[index2 + 1].el_) { refNode = this.children_[index2 + 1].el_; } else if (isEl(this.children_[index2 + 1])) { refNode = this.children_[index2 + 1]; } } this.contentEl().insertBefore(component.el(), refNode); } return component; }; _proto.removeChild = function removeChild(component) { if (typeof component === "string") { component = this.getChild(component); } if (!component || !this.children_) { return; } var childFound = false; for (var i2 = this.children_.length - 1; i2 >= 0; i2--) { if (this.children_[i2] === component) { childFound = true; this.children_.splice(i2, 1); break; } } if (!childFound) { return; } component.parentComponent_ = null; this.childIndex_[component.id()] = null; this.childNameIndex_[toTitleCase$1(component.name())] = null; this.childNameIndex_[toLowerCase(component.name())] = null; var compEl = component.el(); if (compEl && compEl.parentNode === this.contentEl()) { this.contentEl().removeChild(component.el()); } }; _proto.initChildren = function initChildren() { var _this2 = this; var children = this.options_.children; if (children) { var parentOptions = this.options_; var handleAdd = function handleAdd2(child) { var name = child.name; var opts = child.opts; if (parentOptions[name] !== void 0) { opts = parentOptions[name]; } if (opts === false) { return; } if (opts === true) { opts = {}; } opts.playerOptions = _this2.options_.playerOptions; var newChild = _this2.addChild(name, opts); if (newChild) { _this2[name] = newChild; } }; var workingChildren; var Tech2 = Component2.getComponent("Tech"); if (Array.isArray(children)) { workingChildren = children; } else { workingChildren = Object.keys(children); } workingChildren.concat(Object.keys(this.options_).filter(function(child) { return !workingChildren.some(function(wchild) { if (typeof wchild === "string") { return child === wchild; } return child === wchild.name; }); })).map(function(child) { var name; var opts; if (typeof child === "string") { name = child; opts = children[name] || _this2.options_[name] || {}; } else { name = child.name; opts = child; } return { name, opts }; }).filter(function(child) { var c = Component2.getComponent(child.opts.componentClass || toTitleCase$1(child.name)); return c && !Tech2.isTech(c); }).forEach(handleAdd); } }; _proto.buildCSSClass = function buildCSSClass() { return ""; }; _proto.ready = function ready(fn2, sync) { if (sync === void 0) { sync = false; } if (!fn2) { return; } if (!this.isReady_) { this.readyQueue_ = this.readyQueue_ || []; this.readyQueue_.push(fn2); return; } if (sync) { fn2.call(this); } else { this.setTimeout(fn2, 1); } }; _proto.triggerReady = function triggerReady() { this.isReady_ = true; this.setTimeout(function() { var readyQueue = this.readyQueue_; this.readyQueue_ = []; if (readyQueue && readyQueue.length > 0) { readyQueue.forEach(function(fn2) { fn2.call(this); }, this); } this.trigger("ready"); }, 1); }; _proto.$ = function $$12(selector, context) { return $(selector, context || this.contentEl()); }; _proto.$$ = function $$$12(selector, context) { return $$(selector, context || this.contentEl()); }; _proto.hasClass = function hasClass$12(classToCheck) { return hasClass(this.el_, classToCheck); }; _proto.addClass = function addClass$12(classToAdd) { addClass(this.el_, classToAdd); }; _proto.removeClass = function removeClass$12(classToRemove) { removeClass(this.el_, classToRemove); }; _proto.toggleClass = function toggleClass$12(classToToggle, predicate) { toggleClass(this.el_, classToToggle, predicate); }; _proto.show = function show() { this.removeClass("vjs-hidden"); }; _proto.hide = function hide() { this.addClass("vjs-hidden"); }; _proto.lockShowing = function lockShowing() { this.addClass("vjs-lock-showing"); }; _proto.unlockShowing = function unlockShowing() { this.removeClass("vjs-lock-showing"); }; _proto.getAttribute = function getAttribute$12(attribute) { return getAttribute(this.el_, attribute); }; _proto.setAttribute = function setAttribute$12(attribute, value) { setAttribute(this.el_, attribute, value); }; _proto.removeAttribute = function removeAttribute$12(attribute) { removeAttribute(this.el_, attribute); }; _proto.width = function width2(num, skipListeners) { return this.dimension("width", num, skipListeners); }; _proto.height = function height2(num, skipListeners) { return this.dimension("height", num, skipListeners); }; _proto.dimensions = function dimensions(width2, height2) { this.width(width2, true); this.height(height2); }; _proto.dimension = function dimension(widthOrHeight, num, skipListeners) { if (num !== void 0) { if (num === null || num !== num) { num = 0; } if (("" + num).indexOf("%") !== -1 || ("" + num).indexOf("px") !== -1) { this.el_.style[widthOrHeight] = num; } else if (num === "auto") { this.el_.style[widthOrHeight] = ""; } else { this.el_.style[widthOrHeight] = num + "px"; } if (!skipListeners) { this.trigger("componentresize"); } return; } if (!this.el_) { return 0; } var val = this.el_.style[widthOrHeight]; var pxIndex = val.indexOf("px"); if (pxIndex !== -1) { return parseInt(val.slice(0, pxIndex), 10); } return parseInt(this.el_["offset" + toTitleCase$1(widthOrHeight)], 10); }; _proto.currentDimension = function currentDimension(widthOrHeight) { var computedWidthOrHeight = 0; if (widthOrHeight !== "width" && widthOrHeight !== "height") { throw new Error("currentDimension only accepts width or height value"); } computedWidthOrHeight = computedStyle(this.el_, widthOrHeight); computedWidthOrHeight = parseFloat(computedWidthOrHeight); if (computedWidthOrHeight === 0 || isNaN(computedWidthOrHeight)) { var rule = "offset" + toTitleCase$1(widthOrHeight); computedWidthOrHeight = this.el_[rule]; } return computedWidthOrHeight; }; _proto.currentDimensions = function currentDimensions() { return { width: this.currentDimension("width"), height: this.currentDimension("height") }; }; _proto.currentWidth = function currentWidth() { return this.currentDimension("width"); }; _proto.currentHeight = function currentHeight() { return this.currentDimension("height"); }; _proto.focus = function focus() { this.el_.focus(); }; _proto.blur = function blur() { this.el_.blur(); }; _proto.handleKeyDown = function handleKeyDown(event2) { if (this.player_) { if (!keycode.isEventKey(event2, "Tab")) { event2.stopPropagation(); } this.player_.handleKeyDown(event2); } }; _proto.handleKeyPress = function handleKeyPress(event2) { this.handleKeyDown(event2); }; _proto.emitTapEvents = function emitTapEvents() { var touchStart = 0; var firstTouch = null; var tapMovementThreshold = 10; var touchTimeThreshold = 200; var couldBeTap; this.on("touchstart", function(event2) { if (event2.touches.length === 1) { firstTouch = { pageX: event2.touches[0].pageX, pageY: event2.touches[0].pageY }; touchStart = window_1.performance.now(); couldBeTap = true; } }); this.on("touchmove", function(event2) { if (event2.touches.length > 1) { couldBeTap = false; } else if (firstTouch) { var xdiff = event2.touches[0].pageX - firstTouch.pageX; var ydiff = event2.touches[0].pageY - firstTouch.pageY; var touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff); if (touchDistance > tapMovementThreshold) { couldBeTap = false; } } }); var noTap = function noTap2() { couldBeTap = false; }; this.on("touchleave", noTap); this.on("touchcancel", noTap); this.on("touchend", function(event2) { firstTouch = null; if (couldBeTap === true) { var touchTime = window_1.performance.now() - touchStart; if (touchTime < touchTimeThreshold) { event2.preventDefault(); this.trigger("tap"); } } }); }; _proto.enableTouchActivity = function enableTouchActivity() { if (!this.player() || !this.player().reportUserActivity) { return; } var report = bind(this.player(), this.player().reportUserActivity); var touchHolding; this.on("touchstart", function() { report(); this.clearInterval(touchHolding); touchHolding = this.setInterval(report, 250); }); var touchEnd = function touchEnd2(event2) { report(); this.clearInterval(touchHolding); }; this.on("touchmove", report); this.on("touchend", touchEnd); this.on("touchcancel", touchEnd); }; _proto.setTimeout = function setTimeout2(fn2, timeout) { var _this3 = this; var timeoutId; fn2 = bind(this, fn2); this.clearTimersOnDispose_(); timeoutId = window_1.setTimeout(function() { if (_this3.setTimeoutIds_.has(timeoutId)) { _this3.setTimeoutIds_["delete"](timeoutId); } fn2(); }, timeout); this.setTimeoutIds_.add(timeoutId); return timeoutId; }; _proto.clearTimeout = function clearTimeout2(timeoutId) { if (this.setTimeoutIds_.has(timeoutId)) { this.setTimeoutIds_["delete"](timeoutId); window_1.clearTimeout(timeoutId); } return timeoutId; }; _proto.setInterval = function setInterval2(fn2, interval) { fn2 = bind(this, fn2); this.clearTimersOnDispose_(); var intervalId = window_1.setInterval(fn2, interval); this.setIntervalIds_.add(intervalId); return intervalId; }; _proto.clearInterval = function clearInterval2(intervalId) { if (this.setIntervalIds_.has(intervalId)) { this.setIntervalIds_["delete"](intervalId); window_1.clearInterval(intervalId); } return intervalId; }; _proto.requestAnimationFrame = function requestAnimationFrame(fn2) { var _this4 = this; if (!this.supportsRaf_) { return this.setTimeout(fn2, 1e3 / 60); } this.clearTimersOnDispose_(); var id; fn2 = bind(this, fn2); id = window_1.requestAnimationFrame(function() { if (_this4.rafIds_.has(id)) { _this4.rafIds_["delete"](id); } fn2(); }); this.rafIds_.add(id); return id; }; _proto.requestNamedAnimationFrame = function requestNamedAnimationFrame(name, fn2) { var _this5 = this; if (this.namedRafs_.has(name)) { return; } this.clearTimersOnDispose_(); fn2 = bind(this, fn2); var id = this.requestAnimationFrame(function() { fn2(); if (_this5.namedRafs_.has(name)) { _this5.namedRafs_["delete"](name); } }); this.namedRafs_.set(name, id); return name; }; _proto.cancelNamedAnimationFrame = function cancelNamedAnimationFrame(name) { if (!this.namedRafs_.has(name)) { return; } this.cancelAnimationFrame(this.namedRafs_.get(name)); this.namedRafs_["delete"](name); }; _proto.cancelAnimationFrame = function cancelAnimationFrame(id) { if (!this.supportsRaf_) { return this.clearTimeout(id); } if (this.rafIds_.has(id)) { this.rafIds_["delete"](id); window_1.cancelAnimationFrame(id); } return id; }; _proto.clearTimersOnDispose_ = function clearTimersOnDispose_() { var _this6 = this; if (this.clearingTimersOnDispose_) { return; } this.clearingTimersOnDispose_ = true; this.one("dispose", function() { [["namedRafs_", "cancelNamedAnimationFrame"], ["rafIds_", "cancelAnimationFrame"], ["setTimeoutIds_", "clearTimeout"], ["setIntervalIds_", "clearInterval"]].forEach(function(_ref) { var idName = _ref[0], cancelName = _ref[1]; _this6[idName].forEach(function(val, key) { return _this6[cancelName](key); }); }); _this6.clearingTimersOnDispose_ = false; }); }; Component2.registerComponent = function registerComponent(name, ComponentToRegister) { if (typeof name !== "string" || !name) { throw new Error('Illegal component name, "' + name + '"; must be a non-empty string.'); } var Tech2 = Component2.getComponent("Tech"); var isTech = Tech2 && Tech2.isTech(ComponentToRegister); var isComp = Component2 === ComponentToRegister || Component2.prototype.isPrototypeOf(ComponentToRegister.prototype); if (isTech || !isComp) { var reason; if (isTech) { reason = "techs must be registered using Tech.registerTech()"; } else { reason = "must be a Component subclass"; } throw new Error('Illegal component, "' + name + '"; ' + reason + "."); } name = toTitleCase$1(name); if (!Component2.components_) { Component2.components_ = {}; } var Player2 = Component2.getComponent("Player"); if (name === "Player" && Player2 && Player2.players) { var players = Player2.players; var playerNames = Object.keys(players); if (players && playerNames.length > 0 && playerNames.map(function(pname) { return players[pname]; }).every(Boolean)) { throw new Error("Can not register Player component after player has been created."); } } Component2.components_[name] = ComponentToRegister; Component2.components_[toLowerCase(name)] = ComponentToRegister; return ComponentToRegister; }; Component2.getComponent = function getComponent(name) { if (!name || !Component2.components_) { return; } return Component2.components_[name]; }; return Component2; }(); Component$1.prototype.supportsRaf_ = typeof window_1.requestAnimationFrame === "function" && typeof window_1.cancelAnimationFrame === "function"; Component$1.registerComponent("Component", Component$1); function rangeCheck(fnName, index2, maxIndex) { if (typeof index2 !== "number" || index2 < 0 || index2 > maxIndex) { throw new Error("Failed to execute '" + fnName + "' on 'TimeRanges': The index provided (" + index2 + ") is non-numeric or out of bounds (0-" + maxIndex + ")."); } } function getRange(fnName, valueIndex, ranges, rangeIndex) { rangeCheck(fnName, rangeIndex, ranges.length - 1); return ranges[rangeIndex][valueIndex]; } function createTimeRangesObj(ranges) { var timeRangesObj; if (ranges === void 0 || ranges.length === 0) { timeRangesObj = { length: 0, start: function start2() { throw new Error("This TimeRanges object is empty"); }, end: function end() { throw new Error("This TimeRanges object is empty"); } }; } else { timeRangesObj = { length: ranges.length, start: getRange.bind(null, "start", 0, ranges), end: getRange.bind(null, "end", 1, ranges) }; } if (window_1.Symbol && window_1.Symbol.iterator) { timeRangesObj[window_1.Symbol.iterator] = function() { return (ranges || []).values(); }; } return timeRangesObj; } function createTimeRanges(start2, end) { if (Array.isArray(start2)) { return createTimeRangesObj(start2); } else if (start2 === void 0 || end === void 0) { return createTimeRangesObj(); } return createTimeRangesObj([[start2, end]]); } function bufferedPercent(buffered, duration5) { var bufferedDuration = 0; var start2; var end; if (!duration5) { return 0; } if (!buffered || !buffered.length) { buffered = createTimeRanges(0, 0); } for (var i2 = 0; i2 < buffered.length; i2++) { start2 = buffered.start(i2); end = buffered.end(i2); if (end > duration5) { end = duration5; } bufferedDuration += end - start2; } return bufferedDuration / duration5; } function MediaError(value) { if (value instanceof MediaError) { return value; } if (typeof value === "number") { this.code = value; } else if (typeof value === "string") { this.message = value; } else if (isObject2(value)) { if (typeof value.code === "number") { this.code = value.code; } assign(this, value); } if (!this.message) { this.message = MediaError.defaultMessages[this.code] || ""; } } MediaError.prototype.code = 0; MediaError.prototype.message = ""; MediaError.prototype.status = null; MediaError.errorTypes = ["MEDIA_ERR_CUSTOM", "MEDIA_ERR_ABORTED", "MEDIA_ERR_NETWORK", "MEDIA_ERR_DECODE", "MEDIA_ERR_SRC_NOT_SUPPORTED", "MEDIA_ERR_ENCRYPTED"]; MediaError.defaultMessages = { 1: "You aborted the media playback", 2: "A network error caused the media download to fail part-way.", 3: "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.", 4: "The media could not be loaded, either because the server or network failed or because the format is not supported.", 5: "The media is encrypted and we do not have the keys to decrypt it." }; for (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) { MediaError[MediaError.errorTypes[errNum]] = errNum; MediaError.prototype[MediaError.errorTypes[errNum]] = errNum; } function isPromise(value) { return value !== void 0 && value !== null && typeof value.then === "function"; } function silencePromise(value) { if (isPromise(value)) { value.then(null, function(e) { }); } } var trackToJson_ = function trackToJson_2(track) { var ret = ["kind", "label", "language", "id", "inBandMetadataTrackDispatchType", "mode", "src"].reduce(function(acc, prop, i2) { if (track[prop]) { acc[prop] = track[prop]; } return acc; }, { cues: track.cues && Array.prototype.map.call(track.cues, function(cue) { return { startTime: cue.startTime, endTime: cue.endTime, text: cue.text, id: cue.id }; }) }); return ret; }; var textTracksToJson = function textTracksToJson2(tech) { var trackEls = tech.$$("track"); var trackObjs = Array.prototype.map.call(trackEls, function(t2) { return t2.track; }); var tracks = Array.prototype.map.call(trackEls, function(trackEl) { var json = trackToJson_(trackEl.track); if (trackEl.src) { json.src = trackEl.src; } return json; }); return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) { return trackObjs.indexOf(track) === -1; }).map(trackToJson_)); }; var jsonToTextTracks = function jsonToTextTracks2(json, tech) { json.forEach(function(track) { var addedTrack = tech.addRemoteTextTrack(track).track; if (!track.src && track.cues) { track.cues.forEach(function(cue) { return addedTrack.addCue(cue); }); } }); return tech.textTracks(); }; var textTrackConverter = { textTracksToJson, jsonToTextTracks, trackToJson_ }; var MODAL_CLASS_NAME = "vjs-modal-dialog"; var ModalDialog = /* @__PURE__ */ function(_Component) { _inheritsLoose(ModalDialog2, _Component); function ModalDialog2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.handleKeyDown_ = function(e) { return _this.handleKeyDown(e); }; _this.close_ = function(e) { return _this.close(e); }; _this.opened_ = _this.hasBeenOpened_ = _this.hasBeenFilled_ = false; _this.closeable(!_this.options_.uncloseable); _this.content(_this.options_.content); _this.contentEl_ = createEl("div", { className: MODAL_CLASS_NAME + "-content" }, { role: "document" }); _this.descEl_ = createEl("p", { className: MODAL_CLASS_NAME + "-description vjs-control-text", id: _this.el().getAttribute("aria-describedby") }); textContent(_this.descEl_, _this.description()); _this.el_.appendChild(_this.descEl_); _this.el_.appendChild(_this.contentEl_); return _this; } var _proto = ModalDialog2.prototype; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: this.buildCSSClass(), tabIndex: -1 }, { "aria-describedby": this.id() + "_description", "aria-hidden": "true", "aria-label": this.label(), "role": "dialog" }); }; _proto.dispose = function dispose() { this.contentEl_ = null; this.descEl_ = null; this.previouslyActiveEl_ = null; _Component.prototype.dispose.call(this); }; _proto.buildCSSClass = function buildCSSClass() { return MODAL_CLASS_NAME + " vjs-hidden " + _Component.prototype.buildCSSClass.call(this); }; _proto.label = function label2() { return this.localize(this.options_.label || "Modal Window"); }; _proto.description = function description() { var desc = this.options_.description || this.localize("This is a modal window."); if (this.closeable()) { desc += " " + this.localize("This modal can be closed by pressing the Escape key or activating the close button."); } return desc; }; _proto.open = function open() { if (!this.opened_) { var player = this.player(); this.trigger("beforemodalopen"); this.opened_ = true; if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) { this.fill(); } this.wasPlaying_ = !player.paused(); if (this.options_.pauseOnOpen && this.wasPlaying_) { player.pause(); } this.on("keydown", this.handleKeyDown_); this.hadControls_ = player.controls(); player.controls(false); this.show(); this.conditionalFocus_(); this.el().setAttribute("aria-hidden", "false"); this.trigger("modalopen"); this.hasBeenOpened_ = true; } }; _proto.opened = function opened(value) { if (typeof value === "boolean") { this[value ? "open" : "close"](); } return this.opened_; }; _proto.close = function close() { if (!this.opened_) { return; } var player = this.player(); this.trigger("beforemodalclose"); this.opened_ = false; if (this.wasPlaying_ && this.options_.pauseOnOpen) { player.play(); } this.off("keydown", this.handleKeyDown_); if (this.hadControls_) { player.controls(true); } this.hide(); this.el().setAttribute("aria-hidden", "true"); this.trigger("modalclose"); this.conditionalBlur_(); if (this.options_.temporary) { this.dispose(); } }; _proto.closeable = function closeable(value) { if (typeof value === "boolean") { var closeable2 = this.closeable_ = !!value; var close = this.getChild("closeButton"); if (closeable2 && !close) { var temp = this.contentEl_; this.contentEl_ = this.el_; close = this.addChild("closeButton", { controlText: "Close Modal Dialog" }); this.contentEl_ = temp; this.on(close, "close", this.close_); } if (!closeable2 && close) { this.off(close, "close", this.close_); this.removeChild(close); close.dispose(); } } return this.closeable_; }; _proto.fill = function fill() { this.fillWith(this.content()); }; _proto.fillWith = function fillWith(content) { var contentEl = this.contentEl(); var parentEl = contentEl.parentNode; var nextSiblingEl = contentEl.nextSibling; this.trigger("beforemodalfill"); this.hasBeenFilled_ = true; parentEl.removeChild(contentEl); this.empty(); insertContent(contentEl, content); this.trigger("modalfill"); if (nextSiblingEl) { parentEl.insertBefore(contentEl, nextSiblingEl); } else { parentEl.appendChild(contentEl); } var closeButton = this.getChild("closeButton"); if (closeButton) { parentEl.appendChild(closeButton.el_); } }; _proto.empty = function empty() { this.trigger("beforemodalempty"); emptyEl(this.contentEl()); this.trigger("modalempty"); }; _proto.content = function content(value) { if (typeof value !== "undefined") { this.content_ = value; } return this.content_; }; _proto.conditionalFocus_ = function conditionalFocus_() { var activeEl = document_1.activeElement; var playerEl = this.player_.el_; this.previouslyActiveEl_ = null; if (playerEl.contains(activeEl) || playerEl === activeEl) { this.previouslyActiveEl_ = activeEl; this.focus(); } }; _proto.conditionalBlur_ = function conditionalBlur_() { if (this.previouslyActiveEl_) { this.previouslyActiveEl_.focus(); this.previouslyActiveEl_ = null; } }; _proto.handleKeyDown = function handleKeyDown(event2) { event2.stopPropagation(); if (keycode.isEventKey(event2, "Escape") && this.closeable()) { event2.preventDefault(); this.close(); return; } if (!keycode.isEventKey(event2, "Tab")) { return; } var focusableEls = this.focusableEls_(); var activeEl = this.el_.querySelector(":focus"); var focusIndex; for (var i2 = 0; i2 < focusableEls.length; i2++) { if (activeEl === focusableEls[i2]) { focusIndex = i2; break; } } if (document_1.activeElement === this.el_) { focusIndex = 0; } if (event2.shiftKey && focusIndex === 0) { focusableEls[focusableEls.length - 1].focus(); event2.preventDefault(); } else if (!event2.shiftKey && focusIndex === focusableEls.length - 1) { focusableEls[0].focus(); event2.preventDefault(); } }; _proto.focusableEls_ = function focusableEls_() { var allChildren = this.el_.querySelectorAll("*"); return Array.prototype.filter.call(allChildren, function(child) { return (child instanceof window_1.HTMLAnchorElement || child instanceof window_1.HTMLAreaElement) && child.hasAttribute("href") || (child instanceof window_1.HTMLInputElement || child instanceof window_1.HTMLSelectElement || child instanceof window_1.HTMLTextAreaElement || child instanceof window_1.HTMLButtonElement) && !child.hasAttribute("disabled") || child instanceof window_1.HTMLIFrameElement || child instanceof window_1.HTMLObjectElement || child instanceof window_1.HTMLEmbedElement || child.hasAttribute("tabindex") && child.getAttribute("tabindex") !== -1 || child.hasAttribute("contenteditable"); }); }; return ModalDialog2; }(Component$1); ModalDialog.prototype.options_ = { pauseOnOpen: true, temporary: true }; Component$1.registerComponent("ModalDialog", ModalDialog); var TrackList = /* @__PURE__ */ function(_EventTarget) { _inheritsLoose(TrackList2, _EventTarget); function TrackList2(tracks) { var _this; if (tracks === void 0) { tracks = []; } _this = _EventTarget.call(this) || this; _this.tracks_ = []; Object.defineProperty(_assertThisInitialized(_this), "length", { get: function get7() { return this.tracks_.length; } }); for (var i2 = 0; i2 < tracks.length; i2++) { _this.addTrack(tracks[i2]); } return _this; } var _proto = TrackList2.prototype; _proto.addTrack = function addTrack(track) { var _this2 = this; var index2 = this.tracks_.length; if (!("" + index2 in this)) { Object.defineProperty(this, index2, { get: function get7() { return this.tracks_[index2]; } }); } if (this.tracks_.indexOf(track) === -1) { this.tracks_.push(track); this.trigger({ track, type: "addtrack", target: this }); } track.labelchange_ = function() { _this2.trigger({ track, type: "labelchange", target: _this2 }); }; if (isEvented(track)) { track.addEventListener("labelchange", track.labelchange_); } }; _proto.removeTrack = function removeTrack(rtrack) { var track; for (var i2 = 0, l = this.length; i2 < l; i2++) { if (this[i2] === rtrack) { track = this[i2]; if (track.off) { track.off(); } this.tracks_.splice(i2, 1); break; } } if (!track) { return; } this.trigger({ track, type: "removetrack", target: this }); }; _proto.getTrackById = function getTrackById(id) { var result = null; for (var i2 = 0, l = this.length; i2 < l; i2++) { var track = this[i2]; if (track.id === id) { result = track; break; } } return result; }; return TrackList2; }(EventTarget$2); TrackList.prototype.allowedEvents_ = { change: "change", addtrack: "addtrack", removetrack: "removetrack", labelchange: "labelchange" }; for (var event$1 in TrackList.prototype.allowedEvents_) { TrackList.prototype["on" + event$1] = null; } var disableOthers$1 = function disableOthers(list, track) { for (var i2 = 0; i2 < list.length; i2++) { if (!Object.keys(list[i2]).length || track.id === list[i2].id) { continue; } list[i2].enabled = false; } }; var AudioTrackList = /* @__PURE__ */ function(_TrackList) { _inheritsLoose(AudioTrackList2, _TrackList); function AudioTrackList2(tracks) { var _this; if (tracks === void 0) { tracks = []; } for (var i2 = tracks.length - 1; i2 >= 0; i2--) { if (tracks[i2].enabled) { disableOthers$1(tracks, tracks[i2]); break; } } _this = _TrackList.call(this, tracks) || this; _this.changing_ = false; return _this; } var _proto = AudioTrackList2.prototype; _proto.addTrack = function addTrack(track) { var _this2 = this; if (track.enabled) { disableOthers$1(this, track); } _TrackList.prototype.addTrack.call(this, track); if (!track.addEventListener) { return; } track.enabledChange_ = function() { if (_this2.changing_) { return; } _this2.changing_ = true; disableOthers$1(_this2, track); _this2.changing_ = false; _this2.trigger("change"); }; track.addEventListener("enabledchange", track.enabledChange_); }; _proto.removeTrack = function removeTrack(rtrack) { _TrackList.prototype.removeTrack.call(this, rtrack); if (rtrack.removeEventListener && rtrack.enabledChange_) { rtrack.removeEventListener("enabledchange", rtrack.enabledChange_); rtrack.enabledChange_ = null; } }; return AudioTrackList2; }(TrackList); var disableOthers2 = function disableOthers3(list, track) { for (var i2 = 0; i2 < list.length; i2++) { if (!Object.keys(list[i2]).length || track.id === list[i2].id) { continue; } list[i2].selected = false; } }; var VideoTrackList = /* @__PURE__ */ function(_TrackList) { _inheritsLoose(VideoTrackList2, _TrackList); function VideoTrackList2(tracks) { var _this; if (tracks === void 0) { tracks = []; } for (var i2 = tracks.length - 1; i2 >= 0; i2--) { if (tracks[i2].selected) { disableOthers2(tracks, tracks[i2]); break; } } _this = _TrackList.call(this, tracks) || this; _this.changing_ = false; Object.defineProperty(_assertThisInitialized(_this), "selectedIndex", { get: function get7() { for (var _i = 0; _i < this.length; _i++) { if (this[_i].selected) { return _i; } } return -1; }, set: function set4() { } }); return _this; } var _proto = VideoTrackList2.prototype; _proto.addTrack = function addTrack(track) { var _this2 = this; if (track.selected) { disableOthers2(this, track); } _TrackList.prototype.addTrack.call(this, track); if (!track.addEventListener) { return; } track.selectedChange_ = function() { if (_this2.changing_) { return; } _this2.changing_ = true; disableOthers2(_this2, track); _this2.changing_ = false; _this2.trigger("change"); }; track.addEventListener("selectedchange", track.selectedChange_); }; _proto.removeTrack = function removeTrack(rtrack) { _TrackList.prototype.removeTrack.call(this, rtrack); if (rtrack.removeEventListener && rtrack.selectedChange_) { rtrack.removeEventListener("selectedchange", rtrack.selectedChange_); rtrack.selectedChange_ = null; } }; return VideoTrackList2; }(TrackList); var TextTrackList = /* @__PURE__ */ function(_TrackList) { _inheritsLoose(TextTrackList2, _TrackList); function TextTrackList2() { return _TrackList.apply(this, arguments) || this; } var _proto = TextTrackList2.prototype; _proto.addTrack = function addTrack(track) { var _this = this; _TrackList.prototype.addTrack.call(this, track); if (!this.queueChange_) { this.queueChange_ = function() { return _this.queueTrigger("change"); }; } if (!this.triggerSelectedlanguagechange) { this.triggerSelectedlanguagechange_ = function() { return _this.trigger("selectedlanguagechange"); }; } track.addEventListener("modechange", this.queueChange_); var nonLanguageTextTrackKind = ["metadata", "chapters"]; if (nonLanguageTextTrackKind.indexOf(track.kind) === -1) { track.addEventListener("modechange", this.triggerSelectedlanguagechange_); } }; _proto.removeTrack = function removeTrack(rtrack) { _TrackList.prototype.removeTrack.call(this, rtrack); if (rtrack.removeEventListener) { if (this.queueChange_) { rtrack.removeEventListener("modechange", this.queueChange_); } if (this.selectedlanguagechange_) { rtrack.removeEventListener("modechange", this.triggerSelectedlanguagechange_); } } }; return TextTrackList2; }(TrackList); var HtmlTrackElementList = /* @__PURE__ */ function() { function HtmlTrackElementList2(trackElements) { if (trackElements === void 0) { trackElements = []; } this.trackElements_ = []; Object.defineProperty(this, "length", { get: function get7() { return this.trackElements_.length; } }); for (var i2 = 0, length = trackElements.length; i2 < length; i2++) { this.addTrackElement_(trackElements[i2]); } } var _proto = HtmlTrackElementList2.prototype; _proto.addTrackElement_ = function addTrackElement_(trackElement) { var index2 = this.trackElements_.length; if (!("" + index2 in this)) { Object.defineProperty(this, index2, { get: function get7() { return this.trackElements_[index2]; } }); } if (this.trackElements_.indexOf(trackElement) === -1) { this.trackElements_.push(trackElement); } }; _proto.getTrackElementByTrack_ = function getTrackElementByTrack_(track) { var trackElement_; for (var i2 = 0, length = this.trackElements_.length; i2 < length; i2++) { if (track === this.trackElements_[i2].track) { trackElement_ = this.trackElements_[i2]; break; } } return trackElement_; }; _proto.removeTrackElement_ = function removeTrackElement_(trackElement) { for (var i2 = 0, length = this.trackElements_.length; i2 < length; i2++) { if (trackElement === this.trackElements_[i2]) { if (this.trackElements_[i2].track && typeof this.trackElements_[i2].track.off === "function") { this.trackElements_[i2].track.off(); } if (typeof this.trackElements_[i2].off === "function") { this.trackElements_[i2].off(); } this.trackElements_.splice(i2, 1); break; } } }; return HtmlTrackElementList2; }(); var TextTrackCueList = /* @__PURE__ */ function() { function TextTrackCueList2(cues) { TextTrackCueList2.prototype.setCues_.call(this, cues); Object.defineProperty(this, "length", { get: function get7() { return this.length_; } }); } var _proto = TextTrackCueList2.prototype; _proto.setCues_ = function setCues_(cues) { var oldLength = this.length || 0; var i2 = 0; var l = cues.length; this.cues_ = cues; this.length_ = cues.length; var defineProp = function defineProp2(index2) { if (!("" + index2 in this)) { Object.defineProperty(this, "" + index2, { get: function get7() { return this.cues_[index2]; } }); } }; if (oldLength < l) { i2 = oldLength; for (; i2 < l; i2++) { defineProp.call(this, i2); } } }; _proto.getCueById = function getCueById(id) { var result = null; for (var i2 = 0, l = this.length; i2 < l; i2++) { var cue = this[i2]; if (cue.id === id) { result = cue; break; } } return result; }; return TextTrackCueList2; }(); var VideoTrackKind = { alternative: "alternative", captions: "captions", main: "main", sign: "sign", subtitles: "subtitles", commentary: "commentary" }; var AudioTrackKind = { "alternative": "alternative", "descriptions": "descriptions", "main": "main", "main-desc": "main-desc", "translation": "translation", "commentary": "commentary" }; var TextTrackKind = { subtitles: "subtitles", captions: "captions", descriptions: "descriptions", chapters: "chapters", metadata: "metadata" }; var TextTrackMode = { disabled: "disabled", hidden: "hidden", showing: "showing" }; var Track = /* @__PURE__ */ function(_EventTarget) { _inheritsLoose(Track2, _EventTarget); function Track2(options2) { var _this; if (options2 === void 0) { options2 = {}; } _this = _EventTarget.call(this) || this; var trackProps = { id: options2.id || "vjs_track_" + newGUID(), kind: options2.kind || "", language: options2.language || "" }; var label2 = options2.label || ""; var _loop = function _loop2(key2) { Object.defineProperty(_assertThisInitialized(_this), key2, { get: function get7() { return trackProps[key2]; }, set: function set4() { } }); }; for (var key in trackProps) { _loop(key); } Object.defineProperty(_assertThisInitialized(_this), "label", { get: function get7() { return label2; }, set: function set4(newLabel) { if (newLabel !== label2) { label2 = newLabel; this.trigger("labelchange"); } } }); return _this; } return Track2; }(EventTarget$2); var parseUrl = function parseUrl2(url) { var props = ["protocol", "hostname", "port", "pathname", "search", "hash", "host"]; var a = document_1.createElement("a"); a.href = url; var details = {}; for (var i2 = 0; i2 < props.length; i2++) { details[props[i2]] = a[props[i2]]; } if (details.protocol === "http:") { details.host = details.host.replace(/:80$/, ""); } if (details.protocol === "https:") { details.host = details.host.replace(/:443$/, ""); } if (!details.protocol) { details.protocol = window_1.location.protocol; } if (!details.host) { details.host = window_1.location.host; } return details; }; var getAbsoluteURL = function getAbsoluteURL2(url) { if (!url.match(/^https?:\/\//)) { var a = document_1.createElement("a"); a.href = url; url = a.href; } return url; }; var getFileExtension = function getFileExtension2(path) { if (typeof path === "string") { var splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/; var pathParts = splitPathRe.exec(path); if (pathParts) { return pathParts.pop().toLowerCase(); } } return ""; }; var isCrossOrigin = function isCrossOrigin2(url, winLoc) { if (winLoc === void 0) { winLoc = window_1.location; } var urlInfo = parseUrl(url); var srcProtocol = urlInfo.protocol === ":" ? winLoc.protocol : urlInfo.protocol; var crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host; return crossOrigin; }; var Url$1 = /* @__PURE__ */ Object.freeze({ __proto__: null, parseUrl, getAbsoluteURL, getFileExtension, isCrossOrigin }); var parseCues = function parseCues2(srcContent, track) { var parser2 = new window_1.WebVTT.Parser(window_1, window_1.vttjs, window_1.WebVTT.StringDecoder()); var errors2 = []; parser2.oncue = function(cue) { track.addCue(cue); }; parser2.onparsingerror = function(error) { errors2.push(error); }; parser2.onflush = function() { track.trigger({ type: "loadeddata", target: track }); }; parser2.parse(srcContent); if (errors2.length > 0) { if (window_1.console && window_1.console.groupCollapsed) { window_1.console.groupCollapsed("Text Track parsing errors for " + track.src); } errors2.forEach(function(error) { return log$1.error(error); }); if (window_1.console && window_1.console.groupEnd) { window_1.console.groupEnd(); } } parser2.flush(); }; var loadTrack = function loadTrack2(src, track) { var opts = { uri: src }; var crossOrigin = isCrossOrigin(src); if (crossOrigin) { opts.cors = crossOrigin; } var withCredentials = track.tech_.crossOrigin() === "use-credentials"; if (withCredentials) { opts.withCredentials = withCredentials; } XHR(opts, bind(this, function(err, response, responseBody) { if (err) { return log$1.error(err, response); } track.loaded_ = true; if (typeof window_1.WebVTT !== "function") { if (track.tech_) { track.tech_.any(["vttjsloaded", "vttjserror"], function(event2) { if (event2.type === "vttjserror") { log$1.error("vttjs failed to load, stopping trying to process " + track.src); return; } return parseCues(responseBody, track); }); } } else { parseCues(responseBody, track); } })); }; var TextTrack = /* @__PURE__ */ function(_Track) { _inheritsLoose(TextTrack2, _Track); function TextTrack2(options2) { var _this; if (options2 === void 0) { options2 = {}; } if (!options2.tech) { throw new Error("A tech was not provided."); } var settings = mergeOptions$3(options2, { kind: TextTrackKind[options2.kind] || "subtitles", language: options2.language || options2.srclang || "" }); var mode = TextTrackMode[settings.mode] || "disabled"; var default_ = settings["default"]; if (settings.kind === "metadata" || settings.kind === "chapters") { mode = "hidden"; } _this = _Track.call(this, settings) || this; _this.tech_ = settings.tech; _this.cues_ = []; _this.activeCues_ = []; _this.preload_ = _this.tech_.preloadTextTracks !== false; var cues = new TextTrackCueList(_this.cues_); var activeCues = new TextTrackCueList(_this.activeCues_); var changed = false; _this.timeupdateHandler = bind(_assertThisInitialized(_this), function(event2) { if (event2 === void 0) { event2 = {}; } if (this.tech_.isDisposed()) { return; } if (!this.tech_.isReady_) { if (event2.type !== "timeupdate") { this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); } return; } this.activeCues = this.activeCues; if (changed) { this.trigger("cuechange"); changed = false; } if (event2.type !== "timeupdate") { this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); } }); var disposeHandler = function disposeHandler2() { _this.stopTracking(); }; _this.tech_.one("dispose", disposeHandler); if (mode !== "disabled") { _this.startTracking(); } Object.defineProperties(_assertThisInitialized(_this), { "default": { get: function get7() { return default_; }, set: function set4() { } }, mode: { get: function get7() { return mode; }, set: function set4(newMode) { if (!TextTrackMode[newMode]) { return; } if (mode === newMode) { return; } mode = newMode; if (!this.preload_ && mode !== "disabled" && this.cues.length === 0) { loadTrack(this.src, this); } this.stopTracking(); if (mode !== "disabled") { this.startTracking(); } this.trigger("modechange"); } }, cues: { get: function get7() { if (!this.loaded_) { return null; } return cues; }, set: function set4() { } }, activeCues: { get: function get7() { if (!this.loaded_) { return null; } if (this.cues.length === 0) { return activeCues; } var ct2 = this.tech_.currentTime(); var active = []; for (var i2 = 0, l = this.cues.length; i2 < l; i2++) { var cue = this.cues[i2]; if (cue.startTime <= ct2 && cue.endTime >= ct2) { active.push(cue); } else if (cue.startTime === cue.endTime && cue.startTime <= ct2 && cue.startTime + 0.5 >= ct2) { active.push(cue); } } changed = false; if (active.length !== this.activeCues_.length) { changed = true; } else { for (var _i = 0; _i < active.length; _i++) { if (this.activeCues_.indexOf(active[_i]) === -1) { changed = true; } } } this.activeCues_ = active; activeCues.setCues_(this.activeCues_); return activeCues; }, set: function set4() { } } }); if (settings.src) { _this.src = settings.src; if (!_this.preload_) { _this.loaded_ = true; } if (_this.preload_ || settings.kind !== "subtitles" && settings.kind !== "captions") { loadTrack(_this.src, _assertThisInitialized(_this)); } } else { _this.loaded_ = true; } return _this; } var _proto = TextTrack2.prototype; _proto.startTracking = function startTracking() { this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); this.tech_.on("timeupdate", this.timeupdateHandler); }; _proto.stopTracking = function stopTracking() { if (this.rvf_) { this.tech_.cancelVideoFrameCallback(this.rvf_); this.rvf_ = void 0; } this.tech_.off("timeupdate", this.timeupdateHandler); }; _proto.addCue = function addCue(originalCue) { var cue = originalCue; if (window_1.vttjs && !(originalCue instanceof window_1.vttjs.VTTCue)) { cue = new window_1.vttjs.VTTCue(originalCue.startTime, originalCue.endTime, originalCue.text); for (var prop in originalCue) { if (!(prop in cue)) { cue[prop] = originalCue[prop]; } } cue.id = originalCue.id; cue.originalCue_ = originalCue; } var tracks = this.tech_.textTracks(); for (var i2 = 0; i2 < tracks.length; i2++) { if (tracks[i2] !== this) { tracks[i2].removeCue(cue); } } this.cues_.push(cue); this.cues.setCues_(this.cues_); }; _proto.removeCue = function removeCue(_removeCue) { var i2 = this.cues_.length; while (i2--) { var cue = this.cues_[i2]; if (cue === _removeCue || cue.originalCue_ && cue.originalCue_ === _removeCue) { this.cues_.splice(i2, 1); this.cues.setCues_(this.cues_); break; } } }; return TextTrack2; }(Track); TextTrack.prototype.allowedEvents_ = { cuechange: "cuechange" }; var AudioTrack = /* @__PURE__ */ function(_Track) { _inheritsLoose(AudioTrack2, _Track); function AudioTrack2(options2) { var _this; if (options2 === void 0) { options2 = {}; } var settings = mergeOptions$3(options2, { kind: AudioTrackKind[options2.kind] || "" }); _this = _Track.call(this, settings) || this; var enabled = false; Object.defineProperty(_assertThisInitialized(_this), "enabled", { get: function get7() { return enabled; }, set: function set4(newEnabled) { if (typeof newEnabled !== "boolean" || newEnabled === enabled) { return; } enabled = newEnabled; this.trigger("enabledchange"); } }); if (settings.enabled) { _this.enabled = settings.enabled; } _this.loaded_ = true; return _this; } return AudioTrack2; }(Track); var VideoTrack = /* @__PURE__ */ function(_Track) { _inheritsLoose(VideoTrack2, _Track); function VideoTrack2(options2) { var _this; if (options2 === void 0) { options2 = {}; } var settings = mergeOptions$3(options2, { kind: VideoTrackKind[options2.kind] || "" }); _this = _Track.call(this, settings) || this; var selected = false; Object.defineProperty(_assertThisInitialized(_this), "selected", { get: function get7() { return selected; }, set: function set4(newSelected) { if (typeof newSelected !== "boolean" || newSelected === selected) { return; } selected = newSelected; this.trigger("selectedchange"); } }); if (settings.selected) { _this.selected = settings.selected; } return _this; } return VideoTrack2; }(Track); var NONE = 0; var LOADING = 1; var LOADED = 2; var ERROR = 3; var HTMLTrackElement = /* @__PURE__ */ function(_EventTarget) { _inheritsLoose(HTMLTrackElement2, _EventTarget); function HTMLTrackElement2(options2) { var _this; if (options2 === void 0) { options2 = {}; } _this = _EventTarget.call(this) || this; var readyState; var track = new TextTrack(options2); _this.kind = track.kind; _this.src = track.src; _this.srclang = track.language; _this.label = track.label; _this["default"] = track["default"]; Object.defineProperties(_assertThisInitialized(_this), { readyState: { get: function get7() { return readyState; } }, track: { get: function get7() { return track; } } }); readyState = NONE; track.addEventListener("loadeddata", function() { readyState = LOADED; _this.trigger({ type: "load", target: _assertThisInitialized(_this) }); }); return _this; } return HTMLTrackElement2; }(EventTarget$2); HTMLTrackElement.prototype.allowedEvents_ = { load: "load" }; HTMLTrackElement.NONE = NONE; HTMLTrackElement.LOADING = LOADING; HTMLTrackElement.LOADED = LOADED; HTMLTrackElement.ERROR = ERROR; var NORMAL = { audio: { ListClass: AudioTrackList, TrackClass: AudioTrack, capitalName: "Audio" }, video: { ListClass: VideoTrackList, TrackClass: VideoTrack, capitalName: "Video" }, text: { ListClass: TextTrackList, TrackClass: TextTrack, capitalName: "Text" } }; Object.keys(NORMAL).forEach(function(type2) { NORMAL[type2].getterName = type2 + "Tracks"; NORMAL[type2].privateName = type2 + "Tracks_"; }); var REMOTE = { remoteText: { ListClass: TextTrackList, TrackClass: TextTrack, capitalName: "RemoteText", getterName: "remoteTextTracks", privateName: "remoteTextTracks_" }, remoteTextEl: { ListClass: HtmlTrackElementList, TrackClass: HTMLTrackElement, capitalName: "RemoteTextTrackEls", getterName: "remoteTextTrackEls", privateName: "remoteTextTrackEls_" } }; var ALL = _extends$2({}, NORMAL, REMOTE); REMOTE.names = Object.keys(REMOTE); NORMAL.names = Object.keys(NORMAL); ALL.names = [].concat(REMOTE.names).concat(NORMAL.names); function createTrackHelper(self2, kind, label2, language, options2) { if (options2 === void 0) { options2 = {}; } var tracks = self2.textTracks(); options2.kind = kind; if (label2) { options2.label = label2; } if (language) { options2.language = language; } options2.tech = self2; var track = new ALL.text.TrackClass(options2); tracks.addTrack(track); return track; } var Tech$1 = /* @__PURE__ */ function(_Component) { _inheritsLoose(Tech2, _Component); function Tech2(options2, ready) { var _this; if (options2 === void 0) { options2 = {}; } if (ready === void 0) { ready = function ready2() { }; } options2.reportTouchActivity = false; _this = _Component.call(this, null, options2, ready) || this; _this.onDurationChange_ = function(e) { return _this.onDurationChange(e); }; _this.trackProgress_ = function(e) { return _this.trackProgress(e); }; _this.trackCurrentTime_ = function(e) { return _this.trackCurrentTime(e); }; _this.stopTrackingCurrentTime_ = function(e) { return _this.stopTrackingCurrentTime(e); }; _this.disposeSourceHandler_ = function(e) { return _this.disposeSourceHandler(e); }; _this.queuedHanders_ = /* @__PURE__ */ new Set(); _this.hasStarted_ = false; _this.on("playing", function() { this.hasStarted_ = true; }); _this.on("loadstart", function() { this.hasStarted_ = false; }); ALL.names.forEach(function(name) { var props = ALL[name]; if (options2 && options2[props.getterName]) { _this[props.privateName] = options2[props.getterName]; } }); if (!_this.featuresProgressEvents) { _this.manualProgressOn(); } if (!_this.featuresTimeupdateEvents) { _this.manualTimeUpdatesOn(); } ["Text", "Audio", "Video"].forEach(function(track) { if (options2["native" + track + "Tracks"] === false) { _this["featuresNative" + track + "Tracks"] = false; } }); if (options2.nativeCaptions === false || options2.nativeTextTracks === false) { _this.featuresNativeTextTracks = false; } else if (options2.nativeCaptions === true || options2.nativeTextTracks === true) { _this.featuresNativeTextTracks = true; } if (!_this.featuresNativeTextTracks) { _this.emulateTextTracks(); } _this.preloadTextTracks = options2.preloadTextTracks !== false; _this.autoRemoteTextTracks_ = new ALL.text.ListClass(); _this.initTrackListeners(); if (!options2.nativeControlsForTouch) { _this.emitTapEvents(); } if (_this.constructor) { _this.name_ = _this.constructor.name || "Unknown Tech"; } return _this; } var _proto = Tech2.prototype; _proto.triggerSourceset = function triggerSourceset(src) { var _this2 = this; if (!this.isReady_) { this.one("ready", function() { return _this2.setTimeout(function() { return _this2.triggerSourceset(src); }, 1); }); } this.trigger({ src, type: "sourceset" }); }; _proto.manualProgressOn = function manualProgressOn() { this.on("durationchange", this.onDurationChange_); this.manualProgress = true; this.one("ready", this.trackProgress_); }; _proto.manualProgressOff = function manualProgressOff() { this.manualProgress = false; this.stopTrackingProgress(); this.off("durationchange", this.onDurationChange_); }; _proto.trackProgress = function trackProgress(event2) { this.stopTrackingProgress(); this.progressInterval = this.setInterval(bind(this, function() { var numBufferedPercent = this.bufferedPercent(); if (this.bufferedPercent_ !== numBufferedPercent) { this.trigger("progress"); } this.bufferedPercent_ = numBufferedPercent; if (numBufferedPercent === 1) { this.stopTrackingProgress(); } }), 500); }; _proto.onDurationChange = function onDurationChange(event2) { this.duration_ = this.duration(); }; _proto.buffered = function buffered() { return createTimeRanges(0, 0); }; _proto.bufferedPercent = function bufferedPercent$12() { return bufferedPercent(this.buffered(), this.duration_); }; _proto.stopTrackingProgress = function stopTrackingProgress() { this.clearInterval(this.progressInterval); }; _proto.manualTimeUpdatesOn = function manualTimeUpdatesOn() { this.manualTimeUpdates = true; this.on("play", this.trackCurrentTime_); this.on("pause", this.stopTrackingCurrentTime_); }; _proto.manualTimeUpdatesOff = function manualTimeUpdatesOff() { this.manualTimeUpdates = false; this.stopTrackingCurrentTime(); this.off("play", this.trackCurrentTime_); this.off("pause", this.stopTrackingCurrentTime_); }; _proto.trackCurrentTime = function trackCurrentTime() { if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); } this.currentTimeInterval = this.setInterval(function() { this.trigger({ type: "timeupdate", target: this, manuallyTriggered: true }); }, 250); }; _proto.stopTrackingCurrentTime = function stopTrackingCurrentTime() { this.clearInterval(this.currentTimeInterval); this.trigger({ type: "timeupdate", target: this, manuallyTriggered: true }); }; _proto.dispose = function dispose() { this.clearTracks(NORMAL.names); if (this.manualProgress) { this.manualProgressOff(); } if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); } _Component.prototype.dispose.call(this); }; _proto.clearTracks = function clearTracks(types) { var _this3 = this; types = [].concat(types); types.forEach(function(type2) { var list = _this3[type2 + "Tracks"]() || []; var i2 = list.length; while (i2--) { var track = list[i2]; if (type2 === "text") { _this3.removeRemoteTextTrack(track); } list.removeTrack(track); } }); }; _proto.cleanupAutoTextTracks = function cleanupAutoTextTracks() { var list = this.autoRemoteTextTracks_ || []; var i2 = list.length; while (i2--) { var track = list[i2]; this.removeRemoteTextTrack(track); } }; _proto.reset = function reset3() { }; _proto.crossOrigin = function crossOrigin() { }; _proto.setCrossOrigin = function setCrossOrigin() { }; _proto.error = function error(err) { if (err !== void 0) { this.error_ = new MediaError(err); this.trigger("error"); } return this.error_; }; _proto.played = function played() { if (this.hasStarted_) { return createTimeRanges(0, 0); } return createTimeRanges(); }; _proto.play = function play() { }; _proto.setScrubbing = function setScrubbing() { }; _proto.scrubbing = function scrubbing() { }; _proto.setCurrentTime = function setCurrentTime() { if (this.manualTimeUpdates) { this.trigger({ type: "timeupdate", target: this, manuallyTriggered: true }); } }; _proto.initTrackListeners = function initTrackListeners() { var _this4 = this; NORMAL.names.forEach(function(name) { var props = NORMAL[name]; var trackListChanges = function trackListChanges2() { _this4.trigger(name + "trackchange"); }; var tracks = _this4[props.getterName](); tracks.addEventListener("removetrack", trackListChanges); tracks.addEventListener("addtrack", trackListChanges); _this4.on("dispose", function() { tracks.removeEventListener("removetrack", trackListChanges); tracks.removeEventListener("addtrack", trackListChanges); }); }); }; _proto.addWebVttScript_ = function addWebVttScript_() { var _this5 = this; if (window_1.WebVTT) { return; } if (document_1.body.contains(this.el())) { if (!this.options_["vtt.js"] && isPlain(vtt) && Object.keys(vtt).length > 0) { this.trigger("vttjsloaded"); return; } var script = document_1.createElement("script"); script.src = this.options_["vtt.js"] || "https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js"; script.onload = function() { _this5.trigger("vttjsloaded"); }; script.onerror = function() { _this5.trigger("vttjserror"); }; this.on("dispose", function() { script.onload = null; script.onerror = null; }); window_1.WebVTT = true; this.el().parentNode.appendChild(script); } else { this.ready(this.addWebVttScript_); } }; _proto.emulateTextTracks = function emulateTextTracks() { var _this6 = this; var tracks = this.textTracks(); var remoteTracks = this.remoteTextTracks(); var handleAddTrack = function handleAddTrack2(e) { return tracks.addTrack(e.track); }; var handleRemoveTrack = function handleRemoveTrack2(e) { return tracks.removeTrack(e.track); }; remoteTracks.on("addtrack", handleAddTrack); remoteTracks.on("removetrack", handleRemoveTrack); this.addWebVttScript_(); var updateDisplay = function updateDisplay2() { return _this6.trigger("texttrackchange"); }; var textTracksChanges = function textTracksChanges2() { updateDisplay(); for (var i2 = 0; i2 < tracks.length; i2++) { var track = tracks[i2]; track.removeEventListener("cuechange", updateDisplay); if (track.mode === "showing") { track.addEventListener("cuechange", updateDisplay); } } }; textTracksChanges(); tracks.addEventListener("change", textTracksChanges); tracks.addEventListener("addtrack", textTracksChanges); tracks.addEventListener("removetrack", textTracksChanges); this.on("dispose", function() { remoteTracks.off("addtrack", handleAddTrack); remoteTracks.off("removetrack", handleRemoveTrack); tracks.removeEventListener("change", textTracksChanges); tracks.removeEventListener("addtrack", textTracksChanges); tracks.removeEventListener("removetrack", textTracksChanges); for (var i2 = 0; i2 < tracks.length; i2++) { var track = tracks[i2]; track.removeEventListener("cuechange", updateDisplay); } }); }; _proto.addTextTrack = function addTextTrack(kind, label2, language) { if (!kind) { throw new Error("TextTrack kind is required but was not provided"); } return createTrackHelper(this, kind, label2, language); }; _proto.createRemoteTextTrack = function createRemoteTextTrack(options2) { var track = mergeOptions$3(options2, { tech: this }); return new REMOTE.remoteTextEl.TrackClass(track); }; _proto.addRemoteTextTrack = function addRemoteTextTrack(options2, manualCleanup) { var _this7 = this; if (options2 === void 0) { options2 = {}; } var htmlTrackElement = this.createRemoteTextTrack(options2); if (manualCleanup !== true && manualCleanup !== false) { log$1.warn('Calling addRemoteTextTrack without explicitly setting the "manualCleanup" parameter to `true` is deprecated and default to `false` in future version of video.js'); manualCleanup = true; } this.remoteTextTrackEls().addTrackElement_(htmlTrackElement); this.remoteTextTracks().addTrack(htmlTrackElement.track); if (manualCleanup !== true) { this.ready(function() { return _this7.autoRemoteTextTracks_.addTrack(htmlTrackElement.track); }); } return htmlTrackElement; }; _proto.removeRemoteTextTrack = function removeRemoteTextTrack(track) { var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track); this.remoteTextTrackEls().removeTrackElement_(trackElement); this.remoteTextTracks().removeTrack(track); this.autoRemoteTextTracks_.removeTrack(track); }; _proto.getVideoPlaybackQuality = function getVideoPlaybackQuality() { return {}; }; _proto.requestPictureInPicture = function requestPictureInPicture() { var PromiseClass = this.options_.Promise || window_1.Promise; if (PromiseClass) { return PromiseClass.reject(); } }; _proto.disablePictureInPicture = function disablePictureInPicture() { return true; }; _proto.setDisablePictureInPicture = function setDisablePictureInPicture() { }; _proto.requestVideoFrameCallback = function requestVideoFrameCallback(cb) { var _this8 = this; var id = newGUID(); if (!this.isReady_ || this.paused()) { this.queuedHanders_.add(id); this.one("playing", function() { if (_this8.queuedHanders_.has(id)) { _this8.queuedHanders_["delete"](id); cb(); } }); } else { this.requestNamedAnimationFrame(id, cb); } return id; }; _proto.cancelVideoFrameCallback = function cancelVideoFrameCallback(id) { if (this.queuedHanders_.has(id)) { this.queuedHanders_["delete"](id); } else { this.cancelNamedAnimationFrame(id); } }; _proto.setPoster = function setPoster() { }; _proto.playsinline = function playsinline() { }; _proto.setPlaysinline = function setPlaysinline() { }; _proto.overrideNativeAudioTracks = function overrideNativeAudioTracks() { }; _proto.overrideNativeVideoTracks = function overrideNativeVideoTracks() { }; _proto.canPlayType = function canPlayType3() { return ""; }; Tech2.canPlayType = function canPlayType3() { return ""; }; Tech2.canPlaySource = function canPlaySource(srcObj, options2) { return Tech2.canPlayType(srcObj.type); }; Tech2.isTech = function isTech(component) { return component.prototype instanceof Tech2 || component instanceof Tech2 || component === Tech2; }; Tech2.registerTech = function registerTech(name, tech) { if (!Tech2.techs_) { Tech2.techs_ = {}; } if (!Tech2.isTech(tech)) { throw new Error("Tech " + name + " must be a Tech"); } if (!Tech2.canPlayType) { throw new Error("Techs must have a static canPlayType method on them"); } if (!Tech2.canPlaySource) { throw new Error("Techs must have a static canPlaySource method on them"); } name = toTitleCase$1(name); Tech2.techs_[name] = tech; Tech2.techs_[toLowerCase(name)] = tech; if (name !== "Tech") { Tech2.defaultTechOrder_.push(name); } return tech; }; Tech2.getTech = function getTech(name) { if (!name) { return; } if (Tech2.techs_ && Tech2.techs_[name]) { return Tech2.techs_[name]; } name = toTitleCase$1(name); if (window_1 && window_1.videojs && window_1.videojs[name]) { log$1.warn("The " + name + " tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)"); return window_1.videojs[name]; } }; return Tech2; }(Component$1); ALL.names.forEach(function(name) { var props = ALL[name]; Tech$1.prototype[props.getterName] = function() { this[props.privateName] = this[props.privateName] || new props.ListClass(); return this[props.privateName]; }; }); Tech$1.prototype.featuresVolumeControl = true; Tech$1.prototype.featuresMuteControl = true; Tech$1.prototype.featuresFullscreenResize = false; Tech$1.prototype.featuresPlaybackRate = false; Tech$1.prototype.featuresProgressEvents = false; Tech$1.prototype.featuresSourceset = false; Tech$1.prototype.featuresTimeupdateEvents = false; Tech$1.prototype.featuresNativeTextTracks = false; Tech$1.prototype.featuresVideoFrameCallback = false; Tech$1.withSourceHandlers = function(_Tech) { _Tech.registerSourceHandler = function(handler, index2) { var handlers = _Tech.sourceHandlers; if (!handlers) { handlers = _Tech.sourceHandlers = []; } if (index2 === void 0) { index2 = handlers.length; } handlers.splice(index2, 0, handler); }; _Tech.canPlayType = function(type2) { var handlers = _Tech.sourceHandlers || []; var can; for (var i2 = 0; i2 < handlers.length; i2++) { can = handlers[i2].canPlayType(type2); if (can) { return can; } } return ""; }; _Tech.selectSourceHandler = function(source, options2) { var handlers = _Tech.sourceHandlers || []; var can; for (var i2 = 0; i2 < handlers.length; i2++) { can = handlers[i2].canHandleSource(source, options2); if (can) { return handlers[i2]; } } return null; }; _Tech.canPlaySource = function(srcObj, options2) { var sh = _Tech.selectSourceHandler(srcObj, options2); if (sh) { return sh.canHandleSource(srcObj, options2); } return ""; }; var deferrable = ["seekable", "seeking", "duration"]; deferrable.forEach(function(fnName) { var originalFn = this[fnName]; if (typeof originalFn !== "function") { return; } this[fnName] = function() { if (this.sourceHandler_ && this.sourceHandler_[fnName]) { return this.sourceHandler_[fnName].apply(this.sourceHandler_, arguments); } return originalFn.apply(this, arguments); }; }, _Tech.prototype); _Tech.prototype.setSource = function(source) { var sh = _Tech.selectSourceHandler(source, this.options_); if (!sh) { if (_Tech.nativeSourceHandler) { sh = _Tech.nativeSourceHandler; } else { log$1.error("No source handler found for the current source."); } } this.disposeSourceHandler(); this.off("dispose", this.disposeSourceHandler_); if (sh !== _Tech.nativeSourceHandler) { this.currentSource_ = source; } this.sourceHandler_ = sh.handleSource(source, this, this.options_); this.one("dispose", this.disposeSourceHandler_); }; _Tech.prototype.disposeSourceHandler = function() { if (this.currentSource_) { this.clearTracks(["audio", "video"]); this.currentSource_ = null; } this.cleanupAutoTextTracks(); if (this.sourceHandler_) { if (this.sourceHandler_.dispose) { this.sourceHandler_.dispose(); } this.sourceHandler_ = null; } }; }; Component$1.registerComponent("Tech", Tech$1); Tech$1.registerTech("Tech", Tech$1); Tech$1.defaultTechOrder_ = []; var middlewares = {}; var middlewareInstances = {}; var TERMINATOR = {}; function use(type2, middleware) { middlewares[type2] = middlewares[type2] || []; middlewares[type2].push(middleware); } function setSource(player, src, next) { player.setTimeout(function() { return setSourceHelper(src, middlewares[src.type], next, player); }, 1); } function setTech(middleware, tech) { middleware.forEach(function(mw) { return mw.setTech && mw.setTech(tech); }); } function get(middleware, tech, method) { return middleware.reduceRight(middlewareIterator(method), tech[method]()); } function set(middleware, tech, method, arg) { return tech[method](middleware.reduce(middlewareIterator(method), arg)); } function mediate(middleware, tech, method, arg) { if (arg === void 0) { arg = null; } var callMethod = "call" + toTitleCase$1(method); var middlewareValue = middleware.reduce(middlewareIterator(callMethod), arg); var terminated = middlewareValue === TERMINATOR; var returnValue = terminated ? null : tech[method](middlewareValue); executeRight(middleware, method, returnValue, terminated); return returnValue; } var allowedGetters = { buffered: 1, currentTime: 1, duration: 1, muted: 1, played: 1, paused: 1, seekable: 1, volume: 1, ended: 1 }; var allowedSetters = { setCurrentTime: 1, setMuted: 1, setVolume: 1 }; var allowedMediators = { play: 1, pause: 1 }; function middlewareIterator(method) { return function(value, mw) { if (value === TERMINATOR) { return TERMINATOR; } if (mw[method]) { return mw[method](value); } return value; }; } function executeRight(mws, method, value, terminated) { for (var i2 = mws.length - 1; i2 >= 0; i2--) { var mw = mws[i2]; if (mw[method]) { mw[method](terminated, value); } } } function clearCacheForPlayer(player) { middlewareInstances[player.id()] = null; } function getOrCreateFactory(player, mwFactory) { var mws = middlewareInstances[player.id()]; var mw = null; if (mws === void 0 || mws === null) { mw = mwFactory(player); middlewareInstances[player.id()] = [[mwFactory, mw]]; return mw; } for (var i2 = 0; i2 < mws.length; i2++) { var _mws$i = mws[i2], mwf = _mws$i[0], mwi = _mws$i[1]; if (mwf !== mwFactory) { continue; } mw = mwi; } if (mw === null) { mw = mwFactory(player); mws.push([mwFactory, mw]); } return mw; } function setSourceHelper(src, middleware, next, player, acc, lastRun) { if (src === void 0) { src = {}; } if (middleware === void 0) { middleware = []; } if (acc === void 0) { acc = []; } if (lastRun === void 0) { lastRun = false; } var _middleware = middleware, mwFactory = _middleware[0], mwrest = _middleware.slice(1); if (typeof mwFactory === "string") { setSourceHelper(src, middlewares[mwFactory], next, player, acc, lastRun); } else if (mwFactory) { var mw = getOrCreateFactory(player, mwFactory); if (!mw.setSource) { acc.push(mw); return setSourceHelper(src, mwrest, next, player, acc, lastRun); } mw.setSource(assign({}, src), function(err, _src) { if (err) { return setSourceHelper(src, mwrest, next, player, acc, lastRun); } acc.push(mw); setSourceHelper(_src, src.type === _src.type ? mwrest : middlewares[_src.type], next, player, acc, lastRun); }); } else if (mwrest.length) { setSourceHelper(src, mwrest, next, player, acc, lastRun); } else if (lastRun) { next(src, acc); } else { setSourceHelper(src, middlewares["*"], next, player, acc, true); } } var MimetypesKind = { opus: "video/ogg", ogv: "video/ogg", mp4: "video/mp4", mov: "video/mp4", m4v: "video/mp4", mkv: "video/x-matroska", m4a: "audio/mp4", mp3: "audio/mpeg", aac: "audio/aac", caf: "audio/x-caf", flac: "audio/flac", oga: "audio/ogg", wav: "audio/wav", m3u8: "application/x-mpegURL", mpd: "application/dash+xml", jpg: "image/jpeg", jpeg: "image/jpeg", gif: "image/gif", png: "image/png", svg: "image/svg+xml", webp: "image/webp" }; var getMimetype = function getMimetype2(src) { if (src === void 0) { src = ""; } var ext = getFileExtension(src); var mimetype = MimetypesKind[ext.toLowerCase()]; return mimetype || ""; }; var findMimetype = function findMimetype2(player, src) { if (!src) { return ""; } if (player.cache_.source.src === src && player.cache_.source.type) { return player.cache_.source.type; } var matchingSources = player.cache_.sources.filter(function(s2) { return s2.src === src; }); if (matchingSources.length) { return matchingSources[0].type; } var sources = player.$$("source"); for (var i2 = 0; i2 < sources.length; i2++) { var s = sources[i2]; if (s.type && s.src && s.src === src) { return s.type; } } return getMimetype(src); }; var filterSource = function filterSource2(src) { if (Array.isArray(src)) { var newsrc = []; src.forEach(function(srcobj) { srcobj = filterSource2(srcobj); if (Array.isArray(srcobj)) { newsrc = newsrc.concat(srcobj); } else if (isObject2(srcobj)) { newsrc.push(srcobj); } }); src = newsrc; } else if (typeof src === "string" && src.trim()) { src = [fixSource({ src })]; } else if (isObject2(src) && typeof src.src === "string" && src.src && src.src.trim()) { src = [fixSource(src)]; } else { src = []; } return src; }; function fixSource(src) { if (!src.type) { var mimetype = getMimetype(src.src); if (mimetype) { src.type = mimetype; } } return src; } var MediaLoader = /* @__PURE__ */ function(_Component) { _inheritsLoose(MediaLoader2, _Component); function MediaLoader2(player, options2, ready) { var _this; var options_ = mergeOptions$3({ createEl: false }, options2); _this = _Component.call(this, player, options_, ready) || this; if (!options2.playerOptions.sources || options2.playerOptions.sources.length === 0) { for (var i2 = 0, j = options2.playerOptions.techOrder; i2 < j.length; i2++) { var techName = toTitleCase$1(j[i2]); var tech = Tech$1.getTech(techName); if (!techName) { tech = Component$1.getComponent(techName); } if (tech && tech.isSupported()) { player.loadTech_(techName); break; } } } else { player.src(options2.playerOptions.sources); } return _this; } return MediaLoader2; }(Component$1); Component$1.registerComponent("MediaLoader", MediaLoader); var ClickableComponent = /* @__PURE__ */ function(_Component) { _inheritsLoose(ClickableComponent2, _Component); function ClickableComponent2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; if (_this.options_.controlText) { _this.controlText(_this.options_.controlText); } _this.handleMouseOver_ = function(e) { return _this.handleMouseOver(e); }; _this.handleMouseOut_ = function(e) { return _this.handleMouseOut(e); }; _this.handleClick_ = function(e) { return _this.handleClick(e); }; _this.handleKeyDown_ = function(e) { return _this.handleKeyDown(e); }; _this.emitTapEvents(); _this.enable(); return _this; } var _proto = ClickableComponent2.prototype; _proto.createEl = function createEl$12(tag, props, attributes) { if (tag === void 0) { tag = "div"; } if (props === void 0) { props = {}; } if (attributes === void 0) { attributes = {}; } props = assign({ className: this.buildCSSClass(), tabIndex: 0 }, props); if (tag === "button") { log$1.error("Creating a ClickableComponent with an HTML element of " + tag + " is not supported; use a Button instead."); } attributes = assign({ role: "button" }, attributes); this.tabIndex_ = props.tabIndex; var el = createEl(tag, props, attributes); el.appendChild(createEl("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": true })); this.createControlTextEl(el); return el; }; _proto.dispose = function dispose() { this.controlTextEl_ = null; _Component.prototype.dispose.call(this); }; _proto.createControlTextEl = function createControlTextEl(el) { this.controlTextEl_ = createEl("span", { className: "vjs-control-text" }, { "aria-live": "polite" }); if (el) { el.appendChild(this.controlTextEl_); } this.controlText(this.controlText_, el); return this.controlTextEl_; }; _proto.controlText = function controlText(text, el) { if (el === void 0) { el = this.el(); } if (text === void 0) { return this.controlText_ || "Need Text"; } var localizedText = this.localize(text); this.controlText_ = text; textContent(this.controlTextEl_, localizedText); if (!this.nonIconControl && !this.player_.options_.noUITitleAttributes) { el.setAttribute("title", localizedText); } }; _proto.buildCSSClass = function buildCSSClass() { return "vjs-control vjs-button " + _Component.prototype.buildCSSClass.call(this); }; _proto.enable = function enable() { if (!this.enabled_) { this.enabled_ = true; this.removeClass("vjs-disabled"); this.el_.setAttribute("aria-disabled", "false"); if (typeof this.tabIndex_ !== "undefined") { this.el_.setAttribute("tabIndex", this.tabIndex_); } this.on(["tap", "click"], this.handleClick_); this.on("keydown", this.handleKeyDown_); } }; _proto.disable = function disable() { this.enabled_ = false; this.addClass("vjs-disabled"); this.el_.setAttribute("aria-disabled", "true"); if (typeof this.tabIndex_ !== "undefined") { this.el_.removeAttribute("tabIndex"); } this.off("mouseover", this.handleMouseOver_); this.off("mouseout", this.handleMouseOut_); this.off(["tap", "click"], this.handleClick_); this.off("keydown", this.handleKeyDown_); }; _proto.handleLanguagechange = function handleLanguagechange() { this.controlText(this.controlText_); }; _proto.handleClick = function handleClick(event2) { if (this.options_.clickHandler) { this.options_.clickHandler.call(this, arguments); } }; _proto.handleKeyDown = function handleKeyDown(event2) { if (keycode.isEventKey(event2, "Space") || keycode.isEventKey(event2, "Enter")) { event2.preventDefault(); event2.stopPropagation(); this.trigger("click"); } else { _Component.prototype.handleKeyDown.call(this, event2); } }; return ClickableComponent2; }(Component$1); Component$1.registerComponent("ClickableComponent", ClickableComponent); var PosterImage = /* @__PURE__ */ function(_ClickableComponent) { _inheritsLoose(PosterImage2, _ClickableComponent); function PosterImage2(player, options2) { var _this; _this = _ClickableComponent.call(this, player, options2) || this; _this.update(); _this.update_ = function(e) { return _this.update(e); }; player.on("posterchange", _this.update_); return _this; } var _proto = PosterImage2.prototype; _proto.dispose = function dispose() { this.player().off("posterchange", this.update_); _ClickableComponent.prototype.dispose.call(this); }; _proto.createEl = function createEl$12() { var el = createEl("div", { className: "vjs-poster", tabIndex: -1 }); return el; }; _proto.update = function update(event2) { var url = this.player().poster(); this.setSrc(url); if (url) { this.show(); } else { this.hide(); } }; _proto.setSrc = function setSrc(url) { var backgroundImage = ""; if (url) { backgroundImage = 'url("' + url + '")'; } this.el_.style.backgroundImage = backgroundImage; }; _proto.handleClick = function handleClick(event2) { if (!this.player_.controls()) { return; } var sourceIsEncrypted = this.player_.usingPlugin("eme") && this.player_.eme.sessions && this.player_.eme.sessions.length > 0; if (this.player_.tech(true) && !((IE_VERSION || IS_EDGE) && sourceIsEncrypted)) { this.player_.tech(true).focus(); } if (this.player_.paused()) { silencePromise(this.player_.play()); } else { this.player_.pause(); } }; return PosterImage2; }(ClickableComponent); Component$1.registerComponent("PosterImage", PosterImage); var darkGray = "#222"; var lightGray = "#ccc"; var fontMap = { monospace: "monospace", sansSerif: "sans-serif", serif: "serif", monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace', monospaceSerif: '"Courier New", monospace', proportionalSansSerif: "sans-serif", proportionalSerif: "serif", casual: '"Comic Sans MS", Impact, fantasy', script: '"Monotype Corsiva", cursive', smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif' }; function constructColor(color2, opacity) { var hex; if (color2.length === 4) { hex = color2[1] + color2[1] + color2[2] + color2[2] + color2[3] + color2[3]; } else if (color2.length === 7) { hex = color2.slice(1); } else { throw new Error("Invalid color code provided, " + color2 + "; must be formatted as e.g. #f0e or #f604e2."); } return "rgba(" + parseInt(hex.slice(0, 2), 16) + "," + parseInt(hex.slice(2, 4), 16) + "," + parseInt(hex.slice(4, 6), 16) + "," + opacity + ")"; } function tryUpdateStyle(el, style, rule) { try { el.style[style] = rule; } catch (e) { return; } } var TextTrackDisplay = /* @__PURE__ */ function(_Component) { _inheritsLoose(TextTrackDisplay2, _Component); function TextTrackDisplay2(player, options2, ready) { var _this; _this = _Component.call(this, player, options2, ready) || this; var updateDisplayHandler = function updateDisplayHandler2(e) { return _this.updateDisplay(e); }; player.on("loadstart", function(e) { return _this.toggleDisplay(e); }); player.on("texttrackchange", updateDisplayHandler); player.on("loadedmetadata", function(e) { return _this.preselectTrack(e); }); player.ready(bind(_assertThisInitialized(_this), function() { if (player.tech_ && player.tech_.featuresNativeTextTracks) { this.hide(); return; } player.on("fullscreenchange", updateDisplayHandler); player.on("playerresize", updateDisplayHandler); window_1.addEventListener("orientationchange", updateDisplayHandler); player.on("dispose", function() { return window_1.removeEventListener("orientationchange", updateDisplayHandler); }); var tracks = this.options_.playerOptions.tracks || []; for (var i2 = 0; i2 < tracks.length; i2++) { this.player_.addRemoteTextTrack(tracks[i2], true); } this.preselectTrack(); })); return _this; } var _proto = TextTrackDisplay2.prototype; _proto.preselectTrack = function preselectTrack() { var modes = { captions: 1, subtitles: 1 }; var trackList = this.player_.textTracks(); var userPref = this.player_.cache_.selectedLanguage; var firstDesc; var firstCaptions; var preferredTrack; for (var i2 = 0; i2 < trackList.length; i2++) { var track = trackList[i2]; if (userPref && userPref.enabled && userPref.language && userPref.language === track.language && track.kind in modes) { if (track.kind === userPref.kind) { preferredTrack = track; } else if (!preferredTrack) { preferredTrack = track; } } else if (userPref && !userPref.enabled) { preferredTrack = null; firstDesc = null; firstCaptions = null; } else if (track["default"]) { if (track.kind === "descriptions" && !firstDesc) { firstDesc = track; } else if (track.kind in modes && !firstCaptions) { firstCaptions = track; } } } if (preferredTrack) { preferredTrack.mode = "showing"; } else if (firstCaptions) { firstCaptions.mode = "showing"; } else if (firstDesc) { firstDesc.mode = "showing"; } }; _proto.toggleDisplay = function toggleDisplay() { if (this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks) { this.hide(); } else { this.show(); } }; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: "vjs-text-track-display" }, { "translate": "yes", "aria-live": "off", "aria-atomic": "true" }); }; _proto.clearDisplay = function clearDisplay() { if (typeof window_1.WebVTT === "function") { window_1.WebVTT.processCues(window_1, [], this.el_); } }; _proto.updateDisplay = function updateDisplay() { var tracks = this.player_.textTracks(); var allowMultipleShowingTracks = this.options_.allowMultipleShowingTracks; this.clearDisplay(); if (allowMultipleShowingTracks) { var showingTracks = []; for (var _i = 0; _i < tracks.length; ++_i) { var track = tracks[_i]; if (track.mode !== "showing") { continue; } showingTracks.push(track); } this.updateForTrack(showingTracks); return; } var descriptionsTrack = null; var captionsSubtitlesTrack = null; var i2 = tracks.length; while (i2--) { var _track = tracks[i2]; if (_track.mode === "showing") { if (_track.kind === "descriptions") { descriptionsTrack = _track; } else { captionsSubtitlesTrack = _track; } } } if (captionsSubtitlesTrack) { if (this.getAttribute("aria-live") !== "off") { this.setAttribute("aria-live", "off"); } this.updateForTrack(captionsSubtitlesTrack); } else if (descriptionsTrack) { if (this.getAttribute("aria-live") !== "assertive") { this.setAttribute("aria-live", "assertive"); } this.updateForTrack(descriptionsTrack); } }; _proto.updateDisplayState = function updateDisplayState(track) { var overrides = this.player_.textTrackSettings.getValues(); var cues = track.activeCues; var i2 = cues.length; while (i2--) { var cue = cues[i2]; if (!cue) { continue; } var cueDiv = cue.displayState; if (overrides.color) { cueDiv.firstChild.style.color = overrides.color; } if (overrides.textOpacity) { tryUpdateStyle(cueDiv.firstChild, "color", constructColor(overrides.color || "#fff", overrides.textOpacity)); } if (overrides.backgroundColor) { cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor; } if (overrides.backgroundOpacity) { tryUpdateStyle(cueDiv.firstChild, "backgroundColor", constructColor(overrides.backgroundColor || "#000", overrides.backgroundOpacity)); } if (overrides.windowColor) { if (overrides.windowOpacity) { tryUpdateStyle(cueDiv, "backgroundColor", constructColor(overrides.windowColor, overrides.windowOpacity)); } else { cueDiv.style.backgroundColor = overrides.windowColor; } } if (overrides.edgeStyle) { if (overrides.edgeStyle === "dropshadow") { cueDiv.firstChild.style.textShadow = "2px 2px 3px " + darkGray + ", 2px 2px 4px " + darkGray + ", 2px 2px 5px " + darkGray; } else if (overrides.edgeStyle === "raised") { cueDiv.firstChild.style.textShadow = "1px 1px " + darkGray + ", 2px 2px " + darkGray + ", 3px 3px " + darkGray; } else if (overrides.edgeStyle === "depressed") { cueDiv.firstChild.style.textShadow = "1px 1px " + lightGray + ", 0 1px " + lightGray + ", -1px -1px " + darkGray + ", 0 -1px " + darkGray; } else if (overrides.edgeStyle === "uniform") { cueDiv.firstChild.style.textShadow = "0 0 4px " + darkGray + ", 0 0 4px " + darkGray + ", 0 0 4px " + darkGray + ", 0 0 4px " + darkGray; } } if (overrides.fontPercent && overrides.fontPercent !== 1) { var fontSize = window_1.parseFloat(cueDiv.style.fontSize); cueDiv.style.fontSize = fontSize * overrides.fontPercent + "px"; cueDiv.style.height = "auto"; cueDiv.style.top = "auto"; } if (overrides.fontFamily && overrides.fontFamily !== "default") { if (overrides.fontFamily === "small-caps") { cueDiv.firstChild.style.fontVariant = "small-caps"; } else { cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily]; } } } }; _proto.updateForTrack = function updateForTrack(tracks) { if (!Array.isArray(tracks)) { tracks = [tracks]; } if (typeof window_1.WebVTT !== "function" || tracks.every(function(track2) { return !track2.activeCues; })) { return; } var cues = []; for (var i2 = 0; i2 < tracks.length; ++i2) { var track = tracks[i2]; for (var j = 0; j < track.activeCues.length; ++j) { cues.push(track.activeCues[j]); } } window_1.WebVTT.processCues(window_1, cues, this.el_); for (var _i2 = 0; _i2 < tracks.length; ++_i2) { var _track2 = tracks[_i2]; for (var _j = 0; _j < _track2.activeCues.length; ++_j) { var cueEl = _track2.activeCues[_j].displayState; addClass(cueEl, "vjs-text-track-cue"); addClass(cueEl, "vjs-text-track-cue-" + (_track2.language ? _track2.language : _i2)); if (_track2.language) { setAttribute(cueEl, "lang", _track2.language); } } if (this.player_.textTrackSettings) { this.updateDisplayState(_track2); } } }; return TextTrackDisplay2; }(Component$1); Component$1.registerComponent("TextTrackDisplay", TextTrackDisplay); var LoadingSpinner = /* @__PURE__ */ function(_Component) { _inheritsLoose(LoadingSpinner2, _Component); function LoadingSpinner2() { return _Component.apply(this, arguments) || this; } var _proto = LoadingSpinner2.prototype; _proto.createEl = function createEl$12() { var isAudio = this.player_.isAudio(); var playerType = this.localize(isAudio ? "Audio Player" : "Video Player"); var controlText = createEl("span", { className: "vjs-control-text", textContent: this.localize("{1} is loading.", [playerType]) }); var el = _Component.prototype.createEl.call(this, "div", { className: "vjs-loading-spinner", dir: "ltr" }); el.appendChild(controlText); return el; }; return LoadingSpinner2; }(Component$1); Component$1.registerComponent("LoadingSpinner", LoadingSpinner); var Button = /* @__PURE__ */ function(_ClickableComponent) { _inheritsLoose(Button2, _ClickableComponent); function Button2() { return _ClickableComponent.apply(this, arguments) || this; } var _proto = Button2.prototype; _proto.createEl = function createEl$12(tag, props, attributes) { if (props === void 0) { props = {}; } if (attributes === void 0) { attributes = {}; } tag = "button"; props = assign({ className: this.buildCSSClass() }, props); attributes = assign({ type: "button" }, attributes); var el = createEl(tag, props, attributes); el.appendChild(createEl("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": true })); this.createControlTextEl(el); return el; }; _proto.addChild = function addChild(child, options2) { if (options2 === void 0) { options2 = {}; } var className = this.constructor.name; log$1.warn("Adding an actionable (user controllable) child to a Button (" + className + ") is not supported; use a ClickableComponent instead."); return Component$1.prototype.addChild.call(this, child, options2); }; _proto.enable = function enable() { _ClickableComponent.prototype.enable.call(this); this.el_.removeAttribute("disabled"); }; _proto.disable = function disable() { _ClickableComponent.prototype.disable.call(this); this.el_.setAttribute("disabled", "disabled"); }; _proto.handleKeyDown = function handleKeyDown(event2) { if (keycode.isEventKey(event2, "Space") || keycode.isEventKey(event2, "Enter")) { event2.stopPropagation(); return; } _ClickableComponent.prototype.handleKeyDown.call(this, event2); }; return Button2; }(ClickableComponent); Component$1.registerComponent("Button", Button); var BigPlayButton = /* @__PURE__ */ function(_Button) { _inheritsLoose(BigPlayButton2, _Button); function BigPlayButton2(player, options2) { var _this; _this = _Button.call(this, player, options2) || this; _this.mouseused_ = false; _this.on("mousedown", function(e) { return _this.handleMouseDown(e); }); return _this; } var _proto = BigPlayButton2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-big-play-button"; }; _proto.handleClick = function handleClick(event2) { var playPromise = this.player_.play(); if (this.mouseused_ && event2.clientX && event2.clientY) { var sourceIsEncrypted = this.player_.usingPlugin("eme") && this.player_.eme.sessions && this.player_.eme.sessions.length > 0; silencePromise(playPromise); if (this.player_.tech(true) && !((IE_VERSION || IS_EDGE) && sourceIsEncrypted)) { this.player_.tech(true).focus(); } return; } var cb = this.player_.getChild("controlBar"); var playToggle = cb && cb.getChild("playToggle"); if (!playToggle) { this.player_.tech(true).focus(); return; } var playFocus = function playFocus2() { return playToggle.focus(); }; if (isPromise(playPromise)) { playPromise.then(playFocus, function() { }); } else { this.setTimeout(playFocus, 1); } }; _proto.handleKeyDown = function handleKeyDown(event2) { this.mouseused_ = false; _Button.prototype.handleKeyDown.call(this, event2); }; _proto.handleMouseDown = function handleMouseDown(event2) { this.mouseused_ = true; }; return BigPlayButton2; }(Button); BigPlayButton.prototype.controlText_ = "Play Video"; Component$1.registerComponent("BigPlayButton", BigPlayButton); var CloseButton = /* @__PURE__ */ function(_Button) { _inheritsLoose(CloseButton2, _Button); function CloseButton2(player, options2) { var _this; _this = _Button.call(this, player, options2) || this; _this.controlText(options2 && options2.controlText || _this.localize("Close")); return _this; } var _proto = CloseButton2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-close-button " + _Button.prototype.buildCSSClass.call(this); }; _proto.handleClick = function handleClick(event2) { this.trigger({ type: "close", bubbles: false }); }; _proto.handleKeyDown = function handleKeyDown(event2) { if (keycode.isEventKey(event2, "Esc")) { event2.preventDefault(); event2.stopPropagation(); this.trigger("click"); } else { _Button.prototype.handleKeyDown.call(this, event2); } }; return CloseButton2; }(Button); Component$1.registerComponent("CloseButton", CloseButton); var PlayToggle = /* @__PURE__ */ function(_Button) { _inheritsLoose(PlayToggle2, _Button); function PlayToggle2(player, options2) { var _this; if (options2 === void 0) { options2 = {}; } _this = _Button.call(this, player, options2) || this; options2.replay = options2.replay === void 0 || options2.replay; _this.on(player, "play", function(e) { return _this.handlePlay(e); }); _this.on(player, "pause", function(e) { return _this.handlePause(e); }); if (options2.replay) { _this.on(player, "ended", function(e) { return _this.handleEnded(e); }); } return _this; } var _proto = PlayToggle2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-play-control " + _Button.prototype.buildCSSClass.call(this); }; _proto.handleClick = function handleClick(event2) { if (this.player_.paused()) { silencePromise(this.player_.play()); } else { this.player_.pause(); } }; _proto.handleSeeked = function handleSeeked(event2) { this.removeClass("vjs-ended"); if (this.player_.paused()) { this.handlePause(event2); } else { this.handlePlay(event2); } }; _proto.handlePlay = function handlePlay(event2) { this.removeClass("vjs-ended"); this.removeClass("vjs-paused"); this.addClass("vjs-playing"); this.controlText("Pause"); }; _proto.handlePause = function handlePause(event2) { this.removeClass("vjs-playing"); this.addClass("vjs-paused"); this.controlText("Play"); }; _proto.handleEnded = function handleEnded(event2) { var _this2 = this; this.removeClass("vjs-playing"); this.addClass("vjs-ended"); this.controlText("Replay"); this.one(this.player_, "seeked", function(e) { return _this2.handleSeeked(e); }); }; return PlayToggle2; }(Button); PlayToggle.prototype.controlText_ = "Play"; Component$1.registerComponent("PlayToggle", PlayToggle); var defaultImplementation = function defaultImplementation2(seconds, guide) { seconds = seconds < 0 ? 0 : seconds; var s = Math.floor(seconds % 60); var m = Math.floor(seconds / 60 % 60); var h2 = Math.floor(seconds / 3600); var gm = Math.floor(guide / 60 % 60); var gh = Math.floor(guide / 3600); if (isNaN(seconds) || seconds === Infinity) { h2 = m = s = "-"; } h2 = h2 > 0 || gh > 0 ? h2 + ":" : ""; m = ((h2 || gm >= 10) && m < 10 ? "0" + m : m) + ":"; s = s < 10 ? "0" + s : s; return h2 + m + s; }; var implementation = defaultImplementation; function setFormatTime(customImplementation) { implementation = customImplementation; } function resetFormatTime() { implementation = defaultImplementation; } function formatTime(seconds, guide) { if (guide === void 0) { guide = seconds; } return implementation(seconds, guide); } var TimeDisplay = /* @__PURE__ */ function(_Component) { _inheritsLoose(TimeDisplay2, _Component); function TimeDisplay2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.on(player, ["timeupdate", "ended"], function(e) { return _this.updateContent(e); }); _this.updateTextNode_(); return _this; } var _proto = TimeDisplay2.prototype; _proto.createEl = function createEl$12() { var className = this.buildCSSClass(); var el = _Component.prototype.createEl.call(this, "div", { className: className + " vjs-time-control vjs-control" }); var span = createEl("span", { className: "vjs-control-text", textContent: this.localize(this.labelText_) + "\xA0" }, { role: "presentation" }); el.appendChild(span); this.contentEl_ = createEl("span", { className: className + "-display" }, { "aria-live": "off", "role": "presentation" }); el.appendChild(this.contentEl_); return el; }; _proto.dispose = function dispose() { this.contentEl_ = null; this.textNode_ = null; _Component.prototype.dispose.call(this); }; _proto.updateTextNode_ = function updateTextNode_(time) { var _this2 = this; if (time === void 0) { time = 0; } time = formatTime(time); if (this.formattedTime_ === time) { return; } this.formattedTime_ = time; this.requestNamedAnimationFrame("TimeDisplay#updateTextNode_", function() { if (!_this2.contentEl_) { return; } var oldNode = _this2.textNode_; if (oldNode && _this2.contentEl_.firstChild !== oldNode) { oldNode = null; log$1.warn("TimeDisplay#updateTextnode_: Prevented replacement of text node element since it was no longer a child of this node. Appending a new node instead."); } _this2.textNode_ = document_1.createTextNode(_this2.formattedTime_); if (!_this2.textNode_) { return; } if (oldNode) { _this2.contentEl_.replaceChild(_this2.textNode_, oldNode); } else { _this2.contentEl_.appendChild(_this2.textNode_); } }); }; _proto.updateContent = function updateContent(event2) { }; return TimeDisplay2; }(Component$1); TimeDisplay.prototype.labelText_ = "Time"; TimeDisplay.prototype.controlText_ = "Time"; Component$1.registerComponent("TimeDisplay", TimeDisplay); var CurrentTimeDisplay = /* @__PURE__ */ function(_TimeDisplay) { _inheritsLoose(CurrentTimeDisplay2, _TimeDisplay); function CurrentTimeDisplay2() { return _TimeDisplay.apply(this, arguments) || this; } var _proto = CurrentTimeDisplay2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-current-time"; }; _proto.updateContent = function updateContent(event2) { var time; if (this.player_.ended()) { time = this.player_.duration(); } else { time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); } this.updateTextNode_(time); }; return CurrentTimeDisplay2; }(TimeDisplay); CurrentTimeDisplay.prototype.labelText_ = "Current Time"; CurrentTimeDisplay.prototype.controlText_ = "Current Time"; Component$1.registerComponent("CurrentTimeDisplay", CurrentTimeDisplay); var DurationDisplay = /* @__PURE__ */ function(_TimeDisplay) { _inheritsLoose(DurationDisplay2, _TimeDisplay); function DurationDisplay2(player, options2) { var _this; _this = _TimeDisplay.call(this, player, options2) || this; var updateContent = function updateContent2(e) { return _this.updateContent(e); }; _this.on(player, "durationchange", updateContent); _this.on(player, "loadstart", updateContent); _this.on(player, "loadedmetadata", updateContent); return _this; } var _proto = DurationDisplay2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-duration"; }; _proto.updateContent = function updateContent(event2) { var duration5 = this.player_.duration(); this.updateTextNode_(duration5); }; return DurationDisplay2; }(TimeDisplay); DurationDisplay.prototype.labelText_ = "Duration"; DurationDisplay.prototype.controlText_ = "Duration"; Component$1.registerComponent("DurationDisplay", DurationDisplay); var TimeDivider = /* @__PURE__ */ function(_Component) { _inheritsLoose(TimeDivider2, _Component); function TimeDivider2() { return _Component.apply(this, arguments) || this; } var _proto = TimeDivider2.prototype; _proto.createEl = function createEl2() { var el = _Component.prototype.createEl.call(this, "div", { className: "vjs-time-control vjs-time-divider" }, { "aria-hidden": true }); var div = _Component.prototype.createEl.call(this, "div"); var span = _Component.prototype.createEl.call(this, "span", { textContent: "/" }); div.appendChild(span); el.appendChild(div); return el; }; return TimeDivider2; }(Component$1); Component$1.registerComponent("TimeDivider", TimeDivider); var RemainingTimeDisplay = /* @__PURE__ */ function(_TimeDisplay) { _inheritsLoose(RemainingTimeDisplay2, _TimeDisplay); function RemainingTimeDisplay2(player, options2) { var _this; _this = _TimeDisplay.call(this, player, options2) || this; _this.on(player, "durationchange", function(e) { return _this.updateContent(e); }); return _this; } var _proto = RemainingTimeDisplay2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-remaining-time"; }; _proto.createEl = function createEl$12() { var el = _TimeDisplay.prototype.createEl.call(this); if (this.options_.displayNegative !== false) { el.insertBefore(createEl("span", {}, { "aria-hidden": true }, "-"), this.contentEl_); } return el; }; _proto.updateContent = function updateContent(event2) { if (typeof this.player_.duration() !== "number") { return; } var time; if (this.player_.ended()) { time = 0; } else if (this.player_.remainingTimeDisplay) { time = this.player_.remainingTimeDisplay(); } else { time = this.player_.remainingTime(); } this.updateTextNode_(time); }; return RemainingTimeDisplay2; }(TimeDisplay); RemainingTimeDisplay.prototype.labelText_ = "Remaining Time"; RemainingTimeDisplay.prototype.controlText_ = "Remaining Time"; Component$1.registerComponent("RemainingTimeDisplay", RemainingTimeDisplay); var LiveDisplay = /* @__PURE__ */ function(_Component) { _inheritsLoose(LiveDisplay2, _Component); function LiveDisplay2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.updateShowing(); _this.on(_this.player(), "durationchange", function(e) { return _this.updateShowing(e); }); return _this; } var _proto = LiveDisplay2.prototype; _proto.createEl = function createEl$12() { var el = _Component.prototype.createEl.call(this, "div", { className: "vjs-live-control vjs-control" }); this.contentEl_ = createEl("div", { className: "vjs-live-display" }, { "aria-live": "off" }); this.contentEl_.appendChild(createEl("span", { className: "vjs-control-text", textContent: this.localize("Stream Type") + "\xA0" })); this.contentEl_.appendChild(document_1.createTextNode(this.localize("LIVE"))); el.appendChild(this.contentEl_); return el; }; _proto.dispose = function dispose() { this.contentEl_ = null; _Component.prototype.dispose.call(this); }; _proto.updateShowing = function updateShowing(event2) { if (this.player().duration() === Infinity) { this.show(); } else { this.hide(); } }; return LiveDisplay2; }(Component$1); Component$1.registerComponent("LiveDisplay", LiveDisplay); var SeekToLive = /* @__PURE__ */ function(_Button) { _inheritsLoose(SeekToLive2, _Button); function SeekToLive2(player, options2) { var _this; _this = _Button.call(this, player, options2) || this; _this.updateLiveEdgeStatus(); if (_this.player_.liveTracker) { _this.updateLiveEdgeStatusHandler_ = function(e) { return _this.updateLiveEdgeStatus(e); }; _this.on(_this.player_.liveTracker, "liveedgechange", _this.updateLiveEdgeStatusHandler_); } return _this; } var _proto = SeekToLive2.prototype; _proto.createEl = function createEl$12() { var el = _Button.prototype.createEl.call(this, "button", { className: "vjs-seek-to-live-control vjs-control" }); this.textEl_ = createEl("span", { className: "vjs-seek-to-live-text", textContent: this.localize("LIVE") }, { "aria-hidden": "true" }); el.appendChild(this.textEl_); return el; }; _proto.updateLiveEdgeStatus = function updateLiveEdgeStatus() { if (!this.player_.liveTracker || this.player_.liveTracker.atLiveEdge()) { this.setAttribute("aria-disabled", true); this.addClass("vjs-at-live-edge"); this.controlText("Seek to live, currently playing live"); } else { this.setAttribute("aria-disabled", false); this.removeClass("vjs-at-live-edge"); this.controlText("Seek to live, currently behind live"); } }; _proto.handleClick = function handleClick() { this.player_.liveTracker.seekToLiveEdge(); }; _proto.dispose = function dispose() { if (this.player_.liveTracker) { this.off(this.player_.liveTracker, "liveedgechange", this.updateLiveEdgeStatusHandler_); } this.textEl_ = null; _Button.prototype.dispose.call(this); }; return SeekToLive2; }(Button); SeekToLive.prototype.controlText_ = "Seek to live, currently playing live"; Component$1.registerComponent("SeekToLive", SeekToLive); var clamp = function clamp2(number, min2, max2) { number = Number(number); return Math.min(max2, Math.max(min2, isNaN(number) ? min2 : number)); }; var Slider = /* @__PURE__ */ function(_Component) { _inheritsLoose(Slider2, _Component); function Slider2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.handleMouseDown_ = function(e) { return _this.handleMouseDown(e); }; _this.handleMouseUp_ = function(e) { return _this.handleMouseUp(e); }; _this.handleKeyDown_ = function(e) { return _this.handleKeyDown(e); }; _this.handleClick_ = function(e) { return _this.handleClick(e); }; _this.handleMouseMove_ = function(e) { return _this.handleMouseMove(e); }; _this.update_ = function(e) { return _this.update(e); }; _this.bar = _this.getChild(_this.options_.barName); _this.vertical(!!_this.options_.vertical); _this.enable(); return _this; } var _proto = Slider2.prototype; _proto.enabled = function enabled() { return this.enabled_; }; _proto.enable = function enable() { if (this.enabled()) { return; } this.on("mousedown", this.handleMouseDown_); this.on("touchstart", this.handleMouseDown_); this.on("keydown", this.handleKeyDown_); this.on("click", this.handleClick_); this.on(this.player_, "controlsvisible", this.update); if (this.playerEvent) { this.on(this.player_, this.playerEvent, this.update); } this.removeClass("disabled"); this.setAttribute("tabindex", 0); this.enabled_ = true; }; _proto.disable = function disable() { if (!this.enabled()) { return; } var doc = this.bar.el_.ownerDocument; this.off("mousedown", this.handleMouseDown_); this.off("touchstart", this.handleMouseDown_); this.off("keydown", this.handleKeyDown_); this.off("click", this.handleClick_); this.off(this.player_, "controlsvisible", this.update_); this.off(doc, "mousemove", this.handleMouseMove_); this.off(doc, "mouseup", this.handleMouseUp_); this.off(doc, "touchmove", this.handleMouseMove_); this.off(doc, "touchend", this.handleMouseUp_); this.removeAttribute("tabindex"); this.addClass("disabled"); if (this.playerEvent) { this.off(this.player_, this.playerEvent, this.update); } this.enabled_ = false; }; _proto.createEl = function createEl2(type2, props, attributes) { if (props === void 0) { props = {}; } if (attributes === void 0) { attributes = {}; } props.className = props.className + " vjs-slider"; props = assign({ tabIndex: 0 }, props); attributes = assign({ "role": "slider", "aria-valuenow": 0, "aria-valuemin": 0, "aria-valuemax": 100, "tabIndex": 0 }, attributes); return _Component.prototype.createEl.call(this, type2, props, attributes); }; _proto.handleMouseDown = function handleMouseDown(event2) { var doc = this.bar.el_.ownerDocument; if (event2.type === "mousedown") { event2.preventDefault(); } if (event2.type === "touchstart" && !IS_CHROME) { event2.preventDefault(); } blockTextSelection(); this.addClass("vjs-sliding"); this.trigger("slideractive"); this.on(doc, "mousemove", this.handleMouseMove_); this.on(doc, "mouseup", this.handleMouseUp_); this.on(doc, "touchmove", this.handleMouseMove_); this.on(doc, "touchend", this.handleMouseUp_); this.handleMouseMove(event2, true); }; _proto.handleMouseMove = function handleMouseMove(event2) { }; _proto.handleMouseUp = function handleMouseUp() { var doc = this.bar.el_.ownerDocument; unblockTextSelection(); this.removeClass("vjs-sliding"); this.trigger("sliderinactive"); this.off(doc, "mousemove", this.handleMouseMove_); this.off(doc, "mouseup", this.handleMouseUp_); this.off(doc, "touchmove", this.handleMouseMove_); this.off(doc, "touchend", this.handleMouseUp_); this.update(); }; _proto.update = function update() { var _this2 = this; if (!this.el_ || !this.bar) { return; } var progress = this.getProgress(); if (progress === this.progress_) { return progress; } this.progress_ = progress; this.requestNamedAnimationFrame("Slider#update", function() { var sizeKey = _this2.vertical() ? "height" : "width"; _this2.bar.el().style[sizeKey] = (progress * 100).toFixed(2) + "%"; }); return progress; }; _proto.getProgress = function getProgress() { return Number(clamp(this.getPercent(), 0, 1).toFixed(4)); }; _proto.calculateDistance = function calculateDistance(event2) { var position2 = getPointerPosition(this.el_, event2); if (this.vertical()) { return position2.y; } return position2.x; }; _proto.handleKeyDown = function handleKeyDown(event2) { if (keycode.isEventKey(event2, "Left") || keycode.isEventKey(event2, "Down")) { event2.preventDefault(); event2.stopPropagation(); this.stepBack(); } else if (keycode.isEventKey(event2, "Right") || keycode.isEventKey(event2, "Up")) { event2.preventDefault(); event2.stopPropagation(); this.stepForward(); } else { _Component.prototype.handleKeyDown.call(this, event2); } }; _proto.handleClick = function handleClick(event2) { event2.stopPropagation(); event2.preventDefault(); }; _proto.vertical = function vertical(bool) { if (bool === void 0) { return this.vertical_ || false; } this.vertical_ = !!bool; if (this.vertical_) { this.addClass("vjs-slider-vertical"); } else { this.addClass("vjs-slider-horizontal"); } }; return Slider2; }(Component$1); Component$1.registerComponent("Slider", Slider); var percentify = function percentify2(time, end) { return clamp(time / end * 100, 0, 100).toFixed(2) + "%"; }; var LoadProgressBar = /* @__PURE__ */ function(_Component) { _inheritsLoose(LoadProgressBar2, _Component); function LoadProgressBar2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.partEls_ = []; _this.on(player, "progress", function(e) { return _this.update(e); }); return _this; } var _proto = LoadProgressBar2.prototype; _proto.createEl = function createEl$12() { var el = _Component.prototype.createEl.call(this, "div", { className: "vjs-load-progress" }); var wrapper = createEl("span", { className: "vjs-control-text" }); var loadedText = createEl("span", { textContent: this.localize("Loaded") }); var separator = document_1.createTextNode(": "); this.percentageEl_ = createEl("span", { className: "vjs-control-text-loaded-percentage", textContent: "0%" }); el.appendChild(wrapper); wrapper.appendChild(loadedText); wrapper.appendChild(separator); wrapper.appendChild(this.percentageEl_); return el; }; _proto.dispose = function dispose() { this.partEls_ = null; this.percentageEl_ = null; _Component.prototype.dispose.call(this); }; _proto.update = function update(event2) { var _this2 = this; this.requestNamedAnimationFrame("LoadProgressBar#update", function() { var liveTracker = _this2.player_.liveTracker; var buffered = _this2.player_.buffered(); var duration5 = liveTracker && liveTracker.isLive() ? liveTracker.seekableEnd() : _this2.player_.duration(); var bufferedEnd = _this2.player_.bufferedEnd(); var children = _this2.partEls_; var percent = percentify(bufferedEnd, duration5); if (_this2.percent_ !== percent) { _this2.el_.style.width = percent; textContent(_this2.percentageEl_, percent); _this2.percent_ = percent; } for (var i2 = 0; i2 < buffered.length; i2++) { var start2 = buffered.start(i2); var end = buffered.end(i2); var part = children[i2]; if (!part) { part = _this2.el_.appendChild(createEl()); children[i2] = part; } if (part.dataset.start === start2 && part.dataset.end === end) { continue; } part.dataset.start = start2; part.dataset.end = end; part.style.left = percentify(start2, bufferedEnd); part.style.width = percentify(end - start2, bufferedEnd); } for (var _i = children.length; _i > buffered.length; _i--) { _this2.el_.removeChild(children[_i - 1]); } children.length = buffered.length; }); }; return LoadProgressBar2; }(Component$1); Component$1.registerComponent("LoadProgressBar", LoadProgressBar); var TimeTooltip = /* @__PURE__ */ function(_Component) { _inheritsLoose(TimeTooltip2, _Component); function TimeTooltip2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.update = throttle(bind(_assertThisInitialized(_this), _this.update), UPDATE_REFRESH_INTERVAL); return _this; } var _proto = TimeTooltip2.prototype; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: "vjs-time-tooltip" }, { "aria-hidden": "true" }); }; _proto.update = function update(seekBarRect, seekBarPoint, content) { var tooltipRect = findPosition(this.el_); var playerRect = getBoundingClientRect(this.player_.el()); var seekBarPointPx = seekBarRect.width * seekBarPoint; if (!playerRect || !tooltipRect) { return; } var spaceLeftOfPoint = seekBarRect.left - playerRect.left + seekBarPointPx; var spaceRightOfPoint = seekBarRect.width - seekBarPointPx + (playerRect.right - seekBarRect.right); var pullTooltipBy = tooltipRect.width / 2; if (spaceLeftOfPoint < pullTooltipBy) { pullTooltipBy += pullTooltipBy - spaceLeftOfPoint; } else if (spaceRightOfPoint < pullTooltipBy) { pullTooltipBy = spaceRightOfPoint; } if (pullTooltipBy < 0) { pullTooltipBy = 0; } else if (pullTooltipBy > tooltipRect.width) { pullTooltipBy = tooltipRect.width; } pullTooltipBy = Math.round(pullTooltipBy); this.el_.style.right = "-" + pullTooltipBy + "px"; this.write(content); }; _proto.write = function write(content) { textContent(this.el_, content); }; _proto.updateTime = function updateTime(seekBarRect, seekBarPoint, time, cb) { var _this2 = this; this.requestNamedAnimationFrame("TimeTooltip#updateTime", function() { var content; var duration5 = _this2.player_.duration(); if (_this2.player_.liveTracker && _this2.player_.liveTracker.isLive()) { var liveWindow = _this2.player_.liveTracker.liveWindow(); var secondsBehind = liveWindow - seekBarPoint * liveWindow; content = (secondsBehind < 1 ? "" : "-") + formatTime(secondsBehind, liveWindow); } else { content = formatTime(time, duration5); } _this2.update(seekBarRect, seekBarPoint, content); if (cb) { cb(); } }); }; return TimeTooltip2; }(Component$1); Component$1.registerComponent("TimeTooltip", TimeTooltip); var PlayProgressBar = /* @__PURE__ */ function(_Component) { _inheritsLoose(PlayProgressBar2, _Component); function PlayProgressBar2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.update = throttle(bind(_assertThisInitialized(_this), _this.update), UPDATE_REFRESH_INTERVAL); return _this; } var _proto = PlayProgressBar2.prototype; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: "vjs-play-progress vjs-slider-bar" }, { "aria-hidden": "true" }); }; _proto.update = function update(seekBarRect, seekBarPoint) { var timeTooltip = this.getChild("timeTooltip"); if (!timeTooltip) { return; } var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); timeTooltip.updateTime(seekBarRect, seekBarPoint, time); }; return PlayProgressBar2; }(Component$1); PlayProgressBar.prototype.options_ = { children: [] }; if (!IS_IOS && !IS_ANDROID) { PlayProgressBar.prototype.options_.children.push("timeTooltip"); } Component$1.registerComponent("PlayProgressBar", PlayProgressBar); var MouseTimeDisplay = /* @__PURE__ */ function(_Component) { _inheritsLoose(MouseTimeDisplay2, _Component); function MouseTimeDisplay2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.update = throttle(bind(_assertThisInitialized(_this), _this.update), UPDATE_REFRESH_INTERVAL); return _this; } var _proto = MouseTimeDisplay2.prototype; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: "vjs-mouse-display" }); }; _proto.update = function update(seekBarRect, seekBarPoint) { var _this2 = this; var time = seekBarPoint * this.player_.duration(); this.getChild("timeTooltip").updateTime(seekBarRect, seekBarPoint, time, function() { _this2.el_.style.left = seekBarRect.width * seekBarPoint + "px"; }); }; return MouseTimeDisplay2; }(Component$1); MouseTimeDisplay.prototype.options_ = { children: ["timeTooltip"] }; Component$1.registerComponent("MouseTimeDisplay", MouseTimeDisplay); var STEP_SECONDS = 5; var PAGE_KEY_MULTIPLIER = 12; var SeekBar = /* @__PURE__ */ function(_Slider) { _inheritsLoose(SeekBar2, _Slider); function SeekBar2(player, options2) { var _this; _this = _Slider.call(this, player, options2) || this; _this.setEventHandlers_(); return _this; } var _proto = SeekBar2.prototype; _proto.setEventHandlers_ = function setEventHandlers_() { var _this2 = this; this.update_ = bind(this, this.update); this.update = throttle(this.update_, UPDATE_REFRESH_INTERVAL); this.on(this.player_, ["ended", "durationchange", "timeupdate"], this.update); if (this.player_.liveTracker) { this.on(this.player_.liveTracker, "liveedgechange", this.update); } this.updateInterval = null; this.enableIntervalHandler_ = function(e) { return _this2.enableInterval_(e); }; this.disableIntervalHandler_ = function(e) { return _this2.disableInterval_(e); }; this.on(this.player_, ["playing"], this.enableIntervalHandler_); this.on(this.player_, ["ended", "pause", "waiting"], this.disableIntervalHandler_); if ("hidden" in document_1 && "visibilityState" in document_1) { this.on(document_1, "visibilitychange", this.toggleVisibility_); } }; _proto.toggleVisibility_ = function toggleVisibility_(e) { if (document_1.visibilityState === "hidden") { this.cancelNamedAnimationFrame("SeekBar#update"); this.cancelNamedAnimationFrame("Slider#update"); this.disableInterval_(e); } else { if (!this.player_.ended() && !this.player_.paused()) { this.enableInterval_(); } this.update(); } }; _proto.enableInterval_ = function enableInterval_() { if (this.updateInterval) { return; } this.updateInterval = this.setInterval(this.update, UPDATE_REFRESH_INTERVAL); }; _proto.disableInterval_ = function disableInterval_(e) { if (this.player_.liveTracker && this.player_.liveTracker.isLive() && e && e.type !== "ended") { return; } if (!this.updateInterval) { return; } this.clearInterval(this.updateInterval); this.updateInterval = null; }; _proto.createEl = function createEl2() { return _Slider.prototype.createEl.call(this, "div", { className: "vjs-progress-holder" }, { "aria-label": this.localize("Progress Bar") }); }; _proto.update = function update(event2) { var _this3 = this; if (document_1.visibilityState === "hidden") { return; } var percent = _Slider.prototype.update.call(this); this.requestNamedAnimationFrame("SeekBar#update", function() { var currentTime = _this3.player_.ended() ? _this3.player_.duration() : _this3.getCurrentTime_(); var liveTracker = _this3.player_.liveTracker; var duration5 = _this3.player_.duration(); if (liveTracker && liveTracker.isLive()) { duration5 = _this3.player_.liveTracker.liveCurrentTime(); } if (_this3.percent_ !== percent) { _this3.el_.setAttribute("aria-valuenow", (percent * 100).toFixed(2)); _this3.percent_ = percent; } if (_this3.currentTime_ !== currentTime || _this3.duration_ !== duration5) { _this3.el_.setAttribute("aria-valuetext", _this3.localize("progress bar timing: currentTime={1} duration={2}", [formatTime(currentTime, duration5), formatTime(duration5, duration5)], "{1} of {2}")); _this3.currentTime_ = currentTime; _this3.duration_ = duration5; } if (_this3.bar) { _this3.bar.update(getBoundingClientRect(_this3.el()), _this3.getProgress()); } }); return percent; }; _proto.userSeek_ = function userSeek_(ct2) { if (this.player_.liveTracker && this.player_.liveTracker.isLive()) { this.player_.liveTracker.nextSeekedFromUser(); } this.player_.currentTime(ct2); }; _proto.getCurrentTime_ = function getCurrentTime_() { return this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); }; _proto.getPercent = function getPercent() { var currentTime = this.getCurrentTime_(); var percent; var liveTracker = this.player_.liveTracker; if (liveTracker && liveTracker.isLive()) { percent = (currentTime - liveTracker.seekableStart()) / liveTracker.liveWindow(); if (liveTracker.atLiveEdge()) { percent = 1; } } else { percent = currentTime / this.player_.duration(); } return percent; }; _proto.handleMouseDown = function handleMouseDown(event2) { if (!isSingleLeftClick(event2)) { return; } event2.stopPropagation(); this.videoWasPlaying = !this.player_.paused(); this.player_.pause(); _Slider.prototype.handleMouseDown.call(this, event2); }; _proto.handleMouseMove = function handleMouseMove(event2, mouseDown) { if (mouseDown === void 0) { mouseDown = false; } if (!isSingleLeftClick(event2)) { return; } if (!mouseDown && !this.player_.scrubbing()) { this.player_.scrubbing(true); } var newTime; var distance2 = this.calculateDistance(event2); var liveTracker = this.player_.liveTracker; if (!liveTracker || !liveTracker.isLive()) { newTime = distance2 * this.player_.duration(); if (newTime === this.player_.duration()) { newTime = newTime - 0.1; } } else { if (distance2 >= 0.99) { liveTracker.seekToLiveEdge(); return; } var seekableStart = liveTracker.seekableStart(); var seekableEnd = liveTracker.liveCurrentTime(); newTime = seekableStart + distance2 * liveTracker.liveWindow(); if (newTime >= seekableEnd) { newTime = seekableEnd; } if (newTime <= seekableStart) { newTime = seekableStart + 0.1; } if (newTime === Infinity) { return; } } this.userSeek_(newTime); }; _proto.enable = function enable() { _Slider.prototype.enable.call(this); var mouseTimeDisplay = this.getChild("mouseTimeDisplay"); if (!mouseTimeDisplay) { return; } mouseTimeDisplay.show(); }; _proto.disable = function disable() { _Slider.prototype.disable.call(this); var mouseTimeDisplay = this.getChild("mouseTimeDisplay"); if (!mouseTimeDisplay) { return; } mouseTimeDisplay.hide(); }; _proto.handleMouseUp = function handleMouseUp(event2) { _Slider.prototype.handleMouseUp.call(this, event2); if (event2) { event2.stopPropagation(); } this.player_.scrubbing(false); this.player_.trigger({ type: "timeupdate", target: this, manuallyTriggered: true }); if (this.videoWasPlaying) { silencePromise(this.player_.play()); } else { this.update_(); } }; _proto.stepForward = function stepForward() { this.userSeek_(this.player_.currentTime() + STEP_SECONDS); }; _proto.stepBack = function stepBack() { this.userSeek_(this.player_.currentTime() - STEP_SECONDS); }; _proto.handleAction = function handleAction(event2) { if (this.player_.paused()) { this.player_.play(); } else { this.player_.pause(); } }; _proto.handleKeyDown = function handleKeyDown(event2) { var liveTracker = this.player_.liveTracker; if (keycode.isEventKey(event2, "Space") || keycode.isEventKey(event2, "Enter")) { event2.preventDefault(); event2.stopPropagation(); this.handleAction(event2); } else if (keycode.isEventKey(event2, "Home")) { event2.preventDefault(); event2.stopPropagation(); this.userSeek_(0); } else if (keycode.isEventKey(event2, "End")) { event2.preventDefault(); event2.stopPropagation(); if (liveTracker && liveTracker.isLive()) { this.userSeek_(liveTracker.liveCurrentTime()); } else { this.userSeek_(this.player_.duration()); } } else if (/^[0-9]$/.test(keycode(event2))) { event2.preventDefault(); event2.stopPropagation(); var gotoFraction = (keycode.codes[keycode(event2)] - keycode.codes["0"]) * 10 / 100; if (liveTracker && liveTracker.isLive()) { this.userSeek_(liveTracker.seekableStart() + liveTracker.liveWindow() * gotoFraction); } else { this.userSeek_(this.player_.duration() * gotoFraction); } } else if (keycode.isEventKey(event2, "PgDn")) { event2.preventDefault(); event2.stopPropagation(); this.userSeek_(this.player_.currentTime() - STEP_SECONDS * PAGE_KEY_MULTIPLIER); } else if (keycode.isEventKey(event2, "PgUp")) { event2.preventDefault(); event2.stopPropagation(); this.userSeek_(this.player_.currentTime() + STEP_SECONDS * PAGE_KEY_MULTIPLIER); } else { _Slider.prototype.handleKeyDown.call(this, event2); } }; _proto.dispose = function dispose() { this.disableInterval_(); this.off(this.player_, ["ended", "durationchange", "timeupdate"], this.update); if (this.player_.liveTracker) { this.off(this.player_.liveTracker, "liveedgechange", this.update); } this.off(this.player_, ["playing"], this.enableIntervalHandler_); this.off(this.player_, ["ended", "pause", "waiting"], this.disableIntervalHandler_); if ("hidden" in document_1 && "visibilityState" in document_1) { this.off(document_1, "visibilitychange", this.toggleVisibility_); } _Slider.prototype.dispose.call(this); }; return SeekBar2; }(Slider); SeekBar.prototype.options_ = { children: ["loadProgressBar", "playProgressBar"], barName: "playProgressBar" }; if (!IS_IOS && !IS_ANDROID) { SeekBar.prototype.options_.children.splice(1, 0, "mouseTimeDisplay"); } Component$1.registerComponent("SeekBar", SeekBar); var ProgressControl = /* @__PURE__ */ function(_Component) { _inheritsLoose(ProgressControl2, _Component); function ProgressControl2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.handleMouseMove = throttle(bind(_assertThisInitialized(_this), _this.handleMouseMove), UPDATE_REFRESH_INTERVAL); _this.throttledHandleMouseSeek = throttle(bind(_assertThisInitialized(_this), _this.handleMouseSeek), UPDATE_REFRESH_INTERVAL); _this.handleMouseUpHandler_ = function(e) { return _this.handleMouseUp(e); }; _this.handleMouseDownHandler_ = function(e) { return _this.handleMouseDown(e); }; _this.enable(); return _this; } var _proto = ProgressControl2.prototype; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: "vjs-progress-control vjs-control" }); }; _proto.handleMouseMove = function handleMouseMove(event2) { var seekBar = this.getChild("seekBar"); if (!seekBar) { return; } var playProgressBar = seekBar.getChild("playProgressBar"); var mouseTimeDisplay = seekBar.getChild("mouseTimeDisplay"); if (!playProgressBar && !mouseTimeDisplay) { return; } var seekBarEl = seekBar.el(); var seekBarRect = findPosition(seekBarEl); var seekBarPoint = getPointerPosition(seekBarEl, event2).x; seekBarPoint = clamp(seekBarPoint, 0, 1); if (mouseTimeDisplay) { mouseTimeDisplay.update(seekBarRect, seekBarPoint); } if (playProgressBar) { playProgressBar.update(seekBarRect, seekBar.getProgress()); } }; _proto.handleMouseSeek = function handleMouseSeek(event2) { var seekBar = this.getChild("seekBar"); if (seekBar) { seekBar.handleMouseMove(event2); } }; _proto.enabled = function enabled() { return this.enabled_; }; _proto.disable = function disable() { this.children().forEach(function(child) { return child.disable && child.disable(); }); if (!this.enabled()) { return; } this.off(["mousedown", "touchstart"], this.handleMouseDownHandler_); this.off(this.el_, "mousemove", this.handleMouseMove); this.removeListenersAddedOnMousedownAndTouchstart(); this.addClass("disabled"); this.enabled_ = false; if (this.player_.scrubbing()) { var seekBar = this.getChild("seekBar"); this.player_.scrubbing(false); if (seekBar.videoWasPlaying) { silencePromise(this.player_.play()); } } }; _proto.enable = function enable() { this.children().forEach(function(child) { return child.enable && child.enable(); }); if (this.enabled()) { return; } this.on(["mousedown", "touchstart"], this.handleMouseDownHandler_); this.on(this.el_, "mousemove", this.handleMouseMove); this.removeClass("disabled"); this.enabled_ = true; }; _proto.removeListenersAddedOnMousedownAndTouchstart = function removeListenersAddedOnMousedownAndTouchstart() { var doc = this.el_.ownerDocument; this.off(doc, "mousemove", this.throttledHandleMouseSeek); this.off(doc, "touchmove", this.throttledHandleMouseSeek); this.off(doc, "mouseup", this.handleMouseUpHandler_); this.off(doc, "touchend", this.handleMouseUpHandler_); }; _proto.handleMouseDown = function handleMouseDown(event2) { var doc = this.el_.ownerDocument; var seekBar = this.getChild("seekBar"); if (seekBar) { seekBar.handleMouseDown(event2); } this.on(doc, "mousemove", this.throttledHandleMouseSeek); this.on(doc, "touchmove", this.throttledHandleMouseSeek); this.on(doc, "mouseup", this.handleMouseUpHandler_); this.on(doc, "touchend", this.handleMouseUpHandler_); }; _proto.handleMouseUp = function handleMouseUp(event2) { var seekBar = this.getChild("seekBar"); if (seekBar) { seekBar.handleMouseUp(event2); } this.removeListenersAddedOnMousedownAndTouchstart(); }; return ProgressControl2; }(Component$1); ProgressControl.prototype.options_ = { children: ["seekBar"] }; Component$1.registerComponent("ProgressControl", ProgressControl); var PictureInPictureToggle = /* @__PURE__ */ function(_Button) { _inheritsLoose(PictureInPictureToggle2, _Button); function PictureInPictureToggle2(player, options2) { var _this; _this = _Button.call(this, player, options2) || this; _this.on(player, ["enterpictureinpicture", "leavepictureinpicture"], function(e) { return _this.handlePictureInPictureChange(e); }); _this.on(player, ["disablepictureinpicturechanged", "loadedmetadata"], function(e) { return _this.handlePictureInPictureEnabledChange(e); }); _this.on(player, ["loadedmetadata", "audioonlymodechange", "audiopostermodechange"], function() { var isSourceAudio = player.currentType().substring(0, 5) === "audio"; if (isSourceAudio || player.audioPosterMode() || player.audioOnlyMode()) { if (player.isInPictureInPicture()) { player.exitPictureInPicture(); } _this.hide(); } else { _this.show(); } }); _this.disable(); return _this; } var _proto = PictureInPictureToggle2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-picture-in-picture-control " + _Button.prototype.buildCSSClass.call(this); }; _proto.handlePictureInPictureEnabledChange = function handlePictureInPictureEnabledChange() { if (document_1.pictureInPictureEnabled && this.player_.disablePictureInPicture() === false) { this.enable(); } else { this.disable(); } }; _proto.handlePictureInPictureChange = function handlePictureInPictureChange(event2) { if (this.player_.isInPictureInPicture()) { this.controlText("Exit Picture-in-Picture"); } else { this.controlText("Picture-in-Picture"); } this.handlePictureInPictureEnabledChange(); }; _proto.handleClick = function handleClick(event2) { if (!this.player_.isInPictureInPicture()) { this.player_.requestPictureInPicture(); } else { this.player_.exitPictureInPicture(); } }; return PictureInPictureToggle2; }(Button); PictureInPictureToggle.prototype.controlText_ = "Picture-in-Picture"; Component$1.registerComponent("PictureInPictureToggle", PictureInPictureToggle); var FullscreenToggle = /* @__PURE__ */ function(_Button) { _inheritsLoose(FullscreenToggle2, _Button); function FullscreenToggle2(player, options2) { var _this; _this = _Button.call(this, player, options2) || this; _this.on(player, "fullscreenchange", function(e) { return _this.handleFullscreenChange(e); }); if (document_1[player.fsApi_.fullscreenEnabled] === false) { _this.disable(); } return _this; } var _proto = FullscreenToggle2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-fullscreen-control " + _Button.prototype.buildCSSClass.call(this); }; _proto.handleFullscreenChange = function handleFullscreenChange(event2) { if (this.player_.isFullscreen()) { this.controlText("Non-Fullscreen"); } else { this.controlText("Fullscreen"); } }; _proto.handleClick = function handleClick(event2) { if (!this.player_.isFullscreen()) { this.player_.requestFullscreen(); } else { this.player_.exitFullscreen(); } }; return FullscreenToggle2; }(Button); FullscreenToggle.prototype.controlText_ = "Fullscreen"; Component$1.registerComponent("FullscreenToggle", FullscreenToggle); var checkVolumeSupport = function checkVolumeSupport2(self2, player) { if (player.tech_ && !player.tech_.featuresVolumeControl) { self2.addClass("vjs-hidden"); } self2.on(player, "loadstart", function() { if (!player.tech_.featuresVolumeControl) { self2.addClass("vjs-hidden"); } else { self2.removeClass("vjs-hidden"); } }); }; var VolumeLevel = /* @__PURE__ */ function(_Component) { _inheritsLoose(VolumeLevel2, _Component); function VolumeLevel2() { return _Component.apply(this, arguments) || this; } var _proto = VolumeLevel2.prototype; _proto.createEl = function createEl2() { var el = _Component.prototype.createEl.call(this, "div", { className: "vjs-volume-level" }); el.appendChild(_Component.prototype.createEl.call(this, "span", { className: "vjs-control-text" })); return el; }; return VolumeLevel2; }(Component$1); Component$1.registerComponent("VolumeLevel", VolumeLevel); var VolumeLevelTooltip = /* @__PURE__ */ function(_Component) { _inheritsLoose(VolumeLevelTooltip2, _Component); function VolumeLevelTooltip2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.update = throttle(bind(_assertThisInitialized(_this), _this.update), UPDATE_REFRESH_INTERVAL); return _this; } var _proto = VolumeLevelTooltip2.prototype; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: "vjs-volume-tooltip" }, { "aria-hidden": "true" }); }; _proto.update = function update(rangeBarRect, rangeBarPoint, vertical, content) { if (!vertical) { var tooltipRect = getBoundingClientRect(this.el_); var playerRect = getBoundingClientRect(this.player_.el()); var volumeBarPointPx = rangeBarRect.width * rangeBarPoint; if (!playerRect || !tooltipRect) { return; } var spaceLeftOfPoint = rangeBarRect.left - playerRect.left + volumeBarPointPx; var spaceRightOfPoint = rangeBarRect.width - volumeBarPointPx + (playerRect.right - rangeBarRect.right); var pullTooltipBy = tooltipRect.width / 2; if (spaceLeftOfPoint < pullTooltipBy) { pullTooltipBy += pullTooltipBy - spaceLeftOfPoint; } else if (spaceRightOfPoint < pullTooltipBy) { pullTooltipBy = spaceRightOfPoint; } if (pullTooltipBy < 0) { pullTooltipBy = 0; } else if (pullTooltipBy > tooltipRect.width) { pullTooltipBy = tooltipRect.width; } this.el_.style.right = "-" + pullTooltipBy + "px"; } this.write(content + "%"); }; _proto.write = function write(content) { textContent(this.el_, content); }; _proto.updateVolume = function updateVolume(rangeBarRect, rangeBarPoint, vertical, volume, cb) { var _this2 = this; this.requestNamedAnimationFrame("VolumeLevelTooltip#updateVolume", function() { _this2.update(rangeBarRect, rangeBarPoint, vertical, volume.toFixed(0)); if (cb) { cb(); } }); }; return VolumeLevelTooltip2; }(Component$1); Component$1.registerComponent("VolumeLevelTooltip", VolumeLevelTooltip); var MouseVolumeLevelDisplay = /* @__PURE__ */ function(_Component) { _inheritsLoose(MouseVolumeLevelDisplay2, _Component); function MouseVolumeLevelDisplay2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; _this.update = throttle(bind(_assertThisInitialized(_this), _this.update), UPDATE_REFRESH_INTERVAL); return _this; } var _proto = MouseVolumeLevelDisplay2.prototype; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: "vjs-mouse-display" }); }; _proto.update = function update(rangeBarRect, rangeBarPoint, vertical) { var _this2 = this; var volume = 100 * rangeBarPoint; this.getChild("volumeLevelTooltip").updateVolume(rangeBarRect, rangeBarPoint, vertical, volume, function() { if (vertical) { _this2.el_.style.bottom = rangeBarRect.height * rangeBarPoint + "px"; } else { _this2.el_.style.left = rangeBarRect.width * rangeBarPoint + "px"; } }); }; return MouseVolumeLevelDisplay2; }(Component$1); MouseVolumeLevelDisplay.prototype.options_ = { children: ["volumeLevelTooltip"] }; Component$1.registerComponent("MouseVolumeLevelDisplay", MouseVolumeLevelDisplay); var VolumeBar = /* @__PURE__ */ function(_Slider) { _inheritsLoose(VolumeBar2, _Slider); function VolumeBar2(player, options2) { var _this; _this = _Slider.call(this, player, options2) || this; _this.on("slideractive", function(e) { return _this.updateLastVolume_(e); }); _this.on(player, "volumechange", function(e) { return _this.updateARIAAttributes(e); }); player.ready(function() { return _this.updateARIAAttributes(); }); return _this; } var _proto = VolumeBar2.prototype; _proto.createEl = function createEl2() { return _Slider.prototype.createEl.call(this, "div", { className: "vjs-volume-bar vjs-slider-bar" }, { "aria-label": this.localize("Volume Level"), "aria-live": "polite" }); }; _proto.handleMouseDown = function handleMouseDown(event2) { if (!isSingleLeftClick(event2)) { return; } _Slider.prototype.handleMouseDown.call(this, event2); }; _proto.handleMouseMove = function handleMouseMove(event2) { var mouseVolumeLevelDisplay = this.getChild("mouseVolumeLevelDisplay"); if (mouseVolumeLevelDisplay) { var volumeBarEl = this.el(); var volumeBarRect = getBoundingClientRect(volumeBarEl); var vertical = this.vertical(); var volumeBarPoint = getPointerPosition(volumeBarEl, event2); volumeBarPoint = vertical ? volumeBarPoint.y : volumeBarPoint.x; volumeBarPoint = clamp(volumeBarPoint, 0, 1); mouseVolumeLevelDisplay.update(volumeBarRect, volumeBarPoint, vertical); } if (!isSingleLeftClick(event2)) { return; } this.checkMuted(); this.player_.volume(this.calculateDistance(event2)); }; _proto.checkMuted = function checkMuted() { if (this.player_.muted()) { this.player_.muted(false); } }; _proto.getPercent = function getPercent() { if (this.player_.muted()) { return 0; } return this.player_.volume(); }; _proto.stepForward = function stepForward() { this.checkMuted(); this.player_.volume(this.player_.volume() + 0.1); }; _proto.stepBack = function stepBack() { this.checkMuted(); this.player_.volume(this.player_.volume() - 0.1); }; _proto.updateARIAAttributes = function updateARIAAttributes(event2) { var ariaValue = this.player_.muted() ? 0 : this.volumeAsPercentage_(); this.el_.setAttribute("aria-valuenow", ariaValue); this.el_.setAttribute("aria-valuetext", ariaValue + "%"); }; _proto.volumeAsPercentage_ = function volumeAsPercentage_() { return Math.round(this.player_.volume() * 100); }; _proto.updateLastVolume_ = function updateLastVolume_() { var _this2 = this; var volumeBeforeDrag = this.player_.volume(); this.one("sliderinactive", function() { if (_this2.player_.volume() === 0) { _this2.player_.lastVolume_(volumeBeforeDrag); } }); }; return VolumeBar2; }(Slider); VolumeBar.prototype.options_ = { children: ["volumeLevel"], barName: "volumeLevel" }; if (!IS_IOS && !IS_ANDROID) { VolumeBar.prototype.options_.children.splice(0, 0, "mouseVolumeLevelDisplay"); } VolumeBar.prototype.playerEvent = "volumechange"; Component$1.registerComponent("VolumeBar", VolumeBar); var VolumeControl = /* @__PURE__ */ function(_Component) { _inheritsLoose(VolumeControl2, _Component); function VolumeControl2(player, options2) { var _this; if (options2 === void 0) { options2 = {}; } options2.vertical = options2.vertical || false; if (typeof options2.volumeBar === "undefined" || isPlain(options2.volumeBar)) { options2.volumeBar = options2.volumeBar || {}; options2.volumeBar.vertical = options2.vertical; } _this = _Component.call(this, player, options2) || this; checkVolumeSupport(_assertThisInitialized(_this), player); _this.throttledHandleMouseMove = throttle(bind(_assertThisInitialized(_this), _this.handleMouseMove), UPDATE_REFRESH_INTERVAL); _this.handleMouseUpHandler_ = function(e) { return _this.handleMouseUp(e); }; _this.on("mousedown", function(e) { return _this.handleMouseDown(e); }); _this.on("touchstart", function(e) { return _this.handleMouseDown(e); }); _this.on("mousemove", function(e) { return _this.handleMouseMove(e); }); _this.on(_this.volumeBar, ["focus", "slideractive"], function() { _this.volumeBar.addClass("vjs-slider-active"); _this.addClass("vjs-slider-active"); _this.trigger("slideractive"); }); _this.on(_this.volumeBar, ["blur", "sliderinactive"], function() { _this.volumeBar.removeClass("vjs-slider-active"); _this.removeClass("vjs-slider-active"); _this.trigger("sliderinactive"); }); return _this; } var _proto = VolumeControl2.prototype; _proto.createEl = function createEl2() { var orientationClass = "vjs-volume-horizontal"; if (this.options_.vertical) { orientationClass = "vjs-volume-vertical"; } return _Component.prototype.createEl.call(this, "div", { className: "vjs-volume-control vjs-control " + orientationClass }); }; _proto.handleMouseDown = function handleMouseDown(event2) { var doc = this.el_.ownerDocument; this.on(doc, "mousemove", this.throttledHandleMouseMove); this.on(doc, "touchmove", this.throttledHandleMouseMove); this.on(doc, "mouseup", this.handleMouseUpHandler_); this.on(doc, "touchend", this.handleMouseUpHandler_); }; _proto.handleMouseUp = function handleMouseUp(event2) { var doc = this.el_.ownerDocument; this.off(doc, "mousemove", this.throttledHandleMouseMove); this.off(doc, "touchmove", this.throttledHandleMouseMove); this.off(doc, "mouseup", this.handleMouseUpHandler_); this.off(doc, "touchend", this.handleMouseUpHandler_); }; _proto.handleMouseMove = function handleMouseMove(event2) { this.volumeBar.handleMouseMove(event2); }; return VolumeControl2; }(Component$1); VolumeControl.prototype.options_ = { children: ["volumeBar"] }; Component$1.registerComponent("VolumeControl", VolumeControl); var checkMuteSupport = function checkMuteSupport2(self2, player) { if (player.tech_ && !player.tech_.featuresMuteControl) { self2.addClass("vjs-hidden"); } self2.on(player, "loadstart", function() { if (!player.tech_.featuresMuteControl) { self2.addClass("vjs-hidden"); } else { self2.removeClass("vjs-hidden"); } }); }; var MuteToggle = /* @__PURE__ */ function(_Button) { _inheritsLoose(MuteToggle2, _Button); function MuteToggle2(player, options2) { var _this; _this = _Button.call(this, player, options2) || this; checkMuteSupport(_assertThisInitialized(_this), player); _this.on(player, ["loadstart", "volumechange"], function(e) { return _this.update(e); }); return _this; } var _proto = MuteToggle2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-mute-control " + _Button.prototype.buildCSSClass.call(this); }; _proto.handleClick = function handleClick(event2) { var vol = this.player_.volume(); var lastVolume = this.player_.lastVolume_(); if (vol === 0) { var volumeToSet = lastVolume < 0.1 ? 0.1 : lastVolume; this.player_.volume(volumeToSet); this.player_.muted(false); } else { this.player_.muted(this.player_.muted() ? false : true); } }; _proto.update = function update(event2) { this.updateIcon_(); this.updateControlText_(); }; _proto.updateIcon_ = function updateIcon_() { var vol = this.player_.volume(); var level = 3; if (IS_IOS && this.player_.tech_ && this.player_.tech_.el_) { this.player_.muted(this.player_.tech_.el_.muted); } if (vol === 0 || this.player_.muted()) { level = 0; } else if (vol < 0.33) { level = 1; } else if (vol < 0.67) { level = 2; } for (var i2 = 0; i2 < 4; i2++) { removeClass(this.el_, "vjs-vol-" + i2); } addClass(this.el_, "vjs-vol-" + level); }; _proto.updateControlText_ = function updateControlText_() { var soundOff = this.player_.muted() || this.player_.volume() === 0; var text = soundOff ? "Unmute" : "Mute"; if (this.controlText() !== text) { this.controlText(text); } }; return MuteToggle2; }(Button); MuteToggle.prototype.controlText_ = "Mute"; Component$1.registerComponent("MuteToggle", MuteToggle); var VolumePanel = /* @__PURE__ */ function(_Component) { _inheritsLoose(VolumePanel2, _Component); function VolumePanel2(player, options2) { var _this; if (options2 === void 0) { options2 = {}; } if (typeof options2.inline !== "undefined") { options2.inline = options2.inline; } else { options2.inline = true; } if (typeof options2.volumeControl === "undefined" || isPlain(options2.volumeControl)) { options2.volumeControl = options2.volumeControl || {}; options2.volumeControl.vertical = !options2.inline; } _this = _Component.call(this, player, options2) || this; _this.handleKeyPressHandler_ = function(e) { return _this.handleKeyPress(e); }; _this.on(player, ["loadstart"], function(e) { return _this.volumePanelState_(e); }); _this.on(_this.muteToggle, "keyup", function(e) { return _this.handleKeyPress(e); }); _this.on(_this.volumeControl, "keyup", function(e) { return _this.handleVolumeControlKeyUp(e); }); _this.on("keydown", function(e) { return _this.handleKeyPress(e); }); _this.on("mouseover", function(e) { return _this.handleMouseOver(e); }); _this.on("mouseout", function(e) { return _this.handleMouseOut(e); }); _this.on(_this.volumeControl, ["slideractive"], _this.sliderActive_); _this.on(_this.volumeControl, ["sliderinactive"], _this.sliderInactive_); return _this; } var _proto = VolumePanel2.prototype; _proto.sliderActive_ = function sliderActive_() { this.addClass("vjs-slider-active"); }; _proto.sliderInactive_ = function sliderInactive_() { this.removeClass("vjs-slider-active"); }; _proto.volumePanelState_ = function volumePanelState_() { if (this.volumeControl.hasClass("vjs-hidden") && this.muteToggle.hasClass("vjs-hidden")) { this.addClass("vjs-hidden"); } if (this.volumeControl.hasClass("vjs-hidden") && !this.muteToggle.hasClass("vjs-hidden")) { this.addClass("vjs-mute-toggle-only"); } }; _proto.createEl = function createEl2() { var orientationClass = "vjs-volume-panel-horizontal"; if (!this.options_.inline) { orientationClass = "vjs-volume-panel-vertical"; } return _Component.prototype.createEl.call(this, "div", { className: "vjs-volume-panel vjs-control " + orientationClass }); }; _proto.dispose = function dispose() { this.handleMouseOut(); _Component.prototype.dispose.call(this); }; _proto.handleVolumeControlKeyUp = function handleVolumeControlKeyUp(event2) { if (keycode.isEventKey(event2, "Esc")) { this.muteToggle.focus(); } }; _proto.handleMouseOver = function handleMouseOver(event2) { this.addClass("vjs-hover"); on(document_1, "keyup", this.handleKeyPressHandler_); }; _proto.handleMouseOut = function handleMouseOut(event2) { this.removeClass("vjs-hover"); off(document_1, "keyup", this.handleKeyPressHandler_); }; _proto.handleKeyPress = function handleKeyPress(event2) { if (keycode.isEventKey(event2, "Esc")) { this.handleMouseOut(); } }; return VolumePanel2; }(Component$1); VolumePanel.prototype.options_ = { children: ["muteToggle", "volumeControl"] }; Component$1.registerComponent("VolumePanel", VolumePanel); var Menu = /* @__PURE__ */ function(_Component) { _inheritsLoose(Menu2, _Component); function Menu2(player, options2) { var _this; _this = _Component.call(this, player, options2) || this; if (options2) { _this.menuButton_ = options2.menuButton; } _this.focusedChild_ = -1; _this.on("keydown", function(e) { return _this.handleKeyDown(e); }); _this.boundHandleBlur_ = function(e) { return _this.handleBlur(e); }; _this.boundHandleTapClick_ = function(e) { return _this.handleTapClick(e); }; return _this; } var _proto = Menu2.prototype; _proto.addEventListenerForItem = function addEventListenerForItem(component) { if (!(component instanceof Component$1)) { return; } this.on(component, "blur", this.boundHandleBlur_); this.on(component, ["tap", "click"], this.boundHandleTapClick_); }; _proto.removeEventListenerForItem = function removeEventListenerForItem(component) { if (!(component instanceof Component$1)) { return; } this.off(component, "blur", this.boundHandleBlur_); this.off(component, ["tap", "click"], this.boundHandleTapClick_); }; _proto.removeChild = function removeChild(component) { if (typeof component === "string") { component = this.getChild(component); } this.removeEventListenerForItem(component); _Component.prototype.removeChild.call(this, component); }; _proto.addItem = function addItem(component) { var childComponent = this.addChild(component); if (childComponent) { this.addEventListenerForItem(childComponent); } }; _proto.createEl = function createEl$12() { var contentElType = this.options_.contentElType || "ul"; this.contentEl_ = createEl(contentElType, { className: "vjs-menu-content" }); this.contentEl_.setAttribute("role", "menu"); var el = _Component.prototype.createEl.call(this, "div", { append: this.contentEl_, className: "vjs-menu" }); el.appendChild(this.contentEl_); on(el, "click", function(event2) { event2.preventDefault(); event2.stopImmediatePropagation(); }); return el; }; _proto.dispose = function dispose() { this.contentEl_ = null; this.boundHandleBlur_ = null; this.boundHandleTapClick_ = null; _Component.prototype.dispose.call(this); }; _proto.handleBlur = function handleBlur(event2) { var relatedTarget = event2.relatedTarget || document_1.activeElement; if (!this.children().some(function(element) { return element.el() === relatedTarget; })) { var btn = this.menuButton_; if (btn && btn.buttonPressed_ && relatedTarget !== btn.el().firstChild) { btn.unpressButton(); } } }; _proto.handleTapClick = function handleTapClick(event2) { if (this.menuButton_) { this.menuButton_.unpressButton(); var childComponents = this.children(); if (!Array.isArray(childComponents)) { return; } var foundComponent = childComponents.filter(function(component) { return component.el() === event2.target; })[0]; if (!foundComponent) { return; } if (foundComponent.name() !== "CaptionSettingsMenuItem") { this.menuButton_.focus(); } } }; _proto.handleKeyDown = function handleKeyDown(event2) { if (keycode.isEventKey(event2, "Left") || keycode.isEventKey(event2, "Down")) { event2.preventDefault(); event2.stopPropagation(); this.stepForward(); } else if (keycode.isEventKey(event2, "Right") || keycode.isEventKey(event2, "Up")) { event2.preventDefault(); event2.stopPropagation(); this.stepBack(); } }; _proto.stepForward = function stepForward() { var stepChild = 0; if (this.focusedChild_ !== void 0) { stepChild = this.focusedChild_ + 1; } this.focus(stepChild); }; _proto.stepBack = function stepBack() { var stepChild = 0; if (this.focusedChild_ !== void 0) { stepChild = this.focusedChild_ - 1; } this.focus(stepChild); }; _proto.focus = function focus(item) { if (item === void 0) { item = 0; } var children = this.children().slice(); var haveTitle = children.length && children[0].hasClass("vjs-menu-title"); if (haveTitle) { children.shift(); } if (children.length > 0) { if (item < 0) { item = 0; } else if (item >= children.length) { item = children.length - 1; } this.focusedChild_ = item; children[item].el_.focus(); } }; return Menu2; }(Component$1); Component$1.registerComponent("Menu", Menu); var MenuButton = /* @__PURE__ */ function(_Component) { _inheritsLoose(MenuButton2, _Component); function MenuButton2(player, options2) { var _this; if (options2 === void 0) { options2 = {}; } _this = _Component.call(this, player, options2) || this; _this.menuButton_ = new Button(player, options2); _this.menuButton_.controlText(_this.controlText_); _this.menuButton_.el_.setAttribute("aria-haspopup", "true"); var buttonClass = Button.prototype.buildCSSClass(); _this.menuButton_.el_.className = _this.buildCSSClass() + " " + buttonClass; _this.menuButton_.removeClass("vjs-control"); _this.addChild(_this.menuButton_); _this.update(); _this.enabled_ = true; var handleClick = function handleClick2(e) { return _this.handleClick(e); }; _this.handleMenuKeyUp_ = function(e) { return _this.handleMenuKeyUp(e); }; _this.on(_this.menuButton_, "tap", handleClick); _this.on(_this.menuButton_, "click", handleClick); _this.on(_this.menuButton_, "keydown", function(e) { return _this.handleKeyDown(e); }); _this.on(_this.menuButton_, "mouseenter", function() { _this.addClass("vjs-hover"); _this.menu.show(); on(document_1, "keyup", _this.handleMenuKeyUp_); }); _this.on("mouseleave", function(e) { return _this.handleMouseLeave(e); }); _this.on("keydown", function(e) { return _this.handleSubmenuKeyDown(e); }); return _this; } var _proto = MenuButton2.prototype; _proto.update = function update() { var menu = this.createMenu(); if (this.menu) { this.menu.dispose(); this.removeChild(this.menu); } this.menu = menu; this.addChild(menu); this.buttonPressed_ = false; this.menuButton_.el_.setAttribute("aria-expanded", "false"); if (this.items && this.items.length <= this.hideThreshold_) { this.hide(); this.menu.contentEl_.removeAttribute("role"); } else { this.show(); this.menu.contentEl_.setAttribute("role", "menu"); } }; _proto.createMenu = function createMenu() { var menu = new Menu(this.player_, { menuButton: this }); this.hideThreshold_ = 0; if (this.options_.title) { var titleEl = createEl("li", { className: "vjs-menu-title", textContent: toTitleCase$1(this.options_.title), tabIndex: -1 }); var titleComponent = new Component$1(this.player_, { el: titleEl }); menu.addItem(titleComponent); } this.items = this.createItems(); if (this.items) { for (var i2 = 0; i2 < this.items.length; i2++) { menu.addItem(this.items[i2]); } } return menu; }; _proto.createItems = function createItems() { }; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: this.buildWrapperCSSClass() }, {}); }; _proto.buildWrapperCSSClass = function buildWrapperCSSClass() { var menuButtonClass = "vjs-menu-button"; if (this.options_.inline === true) { menuButtonClass += "-inline"; } else { menuButtonClass += "-popup"; } var buttonClass = Button.prototype.buildCSSClass(); return "vjs-menu-button " + menuButtonClass + " " + buttonClass + " " + _Component.prototype.buildCSSClass.call(this); }; _proto.buildCSSClass = function buildCSSClass() { var menuButtonClass = "vjs-menu-button"; if (this.options_.inline === true) { menuButtonClass += "-inline"; } else { menuButtonClass += "-popup"; } return "vjs-menu-button " + menuButtonClass + " " + _Component.prototype.buildCSSClass.call(this); }; _proto.controlText = function controlText(text, el) { if (el === void 0) { el = this.menuButton_.el(); } return this.menuButton_.controlText(text, el); }; _proto.dispose = function dispose() { this.handleMouseLeave(); _Component.prototype.dispose.call(this); }; _proto.handleClick = function handleClick(event2) { if (this.buttonPressed_) { this.unpressButton(); } else { this.pressButton(); } }; _proto.handleMouseLeave = function handleMouseLeave(event2) { this.removeClass("vjs-hover"); off(document_1, "keyup", this.handleMenuKeyUp_); }; _proto.focus = function focus() { this.menuButton_.focus(); }; _proto.blur = function blur() { this.menuButton_.blur(); }; _proto.handleKeyDown = function handleKeyDown(event2) { if (keycode.isEventKey(event2, "Esc") || keycode.isEventKey(event2, "Tab")) { if (this.buttonPressed_) { this.unpressButton(); } if (!keycode.isEventKey(event2, "Tab")) { event2.preventDefault(); this.menuButton_.focus(); } } else if (keycode.isEventKey(event2, "Up") || keycode.isEventKey(event2, "Down")) { if (!this.buttonPressed_) { event2.preventDefault(); this.pressButton(); } } }; _proto.handleMenuKeyUp = function handleMenuKeyUp(event2) { if (keycode.isEventKey(event2, "Esc") || keycode.isEventKey(event2, "Tab")) { this.removeClass("vjs-hover"); } }; _proto.handleSubmenuKeyPress = function handleSubmenuKeyPress(event2) { this.handleSubmenuKeyDown(event2); }; _proto.handleSubmenuKeyDown = function handleSubmenuKeyDown(event2) { if (keycode.isEventKey(event2, "Esc") || keycode.isEventKey(event2, "Tab")) { if (this.buttonPressed_) { this.unpressButton(); } if (!keycode.isEventKey(event2, "Tab")) { event2.preventDefault(); this.menuButton_.focus(); } } }; _proto.pressButton = function pressButton() { if (this.enabled_) { this.buttonPressed_ = true; this.menu.show(); this.menu.lockShowing(); this.menuButton_.el_.setAttribute("aria-expanded", "true"); if (IS_IOS && isInFrame()) { return; } this.menu.focus(); } }; _proto.unpressButton = function unpressButton() { if (this.enabled_) { this.buttonPressed_ = false; this.menu.unlockShowing(); this.menu.hide(); this.menuButton_.el_.setAttribute("aria-expanded", "false"); } }; _proto.disable = function disable() { this.unpressButton(); this.enabled_ = false; this.addClass("vjs-disabled"); this.menuButton_.disable(); }; _proto.enable = function enable() { this.enabled_ = true; this.removeClass("vjs-disabled"); this.menuButton_.enable(); }; return MenuButton2; }(Component$1); Component$1.registerComponent("MenuButton", MenuButton); var TrackButton = /* @__PURE__ */ function(_MenuButton) { _inheritsLoose(TrackButton2, _MenuButton); function TrackButton2(player, options2) { var _this; var tracks = options2.tracks; _this = _MenuButton.call(this, player, options2) || this; if (_this.items.length <= 1) { _this.hide(); } if (!tracks) { return _assertThisInitialized(_this); } var updateHandler = bind(_assertThisInitialized(_this), _this.update); tracks.addEventListener("removetrack", updateHandler); tracks.addEventListener("addtrack", updateHandler); tracks.addEventListener("labelchange", updateHandler); _this.player_.on("ready", updateHandler); _this.player_.on("dispose", function() { tracks.removeEventListener("removetrack", updateHandler); tracks.removeEventListener("addtrack", updateHandler); tracks.removeEventListener("labelchange", updateHandler); }); return _this; } return TrackButton2; }(MenuButton); Component$1.registerComponent("TrackButton", TrackButton); var MenuKeys = ["Tab", "Esc", "Up", "Down", "Right", "Left"]; var MenuItem = /* @__PURE__ */ function(_ClickableComponent) { _inheritsLoose(MenuItem2, _ClickableComponent); function MenuItem2(player, options2) { var _this; _this = _ClickableComponent.call(this, player, options2) || this; _this.selectable = options2.selectable; _this.isSelected_ = options2.selected || false; _this.multiSelectable = options2.multiSelectable; _this.selected(_this.isSelected_); if (_this.selectable) { if (_this.multiSelectable) { _this.el_.setAttribute("role", "menuitemcheckbox"); } else { _this.el_.setAttribute("role", "menuitemradio"); } } else { _this.el_.setAttribute("role", "menuitem"); } return _this; } var _proto = MenuItem2.prototype; _proto.createEl = function createEl$12(type2, props, attrs) { this.nonIconControl = true; var el = _ClickableComponent.prototype.createEl.call(this, "li", assign({ className: "vjs-menu-item", tabIndex: -1 }, props), attrs); el.replaceChild(createEl("span", { className: "vjs-menu-item-text", textContent: this.localize(this.options_.label) }), el.querySelector(".vjs-icon-placeholder")); return el; }; _proto.handleKeyDown = function handleKeyDown(event2) { if (!MenuKeys.some(function(key) { return keycode.isEventKey(event2, key); })) { _ClickableComponent.prototype.handleKeyDown.call(this, event2); } }; _proto.handleClick = function handleClick(event2) { this.selected(true); }; _proto.selected = function selected(_selected) { if (this.selectable) { if (_selected) { this.addClass("vjs-selected"); this.el_.setAttribute("aria-checked", "true"); this.controlText(", selected"); this.isSelected_ = true; } else { this.removeClass("vjs-selected"); this.el_.setAttribute("aria-checked", "false"); this.controlText(""); this.isSelected_ = false; } } }; return MenuItem2; }(ClickableComponent); Component$1.registerComponent("MenuItem", MenuItem); var TextTrackMenuItem = /* @__PURE__ */ function(_MenuItem) { _inheritsLoose(TextTrackMenuItem2, _MenuItem); function TextTrackMenuItem2(player, options2) { var _this; var track = options2.track; var tracks = player.textTracks(); options2.label = track.label || track.language || "Unknown"; options2.selected = track.mode === "showing"; _this = _MenuItem.call(this, player, options2) || this; _this.track = track; _this.kinds = (options2.kinds || [options2.kind || _this.track.kind]).filter(Boolean); var changeHandler = function changeHandler2() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this.handleTracksChange.apply(_assertThisInitialized(_this), args); }; var selectedLanguageChangeHandler = function selectedLanguageChangeHandler2() { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } _this.handleSelectedLanguageChange.apply(_assertThisInitialized(_this), args); }; player.on(["loadstart", "texttrackchange"], changeHandler); tracks.addEventListener("change", changeHandler); tracks.addEventListener("selectedlanguagechange", selectedLanguageChangeHandler); _this.on("dispose", function() { player.off(["loadstart", "texttrackchange"], changeHandler); tracks.removeEventListener("change", changeHandler); tracks.removeEventListener("selectedlanguagechange", selectedLanguageChangeHandler); }); if (tracks.onchange === void 0) { var event2; _this.on(["tap", "click"], function() { if (typeof window_1.Event !== "object") { try { event2 = new window_1.Event("change"); } catch (err) { } } if (!event2) { event2 = document_1.createEvent("Event"); event2.initEvent("change", true, true); } tracks.dispatchEvent(event2); }); } _this.handleTracksChange(); return _this; } var _proto = TextTrackMenuItem2.prototype; _proto.handleClick = function handleClick(event2) { var referenceTrack = this.track; var tracks = this.player_.textTracks(); _MenuItem.prototype.handleClick.call(this, event2); if (!tracks) { return; } for (var i2 = 0; i2 < tracks.length; i2++) { var track = tracks[i2]; if (this.kinds.indexOf(track.kind) === -1) { continue; } if (track === referenceTrack) { if (track.mode !== "showing") { track.mode = "showing"; } } else if (track.mode !== "disabled") { track.mode = "disabled"; } } }; _proto.handleTracksChange = function handleTracksChange(event2) { var shouldBeSelected = this.track.mode === "showing"; if (shouldBeSelected !== this.isSelected_) { this.selected(shouldBeSelected); } }; _proto.handleSelectedLanguageChange = function handleSelectedLanguageChange(event2) { if (this.track.mode === "showing") { var selectedLanguage = this.player_.cache_.selectedLanguage; if (selectedLanguage && selectedLanguage.enabled && selectedLanguage.language === this.track.language && selectedLanguage.kind !== this.track.kind) { return; } this.player_.cache_.selectedLanguage = { enabled: true, language: this.track.language, kind: this.track.kind }; } }; _proto.dispose = function dispose() { this.track = null; _MenuItem.prototype.dispose.call(this); }; return TextTrackMenuItem2; }(MenuItem); Component$1.registerComponent("TextTrackMenuItem", TextTrackMenuItem); var OffTextTrackMenuItem = /* @__PURE__ */ function(_TextTrackMenuItem) { _inheritsLoose(OffTextTrackMenuItem2, _TextTrackMenuItem); function OffTextTrackMenuItem2(player, options2) { options2.track = { player, kind: options2.kind, kinds: options2.kinds, "default": false, mode: "disabled" }; if (!options2.kinds) { options2.kinds = [options2.kind]; } if (options2.label) { options2.track.label = options2.label; } else { options2.track.label = options2.kinds.join(" and ") + " off"; } options2.selectable = true; options2.multiSelectable = false; return _TextTrackMenuItem.call(this, player, options2) || this; } var _proto = OffTextTrackMenuItem2.prototype; _proto.handleTracksChange = function handleTracksChange(event2) { var tracks = this.player().textTracks(); var shouldBeSelected = true; for (var i2 = 0, l = tracks.length; i2 < l; i2++) { var track = tracks[i2]; if (this.options_.kinds.indexOf(track.kind) > -1 && track.mode === "showing") { shouldBeSelected = false; break; } } if (shouldBeSelected !== this.isSelected_) { this.selected(shouldBeSelected); } }; _proto.handleSelectedLanguageChange = function handleSelectedLanguageChange(event2) { var tracks = this.player().textTracks(); var allHidden = true; for (var i2 = 0, l = tracks.length; i2 < l; i2++) { var track = tracks[i2]; if (["captions", "descriptions", "subtitles"].indexOf(track.kind) > -1 && track.mode === "showing") { allHidden = false; break; } } if (allHidden) { this.player_.cache_.selectedLanguage = { enabled: false }; } }; return OffTextTrackMenuItem2; }(TextTrackMenuItem); Component$1.registerComponent("OffTextTrackMenuItem", OffTextTrackMenuItem); var TextTrackButton = /* @__PURE__ */ function(_TrackButton) { _inheritsLoose(TextTrackButton2, _TrackButton); function TextTrackButton2(player, options2) { if (options2 === void 0) { options2 = {}; } options2.tracks = player.textTracks(); return _TrackButton.call(this, player, options2) || this; } var _proto = TextTrackButton2.prototype; _proto.createItems = function createItems(items, TrackMenuItem) { if (items === void 0) { items = []; } if (TrackMenuItem === void 0) { TrackMenuItem = TextTrackMenuItem; } var label2; if (this.label_) { label2 = this.label_ + " off"; } items.push(new OffTextTrackMenuItem(this.player_, { kinds: this.kinds_, kind: this.kind_, label: label2 })); this.hideThreshold_ += 1; var tracks = this.player_.textTracks(); if (!Array.isArray(this.kinds_)) { this.kinds_ = [this.kind_]; } for (var i2 = 0; i2 < tracks.length; i2++) { var track = tracks[i2]; if (this.kinds_.indexOf(track.kind) > -1) { var item = new TrackMenuItem(this.player_, { track, kinds: this.kinds_, kind: this.kind_, selectable: true, multiSelectable: false }); item.addClass("vjs-" + track.kind + "-menu-item"); items.push(item); } } return items; }; return TextTrackButton2; }(TrackButton); Component$1.registerComponent("TextTrackButton", TextTrackButton); var ChaptersTrackMenuItem = /* @__PURE__ */ function(_MenuItem) { _inheritsLoose(ChaptersTrackMenuItem2, _MenuItem); function ChaptersTrackMenuItem2(player, options2) { var _this; var track = options2.track; var cue = options2.cue; var currentTime = player.currentTime(); options2.selectable = true; options2.multiSelectable = false; options2.label = cue.text; options2.selected = cue.startTime <= currentTime && currentTime < cue.endTime; _this = _MenuItem.call(this, player, options2) || this; _this.track = track; _this.cue = cue; return _this; } var _proto = ChaptersTrackMenuItem2.prototype; _proto.handleClick = function handleClick(event2) { _MenuItem.prototype.handleClick.call(this); this.player_.currentTime(this.cue.startTime); }; return ChaptersTrackMenuItem2; }(MenuItem); Component$1.registerComponent("ChaptersTrackMenuItem", ChaptersTrackMenuItem); var ChaptersButton = /* @__PURE__ */ function(_TextTrackButton) { _inheritsLoose(ChaptersButton2, _TextTrackButton); function ChaptersButton2(player, options2, ready) { var _this; _this = _TextTrackButton.call(this, player, options2, ready) || this; _this.selectCurrentItem_ = function() { _this.items.forEach(function(item) { item.selected(_this.track_.activeCues[0] === item.cue); }); }; return _this; } var _proto = ChaptersButton2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-chapters-button " + _TextTrackButton.prototype.buildCSSClass.call(this); }; _proto.buildWrapperCSSClass = function buildWrapperCSSClass() { return "vjs-chapters-button " + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); }; _proto.update = function update(event2) { if (event2 && event2.track && event2.track.kind !== "chapters") { return; } var track = this.findChaptersTrack(); if (track !== this.track_) { this.setTrack(track); _TextTrackButton.prototype.update.call(this); } else if (!this.items || track && track.cues && track.cues.length !== this.items.length) { _TextTrackButton.prototype.update.call(this); } }; _proto.setTrack = function setTrack(track) { if (this.track_ === track) { return; } if (!this.updateHandler_) { this.updateHandler_ = this.update.bind(this); } if (this.track_) { var remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_); if (remoteTextTrackEl) { remoteTextTrackEl.removeEventListener("load", this.updateHandler_); } this.track_.removeEventListener("cuechange", this.selectCurrentItem_); this.track_ = null; } this.track_ = track; if (this.track_) { this.track_.mode = "hidden"; var _remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_); if (_remoteTextTrackEl) { _remoteTextTrackEl.addEventListener("load", this.updateHandler_); } this.track_.addEventListener("cuechange", this.selectCurrentItem_); } }; _proto.findChaptersTrack = function findChaptersTrack() { var tracks = this.player_.textTracks() || []; for (var i2 = tracks.length - 1; i2 >= 0; i2--) { var track = tracks[i2]; if (track.kind === this.kind_) { return track; } } }; _proto.getMenuCaption = function getMenuCaption() { if (this.track_ && this.track_.label) { return this.track_.label; } return this.localize(toTitleCase$1(this.kind_)); }; _proto.createMenu = function createMenu() { this.options_.title = this.getMenuCaption(); return _TextTrackButton.prototype.createMenu.call(this); }; _proto.createItems = function createItems() { var items = []; if (!this.track_) { return items; } var cues = this.track_.cues; if (!cues) { return items; } for (var i2 = 0, l = cues.length; i2 < l; i2++) { var cue = cues[i2]; var mi = new ChaptersTrackMenuItem(this.player_, { track: this.track_, cue }); items.push(mi); } return items; }; return ChaptersButton2; }(TextTrackButton); ChaptersButton.prototype.kind_ = "chapters"; ChaptersButton.prototype.controlText_ = "Chapters"; Component$1.registerComponent("ChaptersButton", ChaptersButton); var DescriptionsButton = /* @__PURE__ */ function(_TextTrackButton) { _inheritsLoose(DescriptionsButton2, _TextTrackButton); function DescriptionsButton2(player, options2, ready) { var _this; _this = _TextTrackButton.call(this, player, options2, ready) || this; var tracks = player.textTracks(); var changeHandler = bind(_assertThisInitialized(_this), _this.handleTracksChange); tracks.addEventListener("change", changeHandler); _this.on("dispose", function() { tracks.removeEventListener("change", changeHandler); }); return _this; } var _proto = DescriptionsButton2.prototype; _proto.handleTracksChange = function handleTracksChange(event2) { var tracks = this.player().textTracks(); var disabled = false; for (var i2 = 0, l = tracks.length; i2 < l; i2++) { var track = tracks[i2]; if (track.kind !== this.kind_ && track.mode === "showing") { disabled = true; break; } } if (disabled) { this.disable(); } else { this.enable(); } }; _proto.buildCSSClass = function buildCSSClass() { return "vjs-descriptions-button " + _TextTrackButton.prototype.buildCSSClass.call(this); }; _proto.buildWrapperCSSClass = function buildWrapperCSSClass() { return "vjs-descriptions-button " + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); }; return DescriptionsButton2; }(TextTrackButton); DescriptionsButton.prototype.kind_ = "descriptions"; DescriptionsButton.prototype.controlText_ = "Descriptions"; Component$1.registerComponent("DescriptionsButton", DescriptionsButton); var SubtitlesButton = /* @__PURE__ */ function(_TextTrackButton) { _inheritsLoose(SubtitlesButton2, _TextTrackButton); function SubtitlesButton2(player, options2, ready) { return _TextTrackButton.call(this, player, options2, ready) || this; } var _proto = SubtitlesButton2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-subtitles-button " + _TextTrackButton.prototype.buildCSSClass.call(this); }; _proto.buildWrapperCSSClass = function buildWrapperCSSClass() { return "vjs-subtitles-button " + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); }; return SubtitlesButton2; }(TextTrackButton); SubtitlesButton.prototype.kind_ = "subtitles"; SubtitlesButton.prototype.controlText_ = "Subtitles"; Component$1.registerComponent("SubtitlesButton", SubtitlesButton); var CaptionSettingsMenuItem = /* @__PURE__ */ function(_TextTrackMenuItem) { _inheritsLoose(CaptionSettingsMenuItem2, _TextTrackMenuItem); function CaptionSettingsMenuItem2(player, options2) { var _this; options2.track = { player, kind: options2.kind, label: options2.kind + " settings", selectable: false, "default": false, mode: "disabled" }; options2.selectable = false; options2.name = "CaptionSettingsMenuItem"; _this = _TextTrackMenuItem.call(this, player, options2) || this; _this.addClass("vjs-texttrack-settings"); _this.controlText(", opens " + options2.kind + " settings dialog"); return _this; } var _proto = CaptionSettingsMenuItem2.prototype; _proto.handleClick = function handleClick(event2) { this.player().getChild("textTrackSettings").open(); }; return CaptionSettingsMenuItem2; }(TextTrackMenuItem); Component$1.registerComponent("CaptionSettingsMenuItem", CaptionSettingsMenuItem); var CaptionsButton = /* @__PURE__ */ function(_TextTrackButton) { _inheritsLoose(CaptionsButton2, _TextTrackButton); function CaptionsButton2(player, options2, ready) { return _TextTrackButton.call(this, player, options2, ready) || this; } var _proto = CaptionsButton2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-captions-button " + _TextTrackButton.prototype.buildCSSClass.call(this); }; _proto.buildWrapperCSSClass = function buildWrapperCSSClass() { return "vjs-captions-button " + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); }; _proto.createItems = function createItems() { var items = []; if (!(this.player().tech_ && this.player().tech_.featuresNativeTextTracks) && this.player().getChild("textTrackSettings")) { items.push(new CaptionSettingsMenuItem(this.player_, { kind: this.kind_ })); this.hideThreshold_ += 1; } return _TextTrackButton.prototype.createItems.call(this, items); }; return CaptionsButton2; }(TextTrackButton); CaptionsButton.prototype.kind_ = "captions"; CaptionsButton.prototype.controlText_ = "Captions"; Component$1.registerComponent("CaptionsButton", CaptionsButton); var SubsCapsMenuItem = /* @__PURE__ */ function(_TextTrackMenuItem) { _inheritsLoose(SubsCapsMenuItem2, _TextTrackMenuItem); function SubsCapsMenuItem2() { return _TextTrackMenuItem.apply(this, arguments) || this; } var _proto = SubsCapsMenuItem2.prototype; _proto.createEl = function createEl$12(type2, props, attrs) { var el = _TextTrackMenuItem.prototype.createEl.call(this, type2, props, attrs); var parentSpan = el.querySelector(".vjs-menu-item-text"); if (this.options_.track.kind === "captions") { parentSpan.appendChild(createEl("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": true })); parentSpan.appendChild(createEl("span", { className: "vjs-control-text", textContent: " " + this.localize("Captions") })); } return el; }; return SubsCapsMenuItem2; }(TextTrackMenuItem); Component$1.registerComponent("SubsCapsMenuItem", SubsCapsMenuItem); var SubsCapsButton = /* @__PURE__ */ function(_TextTrackButton) { _inheritsLoose(SubsCapsButton2, _TextTrackButton); function SubsCapsButton2(player, options2) { var _this; if (options2 === void 0) { options2 = {}; } _this = _TextTrackButton.call(this, player, options2) || this; _this.label_ = "subtitles"; if (["en", "en-us", "en-ca", "fr-ca"].indexOf(_this.player_.language_) > -1) { _this.label_ = "captions"; } _this.menuButton_.controlText(toTitleCase$1(_this.label_)); return _this; } var _proto = SubsCapsButton2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-subs-caps-button " + _TextTrackButton.prototype.buildCSSClass.call(this); }; _proto.buildWrapperCSSClass = function buildWrapperCSSClass() { return "vjs-subs-caps-button " + _TextTrackButton.prototype.buildWrapperCSSClass.call(this); }; _proto.createItems = function createItems() { var items = []; if (!(this.player().tech_ && this.player().tech_.featuresNativeTextTracks) && this.player().getChild("textTrackSettings")) { items.push(new CaptionSettingsMenuItem(this.player_, { kind: this.label_ })); this.hideThreshold_ += 1; } items = _TextTrackButton.prototype.createItems.call(this, items, SubsCapsMenuItem); return items; }; return SubsCapsButton2; }(TextTrackButton); SubsCapsButton.prototype.kinds_ = ["captions", "subtitles"]; SubsCapsButton.prototype.controlText_ = "Subtitles"; Component$1.registerComponent("SubsCapsButton", SubsCapsButton); var AudioTrackMenuItem = /* @__PURE__ */ function(_MenuItem) { _inheritsLoose(AudioTrackMenuItem2, _MenuItem); function AudioTrackMenuItem2(player, options2) { var _this; var track = options2.track; var tracks = player.audioTracks(); options2.label = track.label || track.language || "Unknown"; options2.selected = track.enabled; _this = _MenuItem.call(this, player, options2) || this; _this.track = track; _this.addClass("vjs-" + track.kind + "-menu-item"); var changeHandler = function changeHandler2() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this.handleTracksChange.apply(_assertThisInitialized(_this), args); }; tracks.addEventListener("change", changeHandler); _this.on("dispose", function() { tracks.removeEventListener("change", changeHandler); }); return _this; } var _proto = AudioTrackMenuItem2.prototype; _proto.createEl = function createEl$12(type2, props, attrs) { var el = _MenuItem.prototype.createEl.call(this, type2, props, attrs); var parentSpan = el.querySelector(".vjs-menu-item-text"); if (this.options_.track.kind === "main-desc") { parentSpan.appendChild(createEl("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": true })); parentSpan.appendChild(createEl("span", { className: "vjs-control-text", textContent: " " + this.localize("Descriptions") })); } return el; }; _proto.handleClick = function handleClick(event2) { _MenuItem.prototype.handleClick.call(this, event2); this.track.enabled = true; if (this.player_.tech_.featuresNativeAudioTracks) { var tracks = this.player_.audioTracks(); for (var i2 = 0; i2 < tracks.length; i2++) { var track = tracks[i2]; if (track === this.track) { continue; } track.enabled = track === this.track; } } }; _proto.handleTracksChange = function handleTracksChange(event2) { this.selected(this.track.enabled); }; return AudioTrackMenuItem2; }(MenuItem); Component$1.registerComponent("AudioTrackMenuItem", AudioTrackMenuItem); var AudioTrackButton = /* @__PURE__ */ function(_TrackButton) { _inheritsLoose(AudioTrackButton2, _TrackButton); function AudioTrackButton2(player, options2) { if (options2 === void 0) { options2 = {}; } options2.tracks = player.audioTracks(); return _TrackButton.call(this, player, options2) || this; } var _proto = AudioTrackButton2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-audio-button " + _TrackButton.prototype.buildCSSClass.call(this); }; _proto.buildWrapperCSSClass = function buildWrapperCSSClass() { return "vjs-audio-button " + _TrackButton.prototype.buildWrapperCSSClass.call(this); }; _proto.createItems = function createItems(items) { if (items === void 0) { items = []; } this.hideThreshold_ = 1; var tracks = this.player_.audioTracks(); for (var i2 = 0; i2 < tracks.length; i2++) { var track = tracks[i2]; items.push(new AudioTrackMenuItem(this.player_, { track, selectable: true, multiSelectable: false })); } return items; }; return AudioTrackButton2; }(TrackButton); AudioTrackButton.prototype.controlText_ = "Audio Track"; Component$1.registerComponent("AudioTrackButton", AudioTrackButton); var PlaybackRateMenuItem = /* @__PURE__ */ function(_MenuItem) { _inheritsLoose(PlaybackRateMenuItem2, _MenuItem); function PlaybackRateMenuItem2(player, options2) { var _this; var label2 = options2.rate; var rate = parseFloat(label2, 10); options2.label = label2; options2.selected = rate === player.playbackRate(); options2.selectable = true; options2.multiSelectable = false; _this = _MenuItem.call(this, player, options2) || this; _this.label = label2; _this.rate = rate; _this.on(player, "ratechange", function(e) { return _this.update(e); }); return _this; } var _proto = PlaybackRateMenuItem2.prototype; _proto.handleClick = function handleClick(event2) { _MenuItem.prototype.handleClick.call(this); this.player().playbackRate(this.rate); }; _proto.update = function update(event2) { this.selected(this.player().playbackRate() === this.rate); }; return PlaybackRateMenuItem2; }(MenuItem); PlaybackRateMenuItem.prototype.contentElType = "button"; Component$1.registerComponent("PlaybackRateMenuItem", PlaybackRateMenuItem); var PlaybackRateMenuButton = /* @__PURE__ */ function(_MenuButton) { _inheritsLoose(PlaybackRateMenuButton2, _MenuButton); function PlaybackRateMenuButton2(player, options2) { var _this; _this = _MenuButton.call(this, player, options2) || this; _this.menuButton_.el_.setAttribute("aria-describedby", _this.labelElId_); _this.updateVisibility(); _this.updateLabel(); _this.on(player, "loadstart", function(e) { return _this.updateVisibility(e); }); _this.on(player, "ratechange", function(e) { return _this.updateLabel(e); }); _this.on(player, "playbackrateschange", function(e) { return _this.handlePlaybackRateschange(e); }); return _this; } var _proto = PlaybackRateMenuButton2.prototype; _proto.createEl = function createEl$12() { var el = _MenuButton.prototype.createEl.call(this); this.labelElId_ = "vjs-playback-rate-value-label-" + this.id_; this.labelEl_ = createEl("div", { className: "vjs-playback-rate-value", id: this.labelElId_, textContent: "1x" }); el.appendChild(this.labelEl_); return el; }; _proto.dispose = function dispose() { this.labelEl_ = null; _MenuButton.prototype.dispose.call(this); }; _proto.buildCSSClass = function buildCSSClass() { return "vjs-playback-rate " + _MenuButton.prototype.buildCSSClass.call(this); }; _proto.buildWrapperCSSClass = function buildWrapperCSSClass() { return "vjs-playback-rate " + _MenuButton.prototype.buildWrapperCSSClass.call(this); }; _proto.createItems = function createItems() { var rates = this.playbackRates(); var items = []; for (var i2 = rates.length - 1; i2 >= 0; i2--) { items.push(new PlaybackRateMenuItem(this.player(), { rate: rates[i2] + "x" })); } return items; }; _proto.updateARIAAttributes = function updateARIAAttributes() { this.el().setAttribute("aria-valuenow", this.player().playbackRate()); }; _proto.handleClick = function handleClick(event2) { var currentRate = this.player().playbackRate(); var rates = this.playbackRates(); var currentIndex = rates.indexOf(currentRate); var newIndex = (currentIndex + 1) % rates.length; this.player().playbackRate(rates[newIndex]); }; _proto.handlePlaybackRateschange = function handlePlaybackRateschange(event2) { this.update(); }; _proto.playbackRates = function playbackRates() { var player = this.player(); return player.playbackRates && player.playbackRates() || []; }; _proto.playbackRateSupported = function playbackRateSupported() { return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this.playbackRates() && this.playbackRates().length > 0; }; _proto.updateVisibility = function updateVisibility(event2) { if (this.playbackRateSupported()) { this.removeClass("vjs-hidden"); } else { this.addClass("vjs-hidden"); } }; _proto.updateLabel = function updateLabel(event2) { if (this.playbackRateSupported()) { this.labelEl_.textContent = this.player().playbackRate() + "x"; } }; return PlaybackRateMenuButton2; }(MenuButton); PlaybackRateMenuButton.prototype.controlText_ = "Playback Rate"; Component$1.registerComponent("PlaybackRateMenuButton", PlaybackRateMenuButton); var Spacer = /* @__PURE__ */ function(_Component) { _inheritsLoose(Spacer2, _Component); function Spacer2() { return _Component.apply(this, arguments) || this; } var _proto = Spacer2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-spacer " + _Component.prototype.buildCSSClass.call(this); }; _proto.createEl = function createEl2(tag, props, attributes) { if (tag === void 0) { tag = "div"; } if (props === void 0) { props = {}; } if (attributes === void 0) { attributes = {}; } if (!props.className) { props.className = this.buildCSSClass(); } return _Component.prototype.createEl.call(this, tag, props, attributes); }; return Spacer2; }(Component$1); Component$1.registerComponent("Spacer", Spacer); var CustomControlSpacer = /* @__PURE__ */ function(_Spacer) { _inheritsLoose(CustomControlSpacer2, _Spacer); function CustomControlSpacer2() { return _Spacer.apply(this, arguments) || this; } var _proto = CustomControlSpacer2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-custom-control-spacer " + _Spacer.prototype.buildCSSClass.call(this); }; _proto.createEl = function createEl2() { return _Spacer.prototype.createEl.call(this, "div", { className: this.buildCSSClass(), textContent: "\xA0" }); }; return CustomControlSpacer2; }(Spacer); Component$1.registerComponent("CustomControlSpacer", CustomControlSpacer); var ControlBar = /* @__PURE__ */ function(_Component) { _inheritsLoose(ControlBar2, _Component); function ControlBar2() { return _Component.apply(this, arguments) || this; } var _proto = ControlBar2.prototype; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "div", { className: "vjs-control-bar", dir: "ltr" }); }; return ControlBar2; }(Component$1); ControlBar.prototype.options_ = { children: ["playToggle", "volumePanel", "currentTimeDisplay", "timeDivider", "durationDisplay", "progressControl", "liveDisplay", "seekToLive", "remainingTimeDisplay", "customControlSpacer", "playbackRateMenuButton", "chaptersButton", "descriptionsButton", "subsCapsButton", "audioTrackButton", "fullscreenToggle"] }; if ("exitPictureInPicture" in document_1) { ControlBar.prototype.options_.children.splice(ControlBar.prototype.options_.children.length - 1, 0, "pictureInPictureToggle"); } Component$1.registerComponent("ControlBar", ControlBar); var ErrorDisplay = /* @__PURE__ */ function(_ModalDialog) { _inheritsLoose(ErrorDisplay2, _ModalDialog); function ErrorDisplay2(player, options2) { var _this; _this = _ModalDialog.call(this, player, options2) || this; _this.on(player, "error", function(e) { return _this.open(e); }); return _this; } var _proto = ErrorDisplay2.prototype; _proto.buildCSSClass = function buildCSSClass() { return "vjs-error-display " + _ModalDialog.prototype.buildCSSClass.call(this); }; _proto.content = function content() { var error = this.player().error(); return error ? this.localize(error.message) : ""; }; return ErrorDisplay2; }(ModalDialog); ErrorDisplay.prototype.options_ = _extends$2({}, ModalDialog.prototype.options_, { pauseOnOpen: false, fillAlways: true, temporary: false, uncloseable: true }); Component$1.registerComponent("ErrorDisplay", ErrorDisplay); var LOCAL_STORAGE_KEY$1 = "vjs-text-track-settings"; var COLOR_BLACK = ["#000", "Black"]; var COLOR_BLUE = ["#00F", "Blue"]; var COLOR_CYAN = ["#0FF", "Cyan"]; var COLOR_GREEN = ["#0F0", "Green"]; var COLOR_MAGENTA = ["#F0F", "Magenta"]; var COLOR_RED = ["#F00", "Red"]; var COLOR_WHITE = ["#FFF", "White"]; var COLOR_YELLOW = ["#FF0", "Yellow"]; var OPACITY_OPAQUE = ["1", "Opaque"]; var OPACITY_SEMI = ["0.5", "Semi-Transparent"]; var OPACITY_TRANS = ["0", "Transparent"]; var selectConfigs = { backgroundColor: { selector: ".vjs-bg-color > select", id: "captions-background-color-%s", label: "Color", options: [COLOR_BLACK, COLOR_WHITE, COLOR_RED, COLOR_GREEN, COLOR_BLUE, COLOR_YELLOW, COLOR_MAGENTA, COLOR_CYAN] }, backgroundOpacity: { selector: ".vjs-bg-opacity > select", id: "captions-background-opacity-%s", label: "Transparency", options: [OPACITY_OPAQUE, OPACITY_SEMI, OPACITY_TRANS] }, color: { selector: ".vjs-fg-color > select", id: "captions-foreground-color-%s", label: "Color", options: [COLOR_WHITE, COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_BLUE, COLOR_YELLOW, COLOR_MAGENTA, COLOR_CYAN] }, edgeStyle: { selector: ".vjs-edge-style > select", id: "%s", label: "Text Edge Style", options: [["none", "None"], ["raised", "Raised"], ["depressed", "Depressed"], ["uniform", "Uniform"], ["dropshadow", "Dropshadow"]] }, fontFamily: { selector: ".vjs-font-family > select", id: "captions-font-family-%s", label: "Font Family", options: [["proportionalSansSerif", "Proportional Sans-Serif"], ["monospaceSansSerif", "Monospace Sans-Serif"], ["proportionalSerif", "Proportional Serif"], ["monospaceSerif", "Monospace Serif"], ["casual", "Casual"], ["script", "Script"], ["small-caps", "Small Caps"]] }, fontPercent: { selector: ".vjs-font-percent > select", id: "captions-font-size-%s", label: "Font Size", options: [["0.50", "50%"], ["0.75", "75%"], ["1.00", "100%"], ["1.25", "125%"], ["1.50", "150%"], ["1.75", "175%"], ["2.00", "200%"], ["3.00", "300%"], ["4.00", "400%"]], "default": 2, parser: function parser(v) { return v === "1.00" ? null : Number(v); } }, textOpacity: { selector: ".vjs-text-opacity > select", id: "captions-foreground-opacity-%s", label: "Transparency", options: [OPACITY_OPAQUE, OPACITY_SEMI] }, windowColor: { selector: ".vjs-window-color > select", id: "captions-window-color-%s", label: "Color" }, windowOpacity: { selector: ".vjs-window-opacity > select", id: "captions-window-opacity-%s", label: "Transparency", options: [OPACITY_TRANS, OPACITY_SEMI, OPACITY_OPAQUE] } }; selectConfigs.windowColor.options = selectConfigs.backgroundColor.options; function parseOptionValue(value, parser2) { if (parser2) { value = parser2(value); } if (value && value !== "none") { return value; } } function getSelectedOptionValue(el, parser2) { var value = el.options[el.options.selectedIndex].value; return parseOptionValue(value, parser2); } function setSelectedOption(el, value, parser2) { if (!value) { return; } for (var i2 = 0; i2 < el.options.length; i2++) { if (parseOptionValue(el.options[i2].value, parser2) === value) { el.selectedIndex = i2; break; } } } var TextTrackSettings = /* @__PURE__ */ function(_ModalDialog) { _inheritsLoose(TextTrackSettings2, _ModalDialog); function TextTrackSettings2(player, options2) { var _this; options2.temporary = false; _this = _ModalDialog.call(this, player, options2) || this; _this.updateDisplay = _this.updateDisplay.bind(_assertThisInitialized(_this)); _this.fill(); _this.hasBeenOpened_ = _this.hasBeenFilled_ = true; _this.endDialog = createEl("p", { className: "vjs-control-text", textContent: _this.localize("End of dialog window.") }); _this.el().appendChild(_this.endDialog); _this.setDefaults(); if (options2.persistTextTrackSettings === void 0) { _this.options_.persistTextTrackSettings = _this.options_.playerOptions.persistTextTrackSettings; } _this.on(_this.$(".vjs-done-button"), "click", function() { _this.saveSettings(); _this.close(); }); _this.on(_this.$(".vjs-default-button"), "click", function() { _this.setDefaults(); _this.updateDisplay(); }); each(selectConfigs, function(config) { _this.on(_this.$(config.selector), "change", _this.updateDisplay); }); if (_this.options_.persistTextTrackSettings) { _this.restoreSettings(); } return _this; } var _proto = TextTrackSettings2.prototype; _proto.dispose = function dispose() { this.endDialog = null; _ModalDialog.prototype.dispose.call(this); }; _proto.createElSelect_ = function createElSelect_(key, legendId, type2) { var _this2 = this; if (legendId === void 0) { legendId = ""; } if (type2 === void 0) { type2 = "label"; } var config = selectConfigs[key]; var id = config.id.replace("%s", this.id_); var selectLabelledbyIds = [legendId, id].join(" ").trim(); return ["<" + type2 + ' id="' + id + '" class="' + (type2 === "label" ? "vjs-label" : "") + '">', this.localize(config.label), "", '").join(""); }; _proto.createElFgColor_ = function createElFgColor_() { var legendId = "captions-text-legend-" + this.id_; return ['
', '', this.localize("Text"), "", this.createElSelect_("color", legendId), '', this.createElSelect_("textOpacity", legendId), "", "
"].join(""); }; _proto.createElBgColor_ = function createElBgColor_() { var legendId = "captions-background-" + this.id_; return ['
', '', this.localize("Background"), "", this.createElSelect_("backgroundColor", legendId), '', this.createElSelect_("backgroundOpacity", legendId), "", "
"].join(""); }; _proto.createElWinColor_ = function createElWinColor_() { var legendId = "captions-window-" + this.id_; return ['
', '', this.localize("Window"), "", this.createElSelect_("windowColor", legendId), '', this.createElSelect_("windowOpacity", legendId), "", "
"].join(""); }; _proto.createElColors_ = function createElColors_() { return createEl("div", { className: "vjs-track-settings-colors", innerHTML: [this.createElFgColor_(), this.createElBgColor_(), this.createElWinColor_()].join("") }); }; _proto.createElFont_ = function createElFont_() { return createEl("div", { className: "vjs-track-settings-font", innerHTML: ['
', this.createElSelect_("fontPercent", "", "legend"), "
", '
', this.createElSelect_("edgeStyle", "", "legend"), "
", '
', this.createElSelect_("fontFamily", "", "legend"), "
"].join("") }); }; _proto.createElControls_ = function createElControls_() { var defaultsDescription = this.localize("restore all settings to the default values"); return createEl("div", { className: "vjs-track-settings-controls", innerHTML: ['", '"].join("") }); }; _proto.content = function content() { return [this.createElColors_(), this.createElFont_(), this.createElControls_()]; }; _proto.label = function label2() { return this.localize("Caption Settings Dialog"); }; _proto.description = function description() { return this.localize("Beginning of dialog window. Escape will cancel and close the window."); }; _proto.buildCSSClass = function buildCSSClass() { return _ModalDialog.prototype.buildCSSClass.call(this) + " vjs-text-track-settings"; }; _proto.getValues = function getValues() { var _this3 = this; return reduce(selectConfigs, function(accum, config, key) { var value = getSelectedOptionValue(_this3.$(config.selector), config.parser); if (value !== void 0) { accum[key] = value; } return accum; }, {}); }; _proto.setValues = function setValues(values3) { var _this4 = this; each(selectConfigs, function(config, key) { setSelectedOption(_this4.$(config.selector), values3[key], config.parser); }); }; _proto.setDefaults = function setDefaults() { var _this5 = this; each(selectConfigs, function(config) { var index2 = config.hasOwnProperty("default") ? config["default"] : 0; _this5.$(config.selector).selectedIndex = index2; }); }; _proto.restoreSettings = function restoreSettings() { var values3; try { values3 = JSON.parse(window_1.localStorage.getItem(LOCAL_STORAGE_KEY$1)); } catch (err) { log$1.warn(err); } if (values3) { this.setValues(values3); } }; _proto.saveSettings = function saveSettings() { if (!this.options_.persistTextTrackSettings) { return; } var values3 = this.getValues(); try { if (Object.keys(values3).length) { window_1.localStorage.setItem(LOCAL_STORAGE_KEY$1, JSON.stringify(values3)); } else { window_1.localStorage.removeItem(LOCAL_STORAGE_KEY$1); } } catch (err) { log$1.warn(err); } }; _proto.updateDisplay = function updateDisplay() { var ttDisplay = this.player_.getChild("textTrackDisplay"); if (ttDisplay) { ttDisplay.updateDisplay(); } }; _proto.conditionalBlur_ = function conditionalBlur_() { this.previouslyActiveEl_ = null; var cb = this.player_.controlBar; var subsCapsBtn = cb && cb.subsCapsButton; var ccBtn = cb && cb.captionsButton; if (subsCapsBtn) { subsCapsBtn.focus(); } else if (ccBtn) { ccBtn.focus(); } }; return TextTrackSettings2; }(ModalDialog); Component$1.registerComponent("TextTrackSettings", TextTrackSettings); var ResizeManager = /* @__PURE__ */ function(_Component) { _inheritsLoose(ResizeManager2, _Component); function ResizeManager2(player, options2) { var _this; var RESIZE_OBSERVER_AVAILABLE = options2.ResizeObserver || window_1.ResizeObserver; if (options2.ResizeObserver === null) { RESIZE_OBSERVER_AVAILABLE = false; } var options_ = mergeOptions$3({ createEl: !RESIZE_OBSERVER_AVAILABLE, reportTouchActivity: false }, options2); _this = _Component.call(this, player, options_) || this; _this.ResizeObserver = options2.ResizeObserver || window_1.ResizeObserver; _this.loadListener_ = null; _this.resizeObserver_ = null; _this.debouncedHandler_ = debounce(function() { _this.resizeHandler(); }, 100, false, _assertThisInitialized(_this)); if (RESIZE_OBSERVER_AVAILABLE) { _this.resizeObserver_ = new _this.ResizeObserver(_this.debouncedHandler_); _this.resizeObserver_.observe(player.el()); } else { _this.loadListener_ = function() { if (!_this.el_ || !_this.el_.contentWindow) { return; } var debouncedHandler_ = _this.debouncedHandler_; var unloadListener_ = _this.unloadListener_ = function() { off(this, "resize", debouncedHandler_); off(this, "unload", unloadListener_); unloadListener_ = null; }; on(_this.el_.contentWindow, "unload", unloadListener_); on(_this.el_.contentWindow, "resize", debouncedHandler_); }; _this.one("load", _this.loadListener_); } return _this; } var _proto = ResizeManager2.prototype; _proto.createEl = function createEl2() { return _Component.prototype.createEl.call(this, "iframe", { className: "vjs-resize-manager", tabIndex: -1, title: this.localize("No content") }, { "aria-hidden": "true" }); }; _proto.resizeHandler = function resizeHandler() { if (!this.player_ || !this.player_.trigger) { return; } this.player_.trigger("playerresize"); }; _proto.dispose = function dispose() { if (this.debouncedHandler_) { this.debouncedHandler_.cancel(); } if (this.resizeObserver_) { if (this.player_.el()) { this.resizeObserver_.unobserve(this.player_.el()); } this.resizeObserver_.disconnect(); } if (this.loadListener_) { this.off("load", this.loadListener_); } if (this.el_ && this.el_.contentWindow && this.unloadListener_) { this.unloadListener_.call(this.el_.contentWindow); } this.ResizeObserver = null; this.resizeObserver = null; this.debouncedHandler_ = null; this.loadListener_ = null; _Component.prototype.dispose.call(this); }; return ResizeManager2; }(Component$1); Component$1.registerComponent("ResizeManager", ResizeManager); var defaults$1 = { trackingThreshold: 20, liveTolerance: 15 }; var LiveTracker = /* @__PURE__ */ function(_Component) { _inheritsLoose(LiveTracker2, _Component); function LiveTracker2(player, options2) { var _this; var options_ = mergeOptions$3(defaults$1, options2, { createEl: false }); _this = _Component.call(this, player, options_) || this; _this.handleVisibilityChange_ = function(e) { return _this.handleVisibilityChange(e); }; _this.trackLiveHandler_ = function() { return _this.trackLive_(); }; _this.handlePlay_ = function(e) { return _this.handlePlay(e); }; _this.handleFirstTimeupdate_ = function(e) { return _this.handleFirstTimeupdate(e); }; _this.handleSeeked_ = function(e) { return _this.handleSeeked(e); }; _this.seekToLiveEdge_ = function(e) { return _this.seekToLiveEdge(e); }; _this.reset_(); _this.on(_this.player_, "durationchange", function(e) { return _this.handleDurationchange(e); }); _this.on(_this.player_, "canplay", function() { return _this.toggleTracking(); }); if (IE_VERSION && "hidden" in document_1 && "visibilityState" in document_1) { _this.on(document_1, "visibilitychange", _this.handleVisibilityChange_); } return _this; } var _proto = LiveTracker2.prototype; _proto.handleVisibilityChange = function handleVisibilityChange() { if (this.player_.duration() !== Infinity) { return; } if (document_1.hidden) { this.stopTracking(); } else { this.startTracking(); } }; _proto.trackLive_ = function trackLive_() { var seekable3 = this.player_.seekable(); if (!seekable3 || !seekable3.length) { return; } var newTime = Number(window_1.performance.now().toFixed(4)); var deltaTime = this.lastTime_ === -1 ? 0 : (newTime - this.lastTime_) / 1e3; this.lastTime_ = newTime; this.pastSeekEnd_ = this.pastSeekEnd() + deltaTime; var liveCurrentTime = this.liveCurrentTime(); var currentTime = this.player_.currentTime(); var isBehind = this.player_.paused() || this.seekedBehindLive_ || Math.abs(liveCurrentTime - currentTime) > this.options_.liveTolerance; if (!this.timeupdateSeen_ || liveCurrentTime === Infinity) { isBehind = false; } if (isBehind !== this.behindLiveEdge_) { this.behindLiveEdge_ = isBehind; this.trigger("liveedgechange"); } }; _proto.handleDurationchange = function handleDurationchange() { this.toggleTracking(); }; _proto.toggleTracking = function toggleTracking() { if (this.player_.duration() === Infinity && this.liveWindow() >= this.options_.trackingThreshold) { if (this.player_.options_.liveui) { this.player_.addClass("vjs-liveui"); } this.startTracking(); } else { this.player_.removeClass("vjs-liveui"); this.stopTracking(); } }; _proto.startTracking = function startTracking() { if (this.isTracking()) { return; } if (!this.timeupdateSeen_) { this.timeupdateSeen_ = this.player_.hasStarted(); } this.trackingInterval_ = this.setInterval(this.trackLiveHandler_, UPDATE_REFRESH_INTERVAL); this.trackLive_(); this.on(this.player_, ["play", "pause"], this.trackLiveHandler_); if (!this.timeupdateSeen_) { this.one(this.player_, "play", this.handlePlay_); this.one(this.player_, "timeupdate", this.handleFirstTimeupdate_); } else { this.on(this.player_, "seeked", this.handleSeeked_); } }; _proto.handleFirstTimeupdate = function handleFirstTimeupdate() { this.timeupdateSeen_ = true; this.on(this.player_, "seeked", this.handleSeeked_); }; _proto.handleSeeked = function handleSeeked() { var timeDiff = Math.abs(this.liveCurrentTime() - this.player_.currentTime()); this.seekedBehindLive_ = this.nextSeekedFromUser_ && timeDiff > 2; this.nextSeekedFromUser_ = false; this.trackLive_(); }; _proto.handlePlay = function handlePlay() { this.one(this.player_, "timeupdate", this.seekToLiveEdge_); }; _proto.reset_ = function reset_() { this.lastTime_ = -1; this.pastSeekEnd_ = 0; this.lastSeekEnd_ = -1; this.behindLiveEdge_ = true; this.timeupdateSeen_ = false; this.seekedBehindLive_ = false; this.nextSeekedFromUser_ = false; this.clearInterval(this.trackingInterval_); this.trackingInterval_ = null; this.off(this.player_, ["play", "pause"], this.trackLiveHandler_); this.off(this.player_, "seeked", this.handleSeeked_); this.off(this.player_, "play", this.handlePlay_); this.off(this.player_, "timeupdate", this.handleFirstTimeupdate_); this.off(this.player_, "timeupdate", this.seekToLiveEdge_); }; _proto.nextSeekedFromUser = function nextSeekedFromUser() { this.nextSeekedFromUser_ = true; }; _proto.stopTracking = function stopTracking() { if (!this.isTracking()) { return; } this.reset_(); this.trigger("liveedgechange"); }; _proto.seekableEnd = function seekableEnd() { var seekable3 = this.player_.seekable(); var seekableEnds = []; var i2 = seekable3 ? seekable3.length : 0; while (i2--) { seekableEnds.push(seekable3.end(i2)); } return seekableEnds.length ? seekableEnds.sort()[seekableEnds.length - 1] : Infinity; }; _proto.seekableStart = function seekableStart() { var seekable3 = this.player_.seekable(); var seekableStarts = []; var i2 = seekable3 ? seekable3.length : 0; while (i2--) { seekableStarts.push(seekable3.start(i2)); } return seekableStarts.length ? seekableStarts.sort()[0] : 0; }; _proto.liveWindow = function liveWindow() { var liveCurrentTime = this.liveCurrentTime(); if (liveCurrentTime === Infinity) { return 0; } return liveCurrentTime - this.seekableStart(); }; _proto.isLive = function isLive() { return this.isTracking(); }; _proto.atLiveEdge = function atLiveEdge() { return !this.behindLiveEdge(); }; _proto.liveCurrentTime = function liveCurrentTime() { return this.pastSeekEnd() + this.seekableEnd(); }; _proto.pastSeekEnd = function pastSeekEnd() { var seekableEnd = this.seekableEnd(); if (this.lastSeekEnd_ !== -1 && seekableEnd !== this.lastSeekEnd_) { this.pastSeekEnd_ = 0; } this.lastSeekEnd_ = seekableEnd; return this.pastSeekEnd_; }; _proto.behindLiveEdge = function behindLiveEdge() { return this.behindLiveEdge_; }; _proto.isTracking = function isTracking() { return typeof this.trackingInterval_ === "number"; }; _proto.seekToLiveEdge = function seekToLiveEdge() { this.seekedBehindLive_ = false; if (this.atLiveEdge()) { return; } this.nextSeekedFromUser_ = false; this.player_.currentTime(this.liveCurrentTime()); }; _proto.dispose = function dispose() { this.off(document_1, "visibilitychange", this.handleVisibilityChange_); this.stopTracking(); _Component.prototype.dispose.call(this); }; return LiveTracker2; }(Component$1); Component$1.registerComponent("LiveTracker", LiveTracker); var sourcesetLoad = function sourcesetLoad2(tech) { var el = tech.el(); if (el.hasAttribute("src")) { tech.triggerSourceset(el.src); return true; } var sources = tech.$$("source"); var srcUrls = []; var src = ""; if (!sources.length) { return false; } for (var i2 = 0; i2 < sources.length; i2++) { var url = sources[i2].src; if (url && srcUrls.indexOf(url) === -1) { srcUrls.push(url); } } if (!srcUrls.length) { return false; } if (srcUrls.length === 1) { src = srcUrls[0]; } tech.triggerSourceset(src); return true; }; var innerHTMLDescriptorPolyfill = Object.defineProperty({}, "innerHTML", { get: function get2() { return this.cloneNode(true).innerHTML; }, set: function set2(v) { var dummy = document_1.createElement(this.nodeName.toLowerCase()); dummy.innerHTML = v; var docFrag = document_1.createDocumentFragment(); while (dummy.childNodes.length) { docFrag.appendChild(dummy.childNodes[0]); } this.innerText = ""; window_1.Element.prototype.appendChild.call(this, docFrag); return this.innerHTML; } }); var getDescriptor = function getDescriptor2(priority, prop) { var descriptor = {}; for (var i2 = 0; i2 < priority.length; i2++) { descriptor = Object.getOwnPropertyDescriptor(priority[i2], prop); if (descriptor && descriptor.set && descriptor.get) { break; } } descriptor.enumerable = true; descriptor.configurable = true; return descriptor; }; var getInnerHTMLDescriptor = function getInnerHTMLDescriptor2(tech) { return getDescriptor([tech.el(), window_1.HTMLMediaElement.prototype, window_1.Element.prototype, innerHTMLDescriptorPolyfill], "innerHTML"); }; var firstSourceWatch = function firstSourceWatch2(tech) { var el = tech.el(); if (el.resetSourceWatch_) { return; } var old = {}; var innerDescriptor = getInnerHTMLDescriptor(tech); var appendWrapper = function appendWrapper2(appendFn) { return function() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var retval = appendFn.apply(el, args); sourcesetLoad(tech); return retval; }; }; ["append", "appendChild", "insertAdjacentHTML"].forEach(function(k) { if (!el[k]) { return; } old[k] = el[k]; el[k] = appendWrapper(old[k]); }); Object.defineProperty(el, "innerHTML", mergeOptions$3(innerDescriptor, { set: appendWrapper(innerDescriptor.set) })); el.resetSourceWatch_ = function() { el.resetSourceWatch_ = null; Object.keys(old).forEach(function(k) { el[k] = old[k]; }); Object.defineProperty(el, "innerHTML", innerDescriptor); }; tech.one("sourceset", el.resetSourceWatch_); }; var srcDescriptorPolyfill = Object.defineProperty({}, "src", { get: function get3() { if (this.hasAttribute("src")) { return getAbsoluteURL(window_1.Element.prototype.getAttribute.call(this, "src")); } return ""; }, set: function set3(v) { window_1.Element.prototype.setAttribute.call(this, "src", v); return v; } }); var getSrcDescriptor = function getSrcDescriptor2(tech) { return getDescriptor([tech.el(), window_1.HTMLMediaElement.prototype, srcDescriptorPolyfill], "src"); }; var setupSourceset = function setupSourceset2(tech) { if (!tech.featuresSourceset) { return; } var el = tech.el(); if (el.resetSourceset_) { return; } var srcDescriptor = getSrcDescriptor(tech); var oldSetAttribute = el.setAttribute; var oldLoad = el.load; Object.defineProperty(el, "src", mergeOptions$3(srcDescriptor, { set: function set4(v) { var retval = srcDescriptor.set.call(el, v); tech.triggerSourceset(el.src); return retval; } })); el.setAttribute = function(n, v) { var retval = oldSetAttribute.call(el, n, v); if (/src/i.test(n)) { tech.triggerSourceset(el.src); } return retval; }; el.load = function() { var retval = oldLoad.call(el); if (!sourcesetLoad(tech)) { tech.triggerSourceset(""); firstSourceWatch(tech); } return retval; }; if (el.currentSrc) { tech.triggerSourceset(el.currentSrc); } else if (!sourcesetLoad(tech)) { firstSourceWatch(tech); } el.resetSourceset_ = function() { el.resetSourceset_ = null; el.load = oldLoad; el.setAttribute = oldSetAttribute; Object.defineProperty(el, "src", srcDescriptor); if (el.resetSourceWatch_) { el.resetSourceWatch_(); } }; }; var defineLazyProperty = function defineLazyProperty2(obj, key, getValue2, setter) { if (setter === void 0) { setter = true; } var set4 = function set5(value) { return Object.defineProperty(obj, key, { value, enumerable: true, writable: true }); }; var options2 = { configurable: true, enumerable: true, get: function get7() { var value = getValue2(); set4(value); return value; } }; if (setter) { options2.set = set4; } return Object.defineProperty(obj, key, options2); }; var Html5$1 = /* @__PURE__ */ function(_Tech) { _inheritsLoose(Html52, _Tech); function Html52(options2, ready) { var _this; _this = _Tech.call(this, options2, ready) || this; var source = options2.source; var crossoriginTracks = false; _this.featuresVideoFrameCallback = _this.featuresVideoFrameCallback && _this.el_.tagName === "VIDEO"; if (source && (_this.el_.currentSrc !== source.src || options2.tag && options2.tag.initNetworkState_ === 3)) { _this.setSource(source); } else { _this.handleLateInit_(_this.el_); } if (options2.enableSourceset) { _this.setupSourcesetHandling_(); } _this.isScrubbing_ = false; if (_this.el_.hasChildNodes()) { var nodes = _this.el_.childNodes; var nodesLength = nodes.length; var removeNodes = []; while (nodesLength--) { var node = nodes[nodesLength]; var nodeName = node.nodeName.toLowerCase(); if (nodeName === "track") { if (!_this.featuresNativeTextTracks) { removeNodes.push(node); } else { _this.remoteTextTrackEls().addTrackElement_(node); _this.remoteTextTracks().addTrack(node.track); _this.textTracks().addTrack(node.track); if (!crossoriginTracks && !_this.el_.hasAttribute("crossorigin") && isCrossOrigin(node.src)) { crossoriginTracks = true; } } } } for (var i2 = 0; i2 < removeNodes.length; i2++) { _this.el_.removeChild(removeNodes[i2]); } } _this.proxyNativeTracks_(); if (_this.featuresNativeTextTracks && crossoriginTracks) { log$1.warn("Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\nThis may prevent text tracks from loading."); } _this.restoreMetadataTracksInIOSNativePlayer_(); if ((TOUCH_ENABLED || IS_IPHONE || IS_NATIVE_ANDROID) && options2.nativeControlsForTouch === true) { _this.setControls(true); } _this.proxyWebkitFullscreen_(); _this.triggerReady(); return _this; } var _proto = Html52.prototype; _proto.dispose = function dispose() { if (this.el_ && this.el_.resetSourceset_) { this.el_.resetSourceset_(); } Html52.disposeMediaElement(this.el_); this.options_ = null; _Tech.prototype.dispose.call(this); }; _proto.setupSourcesetHandling_ = function setupSourcesetHandling_() { setupSourceset(this); }; _proto.restoreMetadataTracksInIOSNativePlayer_ = function restoreMetadataTracksInIOSNativePlayer_() { var textTracks = this.textTracks(); var metadataTracksPreFullscreenState; var takeMetadataTrackSnapshot = function takeMetadataTrackSnapshot2() { metadataTracksPreFullscreenState = []; for (var i2 = 0; i2 < textTracks.length; i2++) { var track = textTracks[i2]; if (track.kind === "metadata") { metadataTracksPreFullscreenState.push({ track, storedMode: track.mode }); } } }; takeMetadataTrackSnapshot(); textTracks.addEventListener("change", takeMetadataTrackSnapshot); this.on("dispose", function() { return textTracks.removeEventListener("change", takeMetadataTrackSnapshot); }); var restoreTrackMode = function restoreTrackMode2() { for (var i2 = 0; i2 < metadataTracksPreFullscreenState.length; i2++) { var storedTrack = metadataTracksPreFullscreenState[i2]; if (storedTrack.track.mode === "disabled" && storedTrack.track.mode !== storedTrack.storedMode) { storedTrack.track.mode = storedTrack.storedMode; } } textTracks.removeEventListener("change", restoreTrackMode2); }; this.on("webkitbeginfullscreen", function() { textTracks.removeEventListener("change", takeMetadataTrackSnapshot); textTracks.removeEventListener("change", restoreTrackMode); textTracks.addEventListener("change", restoreTrackMode); }); this.on("webkitendfullscreen", function() { textTracks.removeEventListener("change", takeMetadataTrackSnapshot); textTracks.addEventListener("change", takeMetadataTrackSnapshot); textTracks.removeEventListener("change", restoreTrackMode); }); }; _proto.overrideNative_ = function overrideNative_(type2, override) { var _this2 = this; if (override !== this["featuresNative" + type2 + "Tracks"]) { return; } var lowerCaseType = type2.toLowerCase(); if (this[lowerCaseType + "TracksListeners_"]) { Object.keys(this[lowerCaseType + "TracksListeners_"]).forEach(function(eventName) { var elTracks = _this2.el()[lowerCaseType + "Tracks"]; elTracks.removeEventListener(eventName, _this2[lowerCaseType + "TracksListeners_"][eventName]); }); } this["featuresNative" + type2 + "Tracks"] = !override; this[lowerCaseType + "TracksListeners_"] = null; this.proxyNativeTracksForType_(lowerCaseType); }; _proto.overrideNativeAudioTracks = function overrideNativeAudioTracks(override) { this.overrideNative_("Audio", override); }; _proto.overrideNativeVideoTracks = function overrideNativeVideoTracks(override) { this.overrideNative_("Video", override); }; _proto.proxyNativeTracksForType_ = function proxyNativeTracksForType_(name) { var _this3 = this; var props = NORMAL[name]; var elTracks = this.el()[props.getterName]; var techTracks = this[props.getterName](); if (!this["featuresNative" + props.capitalName + "Tracks"] || !elTracks || !elTracks.addEventListener) { return; } var listeners = { change: function change(e) { var event2 = { type: "change", target: techTracks, currentTarget: techTracks, srcElement: techTracks }; techTracks.trigger(event2); if (name === "text") { _this3[REMOTE.remoteText.getterName]().trigger(event2); } }, addtrack: function addtrack(e) { techTracks.addTrack(e.track); }, removetrack: function removetrack(e) { techTracks.removeTrack(e.track); } }; var removeOldTracks = function removeOldTracks2() { var removeTracks = []; for (var i2 = 0; i2 < techTracks.length; i2++) { var found = false; for (var j = 0; j < elTracks.length; j++) { if (elTracks[j] === techTracks[i2]) { found = true; break; } } if (!found) { removeTracks.push(techTracks[i2]); } } while (removeTracks.length) { techTracks.removeTrack(removeTracks.shift()); } }; this[props.getterName + "Listeners_"] = listeners; Object.keys(listeners).forEach(function(eventName) { var listener = listeners[eventName]; elTracks.addEventListener(eventName, listener); _this3.on("dispose", function(e) { return elTracks.removeEventListener(eventName, listener); }); }); this.on("loadstart", removeOldTracks); this.on("dispose", function(e) { return _this3.off("loadstart", removeOldTracks); }); }; _proto.proxyNativeTracks_ = function proxyNativeTracks_() { var _this4 = this; NORMAL.names.forEach(function(name) { _this4.proxyNativeTracksForType_(name); }); }; _proto.createEl = function createEl2() { var el = this.options_.tag; if (!el || !(this.options_.playerElIngest || this.movingMediaElementInDOM)) { if (el) { var clone = el.cloneNode(true); if (el.parentNode) { el.parentNode.insertBefore(clone, el); } Html52.disposeMediaElement(el); el = clone; } else { el = document_1.createElement("video"); var tagAttributes = this.options_.tag && getAttributes(this.options_.tag); var attributes = mergeOptions$3({}, tagAttributes); if (!TOUCH_ENABLED || this.options_.nativeControlsForTouch !== true) { delete attributes.controls; } setAttributes(el, assign(attributes, { id: this.options_.techId, "class": "vjs-tech" })); } el.playerId = this.options_.playerId; } if (typeof this.options_.preload !== "undefined") { setAttribute(el, "preload", this.options_.preload); } if (this.options_.disablePictureInPicture !== void 0) { el.disablePictureInPicture = this.options_.disablePictureInPicture; } var settingsAttrs = ["loop", "muted", "playsinline", "autoplay"]; for (var i2 = 0; i2 < settingsAttrs.length; i2++) { var attr = settingsAttrs[i2]; var value = this.options_[attr]; if (typeof value !== "undefined") { if (value) { setAttribute(el, attr, attr); } else { removeAttribute(el, attr); } el[attr] = value; } } return el; }; _proto.handleLateInit_ = function handleLateInit_(el) { if (el.networkState === 0 || el.networkState === 3) { return; } if (el.readyState === 0) { var loadstartFired = false; var setLoadstartFired = function setLoadstartFired2() { loadstartFired = true; }; this.on("loadstart", setLoadstartFired); var triggerLoadstart = function triggerLoadstart2() { if (!loadstartFired) { this.trigger("loadstart"); } }; this.on("loadedmetadata", triggerLoadstart); this.ready(function() { this.off("loadstart", setLoadstartFired); this.off("loadedmetadata", triggerLoadstart); if (!loadstartFired) { this.trigger("loadstart"); } }); return; } var eventsToTrigger = ["loadstart"]; eventsToTrigger.push("loadedmetadata"); if (el.readyState >= 2) { eventsToTrigger.push("loadeddata"); } if (el.readyState >= 3) { eventsToTrigger.push("canplay"); } if (el.readyState >= 4) { eventsToTrigger.push("canplaythrough"); } this.ready(function() { eventsToTrigger.forEach(function(type2) { this.trigger(type2); }, this); }); }; _proto.setScrubbing = function setScrubbing(isScrubbing) { this.isScrubbing_ = isScrubbing; }; _proto.scrubbing = function scrubbing() { return this.isScrubbing_; }; _proto.setCurrentTime = function setCurrentTime(seconds) { try { if (this.isScrubbing_ && this.el_.fastSeek && IS_ANY_SAFARI) { this.el_.fastSeek(seconds); } else { this.el_.currentTime = seconds; } } catch (e) { log$1(e, "Video is not ready. (Video.js)"); } }; _proto.duration = function duration5() { var _this5 = this; if (this.el_.duration === Infinity && IS_ANDROID && IS_CHROME && this.el_.currentTime === 0) { var checkProgress = function checkProgress2() { if (_this5.el_.currentTime > 0) { if (_this5.el_.duration === Infinity) { _this5.trigger("durationchange"); } _this5.off("timeupdate", checkProgress2); } }; this.on("timeupdate", checkProgress); return NaN; } return this.el_.duration || NaN; }; _proto.width = function width2() { return this.el_.offsetWidth; }; _proto.height = function height2() { return this.el_.offsetHeight; }; _proto.proxyWebkitFullscreen_ = function proxyWebkitFullscreen_() { var _this6 = this; if (!("webkitDisplayingFullscreen" in this.el_)) { return; } var endFn = function endFn2() { this.trigger("fullscreenchange", { isFullscreen: false }); if (this.el_.controls && !this.options_.nativeControlsForTouch && this.controls()) { this.el_.controls = false; } }; var beginFn = function beginFn2() { if ("webkitPresentationMode" in this.el_ && this.el_.webkitPresentationMode !== "picture-in-picture") { this.one("webkitendfullscreen", endFn); this.trigger("fullscreenchange", { isFullscreen: true, nativeIOSFullscreen: true }); } }; this.on("webkitbeginfullscreen", beginFn); this.on("dispose", function() { _this6.off("webkitbeginfullscreen", beginFn); _this6.off("webkitendfullscreen", endFn); }); }; _proto.supportsFullScreen = function supportsFullScreen() { if (typeof this.el_.webkitEnterFullScreen === "function") { var userAgent = window_1.navigator && window_1.navigator.userAgent || ""; if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) { return true; } } return false; }; _proto.enterFullScreen = function enterFullScreen() { var video = this.el_; if (video.paused && video.networkState <= video.HAVE_METADATA) { silencePromise(this.el_.play()); this.setTimeout(function() { video.pause(); try { video.webkitEnterFullScreen(); } catch (e) { this.trigger("fullscreenerror", e); } }, 0); } else { try { video.webkitEnterFullScreen(); } catch (e) { this.trigger("fullscreenerror", e); } } }; _proto.exitFullScreen = function exitFullScreen() { if (!this.el_.webkitDisplayingFullscreen) { this.trigger("fullscreenerror", new Error("The video is not fullscreen")); return; } this.el_.webkitExitFullScreen(); }; _proto.requestPictureInPicture = function requestPictureInPicture() { return this.el_.requestPictureInPicture(); }; _proto.requestVideoFrameCallback = function requestVideoFrameCallback(cb) { if (this.featuresVideoFrameCallback && !this.el_.webkitKeys) { return this.el_.requestVideoFrameCallback(cb); } return _Tech.prototype.requestVideoFrameCallback.call(this, cb); }; _proto.cancelVideoFrameCallback = function cancelVideoFrameCallback(id) { if (this.featuresVideoFrameCallback && !this.el_.webkitKeys) { this.el_.cancelVideoFrameCallback(id); } else { _Tech.prototype.cancelVideoFrameCallback.call(this, id); } }; _proto.src = function src(_src) { if (_src === void 0) { return this.el_.src; } this.setSrc(_src); }; _proto.reset = function reset3() { Html52.resetMediaElement(this.el_); }; _proto.currentSrc = function currentSrc() { if (this.currentSource_) { return this.currentSource_.src; } return this.el_.currentSrc; }; _proto.setControls = function setControls(val) { this.el_.controls = !!val; }; _proto.addTextTrack = function addTextTrack(kind, label2, language) { if (!this.featuresNativeTextTracks) { return _Tech.prototype.addTextTrack.call(this, kind, label2, language); } return this.el_.addTextTrack(kind, label2, language); }; _proto.createRemoteTextTrack = function createRemoteTextTrack(options2) { if (!this.featuresNativeTextTracks) { return _Tech.prototype.createRemoteTextTrack.call(this, options2); } var htmlTrackElement = document_1.createElement("track"); if (options2.kind) { htmlTrackElement.kind = options2.kind; } if (options2.label) { htmlTrackElement.label = options2.label; } if (options2.language || options2.srclang) { htmlTrackElement.srclang = options2.language || options2.srclang; } if (options2["default"]) { htmlTrackElement["default"] = options2["default"]; } if (options2.id) { htmlTrackElement.id = options2.id; } if (options2.src) { htmlTrackElement.src = options2.src; } return htmlTrackElement; }; _proto.addRemoteTextTrack = function addRemoteTextTrack(options2, manualCleanup) { var htmlTrackElement = _Tech.prototype.addRemoteTextTrack.call(this, options2, manualCleanup); if (this.featuresNativeTextTracks) { this.el().appendChild(htmlTrackElement); } return htmlTrackElement; }; _proto.removeRemoteTextTrack = function removeRemoteTextTrack(track) { _Tech.prototype.removeRemoteTextTrack.call(this, track); if (this.featuresNativeTextTracks) { var tracks = this.$$("track"); var i2 = tracks.length; while (i2--) { if (track === tracks[i2] || track === tracks[i2].track) { this.el().removeChild(tracks[i2]); } } } }; _proto.getVideoPlaybackQuality = function getVideoPlaybackQuality() { if (typeof this.el().getVideoPlaybackQuality === "function") { return this.el().getVideoPlaybackQuality(); } var videoPlaybackQuality = {}; if (typeof this.el().webkitDroppedFrameCount !== "undefined" && typeof this.el().webkitDecodedFrameCount !== "undefined") { videoPlaybackQuality.droppedVideoFrames = this.el().webkitDroppedFrameCount; videoPlaybackQuality.totalVideoFrames = this.el().webkitDecodedFrameCount; } if (window_1.performance && typeof window_1.performance.now === "function") { videoPlaybackQuality.creationTime = window_1.performance.now(); } else if (window_1.performance && window_1.performance.timing && typeof window_1.performance.timing.navigationStart === "number") { videoPlaybackQuality.creationTime = window_1.Date.now() - window_1.performance.timing.navigationStart; } return videoPlaybackQuality; }; return Html52; }(Tech$1); defineLazyProperty(Html5$1, "TEST_VID", function() { if (!isReal()) { return; } var video = document_1.createElement("video"); var track = document_1.createElement("track"); track.kind = "captions"; track.srclang = "en"; track.label = "English"; video.appendChild(track); return video; }); Html5$1.isSupported = function() { try { Html5$1.TEST_VID.volume = 0.5; } catch (e) { return false; } return !!(Html5$1.TEST_VID && Html5$1.TEST_VID.canPlayType); }; Html5$1.canPlayType = function(type2) { return Html5$1.TEST_VID.canPlayType(type2); }; Html5$1.canPlaySource = function(srcObj, options2) { return Html5$1.canPlayType(srcObj.type); }; Html5$1.canControlVolume = function() { try { var volume = Html5$1.TEST_VID.volume; Html5$1.TEST_VID.volume = volume / 2 + 0.1; var canControl = volume !== Html5$1.TEST_VID.volume; if (canControl && IS_IOS) { window_1.setTimeout(function() { if (Html5$1 && Html5$1.prototype) { Html5$1.prototype.featuresVolumeControl = volume !== Html5$1.TEST_VID.volume; } }); return false; } return canControl; } catch (e) { return false; } }; Html5$1.canMuteVolume = function() { try { var muted = Html5$1.TEST_VID.muted; Html5$1.TEST_VID.muted = !muted; if (Html5$1.TEST_VID.muted) { setAttribute(Html5$1.TEST_VID, "muted", "muted"); } else { removeAttribute(Html5$1.TEST_VID, "muted", "muted"); } return muted !== Html5$1.TEST_VID.muted; } catch (e) { return false; } }; Html5$1.canControlPlaybackRate = function() { if (IS_ANDROID && IS_CHROME && CHROME_VERSION < 58) { return false; } try { var playbackRate = Html5$1.TEST_VID.playbackRate; Html5$1.TEST_VID.playbackRate = playbackRate / 2 + 0.1; return playbackRate !== Html5$1.TEST_VID.playbackRate; } catch (e) { return false; } }; Html5$1.canOverrideAttributes = function() { try { var noop2 = function noop3() { }; Object.defineProperty(document_1.createElement("video"), "src", { get: noop2, set: noop2 }); Object.defineProperty(document_1.createElement("audio"), "src", { get: noop2, set: noop2 }); Object.defineProperty(document_1.createElement("video"), "innerHTML", { get: noop2, set: noop2 }); Object.defineProperty(document_1.createElement("audio"), "innerHTML", { get: noop2, set: noop2 }); } catch (e) { return false; } return true; }; Html5$1.supportsNativeTextTracks = function() { return IS_ANY_SAFARI || IS_IOS && IS_CHROME; }; Html5$1.supportsNativeVideoTracks = function() { return !!(Html5$1.TEST_VID && Html5$1.TEST_VID.videoTracks); }; Html5$1.supportsNativeAudioTracks = function() { return !!(Html5$1.TEST_VID && Html5$1.TEST_VID.audioTracks); }; Html5$1.Events = ["loadstart", "suspend", "abort", "error", "emptied", "stalled", "loadedmetadata", "loadeddata", "canplay", "canplaythrough", "playing", "waiting", "seeking", "seeked", "ended", "durationchange", "timeupdate", "progress", "play", "pause", "ratechange", "resize", "volumechange"]; [["featuresMuteControl", "canMuteVolume"], ["featuresPlaybackRate", "canControlPlaybackRate"], ["featuresSourceset", "canOverrideAttributes"], ["featuresNativeTextTracks", "supportsNativeTextTracks"], ["featuresNativeVideoTracks", "supportsNativeVideoTracks"], ["featuresNativeAudioTracks", "supportsNativeAudioTracks"]].forEach(function(_ref) { var key = _ref[0], fn2 = _ref[1]; defineLazyProperty(Html5$1.prototype, key, function() { return Html5$1[fn2](); }, true); }); Html5$1.prototype.featuresVolumeControl = Html5$1.canControlVolume(); Html5$1.prototype.movingMediaElementInDOM = !IS_IOS; Html5$1.prototype.featuresFullscreenResize = true; Html5$1.prototype.featuresProgressEvents = true; Html5$1.prototype.featuresTimeupdateEvents = true; Html5$1.prototype.featuresVideoFrameCallback = !!(Html5$1.TEST_VID && Html5$1.TEST_VID.requestVideoFrameCallback); var canPlayType; Html5$1.patchCanPlayType = function() { if (ANDROID_VERSION >= 4 && !IS_FIREFOX && !IS_CHROME) { canPlayType = Html5$1.TEST_VID && Html5$1.TEST_VID.constructor.prototype.canPlayType; Html5$1.TEST_VID.constructor.prototype.canPlayType = function(type2) { var mpegurlRE = /^application\/(?:x-|vnd\.apple\.)mpegurl/i; if (type2 && mpegurlRE.test(type2)) { return "maybe"; } return canPlayType.call(this, type2); }; } }; Html5$1.unpatchCanPlayType = function() { var r2 = Html5$1.TEST_VID.constructor.prototype.canPlayType; if (canPlayType) { Html5$1.TEST_VID.constructor.prototype.canPlayType = canPlayType; } return r2; }; Html5$1.patchCanPlayType(); Html5$1.disposeMediaElement = function(el) { if (!el) { return; } if (el.parentNode) { el.parentNode.removeChild(el); } while (el.hasChildNodes()) { el.removeChild(el.firstChild); } el.removeAttribute("src"); if (typeof el.load === "function") { (function() { try { el.load(); } catch (e) { } })(); } }; Html5$1.resetMediaElement = function(el) { if (!el) { return; } var sources = el.querySelectorAll("source"); var i2 = sources.length; while (i2--) { el.removeChild(sources[i2]); } el.removeAttribute("src"); if (typeof el.load === "function") { (function() { try { el.load(); } catch (e) { } })(); } }; [ "muted", "defaultMuted", "autoplay", "controls", "loop", "playsinline" ].forEach(function(prop) { Html5$1.prototype[prop] = function() { return this.el_[prop] || this.el_.hasAttribute(prop); }; }); [ "muted", "defaultMuted", "autoplay", "loop", "playsinline" ].forEach(function(prop) { Html5$1.prototype["set" + toTitleCase$1(prop)] = function(v) { this.el_[prop] = v; if (v) { this.el_.setAttribute(prop, prop); } else { this.el_.removeAttribute(prop); } }; }); [ "paused", "currentTime", "buffered", "volume", "poster", "preload", "error", "seeking", "seekable", "ended", "playbackRate", "defaultPlaybackRate", "disablePictureInPicture", "played", "networkState", "readyState", "videoWidth", "videoHeight", "crossOrigin" ].forEach(function(prop) { Html5$1.prototype[prop] = function() { return this.el_[prop]; }; }); [ "volume", "src", "poster", "preload", "playbackRate", "defaultPlaybackRate", "disablePictureInPicture", "crossOrigin" ].forEach(function(prop) { Html5$1.prototype["set" + toTitleCase$1(prop)] = function(v) { this.el_[prop] = v; }; }); [ "pause", "load", "play" ].forEach(function(prop) { Html5$1.prototype[prop] = function() { return this.el_[prop](); }; }); Tech$1.withSourceHandlers(Html5$1); Html5$1.nativeSourceHandler = {}; Html5$1.nativeSourceHandler.canPlayType = function(type2) { try { return Html5$1.TEST_VID.canPlayType(type2); } catch (e) { return ""; } }; Html5$1.nativeSourceHandler.canHandleSource = function(source, options2) { if (source.type) { return Html5$1.nativeSourceHandler.canPlayType(source.type); } else if (source.src) { var ext = getFileExtension(source.src); return Html5$1.nativeSourceHandler.canPlayType("video/" + ext); } return ""; }; Html5$1.nativeSourceHandler.handleSource = function(source, tech, options2) { tech.setSrc(source.src); }; Html5$1.nativeSourceHandler.dispose = function() { }; Html5$1.registerSourceHandler(Html5$1.nativeSourceHandler); Tech$1.registerTech("Html5", Html5$1); var TECH_EVENTS_RETRIGGER = [ "progress", "abort", "suspend", "emptied", "stalled", "loadedmetadata", "loadeddata", "timeupdate", "resize", "volumechange", "texttrackchange" ]; var TECH_EVENTS_QUEUE = { canplay: "CanPlay", canplaythrough: "CanPlayThrough", playing: "Playing", seeked: "Seeked" }; var BREAKPOINT_ORDER = ["tiny", "xsmall", "small", "medium", "large", "xlarge", "huge"]; var BREAKPOINT_CLASSES = {}; BREAKPOINT_ORDER.forEach(function(k) { var v = k.charAt(0) === "x" ? "x-" + k.substring(1) : k; BREAKPOINT_CLASSES[k] = "vjs-layout-" + v; }); var DEFAULT_BREAKPOINTS = { tiny: 210, xsmall: 320, small: 425, medium: 768, large: 1440, xlarge: 2560, huge: Infinity }; var Player = /* @__PURE__ */ function(_Component) { _inheritsLoose(Player2, _Component); function Player2(tag, options2, ready) { var _this; tag.id = tag.id || options2.id || "vjs_video_" + newGUID(); options2 = assign(Player2.getTagSettings(tag), options2); options2.initChildren = false; options2.createEl = false; options2.evented = false; options2.reportTouchActivity = false; if (!options2.language) { if (typeof tag.closest === "function") { var closest = tag.closest("[lang]"); if (closest && closest.getAttribute) { options2.language = closest.getAttribute("lang"); } } else { var element = tag; while (element && element.nodeType === 1) { if (getAttributes(element).hasOwnProperty("lang")) { options2.language = element.getAttribute("lang"); break; } element = element.parentNode; } } } _this = _Component.call(this, null, options2, ready) || this; _this.boundDocumentFullscreenChange_ = function(e) { return _this.documentFullscreenChange_(e); }; _this.boundFullWindowOnEscKey_ = function(e) { return _this.fullWindowOnEscKey(e); }; _this.boundUpdateStyleEl_ = function(e) { return _this.updateStyleEl_(e); }; _this.boundApplyInitTime_ = function(e) { return _this.applyInitTime_(e); }; _this.boundUpdateCurrentBreakpoint_ = function(e) { return _this.updateCurrentBreakpoint_(e); }; _this.boundHandleTechClick_ = function(e) { return _this.handleTechClick_(e); }; _this.boundHandleTechDoubleClick_ = function(e) { return _this.handleTechDoubleClick_(e); }; _this.boundHandleTechTouchStart_ = function(e) { return _this.handleTechTouchStart_(e); }; _this.boundHandleTechTouchMove_ = function(e) { return _this.handleTechTouchMove_(e); }; _this.boundHandleTechTouchEnd_ = function(e) { return _this.handleTechTouchEnd_(e); }; _this.boundHandleTechTap_ = function(e) { return _this.handleTechTap_(e); }; _this.isFullscreen_ = false; _this.log = createLogger(_this.id_); _this.fsApi_ = FullscreenApi; _this.isPosterFromTech_ = false; _this.queuedCallbacks_ = []; _this.isReady_ = false; _this.hasStarted_ = false; _this.userActive_ = false; _this.debugEnabled_ = false; _this.audioOnlyMode_ = false; _this.audioPosterMode_ = false; _this.audioOnlyCache_ = { playerHeight: null, hiddenChildren: [] }; if (!_this.options_ || !_this.options_.techOrder || !_this.options_.techOrder.length) { throw new Error("No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?"); } _this.tag = tag; _this.tagAttributes = tag && getAttributes(tag); _this.language(_this.options_.language); if (options2.languages) { var languagesToLower = {}; Object.getOwnPropertyNames(options2.languages).forEach(function(name) { languagesToLower[name.toLowerCase()] = options2.languages[name]; }); _this.languages_ = languagesToLower; } else { _this.languages_ = Player2.prototype.options_.languages; } _this.resetCache_(); _this.poster_ = options2.poster || ""; _this.controls_ = !!options2.controls; tag.controls = false; tag.removeAttribute("controls"); _this.changingSrc_ = false; _this.playCallbacks_ = []; _this.playTerminatedQueue_ = []; if (tag.hasAttribute("autoplay")) { _this.autoplay(true); } else { _this.autoplay(_this.options_.autoplay); } if (options2.plugins) { Object.keys(options2.plugins).forEach(function(name) { if (typeof _this[name] !== "function") { throw new Error('plugin "' + name + '" does not exist'); } }); } _this.scrubbing_ = false; _this.el_ = _this.createEl(); evented(_assertThisInitialized(_this), { eventBusKey: "el_" }); if (_this.fsApi_.requestFullscreen) { on(document_1, _this.fsApi_.fullscreenchange, _this.boundDocumentFullscreenChange_); _this.on(_this.fsApi_.fullscreenchange, _this.boundDocumentFullscreenChange_); } if (_this.fluid_) { _this.on(["playerreset", "resize"], _this.boundUpdateStyleEl_); } var playerOptionsCopy = mergeOptions$3(_this.options_); if (options2.plugins) { Object.keys(options2.plugins).forEach(function(name) { _this[name](options2.plugins[name]); }); } if (options2.debug) { _this.debug(true); } _this.options_.playerOptions = playerOptionsCopy; _this.middleware_ = []; _this.playbackRates(options2.playbackRates); _this.initChildren(); _this.isAudio(tag.nodeName.toLowerCase() === "audio"); if (_this.controls()) { _this.addClass("vjs-controls-enabled"); } else { _this.addClass("vjs-controls-disabled"); } _this.el_.setAttribute("role", "region"); if (_this.isAudio()) { _this.el_.setAttribute("aria-label", _this.localize("Audio Player")); } else { _this.el_.setAttribute("aria-label", _this.localize("Video Player")); } if (_this.isAudio()) { _this.addClass("vjs-audio"); } if (_this.flexNotSupported_()) { _this.addClass("vjs-no-flex"); } if (TOUCH_ENABLED) { _this.addClass("vjs-touch-enabled"); } if (!IS_IOS) { _this.addClass("vjs-workinghover"); } Player2.players[_this.id_] = _assertThisInitialized(_this); var majorVersion = version$5.split(".")[0]; _this.addClass("vjs-v" + majorVersion); _this.userActive(true); _this.reportUserActivity(); _this.one("play", function(e) { return _this.listenForUserActivity_(e); }); _this.on("stageclick", function(e) { return _this.handleStageClick_(e); }); _this.on("keydown", function(e) { return _this.handleKeyDown(e); }); _this.on("languagechange", function(e) { return _this.handleLanguagechange(e); }); _this.breakpoints(_this.options_.breakpoints); _this.responsive(_this.options_.responsive); _this.on("ready", function() { _this.audioPosterMode(_this.options_.audioPosterMode); _this.audioOnlyMode(_this.options_.audioOnlyMode); }); return _this; } var _proto = Player2.prototype; _proto.dispose = function dispose() { var _this2 = this; this.trigger("dispose"); this.off("dispose"); off(document_1, this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_); off(document_1, "keydown", this.boundFullWindowOnEscKey_); if (this.styleEl_ && this.styleEl_.parentNode) { this.styleEl_.parentNode.removeChild(this.styleEl_); this.styleEl_ = null; } Player2.players[this.id_] = null; if (this.tag && this.tag.player) { this.tag.player = null; } if (this.el_ && this.el_.player) { this.el_.player = null; } if (this.tech_) { this.tech_.dispose(); this.isPosterFromTech_ = false; this.poster_ = ""; } if (this.playerElIngest_) { this.playerElIngest_ = null; } if (this.tag) { this.tag = null; } clearCacheForPlayer(this); ALL.names.forEach(function(name) { var props = ALL[name]; var list = _this2[props.getterName](); if (list && list.off) { list.off(); } }); _Component.prototype.dispose.call(this, { restoreEl: this.options_.restoreEl }); }; _proto.createEl = function createEl2() { var tag = this.tag; var el; var playerElIngest = this.playerElIngest_ = tag.parentNode && tag.parentNode.hasAttribute && tag.parentNode.hasAttribute("data-vjs-player"); var divEmbed = this.tag.tagName.toLowerCase() === "video-js"; if (playerElIngest) { el = this.el_ = tag.parentNode; } else if (!divEmbed) { el = this.el_ = _Component.prototype.createEl.call(this, "div"); } var attrs = getAttributes(tag); if (divEmbed) { el = this.el_ = tag; tag = this.tag = document_1.createElement("video"); while (el.children.length) { tag.appendChild(el.firstChild); } if (!hasClass(el, "video-js")) { addClass(el, "video-js"); } el.appendChild(tag); playerElIngest = this.playerElIngest_ = el; Object.keys(el).forEach(function(k) { try { tag[k] = el[k]; } catch (e) { } }); } tag.setAttribute("tabindex", "-1"); attrs.tabindex = "-1"; if (IE_VERSION || IS_CHROME && IS_WINDOWS) { tag.setAttribute("role", "application"); attrs.role = "application"; } tag.removeAttribute("width"); tag.removeAttribute("height"); if ("width" in attrs) { delete attrs.width; } if ("height" in attrs) { delete attrs.height; } Object.getOwnPropertyNames(attrs).forEach(function(attr) { if (!(divEmbed && attr === "class")) { el.setAttribute(attr, attrs[attr]); } if (divEmbed) { tag.setAttribute(attr, attrs[attr]); } }); tag.playerId = tag.id; tag.id += "_html5_api"; tag.className = "vjs-tech"; tag.player = el.player = this; this.addClass("vjs-paused"); if (window_1.VIDEOJS_NO_DYNAMIC_STYLE !== true) { this.styleEl_ = createStyleElement("vjs-styles-dimensions"); var defaultsStyleEl = $(".vjs-styles-defaults"); var head = $("head"); head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild); } this.fill_ = false; this.fluid_ = false; this.width(this.options_.width); this.height(this.options_.height); this.fill(this.options_.fill); this.fluid(this.options_.fluid); this.aspectRatio(this.options_.aspectRatio); this.crossOrigin(this.options_.crossOrigin || this.options_.crossorigin); var links = tag.getElementsByTagName("a"); for (var i2 = 0; i2 < links.length; i2++) { var linkEl = links.item(i2); addClass(linkEl, "vjs-hidden"); linkEl.setAttribute("hidden", "hidden"); } tag.initNetworkState_ = tag.networkState; if (tag.parentNode && !playerElIngest) { tag.parentNode.insertBefore(el, tag); } prependTo(tag, el); this.children_.unshift(tag); this.el_.setAttribute("lang", this.language_); this.el_.setAttribute("translate", "no"); this.el_ = el; return el; }; _proto.crossOrigin = function crossOrigin(value) { if (!value) { return this.techGet_("crossOrigin"); } if (value !== "anonymous" && value !== "use-credentials") { log$1.warn('crossOrigin must be "anonymous" or "use-credentials", given "' + value + '"'); return; } this.techCall_("setCrossOrigin", value); return; }; _proto.width = function width2(value) { return this.dimension("width", value); }; _proto.height = function height2(value) { return this.dimension("height", value); }; _proto.dimension = function dimension(_dimension, value) { var privDimension = _dimension + "_"; if (value === void 0) { return this[privDimension] || 0; } if (value === "" || value === "auto") { this[privDimension] = void 0; this.updateStyleEl_(); return; } var parsedVal = parseFloat(value); if (isNaN(parsedVal)) { log$1.error('Improper value "' + value + '" supplied for for ' + _dimension); return; } this[privDimension] = parsedVal; this.updateStyleEl_(); }; _proto.fluid = function fluid(bool) { var _this3 = this; if (bool === void 0) { return !!this.fluid_; } this.fluid_ = !!bool; if (isEvented(this)) { this.off(["playerreset", "resize"], this.boundUpdateStyleEl_); } if (bool) { this.addClass("vjs-fluid"); this.fill(false); addEventedCallback(this, function() { _this3.on(["playerreset", "resize"], _this3.boundUpdateStyleEl_); }); } else { this.removeClass("vjs-fluid"); } this.updateStyleEl_(); }; _proto.fill = function fill(bool) { if (bool === void 0) { return !!this.fill_; } this.fill_ = !!bool; if (bool) { this.addClass("vjs-fill"); this.fluid(false); } else { this.removeClass("vjs-fill"); } }; _proto.aspectRatio = function aspectRatio(ratio) { if (ratio === void 0) { return this.aspectRatio_; } if (!/^\d+\:\d+$/.test(ratio)) { throw new Error("Improper value supplied for aspect ratio. The format should be width:height, for example 16:9."); } this.aspectRatio_ = ratio; this.fluid(true); this.updateStyleEl_(); }; _proto.updateStyleEl_ = function updateStyleEl_() { if (window_1.VIDEOJS_NO_DYNAMIC_STYLE === true) { var _width = typeof this.width_ === "number" ? this.width_ : this.options_.width; var _height = typeof this.height_ === "number" ? this.height_ : this.options_.height; var techEl = this.tech_ && this.tech_.el(); if (techEl) { if (_width >= 0) { techEl.width = _width; } if (_height >= 0) { techEl.height = _height; } } return; } var width2; var height2; var aspectRatio; var idClass; if (this.aspectRatio_ !== void 0 && this.aspectRatio_ !== "auto") { aspectRatio = this.aspectRatio_; } else if (this.videoWidth() > 0) { aspectRatio = this.videoWidth() + ":" + this.videoHeight(); } else { aspectRatio = "16:9"; } var ratioParts = aspectRatio.split(":"); var ratioMultiplier = ratioParts[1] / ratioParts[0]; if (this.width_ !== void 0) { width2 = this.width_; } else if (this.height_ !== void 0) { width2 = this.height_ / ratioMultiplier; } else { width2 = this.videoWidth() || 300; } if (this.height_ !== void 0) { height2 = this.height_; } else { height2 = width2 * ratioMultiplier; } if (/^[^a-zA-Z]/.test(this.id())) { idClass = "dimensions-" + this.id(); } else { idClass = this.id() + "-dimensions"; } this.addClass(idClass); setTextContent(this.styleEl_, "\n ." + idClass + " {\n width: " + width2 + "px;\n height: " + height2 + "px;\n }\n\n ." + idClass + ".vjs-fluid:not(.vjs-audio-only-mode) {\n padding-top: " + ratioMultiplier * 100 + "%;\n }\n "); }; _proto.loadTech_ = function loadTech_(techName, source) { var _this4 = this; if (this.tech_) { this.unloadTech_(); } var titleTechName = toTitleCase$1(techName); var camelTechName = techName.charAt(0).toLowerCase() + techName.slice(1); if (titleTechName !== "Html5" && this.tag) { Tech$1.getTech("Html5").disposeMediaElement(this.tag); this.tag.player = null; this.tag = null; } this.techName_ = titleTechName; this.isReady_ = false; var autoplay = this.autoplay(); if (typeof this.autoplay() === "string" || this.autoplay() === true && this.options_.normalizeAutoplay) { autoplay = false; } var techOptions = { source, autoplay, "nativeControlsForTouch": this.options_.nativeControlsForTouch, "playerId": this.id(), "techId": this.id() + "_" + camelTechName + "_api", "playsinline": this.options_.playsinline, "preload": this.options_.preload, "loop": this.options_.loop, "disablePictureInPicture": this.options_.disablePictureInPicture, "muted": this.options_.muted, "poster": this.poster(), "language": this.language(), "playerElIngest": this.playerElIngest_ || false, "vtt.js": this.options_["vtt.js"], "canOverridePoster": !!this.options_.techCanOverridePoster, "enableSourceset": this.options_.enableSourceset, "Promise": this.options_.Promise }; ALL.names.forEach(function(name) { var props = ALL[name]; techOptions[props.getterName] = _this4[props.privateName]; }); assign(techOptions, this.options_[titleTechName]); assign(techOptions, this.options_[camelTechName]); assign(techOptions, this.options_[techName.toLowerCase()]); if (this.tag) { techOptions.tag = this.tag; } if (source && source.src === this.cache_.src && this.cache_.currentTime > 0) { techOptions.startTime = this.cache_.currentTime; } var TechClass = Tech$1.getTech(techName); if (!TechClass) { throw new Error("No Tech named '" + titleTechName + "' exists! '" + titleTechName + "' should be registered using videojs.registerTech()'"); } this.tech_ = new TechClass(techOptions); this.tech_.ready(bind(this, this.handleTechReady_), true); textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech_); TECH_EVENTS_RETRIGGER.forEach(function(event2) { _this4.on(_this4.tech_, event2, function(e) { return _this4["handleTech" + toTitleCase$1(event2) + "_"](e); }); }); Object.keys(TECH_EVENTS_QUEUE).forEach(function(event2) { _this4.on(_this4.tech_, event2, function(eventObj) { if (_this4.tech_.playbackRate() === 0 && _this4.tech_.seeking()) { _this4.queuedCallbacks_.push({ callback: _this4["handleTech" + TECH_EVENTS_QUEUE[event2] + "_"].bind(_this4), event: eventObj }); return; } _this4["handleTech" + TECH_EVENTS_QUEUE[event2] + "_"](eventObj); }); }); this.on(this.tech_, "loadstart", function(e) { return _this4.handleTechLoadStart_(e); }); this.on(this.tech_, "sourceset", function(e) { return _this4.handleTechSourceset_(e); }); this.on(this.tech_, "waiting", function(e) { return _this4.handleTechWaiting_(e); }); this.on(this.tech_, "ended", function(e) { return _this4.handleTechEnded_(e); }); this.on(this.tech_, "seeking", function(e) { return _this4.handleTechSeeking_(e); }); this.on(this.tech_, "play", function(e) { return _this4.handleTechPlay_(e); }); this.on(this.tech_, "firstplay", function(e) { return _this4.handleTechFirstPlay_(e); }); this.on(this.tech_, "pause", function(e) { return _this4.handleTechPause_(e); }); this.on(this.tech_, "durationchange", function(e) { return _this4.handleTechDurationChange_(e); }); this.on(this.tech_, "fullscreenchange", function(e, data) { return _this4.handleTechFullscreenChange_(e, data); }); this.on(this.tech_, "fullscreenerror", function(e, err) { return _this4.handleTechFullscreenError_(e, err); }); this.on(this.tech_, "enterpictureinpicture", function(e) { return _this4.handleTechEnterPictureInPicture_(e); }); this.on(this.tech_, "leavepictureinpicture", function(e) { return _this4.handleTechLeavePictureInPicture_(e); }); this.on(this.tech_, "error", function(e) { return _this4.handleTechError_(e); }); this.on(this.tech_, "posterchange", function(e) { return _this4.handleTechPosterChange_(e); }); this.on(this.tech_, "textdata", function(e) { return _this4.handleTechTextData_(e); }); this.on(this.tech_, "ratechange", function(e) { return _this4.handleTechRateChange_(e); }); this.on(this.tech_, "loadedmetadata", this.boundUpdateStyleEl_); this.usingNativeControls(this.techGet_("controls")); if (this.controls() && !this.usingNativeControls()) { this.addTechControlsListeners_(); } if (this.tech_.el().parentNode !== this.el() && (titleTechName !== "Html5" || !this.tag)) { prependTo(this.tech_.el(), this.el()); } if (this.tag) { this.tag.player = null; this.tag = null; } }; _proto.unloadTech_ = function unloadTech_() { var _this5 = this; ALL.names.forEach(function(name) { var props = ALL[name]; _this5[props.privateName] = _this5[props.getterName](); }); this.textTracksJson_ = textTrackConverter.textTracksToJson(this.tech_); this.isReady_ = false; this.tech_.dispose(); this.tech_ = false; if (this.isPosterFromTech_) { this.poster_ = ""; this.trigger("posterchange"); } this.isPosterFromTech_ = false; }; _proto.tech = function tech(safety) { if (safety === void 0) { log$1.warn("Using the tech directly can be dangerous. I hope you know what you're doing.\nSee https://github.com/videojs/video.js/issues/2617 for more info.\n"); } return this.tech_; }; _proto.addTechControlsListeners_ = function addTechControlsListeners_() { this.removeTechControlsListeners_(); this.on(this.tech_, "click", this.boundHandleTechClick_); this.on(this.tech_, "dblclick", this.boundHandleTechDoubleClick_); this.on(this.tech_, "touchstart", this.boundHandleTechTouchStart_); this.on(this.tech_, "touchmove", this.boundHandleTechTouchMove_); this.on(this.tech_, "touchend", this.boundHandleTechTouchEnd_); this.on(this.tech_, "tap", this.boundHandleTechTap_); }; _proto.removeTechControlsListeners_ = function removeTechControlsListeners_() { this.off(this.tech_, "tap", this.boundHandleTechTap_); this.off(this.tech_, "touchstart", this.boundHandleTechTouchStart_); this.off(this.tech_, "touchmove", this.boundHandleTechTouchMove_); this.off(this.tech_, "touchend", this.boundHandleTechTouchEnd_); this.off(this.tech_, "click", this.boundHandleTechClick_); this.off(this.tech_, "dblclick", this.boundHandleTechDoubleClick_); }; _proto.handleTechReady_ = function handleTechReady_() { this.triggerReady(); if (this.cache_.volume) { this.techCall_("setVolume", this.cache_.volume); } this.handleTechPosterChange_(); this.handleTechDurationChange_(); }; _proto.handleTechLoadStart_ = function handleTechLoadStart_() { this.removeClass("vjs-ended"); this.removeClass("vjs-seeking"); this.error(null); this.handleTechDurationChange_(); if (!this.paused()) { this.trigger("loadstart"); this.trigger("firstplay"); } else { this.hasStarted(false); this.trigger("loadstart"); } this.manualAutoplay_(this.autoplay() === true && this.options_.normalizeAutoplay ? "play" : this.autoplay()); }; _proto.manualAutoplay_ = function manualAutoplay_(type2) { var _this6 = this; if (!this.tech_ || typeof type2 !== "string") { return; } var resolveMuted = function resolveMuted2() { var previouslyMuted = _this6.muted(); _this6.muted(true); var restoreMuted = function restoreMuted2() { _this6.muted(previouslyMuted); }; _this6.playTerminatedQueue_.push(restoreMuted); var mutedPromise = _this6.play(); if (!isPromise(mutedPromise)) { return; } return mutedPromise["catch"](function(err) { restoreMuted(); throw new Error("Rejection at manualAutoplay. Restoring muted value. " + (err ? err : "")); }); }; var promise; if (type2 === "any" && !this.muted()) { promise = this.play(); if (isPromise(promise)) { promise = promise["catch"](resolveMuted); } } else if (type2 === "muted" && !this.muted()) { promise = resolveMuted(); } else { promise = this.play(); } if (!isPromise(promise)) { return; } return promise.then(function() { _this6.trigger({ type: "autoplay-success", autoplay: type2 }); })["catch"](function() { _this6.trigger({ type: "autoplay-failure", autoplay: type2 }); }); }; _proto.updateSourceCaches_ = function updateSourceCaches_(srcObj) { if (srcObj === void 0) { srcObj = ""; } var src = srcObj; var type2 = ""; if (typeof src !== "string") { src = srcObj.src; type2 = srcObj.type; } this.cache_.source = this.cache_.source || {}; this.cache_.sources = this.cache_.sources || []; if (src && !type2) { type2 = findMimetype(this, src); } this.cache_.source = mergeOptions$3({}, srcObj, { src, type: type2 }); var matchingSources = this.cache_.sources.filter(function(s) { return s.src && s.src === src; }); var sourceElSources = []; var sourceEls = this.$$("source"); var matchingSourceEls = []; for (var i2 = 0; i2 < sourceEls.length; i2++) { var sourceObj = getAttributes(sourceEls[i2]); sourceElSources.push(sourceObj); if (sourceObj.src && sourceObj.src === src) { matchingSourceEls.push(sourceObj.src); } } if (matchingSourceEls.length && !matchingSources.length) { this.cache_.sources = sourceElSources; } else if (!matchingSources.length) { this.cache_.sources = [this.cache_.source]; } this.cache_.src = src; }; _proto.handleTechSourceset_ = function handleTechSourceset_(event2) { var _this7 = this; if (!this.changingSrc_) { var updateSourceCaches = function updateSourceCaches2(src) { return _this7.updateSourceCaches_(src); }; var playerSrc = this.currentSource().src; var eventSrc = event2.src; if (playerSrc && !/^blob:/.test(playerSrc) && /^blob:/.test(eventSrc)) { if (!this.lastSource_ || this.lastSource_.tech !== eventSrc && this.lastSource_.player !== playerSrc) { updateSourceCaches = function updateSourceCaches2() { }; } } updateSourceCaches(eventSrc); if (!event2.src) { this.tech_.any(["sourceset", "loadstart"], function(e) { if (e.type === "sourceset") { return; } var techSrc = _this7.techGet("currentSrc"); _this7.lastSource_.tech = techSrc; _this7.updateSourceCaches_(techSrc); }); } } this.lastSource_ = { player: this.currentSource().src, tech: event2.src }; this.trigger({ src: event2.src, type: "sourceset" }); }; _proto.hasStarted = function hasStarted(request) { if (request === void 0) { return this.hasStarted_; } if (request === this.hasStarted_) { return; } this.hasStarted_ = request; if (this.hasStarted_) { this.addClass("vjs-has-started"); this.trigger("firstplay"); } else { this.removeClass("vjs-has-started"); } }; _proto.handleTechPlay_ = function handleTechPlay_() { this.removeClass("vjs-ended"); this.removeClass("vjs-paused"); this.addClass("vjs-playing"); this.hasStarted(true); this.trigger("play"); }; _proto.handleTechRateChange_ = function handleTechRateChange_() { if (this.tech_.playbackRate() > 0 && this.cache_.lastPlaybackRate === 0) { this.queuedCallbacks_.forEach(function(queued) { return queued.callback(queued.event); }); this.queuedCallbacks_ = []; } this.cache_.lastPlaybackRate = this.tech_.playbackRate(); this.trigger("ratechange"); }; _proto.handleTechWaiting_ = function handleTechWaiting_() { var _this8 = this; this.addClass("vjs-waiting"); this.trigger("waiting"); var timeWhenWaiting = this.currentTime(); var timeUpdateListener = function timeUpdateListener2() { if (timeWhenWaiting !== _this8.currentTime()) { _this8.removeClass("vjs-waiting"); _this8.off("timeupdate", timeUpdateListener2); } }; this.on("timeupdate", timeUpdateListener); }; _proto.handleTechCanPlay_ = function handleTechCanPlay_() { this.removeClass("vjs-waiting"); this.trigger("canplay"); }; _proto.handleTechCanPlayThrough_ = function handleTechCanPlayThrough_() { this.removeClass("vjs-waiting"); this.trigger("canplaythrough"); }; _proto.handleTechPlaying_ = function handleTechPlaying_() { this.removeClass("vjs-waiting"); this.trigger("playing"); }; _proto.handleTechSeeking_ = function handleTechSeeking_() { this.addClass("vjs-seeking"); this.trigger("seeking"); }; _proto.handleTechSeeked_ = function handleTechSeeked_() { this.removeClass("vjs-seeking"); this.removeClass("vjs-ended"); this.trigger("seeked"); }; _proto.handleTechFirstPlay_ = function handleTechFirstPlay_() { if (this.options_.starttime) { log$1.warn("Passing the `starttime` option to the player will be deprecated in 6.0"); this.currentTime(this.options_.starttime); } this.addClass("vjs-has-started"); this.trigger("firstplay"); }; _proto.handleTechPause_ = function handleTechPause_() { this.removeClass("vjs-playing"); this.addClass("vjs-paused"); this.trigger("pause"); }; _proto.handleTechEnded_ = function handleTechEnded_() { this.addClass("vjs-ended"); this.removeClass("vjs-waiting"); if (this.options_.loop) { this.currentTime(0); this.play(); } else if (!this.paused()) { this.pause(); } this.trigger("ended"); }; _proto.handleTechDurationChange_ = function handleTechDurationChange_() { this.duration(this.techGet_("duration")); }; _proto.handleTechClick_ = function handleTechClick_(event2) { if (!this.controls_) { return; } if (this.options_ === void 0 || this.options_.userActions === void 0 || this.options_.userActions.click === void 0 || this.options_.userActions.click !== false) { if (this.options_ !== void 0 && this.options_.userActions !== void 0 && typeof this.options_.userActions.click === "function") { this.options_.userActions.click.call(this, event2); } else if (this.paused()) { silencePromise(this.play()); } else { this.pause(); } } }; _proto.handleTechDoubleClick_ = function handleTechDoubleClick_(event2) { if (!this.controls_) { return; } var inAllowedEls = Array.prototype.some.call(this.$$(".vjs-control-bar, .vjs-modal-dialog"), function(el) { return el.contains(event2.target); }); if (!inAllowedEls) { if (this.options_ === void 0 || this.options_.userActions === void 0 || this.options_.userActions.doubleClick === void 0 || this.options_.userActions.doubleClick !== false) { if (this.options_ !== void 0 && this.options_.userActions !== void 0 && typeof this.options_.userActions.doubleClick === "function") { this.options_.userActions.doubleClick.call(this, event2); } else if (this.isFullscreen()) { this.exitFullscreen(); } else { this.requestFullscreen(); } } } }; _proto.handleTechTap_ = function handleTechTap_() { this.userActive(!this.userActive()); }; _proto.handleTechTouchStart_ = function handleTechTouchStart_() { this.userWasActive = this.userActive(); }; _proto.handleTechTouchMove_ = function handleTechTouchMove_() { if (this.userWasActive) { this.reportUserActivity(); } }; _proto.handleTechTouchEnd_ = function handleTechTouchEnd_(event2) { if (event2.cancelable) { event2.preventDefault(); } }; _proto.handleStageClick_ = function handleStageClick_() { this.reportUserActivity(); }; _proto.toggleFullscreenClass_ = function toggleFullscreenClass_() { if (this.isFullscreen()) { this.addClass("vjs-fullscreen"); } else { this.removeClass("vjs-fullscreen"); } }; _proto.documentFullscreenChange_ = function documentFullscreenChange_(e) { var targetPlayer = e.target.player; if (targetPlayer && targetPlayer !== this) { return; } var el = this.el(); var isFs = document_1[this.fsApi_.fullscreenElement] === el; if (!isFs && el.matches) { isFs = el.matches(":" + this.fsApi_.fullscreen); } else if (!isFs && el.msMatchesSelector) { isFs = el.msMatchesSelector(":" + this.fsApi_.fullscreen); } this.isFullscreen(isFs); }; _proto.handleTechFullscreenChange_ = function handleTechFullscreenChange_(event2, data) { var _this9 = this; if (data) { if (data.nativeIOSFullscreen) { this.addClass("vjs-ios-native-fs"); this.tech_.one("webkitendfullscreen", function() { _this9.removeClass("vjs-ios-native-fs"); }); } this.isFullscreen(data.isFullscreen); } }; _proto.handleTechFullscreenError_ = function handleTechFullscreenError_(event2, err) { this.trigger("fullscreenerror", err); }; _proto.togglePictureInPictureClass_ = function togglePictureInPictureClass_() { if (this.isInPictureInPicture()) { this.addClass("vjs-picture-in-picture"); } else { this.removeClass("vjs-picture-in-picture"); } }; _proto.handleTechEnterPictureInPicture_ = function handleTechEnterPictureInPicture_(event2) { this.isInPictureInPicture(true); }; _proto.handleTechLeavePictureInPicture_ = function handleTechLeavePictureInPicture_(event2) { this.isInPictureInPicture(false); }; _proto.handleTechError_ = function handleTechError_() { var error = this.tech_.error(); this.error(error); }; _proto.handleTechTextData_ = function handleTechTextData_() { var data = null; if (arguments.length > 1) { data = arguments[1]; } this.trigger("textdata", data); }; _proto.getCache = function getCache() { return this.cache_; }; _proto.resetCache_ = function resetCache_() { this.cache_ = { currentTime: 0, initTime: 0, inactivityTimeout: this.options_.inactivityTimeout, duration: NaN, lastVolume: 1, lastPlaybackRate: this.defaultPlaybackRate(), media: null, src: "", source: {}, sources: [], playbackRates: [], volume: 1 }; }; _proto.techCall_ = function techCall_(method, arg) { this.ready(function() { if (method in allowedSetters) { return set(this.middleware_, this.tech_, method, arg); } else if (method in allowedMediators) { return mediate(this.middleware_, this.tech_, method, arg); } try { if (this.tech_) { this.tech_[method](arg); } } catch (e) { log$1(e); throw e; } }, true); }; _proto.techGet_ = function techGet_(method) { if (!this.tech_ || !this.tech_.isReady_) { return; } if (method in allowedGetters) { return get(this.middleware_, this.tech_, method); } else if (method in allowedMediators) { return mediate(this.middleware_, this.tech_, method); } try { return this.tech_[method](); } catch (e) { if (this.tech_[method] === void 0) { log$1("Video.js: " + method + " method not defined for " + this.techName_ + " playback technology.", e); throw e; } if (e.name === "TypeError") { log$1("Video.js: " + method + " unavailable on " + this.techName_ + " playback technology element.", e); this.tech_.isReady_ = false; throw e; } log$1(e); throw e; } }; _proto.play = function play() { var _this10 = this; var PromiseClass = this.options_.Promise || window_1.Promise; if (PromiseClass) { return new PromiseClass(function(resolve2) { _this10.play_(resolve2); }); } return this.play_(); }; _proto.play_ = function play_(callback2) { var _this11 = this; if (callback2 === void 0) { callback2 = silencePromise; } this.playCallbacks_.push(callback2); var isSrcReady = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); var isSafariOrIOS = Boolean(IS_ANY_SAFARI || IS_IOS); if (this.waitToPlay_) { this.off(["ready", "loadstart"], this.waitToPlay_); this.waitToPlay_ = null; } if (!this.isReady_ || !isSrcReady) { this.waitToPlay_ = function(e) { _this11.play_(); }; this.one(["ready", "loadstart"], this.waitToPlay_); if (!isSrcReady && isSafariOrIOS) { this.load(); } return; } var val = this.techGet_("play"); var isNativeReplay = isSafariOrIOS && this.hasClass("vjs-ended"); if (isNativeReplay) { this.resetProgressBar_(); } if (val === null) { this.runPlayTerminatedQueue_(); } else { this.runPlayCallbacks_(val); } }; _proto.runPlayTerminatedQueue_ = function runPlayTerminatedQueue_() { var queue = this.playTerminatedQueue_.slice(0); this.playTerminatedQueue_ = []; queue.forEach(function(q2) { q2(); }); }; _proto.runPlayCallbacks_ = function runPlayCallbacks_(val) { var callbacks = this.playCallbacks_.slice(0); this.playCallbacks_ = []; this.playTerminatedQueue_ = []; callbacks.forEach(function(cb) { cb(val); }); }; _proto.pause = function pause() { this.techCall_("pause"); }; _proto.paused = function paused() { return this.techGet_("paused") === false ? false : true; }; _proto.played = function played() { return this.techGet_("played") || createTimeRanges(0, 0); }; _proto.scrubbing = function scrubbing(isScrubbing) { if (typeof isScrubbing === "undefined") { return this.scrubbing_; } this.scrubbing_ = !!isScrubbing; this.techCall_("setScrubbing", this.scrubbing_); if (isScrubbing) { this.addClass("vjs-scrubbing"); } else { this.removeClass("vjs-scrubbing"); } }; _proto.currentTime = function currentTime(seconds) { if (typeof seconds !== "undefined") { if (seconds < 0) { seconds = 0; } if (!this.isReady_ || this.changingSrc_ || !this.tech_ || !this.tech_.isReady_) { this.cache_.initTime = seconds; this.off("canplay", this.boundApplyInitTime_); this.one("canplay", this.boundApplyInitTime_); return; } this.techCall_("setCurrentTime", seconds); this.cache_.initTime = 0; return; } this.cache_.currentTime = this.techGet_("currentTime") || 0; return this.cache_.currentTime; }; _proto.applyInitTime_ = function applyInitTime_() { this.currentTime(this.cache_.initTime); }; _proto.duration = function duration5(seconds) { if (seconds === void 0) { return this.cache_.duration !== void 0 ? this.cache_.duration : NaN; } seconds = parseFloat(seconds); if (seconds < 0) { seconds = Infinity; } if (seconds !== this.cache_.duration) { this.cache_.duration = seconds; if (seconds === Infinity) { this.addClass("vjs-live"); } else { this.removeClass("vjs-live"); } if (!isNaN(seconds)) { this.trigger("durationchange"); } } }; _proto.remainingTime = function remainingTime() { return this.duration() - this.currentTime(); }; _proto.remainingTimeDisplay = function remainingTimeDisplay() { return Math.floor(this.duration()) - Math.floor(this.currentTime()); }; _proto.buffered = function buffered() { var buffered2 = this.techGet_("buffered"); if (!buffered2 || !buffered2.length) { buffered2 = createTimeRanges(0, 0); } return buffered2; }; _proto.bufferedPercent = function bufferedPercent$12() { return bufferedPercent(this.buffered(), this.duration()); }; _proto.bufferedEnd = function bufferedEnd() { var buffered = this.buffered(); var duration5 = this.duration(); var end = buffered.end(buffered.length - 1); if (end > duration5) { end = duration5; } return end; }; _proto.volume = function volume(percentAsDecimal) { var vol; if (percentAsDecimal !== void 0) { vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); this.cache_.volume = vol; this.techCall_("setVolume", vol); if (vol > 0) { this.lastVolume_(vol); } return; } vol = parseFloat(this.techGet_("volume")); return isNaN(vol) ? 1 : vol; }; _proto.muted = function muted(_muted) { if (_muted !== void 0) { this.techCall_("setMuted", _muted); return; } return this.techGet_("muted") || false; }; _proto.defaultMuted = function defaultMuted(_defaultMuted) { if (_defaultMuted !== void 0) { return this.techCall_("setDefaultMuted", _defaultMuted); } return this.techGet_("defaultMuted") || false; }; _proto.lastVolume_ = function lastVolume_(percentAsDecimal) { if (percentAsDecimal !== void 0 && percentAsDecimal !== 0) { this.cache_.lastVolume = percentAsDecimal; return; } return this.cache_.lastVolume; }; _proto.supportsFullScreen = function supportsFullScreen() { return this.techGet_("supportsFullScreen") || false; }; _proto.isFullscreen = function isFullscreen(isFS) { if (isFS !== void 0) { var oldValue = this.isFullscreen_; this.isFullscreen_ = Boolean(isFS); if (this.isFullscreen_ !== oldValue && this.fsApi_.prefixed) { this.trigger("fullscreenchange"); } this.toggleFullscreenClass_(); return; } return this.isFullscreen_; }; _proto.requestFullscreen = function requestFullscreen(fullscreenOptions) { var PromiseClass = this.options_.Promise || window_1.Promise; if (PromiseClass) { var self2 = this; return new PromiseClass(function(resolve2, reject2) { function offHandler() { self2.off("fullscreenerror", errorHandler); self2.off("fullscreenchange", changeHandler); } function changeHandler() { offHandler(); resolve2(); } function errorHandler(e, err) { offHandler(); reject2(err); } self2.one("fullscreenchange", changeHandler); self2.one("fullscreenerror", errorHandler); var promise = self2.requestFullscreenHelper_(fullscreenOptions); if (promise) { promise.then(offHandler, offHandler); promise.then(resolve2, reject2); } }); } return this.requestFullscreenHelper_(); }; _proto.requestFullscreenHelper_ = function requestFullscreenHelper_(fullscreenOptions) { var _this12 = this; var fsOptions; if (!this.fsApi_.prefixed) { fsOptions = this.options_.fullscreen && this.options_.fullscreen.options || {}; if (fullscreenOptions !== void 0) { fsOptions = fullscreenOptions; } } if (this.fsApi_.requestFullscreen) { var promise = this.el_[this.fsApi_.requestFullscreen](fsOptions); if (promise) { promise.then(function() { return _this12.isFullscreen(true); }, function() { return _this12.isFullscreen(false); }); } return promise; } else if (this.tech_.supportsFullScreen() && !this.options_.preferFullWindow === true) { this.techCall_("enterFullScreen"); } else { this.enterFullWindow(); } }; _proto.exitFullscreen = function exitFullscreen() { var PromiseClass = this.options_.Promise || window_1.Promise; if (PromiseClass) { var self2 = this; return new PromiseClass(function(resolve2, reject2) { function offHandler() { self2.off("fullscreenerror", errorHandler); self2.off("fullscreenchange", changeHandler); } function changeHandler() { offHandler(); resolve2(); } function errorHandler(e, err) { offHandler(); reject2(err); } self2.one("fullscreenchange", changeHandler); self2.one("fullscreenerror", errorHandler); var promise = self2.exitFullscreenHelper_(); if (promise) { promise.then(offHandler, offHandler); promise.then(resolve2, reject2); } }); } return this.exitFullscreenHelper_(); }; _proto.exitFullscreenHelper_ = function exitFullscreenHelper_() { var _this13 = this; if (this.fsApi_.requestFullscreen) { var promise = document_1[this.fsApi_.exitFullscreen](); if (promise) { silencePromise(promise.then(function() { return _this13.isFullscreen(false); })); } return promise; } else if (this.tech_.supportsFullScreen() && !this.options_.preferFullWindow === true) { this.techCall_("exitFullScreen"); } else { this.exitFullWindow(); } }; _proto.enterFullWindow = function enterFullWindow() { this.isFullscreen(true); this.isFullWindow = true; this.docOrigOverflow = document_1.documentElement.style.overflow; on(document_1, "keydown", this.boundFullWindowOnEscKey_); document_1.documentElement.style.overflow = "hidden"; addClass(document_1.body, "vjs-full-window"); this.trigger("enterFullWindow"); }; _proto.fullWindowOnEscKey = function fullWindowOnEscKey(event2) { if (keycode.isEventKey(event2, "Esc")) { if (this.isFullscreen() === true) { if (!this.isFullWindow) { this.exitFullscreen(); } else { this.exitFullWindow(); } } } }; _proto.exitFullWindow = function exitFullWindow() { this.isFullscreen(false); this.isFullWindow = false; off(document_1, "keydown", this.boundFullWindowOnEscKey_); document_1.documentElement.style.overflow = this.docOrigOverflow; removeClass(document_1.body, "vjs-full-window"); this.trigger("exitFullWindow"); }; _proto.disablePictureInPicture = function disablePictureInPicture(value) { if (value === void 0) { return this.techGet_("disablePictureInPicture"); } this.techCall_("setDisablePictureInPicture", value); this.options_.disablePictureInPicture = value; this.trigger("disablepictureinpicturechanged"); }; _proto.isInPictureInPicture = function isInPictureInPicture(isPiP) { if (isPiP !== void 0) { this.isInPictureInPicture_ = !!isPiP; this.togglePictureInPictureClass_(); return; } return !!this.isInPictureInPicture_; }; _proto.requestPictureInPicture = function requestPictureInPicture() { if ("pictureInPictureEnabled" in document_1 && this.disablePictureInPicture() === false) { return this.techGet_("requestPictureInPicture"); } }; _proto.exitPictureInPicture = function exitPictureInPicture() { if ("pictureInPictureEnabled" in document_1) { return document_1.exitPictureInPicture(); } }; _proto.handleKeyDown = function handleKeyDown(event2) { var userActions = this.options_.userActions; if (!userActions || !userActions.hotkeys) { return; } var excludeElement = function excludeElement2(el) { var tagName = el.tagName.toLowerCase(); if (el.isContentEditable) { return true; } var allowedInputTypes = ["button", "checkbox", "hidden", "radio", "reset", "submit"]; if (tagName === "input") { return allowedInputTypes.indexOf(el.type) === -1; } var excludedTags = ["textarea"]; return excludedTags.indexOf(tagName) !== -1; }; if (excludeElement(this.el_.ownerDocument.activeElement)) { return; } if (typeof userActions.hotkeys === "function") { userActions.hotkeys.call(this, event2); } else { this.handleHotkeys(event2); } }; _proto.handleHotkeys = function handleHotkeys(event2) { var hotkeys = this.options_.userActions ? this.options_.userActions.hotkeys : {}; var _hotkeys$fullscreenKe = hotkeys.fullscreenKey, fullscreenKey = _hotkeys$fullscreenKe === void 0 ? function(keydownEvent) { return keycode.isEventKey(keydownEvent, "f"); } : _hotkeys$fullscreenKe, _hotkeys$muteKey = hotkeys.muteKey, muteKey = _hotkeys$muteKey === void 0 ? function(keydownEvent) { return keycode.isEventKey(keydownEvent, "m"); } : _hotkeys$muteKey, _hotkeys$playPauseKey = hotkeys.playPauseKey, playPauseKey = _hotkeys$playPauseKey === void 0 ? function(keydownEvent) { return keycode.isEventKey(keydownEvent, "k") || keycode.isEventKey(keydownEvent, "Space"); } : _hotkeys$playPauseKey; if (fullscreenKey.call(this, event2)) { event2.preventDefault(); event2.stopPropagation(); var FSToggle = Component$1.getComponent("FullscreenToggle"); if (document_1[this.fsApi_.fullscreenEnabled] !== false) { FSToggle.prototype.handleClick.call(this, event2); } } else if (muteKey.call(this, event2)) { event2.preventDefault(); event2.stopPropagation(); var MuteToggle2 = Component$1.getComponent("MuteToggle"); MuteToggle2.prototype.handleClick.call(this, event2); } else if (playPauseKey.call(this, event2)) { event2.preventDefault(); event2.stopPropagation(); var PlayToggle2 = Component$1.getComponent("PlayToggle"); PlayToggle2.prototype.handleClick.call(this, event2); } }; _proto.canPlayType = function canPlayType3(type2) { var can; for (var i2 = 0, j = this.options_.techOrder; i2 < j.length; i2++) { var techName = j[i2]; var tech = Tech$1.getTech(techName); if (!tech) { tech = Component$1.getComponent(techName); } if (!tech) { log$1.error('The "' + techName + '" tech is undefined. Skipped browser support check for that tech.'); continue; } if (tech.isSupported()) { can = tech.canPlayType(type2); if (can) { return can; } } } return ""; }; _proto.selectSource = function selectSource(sources) { var _this14 = this; var techs = this.options_.techOrder.map(function(techName) { return [techName, Tech$1.getTech(techName)]; }).filter(function(_ref) { var techName = _ref[0], tech = _ref[1]; if (tech) { return tech.isSupported(); } log$1.error('The "' + techName + '" tech is undefined. Skipped browser support check for that tech.'); return false; }); var findFirstPassingTechSourcePair = function findFirstPassingTechSourcePair2(outerArray, innerArray, tester) { var found; outerArray.some(function(outerChoice) { return innerArray.some(function(innerChoice) { found = tester(outerChoice, innerChoice); if (found) { return true; } }); }); return found; }; var foundSourceAndTech; var flip = function flip2(fn2) { return function(a, b) { return fn2(b, a); }; }; var finder = function finder2(_ref2, source) { var techName = _ref2[0], tech = _ref2[1]; if (tech.canPlaySource(source, _this14.options_[techName.toLowerCase()])) { return { source, tech: techName }; } }; if (this.options_.sourceOrder) { foundSourceAndTech = findFirstPassingTechSourcePair(sources, techs, flip(finder)); } else { foundSourceAndTech = findFirstPassingTechSourcePair(techs, sources, finder); } return foundSourceAndTech || false; }; _proto.handleSrc_ = function handleSrc_(source, isRetry) { var _this15 = this; if (typeof source === "undefined") { return this.cache_.src || ""; } if (this.resetRetryOnError_) { this.resetRetryOnError_(); } var sources = filterSource(source); if (!sources.length) { this.setTimeout(function() { this.error({ code: 4, message: this.options_.notSupportedMessage }); }, 0); return; } this.changingSrc_ = true; if (!isRetry) { this.cache_.sources = sources; } this.updateSourceCaches_(sources[0]); setSource(this, sources[0], function(middlewareSource, mws) { _this15.middleware_ = mws; if (!isRetry) { _this15.cache_.sources = sources; } _this15.updateSourceCaches_(middlewareSource); var err = _this15.src_(middlewareSource); if (err) { if (sources.length > 1) { return _this15.handleSrc_(sources.slice(1)); } _this15.changingSrc_ = false; _this15.setTimeout(function() { this.error({ code: 4, message: this.options_.notSupportedMessage }); }, 0); _this15.triggerReady(); return; } setTech(mws, _this15.tech_); }); if (this.options_.retryOnError && sources.length > 1) { var retry = function retry2() { _this15.error(null); _this15.handleSrc_(sources.slice(1), true); }; var stopListeningForErrors = function stopListeningForErrors2() { _this15.off("error", retry); }; this.one("error", retry); this.one("playing", stopListeningForErrors); this.resetRetryOnError_ = function() { _this15.off("error", retry); _this15.off("playing", stopListeningForErrors); }; } }; _proto.src = function src(source) { return this.handleSrc_(source, false); }; _proto.src_ = function src_(source) { var _this16 = this; var sourceTech = this.selectSource([source]); if (!sourceTech) { return true; } if (!titleCaseEquals(sourceTech.tech, this.techName_)) { this.changingSrc_ = true; this.loadTech_(sourceTech.tech, sourceTech.source); this.tech_.ready(function() { _this16.changingSrc_ = false; }); return false; } this.ready(function() { if (this.tech_.constructor.prototype.hasOwnProperty("setSource")) { this.techCall_("setSource", source); } else { this.techCall_("src", source.src); } this.changingSrc_ = false; }, true); return false; }; _proto.load = function load() { this.techCall_("load"); }; _proto.reset = function reset3() { var _this17 = this; var PromiseClass = this.options_.Promise || window_1.Promise; if (this.paused() || !PromiseClass) { this.doReset_(); } else { var playPromise = this.play(); silencePromise(playPromise.then(function() { return _this17.doReset_(); })); } }; _proto.doReset_ = function doReset_() { if (this.tech_) { this.tech_.clearTracks("text"); } this.resetCache_(); this.poster(""); this.loadTech_(this.options_.techOrder[0], null); this.techCall_("reset"); this.resetControlBarUI_(); if (isEvented(this)) { this.trigger("playerreset"); } }; _proto.resetControlBarUI_ = function resetControlBarUI_() { this.resetProgressBar_(); this.resetPlaybackRate_(); this.resetVolumeBar_(); }; _proto.resetProgressBar_ = function resetProgressBar_() { this.currentTime(0); var _ref3 = this.controlBar || {}, durationDisplay = _ref3.durationDisplay, remainingTimeDisplay = _ref3.remainingTimeDisplay; if (durationDisplay) { durationDisplay.updateContent(); } if (remainingTimeDisplay) { remainingTimeDisplay.updateContent(); } }; _proto.resetPlaybackRate_ = function resetPlaybackRate_() { this.playbackRate(this.defaultPlaybackRate()); this.handleTechRateChange_(); }; _proto.resetVolumeBar_ = function resetVolumeBar_() { this.volume(1); this.trigger("volumechange"); }; _proto.currentSources = function currentSources() { var source = this.currentSource(); var sources = []; if (Object.keys(source).length !== 0) { sources.push(source); } return this.cache_.sources || sources; }; _proto.currentSource = function currentSource() { return this.cache_.source || {}; }; _proto.currentSrc = function currentSrc() { return this.currentSource() && this.currentSource().src || ""; }; _proto.currentType = function currentType() { return this.currentSource() && this.currentSource().type || ""; }; _proto.preload = function preload(value) { if (value !== void 0) { this.techCall_("setPreload", value); this.options_.preload = value; return; } return this.techGet_("preload"); }; _proto.autoplay = function autoplay(value) { if (value === void 0) { return this.options_.autoplay || false; } var techAutoplay; if (typeof value === "string" && /(any|play|muted)/.test(value) || value === true && this.options_.normalizeAutoplay) { this.options_.autoplay = value; this.manualAutoplay_(typeof value === "string" ? value : "play"); techAutoplay = false; } else if (!value) { this.options_.autoplay = false; } else { this.options_.autoplay = true; } techAutoplay = typeof techAutoplay === "undefined" ? this.options_.autoplay : techAutoplay; if (this.tech_) { this.techCall_("setAutoplay", techAutoplay); } }; _proto.playsinline = function playsinline(value) { if (value !== void 0) { this.techCall_("setPlaysinline", value); this.options_.playsinline = value; return this; } return this.techGet_("playsinline"); }; _proto.loop = function loop(value) { if (value !== void 0) { this.techCall_("setLoop", value); this.options_.loop = value; return; } return this.techGet_("loop"); }; _proto.poster = function poster(src) { if (src === void 0) { return this.poster_; } if (!src) { src = ""; } if (src === this.poster_) { return; } this.poster_ = src; this.techCall_("setPoster", src); this.isPosterFromTech_ = false; this.trigger("posterchange"); }; _proto.handleTechPosterChange_ = function handleTechPosterChange_() { if ((!this.poster_ || this.options_.techCanOverridePoster) && this.tech_ && this.tech_.poster) { var newPoster = this.tech_.poster() || ""; if (newPoster !== this.poster_) { this.poster_ = newPoster; this.isPosterFromTech_ = true; this.trigger("posterchange"); } } }; _proto.controls = function controls(bool) { if (bool === void 0) { return !!this.controls_; } bool = !!bool; if (this.controls_ === bool) { return; } this.controls_ = bool; if (this.usingNativeControls()) { this.techCall_("setControls", bool); } if (this.controls_) { this.removeClass("vjs-controls-disabled"); this.addClass("vjs-controls-enabled"); this.trigger("controlsenabled"); if (!this.usingNativeControls()) { this.addTechControlsListeners_(); } } else { this.removeClass("vjs-controls-enabled"); this.addClass("vjs-controls-disabled"); this.trigger("controlsdisabled"); if (!this.usingNativeControls()) { this.removeTechControlsListeners_(); } } }; _proto.usingNativeControls = function usingNativeControls(bool) { if (bool === void 0) { return !!this.usingNativeControls_; } bool = !!bool; if (this.usingNativeControls_ === bool) { return; } this.usingNativeControls_ = bool; if (this.usingNativeControls_) { this.addClass("vjs-using-native-controls"); this.trigger("usingnativecontrols"); } else { this.removeClass("vjs-using-native-controls"); this.trigger("usingcustomcontrols"); } }; _proto.error = function error(err) { var _this18 = this; if (err === void 0) { return this.error_ || null; } hooks("beforeerror").forEach(function(hookFunction) { var newErr = hookFunction(_this18, err); if (!(isObject2(newErr) && !Array.isArray(newErr) || typeof newErr === "string" || typeof newErr === "number" || newErr === null)) { _this18.log.error("please return a value that MediaError expects in beforeerror hooks"); return; } err = newErr; }); if (this.options_.suppressNotSupportedError && err && err.code === 4) { var triggerSuppressedError = function triggerSuppressedError2() { this.error(err); }; this.options_.suppressNotSupportedError = false; this.any(["click", "touchstart"], triggerSuppressedError); this.one("loadstart", function() { this.off(["click", "touchstart"], triggerSuppressedError); }); return; } if (err === null) { this.error_ = err; this.removeClass("vjs-error"); if (this.errorDisplay) { this.errorDisplay.close(); } return; } this.error_ = new MediaError(err); this.addClass("vjs-error"); log$1.error("(CODE:" + this.error_.code + " " + MediaError.errorTypes[this.error_.code] + ")", this.error_.message, this.error_); this.trigger("error"); hooks("error").forEach(function(hookFunction) { return hookFunction(_this18, _this18.error_); }); return; }; _proto.reportUserActivity = function reportUserActivity(event2) { this.userActivity_ = true; }; _proto.userActive = function userActive(bool) { if (bool === void 0) { return this.userActive_; } bool = !!bool; if (bool === this.userActive_) { return; } this.userActive_ = bool; if (this.userActive_) { this.userActivity_ = true; this.removeClass("vjs-user-inactive"); this.addClass("vjs-user-active"); this.trigger("useractive"); return; } if (this.tech_) { this.tech_.one("mousemove", function(e) { e.stopPropagation(); e.preventDefault(); }); } this.userActivity_ = false; this.removeClass("vjs-user-active"); this.addClass("vjs-user-inactive"); this.trigger("userinactive"); }; _proto.listenForUserActivity_ = function listenForUserActivity_() { var mouseInProgress; var lastMoveX; var lastMoveY; var handleActivity = bind(this, this.reportUserActivity); var handleMouseMove = function handleMouseMove2(e) { if (e.screenX !== lastMoveX || e.screenY !== lastMoveY) { lastMoveX = e.screenX; lastMoveY = e.screenY; handleActivity(); } }; var handleMouseDown = function handleMouseDown2() { handleActivity(); this.clearInterval(mouseInProgress); mouseInProgress = this.setInterval(handleActivity, 250); }; var handleMouseUpAndMouseLeave = function handleMouseUpAndMouseLeave2(event2) { handleActivity(); this.clearInterval(mouseInProgress); }; this.on("mousedown", handleMouseDown); this.on("mousemove", handleMouseMove); this.on("mouseup", handleMouseUpAndMouseLeave); this.on("mouseleave", handleMouseUpAndMouseLeave); var controlBar = this.getChild("controlBar"); if (controlBar && !IS_IOS && !IS_ANDROID) { controlBar.on("mouseenter", function(event2) { if (this.player().options_.inactivityTimeout !== 0) { this.player().cache_.inactivityTimeout = this.player().options_.inactivityTimeout; } this.player().options_.inactivityTimeout = 0; }); controlBar.on("mouseleave", function(event2) { this.player().options_.inactivityTimeout = this.player().cache_.inactivityTimeout; }); } this.on("keydown", handleActivity); this.on("keyup", handleActivity); var inactivityTimeout; this.setInterval(function() { if (!this.userActivity_) { return; } this.userActivity_ = false; this.userActive(true); this.clearTimeout(inactivityTimeout); var timeout = this.options_.inactivityTimeout; if (timeout <= 0) { return; } inactivityTimeout = this.setTimeout(function() { if (!this.userActivity_) { this.userActive(false); } }, timeout); }, 250); }; _proto.playbackRate = function playbackRate(rate) { if (rate !== void 0) { this.techCall_("setPlaybackRate", rate); return; } if (this.tech_ && this.tech_.featuresPlaybackRate) { return this.cache_.lastPlaybackRate || this.techGet_("playbackRate"); } return 1; }; _proto.defaultPlaybackRate = function defaultPlaybackRate(rate) { if (rate !== void 0) { return this.techCall_("setDefaultPlaybackRate", rate); } if (this.tech_ && this.tech_.featuresPlaybackRate) { return this.techGet_("defaultPlaybackRate"); } return 1; }; _proto.isAudio = function isAudio(bool) { if (bool !== void 0) { this.isAudio_ = !!bool; return; } return !!this.isAudio_; }; _proto.enableAudioOnlyUI_ = function enableAudioOnlyUI_() { var _this19 = this; this.addClass("vjs-audio-only-mode"); var playerChildren = this.children(); var controlBar = this.getChild("ControlBar"); var controlBarHeight = controlBar && controlBar.currentHeight(); playerChildren.forEach(function(child) { if (child === controlBar) { return; } if (child.el_ && !child.hasClass("vjs-hidden")) { child.hide(); _this19.audioOnlyCache_.hiddenChildren.push(child); } }); this.audioOnlyCache_.playerHeight = this.currentHeight(); this.height(controlBarHeight); this.trigger("audioonlymodechange"); }; _proto.disableAudioOnlyUI_ = function disableAudioOnlyUI_() { this.removeClass("vjs-audio-only-mode"); this.audioOnlyCache_.hiddenChildren.forEach(function(child) { return child.show(); }); this.height(this.audioOnlyCache_.playerHeight); this.trigger("audioonlymodechange"); }; _proto.audioOnlyMode = function audioOnlyMode(value) { var _this20 = this; if (typeof value !== "boolean" || value === this.audioOnlyMode_) { return this.audioOnlyMode_; } this.audioOnlyMode_ = value; var PromiseClass = this.options_.Promise || window_1.Promise; if (PromiseClass) { if (value) { var exitPromises = []; if (this.isInPictureInPicture()) { exitPromises.push(this.exitPictureInPicture()); } if (this.isFullscreen()) { exitPromises.push(this.exitFullscreen()); } if (this.audioPosterMode()) { exitPromises.push(this.audioPosterMode(false)); } return PromiseClass.all(exitPromises).then(function() { return _this20.enableAudioOnlyUI_(); }); } return PromiseClass.resolve().then(function() { return _this20.disableAudioOnlyUI_(); }); } if (value) { if (this.isInPictureInPicture()) { this.exitPictureInPicture(); } if (this.isFullscreen()) { this.exitFullscreen(); } this.enableAudioOnlyUI_(); } else { this.disableAudioOnlyUI_(); } }; _proto.enablePosterModeUI_ = function enablePosterModeUI_() { var tech = this.tech_ && this.tech_; tech.hide(); this.addClass("vjs-audio-poster-mode"); this.trigger("audiopostermodechange"); }; _proto.disablePosterModeUI_ = function disablePosterModeUI_() { var tech = this.tech_ && this.tech_; tech.show(); this.removeClass("vjs-audio-poster-mode"); this.trigger("audiopostermodechange"); }; _proto.audioPosterMode = function audioPosterMode(value) { var _this21 = this; if (typeof value !== "boolean" || value === this.audioPosterMode_) { return this.audioPosterMode_; } this.audioPosterMode_ = value; var PromiseClass = this.options_.Promise || window_1.Promise; if (PromiseClass) { if (value) { if (this.audioOnlyMode()) { var audioOnlyModePromise = this.audioOnlyMode(false); return audioOnlyModePromise.then(function() { _this21.enablePosterModeUI_(); }); } return PromiseClass.resolve().then(function() { _this21.enablePosterModeUI_(); }); } return PromiseClass.resolve().then(function() { _this21.disablePosterModeUI_(); }); } if (value) { if (this.audioOnlyMode()) { this.audioOnlyMode(false); } this.enablePosterModeUI_(); return; } this.disablePosterModeUI_(); }; _proto.addTextTrack = function addTextTrack(kind, label2, language) { if (this.tech_) { return this.tech_.addTextTrack(kind, label2, language); } }; _proto.addRemoteTextTrack = function addRemoteTextTrack(options2, manualCleanup) { if (this.tech_) { return this.tech_.addRemoteTextTrack(options2, manualCleanup); } }; _proto.removeRemoteTextTrack = function removeRemoteTextTrack(obj) { if (obj === void 0) { obj = {}; } var _obj = obj, track = _obj.track; if (!track) { track = obj; } if (this.tech_) { return this.tech_.removeRemoteTextTrack(track); } }; _proto.getVideoPlaybackQuality = function getVideoPlaybackQuality() { return this.techGet_("getVideoPlaybackQuality"); }; _proto.videoWidth = function videoWidth() { return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0; }; _proto.videoHeight = function videoHeight() { return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0; }; _proto.language = function language(code) { if (code === void 0) { return this.language_; } if (this.language_ !== String(code).toLowerCase()) { this.language_ = String(code).toLowerCase(); if (isEvented(this)) { this.trigger("languagechange"); } } }; _proto.languages = function languages() { return mergeOptions$3(Player2.prototype.options_.languages, this.languages_); }; _proto.toJSON = function toJSON() { var options2 = mergeOptions$3(this.options_); var tracks = options2.tracks; options2.tracks = []; for (var i2 = 0; i2 < tracks.length; i2++) { var track = tracks[i2]; track = mergeOptions$3(track); track.player = void 0; options2.tracks[i2] = track; } return options2; }; _proto.createModal = function createModal(content, options2) { var _this22 = this; options2 = options2 || {}; options2.content = content || ""; var modal = new ModalDialog(this, options2); this.addChild(modal); modal.on("dispose", function() { _this22.removeChild(modal); }); modal.open(); return modal; }; _proto.updateCurrentBreakpoint_ = function updateCurrentBreakpoint_() { if (!this.responsive()) { return; } var currentBreakpoint = this.currentBreakpoint(); var currentWidth = this.currentWidth(); for (var i2 = 0; i2 < BREAKPOINT_ORDER.length; i2++) { var candidateBreakpoint = BREAKPOINT_ORDER[i2]; var maxWidth = this.breakpoints_[candidateBreakpoint]; if (currentWidth <= maxWidth) { if (currentBreakpoint === candidateBreakpoint) { return; } if (currentBreakpoint) { this.removeClass(BREAKPOINT_CLASSES[currentBreakpoint]); } this.addClass(BREAKPOINT_CLASSES[candidateBreakpoint]); this.breakpoint_ = candidateBreakpoint; break; } } }; _proto.removeCurrentBreakpoint_ = function removeCurrentBreakpoint_() { var className = this.currentBreakpointClass(); this.breakpoint_ = ""; if (className) { this.removeClass(className); } }; _proto.breakpoints = function breakpoints(_breakpoints) { if (_breakpoints === void 0) { return assign(this.breakpoints_); } this.breakpoint_ = ""; this.breakpoints_ = assign({}, DEFAULT_BREAKPOINTS, _breakpoints); this.updateCurrentBreakpoint_(); return assign(this.breakpoints_); }; _proto.responsive = function responsive(value) { if (value === void 0) { return this.responsive_; } value = Boolean(value); var current = this.responsive_; if (value === current) { return; } this.responsive_ = value; if (value) { this.on("playerresize", this.boundUpdateCurrentBreakpoint_); this.updateCurrentBreakpoint_(); } else { this.off("playerresize", this.boundUpdateCurrentBreakpoint_); this.removeCurrentBreakpoint_(); } return value; }; _proto.currentBreakpoint = function currentBreakpoint() { return this.breakpoint_; }; _proto.currentBreakpointClass = function currentBreakpointClass() { return BREAKPOINT_CLASSES[this.breakpoint_] || ""; }; _proto.loadMedia = function loadMedia(media, ready) { var _this23 = this; if (!media || typeof media !== "object") { return; } this.reset(); this.cache_.media = mergeOptions$3(media); var _this$cache_$media = this.cache_.media, artwork = _this$cache_$media.artwork, poster = _this$cache_$media.poster, src = _this$cache_$media.src, textTracks = _this$cache_$media.textTracks; if (!artwork && poster) { this.cache_.media.artwork = [{ src: poster, type: getMimetype(poster) }]; } if (src) { this.src(src); } if (poster) { this.poster(poster); } if (Array.isArray(textTracks)) { textTracks.forEach(function(tt2) { return _this23.addRemoteTextTrack(tt2, false); }); } this.ready(ready); }; _proto.getMedia = function getMedia() { if (!this.cache_.media) { var poster = this.poster(); var src = this.currentSources(); var textTracks = Array.prototype.map.call(this.remoteTextTracks(), function(tt2) { return { kind: tt2.kind, label: tt2.label, language: tt2.language, src: tt2.src }; }); var media = { src, textTracks }; if (poster) { media.poster = poster; media.artwork = [{ src: media.poster, type: getMimetype(media.poster) }]; } return media; } return mergeOptions$3(this.cache_.media); }; Player2.getTagSettings = function getTagSettings(tag) { var baseOptions = { sources: [], tracks: [] }; var tagOptions = getAttributes(tag); var dataSetup = tagOptions["data-setup"]; if (hasClass(tag, "vjs-fill")) { tagOptions.fill = true; } if (hasClass(tag, "vjs-fluid")) { tagOptions.fluid = true; } if (dataSetup !== null) { var _safeParseTuple = tuple(dataSetup || "{}"), err = _safeParseTuple[0], data = _safeParseTuple[1]; if (err) { log$1.error(err); } assign(tagOptions, data); } assign(baseOptions, tagOptions); if (tag.hasChildNodes()) { var children = tag.childNodes; for (var i2 = 0, j = children.length; i2 < j; i2++) { var child = children[i2]; var childName = child.nodeName.toLowerCase(); if (childName === "source") { baseOptions.sources.push(getAttributes(child)); } else if (childName === "track") { baseOptions.tracks.push(getAttributes(child)); } } } return baseOptions; }; _proto.flexNotSupported_ = function flexNotSupported_() { var elem = document_1.createElement("i"); return !("flexBasis" in elem.style || "webkitFlexBasis" in elem.style || "mozFlexBasis" in elem.style || "msFlexBasis" in elem.style || "msFlexOrder" in elem.style); }; _proto.debug = function debug(enabled) { if (enabled === void 0) { return this.debugEnabled_; } if (enabled) { this.trigger("debugon"); this.previousLogLevel_ = this.log.level; this.log.level("debug"); this.debugEnabled_ = true; } else { this.trigger("debugoff"); this.log.level(this.previousLogLevel_); this.previousLogLevel_ = void 0; this.debugEnabled_ = false; } }; _proto.playbackRates = function playbackRates(newRates) { if (newRates === void 0) { return this.cache_.playbackRates; } if (!Array.isArray(newRates)) { return; } if (!newRates.every(function(rate) { return typeof rate === "number"; })) { return; } this.cache_.playbackRates = newRates; this.trigger("playbackrateschange"); }; return Player2; }(Component$1); ALL.names.forEach(function(name) { var props = ALL[name]; Player.prototype[props.getterName] = function() { if (this.tech_) { return this.tech_[props.getterName](); } this[props.privateName] = this[props.privateName] || new props.ListClass(); return this[props.privateName]; }; }); Player.prototype.crossorigin = Player.prototype.crossOrigin; Player.players = {}; var navigator$2 = window_1.navigator; Player.prototype.options_ = { techOrder: Tech$1.defaultTechOrder_, html5: {}, inactivityTimeout: 2e3, playbackRates: [], liveui: false, children: ["mediaLoader", "posterImage", "textTrackDisplay", "loadingSpinner", "bigPlayButton", "liveTracker", "controlBar", "errorDisplay", "textTrackSettings", "resizeManager"], language: navigator$2 && (navigator$2.languages && navigator$2.languages[0] || navigator$2.userLanguage || navigator$2.language) || "en", languages: {}, notSupportedMessage: "No compatible source was found for this media.", normalizeAutoplay: false, fullscreen: { options: { navigationUI: "hide" } }, breakpoints: {}, responsive: false, audioOnlyMode: false, audioPosterMode: false }; [ "ended", "seeking", "seekable", "networkState", "readyState" ].forEach(function(fn2) { Player.prototype[fn2] = function() { return this.techGet_(fn2); }; }); TECH_EVENTS_RETRIGGER.forEach(function(event2) { Player.prototype["handleTech" + toTitleCase$1(event2) + "_"] = function() { return this.trigger(event2); }; }); Component$1.registerComponent("Player", Player); var BASE_PLUGIN_NAME = "plugin"; var PLUGIN_CACHE_KEY = "activePlugins_"; var pluginStorage = {}; var pluginExists = function pluginExists2(name) { return pluginStorage.hasOwnProperty(name); }; var getPlugin = function getPlugin2(name) { return pluginExists(name) ? pluginStorage[name] : void 0; }; var markPluginAsActive = function markPluginAsActive2(player, name) { player[PLUGIN_CACHE_KEY] = player[PLUGIN_CACHE_KEY] || {}; player[PLUGIN_CACHE_KEY][name] = true; }; var triggerSetupEvent = function triggerSetupEvent2(player, hash, before) { var eventName = (before ? "before" : "") + "pluginsetup"; player.trigger(eventName, hash); player.trigger(eventName + ":" + hash.name, hash); }; var createBasicPlugin = function createBasicPlugin2(name, plugin) { var basicPluginWrapper = function basicPluginWrapper2() { triggerSetupEvent(this, { name, plugin, instance: null }, true); var instance = plugin.apply(this, arguments); markPluginAsActive(this, name); triggerSetupEvent(this, { name, plugin, instance }); return instance; }; Object.keys(plugin).forEach(function(prop) { basicPluginWrapper[prop] = plugin[prop]; }); return basicPluginWrapper; }; var createPluginFactory = function createPluginFactory2(name, PluginSubClass) { PluginSubClass.prototype.name = name; return function() { triggerSetupEvent(this, { name, plugin: PluginSubClass, instance: null }, true); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var instance = _construct(PluginSubClass, [this].concat(args)); this[name] = function() { return instance; }; triggerSetupEvent(this, instance.getEventHash()); return instance; }; }; var Plugin = /* @__PURE__ */ function() { function Plugin2(player) { if (this.constructor === Plugin2) { throw new Error("Plugin must be sub-classed; not directly instantiated."); } this.player = player; if (!this.log) { this.log = this.player.log.createLogger(this.name); } evented(this); delete this.trigger; stateful(this, this.constructor.defaultState); markPluginAsActive(player, this.name); this.dispose = this.dispose.bind(this); player.on("dispose", this.dispose); } var _proto = Plugin2.prototype; _proto.version = function version2() { return this.constructor.VERSION; }; _proto.getEventHash = function getEventHash(hash) { if (hash === void 0) { hash = {}; } hash.name = this.name; hash.plugin = this.constructor; hash.instance = this; return hash; }; _proto.trigger = function trigger$13(event2, hash) { if (hash === void 0) { hash = {}; } return trigger(this.eventBusEl_, event2, this.getEventHash(hash)); }; _proto.handleStateChanged = function handleStateChanged(e) { }; _proto.dispose = function dispose() { var name = this.name, player = this.player; this.trigger("dispose"); this.off(); player.off("dispose", this.dispose); player[PLUGIN_CACHE_KEY][name] = false; this.player = this.state = null; player[name] = createPluginFactory(name, pluginStorage[name]); }; Plugin2.isBasic = function isBasic(plugin) { var p = typeof plugin === "string" ? getPlugin(plugin) : plugin; return typeof p === "function" && !Plugin2.prototype.isPrototypeOf(p.prototype); }; Plugin2.registerPlugin = function registerPlugin(name, plugin) { if (typeof name !== "string") { throw new Error('Illegal plugin name, "' + name + '", must be a string, was ' + typeof name + "."); } if (pluginExists(name)) { log$1.warn('A plugin named "' + name + '" already exists. You may want to avoid re-registering plugins!'); } else if (Player.prototype.hasOwnProperty(name)) { throw new Error('Illegal plugin name, "' + name + '", cannot share a name with an existing player method!'); } if (typeof plugin !== "function") { throw new Error('Illegal plugin for "' + name + '", must be a function, was ' + typeof plugin + "."); } pluginStorage[name] = plugin; if (name !== BASE_PLUGIN_NAME) { if (Plugin2.isBasic(plugin)) { Player.prototype[name] = createBasicPlugin(name, plugin); } else { Player.prototype[name] = createPluginFactory(name, plugin); } } return plugin; }; Plugin2.deregisterPlugin = function deregisterPlugin(name) { if (name === BASE_PLUGIN_NAME) { throw new Error("Cannot de-register base plugin."); } if (pluginExists(name)) { delete pluginStorage[name]; delete Player.prototype[name]; } }; Plugin2.getPlugins = function getPlugins(names2) { if (names2 === void 0) { names2 = Object.keys(pluginStorage); } var result; names2.forEach(function(name) { var plugin = getPlugin(name); if (plugin) { result = result || {}; result[name] = plugin; } }); return result; }; Plugin2.getPluginVersion = function getPluginVersion(name) { var plugin = getPlugin(name); return plugin && plugin.VERSION || ""; }; return Plugin2; }(); Plugin.getPlugin = getPlugin; Plugin.BASE_PLUGIN_NAME = BASE_PLUGIN_NAME; Plugin.registerPlugin(BASE_PLUGIN_NAME, Plugin); Player.prototype.usingPlugin = function(name) { return !!this[PLUGIN_CACHE_KEY] && this[PLUGIN_CACHE_KEY][name] === true; }; Player.prototype.hasPlugin = function(name) { return !!pluginExists(name); }; var hasLogged = false; var extend = function extend2(superClass, subClassMethods) { if (subClassMethods === void 0) { subClassMethods = {}; } if (!hasLogged) { log$1.warn("videojs.extend is deprecated as of Video.js 7.22.0 and will be removed in Video.js 8.0.0"); hasLogged = true; } var subClass = function subClass2() { superClass.apply(this, arguments); }; var methods = {}; if (typeof subClassMethods === "object") { if (subClassMethods.constructor !== Object.prototype.constructor) { subClass = subClassMethods.constructor; } methods = subClassMethods; } else if (typeof subClassMethods === "function") { subClass = subClassMethods; } _inherits(subClass, superClass); if (superClass) { subClass.super_ = superClass; } for (var name in methods) { if (methods.hasOwnProperty(name)) { subClass.prototype[name] = methods[name]; } } return subClass; }; var normalizeId = function normalizeId2(id) { return id.indexOf("#") === 0 ? id.slice(1) : id; }; function videojs(id, options2, ready) { var player = videojs.getPlayer(id); if (player) { if (options2) { log$1.warn('Player "' + id + '" is already initialised. Options will not be applied.'); } if (ready) { player.ready(ready); } return player; } var el = typeof id === "string" ? $("#" + normalizeId(id)) : id; if (!isEl(el)) { throw new TypeError("The element or ID supplied is not valid. (videojs)"); } if (!el.ownerDocument.defaultView || !el.ownerDocument.body.contains(el)) { log$1.warn("The element supplied is not included in the DOM"); } options2 = options2 || {}; if (options2.restoreEl === true) { options2.restoreEl = (el.parentNode && el.parentNode.hasAttribute("data-vjs-player") ? el.parentNode : el).cloneNode(true); } hooks("beforesetup").forEach(function(hookFunction) { var opts = hookFunction(el, mergeOptions$3(options2)); if (!isObject2(opts) || Array.isArray(opts)) { log$1.error("please return an object in beforesetup hooks"); return; } options2 = mergeOptions$3(options2, opts); }); var PlayerComponent = Component$1.getComponent("Player"); player = new PlayerComponent(el, options2, ready); hooks("setup").forEach(function(hookFunction) { return hookFunction(player); }); return player; } videojs.hooks_ = hooks_; videojs.hooks = hooks; videojs.hook = hook; videojs.hookOnce = hookOnce; videojs.removeHook = removeHook; if (window_1.VIDEOJS_NO_DYNAMIC_STYLE !== true && isReal()) { var style = $(".vjs-styles-defaults"); if (!style) { style = createStyleElement("vjs-styles-defaults"); var head = $("head"); if (head) { head.insertBefore(style, head.firstChild); } setTextContent(style, "\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid:not(.vjs-audio-only-mode) {\n padding-top: 56.25%\n }\n "); } } autoSetupTimeout(1, videojs); videojs.VERSION = version$5; videojs.options = Player.prototype.options_; videojs.getPlayers = function() { return Player.players; }; videojs.getPlayer = function(id) { var players = Player.players; var tag; if (typeof id === "string") { var nId = normalizeId(id); var player = players[nId]; if (player) { return player; } tag = $("#" + nId); } else { tag = id; } if (isEl(tag)) { var _tag = tag, _player = _tag.player, playerId = _tag.playerId; if (_player || players[playerId]) { return _player || players[playerId]; } } }; videojs.getAllPlayers = function() { return Object.keys(Player.players).map(function(k) { return Player.players[k]; }).filter(Boolean); }; videojs.players = Player.players; videojs.getComponent = Component$1.getComponent; videojs.registerComponent = function(name, comp) { if (Tech$1.isTech(comp)) { log$1.warn("The " + name + " tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)"); } Component$1.registerComponent.call(Component$1, name, comp); }; videojs.getTech = Tech$1.getTech; videojs.registerTech = Tech$1.registerTech; videojs.use = use; Object.defineProperty(videojs, "middleware", { value: {}, writeable: false, enumerable: true }); Object.defineProperty(videojs.middleware, "TERMINATOR", { value: TERMINATOR, writeable: false, enumerable: true }); videojs.browser = browser; videojs.TOUCH_ENABLED = TOUCH_ENABLED; videojs.extend = extend; videojs.mergeOptions = mergeOptions$3; videojs.bind = bind; videojs.registerPlugin = Plugin.registerPlugin; videojs.deregisterPlugin = Plugin.deregisterPlugin; videojs.plugin = function(name, plugin) { log$1.warn("videojs.plugin() is deprecated; use videojs.registerPlugin() instead"); return Plugin.registerPlugin(name, plugin); }; videojs.getPlugins = Plugin.getPlugins; videojs.getPlugin = Plugin.getPlugin; videojs.getPluginVersion = Plugin.getPluginVersion; videojs.addLanguage = function(code, data) { var _mergeOptions; code = ("" + code).toLowerCase(); videojs.options.languages = mergeOptions$3(videojs.options.languages, (_mergeOptions = {}, _mergeOptions[code] = data, _mergeOptions)); return videojs.options.languages[code]; }; videojs.log = log$1; videojs.createLogger = createLogger; videojs.createTimeRange = videojs.createTimeRanges = createTimeRanges; videojs.formatTime = formatTime; videojs.setFormatTime = setFormatTime; videojs.resetFormatTime = resetFormatTime; videojs.parseUrl = parseUrl; videojs.isCrossOrigin = isCrossOrigin; videojs.EventTarget = EventTarget$2; videojs.on = on; videojs.one = one; videojs.off = off; videojs.trigger = trigger; videojs.xhr = XHR; videojs.TextTrack = TextTrack; videojs.AudioTrack = AudioTrack; videojs.VideoTrack = VideoTrack; ["isEl", "isTextNode", "createEl", "hasClass", "addClass", "removeClass", "toggleClass", "setAttributes", "getAttributes", "emptyEl", "appendContent", "insertContent"].forEach(function(k) { videojs[k] = function() { log$1.warn("videojs." + k + "() is deprecated; use videojs.dom." + k + "() instead"); return Dom$1[k].apply(null, arguments); }; }); videojs.computedStyle = computedStyle; videojs.dom = Dom$1; videojs.url = Url$1; videojs.defineLazyProperty = defineLazyProperty; videojs.addLanguage("en", { "Non-Fullscreen": "Exit Fullscreen" }); /*! @name @videojs/http-streaming @version 2.16.2 @license Apache-2.0 */ var resolveUrl4 = resolveUrl$1; var resolveManifestRedirect = function resolveManifestRedirect2(handleManifestRedirect, url, req) { if (handleManifestRedirect && req && req.responseURL && url !== req.responseURL) { return req.responseURL; } return url; }; var logger = function logger2(source) { if (videojs.log.debug) { return videojs.log.debug.bind(videojs, "VHS:", source + " >"); } return function() { }; }; var TIME_FUDGE_FACTOR = 1 / 30; var SAFE_TIME_DELTA = TIME_FUDGE_FACTOR * 3; var filterRanges = function filterRanges2(timeRanges, predicate) { var results = []; var i2; if (timeRanges && timeRanges.length) { for (i2 = 0; i2 < timeRanges.length; i2++) { if (predicate(timeRanges.start(i2), timeRanges.end(i2))) { results.push([timeRanges.start(i2), timeRanges.end(i2)]); } } } return videojs.createTimeRanges(results); }; var findRange = function findRange2(buffered, time) { return filterRanges(buffered, function(start2, end) { return start2 - SAFE_TIME_DELTA <= time && end + SAFE_TIME_DELTA >= time; }); }; var findNextRange = function findNextRange2(timeRanges, time) { return filterRanges(timeRanges, function(start2) { return start2 - TIME_FUDGE_FACTOR >= time; }); }; var findGaps = function findGaps2(buffered) { if (buffered.length < 2) { return videojs.createTimeRanges(); } var ranges = []; for (var i2 = 1; i2 < buffered.length; i2++) { var start2 = buffered.end(i2 - 1); var end = buffered.start(i2); ranges.push([start2, end]); } return videojs.createTimeRanges(ranges); }; var bufferIntersection = function bufferIntersection2(bufferA, bufferB) { var start2 = null; var end = null; var arity = 0; var extents = []; var ranges = []; if (!bufferA || !bufferA.length || !bufferB || !bufferB.length) { return videojs.createTimeRange(); } var count = bufferA.length; while (count--) { extents.push({ time: bufferA.start(count), type: "start" }); extents.push({ time: bufferA.end(count), type: "end" }); } count = bufferB.length; while (count--) { extents.push({ time: bufferB.start(count), type: "start" }); extents.push({ time: bufferB.end(count), type: "end" }); } extents.sort(function(a, b) { return a.time - b.time; }); for (count = 0; count < extents.length; count++) { if (extents[count].type === "start") { arity++; if (arity === 2) { start2 = extents[count].time; } } else if (extents[count].type === "end") { arity--; if (arity === 1) { end = extents[count].time; } } if (start2 !== null && end !== null) { ranges.push([start2, end]); start2 = null; end = null; } } return videojs.createTimeRanges(ranges); }; var printableRange = function printableRange2(range3) { var strArr = []; if (!range3 || !range3.length) { return ""; } for (var i2 = 0; i2 < range3.length; i2++) { strArr.push(range3.start(i2) + " => " + range3.end(i2)); } return strArr.join(", "); }; var timeUntilRebuffer = function timeUntilRebuffer2(buffered, currentTime, playbackRate) { if (playbackRate === void 0) { playbackRate = 1; } var bufferedEnd = buffered.length ? buffered.end(buffered.length - 1) : 0; return (bufferedEnd - currentTime) / playbackRate; }; var timeRangesToArray = function timeRangesToArray2(timeRanges) { var timeRangesList = []; for (var i2 = 0; i2 < timeRanges.length; i2++) { timeRangesList.push({ start: timeRanges.start(i2), end: timeRanges.end(i2) }); } return timeRangesList; }; var isRangeDifferent = function isRangeDifferent2(a, b) { if (a === b) { return false; } if (!a && b || !b && a) { return true; } if (a.length !== b.length) { return true; } for (var i2 = 0; i2 < a.length; i2++) { if (a.start(i2) !== b.start(i2) || a.end(i2) !== b.end(i2)) { return true; } } return false; }; var lastBufferedEnd = function lastBufferedEnd2(a) { if (!a || !a.length || !a.end) { return; } return a.end(a.length - 1); }; var timeAheadOf = function timeAheadOf2(range3, startTime) { var time = 0; if (!range3 || !range3.length) { return time; } for (var i2 = 0; i2 < range3.length; i2++) { var start2 = range3.start(i2); var end = range3.end(i2); if (startTime > end) { continue; } if (startTime > start2 && startTime <= end) { time += end - startTime; continue; } time += end - start2; } return time; }; var createTimeRange$1 = videojs.createTimeRange; var segmentDurationWithParts = function segmentDurationWithParts2(playlist, segment) { if (!segment.preload) { return segment.duration; } var result = 0; (segment.parts || []).forEach(function(p) { result += p.duration; }); (segment.preloadHints || []).forEach(function(p) { if (p.type === "PART") { result += playlist.partTargetDuration; } }); return result; }; var getPartsAndSegments = function getPartsAndSegments2(playlist) { return (playlist.segments || []).reduce(function(acc, segment, si) { if (segment.parts) { segment.parts.forEach(function(part, pi) { acc.push({ duration: part.duration, segmentIndex: si, partIndex: pi, part, segment }); }); } else { acc.push({ duration: segment.duration, segmentIndex: si, partIndex: null, segment, part: null }); } return acc; }, []); }; var getLastParts = function getLastParts2(media) { var lastSegment = media.segments && media.segments.length && media.segments[media.segments.length - 1]; return lastSegment && lastSegment.parts || []; }; var getKnownPartCount = function getKnownPartCount2(_ref) { var preloadSegment = _ref.preloadSegment; if (!preloadSegment) { return; } var parts = preloadSegment.parts, preloadHints = preloadSegment.preloadHints; var partCount = (preloadHints || []).reduce(function(count, hint) { return count + (hint.type === "PART" ? 1 : 0); }, 0); partCount += parts && parts.length ? parts.length : 0; return partCount; }; var liveEdgeDelay = function liveEdgeDelay2(master, media) { if (media.endList) { return 0; } if (master && master.suggestedPresentationDelay) { return master.suggestedPresentationDelay; } var hasParts = getLastParts(media).length > 0; if (hasParts && media.serverControl && media.serverControl.partHoldBack) { return media.serverControl.partHoldBack; } else if (hasParts && media.partTargetDuration) { return media.partTargetDuration * 3; } else if (media.serverControl && media.serverControl.holdBack) { return media.serverControl.holdBack; } else if (media.targetDuration) { return media.targetDuration * 3; } return 0; }; var backwardDuration = function backwardDuration2(playlist, endSequence) { var result = 0; var i2 = endSequence - playlist.mediaSequence; var segment = playlist.segments[i2]; if (segment) { if (typeof segment.start !== "undefined") { return { result: segment.start, precise: true }; } if (typeof segment.end !== "undefined") { return { result: segment.end - segment.duration, precise: true }; } } while (i2--) { segment = playlist.segments[i2]; if (typeof segment.end !== "undefined") { return { result: result + segment.end, precise: true }; } result += segmentDurationWithParts(playlist, segment); if (typeof segment.start !== "undefined") { return { result: result + segment.start, precise: true }; } } return { result, precise: false }; }; var forwardDuration = function forwardDuration2(playlist, endSequence) { var result = 0; var segment; var i2 = endSequence - playlist.mediaSequence; for (; i2 < playlist.segments.length; i2++) { segment = playlist.segments[i2]; if (typeof segment.start !== "undefined") { return { result: segment.start - result, precise: true }; } result += segmentDurationWithParts(playlist, segment); if (typeof segment.end !== "undefined") { return { result: segment.end - result, precise: true }; } } return { result: -1, precise: false }; }; var intervalDuration = function intervalDuration2(playlist, endSequence, expired) { if (typeof endSequence === "undefined") { endSequence = playlist.mediaSequence + playlist.segments.length; } if (endSequence < playlist.mediaSequence) { return 0; } var backward = backwardDuration(playlist, endSequence); if (backward.precise) { return backward.result; } var forward = forwardDuration(playlist, endSequence); if (forward.precise) { return forward.result; } return backward.result + expired; }; var duration2 = function duration3(playlist, endSequence, expired) { if (!playlist) { return 0; } if (typeof expired !== "number") { expired = 0; } if (typeof endSequence === "undefined") { if (playlist.totalDuration) { return playlist.totalDuration; } if (!playlist.endList) { return window_1.Infinity; } } return intervalDuration(playlist, endSequence, expired); }; var sumDurations = function sumDurations2(_ref2) { var defaultDuration = _ref2.defaultDuration, durationList = _ref2.durationList, startIndex = _ref2.startIndex, endIndex = _ref2.endIndex; var durations = 0; if (startIndex > endIndex) { var _ref3 = [endIndex, startIndex]; startIndex = _ref3[0]; endIndex = _ref3[1]; } if (startIndex < 0) { for (var i2 = startIndex; i2 < Math.min(0, endIndex); i2++) { durations += defaultDuration; } startIndex = 0; } for (var _i = startIndex; _i < endIndex; _i++) { durations += durationList[_i].duration; } return durations; }; var playlistEnd = function playlistEnd2(playlist, expired, useSafeLiveEnd, liveEdgePadding) { if (!playlist || !playlist.segments) { return null; } if (playlist.endList) { return duration2(playlist); } if (expired === null) { return null; } expired = expired || 0; var lastSegmentEndTime = intervalDuration(playlist, playlist.mediaSequence + playlist.segments.length, expired); if (useSafeLiveEnd) { liveEdgePadding = typeof liveEdgePadding === "number" ? liveEdgePadding : liveEdgeDelay(null, playlist); lastSegmentEndTime -= liveEdgePadding; } return Math.max(0, lastSegmentEndTime); }; var seekable = function seekable2(playlist, expired, liveEdgePadding) { var useSafeLiveEnd = true; var seekableStart = expired || 0; var seekableEnd = playlistEnd(playlist, expired, useSafeLiveEnd, liveEdgePadding); if (seekableEnd === null) { return createTimeRange$1(); } return createTimeRange$1(seekableStart, seekableEnd); }; var getMediaInfoForTime = function getMediaInfoForTime2(_ref4) { var playlist = _ref4.playlist, currentTime = _ref4.currentTime, startingSegmentIndex = _ref4.startingSegmentIndex, startingPartIndex = _ref4.startingPartIndex, startTime = _ref4.startTime, experimentalExactManifestTimings = _ref4.experimentalExactManifestTimings; var time = currentTime - startTime; var partsAndSegments = getPartsAndSegments(playlist); var startIndex = 0; for (var i2 = 0; i2 < partsAndSegments.length; i2++) { var partAndSegment = partsAndSegments[i2]; if (startingSegmentIndex !== partAndSegment.segmentIndex) { continue; } if (typeof startingPartIndex === "number" && typeof partAndSegment.partIndex === "number" && startingPartIndex !== partAndSegment.partIndex) { continue; } startIndex = i2; break; } if (time < 0) { if (startIndex > 0) { for (var _i2 = startIndex - 1; _i2 >= 0; _i2--) { var _partAndSegment = partsAndSegments[_i2]; time += _partAndSegment.duration; if (experimentalExactManifestTimings) { if (time < 0) { continue; } } else if (time + TIME_FUDGE_FACTOR <= 0) { continue; } return { partIndex: _partAndSegment.partIndex, segmentIndex: _partAndSegment.segmentIndex, startTime: startTime - sumDurations({ defaultDuration: playlist.targetDuration, durationList: partsAndSegments, startIndex, endIndex: _i2 }) }; } } return { partIndex: partsAndSegments[0] && partsAndSegments[0].partIndex || null, segmentIndex: partsAndSegments[0] && partsAndSegments[0].segmentIndex || 0, startTime: currentTime }; } if (startIndex < 0) { for (var _i3 = startIndex; _i3 < 0; _i3++) { time -= playlist.targetDuration; if (time < 0) { return { partIndex: partsAndSegments[0] && partsAndSegments[0].partIndex || null, segmentIndex: partsAndSegments[0] && partsAndSegments[0].segmentIndex || 0, startTime: currentTime }; } } startIndex = 0; } for (var _i4 = startIndex; _i4 < partsAndSegments.length; _i4++) { var _partAndSegment2 = partsAndSegments[_i4]; time -= _partAndSegment2.duration; if (experimentalExactManifestTimings) { if (time > 0) { continue; } } else if (time - TIME_FUDGE_FACTOR >= 0) { continue; } return { partIndex: _partAndSegment2.partIndex, segmentIndex: _partAndSegment2.segmentIndex, startTime: startTime + sumDurations({ defaultDuration: playlist.targetDuration, durationList: partsAndSegments, startIndex, endIndex: _i4 }) }; } return { segmentIndex: partsAndSegments[partsAndSegments.length - 1].segmentIndex, partIndex: partsAndSegments[partsAndSegments.length - 1].partIndex, startTime: currentTime }; }; var isBlacklisted = function isBlacklisted2(playlist) { return playlist.excludeUntil && playlist.excludeUntil > Date.now(); }; var isIncompatible = function isIncompatible2(playlist) { return playlist.excludeUntil && playlist.excludeUntil === Infinity; }; var isEnabled = function isEnabled2(playlist) { var blacklisted = isBlacklisted(playlist); return !playlist.disabled && !blacklisted; }; var isDisabled = function isDisabled2(playlist) { return playlist.disabled; }; var isAes = function isAes2(media) { for (var i2 = 0; i2 < media.segments.length; i2++) { if (media.segments[i2].key) { return true; } } return false; }; var hasAttribute = function hasAttribute2(attr, playlist) { return playlist.attributes && playlist.attributes[attr]; }; var estimateSegmentRequestTime = function estimateSegmentRequestTime2(segmentDuration, bandwidth2, playlist, bytesReceived) { if (bytesReceived === void 0) { bytesReceived = 0; } if (!hasAttribute("BANDWIDTH", playlist)) { return NaN; } var size = segmentDuration * playlist.attributes.BANDWIDTH; return (size - bytesReceived * 8) / bandwidth2; }; var isLowestEnabledRendition = function isLowestEnabledRendition2(master, media) { if (master.playlists.length === 1) { return true; } var currentBandwidth = media.attributes.BANDWIDTH || Number.MAX_VALUE; return master.playlists.filter(function(playlist) { if (!isEnabled(playlist)) { return false; } return (playlist.attributes.BANDWIDTH || 0) < currentBandwidth; }).length === 0; }; var playlistMatch = function playlistMatch2(a, b) { if (!a && !b || !a && b || a && !b) { return false; } if (a === b) { return true; } if (a.id && b.id && a.id === b.id) { return true; } if (a.resolvedUri && b.resolvedUri && a.resolvedUri === b.resolvedUri) { return true; } if (a.uri && b.uri && a.uri === b.uri) { return true; } return false; }; var someAudioVariant = function someAudioVariant2(master, callback2) { var AUDIO5 = master && master.mediaGroups && master.mediaGroups.AUDIO || {}; var found = false; for (var groupName in AUDIO5) { for (var label2 in AUDIO5[groupName]) { found = callback2(AUDIO5[groupName][label2]); if (found) { break; } } if (found) { break; } } return !!found; }; var isAudioOnly = function isAudioOnly2(master) { if (!master || !master.playlists || !master.playlists.length) { var found = someAudioVariant(master, function(variant) { return variant.playlists && variant.playlists.length || variant.uri; }); return found; } var _loop = function _loop2(i3) { var playlist = master.playlists[i3]; var CODECS = playlist.attributes && playlist.attributes.CODECS; if (CODECS && CODECS.split(",").every(function(c) { return isAudioCodec2(c); })) { return "continue"; } var found2 = someAudioVariant(master, function(variant) { return playlistMatch(playlist, variant); }); if (found2) { return "continue"; } return { v: false }; }; for (var i2 = 0; i2 < master.playlists.length; i2++) { var _ret = _loop(i2); if (_ret === "continue") continue; if (typeof _ret === "object") return _ret.v; } return true; }; var Playlist = { liveEdgeDelay, duration: duration2, seekable, getMediaInfoForTime, isEnabled, isDisabled, isBlacklisted, isIncompatible, playlistEnd, isAes, hasAttribute, estimateSegmentRequestTime, isLowestEnabledRendition, isAudioOnly, playlistMatch, segmentDurationWithParts }; var log = videojs.log; var createPlaylistID = function createPlaylistID2(index2, uri) { return index2 + "-" + uri; }; var groupID = function groupID2(type2, group, label2) { return "placeholder-uri-" + type2 + "-" + group + "-" + label2; }; var parseManifest = function parseManifest2(_ref) { var onwarn = _ref.onwarn, oninfo = _ref.oninfo, manifestString = _ref.manifestString, _ref$customTagParsers = _ref.customTagParsers, customTagParsers = _ref$customTagParsers === void 0 ? [] : _ref$customTagParsers, _ref$customTagMappers = _ref.customTagMappers, customTagMappers = _ref$customTagMappers === void 0 ? [] : _ref$customTagMappers, experimentalLLHLS = _ref.experimentalLLHLS; var parser2 = new Parser(); if (onwarn) { parser2.on("warn", onwarn); } if (oninfo) { parser2.on("info", oninfo); } customTagParsers.forEach(function(customParser) { return parser2.addParser(customParser); }); customTagMappers.forEach(function(mapper) { return parser2.addTagMapper(mapper); }); parser2.push(manifestString); parser2.end(); var manifest = parser2.manifest; if (!experimentalLLHLS) { ["preloadSegment", "skip", "serverControl", "renditionReports", "partInf", "partTargetDuration"].forEach(function(k) { if (manifest.hasOwnProperty(k)) { delete manifest[k]; } }); if (manifest.segments) { manifest.segments.forEach(function(segment) { ["parts", "preloadHints"].forEach(function(k) { if (segment.hasOwnProperty(k)) { delete segment[k]; } }); }); } } if (!manifest.targetDuration) { var targetDuration = 10; if (manifest.segments && manifest.segments.length) { targetDuration = manifest.segments.reduce(function(acc, s) { return Math.max(acc, s.duration); }, 0); } if (onwarn) { onwarn("manifest has no targetDuration defaulting to " + targetDuration); } manifest.targetDuration = targetDuration; } var parts = getLastParts(manifest); if (parts.length && !manifest.partTargetDuration) { var partTargetDuration = parts.reduce(function(acc, p) { return Math.max(acc, p.duration); }, 0); if (onwarn) { onwarn("manifest has no partTargetDuration defaulting to " + partTargetDuration); log.error("LL-HLS manifest has parts but lacks required #EXT-X-PART-INF:PART-TARGET value. See https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-09#section-4.4.3.7. Playback is not guaranteed."); } manifest.partTargetDuration = partTargetDuration; } return manifest; }; var forEachMediaGroup3 = function forEachMediaGroup4(master, callback2) { if (!master.mediaGroups) { return; } ["AUDIO", "SUBTITLES"].forEach(function(mediaType) { if (!master.mediaGroups[mediaType]) { return; } for (var groupKey in master.mediaGroups[mediaType]) { for (var labelKey in master.mediaGroups[mediaType][groupKey]) { var mediaProperties = master.mediaGroups[mediaType][groupKey][labelKey]; callback2(mediaProperties, mediaType, groupKey, labelKey); } } }); }; var setupMediaPlaylist = function setupMediaPlaylist2(_ref2) { var playlist = _ref2.playlist, uri = _ref2.uri, id = _ref2.id; playlist.id = id; playlist.playlistErrors_ = 0; if (uri) { playlist.uri = uri; } playlist.attributes = playlist.attributes || {}; }; var setupMediaPlaylists = function setupMediaPlaylists2(master) { var i2 = master.playlists.length; while (i2--) { var playlist = master.playlists[i2]; setupMediaPlaylist({ playlist, id: createPlaylistID(i2, playlist.uri) }); playlist.resolvedUri = resolveUrl4(master.uri, playlist.uri); master.playlists[playlist.id] = playlist; master.playlists[playlist.uri] = playlist; if (!playlist.attributes.BANDWIDTH) { log.warn("Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute."); } } }; var resolveMediaGroupUris = function resolveMediaGroupUris2(master) { forEachMediaGroup3(master, function(properties) { if (properties.uri) { properties.resolvedUri = resolveUrl4(master.uri, properties.uri); } }); }; var masterForMedia = function masterForMedia2(media, uri) { var id = createPlaylistID(0, uri); var master = { mediaGroups: { "AUDIO": {}, "VIDEO": {}, "CLOSED-CAPTIONS": {}, "SUBTITLES": {} }, uri: window_1.location.href, resolvedUri: window_1.location.href, playlists: [{ uri, id, resolvedUri: uri, attributes: {} }] }; master.playlists[id] = master.playlists[0]; master.playlists[uri] = master.playlists[0]; return master; }; var addPropertiesToMaster = function addPropertiesToMaster2(master, uri, createGroupID) { if (createGroupID === void 0) { createGroupID = groupID; } master.uri = uri; for (var i2 = 0; i2 < master.playlists.length; i2++) { if (!master.playlists[i2].uri) { var phonyUri = "placeholder-uri-" + i2; master.playlists[i2].uri = phonyUri; } } var audioOnlyMaster = isAudioOnly(master); forEachMediaGroup3(master, function(properties, mediaType, groupKey, labelKey) { if (!properties.playlists || !properties.playlists.length) { if (audioOnlyMaster && mediaType === "AUDIO" && !properties.uri) { for (var _i = 0; _i < master.playlists.length; _i++) { var p = master.playlists[_i]; if (p.attributes && p.attributes.AUDIO && p.attributes.AUDIO === groupKey) { return; } } } properties.playlists = [_extends$2({}, properties)]; } properties.playlists.forEach(function(p2, i3) { var groupId = createGroupID(mediaType, groupKey, labelKey, p2); var id = createPlaylistID(i3, groupId); if (p2.uri) { p2.resolvedUri = p2.resolvedUri || resolveUrl4(master.uri, p2.uri); } else { p2.uri = i3 === 0 ? groupId : id; p2.resolvedUri = p2.uri; } p2.id = p2.id || id; p2.attributes = p2.attributes || {}; master.playlists[p2.id] = p2; master.playlists[p2.uri] = p2; }); }); setupMediaPlaylists(master); resolveMediaGroupUris(master); }; var mergeOptions$2 = videojs.mergeOptions, EventTarget$1 = videojs.EventTarget; var addLLHLSQueryDirectives = function addLLHLSQueryDirectives2(uri, media) { if (media.endList || !media.serverControl) { return uri; } var parameters = {}; if (media.serverControl.canBlockReload) { var preloadSegment = media.preloadSegment; var nextMSN = media.mediaSequence + media.segments.length; if (preloadSegment) { var parts = preloadSegment.parts || []; var nextPart = getKnownPartCount(media) - 1; if (nextPart > -1 && nextPart !== parts.length - 1) { parameters._HLS_part = nextPart; } if (nextPart > -1 || parts.length) { nextMSN--; } } parameters._HLS_msn = nextMSN; } if (media.serverControl && media.serverControl.canSkipUntil) { parameters._HLS_skip = media.serverControl.canSkipDateranges ? "v2" : "YES"; } if (Object.keys(parameters).length) { var parsedUri = new window_1.URL(uri); ["_HLS_skip", "_HLS_msn", "_HLS_part"].forEach(function(name) { if (!parameters.hasOwnProperty(name)) { return; } parsedUri.searchParams.set(name, parameters[name]); }); uri = parsedUri.toString(); } return uri; }; var updateSegment = function updateSegment2(a, b) { if (!a) { return b; } var result = mergeOptions$2(a, b); if (a.preloadHints && !b.preloadHints) { delete result.preloadHints; } if (a.parts && !b.parts) { delete result.parts; } else if (a.parts && b.parts) { for (var i2 = 0; i2 < b.parts.length; i2++) { if (a.parts && a.parts[i2]) { result.parts[i2] = mergeOptions$2(a.parts[i2], b.parts[i2]); } } } if (!a.skipped && b.skipped) { result.skipped = false; } if (a.preload && !b.preload) { result.preload = false; } return result; }; var updateSegments = function updateSegments2(original, update, offset) { var oldSegments = original.slice(); var newSegments = update.slice(); offset = offset || 0; var result = []; var currentMap; for (var newIndex = 0; newIndex < newSegments.length; newIndex++) { var oldSegment = oldSegments[newIndex + offset]; var newSegment = newSegments[newIndex]; if (oldSegment) { currentMap = oldSegment.map || currentMap; result.push(updateSegment(oldSegment, newSegment)); } else { if (currentMap && !newSegment.map) { newSegment.map = currentMap; } result.push(newSegment); } } return result; }; var resolveSegmentUris = function resolveSegmentUris2(segment, baseUri) { if (!segment.resolvedUri && segment.uri) { segment.resolvedUri = resolveUrl4(baseUri, segment.uri); } if (segment.key && !segment.key.resolvedUri) { segment.key.resolvedUri = resolveUrl4(baseUri, segment.key.uri); } if (segment.map && !segment.map.resolvedUri) { segment.map.resolvedUri = resolveUrl4(baseUri, segment.map.uri); } if (segment.map && segment.map.key && !segment.map.key.resolvedUri) { segment.map.key.resolvedUri = resolveUrl4(baseUri, segment.map.key.uri); } if (segment.parts && segment.parts.length) { segment.parts.forEach(function(p) { if (p.resolvedUri) { return; } p.resolvedUri = resolveUrl4(baseUri, p.uri); }); } if (segment.preloadHints && segment.preloadHints.length) { segment.preloadHints.forEach(function(p) { if (p.resolvedUri) { return; } p.resolvedUri = resolveUrl4(baseUri, p.uri); }); } }; var getAllSegments = function getAllSegments2(media) { var segments = media.segments || []; var preloadSegment = media.preloadSegment; if (preloadSegment && preloadSegment.parts && preloadSegment.parts.length) { if (preloadSegment.preloadHints) { for (var i2 = 0; i2 < preloadSegment.preloadHints.length; i2++) { if (preloadSegment.preloadHints[i2].type === "MAP") { return segments; } } } preloadSegment.duration = media.targetDuration; preloadSegment.preload = true; segments.push(preloadSegment); } return segments; }; var isPlaylistUnchanged = function isPlaylistUnchanged2(a, b) { return a === b || a.segments && b.segments && a.segments.length === b.segments.length && a.endList === b.endList && a.mediaSequence === b.mediaSequence && a.preloadSegment === b.preloadSegment; }; var updateMaster$1 = function updateMaster(master, newMedia, unchangedCheck) { if (unchangedCheck === void 0) { unchangedCheck = isPlaylistUnchanged; } var result = mergeOptions$2(master, {}); var oldMedia = result.playlists[newMedia.id]; if (!oldMedia) { return null; } if (unchangedCheck(oldMedia, newMedia)) { return null; } newMedia.segments = getAllSegments(newMedia); var mergedPlaylist = mergeOptions$2(oldMedia, newMedia); if (mergedPlaylist.preloadSegment && !newMedia.preloadSegment) { delete mergedPlaylist.preloadSegment; } if (oldMedia.segments) { if (newMedia.skip) { newMedia.segments = newMedia.segments || []; for (var i2 = 0; i2 < newMedia.skip.skippedSegments; i2++) { newMedia.segments.unshift({ skipped: true }); } } mergedPlaylist.segments = updateSegments(oldMedia.segments, newMedia.segments, newMedia.mediaSequence - oldMedia.mediaSequence); } mergedPlaylist.segments.forEach(function(segment) { resolveSegmentUris(segment, mergedPlaylist.resolvedUri); }); for (var _i = 0; _i < result.playlists.length; _i++) { if (result.playlists[_i].id === newMedia.id) { result.playlists[_i] = mergedPlaylist; } } result.playlists[newMedia.id] = mergedPlaylist; result.playlists[newMedia.uri] = mergedPlaylist; forEachMediaGroup3(master, function(properties, mediaType, groupKey, labelKey) { if (!properties.playlists) { return; } for (var _i2 = 0; _i2 < properties.playlists.length; _i2++) { if (newMedia.id === properties.playlists[_i2].id) { properties.playlists[_i2] = mergedPlaylist; } } }); return result; }; var refreshDelay = function refreshDelay2(media, update) { var segments = media.segments || []; var lastSegment = segments[segments.length - 1]; var lastPart = lastSegment && lastSegment.parts && lastSegment.parts[lastSegment.parts.length - 1]; var lastDuration = lastPart && lastPart.duration || lastSegment && lastSegment.duration; if (update && lastDuration) { return lastDuration * 1e3; } return (media.partTargetDuration || media.targetDuration || 10) * 500; }; var PlaylistLoader = /* @__PURE__ */ function(_EventTarget) { _inheritsLoose(PlaylistLoader2, _EventTarget); function PlaylistLoader2(src, vhs, options2) { var _this; if (options2 === void 0) { options2 = {}; } _this = _EventTarget.call(this) || this; if (!src) { throw new Error("A non-empty playlist URL or object is required"); } _this.logger_ = logger("PlaylistLoader"); var _options = options2, _options$withCredenti = _options.withCredentials, withCredentials = _options$withCredenti === void 0 ? false : _options$withCredenti, _options$handleManife = _options.handleManifestRedirects, handleManifestRedirects = _options$handleManife === void 0 ? false : _options$handleManife; _this.src = src; _this.vhs_ = vhs; _this.withCredentials = withCredentials; _this.handleManifestRedirects = handleManifestRedirects; var vhsOptions = vhs.options_; _this.customTagParsers = vhsOptions && vhsOptions.customTagParsers || []; _this.customTagMappers = vhsOptions && vhsOptions.customTagMappers || []; _this.experimentalLLHLS = vhsOptions && vhsOptions.experimentalLLHLS || false; if (videojs.browser.IE_VERSION) { _this.experimentalLLHLS = false; } _this.state = "HAVE_NOTHING"; _this.handleMediaupdatetimeout_ = _this.handleMediaupdatetimeout_.bind(_assertThisInitialized(_this)); _this.on("mediaupdatetimeout", _this.handleMediaupdatetimeout_); return _this; } var _proto = PlaylistLoader2.prototype; _proto.handleMediaupdatetimeout_ = function handleMediaupdatetimeout_() { var _this2 = this; if (this.state !== "HAVE_METADATA") { return; } var media = this.media(); var uri = resolveUrl4(this.master.uri, media.uri); if (this.experimentalLLHLS) { uri = addLLHLSQueryDirectives(uri, media); } this.state = "HAVE_CURRENT_METADATA"; this.request = this.vhs_.xhr({ uri, withCredentials: this.withCredentials }, function(error, req) { if (!_this2.request) { return; } if (error) { return _this2.playlistRequestError(_this2.request, _this2.media(), "HAVE_METADATA"); } _this2.haveMetadata({ playlistString: _this2.request.responseText, url: _this2.media().uri, id: _this2.media().id }); }); }; _proto.playlistRequestError = function playlistRequestError(xhr, playlist, startingState) { var uri = playlist.uri, id = playlist.id; this.request = null; if (startingState) { this.state = startingState; } this.error = { playlist: this.master.playlists[id], status: xhr.status, message: "HLS playlist request error at URL: " + uri + ".", responseText: xhr.responseText, code: xhr.status >= 500 ? 4 : 2 }; this.trigger("error"); }; _proto.parseManifest_ = function parseManifest_(_ref) { var _this3 = this; var url = _ref.url, manifestString = _ref.manifestString; return parseManifest({ onwarn: function onwarn(_ref2) { var message = _ref2.message; return _this3.logger_("m3u8-parser warn for " + url + ": " + message); }, oninfo: function oninfo(_ref3) { var message = _ref3.message; return _this3.logger_("m3u8-parser info for " + url + ": " + message); }, manifestString, customTagParsers: this.customTagParsers, customTagMappers: this.customTagMappers, experimentalLLHLS: this.experimentalLLHLS }); }; _proto.haveMetadata = function haveMetadata(_ref4) { var playlistString = _ref4.playlistString, playlistObject = _ref4.playlistObject, url = _ref4.url, id = _ref4.id; this.request = null; this.state = "HAVE_METADATA"; var playlist = playlistObject || this.parseManifest_({ url, manifestString: playlistString }); playlist.lastRequest = Date.now(); setupMediaPlaylist({ playlist, uri: url, id }); var update = updateMaster$1(this.master, playlist); this.targetDuration = playlist.partTargetDuration || playlist.targetDuration; this.pendingMedia_ = null; if (update) { this.master = update; this.media_ = this.master.playlists[id]; } else { this.trigger("playlistunchanged"); } this.updateMediaUpdateTimeout_(refreshDelay(this.media(), !!update)); this.trigger("loadedplaylist"); }; _proto.dispose = function dispose() { this.trigger("dispose"); this.stopRequest(); window_1.clearTimeout(this.mediaUpdateTimeout); window_1.clearTimeout(this.finalRenditionTimeout); this.off(); }; _proto.stopRequest = function stopRequest() { if (this.request) { var oldRequest = this.request; this.request = null; oldRequest.onreadystatechange = null; oldRequest.abort(); } }; _proto.media = function media(playlist, shouldDelay) { var _this4 = this; if (!playlist) { return this.media_; } if (this.state === "HAVE_NOTHING") { throw new Error("Cannot switch media playlist from " + this.state); } if (typeof playlist === "string") { if (!this.master.playlists[playlist]) { throw new Error("Unknown playlist URI: " + playlist); } playlist = this.master.playlists[playlist]; } window_1.clearTimeout(this.finalRenditionTimeout); if (shouldDelay) { var delay = (playlist.partTargetDuration || playlist.targetDuration) / 2 * 1e3 || 5 * 1e3; this.finalRenditionTimeout = window_1.setTimeout(this.media.bind(this, playlist, false), delay); return; } var startingState = this.state; var mediaChange = !this.media_ || playlist.id !== this.media_.id; var masterPlaylistRef = this.master.playlists[playlist.id]; if (masterPlaylistRef && masterPlaylistRef.endList || playlist.endList && playlist.segments.length) { if (this.request) { this.request.onreadystatechange = null; this.request.abort(); this.request = null; } this.state = "HAVE_METADATA"; this.media_ = playlist; if (mediaChange) { this.trigger("mediachanging"); if (startingState === "HAVE_MASTER") { this.trigger("loadedmetadata"); } else { this.trigger("mediachange"); } } return; } this.updateMediaUpdateTimeout_(refreshDelay(playlist, true)); if (!mediaChange) { return; } this.state = "SWITCHING_MEDIA"; if (this.request) { if (playlist.resolvedUri === this.request.url) { return; } this.request.onreadystatechange = null; this.request.abort(); this.request = null; } if (this.media_) { this.trigger("mediachanging"); } this.pendingMedia_ = playlist; this.request = this.vhs_.xhr({ uri: playlist.resolvedUri, withCredentials: this.withCredentials }, function(error, req) { if (!_this4.request) { return; } playlist.lastRequest = Date.now(); playlist.resolvedUri = resolveManifestRedirect(_this4.handleManifestRedirects, playlist.resolvedUri, req); if (error) { return _this4.playlistRequestError(_this4.request, playlist, startingState); } _this4.haveMetadata({ playlistString: req.responseText, url: playlist.uri, id: playlist.id }); if (startingState === "HAVE_MASTER") { _this4.trigger("loadedmetadata"); } else { _this4.trigger("mediachange"); } }); }; _proto.pause = function pause() { if (this.mediaUpdateTimeout) { window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; } this.stopRequest(); if (this.state === "HAVE_NOTHING") { this.started = false; } if (this.state === "SWITCHING_MEDIA") { if (this.media_) { this.state = "HAVE_METADATA"; } else { this.state = "HAVE_MASTER"; } } else if (this.state === "HAVE_CURRENT_METADATA") { this.state = "HAVE_METADATA"; } }; _proto.load = function load(shouldDelay) { var _this5 = this; if (this.mediaUpdateTimeout) { window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; } var media = this.media(); if (shouldDelay) { var delay = media ? (media.partTargetDuration || media.targetDuration) / 2 * 1e3 : 5 * 1e3; this.mediaUpdateTimeout = window_1.setTimeout(function() { _this5.mediaUpdateTimeout = null; _this5.load(); }, delay); return; } if (!this.started) { this.start(); return; } if (media && !media.endList) { this.trigger("mediaupdatetimeout"); } else { this.trigger("loadedplaylist"); } }; _proto.updateMediaUpdateTimeout_ = function updateMediaUpdateTimeout_(delay) { var _this6 = this; if (this.mediaUpdateTimeout) { window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; } if (!this.media() || this.media().endList) { return; } this.mediaUpdateTimeout = window_1.setTimeout(function() { _this6.mediaUpdateTimeout = null; _this6.trigger("mediaupdatetimeout"); _this6.updateMediaUpdateTimeout_(delay); }, delay); }; _proto.start = function start2() { var _this7 = this; this.started = true; if (typeof this.src === "object") { if (!this.src.uri) { this.src.uri = window_1.location.href; } this.src.resolvedUri = this.src.uri; setTimeout(function() { _this7.setupInitialPlaylist(_this7.src); }, 0); return; } this.request = this.vhs_.xhr({ uri: this.src, withCredentials: this.withCredentials }, function(error, req) { if (!_this7.request) { return; } _this7.request = null; if (error) { _this7.error = { status: req.status, message: "HLS playlist request error at URL: " + _this7.src + ".", responseText: req.responseText, code: 2 }; if (_this7.state === "HAVE_NOTHING") { _this7.started = false; } return _this7.trigger("error"); } _this7.src = resolveManifestRedirect(_this7.handleManifestRedirects, _this7.src, req); var manifest = _this7.parseManifest_({ manifestString: req.responseText, url: _this7.src }); _this7.setupInitialPlaylist(manifest); }); }; _proto.srcUri = function srcUri() { return typeof this.src === "string" ? this.src : this.src.uri; }; _proto.setupInitialPlaylist = function setupInitialPlaylist(manifest) { this.state = "HAVE_MASTER"; if (manifest.playlists) { this.master = manifest; addPropertiesToMaster(this.master, this.srcUri()); manifest.playlists.forEach(function(playlist) { playlist.segments = getAllSegments(playlist); playlist.segments.forEach(function(segment) { resolveSegmentUris(segment, playlist.resolvedUri); }); }); this.trigger("loadedplaylist"); if (!this.request) { this.media(this.master.playlists[0]); } return; } var uri = this.srcUri() || window_1.location.href; this.master = masterForMedia(manifest, uri); this.haveMetadata({ playlistObject: manifest, url: uri, id: this.master.playlists[0].id }); this.trigger("loadedmetadata"); }; return PlaylistLoader2; }(EventTarget$1); var videojsXHR = videojs.xhr, mergeOptions$1$1 = videojs.mergeOptions; var callbackWrapper = function callbackWrapper2(request, error, response, callback2) { var reqResponse = request.responseType === "arraybuffer" ? request.response : request.responseText; if (!error && reqResponse) { request.responseTime = Date.now(); request.roundTripTime = request.responseTime - request.requestTime; request.bytesReceived = reqResponse.byteLength || reqResponse.length; if (!request.bandwidth) { request.bandwidth = Math.floor(request.bytesReceived / request.roundTripTime * 8 * 1e3); } } if (response.headers) { request.responseHeaders = response.headers; } if (error && error.code === "ETIMEDOUT") { request.timedout = true; } if (!error && !request.aborted && response.statusCode !== 200 && response.statusCode !== 206 && response.statusCode !== 0) { error = new Error("XHR Failed with a response of: " + (request && (reqResponse || request.responseText))); } callback2(error, request); }; var xhrFactory = function xhrFactory2() { var xhr = function XhrFunction(options2, callback2) { options2 = mergeOptions$1$1({ timeout: 45e3 }, options2); var beforeRequest = XhrFunction.beforeRequest || videojs.Vhs.xhr.beforeRequest; if (beforeRequest && typeof beforeRequest === "function") { var newOptions = beforeRequest(options2); if (newOptions) { options2 = newOptions; } } var xhrMethod = videojs.Vhs.xhr.original === true ? videojsXHR : videojs.Vhs.xhr; var request = xhrMethod(options2, function(error, response) { return callbackWrapper(request, error, response, callback2); }); var originalAbort = request.abort; request.abort = function() { request.aborted = true; return originalAbort.apply(request, arguments); }; request.uri = options2.uri; request.requestTime = Date.now(); return request; }; xhr.original = true; return xhr; }; var byterangeStr = function byterangeStr2(byterange) { var byterangeEnd; var byterangeStart = byterange.offset; if (typeof byterange.offset === "bigint" || typeof byterange.length === "bigint") { byterangeEnd = window_1.BigInt(byterange.offset) + window_1.BigInt(byterange.length) - window_1.BigInt(1); } else { byterangeEnd = byterange.offset + byterange.length - 1; } return "bytes=" + byterangeStart + "-" + byterangeEnd; }; var segmentXhrHeaders = function segmentXhrHeaders2(segment) { var headers = {}; if (segment.byterange) { headers.Range = byterangeStr(segment.byterange); } return headers; }; var textRange = function textRange2(range3, i2) { return range3.start(i2) + "-" + range3.end(i2); }; var formatHexString = function formatHexString2(e, i2) { var value = e.toString(16); return "00".substring(0, 2 - value.length) + value + (i2 % 2 ? " " : ""); }; var formatAsciiString = function formatAsciiString2(e) { if (e >= 32 && e < 126) { return String.fromCharCode(e); } return "."; }; var createTransferableMessage = function createTransferableMessage2(message) { var transferable = {}; Object.keys(message).forEach(function(key) { var value = message[key]; if (isArrayBufferView2(value)) { transferable[key] = { bytes: value.buffer, byteOffset: value.byteOffset, byteLength: value.byteLength }; } else { transferable[key] = value; } }); return transferable; }; var initSegmentId = function initSegmentId2(initSegment) { var byterange = initSegment.byterange || { length: Infinity, offset: 0 }; return [byterange.length, byterange.offset, initSegment.resolvedUri].join(","); }; var segmentKeyId = function segmentKeyId2(key) { return key.resolvedUri; }; var hexDump = function hexDump2(data) { var bytes = Array.prototype.slice.call(data); var step = 16; var result = ""; var hex; var ascii; for (var j = 0; j < bytes.length / step; j++) { hex = bytes.slice(j * step, j * step + step).map(formatHexString).join(""); ascii = bytes.slice(j * step, j * step + step).map(formatAsciiString).join(""); result += hex + " " + ascii + "\n"; } return result; }; var tagDump = function tagDump2(_ref) { var bytes = _ref.bytes; return hexDump(bytes); }; var textRanges = function textRanges2(ranges) { var result = ""; var i2; for (i2 = 0; i2 < ranges.length; i2++) { result += textRange(ranges, i2) + " "; } return result; }; var utils = /* @__PURE__ */ Object.freeze({ __proto__: null, createTransferableMessage, initSegmentId, segmentKeyId, hexDump, tagDump, textRanges }); var SEGMENT_END_FUDGE_PERCENT = 0.25; var playerTimeToProgramTime = function playerTimeToProgramTime2(playerTime, segment) { if (!segment.dateTimeObject) { return null; } var transmuxerPrependedSeconds = segment.videoTimingInfo.transmuxerPrependedSeconds; var transmuxedStart = segment.videoTimingInfo.transmuxedPresentationStart; var startOfSegment = transmuxedStart + transmuxerPrependedSeconds; var offsetFromSegmentStart = playerTime - startOfSegment; return new Date(segment.dateTimeObject.getTime() + offsetFromSegmentStart * 1e3); }; var originalSegmentVideoDuration = function originalSegmentVideoDuration2(videoTimingInfo) { return videoTimingInfo.transmuxedPresentationEnd - videoTimingInfo.transmuxedPresentationStart - videoTimingInfo.transmuxerPrependedSeconds; }; var findSegmentForProgramTime = function findSegmentForProgramTime2(programTime, playlist) { var dateTimeObject; try { dateTimeObject = new Date(programTime); } catch (e) { return null; } if (!playlist || !playlist.segments || playlist.segments.length === 0) { return null; } var segment = playlist.segments[0]; if (dateTimeObject < segment.dateTimeObject) { return null; } for (var i2 = 0; i2 < playlist.segments.length - 1; i2++) { segment = playlist.segments[i2]; var nextSegmentStart = playlist.segments[i2 + 1].dateTimeObject; if (dateTimeObject < nextSegmentStart) { break; } } var lastSegment = playlist.segments[playlist.segments.length - 1]; var lastSegmentStart = lastSegment.dateTimeObject; var lastSegmentDuration = lastSegment.videoTimingInfo ? originalSegmentVideoDuration(lastSegment.videoTimingInfo) : lastSegment.duration + lastSegment.duration * SEGMENT_END_FUDGE_PERCENT; var lastSegmentEnd = new Date(lastSegmentStart.getTime() + lastSegmentDuration * 1e3); if (dateTimeObject > lastSegmentEnd) { return null; } if (dateTimeObject > lastSegmentStart) { segment = lastSegment; } return { segment, estimatedStart: segment.videoTimingInfo ? segment.videoTimingInfo.transmuxedPresentationStart : Playlist.duration(playlist, playlist.mediaSequence + playlist.segments.indexOf(segment)), type: segment.videoTimingInfo ? "accurate" : "estimate" }; }; var findSegmentForPlayerTime = function findSegmentForPlayerTime2(time, playlist) { if (!playlist || !playlist.segments || playlist.segments.length === 0) { return null; } var segmentEnd = 0; var segment; for (var i2 = 0; i2 < playlist.segments.length; i2++) { segment = playlist.segments[i2]; segmentEnd = segment.videoTimingInfo ? segment.videoTimingInfo.transmuxedPresentationEnd : segmentEnd + segment.duration; if (time <= segmentEnd) { break; } } var lastSegment = playlist.segments[playlist.segments.length - 1]; if (lastSegment.videoTimingInfo && lastSegment.videoTimingInfo.transmuxedPresentationEnd < time) { return null; } if (time > segmentEnd) { if (time > segmentEnd + lastSegment.duration * SEGMENT_END_FUDGE_PERCENT) { return null; } segment = lastSegment; } return { segment, estimatedStart: segment.videoTimingInfo ? segment.videoTimingInfo.transmuxedPresentationStart : segmentEnd - segment.duration, type: segment.videoTimingInfo ? "accurate" : "estimate" }; }; var getOffsetFromTimestamp = function getOffsetFromTimestamp2(comparisonTimeStamp, programTime) { var segmentDateTime; var programDateTime; try { segmentDateTime = new Date(comparisonTimeStamp); programDateTime = new Date(programTime); } catch (e) { } var segmentTimeEpoch = segmentDateTime.getTime(); var programTimeEpoch = programDateTime.getTime(); return (programTimeEpoch - segmentTimeEpoch) / 1e3; }; var verifyProgramDateTimeTags = function verifyProgramDateTimeTags2(playlist) { if (!playlist.segments || playlist.segments.length === 0) { return false; } for (var i2 = 0; i2 < playlist.segments.length; i2++) { var segment = playlist.segments[i2]; if (!segment.dateTimeObject) { return false; } } return true; }; var getProgramTime = function getProgramTime2(_ref) { var playlist = _ref.playlist, _ref$time = _ref.time, time = _ref$time === void 0 ? void 0 : _ref$time, callback2 = _ref.callback; if (!callback2) { throw new Error("getProgramTime: callback must be provided"); } if (!playlist || time === void 0) { return callback2({ message: "getProgramTime: playlist and time must be provided" }); } var matchedSegment = findSegmentForPlayerTime(time, playlist); if (!matchedSegment) { return callback2({ message: "valid programTime was not found" }); } if (matchedSegment.type === "estimate") { return callback2({ message: "Accurate programTime could not be determined. Please seek to e.seekTime and try again", seekTime: matchedSegment.estimatedStart }); } var programTimeObject = { mediaSeconds: time }; var programTime = playerTimeToProgramTime(time, matchedSegment.segment); if (programTime) { programTimeObject.programDateTime = programTime.toISOString(); } return callback2(null, programTimeObject); }; var seekToProgramTime = function seekToProgramTime2(_ref2) { var programTime = _ref2.programTime, playlist = _ref2.playlist, _ref2$retryCount = _ref2.retryCount, retryCount = _ref2$retryCount === void 0 ? 2 : _ref2$retryCount, seekTo = _ref2.seekTo, _ref2$pauseAfterSeek = _ref2.pauseAfterSeek, pauseAfterSeek = _ref2$pauseAfterSeek === void 0 ? true : _ref2$pauseAfterSeek, tech = _ref2.tech, callback2 = _ref2.callback; if (!callback2) { throw new Error("seekToProgramTime: callback must be provided"); } if (typeof programTime === "undefined" || !playlist || !seekTo) { return callback2({ message: "seekToProgramTime: programTime, seekTo and playlist must be provided" }); } if (!playlist.endList && !tech.hasStarted_) { return callback2({ message: "player must be playing a live stream to start buffering" }); } if (!verifyProgramDateTimeTags(playlist)) { return callback2({ message: "programDateTime tags must be provided in the manifest " + playlist.resolvedUri }); } var matchedSegment = findSegmentForProgramTime(programTime, playlist); if (!matchedSegment) { return callback2({ message: programTime + " was not found in the stream" }); } var segment = matchedSegment.segment; var mediaOffset = getOffsetFromTimestamp(segment.dateTimeObject, programTime); if (matchedSegment.type === "estimate") { if (retryCount === 0) { return callback2({ message: programTime + " is not buffered yet. Try again" }); } seekTo(matchedSegment.estimatedStart + mediaOffset); tech.one("seeked", function() { seekToProgramTime2({ programTime, playlist, retryCount: retryCount - 1, seekTo, pauseAfterSeek, tech, callback: callback2 }); }); return; } var seekToTime = segment.start + mediaOffset; var seekedCallback = function seekedCallback2() { return callback2(null, tech.currentTime()); }; tech.one("seeked", seekedCallback); if (pauseAfterSeek) { tech.pause(); } seekTo(seekToTime); }; var callbackOnCompleted = function callbackOnCompleted2(request, cb) { if (request.readyState === 4) { return cb(); } return; }; var containerRequest = function containerRequest2(uri, xhr, cb) { var bytes = []; var id3Offset; var finished = false; var endRequestAndCallback = function endRequestAndCallback2(err, req, type2, _bytes) { req.abort(); finished = true; return cb(err, req, type2, _bytes); }; var progressListener = function progressListener2(error, request2) { if (finished) { return; } if (error) { return endRequestAndCallback(error, request2, "", bytes); } var newPart = request2.responseText.substring(bytes && bytes.byteLength || 0, request2.responseText.length); bytes = concatTypedArrays2(bytes, stringToBytes2(newPart, true)); id3Offset = id3Offset || getId3Offset2(bytes); if (bytes.length < 10 || id3Offset && bytes.length < id3Offset + 2) { return callbackOnCompleted(request2, function() { return endRequestAndCallback(error, request2, "", bytes); }); } var type2 = detectContainerForBytes2(bytes); if (type2 === "ts" && bytes.length < 188) { return callbackOnCompleted(request2, function() { return endRequestAndCallback(error, request2, "", bytes); }); } if (!type2 && bytes.length < 376) { return callbackOnCompleted(request2, function() { return endRequestAndCallback(error, request2, "", bytes); }); } return endRequestAndCallback(null, request2, type2, bytes); }; var options2 = { uri, beforeSend: function beforeSend(request2) { request2.overrideMimeType("text/plain; charset=x-user-defined"); request2.addEventListener("progress", function(_ref) { _ref.total; _ref.loaded; return callbackWrapper(request2, null, { statusCode: request2.status }, progressListener); }); } }; var request = xhr(options2, function(error, response) { return callbackWrapper(request, error, response, progressListener); }); return request; }; var EventTarget2 = videojs.EventTarget, mergeOptions$4 = videojs.mergeOptions; var dashPlaylistUnchanged = function dashPlaylistUnchanged2(a, b) { if (!isPlaylistUnchanged(a, b)) { return false; } if (a.sidx && b.sidx && (a.sidx.offset !== b.sidx.offset || a.sidx.length !== b.sidx.length)) { return false; } else if (!a.sidx && b.sidx || a.sidx && !b.sidx) { return false; } if (a.segments && !b.segments || !a.segments && b.segments) { return false; } if (!a.segments && !b.segments) { return true; } for (var i2 = 0; i2 < a.segments.length; i2++) { var aSegment = a.segments[i2]; var bSegment = b.segments[i2]; if (aSegment.uri !== bSegment.uri) { return false; } if (!aSegment.byterange && !bSegment.byterange) { continue; } var aByterange = aSegment.byterange; var bByterange = bSegment.byterange; if (aByterange && !bByterange || !aByterange && bByterange) { return false; } if (aByterange.offset !== bByterange.offset || aByterange.length !== bByterange.length) { return false; } } return true; }; var dashGroupId = function dashGroupId2(type2, group, label2, playlist) { var playlistId = playlist.attributes.NAME || label2; return "placeholder-uri-" + type2 + "-" + group + "-" + playlistId; }; var parseMasterXml = function parseMasterXml2(_ref) { var masterXml = _ref.masterXml, srcUrl = _ref.srcUrl, clientOffset = _ref.clientOffset, sidxMapping = _ref.sidxMapping, previousManifest = _ref.previousManifest; var manifest = parse(masterXml, { manifestUri: srcUrl, clientOffset, sidxMapping, previousManifest }); addPropertiesToMaster(manifest, srcUrl, dashGroupId); return manifest; }; var removeOldMediaGroupLabels = function removeOldMediaGroupLabels2(update, newMaster) { forEachMediaGroup3(update, function(properties, type2, group, label2) { if (!(label2 in newMaster.mediaGroups[type2][group])) { delete update.mediaGroups[type2][group][label2]; } }); }; var updateMaster2 = function updateMaster3(oldMaster, newMaster, sidxMapping) { var noChanges = true; var update = mergeOptions$4(oldMaster, { duration: newMaster.duration, minimumUpdatePeriod: newMaster.minimumUpdatePeriod, timelineStarts: newMaster.timelineStarts }); for (var i2 = 0; i2 < newMaster.playlists.length; i2++) { var playlist = newMaster.playlists[i2]; if (playlist.sidx) { var sidxKey = generateSidxKey(playlist.sidx); if (sidxMapping && sidxMapping[sidxKey] && sidxMapping[sidxKey].sidx) { addSidxSegmentsToPlaylist$1(playlist, sidxMapping[sidxKey].sidx, playlist.sidx.resolvedUri); } } var playlistUpdate = updateMaster$1(update, playlist, dashPlaylistUnchanged); if (playlistUpdate) { update = playlistUpdate; noChanges = false; } } forEachMediaGroup3(newMaster, function(properties, type2, group, label2) { if (properties.playlists && properties.playlists.length) { var id = properties.playlists[0].id; var _playlistUpdate = updateMaster$1(update, properties.playlists[0], dashPlaylistUnchanged); if (_playlistUpdate) { update = _playlistUpdate; if (!(label2 in update.mediaGroups[type2][group])) { update.mediaGroups[type2][group][label2] = properties; } update.mediaGroups[type2][group][label2].playlists[0] = update.playlists[id]; noChanges = false; } } }); removeOldMediaGroupLabels(update, newMaster); if (newMaster.minimumUpdatePeriod !== oldMaster.minimumUpdatePeriod) { noChanges = false; } if (noChanges) { return null; } return update; }; var equivalentSidx = function equivalentSidx2(a, b) { var neitherMap = Boolean(!a.map && !b.map); var equivalentMap = neitherMap || Boolean(a.map && b.map && a.map.byterange.offset === b.map.byterange.offset && a.map.byterange.length === b.map.byterange.length); return equivalentMap && a.uri === b.uri && a.byterange.offset === b.byterange.offset && a.byterange.length === b.byterange.length; }; var compareSidxEntry = function compareSidxEntry2(playlists, oldSidxMapping) { var newSidxMapping = {}; for (var id in playlists) { var playlist = playlists[id]; var currentSidxInfo = playlist.sidx; if (currentSidxInfo) { var key = generateSidxKey(currentSidxInfo); if (!oldSidxMapping[key]) { break; } var savedSidxInfo = oldSidxMapping[key].sidxInfo; if (equivalentSidx(savedSidxInfo, currentSidxInfo)) { newSidxMapping[key] = oldSidxMapping[key]; } } } return newSidxMapping; }; var filterChangedSidxMappings = function filterChangedSidxMappings2(master, oldSidxMapping) { var videoSidx = compareSidxEntry(master.playlists, oldSidxMapping); var mediaGroupSidx = videoSidx; forEachMediaGroup3(master, function(properties, mediaType, groupKey, labelKey) { if (properties.playlists && properties.playlists.length) { var playlists = properties.playlists; mediaGroupSidx = mergeOptions$4(mediaGroupSidx, compareSidxEntry(playlists, oldSidxMapping)); } }); return mediaGroupSidx; }; var DashPlaylistLoader = /* @__PURE__ */ function(_EventTarget) { _inheritsLoose(DashPlaylistLoader2, _EventTarget); function DashPlaylistLoader2(srcUrlOrPlaylist, vhs, options2, masterPlaylistLoader) { var _this; if (options2 === void 0) { options2 = {}; } _this = _EventTarget.call(this) || this; _this.masterPlaylistLoader_ = masterPlaylistLoader || _assertThisInitialized(_this); if (!masterPlaylistLoader) { _this.isMaster_ = true; } var _options = options2, _options$withCredenti = _options.withCredentials, withCredentials = _options$withCredenti === void 0 ? false : _options$withCredenti, _options$handleManife = _options.handleManifestRedirects, handleManifestRedirects = _options$handleManife === void 0 ? false : _options$handleManife; _this.vhs_ = vhs; _this.withCredentials = withCredentials; _this.handleManifestRedirects = handleManifestRedirects; if (!srcUrlOrPlaylist) { throw new Error("A non-empty playlist URL or object is required"); } _this.on("minimumUpdatePeriod", function() { _this.refreshXml_(); }); _this.on("mediaupdatetimeout", function() { _this.refreshMedia_(_this.media().id); }); _this.state = "HAVE_NOTHING"; _this.loadedPlaylists_ = {}; _this.logger_ = logger("DashPlaylistLoader"); if (_this.isMaster_) { _this.masterPlaylistLoader_.srcUrl = srcUrlOrPlaylist; _this.masterPlaylistLoader_.sidxMapping_ = {}; } else { _this.childPlaylist_ = srcUrlOrPlaylist; } return _this; } var _proto = DashPlaylistLoader2.prototype; _proto.requestErrored_ = function requestErrored_(err, request, startingState) { if (!this.request) { return true; } this.request = null; if (err) { this.error = typeof err === "object" && !(err instanceof Error) ? err : { status: request.status, message: "DASH request error at URL: " + request.uri, response: request.response, code: 2 }; if (startingState) { this.state = startingState; } this.trigger("error"); return true; } }; _proto.addSidxSegments_ = function addSidxSegments_(playlist, startingState, cb) { var _this2 = this; var sidxKey = playlist.sidx && generateSidxKey(playlist.sidx); if (!playlist.sidx || !sidxKey || this.masterPlaylistLoader_.sidxMapping_[sidxKey]) { this.mediaRequest_ = window_1.setTimeout(function() { return cb(false); }, 0); return; } var uri = resolveManifestRedirect(this.handleManifestRedirects, playlist.sidx.resolvedUri); var fin = function fin2(err, request) { if (_this2.requestErrored_(err, request, startingState)) { return; } var sidxMapping = _this2.masterPlaylistLoader_.sidxMapping_; var sidx; try { sidx = parseSidx_1(toUint82(request.response).subarray(8)); } catch (e) { _this2.requestErrored_(e, request, startingState); return; } sidxMapping[sidxKey] = { sidxInfo: playlist.sidx, sidx }; addSidxSegmentsToPlaylist$1(playlist, sidx, playlist.sidx.resolvedUri); return cb(true); }; this.request = containerRequest(uri, this.vhs_.xhr, function(err, request, container, bytes) { if (err) { return fin(err, request); } if (!container || container !== "mp4") { return fin({ status: request.status, message: "Unsupported " + (container || "unknown") + " container type for sidx segment at URL: " + uri, response: "", playlist, internal: true, blacklistDuration: Infinity, code: 2 }, request); } var _playlist$sidx$bytera = playlist.sidx.byterange, offset = _playlist$sidx$bytera.offset, length = _playlist$sidx$bytera.length; if (bytes.length >= length + offset) { return fin(err, { response: bytes.subarray(offset, offset + length), status: request.status, uri: request.uri }); } _this2.request = _this2.vhs_.xhr({ uri, responseType: "arraybuffer", headers: segmentXhrHeaders({ byterange: playlist.sidx.byterange }) }, fin); }); }; _proto.dispose = function dispose() { this.trigger("dispose"); this.stopRequest(); this.loadedPlaylists_ = {}; window_1.clearTimeout(this.minimumUpdatePeriodTimeout_); window_1.clearTimeout(this.mediaRequest_); window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; this.mediaRequest_ = null; this.minimumUpdatePeriodTimeout_ = null; if (this.masterPlaylistLoader_.createMupOnMedia_) { this.off("loadedmetadata", this.masterPlaylistLoader_.createMupOnMedia_); this.masterPlaylistLoader_.createMupOnMedia_ = null; } this.off(); }; _proto.hasPendingRequest = function hasPendingRequest() { return this.request || this.mediaRequest_; }; _proto.stopRequest = function stopRequest() { if (this.request) { var oldRequest = this.request; this.request = null; oldRequest.onreadystatechange = null; oldRequest.abort(); } }; _proto.media = function media(playlist) { var _this3 = this; if (!playlist) { return this.media_; } if (this.state === "HAVE_NOTHING") { throw new Error("Cannot switch media playlist from " + this.state); } var startingState = this.state; if (typeof playlist === "string") { if (!this.masterPlaylistLoader_.master.playlists[playlist]) { throw new Error("Unknown playlist URI: " + playlist); } playlist = this.masterPlaylistLoader_.master.playlists[playlist]; } var mediaChange = !this.media_ || playlist.id !== this.media_.id; if (mediaChange && this.loadedPlaylists_[playlist.id] && this.loadedPlaylists_[playlist.id].endList) { this.state = "HAVE_METADATA"; this.media_ = playlist; if (mediaChange) { this.trigger("mediachanging"); this.trigger("mediachange"); } return; } if (!mediaChange) { return; } if (this.media_) { this.trigger("mediachanging"); } this.addSidxSegments_(playlist, startingState, function(sidxChanged) { _this3.haveMetadata({ startingState, playlist }); }); }; _proto.haveMetadata = function haveMetadata(_ref2) { var startingState = _ref2.startingState, playlist = _ref2.playlist; this.state = "HAVE_METADATA"; this.loadedPlaylists_[playlist.id] = playlist; this.mediaRequest_ = null; this.refreshMedia_(playlist.id); if (startingState === "HAVE_MASTER") { this.trigger("loadedmetadata"); } else { this.trigger("mediachange"); } }; _proto.pause = function pause() { if (this.masterPlaylistLoader_.createMupOnMedia_) { this.off("loadedmetadata", this.masterPlaylistLoader_.createMupOnMedia_); this.masterPlaylistLoader_.createMupOnMedia_ = null; } this.stopRequest(); window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; if (this.isMaster_) { window_1.clearTimeout(this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_); this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_ = null; } if (this.state === "HAVE_NOTHING") { this.started = false; } }; _proto.load = function load(isFinalRendition) { var _this4 = this; window_1.clearTimeout(this.mediaUpdateTimeout); this.mediaUpdateTimeout = null; var media = this.media(); if (isFinalRendition) { var delay = media ? media.targetDuration / 2 * 1e3 : 5 * 1e3; this.mediaUpdateTimeout = window_1.setTimeout(function() { return _this4.load(); }, delay); return; } if (!this.started) { this.start(); return; } if (media && !media.endList) { if (this.isMaster_ && !this.minimumUpdatePeriodTimeout_) { this.trigger("minimumUpdatePeriod"); this.updateMinimumUpdatePeriodTimeout_(); } this.trigger("mediaupdatetimeout"); } else { this.trigger("loadedplaylist"); } }; _proto.start = function start2() { var _this5 = this; this.started = true; if (!this.isMaster_) { this.mediaRequest_ = window_1.setTimeout(function() { return _this5.haveMaster_(); }, 0); return; } this.requestMaster_(function(req, masterChanged) { _this5.haveMaster_(); if (!_this5.hasPendingRequest() && !_this5.media_) { _this5.media(_this5.masterPlaylistLoader_.master.playlists[0]); } }); }; _proto.requestMaster_ = function requestMaster_(cb) { var _this6 = this; this.request = this.vhs_.xhr({ uri: this.masterPlaylistLoader_.srcUrl, withCredentials: this.withCredentials }, function(error, req) { if (_this6.requestErrored_(error, req)) { if (_this6.state === "HAVE_NOTHING") { _this6.started = false; } return; } var masterChanged = req.responseText !== _this6.masterPlaylistLoader_.masterXml_; _this6.masterPlaylistLoader_.masterXml_ = req.responseText; if (req.responseHeaders && req.responseHeaders.date) { _this6.masterLoaded_ = Date.parse(req.responseHeaders.date); } else { _this6.masterLoaded_ = Date.now(); } _this6.masterPlaylistLoader_.srcUrl = resolveManifestRedirect(_this6.handleManifestRedirects, _this6.masterPlaylistLoader_.srcUrl, req); if (masterChanged) { _this6.handleMaster_(); _this6.syncClientServerClock_(function() { return cb(req, masterChanged); }); return; } return cb(req, masterChanged); }); }; _proto.syncClientServerClock_ = function syncClientServerClock_(done) { var _this7 = this; var utcTiming = parseUTCTiming(this.masterPlaylistLoader_.masterXml_); if (utcTiming === null) { this.masterPlaylistLoader_.clientOffset_ = this.masterLoaded_ - Date.now(); return done(); } if (utcTiming.method === "DIRECT") { this.masterPlaylistLoader_.clientOffset_ = utcTiming.value - Date.now(); return done(); } this.request = this.vhs_.xhr({ uri: resolveUrl4(this.masterPlaylistLoader_.srcUrl, utcTiming.value), method: utcTiming.method, withCredentials: this.withCredentials }, function(error, req) { if (!_this7.request) { return; } if (error) { _this7.masterPlaylistLoader_.clientOffset_ = _this7.masterLoaded_ - Date.now(); return done(); } var serverTime; if (utcTiming.method === "HEAD") { if (!req.responseHeaders || !req.responseHeaders.date) { serverTime = _this7.masterLoaded_; } else { serverTime = Date.parse(req.responseHeaders.date); } } else { serverTime = Date.parse(req.responseText); } _this7.masterPlaylistLoader_.clientOffset_ = serverTime - Date.now(); done(); }); }; _proto.haveMaster_ = function haveMaster_() { this.state = "HAVE_MASTER"; if (this.isMaster_) { this.trigger("loadedplaylist"); } else if (!this.media_) { this.media(this.childPlaylist_); } }; _proto.handleMaster_ = function handleMaster_() { this.mediaRequest_ = null; var oldMaster = this.masterPlaylistLoader_.master; var newMaster = parseMasterXml({ masterXml: this.masterPlaylistLoader_.masterXml_, srcUrl: this.masterPlaylistLoader_.srcUrl, clientOffset: this.masterPlaylistLoader_.clientOffset_, sidxMapping: this.masterPlaylistLoader_.sidxMapping_, previousManifest: oldMaster }); if (oldMaster) { newMaster = updateMaster2(oldMaster, newMaster, this.masterPlaylistLoader_.sidxMapping_); } this.masterPlaylistLoader_.master = newMaster ? newMaster : oldMaster; var location = this.masterPlaylistLoader_.master.locations && this.masterPlaylistLoader_.master.locations[0]; if (location && location !== this.masterPlaylistLoader_.srcUrl) { this.masterPlaylistLoader_.srcUrl = location; } if (!oldMaster || newMaster && newMaster.minimumUpdatePeriod !== oldMaster.minimumUpdatePeriod) { this.updateMinimumUpdatePeriodTimeout_(); } return Boolean(newMaster); }; _proto.updateMinimumUpdatePeriodTimeout_ = function updateMinimumUpdatePeriodTimeout_() { var mpl = this.masterPlaylistLoader_; if (mpl.createMupOnMedia_) { mpl.off("loadedmetadata", mpl.createMupOnMedia_); mpl.createMupOnMedia_ = null; } if (mpl.minimumUpdatePeriodTimeout_) { window_1.clearTimeout(mpl.minimumUpdatePeriodTimeout_); mpl.minimumUpdatePeriodTimeout_ = null; } var mup = mpl.master && mpl.master.minimumUpdatePeriod; if (mup === 0) { if (mpl.media()) { mup = mpl.media().targetDuration * 1e3; } else { mpl.createMupOnMedia_ = mpl.updateMinimumUpdatePeriodTimeout_; mpl.one("loadedmetadata", mpl.createMupOnMedia_); } } if (typeof mup !== "number" || mup <= 0) { if (mup < 0) { this.logger_("found invalid minimumUpdatePeriod of " + mup + ", not setting a timeout"); } return; } this.createMUPTimeout_(mup); }; _proto.createMUPTimeout_ = function createMUPTimeout_(mup) { var mpl = this.masterPlaylistLoader_; mpl.minimumUpdatePeriodTimeout_ = window_1.setTimeout(function() { mpl.minimumUpdatePeriodTimeout_ = null; mpl.trigger("minimumUpdatePeriod"); mpl.createMUPTimeout_(mup); }, mup); }; _proto.refreshXml_ = function refreshXml_() { var _this8 = this; this.requestMaster_(function(req, masterChanged) { if (!masterChanged) { return; } if (_this8.media_) { _this8.media_ = _this8.masterPlaylistLoader_.master.playlists[_this8.media_.id]; } _this8.masterPlaylistLoader_.sidxMapping_ = filterChangedSidxMappings(_this8.masterPlaylistLoader_.master, _this8.masterPlaylistLoader_.sidxMapping_); _this8.addSidxSegments_(_this8.media(), _this8.state, function(sidxChanged) { _this8.refreshMedia_(_this8.media().id); }); }); }; _proto.refreshMedia_ = function refreshMedia_(mediaID) { var _this9 = this; if (!mediaID) { throw new Error("refreshMedia_ must take a media id"); } if (this.media_ && this.isMaster_) { this.handleMaster_(); } var playlists = this.masterPlaylistLoader_.master.playlists; var mediaChanged = !this.media_ || this.media_ !== playlists[mediaID]; if (mediaChanged) { this.media_ = playlists[mediaID]; } else { this.trigger("playlistunchanged"); } if (!this.mediaUpdateTimeout) { var createMediaUpdateTimeout = function createMediaUpdateTimeout2() { if (_this9.media().endList) { return; } _this9.mediaUpdateTimeout = window_1.setTimeout(function() { _this9.trigger("mediaupdatetimeout"); createMediaUpdateTimeout2(); }, refreshDelay(_this9.media(), Boolean(mediaChanged))); }; createMediaUpdateTimeout(); } this.trigger("loadedplaylist"); }; return DashPlaylistLoader2; }(EventTarget2); var Config = { GOAL_BUFFER_LENGTH: 30, MAX_GOAL_BUFFER_LENGTH: 60, BACK_BUFFER_LENGTH: 30, GOAL_BUFFER_LENGTH_RATE: 1, INITIAL_BANDWIDTH: 4194304, BANDWIDTH_VARIANCE: 1.2, BUFFER_LOW_WATER_LINE: 0, MAX_BUFFER_LOW_WATER_LINE: 30, EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE: 16, BUFFER_LOW_WATER_LINE_RATE: 1, BUFFER_HIGH_WATER_LINE: 30 }; var stringToArrayBuffer = function stringToArrayBuffer2(string) { var view = new Uint8Array(new ArrayBuffer(string.length)); for (var i2 = 0; i2 < string.length; i2++) { view[i2] = string.charCodeAt(i2); } return view.buffer; }; var browserWorkerPolyFill = function browserWorkerPolyFill2(workerObj) { workerObj.on = workerObj.addEventListener; workerObj.off = workerObj.removeEventListener; return workerObj; }; var createObjectURL = function createObjectURL2(str) { try { return URL.createObjectURL(new Blob([str], { type: "application/javascript" })); } catch (e) { var blob = new BlobBuilder(); blob.append(str); return URL.createObjectURL(blob.getBlob()); } }; var factory = function factory2(code) { return function() { var objectUrl = createObjectURL(code); var worker = browserWorkerPolyFill(new Worker(objectUrl)); worker.objURL = objectUrl; var terminate = worker.terminate; worker.on = worker.addEventListener; worker.off = worker.removeEventListener; worker.terminate = function() { URL.revokeObjectURL(objectUrl); return terminate.call(this); }; return worker; }; }; var transform = function transform2(code) { return "var browserWorkerPolyFill = " + browserWorkerPolyFill.toString() + ";\nbrowserWorkerPolyFill(self);\n" + code; }; var getWorkerString = function getWorkerString2(fn2) { return fn2.toString().replace(/^function.+?{/, "").slice(0, -1); }; var workerCode$1 = transform(getWorkerString(function() { var Stream2 = function Stream3() { this.init = function() { var listeners = {}; this.on = function(type3, listener) { if (!listeners[type3]) { listeners[type3] = []; } listeners[type3] = listeners[type3].concat(listener); }; this.off = function(type3, listener) { var index2; if (!listeners[type3]) { return false; } index2 = listeners[type3].indexOf(listener); listeners[type3] = listeners[type3].slice(); listeners[type3].splice(index2, 1); return index2 > -1; }; this.trigger = function(type3) { var callbacks, i2, length, args; callbacks = listeners[type3]; if (!callbacks) { return; } if (arguments.length === 2) { length = callbacks.length; for (i2 = 0; i2 < length; ++i2) { callbacks[i2].call(this, arguments[1]); } } else { args = []; i2 = arguments.length; for (i2 = 1; i2 < arguments.length; ++i2) { args.push(arguments[i2]); } length = callbacks.length; for (i2 = 0; i2 < length; ++i2) { callbacks[i2].apply(this, args); } } }; this.dispose = function() { listeners = {}; }; }; }; Stream2.prototype.pipe = function(destination2) { this.on("data", function(data) { destination2.push(data); }); this.on("done", function(flushSource) { destination2.flush(flushSource); }); this.on("partialdone", function(flushSource) { destination2.partialFlush(flushSource); }); this.on("endedtimeline", function(flushSource) { destination2.endTimeline(flushSource); }); this.on("reset", function(flushSource) { destination2.reset(flushSource); }); return destination2; }; Stream2.prototype.push = function(data) { this.trigger("data", data); }; Stream2.prototype.flush = function(flushSource) { this.trigger("done", flushSource); }; Stream2.prototype.partialFlush = function(flushSource) { this.trigger("partialdone", flushSource); }; Stream2.prototype.endTimeline = function(flushSource) { this.trigger("endedtimeline", flushSource); }; Stream2.prototype.reset = function(flushSource) { this.trigger("reset", flushSource); }; var stream = Stream2; var MAX_UINT32$12 = Math.pow(2, 32); var getUint64$22 = function getUint643(uint8) { var dv = new DataView(uint8.buffer, uint8.byteOffset, uint8.byteLength); var value; if (dv.getBigUint64) { value = dv.getBigUint64(0); if (value < Number.MAX_SAFE_INTEGER) { return Number(value); } return value; } return dv.getUint32(0) * MAX_UINT32$12 + dv.getUint32(4); }; var numbers2 = { getUint64: getUint64$22, MAX_UINT32: MAX_UINT32$12 }; var MAX_UINT322 = numbers2.MAX_UINT32; var box, dinf, esds, ftyp, mdat, mfhd, minf, moof, moov, mvex, mvhd, trak, tkhd, mdia, mdhd, hdlr, sdtp, stbl, stsd, traf, trex, trun$1, types, MAJOR_BRAND, MINOR_VERSION, AVC1_BRAND, VIDEO_HDLR, AUDIO_HDLR, HDLR_TYPES, VMHD, SMHD, DREF, STCO, STSC, STSZ, STTS; (function() { var i2; types = { avc1: [], avcC: [], btrt: [], dinf: [], dref: [], esds: [], ftyp: [], hdlr: [], mdat: [], mdhd: [], mdia: [], mfhd: [], minf: [], moof: [], moov: [], mp4a: [], mvex: [], mvhd: [], pasp: [], sdtp: [], smhd: [], stbl: [], stco: [], stsc: [], stsd: [], stsz: [], stts: [], styp: [], tfdt: [], tfhd: [], traf: [], trak: [], trun: [], trex: [], tkhd: [], vmhd: [] }; if (typeof Uint8Array === "undefined") { return; } for (i2 in types) { if (types.hasOwnProperty(i2)) { types[i2] = [i2.charCodeAt(0), i2.charCodeAt(1), i2.charCodeAt(2), i2.charCodeAt(3)]; } } MAJOR_BRAND = new Uint8Array(["i".charCodeAt(0), "s".charCodeAt(0), "o".charCodeAt(0), "m".charCodeAt(0)]); AVC1_BRAND = new Uint8Array(["a".charCodeAt(0), "v".charCodeAt(0), "c".charCodeAt(0), "1".charCodeAt(0)]); MINOR_VERSION = new Uint8Array([0, 0, 0, 1]); VIDEO_HDLR = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0 ]); AUDIO_HDLR = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0 ]); HDLR_TYPES = { video: VIDEO_HDLR, audio: AUDIO_HDLR }; DREF = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1 ]); SMHD = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0 ]); STCO = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0 ]); STSC = STCO; STSZ = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]); STTS = STCO; VMHD = new Uint8Array([ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ]); })(); box = function box2(type3) { var payload = [], size = 0, i2, result, view; for (i2 = 1; i2 < arguments.length; i2++) { payload.push(arguments[i2]); } i2 = payload.length; while (i2--) { size += payload[i2].byteLength; } result = new Uint8Array(size + 8); view = new DataView(result.buffer, result.byteOffset, result.byteLength); view.setUint32(0, result.byteLength); result.set(type3, 4); for (i2 = 0, size = 8; i2 < payload.length; i2++) { result.set(payload[i2], size); size += payload[i2].byteLength; } return result; }; dinf = function dinf2() { return box(types.dinf, box(types.dref, DREF)); }; esds = function esds2(track) { return box(types.esds, new Uint8Array([ 0, 0, 0, 0, 3, 25, 0, 0, 0, 4, 17, 64, 21, 0, 6, 0, 0, 0, 218, 192, 0, 0, 218, 192, 5, 2, track.audioobjecttype << 3 | track.samplingfrequencyindex >>> 1, track.samplingfrequencyindex << 7 | track.channelcount << 3, 6, 1, 2 ])); }; ftyp = function ftyp2() { return box(types.ftyp, MAJOR_BRAND, MINOR_VERSION, MAJOR_BRAND, AVC1_BRAND); }; hdlr = function hdlr2(type3) { return box(types.hdlr, HDLR_TYPES[type3]); }; mdat = function mdat2(data) { return box(types.mdat, data); }; mdhd = function mdhd2(track) { var result = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 1, 95, 144, track.duration >>> 24 & 255, track.duration >>> 16 & 255, track.duration >>> 8 & 255, track.duration & 255, 85, 196, 0, 0 ]); if (track.samplerate) { result[12] = track.samplerate >>> 24 & 255; result[13] = track.samplerate >>> 16 & 255; result[14] = track.samplerate >>> 8 & 255; result[15] = track.samplerate & 255; } return box(types.mdhd, result); }; mdia = function mdia2(track) { return box(types.mdia, mdhd(track), hdlr(track.type), minf(track)); }; mfhd = function mfhd2(sequenceNumber) { return box(types.mfhd, new Uint8Array([ 0, 0, 0, 0, (sequenceNumber & 4278190080) >> 24, (sequenceNumber & 16711680) >> 16, (sequenceNumber & 65280) >> 8, sequenceNumber & 255 ])); }; minf = function minf2(track) { return box(types.minf, track.type === "video" ? box(types.vmhd, VMHD) : box(types.smhd, SMHD), dinf(), stbl(track)); }; moof = function moof2(sequenceNumber, tracks) { var trackFragments = [], i2 = tracks.length; while (i2--) { trackFragments[i2] = traf(tracks[i2]); } return box.apply(null, [types.moof, mfhd(sequenceNumber)].concat(trackFragments)); }; moov = function moov2(tracks) { var i2 = tracks.length, boxes = []; while (i2--) { boxes[i2] = trak(tracks[i2]); } return box.apply(null, [types.moov, mvhd(4294967295)].concat(boxes).concat(mvex(tracks))); }; mvex = function mvex2(tracks) { var i2 = tracks.length, boxes = []; while (i2--) { boxes[i2] = trex(tracks[i2]); } return box.apply(null, [types.mvex].concat(boxes)); }; mvhd = function mvhd2(duration5) { var bytes = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 95, 144, (duration5 & 4278190080) >> 24, (duration5 & 16711680) >> 16, (duration5 & 65280) >> 8, duration5 & 255, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255 ]); return box(types.mvhd, bytes); }; sdtp = function sdtp2(track) { var samples = track.samples || [], bytes = new Uint8Array(4 + samples.length), flags, i2; for (i2 = 0; i2 < samples.length; i2++) { flags = samples[i2].flags; bytes[i2 + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy; } return box(types.sdtp, bytes); }; stbl = function stbl2(track) { return box(types.stbl, stsd(track), box(types.stts, STTS), box(types.stsc, STSC), box(types.stsz, STSZ), box(types.stco, STCO)); }; (function() { var videoSample, audioSample; stsd = function stsd2(track) { return box(types.stsd, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1 ]), track.type === "video" ? videoSample(track) : audioSample(track)); }; videoSample = function videoSample2(track) { var sps = track.sps || [], pps = track.pps || [], sequenceParameterSets = [], pictureParameterSets = [], i2, avc1Box; for (i2 = 0; i2 < sps.length; i2++) { sequenceParameterSets.push((sps[i2].byteLength & 65280) >>> 8); sequenceParameterSets.push(sps[i2].byteLength & 255); sequenceParameterSets = sequenceParameterSets.concat(Array.prototype.slice.call(sps[i2])); } for (i2 = 0; i2 < pps.length; i2++) { pictureParameterSets.push((pps[i2].byteLength & 65280) >>> 8); pictureParameterSets.push(pps[i2].byteLength & 255); pictureParameterSets = pictureParameterSets.concat(Array.prototype.slice.call(pps[i2])); } avc1Box = [types.avc1, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (track.width & 65280) >> 8, track.width & 255, (track.height & 65280) >> 8, track.height & 255, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 19, 118, 105, 100, 101, 111, 106, 115, 45, 99, 111, 110, 116, 114, 105, 98, 45, 104, 108, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 17 ]), box(types.avcC, new Uint8Array([ 1, track.profileIdc, track.profileCompatibility, track.levelIdc, 255 ].concat( [sps.length], sequenceParameterSets, [pps.length], pictureParameterSets ))), box(types.btrt, new Uint8Array([ 0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192 ]))]; if (track.sarRatio) { var hSpacing = track.sarRatio[0], vSpacing = track.sarRatio[1]; avc1Box.push(box(types.pasp, new Uint8Array([(hSpacing & 4278190080) >> 24, (hSpacing & 16711680) >> 16, (hSpacing & 65280) >> 8, hSpacing & 255, (vSpacing & 4278190080) >> 24, (vSpacing & 16711680) >> 16, (vSpacing & 65280) >> 8, vSpacing & 255]))); } return box.apply(null, avc1Box); }; audioSample = function audioSample2(track) { return box(types.mp4a, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, (track.channelcount & 65280) >> 8, track.channelcount & 255, (track.samplesize & 65280) >> 8, track.samplesize & 255, 0, 0, 0, 0, (track.samplerate & 65280) >> 8, track.samplerate & 255, 0, 0 ]), esds(track)); }; })(); tkhd = function tkhd2(track) { var result = new Uint8Array([ 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, (track.id & 4278190080) >> 24, (track.id & 16711680) >> 16, (track.id & 65280) >> 8, track.id & 255, 0, 0, 0, 0, (track.duration & 4278190080) >> 24, (track.duration & 16711680) >> 16, (track.duration & 65280) >> 8, track.duration & 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, (track.width & 65280) >> 8, track.width & 255, 0, 0, (track.height & 65280) >> 8, track.height & 255, 0, 0 ]); return box(types.tkhd, result); }; traf = function traf2(track) { var trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun, sampleDependencyTable, dataOffset, upperWordBaseMediaDecodeTime, lowerWordBaseMediaDecodeTime; trackFragmentHeader = box(types.tfhd, new Uint8Array([ 0, 0, 0, 58, (track.id & 4278190080) >> 24, (track.id & 16711680) >> 16, (track.id & 65280) >> 8, track.id & 255, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ])); upperWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime / MAX_UINT322); lowerWordBaseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime % MAX_UINT322); trackFragmentDecodeTime = box(types.tfdt, new Uint8Array([ 1, 0, 0, 0, upperWordBaseMediaDecodeTime >>> 24 & 255, upperWordBaseMediaDecodeTime >>> 16 & 255, upperWordBaseMediaDecodeTime >>> 8 & 255, upperWordBaseMediaDecodeTime & 255, lowerWordBaseMediaDecodeTime >>> 24 & 255, lowerWordBaseMediaDecodeTime >>> 16 & 255, lowerWordBaseMediaDecodeTime >>> 8 & 255, lowerWordBaseMediaDecodeTime & 255 ])); dataOffset = 32 + 20 + 8 + 16 + 8 + 8; if (track.type === "audio") { trackFragmentRun = trun$1(track, dataOffset); return box(types.traf, trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun); } sampleDependencyTable = sdtp(track); trackFragmentRun = trun$1(track, sampleDependencyTable.length + dataOffset); return box(types.traf, trackFragmentHeader, trackFragmentDecodeTime, trackFragmentRun, sampleDependencyTable); }; trak = function trak2(track) { track.duration = track.duration || 4294967295; return box(types.trak, tkhd(track), mdia(track)); }; trex = function trex2(track) { var result = new Uint8Array([ 0, 0, 0, 0, (track.id & 4278190080) >> 24, (track.id & 16711680) >> 16, (track.id & 65280) >> 8, track.id & 255, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1 ]); if (track.type !== "video") { result[result.length - 1] = 0; } return box(types.trex, result); }; (function() { var audioTrun, videoTrun, trunHeader; trunHeader = function trunHeader2(samples, offset) { var durationPresent = 0, sizePresent = 0, flagsPresent = 0, compositionTimeOffset = 0; if (samples.length) { if (samples[0].duration !== void 0) { durationPresent = 1; } if (samples[0].size !== void 0) { sizePresent = 2; } if (samples[0].flags !== void 0) { flagsPresent = 4; } if (samples[0].compositionTimeOffset !== void 0) { compositionTimeOffset = 8; } } return [ 0, 0, durationPresent | sizePresent | flagsPresent | compositionTimeOffset, 1, (samples.length & 4278190080) >>> 24, (samples.length & 16711680) >>> 16, (samples.length & 65280) >>> 8, samples.length & 255, (offset & 4278190080) >>> 24, (offset & 16711680) >>> 16, (offset & 65280) >>> 8, offset & 255 ]; }; videoTrun = function videoTrun2(track, offset) { var bytesOffest, bytes, header, samples, sample, i2; samples = track.samples || []; offset += 8 + 12 + 16 * samples.length; header = trunHeader(samples, offset); bytes = new Uint8Array(header.length + samples.length * 16); bytes.set(header); bytesOffest = header.length; for (i2 = 0; i2 < samples.length; i2++) { sample = samples[i2]; bytes[bytesOffest++] = (sample.duration & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.duration & 16711680) >>> 16; bytes[bytesOffest++] = (sample.duration & 65280) >>> 8; bytes[bytesOffest++] = sample.duration & 255; bytes[bytesOffest++] = (sample.size & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.size & 16711680) >>> 16; bytes[bytesOffest++] = (sample.size & 65280) >>> 8; bytes[bytesOffest++] = sample.size & 255; bytes[bytesOffest++] = sample.flags.isLeading << 2 | sample.flags.dependsOn; bytes[bytesOffest++] = sample.flags.isDependedOn << 6 | sample.flags.hasRedundancy << 4 | sample.flags.paddingValue << 1 | sample.flags.isNonSyncSample; bytes[bytesOffest++] = sample.flags.degradationPriority & 240 << 8; bytes[bytesOffest++] = sample.flags.degradationPriority & 15; bytes[bytesOffest++] = (sample.compositionTimeOffset & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.compositionTimeOffset & 16711680) >>> 16; bytes[bytesOffest++] = (sample.compositionTimeOffset & 65280) >>> 8; bytes[bytesOffest++] = sample.compositionTimeOffset & 255; } return box(types.trun, bytes); }; audioTrun = function audioTrun2(track, offset) { var bytes, bytesOffest, header, samples, sample, i2; samples = track.samples || []; offset += 8 + 12 + 8 * samples.length; header = trunHeader(samples, offset); bytes = new Uint8Array(header.length + samples.length * 8); bytes.set(header); bytesOffest = header.length; for (i2 = 0; i2 < samples.length; i2++) { sample = samples[i2]; bytes[bytesOffest++] = (sample.duration & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.duration & 16711680) >>> 16; bytes[bytesOffest++] = (sample.duration & 65280) >>> 8; bytes[bytesOffest++] = sample.duration & 255; bytes[bytesOffest++] = (sample.size & 4278190080) >>> 24; bytes[bytesOffest++] = (sample.size & 16711680) >>> 16; bytes[bytesOffest++] = (sample.size & 65280) >>> 8; bytes[bytesOffest++] = sample.size & 255; } return box(types.trun, bytes); }; trun$1 = function trun2(track, offset) { if (track.type === "audio") { return audioTrun(track, offset); } return videoTrun(track, offset); }; })(); var mp4Generator = { ftyp, mdat, moof, moov, initSegment: function initSegment(tracks) { var fileType = ftyp(), movie = moov(tracks), result; result = new Uint8Array(fileType.byteLength + movie.byteLength); result.set(fileType); result.set(movie, fileType.byteLength); return result; } }; var groupNalsIntoFrames = function groupNalsIntoFrames2(nalUnits) { var i2, currentNal, currentFrame = [], frames = []; frames.byteLength = 0; frames.nalCount = 0; frames.duration = 0; currentFrame.byteLength = 0; for (i2 = 0; i2 < nalUnits.length; i2++) { currentNal = nalUnits[i2]; if (currentNal.nalUnitType === "access_unit_delimiter_rbsp") { if (currentFrame.length) { currentFrame.duration = currentNal.dts - currentFrame.dts; frames.byteLength += currentFrame.byteLength; frames.nalCount += currentFrame.length; frames.duration += currentFrame.duration; frames.push(currentFrame); } currentFrame = [currentNal]; currentFrame.byteLength = currentNal.data.byteLength; currentFrame.pts = currentNal.pts; currentFrame.dts = currentNal.dts; } else { if (currentNal.nalUnitType === "slice_layer_without_partitioning_rbsp_idr") { currentFrame.keyFrame = true; } currentFrame.duration = currentNal.dts - currentFrame.dts; currentFrame.byteLength += currentNal.data.byteLength; currentFrame.push(currentNal); } } if (frames.length && (!currentFrame.duration || currentFrame.duration <= 0)) { currentFrame.duration = frames[frames.length - 1].duration; } frames.byteLength += currentFrame.byteLength; frames.nalCount += currentFrame.length; frames.duration += currentFrame.duration; frames.push(currentFrame); return frames; }; var groupFramesIntoGops = function groupFramesIntoGops2(frames) { var i2, currentFrame, currentGop = [], gops = []; currentGop.byteLength = 0; currentGop.nalCount = 0; currentGop.duration = 0; currentGop.pts = frames[0].pts; currentGop.dts = frames[0].dts; gops.byteLength = 0; gops.nalCount = 0; gops.duration = 0; gops.pts = frames[0].pts; gops.dts = frames[0].dts; for (i2 = 0; i2 < frames.length; i2++) { currentFrame = frames[i2]; if (currentFrame.keyFrame) { if (currentGop.length) { gops.push(currentGop); gops.byteLength += currentGop.byteLength; gops.nalCount += currentGop.nalCount; gops.duration += currentGop.duration; } currentGop = [currentFrame]; currentGop.nalCount = currentFrame.length; currentGop.byteLength = currentFrame.byteLength; currentGop.pts = currentFrame.pts; currentGop.dts = currentFrame.dts; currentGop.duration = currentFrame.duration; } else { currentGop.duration += currentFrame.duration; currentGop.nalCount += currentFrame.length; currentGop.byteLength += currentFrame.byteLength; currentGop.push(currentFrame); } } if (gops.length && currentGop.duration <= 0) { currentGop.duration = gops[gops.length - 1].duration; } gops.byteLength += currentGop.byteLength; gops.nalCount += currentGop.nalCount; gops.duration += currentGop.duration; gops.push(currentGop); return gops; }; var extendFirstKeyFrame = function extendFirstKeyFrame2(gops) { var currentGop; if (!gops[0][0].keyFrame && gops.length > 1) { currentGop = gops.shift(); gops.byteLength -= currentGop.byteLength; gops.nalCount -= currentGop.nalCount; gops[0][0].dts = currentGop.dts; gops[0][0].pts = currentGop.pts; gops[0][0].duration += currentGop.duration; } return gops; }; var createDefaultSample = function createDefaultSample2() { return { size: 0, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0, degradationPriority: 0, isNonSyncSample: 1 } }; }; var sampleForFrame = function sampleForFrame2(frame, dataOffset) { var sample = createDefaultSample(); sample.dataOffset = dataOffset; sample.compositionTimeOffset = frame.pts - frame.dts; sample.duration = frame.duration; sample.size = 4 * frame.length; sample.size += frame.byteLength; if (frame.keyFrame) { sample.flags.dependsOn = 2; sample.flags.isNonSyncSample = 0; } return sample; }; var generateSampleTable$1 = function generateSampleTable2(gops, baseDataOffset) { var h2, i2, sample, currentGop, currentFrame, dataOffset = baseDataOffset || 0, samples = []; for (h2 = 0; h2 < gops.length; h2++) { currentGop = gops[h2]; for (i2 = 0; i2 < currentGop.length; i2++) { currentFrame = currentGop[i2]; sample = sampleForFrame(currentFrame, dataOffset); dataOffset += sample.size; samples.push(sample); } } return samples; }; var concatenateNalData = function concatenateNalData2(gops) { var h2, i2, j, currentGop, currentFrame, currentNal, dataOffset = 0, nalsByteLength = gops.byteLength, numberOfNals = gops.nalCount, totalByteLength = nalsByteLength + 4 * numberOfNals, data = new Uint8Array(totalByteLength), view = new DataView(data.buffer); for (h2 = 0; h2 < gops.length; h2++) { currentGop = gops[h2]; for (i2 = 0; i2 < currentGop.length; i2++) { currentFrame = currentGop[i2]; for (j = 0; j < currentFrame.length; j++) { currentNal = currentFrame[j]; view.setUint32(dataOffset, currentNal.data.byteLength); dataOffset += 4; data.set(currentNal.data, dataOffset); dataOffset += currentNal.data.byteLength; } } } return data; }; var generateSampleTableForFrame = function generateSampleTableForFrame2(frame, baseDataOffset) { var sample, dataOffset = baseDataOffset || 0, samples = []; sample = sampleForFrame(frame, dataOffset); samples.push(sample); return samples; }; var concatenateNalDataForFrame = function concatenateNalDataForFrame2(frame) { var i2, currentNal, dataOffset = 0, nalsByteLength = frame.byteLength, numberOfNals = frame.length, totalByteLength = nalsByteLength + 4 * numberOfNals, data = new Uint8Array(totalByteLength), view = new DataView(data.buffer); for (i2 = 0; i2 < frame.length; i2++) { currentNal = frame[i2]; view.setUint32(dataOffset, currentNal.data.byteLength); dataOffset += 4; data.set(currentNal.data, dataOffset); dataOffset += currentNal.data.byteLength; } return data; }; var frameUtils = { groupNalsIntoFrames, groupFramesIntoGops, extendFirstKeyFrame, generateSampleTable: generateSampleTable$1, concatenateNalData, generateSampleTableForFrame, concatenateNalDataForFrame }; var highPrefix = [33, 16, 5, 32, 164, 27]; var lowPrefix = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252]; var zeroFill = function zeroFill2(count) { var a = []; while (count--) { a.push(0); } return a; }; var makeTable = function makeTable2(metaTable) { return Object.keys(metaTable).reduce(function(obj, key) { obj[key] = new Uint8Array(metaTable[key].reduce(function(arr, part) { return arr.concat(part); }, [])); return obj; }, {}); }; var silence; var silence_1 = function silence_12() { if (!silence) { var coneOfSilence = { 96e3: [highPrefix, [227, 64], zeroFill(154), [56]], 88200: [highPrefix, [231], zeroFill(170), [56]], 64e3: [highPrefix, [248, 192], zeroFill(240), [56]], 48e3: [highPrefix, [255, 192], zeroFill(268), [55, 148, 128], zeroFill(54), [112]], 44100: [highPrefix, [255, 192], zeroFill(268), [55, 163, 128], zeroFill(84), [112]], 32e3: [highPrefix, [255, 192], zeroFill(268), [55, 234], zeroFill(226), [112]], 24e3: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 112], zeroFill(126), [224]], 16e3: [highPrefix, [255, 192], zeroFill(268), [55, 255, 128], zeroFill(268), [111, 255], zeroFill(269), [223, 108], zeroFill(195), [1, 192]], 12e3: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 253, 128], zeroFill(259), [56]], 11025: [lowPrefix, zeroFill(268), [3, 127, 248], zeroFill(268), [6, 255, 240], zeroFill(268), [13, 255, 224], zeroFill(268), [27, 255, 192], zeroFill(268), [55, 175, 128], zeroFill(108), [112]], 8e3: [lowPrefix, zeroFill(268), [3, 121, 16], zeroFill(47), [7]] }; silence = makeTable(coneOfSilence); } return silence; }; var ONE_SECOND_IN_TS$4 = 9e4, secondsToVideoTs2, secondsToAudioTs2, videoTsToSeconds2, audioTsToSeconds2, audioTsToVideoTs2, videoTsToAudioTs2, metadataTsToSeconds2; secondsToVideoTs2 = function secondsToVideoTs3(seconds) { return seconds * ONE_SECOND_IN_TS$4; }; secondsToAudioTs2 = function secondsToAudioTs3(seconds, sampleRate) { return seconds * sampleRate; }; videoTsToSeconds2 = function videoTsToSeconds3(timestamp) { return timestamp / ONE_SECOND_IN_TS$4; }; audioTsToSeconds2 = function audioTsToSeconds3(timestamp, sampleRate) { return timestamp / sampleRate; }; audioTsToVideoTs2 = function audioTsToVideoTs3(timestamp, sampleRate) { return secondsToVideoTs2(audioTsToSeconds2(timestamp, sampleRate)); }; videoTsToAudioTs2 = function videoTsToAudioTs3(timestamp, sampleRate) { return secondsToAudioTs2(videoTsToSeconds2(timestamp), sampleRate); }; metadataTsToSeconds2 = function metadataTsToSeconds3(timestamp, timelineStartPts, keepOriginalTimestamps) { return videoTsToSeconds2(keepOriginalTimestamps ? timestamp : timestamp - timelineStartPts); }; var clock2 = { ONE_SECOND_IN_TS: ONE_SECOND_IN_TS$4, secondsToVideoTs: secondsToVideoTs2, secondsToAudioTs: secondsToAudioTs2, videoTsToSeconds: videoTsToSeconds2, audioTsToSeconds: audioTsToSeconds2, audioTsToVideoTs: audioTsToVideoTs2, videoTsToAudioTs: videoTsToAudioTs2, metadataTsToSeconds: metadataTsToSeconds2 }; var sumFrameByteLengths = function sumFrameByteLengths2(array) { var i2, currentObj, sum = 0; for (i2 = 0; i2 < array.length; i2++) { currentObj = array[i2]; sum += currentObj.data.byteLength; } return sum; }; var prefixWithSilence = function prefixWithSilence2(track, frames, audioAppendStartTs, videoBaseMediaDecodeTime) { var baseMediaDecodeTimeTs, frameDuration = 0, audioGapDuration = 0, audioFillFrameCount = 0, audioFillDuration = 0, silentFrame, i2, firstFrame; if (!frames.length) { return; } baseMediaDecodeTimeTs = clock2.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate); frameDuration = Math.ceil(clock2.ONE_SECOND_IN_TS / (track.samplerate / 1024)); if (audioAppendStartTs && videoBaseMediaDecodeTime) { audioGapDuration = baseMediaDecodeTimeTs - Math.max(audioAppendStartTs, videoBaseMediaDecodeTime); audioFillFrameCount = Math.floor(audioGapDuration / frameDuration); audioFillDuration = audioFillFrameCount * frameDuration; } if (audioFillFrameCount < 1 || audioFillDuration > clock2.ONE_SECOND_IN_TS / 2) { return; } silentFrame = silence_1()[track.samplerate]; if (!silentFrame) { silentFrame = frames[0].data; } for (i2 = 0; i2 < audioFillFrameCount; i2++) { firstFrame = frames[0]; frames.splice(0, 0, { data: silentFrame, dts: firstFrame.dts - frameDuration, pts: firstFrame.pts - frameDuration }); } track.baseMediaDecodeTime -= Math.floor(clock2.videoTsToAudioTs(audioFillDuration, track.samplerate)); return audioFillDuration; }; var trimAdtsFramesByEarliestDts = function trimAdtsFramesByEarliestDts2(adtsFrames, track, earliestAllowedDts) { if (track.minSegmentDts >= earliestAllowedDts) { return adtsFrames; } track.minSegmentDts = Infinity; return adtsFrames.filter(function(currentFrame) { if (currentFrame.dts >= earliestAllowedDts) { track.minSegmentDts = Math.min(track.minSegmentDts, currentFrame.dts); track.minSegmentPts = track.minSegmentDts; return true; } return false; }); }; var generateSampleTable = function generateSampleTable2(frames) { var i2, currentFrame, samples = []; for (i2 = 0; i2 < frames.length; i2++) { currentFrame = frames[i2]; samples.push({ size: currentFrame.data.byteLength, duration: 1024 }); } return samples; }; var concatenateFrameData = function concatenateFrameData2(frames) { var i2, currentFrame, dataOffset = 0, data = new Uint8Array(sumFrameByteLengths(frames)); for (i2 = 0; i2 < frames.length; i2++) { currentFrame = frames[i2]; data.set(currentFrame.data, dataOffset); dataOffset += currentFrame.data.byteLength; } return data; }; var audioFrameUtils = { prefixWithSilence, trimAdtsFramesByEarliestDts, generateSampleTable, concatenateFrameData }; var ONE_SECOND_IN_TS$3 = clock2.ONE_SECOND_IN_TS; var collectDtsInfo = function collectDtsInfo2(track, data) { if (typeof data.pts === "number") { if (track.timelineStartInfo.pts === void 0) { track.timelineStartInfo.pts = data.pts; } if (track.minSegmentPts === void 0) { track.minSegmentPts = data.pts; } else { track.minSegmentPts = Math.min(track.minSegmentPts, data.pts); } if (track.maxSegmentPts === void 0) { track.maxSegmentPts = data.pts; } else { track.maxSegmentPts = Math.max(track.maxSegmentPts, data.pts); } } if (typeof data.dts === "number") { if (track.timelineStartInfo.dts === void 0) { track.timelineStartInfo.dts = data.dts; } if (track.minSegmentDts === void 0) { track.minSegmentDts = data.dts; } else { track.minSegmentDts = Math.min(track.minSegmentDts, data.dts); } if (track.maxSegmentDts === void 0) { track.maxSegmentDts = data.dts; } else { track.maxSegmentDts = Math.max(track.maxSegmentDts, data.dts); } } }; var clearDtsInfo = function clearDtsInfo2(track) { delete track.minSegmentDts; delete track.maxSegmentDts; delete track.minSegmentPts; delete track.maxSegmentPts; }; var calculateTrackBaseMediaDecodeTime = function calculateTrackBaseMediaDecodeTime2(track, keepOriginalTimestamps) { var baseMediaDecodeTime, scale, minSegmentDts = track.minSegmentDts; if (!keepOriginalTimestamps) { minSegmentDts -= track.timelineStartInfo.dts; } baseMediaDecodeTime = track.timelineStartInfo.baseMediaDecodeTime; baseMediaDecodeTime += minSegmentDts; baseMediaDecodeTime = Math.max(0, baseMediaDecodeTime); if (track.type === "audio") { scale = track.samplerate / ONE_SECOND_IN_TS$3; baseMediaDecodeTime *= scale; baseMediaDecodeTime = Math.floor(baseMediaDecodeTime); } return baseMediaDecodeTime; }; var trackDecodeInfo = { clearDtsInfo, calculateTrackBaseMediaDecodeTime, collectDtsInfo }; var USER_DATA_REGISTERED_ITU_T_T35 = 4, RBSP_TRAILING_BITS = 128; var parseSei = function parseSei2(bytes) { var i2 = 0, result = { payloadType: -1, payloadSize: 0 }, payloadType = 0, payloadSize = 0; while (i2 < bytes.byteLength) { if (bytes[i2] === RBSP_TRAILING_BITS) { break; } while (bytes[i2] === 255) { payloadType += 255; i2++; } payloadType += bytes[i2++]; while (bytes[i2] === 255) { payloadSize += 255; i2++; } payloadSize += bytes[i2++]; if (!result.payload && payloadType === USER_DATA_REGISTERED_ITU_T_T35) { var userIdentifier = String.fromCharCode(bytes[i2 + 3], bytes[i2 + 4], bytes[i2 + 5], bytes[i2 + 6]); if (userIdentifier === "GA94") { result.payloadType = payloadType; result.payloadSize = payloadSize; result.payload = bytes.subarray(i2, i2 + payloadSize); break; } else { result.payload = void 0; } } i2 += payloadSize; payloadType = 0; payloadSize = 0; } return result; }; var parseUserData = function parseUserData2(sei) { if (sei.payload[0] !== 181) { return null; } if ((sei.payload[1] << 8 | sei.payload[2]) !== 49) { return null; } if (String.fromCharCode(sei.payload[3], sei.payload[4], sei.payload[5], sei.payload[6]) !== "GA94") { return null; } if (sei.payload[7] !== 3) { return null; } return sei.payload.subarray(8, sei.payload.length - 1); }; var parseCaptionPackets = function parseCaptionPackets2(pts, userData) { var results = [], i2, count, offset, data; if (!(userData[0] & 64)) { return results; } count = userData[0] & 31; for (i2 = 0; i2 < count; i2++) { offset = i2 * 3; data = { type: userData[offset + 2] & 3, pts }; if (userData[offset + 2] & 4) { data.ccData = userData[offset + 3] << 8 | userData[offset + 4]; results.push(data); } } return results; }; var discardEmulationPreventionBytes$12 = function discardEmulationPreventionBytes5(data) { var length = data.byteLength, emulationPreventionBytesPositions = [], i2 = 1, newLength, newData; while (i2 < length - 2) { if (data[i2] === 0 && data[i2 + 1] === 0 && data[i2 + 2] === 3) { emulationPreventionBytesPositions.push(i2 + 2); i2 += 2; } else { i2++; } } if (emulationPreventionBytesPositions.length === 0) { return data; } newLength = length - emulationPreventionBytesPositions.length; newData = new Uint8Array(newLength); var sourceIndex = 0; for (i2 = 0; i2 < newLength; sourceIndex++, i2++) { if (sourceIndex === emulationPreventionBytesPositions[0]) { sourceIndex++; emulationPreventionBytesPositions.shift(); } newData[i2] = data[sourceIndex]; } return newData; }; var captionPacketParser = { parseSei, parseUserData, parseCaptionPackets, discardEmulationPreventionBytes: discardEmulationPreventionBytes$12, USER_DATA_REGISTERED_ITU_T_T35 }; var CaptionStream$1 = function CaptionStream2(options2) { options2 = options2 || {}; CaptionStream2.prototype.init.call(this); this.parse708captions_ = typeof options2.parse708captions === "boolean" ? options2.parse708captions : true; this.captionPackets_ = []; this.ccStreams_ = [ new Cea608Stream(0, 0), new Cea608Stream(0, 1), new Cea608Stream(1, 0), new Cea608Stream(1, 1) ]; if (this.parse708captions_) { this.cc708Stream_ = new Cea708Stream({ captionServices: options2.captionServices }); } this.reset(); this.ccStreams_.forEach(function(cc) { cc.on("data", this.trigger.bind(this, "data")); cc.on("partialdone", this.trigger.bind(this, "partialdone")); cc.on("done", this.trigger.bind(this, "done")); }, this); if (this.parse708captions_) { this.cc708Stream_.on("data", this.trigger.bind(this, "data")); this.cc708Stream_.on("partialdone", this.trigger.bind(this, "partialdone")); this.cc708Stream_.on("done", this.trigger.bind(this, "done")); } }; CaptionStream$1.prototype = new stream(); CaptionStream$1.prototype.push = function(event2) { var sei, userData, newCaptionPackets; if (event2.nalUnitType !== "sei_rbsp") { return; } sei = captionPacketParser.parseSei(event2.escapedRBSP); if (!sei.payload) { return; } if (sei.payloadType !== captionPacketParser.USER_DATA_REGISTERED_ITU_T_T35) { return; } userData = captionPacketParser.parseUserData(sei); if (!userData) { return; } if (event2.dts < this.latestDts_) { this.ignoreNextEqualDts_ = true; return; } else if (event2.dts === this.latestDts_ && this.ignoreNextEqualDts_) { this.numSameDts_--; if (!this.numSameDts_) { this.ignoreNextEqualDts_ = false; } return; } newCaptionPackets = captionPacketParser.parseCaptionPackets(event2.pts, userData); this.captionPackets_ = this.captionPackets_.concat(newCaptionPackets); if (this.latestDts_ !== event2.dts) { this.numSameDts_ = 0; } this.numSameDts_++; this.latestDts_ = event2.dts; }; CaptionStream$1.prototype.flushCCStreams = function(flushType) { this.ccStreams_.forEach(function(cc) { return flushType === "flush" ? cc.flush() : cc.partialFlush(); }, this); }; CaptionStream$1.prototype.flushStream = function(flushType) { if (!this.captionPackets_.length) { this.flushCCStreams(flushType); return; } this.captionPackets_.forEach(function(elem, idx) { elem.presortIndex = idx; }); this.captionPackets_.sort(function(a, b) { if (a.pts === b.pts) { return a.presortIndex - b.presortIndex; } return a.pts - b.pts; }); this.captionPackets_.forEach(function(packet) { if (packet.type < 2) { this.dispatchCea608Packet(packet); } else { this.dispatchCea708Packet(packet); } }, this); this.captionPackets_.length = 0; this.flushCCStreams(flushType); }; CaptionStream$1.prototype.flush = function() { return this.flushStream("flush"); }; CaptionStream$1.prototype.partialFlush = function() { return this.flushStream("partialFlush"); }; CaptionStream$1.prototype.reset = function() { this.latestDts_ = null; this.ignoreNextEqualDts_ = false; this.numSameDts_ = 0; this.activeCea608Channel_ = [null, null]; this.ccStreams_.forEach(function(ccStream) { ccStream.reset(); }); }; CaptionStream$1.prototype.dispatchCea608Packet = function(packet) { if (this.setsTextOrXDSActive(packet)) { this.activeCea608Channel_[packet.type] = null; } else if (this.setsChannel1Active(packet)) { this.activeCea608Channel_[packet.type] = 0; } else if (this.setsChannel2Active(packet)) { this.activeCea608Channel_[packet.type] = 1; } if (this.activeCea608Channel_[packet.type] === null) { return; } this.ccStreams_[(packet.type << 1) + this.activeCea608Channel_[packet.type]].push(packet); }; CaptionStream$1.prototype.setsChannel1Active = function(packet) { return (packet.ccData & 30720) === 4096; }; CaptionStream$1.prototype.setsChannel2Active = function(packet) { return (packet.ccData & 30720) === 6144; }; CaptionStream$1.prototype.setsTextOrXDSActive = function(packet) { return (packet.ccData & 28928) === 256 || (packet.ccData & 30974) === 4138 || (packet.ccData & 30974) === 6186; }; CaptionStream$1.prototype.dispatchCea708Packet = function(packet) { if (this.parse708captions_) { this.cc708Stream_.push(packet); } }; var CHARACTER_TRANSLATION_708 = { 127: 9834, 4128: 32, 4129: 160, 4133: 8230, 4138: 352, 4140: 338, 4144: 9608, 4145: 8216, 4146: 8217, 4147: 8220, 4148: 8221, 4149: 8226, 4153: 8482, 4154: 353, 4156: 339, 4157: 8480, 4159: 376, 4214: 8539, 4215: 8540, 4216: 8541, 4217: 8542, 4218: 9168, 4219: 9124, 4220: 9123, 4221: 9135, 4222: 9126, 4223: 9121, 4256: 12600 }; var get708CharFromCode = function get708CharFromCode2(code) { var newCode = CHARACTER_TRANSLATION_708[code] || code; if (code & 4096 && code === newCode) { return ""; } return String.fromCharCode(newCode); }; var within708TextBlock = function within708TextBlock2(b) { return 32 <= b && b <= 127 || 160 <= b && b <= 255; }; var Cea708Window = function Cea708Window2(windowNum) { this.windowNum = windowNum; this.reset(); }; Cea708Window.prototype.reset = function() { this.clearText(); this.pendingNewLine = false; this.winAttr = {}; this.penAttr = {}; this.penLoc = {}; this.penColor = {}; this.visible = 0; this.rowLock = 0; this.columnLock = 0; this.priority = 0; this.relativePositioning = 0; this.anchorVertical = 0; this.anchorHorizontal = 0; this.anchorPoint = 0; this.rowCount = 1; this.virtualRowCount = this.rowCount + 1; this.columnCount = 41; this.windowStyle = 0; this.penStyle = 0; }; Cea708Window.prototype.getText = function() { return this.rows.join("\n"); }; Cea708Window.prototype.clearText = function() { this.rows = [""]; this.rowIdx = 0; }; Cea708Window.prototype.newLine = function(pts) { if (this.rows.length >= this.virtualRowCount && typeof this.beforeRowOverflow === "function") { this.beforeRowOverflow(pts); } if (this.rows.length > 0) { this.rows.push(""); this.rowIdx++; } while (this.rows.length > this.virtualRowCount) { this.rows.shift(); this.rowIdx--; } }; Cea708Window.prototype.isEmpty = function() { if (this.rows.length === 0) { return true; } else if (this.rows.length === 1) { return this.rows[0] === ""; } return false; }; Cea708Window.prototype.addText = function(text) { this.rows[this.rowIdx] += text; }; Cea708Window.prototype.backspace = function() { if (!this.isEmpty()) { var row = this.rows[this.rowIdx]; this.rows[this.rowIdx] = row.substr(0, row.length - 1); } }; var Cea708Service = function Cea708Service2(serviceNum, encoding, stream2) { this.serviceNum = serviceNum; this.text = ""; this.currentWindow = new Cea708Window(-1); this.windows = []; this.stream = stream2; if (typeof encoding === "string") { this.createTextDecoder(encoding); } }; Cea708Service.prototype.init = function(pts, beforeRowOverflow) { this.startPts = pts; for (var win3 = 0; win3 < 8; win3++) { this.windows[win3] = new Cea708Window(win3); if (typeof beforeRowOverflow === "function") { this.windows[win3].beforeRowOverflow = beforeRowOverflow; } } }; Cea708Service.prototype.setCurrentWindow = function(windowNum) { this.currentWindow = this.windows[windowNum]; }; Cea708Service.prototype.createTextDecoder = function(encoding) { if (typeof TextDecoder === "undefined") { this.stream.trigger("log", { level: "warn", message: "The `encoding` option is unsupported without TextDecoder support" }); } else { try { this.textDecoder_ = new TextDecoder(encoding); } catch (error) { this.stream.trigger("log", { level: "warn", message: "TextDecoder could not be created with " + encoding + " encoding. " + error }); } } }; var Cea708Stream = function Cea708Stream2(options2) { options2 = options2 || {}; Cea708Stream2.prototype.init.call(this); var self2 = this; var captionServices = options2.captionServices || {}; var captionServiceEncodings = {}; var serviceProps; Object.keys(captionServices).forEach(function(serviceName) { serviceProps = captionServices[serviceName]; if (/^SERVICE/.test(serviceName)) { captionServiceEncodings[serviceName] = serviceProps.encoding; } }); this.serviceEncodings = captionServiceEncodings; this.current708Packet = null; this.services = {}; this.push = function(packet) { if (packet.type === 3) { self2.new708Packet(); self2.add708Bytes(packet); } else { if (self2.current708Packet === null) { self2.new708Packet(); } self2.add708Bytes(packet); } }; }; Cea708Stream.prototype = new stream(); Cea708Stream.prototype.new708Packet = function() { if (this.current708Packet !== null) { this.push708Packet(); } this.current708Packet = { data: [], ptsVals: [] }; }; Cea708Stream.prototype.add708Bytes = function(packet) { var data = packet.ccData; var byte0 = data >>> 8; var byte1 = data & 255; this.current708Packet.ptsVals.push(packet.pts); this.current708Packet.data.push(byte0); this.current708Packet.data.push(byte1); }; Cea708Stream.prototype.push708Packet = function() { var packet708 = this.current708Packet; var packetData = packet708.data; var serviceNum = null; var blockSize = null; var i2 = 0; var b = packetData[i2++]; packet708.seq = b >> 6; packet708.sizeCode = b & 63; for (; i2 < packetData.length; i2++) { b = packetData[i2++]; serviceNum = b >> 5; blockSize = b & 31; if (serviceNum === 7 && blockSize > 0) { b = packetData[i2++]; serviceNum = b; } this.pushServiceBlock(serviceNum, i2, blockSize); if (blockSize > 0) { i2 += blockSize - 1; } } }; Cea708Stream.prototype.pushServiceBlock = function(serviceNum, start2, size) { var b; var i2 = start2; var packetData = this.current708Packet.data; var service = this.services[serviceNum]; if (!service) { service = this.initService(serviceNum, i2); } for (; i2 < start2 + size && i2 < packetData.length; i2++) { b = packetData[i2]; if (within708TextBlock(b)) { i2 = this.handleText(i2, service); } else if (b === 24) { i2 = this.multiByteCharacter(i2, service); } else if (b === 16) { i2 = this.extendedCommands(i2, service); } else if (128 <= b && b <= 135) { i2 = this.setCurrentWindow(i2, service); } else if (152 <= b && b <= 159) { i2 = this.defineWindow(i2, service); } else if (b === 136) { i2 = this.clearWindows(i2, service); } else if (b === 140) { i2 = this.deleteWindows(i2, service); } else if (b === 137) { i2 = this.displayWindows(i2, service); } else if (b === 138) { i2 = this.hideWindows(i2, service); } else if (b === 139) { i2 = this.toggleWindows(i2, service); } else if (b === 151) { i2 = this.setWindowAttributes(i2, service); } else if (b === 144) { i2 = this.setPenAttributes(i2, service); } else if (b === 145) { i2 = this.setPenColor(i2, service); } else if (b === 146) { i2 = this.setPenLocation(i2, service); } else if (b === 143) { service = this.reset(i2, service); } else if (b === 8) { service.currentWindow.backspace(); } else if (b === 12) { service.currentWindow.clearText(); } else if (b === 13) { service.currentWindow.pendingNewLine = true; } else if (b === 14) { service.currentWindow.clearText(); } else if (b === 141) { i2++; } else ; } }; Cea708Stream.prototype.extendedCommands = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; if (within708TextBlock(b)) { i2 = this.handleText(i2, service, { isExtended: true }); } return i2; }; Cea708Stream.prototype.getPts = function(byteIndex) { return this.current708Packet.ptsVals[Math.floor(byteIndex / 2)]; }; Cea708Stream.prototype.initService = function(serviceNum, i2) { var serviceName = "SERVICE" + serviceNum; var self2 = this; var serviceName; var encoding; if (serviceName in this.serviceEncodings) { encoding = this.serviceEncodings[serviceName]; } this.services[serviceNum] = new Cea708Service(serviceNum, encoding, self2); this.services[serviceNum].init(this.getPts(i2), function(pts) { self2.flushDisplayed(pts, self2.services[serviceNum]); }); return this.services[serviceNum]; }; Cea708Stream.prototype.handleText = function(i2, service, options2) { var isExtended = options2 && options2.isExtended; var isMultiByte = options2 && options2.isMultiByte; var packetData = this.current708Packet.data; var extended = isExtended ? 4096 : 0; var currentByte = packetData[i2]; var nextByte = packetData[i2 + 1]; var win3 = service.currentWindow; var _char; var charCodeArray; if (service.textDecoder_ && !isExtended) { if (isMultiByte) { charCodeArray = [currentByte, nextByte]; i2++; } else { charCodeArray = [currentByte]; } _char = service.textDecoder_.decode(new Uint8Array(charCodeArray)); } else { _char = get708CharFromCode(extended | currentByte); } if (win3.pendingNewLine && !win3.isEmpty()) { win3.newLine(this.getPts(i2)); } win3.pendingNewLine = false; win3.addText(_char); return i2; }; Cea708Stream.prototype.multiByteCharacter = function(i2, service) { var packetData = this.current708Packet.data; var firstByte = packetData[i2 + 1]; var secondByte = packetData[i2 + 2]; if (within708TextBlock(firstByte) && within708TextBlock(secondByte)) { i2 = this.handleText(++i2, service, { isMultiByte: true }); } return i2; }; Cea708Stream.prototype.setCurrentWindow = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var windowNum = b & 7; service.setCurrentWindow(windowNum); return i2; }; Cea708Stream.prototype.defineWindow = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var windowNum = b & 7; service.setCurrentWindow(windowNum); var win3 = service.currentWindow; b = packetData[++i2]; win3.visible = (b & 32) >> 5; win3.rowLock = (b & 16) >> 4; win3.columnLock = (b & 8) >> 3; win3.priority = b & 7; b = packetData[++i2]; win3.relativePositioning = (b & 128) >> 7; win3.anchorVertical = b & 127; b = packetData[++i2]; win3.anchorHorizontal = b; b = packetData[++i2]; win3.anchorPoint = (b & 240) >> 4; win3.rowCount = b & 15; b = packetData[++i2]; win3.columnCount = b & 63; b = packetData[++i2]; win3.windowStyle = (b & 56) >> 3; win3.penStyle = b & 7; win3.virtualRowCount = win3.rowCount + 1; return i2; }; Cea708Stream.prototype.setWindowAttributes = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var winAttr = service.currentWindow.winAttr; b = packetData[++i2]; winAttr.fillOpacity = (b & 192) >> 6; winAttr.fillRed = (b & 48) >> 4; winAttr.fillGreen = (b & 12) >> 2; winAttr.fillBlue = b & 3; b = packetData[++i2]; winAttr.borderType = (b & 192) >> 6; winAttr.borderRed = (b & 48) >> 4; winAttr.borderGreen = (b & 12) >> 2; winAttr.borderBlue = b & 3; b = packetData[++i2]; winAttr.borderType += (b & 128) >> 5; winAttr.wordWrap = (b & 64) >> 6; winAttr.printDirection = (b & 48) >> 4; winAttr.scrollDirection = (b & 12) >> 2; winAttr.justify = b & 3; b = packetData[++i2]; winAttr.effectSpeed = (b & 240) >> 4; winAttr.effectDirection = (b & 12) >> 2; winAttr.displayEffect = b & 3; return i2; }; Cea708Stream.prototype.flushDisplayed = function(pts, service) { var displayedText = []; for (var winId = 0; winId < 8; winId++) { if (service.windows[winId].visible && !service.windows[winId].isEmpty()) { displayedText.push(service.windows[winId].getText()); } } service.endPts = pts; service.text = displayedText.join("\n\n"); this.pushCaption(service); service.startPts = pts; }; Cea708Stream.prototype.pushCaption = function(service) { if (service.text !== "") { this.trigger("data", { startPts: service.startPts, endPts: service.endPts, text: service.text, stream: "cc708_" + service.serviceNum }); service.text = ""; service.startPts = service.endPts; } }; Cea708Stream.prototype.displayWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].visible = 1; } } return i2; }; Cea708Stream.prototype.hideWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].visible = 0; } } return i2; }; Cea708Stream.prototype.toggleWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].visible ^= 1; } } return i2; }; Cea708Stream.prototype.clearWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].clearText(); } } return i2; }; Cea708Stream.prototype.deleteWindows = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[++i2]; var pts = this.getPts(i2); this.flushDisplayed(pts, service); for (var winId = 0; winId < 8; winId++) { if (b & 1 << winId) { service.windows[winId].reset(); } } return i2; }; Cea708Stream.prototype.setPenAttributes = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var penAttr = service.currentWindow.penAttr; b = packetData[++i2]; penAttr.textTag = (b & 240) >> 4; penAttr.offset = (b & 12) >> 2; penAttr.penSize = b & 3; b = packetData[++i2]; penAttr.italics = (b & 128) >> 7; penAttr.underline = (b & 64) >> 6; penAttr.edgeType = (b & 56) >> 3; penAttr.fontStyle = b & 7; return i2; }; Cea708Stream.prototype.setPenColor = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var penColor = service.currentWindow.penColor; b = packetData[++i2]; penColor.fgOpacity = (b & 192) >> 6; penColor.fgRed = (b & 48) >> 4; penColor.fgGreen = (b & 12) >> 2; penColor.fgBlue = b & 3; b = packetData[++i2]; penColor.bgOpacity = (b & 192) >> 6; penColor.bgRed = (b & 48) >> 4; penColor.bgGreen = (b & 12) >> 2; penColor.bgBlue = b & 3; b = packetData[++i2]; penColor.edgeRed = (b & 48) >> 4; penColor.edgeGreen = (b & 12) >> 2; penColor.edgeBlue = b & 3; return i2; }; Cea708Stream.prototype.setPenLocation = function(i2, service) { var packetData = this.current708Packet.data; var b = packetData[i2]; var penLoc = service.currentWindow.penLoc; service.currentWindow.pendingNewLine = true; b = packetData[++i2]; penLoc.row = b & 15; b = packetData[++i2]; penLoc.column = b & 63; return i2; }; Cea708Stream.prototype.reset = function(i2, service) { var pts = this.getPts(i2); this.flushDisplayed(pts, service); return this.initService(service.serviceNum, i2); }; var CHARACTER_TRANSLATION = { 42: 225, 92: 233, 94: 237, 95: 243, 96: 250, 123: 231, 124: 247, 125: 209, 126: 241, 127: 9608, 304: 174, 305: 176, 306: 189, 307: 191, 308: 8482, 309: 162, 310: 163, 311: 9834, 312: 224, 313: 160, 314: 232, 315: 226, 316: 234, 317: 238, 318: 244, 319: 251, 544: 193, 545: 201, 546: 211, 547: 218, 548: 220, 549: 252, 550: 8216, 551: 161, 552: 42, 553: 39, 554: 8212, 555: 169, 556: 8480, 557: 8226, 558: 8220, 559: 8221, 560: 192, 561: 194, 562: 199, 563: 200, 564: 202, 565: 203, 566: 235, 567: 206, 568: 207, 569: 239, 570: 212, 571: 217, 572: 249, 573: 219, 574: 171, 575: 187, 800: 195, 801: 227, 802: 205, 803: 204, 804: 236, 805: 210, 806: 242, 807: 213, 808: 245, 809: 123, 810: 125, 811: 92, 812: 94, 813: 95, 814: 124, 815: 126, 816: 196, 817: 228, 818: 214, 819: 246, 820: 223, 821: 165, 822: 164, 823: 9474, 824: 197, 825: 229, 826: 216, 827: 248, 828: 9484, 829: 9488, 830: 9492, 831: 9496 }; var getCharFromCode = function getCharFromCode2(code) { if (code === null) { return ""; } code = CHARACTER_TRANSLATION[code] || code; return String.fromCharCode(code); }; var BOTTOM_ROW = 14; var ROWS = [4352, 4384, 4608, 4640, 5376, 5408, 5632, 5664, 5888, 5920, 4096, 4864, 4896, 5120, 5152]; var createDisplayBuffer = function createDisplayBuffer2() { var result = [], i2 = BOTTOM_ROW + 1; while (i2--) { result.push(""); } return result; }; var Cea608Stream = function Cea608Stream2(field, dataChannel) { Cea608Stream2.prototype.init.call(this); this.field_ = field || 0; this.dataChannel_ = dataChannel || 0; this.name_ = "CC" + ((this.field_ << 1 | this.dataChannel_) + 1); this.setConstants(); this.reset(); this.push = function(packet) { var data, swap, char0, char1, text; data = packet.ccData & 32639; if (data === this.lastControlCode_) { this.lastControlCode_ = null; return; } if ((data & 61440) === 4096) { this.lastControlCode_ = data; } else if (data !== this.PADDING_) { this.lastControlCode_ = null; } char0 = data >>> 8; char1 = data & 255; if (data === this.PADDING_) { return; } else if (data === this.RESUME_CAPTION_LOADING_) { this.mode_ = "popOn"; } else if (data === this.END_OF_CAPTION_) { this.mode_ = "popOn"; this.clearFormatting(packet.pts); this.flushDisplayed(packet.pts); swap = this.displayed_; this.displayed_ = this.nonDisplayed_; this.nonDisplayed_ = swap; this.startPts_ = packet.pts; } else if (data === this.ROLL_UP_2_ROWS_) { this.rollUpRows_ = 2; this.setRollUp(packet.pts); } else if (data === this.ROLL_UP_3_ROWS_) { this.rollUpRows_ = 3; this.setRollUp(packet.pts); } else if (data === this.ROLL_UP_4_ROWS_) { this.rollUpRows_ = 4; this.setRollUp(packet.pts); } else if (data === this.CARRIAGE_RETURN_) { this.clearFormatting(packet.pts); this.flushDisplayed(packet.pts); this.shiftRowsUp_(); this.startPts_ = packet.pts; } else if (data === this.BACKSPACE_) { if (this.mode_ === "popOn") { this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1); } else { this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1); } } else if (data === this.ERASE_DISPLAYED_MEMORY_) { this.flushDisplayed(packet.pts); this.displayed_ = createDisplayBuffer(); } else if (data === this.ERASE_NON_DISPLAYED_MEMORY_) { this.nonDisplayed_ = createDisplayBuffer(); } else if (data === this.RESUME_DIRECT_CAPTIONING_) { if (this.mode_ !== "paintOn") { this.flushDisplayed(packet.pts); this.displayed_ = createDisplayBuffer(); } this.mode_ = "paintOn"; this.startPts_ = packet.pts; } else if (this.isSpecialCharacter(char0, char1)) { char0 = (char0 & 3) << 8; text = getCharFromCode(char0 | char1); this[this.mode_](packet.pts, text); this.column_++; } else if (this.isExtCharacter(char0, char1)) { if (this.mode_ === "popOn") { this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1); } else { this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1); } char0 = (char0 & 3) << 8; text = getCharFromCode(char0 | char1); this[this.mode_](packet.pts, text); this.column_++; } else if (this.isMidRowCode(char0, char1)) { this.clearFormatting(packet.pts); this[this.mode_](packet.pts, " "); this.column_++; if ((char1 & 14) === 14) { this.addFormatting(packet.pts, ["i"]); } if ((char1 & 1) === 1) { this.addFormatting(packet.pts, ["u"]); } } else if (this.isOffsetControlCode(char0, char1)) { this.column_ += char1 & 3; } else if (this.isPAC(char0, char1)) { var row = ROWS.indexOf(data & 7968); if (this.mode_ === "rollUp") { if (row - this.rollUpRows_ + 1 < 0) { row = this.rollUpRows_ - 1; } this.setRollUp(packet.pts, row); } if (row !== this.row_) { this.clearFormatting(packet.pts); this.row_ = row; } if (char1 & 1 && this.formatting_.indexOf("u") === -1) { this.addFormatting(packet.pts, ["u"]); } if ((data & 16) === 16) { this.column_ = ((data & 14) >> 1) * 4; } if (this.isColorPAC(char1)) { if ((char1 & 14) === 14) { this.addFormatting(packet.pts, ["i"]); } } } else if (this.isNormalChar(char0)) { if (char1 === 0) { char1 = null; } text = getCharFromCode(char0); text += getCharFromCode(char1); this[this.mode_](packet.pts, text); this.column_ += text.length; } }; }; Cea608Stream.prototype = new stream(); Cea608Stream.prototype.flushDisplayed = function(pts) { var content = this.displayed_.map(function(row, index2) { try { return row.trim(); } catch (e) { this.trigger("log", { level: "warn", message: "Skipping a malformed 608 caption at index " + index2 + "." }); return ""; } }, this).join("\n").replace(/^\n+|\n+$/g, ""); if (content.length) { this.trigger("data", { startPts: this.startPts_, endPts: pts, text: content, stream: this.name_ }); } }; Cea608Stream.prototype.reset = function() { this.mode_ = "popOn"; this.topRow_ = 0; this.startPts_ = 0; this.displayed_ = createDisplayBuffer(); this.nonDisplayed_ = createDisplayBuffer(); this.lastControlCode_ = null; this.column_ = 0; this.row_ = BOTTOM_ROW; this.rollUpRows_ = 2; this.formatting_ = []; }; Cea608Stream.prototype.setConstants = function() { if (this.dataChannel_ === 0) { this.BASE_ = 16; this.EXT_ = 17; this.CONTROL_ = (20 | this.field_) << 8; this.OFFSET_ = 23; } else if (this.dataChannel_ === 1) { this.BASE_ = 24; this.EXT_ = 25; this.CONTROL_ = (28 | this.field_) << 8; this.OFFSET_ = 31; } this.PADDING_ = 0; this.RESUME_CAPTION_LOADING_ = this.CONTROL_ | 32; this.END_OF_CAPTION_ = this.CONTROL_ | 47; this.ROLL_UP_2_ROWS_ = this.CONTROL_ | 37; this.ROLL_UP_3_ROWS_ = this.CONTROL_ | 38; this.ROLL_UP_4_ROWS_ = this.CONTROL_ | 39; this.CARRIAGE_RETURN_ = this.CONTROL_ | 45; this.RESUME_DIRECT_CAPTIONING_ = this.CONTROL_ | 41; this.BACKSPACE_ = this.CONTROL_ | 33; this.ERASE_DISPLAYED_MEMORY_ = this.CONTROL_ | 44; this.ERASE_NON_DISPLAYED_MEMORY_ = this.CONTROL_ | 46; }; Cea608Stream.prototype.isSpecialCharacter = function(char0, char1) { return char0 === this.EXT_ && char1 >= 48 && char1 <= 63; }; Cea608Stream.prototype.isExtCharacter = function(char0, char1) { return (char0 === this.EXT_ + 1 || char0 === this.EXT_ + 2) && char1 >= 32 && char1 <= 63; }; Cea608Stream.prototype.isMidRowCode = function(char0, char1) { return char0 === this.EXT_ && char1 >= 32 && char1 <= 47; }; Cea608Stream.prototype.isOffsetControlCode = function(char0, char1) { return char0 === this.OFFSET_ && char1 >= 33 && char1 <= 35; }; Cea608Stream.prototype.isPAC = function(char0, char1) { return char0 >= this.BASE_ && char0 < this.BASE_ + 8 && char1 >= 64 && char1 <= 127; }; Cea608Stream.prototype.isColorPAC = function(char1) { return char1 >= 64 && char1 <= 79 || char1 >= 96 && char1 <= 127; }; Cea608Stream.prototype.isNormalChar = function(_char2) { return _char2 >= 32 && _char2 <= 127; }; Cea608Stream.prototype.setRollUp = function(pts, newBaseRow) { if (this.mode_ !== "rollUp") { this.row_ = BOTTOM_ROW; this.mode_ = "rollUp"; this.flushDisplayed(pts); this.nonDisplayed_ = createDisplayBuffer(); this.displayed_ = createDisplayBuffer(); } if (newBaseRow !== void 0 && newBaseRow !== this.row_) { for (var i2 = 0; i2 < this.rollUpRows_; i2++) { this.displayed_[newBaseRow - i2] = this.displayed_[this.row_ - i2]; this.displayed_[this.row_ - i2] = ""; } } if (newBaseRow === void 0) { newBaseRow = this.row_; } this.topRow_ = newBaseRow - this.rollUpRows_ + 1; }; Cea608Stream.prototype.addFormatting = function(pts, format) { this.formatting_ = this.formatting_.concat(format); var text = format.reduce(function(text2, format2) { return text2 + "<" + format2 + ">"; }, ""); this[this.mode_](pts, text); }; Cea608Stream.prototype.clearFormatting = function(pts) { if (!this.formatting_.length) { return; } var text = this.formatting_.reverse().reduce(function(text2, format) { return text2 + ""; }, ""); this.formatting_ = []; this[this.mode_](pts, text); }; Cea608Stream.prototype.popOn = function(pts, text) { var baseRow = this.nonDisplayed_[this.row_]; baseRow += text; this.nonDisplayed_[this.row_] = baseRow; }; Cea608Stream.prototype.rollUp = function(pts, text) { var baseRow = this.displayed_[this.row_]; baseRow += text; this.displayed_[this.row_] = baseRow; }; Cea608Stream.prototype.shiftRowsUp_ = function() { var i2; for (i2 = 0; i2 < this.topRow_; i2++) { this.displayed_[i2] = ""; } for (i2 = this.row_ + 1; i2 < BOTTOM_ROW + 1; i2++) { this.displayed_[i2] = ""; } for (i2 = this.topRow_; i2 < this.row_; i2++) { this.displayed_[i2] = this.displayed_[i2 + 1]; } this.displayed_[this.row_] = ""; }; Cea608Stream.prototype.paintOn = function(pts, text) { var baseRow = this.displayed_[this.row_]; baseRow += text; this.displayed_[this.row_] = baseRow; }; var captionStream = { CaptionStream: CaptionStream$1, Cea608Stream, Cea708Stream }; var streamTypes = { H264_STREAM_TYPE: 27, ADTS_STREAM_TYPE: 15, METADATA_STREAM_TYPE: 21 }; var MAX_TS = 8589934592; var RO_THRESH = 4294967296; var TYPE_SHARED = "shared"; var handleRollover$1 = function handleRollover2(value, reference) { var direction = 1; if (value > reference) { direction = -1; } while (Math.abs(reference - value) > RO_THRESH) { value += direction * MAX_TS; } return value; }; var TimestampRolloverStream$1 = function TimestampRolloverStream2(type3) { var lastDTS, referenceDTS; TimestampRolloverStream2.prototype.init.call(this); this.type_ = type3 || TYPE_SHARED; this.push = function(data) { if (this.type_ !== TYPE_SHARED && data.type !== this.type_) { return; } if (referenceDTS === void 0) { referenceDTS = data.dts; } data.dts = handleRollover$1(data.dts, referenceDTS); data.pts = handleRollover$1(data.pts, referenceDTS); lastDTS = data.dts; this.trigger("data", data); }; this.flush = function() { referenceDTS = lastDTS; this.trigger("done"); }; this.endTimeline = function() { this.flush(); this.trigger("endedtimeline"); }; this.discontinuity = function() { referenceDTS = void 0; lastDTS = void 0; }; this.reset = function() { this.discontinuity(); this.trigger("reset"); }; }; TimestampRolloverStream$1.prototype = new stream(); var timestampRolloverStream = { TimestampRolloverStream: TimestampRolloverStream$1, handleRollover: handleRollover$1 }; var percentEncode$1 = function percentEncode2(bytes, start2, end) { var i2, result = ""; for (i2 = start2; i2 < end; i2++) { result += "%" + ("00" + bytes[i2].toString(16)).slice(-2); } return result; }, parseUtf8 = function parseUtf82(bytes, start2, end) { return decodeURIComponent(percentEncode$1(bytes, start2, end)); }, parseIso88591$1 = function parseIso885912(bytes, start2, end) { return unescape(percentEncode$1(bytes, start2, end)); }, parseSyncSafeInteger$1 = function parseSyncSafeInteger2(data) { return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3]; }, tagParsers = { TXXX: function TXXX(tag) { var i2; if (tag.data[0] !== 3) { return; } for (i2 = 1; i2 < tag.data.length; i2++) { if (tag.data[i2] === 0) { tag.description = parseUtf8(tag.data, 1, i2); tag.value = parseUtf8(tag.data, i2 + 1, tag.data.length).replace(/\0*$/, ""); break; } } tag.data = tag.value; }, WXXX: function WXXX(tag) { var i2; if (tag.data[0] !== 3) { return; } for (i2 = 1; i2 < tag.data.length; i2++) { if (tag.data[i2] === 0) { tag.description = parseUtf8(tag.data, 1, i2); tag.url = parseUtf8(tag.data, i2 + 1, tag.data.length); break; } } }, PRIV: function PRIV(tag) { var i2; for (i2 = 0; i2 < tag.data.length; i2++) { if (tag.data[i2] === 0) { tag.owner = parseIso88591$1(tag.data, 0, i2); break; } } tag.privateData = tag.data.subarray(i2 + 1); tag.data = tag.privateData; } }, _MetadataStream; _MetadataStream = function MetadataStream(options2) { var settings = { descriptor: options2 && options2.descriptor }, tagSize = 0, buffer = [], bufferSize = 0, i2; _MetadataStream.prototype.init.call(this); this.dispatchType = streamTypes.METADATA_STREAM_TYPE.toString(16); if (settings.descriptor) { for (i2 = 0; i2 < settings.descriptor.length; i2++) { this.dispatchType += ("00" + settings.descriptor[i2].toString(16)).slice(-2); } } this.push = function(chunk) { var tag, frameStart, frameSize, frame, i3, frameHeader; if (chunk.type !== "timed-metadata") { return; } if (chunk.dataAlignmentIndicator) { bufferSize = 0; buffer.length = 0; } if (buffer.length === 0 && (chunk.data.length < 10 || chunk.data[0] !== "I".charCodeAt(0) || chunk.data[1] !== "D".charCodeAt(0) || chunk.data[2] !== "3".charCodeAt(0))) { this.trigger("log", { level: "warn", message: "Skipping unrecognized metadata packet" }); return; } buffer.push(chunk); bufferSize += chunk.data.byteLength; if (buffer.length === 1) { tagSize = parseSyncSafeInteger$1(chunk.data.subarray(6, 10)); tagSize += 10; } if (bufferSize < tagSize) { return; } tag = { data: new Uint8Array(tagSize), frames: [], pts: buffer[0].pts, dts: buffer[0].dts }; for (i3 = 0; i3 < tagSize; ) { tag.data.set(buffer[0].data.subarray(0, tagSize - i3), i3); i3 += buffer[0].data.byteLength; bufferSize -= buffer[0].data.byteLength; buffer.shift(); } frameStart = 10; if (tag.data[5] & 64) { frameStart += 4; frameStart += parseSyncSafeInteger$1(tag.data.subarray(10, 14)); tagSize -= parseSyncSafeInteger$1(tag.data.subarray(16, 20)); } do { frameSize = parseSyncSafeInteger$1(tag.data.subarray(frameStart + 4, frameStart + 8)); if (frameSize < 1) { this.trigger("log", { level: "warn", message: "Malformed ID3 frame encountered. Skipping metadata parsing." }); return; } frameHeader = String.fromCharCode(tag.data[frameStart], tag.data[frameStart + 1], tag.data[frameStart + 2], tag.data[frameStart + 3]); frame = { id: frameHeader, data: tag.data.subarray(frameStart + 10, frameStart + frameSize + 10) }; frame.key = frame.id; if (tagParsers[frame.id]) { tagParsers[frame.id](frame); if (frame.owner === "com.apple.streaming.transportStreamTimestamp") { var d2 = frame.data, size = (d2[3] & 1) << 30 | d2[4] << 22 | d2[5] << 14 | d2[6] << 6 | d2[7] >>> 2; size *= 4; size += d2[7] & 3; frame.timeStamp = size; if (tag.pts === void 0 && tag.dts === void 0) { tag.pts = frame.timeStamp; tag.dts = frame.timeStamp; } this.trigger("timestamp", frame); } } tag.frames.push(frame); frameStart += 10; frameStart += frameSize; } while (frameStart < tagSize); this.trigger("data", tag); }; }; _MetadataStream.prototype = new stream(); var metadataStream = _MetadataStream; var TimestampRolloverStream = timestampRolloverStream.TimestampRolloverStream; var _TransportPacketStream, _TransportParseStream, _ElementaryStream; var MP2T_PACKET_LENGTH$1 = 188, SYNC_BYTE$1 = 71; _TransportPacketStream = function TransportPacketStream() { var buffer = new Uint8Array(MP2T_PACKET_LENGTH$1), bytesInBuffer = 0; _TransportPacketStream.prototype.init.call(this); this.push = function(bytes) { var startIndex = 0, endIndex = MP2T_PACKET_LENGTH$1, everything; if (bytesInBuffer) { everything = new Uint8Array(bytes.byteLength + bytesInBuffer); everything.set(buffer.subarray(0, bytesInBuffer)); everything.set(bytes, bytesInBuffer); bytesInBuffer = 0; } else { everything = bytes; } while (endIndex < everything.byteLength) { if (everything[startIndex] === SYNC_BYTE$1 && everything[endIndex] === SYNC_BYTE$1) { this.trigger("data", everything.subarray(startIndex, endIndex)); startIndex += MP2T_PACKET_LENGTH$1; endIndex += MP2T_PACKET_LENGTH$1; continue; } startIndex++; endIndex++; } if (startIndex < everything.byteLength) { buffer.set(everything.subarray(startIndex), 0); bytesInBuffer = everything.byteLength - startIndex; } }; this.flush = function() { if (bytesInBuffer === MP2T_PACKET_LENGTH$1 && buffer[0] === SYNC_BYTE$1) { this.trigger("data", buffer); bytesInBuffer = 0; } this.trigger("done"); }; this.endTimeline = function() { this.flush(); this.trigger("endedtimeline"); }; this.reset = function() { bytesInBuffer = 0; this.trigger("reset"); }; }; _TransportPacketStream.prototype = new stream(); _TransportParseStream = function TransportParseStream() { var parsePsi, parsePat2, parsePmt2, self2; _TransportParseStream.prototype.init.call(this); self2 = this; this.packetsWaitingForPmt = []; this.programMapTable = void 0; parsePsi = function parsePsi2(payload, psi) { var offset = 0; if (psi.payloadUnitStartIndicator) { offset += payload[offset] + 1; } if (psi.type === "pat") { parsePat2(payload.subarray(offset), psi); } else { parsePmt2(payload.subarray(offset), psi); } }; parsePat2 = function parsePat3(payload, pat) { pat.section_number = payload[7]; pat.last_section_number = payload[8]; self2.pmtPid = (payload[10] & 31) << 8 | payload[11]; pat.pmtPid = self2.pmtPid; }; parsePmt2 = function parsePmt3(payload, pmt) { var sectionLength, tableEnd, programInfoLength, offset; if (!(payload[5] & 1)) { return; } self2.programMapTable = { video: null, audio: null, "timed-metadata": {} }; sectionLength = (payload[1] & 15) << 8 | payload[2]; tableEnd = 3 + sectionLength - 4; programInfoLength = (payload[10] & 15) << 8 | payload[11]; offset = 12 + programInfoLength; while (offset < tableEnd) { var streamType = payload[offset]; var pid = (payload[offset + 1] & 31) << 8 | payload[offset + 2]; if (streamType === streamTypes.H264_STREAM_TYPE && self2.programMapTable.video === null) { self2.programMapTable.video = pid; } else if (streamType === streamTypes.ADTS_STREAM_TYPE && self2.programMapTable.audio === null) { self2.programMapTable.audio = pid; } else if (streamType === streamTypes.METADATA_STREAM_TYPE) { self2.programMapTable["timed-metadata"][pid] = streamType; } offset += ((payload[offset + 3] & 15) << 8 | payload[offset + 4]) + 5; } pmt.programMapTable = self2.programMapTable; }; this.push = function(packet) { var result = {}, offset = 4; result.payloadUnitStartIndicator = !!(packet[1] & 64); result.pid = packet[1] & 31; result.pid <<= 8; result.pid |= packet[2]; if ((packet[3] & 48) >>> 4 > 1) { offset += packet[offset] + 1; } if (result.pid === 0) { result.type = "pat"; parsePsi(packet.subarray(offset), result); this.trigger("data", result); } else if (result.pid === this.pmtPid) { result.type = "pmt"; parsePsi(packet.subarray(offset), result); this.trigger("data", result); while (this.packetsWaitingForPmt.length) { this.processPes_.apply(this, this.packetsWaitingForPmt.shift()); } } else if (this.programMapTable === void 0) { this.packetsWaitingForPmt.push([packet, offset, result]); } else { this.processPes_(packet, offset, result); } }; this.processPes_ = function(packet, offset, result) { if (result.pid === this.programMapTable.video) { result.streamType = streamTypes.H264_STREAM_TYPE; } else if (result.pid === this.programMapTable.audio) { result.streamType = streamTypes.ADTS_STREAM_TYPE; } else { result.streamType = this.programMapTable["timed-metadata"][result.pid]; } result.type = "pes"; result.data = packet.subarray(offset); this.trigger("data", result); }; }; _TransportParseStream.prototype = new stream(); _TransportParseStream.STREAM_TYPES = { h264: 27, adts: 15 }; _ElementaryStream = function ElementaryStream() { var self2 = this, segmentHadPmt = false, video = { data: [], size: 0 }, audio = { data: [], size: 0 }, timedMetadata = { data: [], size: 0 }, programMapTable, parsePes = function parsePes2(payload, pes) { var ptsDtsFlags; var startPrefix = payload[0] << 16 | payload[1] << 8 | payload[2]; pes.data = new Uint8Array(); if (startPrefix !== 1) { return; } pes.packetLength = 6 + (payload[4] << 8 | payload[5]); pes.dataAlignmentIndicator = (payload[6] & 4) !== 0; ptsDtsFlags = payload[7]; if (ptsDtsFlags & 192) { pes.pts = (payload[9] & 14) << 27 | (payload[10] & 255) << 20 | (payload[11] & 254) << 12 | (payload[12] & 255) << 5 | (payload[13] & 254) >>> 3; pes.pts *= 4; pes.pts += (payload[13] & 6) >>> 1; pes.dts = pes.pts; if (ptsDtsFlags & 64) { pes.dts = (payload[14] & 14) << 27 | (payload[15] & 255) << 20 | (payload[16] & 254) << 12 | (payload[17] & 255) << 5 | (payload[18] & 254) >>> 3; pes.dts *= 4; pes.dts += (payload[18] & 6) >>> 1; } } pes.data = payload.subarray(9 + payload[8]); }, flushStream = function flushStream2(stream2, type3, forceFlush) { var packetData = new Uint8Array(stream2.size), event2 = { type: type3 }, i2 = 0, offset = 0, packetFlushable = false, fragment; if (!stream2.data.length || stream2.size < 9) { return; } event2.trackId = stream2.data[0].pid; for (i2 = 0; i2 < stream2.data.length; i2++) { fragment = stream2.data[i2]; packetData.set(fragment.data, offset); offset += fragment.data.byteLength; } parsePes(packetData, event2); packetFlushable = type3 === "video" || event2.packetLength <= stream2.size; if (forceFlush || packetFlushable) { stream2.size = 0; stream2.data.length = 0; } if (packetFlushable) { self2.trigger("data", event2); } }; _ElementaryStream.prototype.init.call(this); this.push = function(data) { ({ pat: function pat() { }, pes: function pes() { var stream2, streamType; switch (data.streamType) { case streamTypes.H264_STREAM_TYPE: stream2 = video; streamType = "video"; break; case streamTypes.ADTS_STREAM_TYPE: stream2 = audio; streamType = "audio"; break; case streamTypes.METADATA_STREAM_TYPE: stream2 = timedMetadata; streamType = "timed-metadata"; break; default: return; } if (data.payloadUnitStartIndicator) { flushStream(stream2, streamType, true); } stream2.data.push(data); stream2.size += data.data.byteLength; }, pmt: function pmt() { var event2 = { type: "metadata", tracks: [] }; programMapTable = data.programMapTable; if (programMapTable.video !== null) { event2.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +programMapTable.video, codec: "avc", type: "video" }); } if (programMapTable.audio !== null) { event2.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +programMapTable.audio, codec: "adts", type: "audio" }); } segmentHadPmt = true; self2.trigger("data", event2); } })[data.type](); }; this.reset = function() { video.size = 0; video.data.length = 0; audio.size = 0; audio.data.length = 0; this.trigger("reset"); }; this.flushStreams_ = function() { flushStream(video, "video"); flushStream(audio, "audio"); flushStream(timedMetadata, "timed-metadata"); }; this.flush = function() { if (!segmentHadPmt && programMapTable) { var pmt = { type: "metadata", tracks: [] }; if (programMapTable.video !== null) { pmt.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +programMapTable.video, codec: "avc", type: "video" }); } if (programMapTable.audio !== null) { pmt.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +programMapTable.audio, codec: "adts", type: "audio" }); } self2.trigger("data", pmt); } segmentHadPmt = false; this.flushStreams_(); this.trigger("done"); }; }; _ElementaryStream.prototype = new stream(); var m2ts = { PAT_PID: 0, MP2T_PACKET_LENGTH: MP2T_PACKET_LENGTH$1, TransportPacketStream: _TransportPacketStream, TransportParseStream: _TransportParseStream, ElementaryStream: _ElementaryStream, TimestampRolloverStream, CaptionStream: captionStream.CaptionStream, Cea608Stream: captionStream.Cea608Stream, Cea708Stream: captionStream.Cea708Stream, MetadataStream: metadataStream }; for (var type2 in streamTypes) { if (streamTypes.hasOwnProperty(type2)) { m2ts[type2] = streamTypes[type2]; } } var m2ts_1 = m2ts; var ONE_SECOND_IN_TS$2 = clock2.ONE_SECOND_IN_TS; var _AdtsStream; var ADTS_SAMPLING_FREQUENCIES$1 = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; _AdtsStream = function AdtsStream(handlePartialSegments) { var buffer, frameNum = 0; _AdtsStream.prototype.init.call(this); this.skipWarn_ = function(start2, end) { this.trigger("log", { level: "warn", message: "adts skiping bytes " + start2 + " to " + end + " in frame " + frameNum + " outside syncword" }); }; this.push = function(packet) { var i2 = 0, frameLength, protectionSkipBytes, oldBuffer, sampleCount, adtsFrameDuration; if (!handlePartialSegments) { frameNum = 0; } if (packet.type !== "audio") { return; } if (buffer && buffer.length) { oldBuffer = buffer; buffer = new Uint8Array(oldBuffer.byteLength + packet.data.byteLength); buffer.set(oldBuffer); buffer.set(packet.data, oldBuffer.byteLength); } else { buffer = packet.data; } var skip; while (i2 + 7 < buffer.length) { if (buffer[i2] !== 255 || (buffer[i2 + 1] & 246) !== 240) { if (typeof skip !== "number") { skip = i2; } i2++; continue; } if (typeof skip === "number") { this.skipWarn_(skip, i2); skip = null; } protectionSkipBytes = (~buffer[i2 + 1] & 1) * 2; frameLength = (buffer[i2 + 3] & 3) << 11 | buffer[i2 + 4] << 3 | (buffer[i2 + 5] & 224) >> 5; sampleCount = ((buffer[i2 + 6] & 3) + 1) * 1024; adtsFrameDuration = sampleCount * ONE_SECOND_IN_TS$2 / ADTS_SAMPLING_FREQUENCIES$1[(buffer[i2 + 2] & 60) >>> 2]; if (buffer.byteLength - i2 < frameLength) { break; } this.trigger("data", { pts: packet.pts + frameNum * adtsFrameDuration, dts: packet.dts + frameNum * adtsFrameDuration, sampleCount, audioobjecttype: (buffer[i2 + 2] >>> 6 & 3) + 1, channelcount: (buffer[i2 + 2] & 1) << 2 | (buffer[i2 + 3] & 192) >>> 6, samplerate: ADTS_SAMPLING_FREQUENCIES$1[(buffer[i2 + 2] & 60) >>> 2], samplingfrequencyindex: (buffer[i2 + 2] & 60) >>> 2, samplesize: 16, data: buffer.subarray(i2 + 7 + protectionSkipBytes, i2 + frameLength) }); frameNum++; i2 += frameLength; } if (typeof skip === "number") { this.skipWarn_(skip, i2); skip = null; } buffer = buffer.subarray(i2); }; this.flush = function() { frameNum = 0; this.trigger("done"); }; this.reset = function() { buffer = void 0; this.trigger("reset"); }; this.endTimeline = function() { buffer = void 0; this.trigger("endedtimeline"); }; }; _AdtsStream.prototype = new stream(); var adts = _AdtsStream; var ExpGolomb; ExpGolomb = function ExpGolomb2(workingData) { var workingBytesAvailable = workingData.byteLength, workingWord = 0, workingBitsAvailable = 0; this.length = function() { return 8 * workingBytesAvailable; }; this.bitsAvailable = function() { return 8 * workingBytesAvailable + workingBitsAvailable; }; this.loadWord = function() { var position2 = workingData.byteLength - workingBytesAvailable, workingBytes = new Uint8Array(4), availableBytes = Math.min(4, workingBytesAvailable); if (availableBytes === 0) { throw new Error("no bytes available"); } workingBytes.set(workingData.subarray(position2, position2 + availableBytes)); workingWord = new DataView(workingBytes.buffer).getUint32(0); workingBitsAvailable = availableBytes * 8; workingBytesAvailable -= availableBytes; }; this.skipBits = function(count) { var skipBytes; if (workingBitsAvailable > count) { workingWord <<= count; workingBitsAvailable -= count; } else { count -= workingBitsAvailable; skipBytes = Math.floor(count / 8); count -= skipBytes * 8; workingBytesAvailable -= skipBytes; this.loadWord(); workingWord <<= count; workingBitsAvailable -= count; } }; this.readBits = function(size) { var bits = Math.min(workingBitsAvailable, size), valu = workingWord >>> 32 - bits; workingBitsAvailable -= bits; if (workingBitsAvailable > 0) { workingWord <<= bits; } else if (workingBytesAvailable > 0) { this.loadWord(); } bits = size - bits; if (bits > 0) { return valu << bits | this.readBits(bits); } return valu; }; this.skipLeadingZeros = function() { var leadingZeroCount; for (leadingZeroCount = 0; leadingZeroCount < workingBitsAvailable; ++leadingZeroCount) { if ((workingWord & 2147483648 >>> leadingZeroCount) !== 0) { workingWord <<= leadingZeroCount; workingBitsAvailable -= leadingZeroCount; return leadingZeroCount; } } this.loadWord(); return leadingZeroCount + this.skipLeadingZeros(); }; this.skipUnsignedExpGolomb = function() { this.skipBits(1 + this.skipLeadingZeros()); }; this.skipExpGolomb = function() { this.skipBits(1 + this.skipLeadingZeros()); }; this.readUnsignedExpGolomb = function() { var clz = this.skipLeadingZeros(); return this.readBits(clz + 1) - 1; }; this.readExpGolomb = function() { var valu = this.readUnsignedExpGolomb(); if (1 & valu) { return 1 + valu >>> 1; } return -1 * (valu >>> 1); }; this.readBoolean = function() { return this.readBits(1) === 1; }; this.readUnsignedByte = function() { return this.readBits(8); }; this.loadWord(); }; var expGolomb = ExpGolomb; var _H264Stream, _NalByteStream; var PROFILES_WITH_OPTIONAL_SPS_DATA; _NalByteStream = function NalByteStream() { var syncPoint = 0, i2, buffer; _NalByteStream.prototype.init.call(this); this.push = function(data) { var swapBuffer; if (!buffer) { buffer = data.data; } else { swapBuffer = new Uint8Array(buffer.byteLength + data.data.byteLength); swapBuffer.set(buffer); swapBuffer.set(data.data, buffer.byteLength); buffer = swapBuffer; } var len = buffer.byteLength; for (; syncPoint < len - 3; syncPoint++) { if (buffer[syncPoint + 2] === 1) { i2 = syncPoint + 5; break; } } while (i2 < len) { switch (buffer[i2]) { case 0: if (buffer[i2 - 1] !== 0) { i2 += 2; break; } else if (buffer[i2 - 2] !== 0) { i2++; break; } if (syncPoint + 3 !== i2 - 2) { this.trigger("data", buffer.subarray(syncPoint + 3, i2 - 2)); } do { i2++; } while (buffer[i2] !== 1 && i2 < len); syncPoint = i2 - 2; i2 += 3; break; case 1: if (buffer[i2 - 1] !== 0 || buffer[i2 - 2] !== 0) { i2 += 3; break; } this.trigger("data", buffer.subarray(syncPoint + 3, i2 - 2)); syncPoint = i2 - 2; i2 += 3; break; default: i2 += 3; break; } } buffer = buffer.subarray(syncPoint); i2 -= syncPoint; syncPoint = 0; }; this.reset = function() { buffer = null; syncPoint = 0; this.trigger("reset"); }; this.flush = function() { if (buffer && buffer.byteLength > 3) { this.trigger("data", buffer.subarray(syncPoint + 3)); } buffer = null; syncPoint = 0; this.trigger("done"); }; this.endTimeline = function() { this.flush(); this.trigger("endedtimeline"); }; }; _NalByteStream.prototype = new stream(); PROFILES_WITH_OPTIONAL_SPS_DATA = { 100: true, 110: true, 122: true, 244: true, 44: true, 83: true, 86: true, 118: true, 128: true, 138: true, 139: true, 134: true }; _H264Stream = function H264Stream2() { var nalByteStream = new _NalByteStream(), self2, trackId, currentPts, currentDts, discardEmulationPreventionBytes5, readSequenceParameterSet, skipScalingList; _H264Stream.prototype.init.call(this); self2 = this; this.push = function(packet) { if (packet.type !== "video") { return; } trackId = packet.trackId; currentPts = packet.pts; currentDts = packet.dts; nalByteStream.push(packet); }; nalByteStream.on("data", function(data) { var event2 = { trackId, pts: currentPts, dts: currentDts, data, nalUnitTypeCode: data[0] & 31 }; switch (event2.nalUnitTypeCode) { case 5: event2.nalUnitType = "slice_layer_without_partitioning_rbsp_idr"; break; case 6: event2.nalUnitType = "sei_rbsp"; event2.escapedRBSP = discardEmulationPreventionBytes5(data.subarray(1)); break; case 7: event2.nalUnitType = "seq_parameter_set_rbsp"; event2.escapedRBSP = discardEmulationPreventionBytes5(data.subarray(1)); event2.config = readSequenceParameterSet(event2.escapedRBSP); break; case 8: event2.nalUnitType = "pic_parameter_set_rbsp"; break; case 9: event2.nalUnitType = "access_unit_delimiter_rbsp"; break; } self2.trigger("data", event2); }); nalByteStream.on("done", function() { self2.trigger("done"); }); nalByteStream.on("partialdone", function() { self2.trigger("partialdone"); }); nalByteStream.on("reset", function() { self2.trigger("reset"); }); nalByteStream.on("endedtimeline", function() { self2.trigger("endedtimeline"); }); this.flush = function() { nalByteStream.flush(); }; this.partialFlush = function() { nalByteStream.partialFlush(); }; this.reset = function() { nalByteStream.reset(); }; this.endTimeline = function() { nalByteStream.endTimeline(); }; skipScalingList = function skipScalingList2(count, expGolombDecoder) { var lastScale = 8, nextScale = 8, j, deltaScale; for (j = 0; j < count; j++) { if (nextScale !== 0) { deltaScale = expGolombDecoder.readExpGolomb(); nextScale = (lastScale + deltaScale + 256) % 256; } lastScale = nextScale === 0 ? lastScale : nextScale; } }; discardEmulationPreventionBytes5 = function discardEmulationPreventionBytes6(data) { var length = data.byteLength, emulationPreventionBytesPositions = [], i2 = 1, newLength, newData; while (i2 < length - 2) { if (data[i2] === 0 && data[i2 + 1] === 0 && data[i2 + 2] === 3) { emulationPreventionBytesPositions.push(i2 + 2); i2 += 2; } else { i2++; } } if (emulationPreventionBytesPositions.length === 0) { return data; } newLength = length - emulationPreventionBytesPositions.length; newData = new Uint8Array(newLength); var sourceIndex = 0; for (i2 = 0; i2 < newLength; sourceIndex++, i2++) { if (sourceIndex === emulationPreventionBytesPositions[0]) { sourceIndex++; emulationPreventionBytesPositions.shift(); } newData[i2] = data[sourceIndex]; } return newData; }; readSequenceParameterSet = function readSequenceParameterSet2(data) { var frameCropLeftOffset = 0, frameCropRightOffset = 0, frameCropTopOffset = 0, frameCropBottomOffset = 0, expGolombDecoder, profileIdc, levelIdc, profileCompatibility, chromaFormatIdc, picOrderCntType, numRefFramesInPicOrderCntCycle, picWidthInMbsMinus1, picHeightInMapUnitsMinus1, frameMbsOnlyFlag, scalingListCount, sarRatio = [1, 1], aspectRatioIdc, i2; expGolombDecoder = new expGolomb(data); profileIdc = expGolombDecoder.readUnsignedByte(); profileCompatibility = expGolombDecoder.readUnsignedByte(); levelIdc = expGolombDecoder.readUnsignedByte(); expGolombDecoder.skipUnsignedExpGolomb(); if (PROFILES_WITH_OPTIONAL_SPS_DATA[profileIdc]) { chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb(); if (chromaFormatIdc === 3) { expGolombDecoder.skipBits(1); } expGolombDecoder.skipUnsignedExpGolomb(); expGolombDecoder.skipUnsignedExpGolomb(); expGolombDecoder.skipBits(1); if (expGolombDecoder.readBoolean()) { scalingListCount = chromaFormatIdc !== 3 ? 8 : 12; for (i2 = 0; i2 < scalingListCount; i2++) { if (expGolombDecoder.readBoolean()) { if (i2 < 6) { skipScalingList(16, expGolombDecoder); } else { skipScalingList(64, expGolombDecoder); } } } } } expGolombDecoder.skipUnsignedExpGolomb(); picOrderCntType = expGolombDecoder.readUnsignedExpGolomb(); if (picOrderCntType === 0) { expGolombDecoder.readUnsignedExpGolomb(); } else if (picOrderCntType === 1) { expGolombDecoder.skipBits(1); expGolombDecoder.skipExpGolomb(); expGolombDecoder.skipExpGolomb(); numRefFramesInPicOrderCntCycle = expGolombDecoder.readUnsignedExpGolomb(); for (i2 = 0; i2 < numRefFramesInPicOrderCntCycle; i2++) { expGolombDecoder.skipExpGolomb(); } } expGolombDecoder.skipUnsignedExpGolomb(); expGolombDecoder.skipBits(1); picWidthInMbsMinus1 = expGolombDecoder.readUnsignedExpGolomb(); picHeightInMapUnitsMinus1 = expGolombDecoder.readUnsignedExpGolomb(); frameMbsOnlyFlag = expGolombDecoder.readBits(1); if (frameMbsOnlyFlag === 0) { expGolombDecoder.skipBits(1); } expGolombDecoder.skipBits(1); if (expGolombDecoder.readBoolean()) { frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb(); frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb(); frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb(); frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb(); } if (expGolombDecoder.readBoolean()) { if (expGolombDecoder.readBoolean()) { aspectRatioIdc = expGolombDecoder.readUnsignedByte(); switch (aspectRatioIdc) { case 1: sarRatio = [1, 1]; break; case 2: sarRatio = [12, 11]; break; case 3: sarRatio = [10, 11]; break; case 4: sarRatio = [16, 11]; break; case 5: sarRatio = [40, 33]; break; case 6: sarRatio = [24, 11]; break; case 7: sarRatio = [20, 11]; break; case 8: sarRatio = [32, 11]; break; case 9: sarRatio = [80, 33]; break; case 10: sarRatio = [18, 11]; break; case 11: sarRatio = [15, 11]; break; case 12: sarRatio = [64, 33]; break; case 13: sarRatio = [160, 99]; break; case 14: sarRatio = [4, 3]; break; case 15: sarRatio = [3, 2]; break; case 16: sarRatio = [2, 1]; break; case 255: { sarRatio = [expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte(), expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte()]; break; } } if (sarRatio) { sarRatio[0] / sarRatio[1]; } } } return { profileIdc, levelIdc, profileCompatibility, width: (picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2, height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - frameCropTopOffset * 2 - frameCropBottomOffset * 2, sarRatio }; }; }; _H264Stream.prototype = new stream(); var h2643 = { H264Stream: _H264Stream, NalByteStream: _NalByteStream }; var ADTS_SAMPLING_FREQUENCIES = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; var parseId3TagSize = function parseId3TagSize2(header, byteIndex) { var returnSize = header[byteIndex + 6] << 21 | header[byteIndex + 7] << 14 | header[byteIndex + 8] << 7 | header[byteIndex + 9], flags = header[byteIndex + 5], footerPresent = (flags & 16) >> 4; returnSize = returnSize >= 0 ? returnSize : 0; if (footerPresent) { return returnSize + 20; } return returnSize + 10; }; var getId3Offset4 = function getId3Offset5(data, offset) { if (data.length - offset < 10 || data[offset] !== "I".charCodeAt(0) || data[offset + 1] !== "D".charCodeAt(0) || data[offset + 2] !== "3".charCodeAt(0)) { return offset; } offset += parseId3TagSize(data, offset); return getId3Offset5(data, offset); }; var isLikelyAacData$1 = function isLikelyAacData2(data) { var offset = getId3Offset4(data, 0); return data.length >= offset + 2 && (data[offset] & 255) === 255 && (data[offset + 1] & 240) === 240 && (data[offset + 1] & 22) === 16; }; var parseSyncSafeInteger = function parseSyncSafeInteger2(data) { return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3]; }; var percentEncode = function percentEncode2(bytes, start2, end) { var i2, result = ""; for (i2 = start2; i2 < end; i2++) { result += "%" + ("00" + bytes[i2].toString(16)).slice(-2); } return result; }; var parseIso88591 = function parseIso885912(bytes, start2, end) { return unescape(percentEncode(bytes, start2, end)); }; var parseAdtsSize = function parseAdtsSize2(header, byteIndex) { var lowThree = (header[byteIndex + 5] & 224) >> 5, middle = header[byteIndex + 4] << 3, highTwo = header[byteIndex + 3] & 3 << 11; return highTwo | middle | lowThree; }; var parseType$2 = function parseType2(header, byteIndex) { if (header[byteIndex] === "I".charCodeAt(0) && header[byteIndex + 1] === "D".charCodeAt(0) && header[byteIndex + 2] === "3".charCodeAt(0)) { return "timed-metadata"; } else if (header[byteIndex] & true && (header[byteIndex + 1] & 240) === 240) { return "audio"; } return null; }; var parseSampleRate = function parseSampleRate2(packet) { var i2 = 0; while (i2 + 5 < packet.length) { if (packet[i2] !== 255 || (packet[i2 + 1] & 246) !== 240) { i2++; continue; } return ADTS_SAMPLING_FREQUENCIES[(packet[i2 + 2] & 60) >>> 2]; } return null; }; var parseAacTimestamp = function parseAacTimestamp2(packet) { var frameStart, frameSize, frame, frameHeader; frameStart = 10; if (packet[5] & 64) { frameStart += 4; frameStart += parseSyncSafeInteger(packet.subarray(10, 14)); } do { frameSize = parseSyncSafeInteger(packet.subarray(frameStart + 4, frameStart + 8)); if (frameSize < 1) { return null; } frameHeader = String.fromCharCode(packet[frameStart], packet[frameStart + 1], packet[frameStart + 2], packet[frameStart + 3]); if (frameHeader === "PRIV") { frame = packet.subarray(frameStart + 10, frameStart + frameSize + 10); for (var i2 = 0; i2 < frame.byteLength; i2++) { if (frame[i2] === 0) { var owner = parseIso88591(frame, 0, i2); if (owner === "com.apple.streaming.transportStreamTimestamp") { var d2 = frame.subarray(i2 + 1); var size = (d2[3] & 1) << 30 | d2[4] << 22 | d2[5] << 14 | d2[6] << 6 | d2[7] >>> 2; size *= 4; size += d2[7] & 3; return size; } break; } } } frameStart += 10; frameStart += frameSize; } while (frameStart < packet.byteLength); return null; }; var utils2 = { isLikelyAacData: isLikelyAacData$1, parseId3TagSize, parseAdtsSize, parseType: parseType$2, parseSampleRate, parseAacTimestamp }; var _AacStream; _AacStream = function AacStream() { var everything = new Uint8Array(), timeStamp = 0; _AacStream.prototype.init.call(this); this.setTimestamp = function(timestamp) { timeStamp = timestamp; }; this.push = function(bytes) { var frameSize = 0, byteIndex = 0, bytesLeft, chunk, packet, tempLength; if (everything.length) { tempLength = everything.length; everything = new Uint8Array(bytes.byteLength + tempLength); everything.set(everything.subarray(0, tempLength)); everything.set(bytes, tempLength); } else { everything = bytes; } while (everything.length - byteIndex >= 3) { if (everything[byteIndex] === "I".charCodeAt(0) && everything[byteIndex + 1] === "D".charCodeAt(0) && everything[byteIndex + 2] === "3".charCodeAt(0)) { if (everything.length - byteIndex < 10) { break; } frameSize = utils2.parseId3TagSize(everything, byteIndex); if (byteIndex + frameSize > everything.length) { break; } chunk = { type: "timed-metadata", data: everything.subarray(byteIndex, byteIndex + frameSize) }; this.trigger("data", chunk); byteIndex += frameSize; continue; } else if ((everything[byteIndex] & 255) === 255 && (everything[byteIndex + 1] & 240) === 240) { if (everything.length - byteIndex < 7) { break; } frameSize = utils2.parseAdtsSize(everything, byteIndex); if (byteIndex + frameSize > everything.length) { break; } packet = { type: "audio", data: everything.subarray(byteIndex, byteIndex + frameSize), pts: timeStamp, dts: timeStamp }; this.trigger("data", packet); byteIndex += frameSize; continue; } byteIndex++; } bytesLeft = everything.length - byteIndex; if (bytesLeft > 0) { everything = everything.subarray(byteIndex); } else { everything = new Uint8Array(); } }; this.reset = function() { everything = new Uint8Array(); this.trigger("reset"); }; this.endTimeline = function() { everything = new Uint8Array(); this.trigger("endedtimeline"); }; }; _AacStream.prototype = new stream(); var aac3 = _AacStream; var AUDIO_PROPERTIES = ["audioobjecttype", "channelcount", "samplerate", "samplingfrequencyindex", "samplesize"]; var audioProperties = AUDIO_PROPERTIES; var VIDEO_PROPERTIES = ["width", "height", "profileIdc", "levelIdc", "profileCompatibility", "sarRatio"]; var videoProperties = VIDEO_PROPERTIES; var H264Stream = h2643.H264Stream; var isLikelyAacData = utils2.isLikelyAacData; var ONE_SECOND_IN_TS$12 = clock2.ONE_SECOND_IN_TS; var _VideoSegmentStream, _AudioSegmentStream, _Transmuxer, _CoalesceStream; var retriggerForStream = function retriggerForStream2(key, event2) { event2.stream = key; this.trigger("log", event2); }; var addPipelineLogRetriggers = function addPipelineLogRetriggers2(transmuxer2, pipeline) { var keys3 = Object.keys(pipeline); for (var i2 = 0; i2 < keys3.length; i2++) { var key = keys3[i2]; if (key === "headOfPipeline" || !pipeline[key].on) { continue; } pipeline[key].on("log", retriggerForStream.bind(transmuxer2, key)); } }; var arrayEquals = function arrayEquals2(a, b) { var i2; if (a.length !== b.length) { return false; } for (i2 = 0; i2 < a.length; i2++) { if (a[i2] !== b[i2]) { return false; } } return true; }; var generateSegmentTimingInfo = function generateSegmentTimingInfo2(baseMediaDecodeTime, startDts, startPts, endDts, endPts, prependedContentDuration) { var ptsOffsetFromDts = startPts - startDts, decodeDuration = endDts - startDts, presentationDuration = endPts - startPts; return { start: { dts: baseMediaDecodeTime, pts: baseMediaDecodeTime + ptsOffsetFromDts }, end: { dts: baseMediaDecodeTime + decodeDuration, pts: baseMediaDecodeTime + presentationDuration }, prependedContentDuration, baseMediaDecodeTime }; }; _AudioSegmentStream = function AudioSegmentStream(track, options2) { var adtsFrames = [], sequenceNumber, earliestAllowedDts = 0, audioAppendStartTs = 0, videoBaseMediaDecodeTime = Infinity; options2 = options2 || {}; sequenceNumber = options2.firstSequenceNumber || 0; _AudioSegmentStream.prototype.init.call(this); this.push = function(data) { trackDecodeInfo.collectDtsInfo(track, data); if (track) { audioProperties.forEach(function(prop) { track[prop] = data[prop]; }); } adtsFrames.push(data); }; this.setEarliestDts = function(earliestDts) { earliestAllowedDts = earliestDts; }; this.setVideoBaseMediaDecodeTime = function(baseMediaDecodeTime) { videoBaseMediaDecodeTime = baseMediaDecodeTime; }; this.setAudioAppendStart = function(timestamp) { audioAppendStartTs = timestamp; }; this.flush = function() { var frames, moof2, mdat2, boxes, frameDuration, segmentDuration, videoClockCyclesOfSilencePrefixed; if (adtsFrames.length === 0) { this.trigger("done", "AudioSegmentStream"); return; } frames = audioFrameUtils.trimAdtsFramesByEarliestDts(adtsFrames, track, earliestAllowedDts); track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options2.keepOriginalTimestamps); videoClockCyclesOfSilencePrefixed = audioFrameUtils.prefixWithSilence(track, frames, audioAppendStartTs, videoBaseMediaDecodeTime); track.samples = audioFrameUtils.generateSampleTable(frames); mdat2 = mp4Generator.mdat(audioFrameUtils.concatenateFrameData(frames)); adtsFrames = []; moof2 = mp4Generator.moof(sequenceNumber, [track]); boxes = new Uint8Array(moof2.byteLength + mdat2.byteLength); sequenceNumber++; boxes.set(moof2); boxes.set(mdat2, moof2.byteLength); trackDecodeInfo.clearDtsInfo(track); frameDuration = Math.ceil(ONE_SECOND_IN_TS$12 * 1024 / track.samplerate); if (frames.length) { segmentDuration = frames.length * frameDuration; this.trigger("segmentTimingInfo", generateSegmentTimingInfo( clock2.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate), frames[0].dts, frames[0].pts, frames[0].dts + segmentDuration, frames[0].pts + segmentDuration, videoClockCyclesOfSilencePrefixed || 0 )); this.trigger("timingInfo", { start: frames[0].pts, end: frames[0].pts + segmentDuration }); } this.trigger("data", { track, boxes }); this.trigger("done", "AudioSegmentStream"); }; this.reset = function() { trackDecodeInfo.clearDtsInfo(track); adtsFrames = []; this.trigger("reset"); }; }; _AudioSegmentStream.prototype = new stream(); _VideoSegmentStream = function VideoSegmentStream(track, options2) { var sequenceNumber, nalUnits = [], gopsToAlignWith = [], config, pps; options2 = options2 || {}; sequenceNumber = options2.firstSequenceNumber || 0; _VideoSegmentStream.prototype.init.call(this); delete track.minPTS; this.gopCache_ = []; this.push = function(nalUnit) { trackDecodeInfo.collectDtsInfo(track, nalUnit); if (nalUnit.nalUnitType === "seq_parameter_set_rbsp" && !config) { config = nalUnit.config; track.sps = [nalUnit.data]; videoProperties.forEach(function(prop) { track[prop] = config[prop]; }, this); } if (nalUnit.nalUnitType === "pic_parameter_set_rbsp" && !pps) { pps = nalUnit.data; track.pps = [nalUnit.data]; } nalUnits.push(nalUnit); }; this.flush = function() { var frames, gopForFusion, gops, moof2, mdat2, boxes, prependedContentDuration = 0, firstGop, lastGop; while (nalUnits.length) { if (nalUnits[0].nalUnitType === "access_unit_delimiter_rbsp") { break; } nalUnits.shift(); } if (nalUnits.length === 0) { this.resetStream_(); this.trigger("done", "VideoSegmentStream"); return; } frames = frameUtils.groupNalsIntoFrames(nalUnits); gops = frameUtils.groupFramesIntoGops(frames); if (!gops[0][0].keyFrame) { gopForFusion = this.getGopForFusion_(nalUnits[0], track); if (gopForFusion) { prependedContentDuration = gopForFusion.duration; gops.unshift(gopForFusion); gops.byteLength += gopForFusion.byteLength; gops.nalCount += gopForFusion.nalCount; gops.pts = gopForFusion.pts; gops.dts = gopForFusion.dts; gops.duration += gopForFusion.duration; } else { gops = frameUtils.extendFirstKeyFrame(gops); } } if (gopsToAlignWith.length) { var alignedGops; if (options2.alignGopsAtEnd) { alignedGops = this.alignGopsAtEnd_(gops); } else { alignedGops = this.alignGopsAtStart_(gops); } if (!alignedGops) { this.gopCache_.unshift({ gop: gops.pop(), pps: track.pps, sps: track.sps }); this.gopCache_.length = Math.min(6, this.gopCache_.length); nalUnits = []; this.resetStream_(); this.trigger("done", "VideoSegmentStream"); return; } trackDecodeInfo.clearDtsInfo(track); gops = alignedGops; } trackDecodeInfo.collectDtsInfo(track, gops); track.samples = frameUtils.generateSampleTable(gops); mdat2 = mp4Generator.mdat(frameUtils.concatenateNalData(gops)); track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options2.keepOriginalTimestamps); this.trigger("processedGopsInfo", gops.map(function(gop) { return { pts: gop.pts, dts: gop.dts, byteLength: gop.byteLength }; })); firstGop = gops[0]; lastGop = gops[gops.length - 1]; this.trigger("segmentTimingInfo", generateSegmentTimingInfo(track.baseMediaDecodeTime, firstGop.dts, firstGop.pts, lastGop.dts + lastGop.duration, lastGop.pts + lastGop.duration, prependedContentDuration)); this.trigger("timingInfo", { start: gops[0].pts, end: gops[gops.length - 1].pts + gops[gops.length - 1].duration }); this.gopCache_.unshift({ gop: gops.pop(), pps: track.pps, sps: track.sps }); this.gopCache_.length = Math.min(6, this.gopCache_.length); nalUnits = []; this.trigger("baseMediaDecodeTime", track.baseMediaDecodeTime); this.trigger("timelineStartInfo", track.timelineStartInfo); moof2 = mp4Generator.moof(sequenceNumber, [track]); boxes = new Uint8Array(moof2.byteLength + mdat2.byteLength); sequenceNumber++; boxes.set(moof2); boxes.set(mdat2, moof2.byteLength); this.trigger("data", { track, boxes }); this.resetStream_(); this.trigger("done", "VideoSegmentStream"); }; this.reset = function() { this.resetStream_(); nalUnits = []; this.gopCache_.length = 0; gopsToAlignWith.length = 0; this.trigger("reset"); }; this.resetStream_ = function() { trackDecodeInfo.clearDtsInfo(track); config = void 0; pps = void 0; }; this.getGopForFusion_ = function(nalUnit) { var halfSecond = 45e3, allowableOverlap = 1e4, nearestDistance = Infinity, dtsDistance, nearestGopObj, currentGop, currentGopObj, i2; for (i2 = 0; i2 < this.gopCache_.length; i2++) { currentGopObj = this.gopCache_[i2]; currentGop = currentGopObj.gop; if (!(track.pps && arrayEquals(track.pps[0], currentGopObj.pps[0])) || !(track.sps && arrayEquals(track.sps[0], currentGopObj.sps[0]))) { continue; } if (currentGop.dts < track.timelineStartInfo.dts) { continue; } dtsDistance = nalUnit.dts - currentGop.dts - currentGop.duration; if (dtsDistance >= -allowableOverlap && dtsDistance <= halfSecond) { if (!nearestGopObj || nearestDistance > dtsDistance) { nearestGopObj = currentGopObj; nearestDistance = dtsDistance; } } } if (nearestGopObj) { return nearestGopObj.gop; } return null; }; this.alignGopsAtStart_ = function(gops) { var alignIndex, gopIndex, align, gop, byteLength, nalCount, duration5, alignedGops; byteLength = gops.byteLength; nalCount = gops.nalCount; duration5 = gops.duration; alignIndex = gopIndex = 0; while (alignIndex < gopsToAlignWith.length && gopIndex < gops.length) { align = gopsToAlignWith[alignIndex]; gop = gops[gopIndex]; if (align.pts === gop.pts) { break; } if (gop.pts > align.pts) { alignIndex++; continue; } gopIndex++; byteLength -= gop.byteLength; nalCount -= gop.nalCount; duration5 -= gop.duration; } if (gopIndex === 0) { return gops; } if (gopIndex === gops.length) { return null; } alignedGops = gops.slice(gopIndex); alignedGops.byteLength = byteLength; alignedGops.duration = duration5; alignedGops.nalCount = nalCount; alignedGops.pts = alignedGops[0].pts; alignedGops.dts = alignedGops[0].dts; return alignedGops; }; this.alignGopsAtEnd_ = function(gops) { var alignIndex, gopIndex, align, gop, alignEndIndex, matchFound; alignIndex = gopsToAlignWith.length - 1; gopIndex = gops.length - 1; alignEndIndex = null; matchFound = false; while (alignIndex >= 0 && gopIndex >= 0) { align = gopsToAlignWith[alignIndex]; gop = gops[gopIndex]; if (align.pts === gop.pts) { matchFound = true; break; } if (align.pts > gop.pts) { alignIndex--; continue; } if (alignIndex === gopsToAlignWith.length - 1) { alignEndIndex = gopIndex; } gopIndex--; } if (!matchFound && alignEndIndex === null) { return null; } var trimIndex; if (matchFound) { trimIndex = gopIndex; } else { trimIndex = alignEndIndex; } if (trimIndex === 0) { return gops; } var alignedGops = gops.slice(trimIndex); var metadata = alignedGops.reduce(function(total, gop2) { total.byteLength += gop2.byteLength; total.duration += gop2.duration; total.nalCount += gop2.nalCount; return total; }, { byteLength: 0, duration: 0, nalCount: 0 }); alignedGops.byteLength = metadata.byteLength; alignedGops.duration = metadata.duration; alignedGops.nalCount = metadata.nalCount; alignedGops.pts = alignedGops[0].pts; alignedGops.dts = alignedGops[0].dts; return alignedGops; }; this.alignGopsWith = function(newGopsToAlignWith) { gopsToAlignWith = newGopsToAlignWith; }; }; _VideoSegmentStream.prototype = new stream(); _CoalesceStream = function CoalesceStream(options2, metadataStream2) { this.numberOfTracks = 0; this.metadataStream = metadataStream2; options2 = options2 || {}; if (typeof options2.remux !== "undefined") { this.remuxTracks = !!options2.remux; } else { this.remuxTracks = true; } if (typeof options2.keepOriginalTimestamps === "boolean") { this.keepOriginalTimestamps = options2.keepOriginalTimestamps; } else { this.keepOriginalTimestamps = false; } this.pendingTracks = []; this.videoTrack = null; this.pendingBoxes = []; this.pendingCaptions = []; this.pendingMetadata = []; this.pendingBytes = 0; this.emittedTracks = 0; _CoalesceStream.prototype.init.call(this); this.push = function(output) { if (output.text) { return this.pendingCaptions.push(output); } if (output.frames) { return this.pendingMetadata.push(output); } this.pendingTracks.push(output.track); this.pendingBytes += output.boxes.byteLength; if (output.track.type === "video") { this.videoTrack = output.track; this.pendingBoxes.push(output.boxes); } if (output.track.type === "audio") { this.audioTrack = output.track; this.pendingBoxes.unshift(output.boxes); } }; }; _CoalesceStream.prototype = new stream(); _CoalesceStream.prototype.flush = function(flushSource) { var offset = 0, event2 = { captions: [], captionStreams: {}, metadata: [], info: {} }, caption, id3, initSegment, timelineStartPts = 0, i2; if (this.pendingTracks.length < this.numberOfTracks) { if (flushSource !== "VideoSegmentStream" && flushSource !== "AudioSegmentStream") { return; } else if (this.remuxTracks) { return; } else if (this.pendingTracks.length === 0) { this.emittedTracks++; if (this.emittedTracks >= this.numberOfTracks) { this.trigger("done"); this.emittedTracks = 0; } return; } } if (this.videoTrack) { timelineStartPts = this.videoTrack.timelineStartInfo.pts; videoProperties.forEach(function(prop) { event2.info[prop] = this.videoTrack[prop]; }, this); } else if (this.audioTrack) { timelineStartPts = this.audioTrack.timelineStartInfo.pts; audioProperties.forEach(function(prop) { event2.info[prop] = this.audioTrack[prop]; }, this); } if (this.videoTrack || this.audioTrack) { if (this.pendingTracks.length === 1) { event2.type = this.pendingTracks[0].type; } else { event2.type = "combined"; } this.emittedTracks += this.pendingTracks.length; initSegment = mp4Generator.initSegment(this.pendingTracks); event2.initSegment = new Uint8Array(initSegment.byteLength); event2.initSegment.set(initSegment); event2.data = new Uint8Array(this.pendingBytes); for (i2 = 0; i2 < this.pendingBoxes.length; i2++) { event2.data.set(this.pendingBoxes[i2], offset); offset += this.pendingBoxes[i2].byteLength; } for (i2 = 0; i2 < this.pendingCaptions.length; i2++) { caption = this.pendingCaptions[i2]; caption.startTime = clock2.metadataTsToSeconds(caption.startPts, timelineStartPts, this.keepOriginalTimestamps); caption.endTime = clock2.metadataTsToSeconds(caption.endPts, timelineStartPts, this.keepOriginalTimestamps); event2.captionStreams[caption.stream] = true; event2.captions.push(caption); } for (i2 = 0; i2 < this.pendingMetadata.length; i2++) { id3 = this.pendingMetadata[i2]; id3.cueTime = clock2.metadataTsToSeconds(id3.pts, timelineStartPts, this.keepOriginalTimestamps); event2.metadata.push(id3); } event2.metadata.dispatchType = this.metadataStream.dispatchType; this.pendingTracks.length = 0; this.videoTrack = null; this.pendingBoxes.length = 0; this.pendingCaptions.length = 0; this.pendingBytes = 0; this.pendingMetadata.length = 0; this.trigger("data", event2); for (i2 = 0; i2 < event2.captions.length; i2++) { caption = event2.captions[i2]; this.trigger("caption", caption); } for (i2 = 0; i2 < event2.metadata.length; i2++) { id3 = event2.metadata[i2]; this.trigger("id3Frame", id3); } } if (this.emittedTracks >= this.numberOfTracks) { this.trigger("done"); this.emittedTracks = 0; } }; _CoalesceStream.prototype.setRemux = function(val) { this.remuxTracks = val; }; _Transmuxer = function Transmuxer(options2) { var self2 = this, hasFlushed = true, videoTrack, audioTrack; _Transmuxer.prototype.init.call(this); options2 = options2 || {}; this.baseMediaDecodeTime = options2.baseMediaDecodeTime || 0; this.transmuxPipeline_ = {}; this.setupAacPipeline = function() { var pipeline = {}; this.transmuxPipeline_ = pipeline; pipeline.type = "aac"; pipeline.metadataStream = new m2ts_1.MetadataStream(); pipeline.aacStream = new aac3(); pipeline.audioTimestampRolloverStream = new m2ts_1.TimestampRolloverStream("audio"); pipeline.timedMetadataTimestampRolloverStream = new m2ts_1.TimestampRolloverStream("timed-metadata"); pipeline.adtsStream = new adts(); pipeline.coalesceStream = new _CoalesceStream(options2, pipeline.metadataStream); pipeline.headOfPipeline = pipeline.aacStream; pipeline.aacStream.pipe(pipeline.audioTimestampRolloverStream).pipe(pipeline.adtsStream); pipeline.aacStream.pipe(pipeline.timedMetadataTimestampRolloverStream).pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream); pipeline.metadataStream.on("timestamp", function(frame) { pipeline.aacStream.setTimestamp(frame.timeStamp); }); pipeline.aacStream.on("data", function(data) { if (data.type !== "timed-metadata" && data.type !== "audio" || pipeline.audioSegmentStream) { return; } audioTrack = audioTrack || { timelineStartInfo: { baseMediaDecodeTime: self2.baseMediaDecodeTime }, codec: "adts", type: "audio" }; pipeline.coalesceStream.numberOfTracks++; pipeline.audioSegmentStream = new _AudioSegmentStream(audioTrack, options2); pipeline.audioSegmentStream.on("log", self2.getLogTrigger_("audioSegmentStream")); pipeline.audioSegmentStream.on("timingInfo", self2.trigger.bind(self2, "audioTimingInfo")); pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream); self2.trigger("trackinfo", { hasAudio: !!audioTrack, hasVideo: !!videoTrack }); }); pipeline.coalesceStream.on("data", this.trigger.bind(this, "data")); pipeline.coalesceStream.on("done", this.trigger.bind(this, "done")); addPipelineLogRetriggers(this, pipeline); }; this.setupTsPipeline = function() { var pipeline = {}; this.transmuxPipeline_ = pipeline; pipeline.type = "ts"; pipeline.metadataStream = new m2ts_1.MetadataStream(); pipeline.packetStream = new m2ts_1.TransportPacketStream(); pipeline.parseStream = new m2ts_1.TransportParseStream(); pipeline.elementaryStream = new m2ts_1.ElementaryStream(); pipeline.timestampRolloverStream = new m2ts_1.TimestampRolloverStream(); pipeline.adtsStream = new adts(); pipeline.h264Stream = new H264Stream(); pipeline.captionStream = new m2ts_1.CaptionStream(options2); pipeline.coalesceStream = new _CoalesceStream(options2, pipeline.metadataStream); pipeline.headOfPipeline = pipeline.packetStream; pipeline.packetStream.pipe(pipeline.parseStream).pipe(pipeline.elementaryStream).pipe(pipeline.timestampRolloverStream); pipeline.timestampRolloverStream.pipe(pipeline.h264Stream); pipeline.timestampRolloverStream.pipe(pipeline.adtsStream); pipeline.timestampRolloverStream.pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream); pipeline.h264Stream.pipe(pipeline.captionStream).pipe(pipeline.coalesceStream); pipeline.elementaryStream.on("data", function(data) { var i2; if (data.type === "metadata") { i2 = data.tracks.length; while (i2--) { if (!videoTrack && data.tracks[i2].type === "video") { videoTrack = data.tracks[i2]; videoTrack.timelineStartInfo.baseMediaDecodeTime = self2.baseMediaDecodeTime; } else if (!audioTrack && data.tracks[i2].type === "audio") { audioTrack = data.tracks[i2]; audioTrack.timelineStartInfo.baseMediaDecodeTime = self2.baseMediaDecodeTime; } } if (videoTrack && !pipeline.videoSegmentStream) { pipeline.coalesceStream.numberOfTracks++; pipeline.videoSegmentStream = new _VideoSegmentStream(videoTrack, options2); pipeline.videoSegmentStream.on("log", self2.getLogTrigger_("videoSegmentStream")); pipeline.videoSegmentStream.on("timelineStartInfo", function(timelineStartInfo) { if (audioTrack && !options2.keepOriginalTimestamps) { audioTrack.timelineStartInfo = timelineStartInfo; pipeline.audioSegmentStream.setEarliestDts(timelineStartInfo.dts - self2.baseMediaDecodeTime); } }); pipeline.videoSegmentStream.on("processedGopsInfo", self2.trigger.bind(self2, "gopInfo")); pipeline.videoSegmentStream.on("segmentTimingInfo", self2.trigger.bind(self2, "videoSegmentTimingInfo")); pipeline.videoSegmentStream.on("baseMediaDecodeTime", function(baseMediaDecodeTime) { if (audioTrack) { pipeline.audioSegmentStream.setVideoBaseMediaDecodeTime(baseMediaDecodeTime); } }); pipeline.videoSegmentStream.on("timingInfo", self2.trigger.bind(self2, "videoTimingInfo")); pipeline.h264Stream.pipe(pipeline.videoSegmentStream).pipe(pipeline.coalesceStream); } if (audioTrack && !pipeline.audioSegmentStream) { pipeline.coalesceStream.numberOfTracks++; pipeline.audioSegmentStream = new _AudioSegmentStream(audioTrack, options2); pipeline.audioSegmentStream.on("log", self2.getLogTrigger_("audioSegmentStream")); pipeline.audioSegmentStream.on("timingInfo", self2.trigger.bind(self2, "audioTimingInfo")); pipeline.audioSegmentStream.on("segmentTimingInfo", self2.trigger.bind(self2, "audioSegmentTimingInfo")); pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream); } self2.trigger("trackinfo", { hasAudio: !!audioTrack, hasVideo: !!videoTrack }); } }); pipeline.coalesceStream.on("data", this.trigger.bind(this, "data")); pipeline.coalesceStream.on("id3Frame", function(id3Frame) { id3Frame.dispatchType = pipeline.metadataStream.dispatchType; self2.trigger("id3Frame", id3Frame); }); pipeline.coalesceStream.on("caption", this.trigger.bind(this, "caption")); pipeline.coalesceStream.on("done", this.trigger.bind(this, "done")); addPipelineLogRetriggers(this, pipeline); }; this.setBaseMediaDecodeTime = function(baseMediaDecodeTime) { var pipeline = this.transmuxPipeline_; if (!options2.keepOriginalTimestamps) { this.baseMediaDecodeTime = baseMediaDecodeTime; } if (audioTrack) { audioTrack.timelineStartInfo.dts = void 0; audioTrack.timelineStartInfo.pts = void 0; trackDecodeInfo.clearDtsInfo(audioTrack); if (pipeline.audioTimestampRolloverStream) { pipeline.audioTimestampRolloverStream.discontinuity(); } } if (videoTrack) { if (pipeline.videoSegmentStream) { pipeline.videoSegmentStream.gopCache_ = []; } videoTrack.timelineStartInfo.dts = void 0; videoTrack.timelineStartInfo.pts = void 0; trackDecodeInfo.clearDtsInfo(videoTrack); pipeline.captionStream.reset(); } if (pipeline.timestampRolloverStream) { pipeline.timestampRolloverStream.discontinuity(); } }; this.setAudioAppendStart = function(timestamp) { if (audioTrack) { this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(timestamp); } }; this.setRemux = function(val) { var pipeline = this.transmuxPipeline_; options2.remux = val; if (pipeline && pipeline.coalesceStream) { pipeline.coalesceStream.setRemux(val); } }; this.alignGopsWith = function(gopsToAlignWith) { if (videoTrack && this.transmuxPipeline_.videoSegmentStream) { this.transmuxPipeline_.videoSegmentStream.alignGopsWith(gopsToAlignWith); } }; this.getLogTrigger_ = function(key) { var self3 = this; return function(event2) { event2.stream = key; self3.trigger("log", event2); }; }; this.push = function(data) { if (hasFlushed) { var isAac = isLikelyAacData(data); if (isAac && this.transmuxPipeline_.type !== "aac") { this.setupAacPipeline(); } else if (!isAac && this.transmuxPipeline_.type !== "ts") { this.setupTsPipeline(); } hasFlushed = false; } this.transmuxPipeline_.headOfPipeline.push(data); }; this.flush = function() { hasFlushed = true; this.transmuxPipeline_.headOfPipeline.flush(); }; this.endTimeline = function() { this.transmuxPipeline_.headOfPipeline.endTimeline(); }; this.reset = function() { if (this.transmuxPipeline_.headOfPipeline) { this.transmuxPipeline_.headOfPipeline.reset(); } }; this.resetCaptions = function() { if (this.transmuxPipeline_.captionStream) { this.transmuxPipeline_.captionStream.reset(); } }; }; _Transmuxer.prototype = new stream(); var transmuxer = { Transmuxer: _Transmuxer, VideoSegmentStream: _VideoSegmentStream, AudioSegmentStream: _AudioSegmentStream, AUDIO_PROPERTIES: audioProperties, VIDEO_PROPERTIES: videoProperties, generateSegmentTimingInfo }; var toUnsigned$3 = function toUnsigned2(value) { return value >>> 0; }; var toHexString$1 = function toHexString2(value) { return ("00" + value.toString(16)).slice(-2); }; var bin = { toUnsigned: toUnsigned$3, toHexString: toHexString$1 }; var parseType$1 = function parseType2(buffer) { var result = ""; result += String.fromCharCode(buffer[0]); result += String.fromCharCode(buffer[1]); result += String.fromCharCode(buffer[2]); result += String.fromCharCode(buffer[3]); return result; }; var parseType_1 = parseType$1; var toUnsigned$2 = bin.toUnsigned; var findBox4 = function findBox5(data, path) { var results = [], i2, size, type3, end, subresults; if (!path.length) { return null; } for (i2 = 0; i2 < data.byteLength; ) { size = toUnsigned$2(data[i2] << 24 | data[i2 + 1] << 16 | data[i2 + 2] << 8 | data[i2 + 3]); type3 = parseType_1(data.subarray(i2 + 4, i2 + 8)); end = size > 1 ? i2 + size : data.byteLength; if (type3 === path[0]) { if (path.length === 1) { results.push(data.subarray(i2 + 8, end)); } else { subresults = findBox5(data.subarray(i2 + 8, end), path.slice(1)); if (subresults.length) { results = results.concat(subresults); } } } i2 = end; } return results; }; var findBox_1 = findBox4; var toUnsigned$1 = bin.toUnsigned; var getUint64$12 = numbers2.getUint64; var tfdt = function tfdt2(data) { var result = { version: data[0], flags: new Uint8Array(data.subarray(1, 4)) }; if (result.version === 1) { result.baseMediaDecodeTime = getUint64$12(data.subarray(4)); } else { result.baseMediaDecodeTime = toUnsigned$1(data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]); } return result; }; var parseTfdt = tfdt; var parseSampleFlags = function parseSampleFlags2(flags) { return { isLeading: (flags[0] & 12) >>> 2, dependsOn: flags[0] & 3, isDependedOn: (flags[1] & 192) >>> 6, hasRedundancy: (flags[1] & 48) >>> 4, paddingValue: (flags[1] & 14) >>> 1, isNonSyncSample: flags[1] & 1, degradationPriority: flags[2] << 8 | flags[3] }; }; var parseSampleFlags_1 = parseSampleFlags; var trun = function trun2(data) { var result = { version: data[0], flags: new Uint8Array(data.subarray(1, 4)), samples: [] }, view = new DataView(data.buffer, data.byteOffset, data.byteLength), dataOffsetPresent = result.flags[2] & 1, firstSampleFlagsPresent = result.flags[2] & 4, sampleDurationPresent = result.flags[1] & 1, sampleSizePresent = result.flags[1] & 2, sampleFlagsPresent = result.flags[1] & 4, sampleCompositionTimeOffsetPresent = result.flags[1] & 8, sampleCount = view.getUint32(4), offset = 8, sample; if (dataOffsetPresent) { result.dataOffset = view.getInt32(offset); offset += 4; } if (firstSampleFlagsPresent && sampleCount) { sample = { flags: parseSampleFlags_1(data.subarray(offset, offset + 4)) }; offset += 4; if (sampleDurationPresent) { sample.duration = view.getUint32(offset); offset += 4; } if (sampleSizePresent) { sample.size = view.getUint32(offset); offset += 4; } if (sampleCompositionTimeOffsetPresent) { if (result.version === 1) { sample.compositionTimeOffset = view.getInt32(offset); } else { sample.compositionTimeOffset = view.getUint32(offset); } offset += 4; } result.samples.push(sample); sampleCount--; } while (sampleCount--) { sample = {}; if (sampleDurationPresent) { sample.duration = view.getUint32(offset); offset += 4; } if (sampleSizePresent) { sample.size = view.getUint32(offset); offset += 4; } if (sampleFlagsPresent) { sample.flags = parseSampleFlags_1(data.subarray(offset, offset + 4)); offset += 4; } if (sampleCompositionTimeOffsetPresent) { if (result.version === 1) { sample.compositionTimeOffset = view.getInt32(offset); } else { sample.compositionTimeOffset = view.getUint32(offset); } offset += 4; } result.samples.push(sample); } return result; }; var parseTrun = trun; var tfhd = function tfhd2(data) { var view = new DataView(data.buffer, data.byteOffset, data.byteLength), result = { version: data[0], flags: new Uint8Array(data.subarray(1, 4)), trackId: view.getUint32(4) }, baseDataOffsetPresent = result.flags[2] & 1, sampleDescriptionIndexPresent = result.flags[2] & 2, defaultSampleDurationPresent = result.flags[2] & 8, defaultSampleSizePresent = result.flags[2] & 16, defaultSampleFlagsPresent = result.flags[2] & 32, durationIsEmpty = result.flags[0] & 65536, defaultBaseIsMoof = result.flags[0] & 131072, i2; i2 = 8; if (baseDataOffsetPresent) { i2 += 4; result.baseDataOffset = view.getUint32(12); i2 += 4; } if (sampleDescriptionIndexPresent) { result.sampleDescriptionIndex = view.getUint32(i2); i2 += 4; } if (defaultSampleDurationPresent) { result.defaultSampleDuration = view.getUint32(i2); i2 += 4; } if (defaultSampleSizePresent) { result.defaultSampleSize = view.getUint32(i2); i2 += 4; } if (defaultSampleFlagsPresent) { result.defaultSampleFlags = view.getUint32(i2); } if (durationIsEmpty) { result.durationIsEmpty = true; } if (!baseDataOffsetPresent && defaultBaseIsMoof) { result.baseDataOffsetIsMoof = true; } return result; }; var parseTfhd = tfhd; var commonjsGlobal2 = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; var win2; if (typeof window !== "undefined") { win2 = window; } else if (typeof commonjsGlobal2 !== "undefined") { win2 = commonjsGlobal2; } else if (typeof self !== "undefined") { win2 = self; } else { win2 = {}; } var window_12 = win2; var discardEmulationPreventionBytes4 = captionPacketParser.discardEmulationPreventionBytes; var CaptionStream = captionStream.CaptionStream; var mapToSample = function mapToSample2(offset, samples) { var approximateOffset = offset; for (var i2 = 0; i2 < samples.length; i2++) { var sample = samples[i2]; if (approximateOffset < sample.size) { return sample; } approximateOffset -= sample.size; } return null; }; var findSeiNals = function findSeiNals2(avcStream, samples, trackId) { var avcView = new DataView(avcStream.buffer, avcStream.byteOffset, avcStream.byteLength), result = { logs: [], seiNals: [] }, seiNal, i2, length, lastMatchedSample; for (i2 = 0; i2 + 4 < avcStream.length; i2 += length) { length = avcView.getUint32(i2); i2 += 4; if (length <= 0) { continue; } switch (avcStream[i2] & 31) { case 6: var data = avcStream.subarray(i2 + 1, i2 + 1 + length); var matchingSample = mapToSample(i2, samples); seiNal = { nalUnitType: "sei_rbsp", size: length, data, escapedRBSP: discardEmulationPreventionBytes4(data), trackId }; if (matchingSample) { seiNal.pts = matchingSample.pts; seiNal.dts = matchingSample.dts; lastMatchedSample = matchingSample; } else if (lastMatchedSample) { seiNal.pts = lastMatchedSample.pts; seiNal.dts = lastMatchedSample.dts; } else { result.logs.push({ level: "warn", message: "We've encountered a nal unit without data at " + i2 + " for trackId " + trackId + ". See mux.js#223." }); break; } result.seiNals.push(seiNal); break; } } return result; }; var parseSamples = function parseSamples2(truns, baseMediaDecodeTime, tfhd2) { var currentDts = baseMediaDecodeTime; var defaultSampleDuration = tfhd2.defaultSampleDuration || 0; var defaultSampleSize = tfhd2.defaultSampleSize || 0; var trackId = tfhd2.trackId; var allSamples = []; truns.forEach(function(trun2) { var trackRun = parseTrun(trun2); var samples = trackRun.samples; samples.forEach(function(sample) { if (sample.duration === void 0) { sample.duration = defaultSampleDuration; } if (sample.size === void 0) { sample.size = defaultSampleSize; } sample.trackId = trackId; sample.dts = currentDts; if (sample.compositionTimeOffset === void 0) { sample.compositionTimeOffset = 0; } if (typeof currentDts === "bigint") { sample.pts = currentDts + window_12.BigInt(sample.compositionTimeOffset); currentDts += window_12.BigInt(sample.duration); } else { sample.pts = currentDts + sample.compositionTimeOffset; currentDts += sample.duration; } }); allSamples = allSamples.concat(samples); }); return allSamples; }; var parseCaptionNals = function parseCaptionNals2(segment, videoTrackId) { var trafs = findBox_1(segment, ["moof", "traf"]); var mdats = findBox_1(segment, ["mdat"]); var captionNals = {}; var mdatTrafPairs = []; mdats.forEach(function(mdat2, index2) { var matchingTraf = trafs[index2]; mdatTrafPairs.push({ mdat: mdat2, traf: matchingTraf }); }); mdatTrafPairs.forEach(function(pair) { var mdat2 = pair.mdat; var traf2 = pair.traf; var tfhd2 = findBox_1(traf2, ["tfhd"]); var headerInfo = parseTfhd(tfhd2[0]); var trackId = headerInfo.trackId; var tfdt2 = findBox_1(traf2, ["tfdt"]); var baseMediaDecodeTime = tfdt2.length > 0 ? parseTfdt(tfdt2[0]).baseMediaDecodeTime : 0; var truns = findBox_1(traf2, ["trun"]); var samples; var result; if (videoTrackId === trackId && truns.length > 0) { samples = parseSamples(truns, baseMediaDecodeTime, headerInfo); result = findSeiNals(mdat2, samples, trackId); if (!captionNals[trackId]) { captionNals[trackId] = { seiNals: [], logs: [] }; } captionNals[trackId].seiNals = captionNals[trackId].seiNals.concat(result.seiNals); captionNals[trackId].logs = captionNals[trackId].logs.concat(result.logs); } }); return captionNals; }; var parseEmbeddedCaptions = function parseEmbeddedCaptions2(segment, trackId, timescale3) { var captionNals; if (trackId === null) { return null; } captionNals = parseCaptionNals(segment, trackId); var trackNals = captionNals[trackId] || {}; return { seiNals: trackNals.seiNals, logs: trackNals.logs, timescale: timescale3 }; }; var CaptionParser = function CaptionParser2() { var isInitialized = false; var captionStream2; var segmentCache; var trackId; var timescale3; var parsedCaptions; var parsingPartial; this.isInitialized = function() { return isInitialized; }; this.init = function(options2) { captionStream2 = new CaptionStream(); isInitialized = true; parsingPartial = options2 ? options2.isPartial : false; captionStream2.on("data", function(event2) { event2.startTime = event2.startPts / timescale3; event2.endTime = event2.endPts / timescale3; parsedCaptions.captions.push(event2); parsedCaptions.captionStreams[event2.stream] = true; }); captionStream2.on("log", function(log2) { parsedCaptions.logs.push(log2); }); }; this.isNewInit = function(videoTrackIds, timescales) { if (videoTrackIds && videoTrackIds.length === 0 || timescales && typeof timescales === "object" && Object.keys(timescales).length === 0) { return false; } return trackId !== videoTrackIds[0] || timescale3 !== timescales[trackId]; }; this.parse = function(segment, videoTrackIds, timescales) { var parsedData; if (!this.isInitialized()) { return null; } else if (!videoTrackIds || !timescales) { return null; } else if (this.isNewInit(videoTrackIds, timescales)) { trackId = videoTrackIds[0]; timescale3 = timescales[trackId]; } else if (trackId === null || !timescale3) { segmentCache.push(segment); return null; } while (segmentCache.length > 0) { var cachedSegment = segmentCache.shift(); this.parse(cachedSegment, videoTrackIds, timescales); } parsedData = parseEmbeddedCaptions(segment, trackId, timescale3); if (parsedData && parsedData.logs) { parsedCaptions.logs = parsedCaptions.logs.concat(parsedData.logs); } if (parsedData === null || !parsedData.seiNals) { if (parsedCaptions.logs.length) { return { logs: parsedCaptions.logs, captions: [], captionStreams: [] }; } return null; } this.pushNals(parsedData.seiNals); this.flushStream(); return parsedCaptions; }; this.pushNals = function(nals) { if (!this.isInitialized() || !nals || nals.length === 0) { return null; } nals.forEach(function(nal) { captionStream2.push(nal); }); }; this.flushStream = function() { if (!this.isInitialized()) { return null; } if (!parsingPartial) { captionStream2.flush(); } else { captionStream2.partialFlush(); } }; this.clearParsedCaptions = function() { parsedCaptions.captions = []; parsedCaptions.captionStreams = {}; parsedCaptions.logs = []; }; this.resetCaptionStream = function() { if (!this.isInitialized()) { return null; } captionStream2.reset(); }; this.clearAllCaptions = function() { this.clearParsedCaptions(); this.resetCaptionStream(); }; this.reset = function() { segmentCache = []; trackId = null; timescale3 = null; if (!parsedCaptions) { parsedCaptions = { captions: [], captionStreams: {}, logs: [] }; } else { this.clearParsedCaptions(); } this.resetCaptionStream(); }; this.reset(); }; var captionParser = CaptionParser; var toUnsigned = bin.toUnsigned; var toHexString = bin.toHexString; var getUint642 = numbers2.getUint64; var timescale2, startTime, compositionStartTime, getVideoTrackIds, getTracks, getTimescaleFromMediaHeader; timescale2 = function timescale3(init) { var result = {}, traks = findBox_1(init, ["moov", "trak"]); return traks.reduce(function(result2, trak2) { var tkhd2, version2, index2, id, mdhd2; tkhd2 = findBox_1(trak2, ["tkhd"])[0]; if (!tkhd2) { return null; } version2 = tkhd2[0]; index2 = version2 === 0 ? 12 : 20; id = toUnsigned(tkhd2[index2] << 24 | tkhd2[index2 + 1] << 16 | tkhd2[index2 + 2] << 8 | tkhd2[index2 + 3]); mdhd2 = findBox_1(trak2, ["mdia", "mdhd"])[0]; if (!mdhd2) { return null; } version2 = mdhd2[0]; index2 = version2 === 0 ? 12 : 20; result2[id] = toUnsigned(mdhd2[index2] << 24 | mdhd2[index2 + 1] << 16 | mdhd2[index2 + 2] << 8 | mdhd2[index2 + 3]); return result2; }, result); }; startTime = function startTime2(timescale3, fragment) { var trafs; trafs = findBox_1(fragment, ["moof", "traf"]); var lowestTime = trafs.reduce(function(acc, traf2) { var tfhd2 = findBox_1(traf2, ["tfhd"])[0]; var id = toUnsigned(tfhd2[4] << 24 | tfhd2[5] << 16 | tfhd2[6] << 8 | tfhd2[7]); var scale = timescale3[id] || 9e4; var tfdt2 = findBox_1(traf2, ["tfdt"])[0]; var dv = new DataView(tfdt2.buffer, tfdt2.byteOffset, tfdt2.byteLength); var baseTime; if (tfdt2[0] === 1) { baseTime = getUint642(tfdt2.subarray(4, 12)); } else { baseTime = dv.getUint32(4); } var seconds; if (typeof baseTime === "bigint") { seconds = baseTime / window_12.BigInt(scale); } else if (typeof baseTime === "number" && !isNaN(baseTime)) { seconds = baseTime / scale; } if (seconds < Number.MAX_SAFE_INTEGER) { seconds = Number(seconds); } if (seconds < acc) { acc = seconds; } return acc; }, Infinity); return typeof lowestTime === "bigint" || isFinite(lowestTime) ? lowestTime : 0; }; compositionStartTime = function compositionStartTime2(timescales, fragment) { var trafBoxes = findBox_1(fragment, ["moof", "traf"]); var baseMediaDecodeTime = 0; var compositionTimeOffset = 0; var trackId; if (trafBoxes && trafBoxes.length) { var tfhd2 = findBox_1(trafBoxes[0], ["tfhd"])[0]; var trun2 = findBox_1(trafBoxes[0], ["trun"])[0]; var tfdt2 = findBox_1(trafBoxes[0], ["tfdt"])[0]; if (tfhd2) { var parsedTfhd = parseTfhd(tfhd2); trackId = parsedTfhd.trackId; } if (tfdt2) { var parsedTfdt = parseTfdt(tfdt2); baseMediaDecodeTime = parsedTfdt.baseMediaDecodeTime; } if (trun2) { var parsedTrun = parseTrun(trun2); if (parsedTrun.samples && parsedTrun.samples.length) { compositionTimeOffset = parsedTrun.samples[0].compositionTimeOffset || 0; } } } var timescale3 = timescales[trackId] || 9e4; if (typeof baseMediaDecodeTime === "bigint") { compositionTimeOffset = window_12.BigInt(compositionTimeOffset); timescale3 = window_12.BigInt(timescale3); } var result = (baseMediaDecodeTime + compositionTimeOffset) / timescale3; if (typeof result === "bigint" && result < Number.MAX_SAFE_INTEGER) { result = Number(result); } return result; }; getVideoTrackIds = function getVideoTrackIds2(init) { var traks = findBox_1(init, ["moov", "trak"]); var videoTrackIds = []; traks.forEach(function(trak2) { var hdlrs = findBox_1(trak2, ["mdia", "hdlr"]); var tkhds = findBox_1(trak2, ["tkhd"]); hdlrs.forEach(function(hdlr2, index2) { var handlerType = parseType_1(hdlr2.subarray(8, 12)); var tkhd2 = tkhds[index2]; var view; var version2; var trackId; if (handlerType === "vide") { view = new DataView(tkhd2.buffer, tkhd2.byteOffset, tkhd2.byteLength); version2 = view.getUint8(0); trackId = version2 === 0 ? view.getUint32(12) : view.getUint32(20); videoTrackIds.push(trackId); } }); }); return videoTrackIds; }; getTimescaleFromMediaHeader = function getTimescaleFromMediaHeader2(mdhd2) { var version2 = mdhd2[0]; var index2 = version2 === 0 ? 12 : 20; return toUnsigned(mdhd2[index2] << 24 | mdhd2[index2 + 1] << 16 | mdhd2[index2 + 2] << 8 | mdhd2[index2 + 3]); }; getTracks = function getTracks2(init) { var traks = findBox_1(init, ["moov", "trak"]); var tracks = []; traks.forEach(function(trak2) { var track = {}; var tkhd2 = findBox_1(trak2, ["tkhd"])[0]; var view, tkhdVersion; if (tkhd2) { view = new DataView(tkhd2.buffer, tkhd2.byteOffset, tkhd2.byteLength); tkhdVersion = view.getUint8(0); track.id = tkhdVersion === 0 ? view.getUint32(12) : view.getUint32(20); } var hdlr2 = findBox_1(trak2, ["mdia", "hdlr"])[0]; if (hdlr2) { var type3 = parseType_1(hdlr2.subarray(8, 12)); if (type3 === "vide") { track.type = "video"; } else if (type3 === "soun") { track.type = "audio"; } else { track.type = type3; } } var stsd2 = findBox_1(trak2, ["mdia", "minf", "stbl", "stsd"])[0]; if (stsd2) { var sampleDescriptions = stsd2.subarray(8); track.codec = parseType_1(sampleDescriptions.subarray(4, 8)); var codecBox = findBox_1(sampleDescriptions, [track.codec])[0]; var codecConfig, codecConfigType; if (codecBox) { if (/^[asm]vc[1-9]$/i.test(track.codec)) { codecConfig = codecBox.subarray(78); codecConfigType = parseType_1(codecConfig.subarray(4, 8)); if (codecConfigType === "avcC" && codecConfig.length > 11) { track.codec += "."; track.codec += toHexString(codecConfig[9]); track.codec += toHexString(codecConfig[10]); track.codec += toHexString(codecConfig[11]); } else { track.codec = "avc1.4d400d"; } } else if (/^mp4[a,v]$/i.test(track.codec)) { codecConfig = codecBox.subarray(28); codecConfigType = parseType_1(codecConfig.subarray(4, 8)); if (codecConfigType === "esds" && codecConfig.length > 20 && codecConfig[19] !== 0) { track.codec += "." + toHexString(codecConfig[19]); track.codec += "." + toHexString(codecConfig[20] >>> 2 & 63).replace(/^0/, ""); } else { track.codec = "mp4a.40.2"; } } else { track.codec = track.codec.toLowerCase(); } } } var mdhd2 = findBox_1(trak2, ["mdia", "mdhd"])[0]; if (mdhd2) { track.timescale = getTimescaleFromMediaHeader(mdhd2); } tracks.push(track); }); return tracks; }; var probe$2 = { findBox: findBox_1, parseType: parseType_1, timescale: timescale2, startTime, compositionStartTime, videoTrackIds: getVideoTrackIds, tracks: getTracks, getTimescaleFromMediaHeader }; var parsePid = function parsePid2(packet) { var pid = packet[1] & 31; pid <<= 8; pid |= packet[2]; return pid; }; var parsePayloadUnitStartIndicator = function parsePayloadUnitStartIndicator2(packet) { return !!(packet[1] & 64); }; var parseAdaptionField = function parseAdaptionField2(packet) { var offset = 0; if ((packet[3] & 48) >>> 4 > 1) { offset += packet[4] + 1; } return offset; }; var parseType = function parseType2(packet, pmtPid) { var pid = parsePid(packet); if (pid === 0) { return "pat"; } else if (pid === pmtPid) { return "pmt"; } else if (pmtPid) { return "pes"; } return null; }; var parsePat = function parsePat2(packet) { var pusi = parsePayloadUnitStartIndicator(packet); var offset = 4 + parseAdaptionField(packet); if (pusi) { offset += packet[offset] + 1; } return (packet[offset + 10] & 31) << 8 | packet[offset + 11]; }; var parsePmt = function parsePmt2(packet) { var programMapTable = {}; var pusi = parsePayloadUnitStartIndicator(packet); var payloadOffset = 4 + parseAdaptionField(packet); if (pusi) { payloadOffset += packet[payloadOffset] + 1; } if (!(packet[payloadOffset + 5] & 1)) { return; } var sectionLength, tableEnd, programInfoLength; sectionLength = (packet[payloadOffset + 1] & 15) << 8 | packet[payloadOffset + 2]; tableEnd = 3 + sectionLength - 4; programInfoLength = (packet[payloadOffset + 10] & 15) << 8 | packet[payloadOffset + 11]; var offset = 12 + programInfoLength; while (offset < tableEnd) { var i2 = payloadOffset + offset; programMapTable[(packet[i2 + 1] & 31) << 8 | packet[i2 + 2]] = packet[i2]; offset += ((packet[i2 + 3] & 15) << 8 | packet[i2 + 4]) + 5; } return programMapTable; }; var parsePesType = function parsePesType2(packet, programMapTable) { var pid = parsePid(packet); var type3 = programMapTable[pid]; switch (type3) { case streamTypes.H264_STREAM_TYPE: return "video"; case streamTypes.ADTS_STREAM_TYPE: return "audio"; case streamTypes.METADATA_STREAM_TYPE: return "timed-metadata"; default: return null; } }; var parsePesTime = function parsePesTime2(packet) { var pusi = parsePayloadUnitStartIndicator(packet); if (!pusi) { return null; } var offset = 4 + parseAdaptionField(packet); if (offset >= packet.byteLength) { return null; } var pes = null; var ptsDtsFlags; ptsDtsFlags = packet[offset + 7]; if (ptsDtsFlags & 192) { pes = {}; pes.pts = (packet[offset + 9] & 14) << 27 | (packet[offset + 10] & 255) << 20 | (packet[offset + 11] & 254) << 12 | (packet[offset + 12] & 255) << 5 | (packet[offset + 13] & 254) >>> 3; pes.pts *= 4; pes.pts += (packet[offset + 13] & 6) >>> 1; pes.dts = pes.pts; if (ptsDtsFlags & 64) { pes.dts = (packet[offset + 14] & 14) << 27 | (packet[offset + 15] & 255) << 20 | (packet[offset + 16] & 254) << 12 | (packet[offset + 17] & 255) << 5 | (packet[offset + 18] & 254) >>> 3; pes.dts *= 4; pes.dts += (packet[offset + 18] & 6) >>> 1; } } return pes; }; var parseNalUnitType = function parseNalUnitType2(type3) { switch (type3) { case 5: return "slice_layer_without_partitioning_rbsp_idr"; case 6: return "sei_rbsp"; case 7: return "seq_parameter_set_rbsp"; case 8: return "pic_parameter_set_rbsp"; case 9: return "access_unit_delimiter_rbsp"; default: return null; } }; var videoPacketContainsKeyFrame = function videoPacketContainsKeyFrame2(packet) { var offset = 4 + parseAdaptionField(packet); var frameBuffer = packet.subarray(offset); var frameI = 0; var frameSyncPoint = 0; var foundKeyFrame = false; var nalType; for (; frameSyncPoint < frameBuffer.byteLength - 3; frameSyncPoint++) { if (frameBuffer[frameSyncPoint + 2] === 1) { frameI = frameSyncPoint + 5; break; } } while (frameI < frameBuffer.byteLength) { switch (frameBuffer[frameI]) { case 0: if (frameBuffer[frameI - 1] !== 0) { frameI += 2; break; } else if (frameBuffer[frameI - 2] !== 0) { frameI++; break; } if (frameSyncPoint + 3 !== frameI - 2) { nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 31); if (nalType === "slice_layer_without_partitioning_rbsp_idr") { foundKeyFrame = true; } } do { frameI++; } while (frameBuffer[frameI] !== 1 && frameI < frameBuffer.length); frameSyncPoint = frameI - 2; frameI += 3; break; case 1: if (frameBuffer[frameI - 1] !== 0 || frameBuffer[frameI - 2] !== 0) { frameI += 3; break; } nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 31); if (nalType === "slice_layer_without_partitioning_rbsp_idr") { foundKeyFrame = true; } frameSyncPoint = frameI - 2; frameI += 3; break; default: frameI += 3; break; } } frameBuffer = frameBuffer.subarray(frameSyncPoint); frameI -= frameSyncPoint; frameSyncPoint = 0; if (frameBuffer && frameBuffer.byteLength > 3) { nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 31); if (nalType === "slice_layer_without_partitioning_rbsp_idr") { foundKeyFrame = true; } } return foundKeyFrame; }; var probe$1 = { parseType, parsePat, parsePmt, parsePayloadUnitStartIndicator, parsePesType, parsePesTime, videoPacketContainsKeyFrame }; var handleRollover = timestampRolloverStream.handleRollover; var probe = {}; probe.ts = probe$1; probe.aac = utils2; var ONE_SECOND_IN_TS2 = clock2.ONE_SECOND_IN_TS; var MP2T_PACKET_LENGTH = 188, SYNC_BYTE = 71; var parsePsi_ = function parsePsi_2(bytes, pmt) { var startIndex = 0, endIndex = MP2T_PACKET_LENGTH, packet, type3; while (endIndex < bytes.byteLength) { if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pat": pmt.pid = probe.ts.parsePat(packet); break; case "pmt": var table = probe.ts.parsePmt(packet); pmt.table = pmt.table || {}; Object.keys(table).forEach(function(key) { pmt.table[key] = table[key]; }); break; } startIndex += MP2T_PACKET_LENGTH; endIndex += MP2T_PACKET_LENGTH; continue; } startIndex++; endIndex++; } }; var parseAudioPes_ = function parseAudioPes_2(bytes, pmt, result) { var startIndex = 0, endIndex = MP2T_PACKET_LENGTH, packet, type3, pesType, pusi, parsed; var endLoop = false; while (endIndex <= bytes.byteLength) { if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pes": pesType = probe.ts.parsePesType(packet, pmt.table); pusi = probe.ts.parsePayloadUnitStartIndicator(packet); if (pesType === "audio" && pusi) { parsed = probe.ts.parsePesTime(packet); if (parsed) { parsed.type = "audio"; result.audio.push(parsed); endLoop = true; } } break; } if (endLoop) { break; } startIndex += MP2T_PACKET_LENGTH; endIndex += MP2T_PACKET_LENGTH; continue; } startIndex++; endIndex++; } endIndex = bytes.byteLength; startIndex = endIndex - MP2T_PACKET_LENGTH; endLoop = false; while (startIndex >= 0) { if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pes": pesType = probe.ts.parsePesType(packet, pmt.table); pusi = probe.ts.parsePayloadUnitStartIndicator(packet); if (pesType === "audio" && pusi) { parsed = probe.ts.parsePesTime(packet); if (parsed) { parsed.type = "audio"; result.audio.push(parsed); endLoop = true; } } break; } if (endLoop) { break; } startIndex -= MP2T_PACKET_LENGTH; endIndex -= MP2T_PACKET_LENGTH; continue; } startIndex--; endIndex--; } }; var parseVideoPes_ = function parseVideoPes_2(bytes, pmt, result) { var startIndex = 0, endIndex = MP2T_PACKET_LENGTH, packet, type3, pesType, pusi, parsed, frame, i2, pes; var endLoop = false; var currentFrame = { data: [], size: 0 }; while (endIndex < bytes.byteLength) { if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pes": pesType = probe.ts.parsePesType(packet, pmt.table); pusi = probe.ts.parsePayloadUnitStartIndicator(packet); if (pesType === "video") { if (pusi && !endLoop) { parsed = probe.ts.parsePesTime(packet); if (parsed) { parsed.type = "video"; result.video.push(parsed); endLoop = true; } } if (!result.firstKeyFrame) { if (pusi) { if (currentFrame.size !== 0) { frame = new Uint8Array(currentFrame.size); i2 = 0; while (currentFrame.data.length) { pes = currentFrame.data.shift(); frame.set(pes, i2); i2 += pes.byteLength; } if (probe.ts.videoPacketContainsKeyFrame(frame)) { var firstKeyFrame = probe.ts.parsePesTime(frame); if (firstKeyFrame) { result.firstKeyFrame = firstKeyFrame; result.firstKeyFrame.type = "video"; } else { console.warn("Failed to extract PTS/DTS from PES at first keyframe. This could be an unusual TS segment, or else mux.js did not parse your TS segment correctly. If you know your TS segments do contain PTS/DTS on keyframes please file a bug report! You can try ffprobe to double check for yourself."); } } currentFrame.size = 0; } } currentFrame.data.push(packet); currentFrame.size += packet.byteLength; } } break; } if (endLoop && result.firstKeyFrame) { break; } startIndex += MP2T_PACKET_LENGTH; endIndex += MP2T_PACKET_LENGTH; continue; } startIndex++; endIndex++; } endIndex = bytes.byteLength; startIndex = endIndex - MP2T_PACKET_LENGTH; endLoop = false; while (startIndex >= 0) { if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) { packet = bytes.subarray(startIndex, endIndex); type3 = probe.ts.parseType(packet, pmt.pid); switch (type3) { case "pes": pesType = probe.ts.parsePesType(packet, pmt.table); pusi = probe.ts.parsePayloadUnitStartIndicator(packet); if (pesType === "video" && pusi) { parsed = probe.ts.parsePesTime(packet); if (parsed) { parsed.type = "video"; result.video.push(parsed); endLoop = true; } } break; } if (endLoop) { break; } startIndex -= MP2T_PACKET_LENGTH; endIndex -= MP2T_PACKET_LENGTH; continue; } startIndex--; endIndex--; } }; var adjustTimestamp_ = function adjustTimestamp_2(segmentInfo, baseTimestamp) { if (segmentInfo.audio && segmentInfo.audio.length) { var audioBaseTimestamp = baseTimestamp; if (typeof audioBaseTimestamp === "undefined" || isNaN(audioBaseTimestamp)) { audioBaseTimestamp = segmentInfo.audio[0].dts; } segmentInfo.audio.forEach(function(info) { info.dts = handleRollover(info.dts, audioBaseTimestamp); info.pts = handleRollover(info.pts, audioBaseTimestamp); info.dtsTime = info.dts / ONE_SECOND_IN_TS2; info.ptsTime = info.pts / ONE_SECOND_IN_TS2; }); } if (segmentInfo.video && segmentInfo.video.length) { var videoBaseTimestamp = baseTimestamp; if (typeof videoBaseTimestamp === "undefined" || isNaN(videoBaseTimestamp)) { videoBaseTimestamp = segmentInfo.video[0].dts; } segmentInfo.video.forEach(function(info) { info.dts = handleRollover(info.dts, videoBaseTimestamp); info.pts = handleRollover(info.pts, videoBaseTimestamp); info.dtsTime = info.dts / ONE_SECOND_IN_TS2; info.ptsTime = info.pts / ONE_SECOND_IN_TS2; }); if (segmentInfo.firstKeyFrame) { var frame = segmentInfo.firstKeyFrame; frame.dts = handleRollover(frame.dts, videoBaseTimestamp); frame.pts = handleRollover(frame.pts, videoBaseTimestamp); frame.dtsTime = frame.dts / ONE_SECOND_IN_TS2; frame.ptsTime = frame.pts / ONE_SECOND_IN_TS2; } } }; var inspectAac_ = function inspectAac_2(bytes) { var endLoop = false, audioCount = 0, sampleRate = null, timestamp = null, frameSize = 0, byteIndex = 0, packet; while (bytes.length - byteIndex >= 3) { var type3 = probe.aac.parseType(bytes, byteIndex); switch (type3) { case "timed-metadata": if (bytes.length - byteIndex < 10) { endLoop = true; break; } frameSize = probe.aac.parseId3TagSize(bytes, byteIndex); if (frameSize > bytes.length) { endLoop = true; break; } if (timestamp === null) { packet = bytes.subarray(byteIndex, byteIndex + frameSize); timestamp = probe.aac.parseAacTimestamp(packet); } byteIndex += frameSize; break; case "audio": if (bytes.length - byteIndex < 7) { endLoop = true; break; } frameSize = probe.aac.parseAdtsSize(bytes, byteIndex); if (frameSize > bytes.length) { endLoop = true; break; } if (sampleRate === null) { packet = bytes.subarray(byteIndex, byteIndex + frameSize); sampleRate = probe.aac.parseSampleRate(packet); } audioCount++; byteIndex += frameSize; break; default: byteIndex++; break; } if (endLoop) { return null; } } if (sampleRate === null || timestamp === null) { return null; } var audioTimescale = ONE_SECOND_IN_TS2 / sampleRate; var result = { audio: [{ type: "audio", dts: timestamp, pts: timestamp }, { type: "audio", dts: timestamp + audioCount * 1024 * audioTimescale, pts: timestamp + audioCount * 1024 * audioTimescale }] }; return result; }; var inspectTs_ = function inspectTs_2(bytes) { var pmt = { pid: null, table: null }; var result = {}; parsePsi_(bytes, pmt); for (var pid in pmt.table) { if (pmt.table.hasOwnProperty(pid)) { var type3 = pmt.table[pid]; switch (type3) { case streamTypes.H264_STREAM_TYPE: result.video = []; parseVideoPes_(bytes, pmt, result); if (result.video.length === 0) { delete result.video; } break; case streamTypes.ADTS_STREAM_TYPE: result.audio = []; parseAudioPes_(bytes, pmt, result); if (result.audio.length === 0) { delete result.audio; } break; } } } return result; }; var inspect = function inspect2(bytes, baseTimestamp) { var isAacData = probe.aac.isLikelyAacData(bytes); var result; if (isAacData) { result = inspectAac_(bytes); } else { result = inspectTs_(bytes); } if (!result || !result.audio && !result.video) { return null; } adjustTimestamp_(result, baseTimestamp); return result; }; var tsInspector = { inspect, parseAudioPes_ }; var wireTransmuxerEvents = function wireTransmuxerEvents2(self2, transmuxer2) { transmuxer2.on("data", function(segment) { var initArray = segment.initSegment; segment.initSegment = { data: initArray.buffer, byteOffset: initArray.byteOffset, byteLength: initArray.byteLength }; var typedArray = segment.data; segment.data = typedArray.buffer; self2.postMessage({ action: "data", segment, byteOffset: typedArray.byteOffset, byteLength: typedArray.byteLength }, [segment.data]); }); transmuxer2.on("done", function(data) { self2.postMessage({ action: "done" }); }); transmuxer2.on("gopInfo", function(gopInfo) { self2.postMessage({ action: "gopInfo", gopInfo }); }); transmuxer2.on("videoSegmentTimingInfo", function(timingInfo) { var videoSegmentTimingInfo = { start: { decode: clock2.videoTsToSeconds(timingInfo.start.dts), presentation: clock2.videoTsToSeconds(timingInfo.start.pts) }, end: { decode: clock2.videoTsToSeconds(timingInfo.end.dts), presentation: clock2.videoTsToSeconds(timingInfo.end.pts) }, baseMediaDecodeTime: clock2.videoTsToSeconds(timingInfo.baseMediaDecodeTime) }; if (timingInfo.prependedContentDuration) { videoSegmentTimingInfo.prependedContentDuration = clock2.videoTsToSeconds(timingInfo.prependedContentDuration); } self2.postMessage({ action: "videoSegmentTimingInfo", videoSegmentTimingInfo }); }); transmuxer2.on("audioSegmentTimingInfo", function(timingInfo) { var audioSegmentTimingInfo = { start: { decode: clock2.videoTsToSeconds(timingInfo.start.dts), presentation: clock2.videoTsToSeconds(timingInfo.start.pts) }, end: { decode: clock2.videoTsToSeconds(timingInfo.end.dts), presentation: clock2.videoTsToSeconds(timingInfo.end.pts) }, baseMediaDecodeTime: clock2.videoTsToSeconds(timingInfo.baseMediaDecodeTime) }; if (timingInfo.prependedContentDuration) { audioSegmentTimingInfo.prependedContentDuration = clock2.videoTsToSeconds(timingInfo.prependedContentDuration); } self2.postMessage({ action: "audioSegmentTimingInfo", audioSegmentTimingInfo }); }); transmuxer2.on("id3Frame", function(id3Frame) { self2.postMessage({ action: "id3Frame", id3Frame }); }); transmuxer2.on("caption", function(caption) { self2.postMessage({ action: "caption", caption }); }); transmuxer2.on("trackinfo", function(trackInfo) { self2.postMessage({ action: "trackinfo", trackInfo }); }); transmuxer2.on("audioTimingInfo", function(audioTimingInfo) { self2.postMessage({ action: "audioTimingInfo", audioTimingInfo: { start: clock2.videoTsToSeconds(audioTimingInfo.start), end: clock2.videoTsToSeconds(audioTimingInfo.end) } }); }); transmuxer2.on("videoTimingInfo", function(videoTimingInfo) { self2.postMessage({ action: "videoTimingInfo", videoTimingInfo: { start: clock2.videoTsToSeconds(videoTimingInfo.start), end: clock2.videoTsToSeconds(videoTimingInfo.end) } }); }); transmuxer2.on("log", function(log2) { self2.postMessage({ action: "log", log: log2 }); }); }; var MessageHandlers = /* @__PURE__ */ function() { function MessageHandlers2(self2, options2) { this.options = options2 || {}; this.self = self2; this.init(); } var _proto = MessageHandlers2.prototype; _proto.init = function init() { if (this.transmuxer) { this.transmuxer.dispose(); } this.transmuxer = new transmuxer.Transmuxer(this.options); wireTransmuxerEvents(this.self, this.transmuxer); }; _proto.pushMp4Captions = function pushMp4Captions(data) { if (!this.captionParser) { this.captionParser = new captionParser(); this.captionParser.init(); } var segment = new Uint8Array(data.data, data.byteOffset, data.byteLength); var parsed = this.captionParser.parse(segment, data.trackIds, data.timescales); this.self.postMessage({ action: "mp4Captions", captions: parsed && parsed.captions || [], logs: parsed && parsed.logs || [], data: segment.buffer }, [segment.buffer]); }; _proto.probeMp4StartTime = function probeMp4StartTime(_ref) { var timescales = _ref.timescales, data = _ref.data; var startTime2 = probe$2.startTime(timescales, data); this.self.postMessage({ action: "probeMp4StartTime", startTime: startTime2, data }, [data.buffer]); }; _proto.probeMp4Tracks = function probeMp4Tracks(_ref2) { var data = _ref2.data; var tracks = probe$2.tracks(data); this.self.postMessage({ action: "probeMp4Tracks", tracks, data }, [data.buffer]); }; _proto.probeTs = function probeTs(_ref3) { var data = _ref3.data, baseStartTime = _ref3.baseStartTime; var tsStartTime = typeof baseStartTime === "number" && !isNaN(baseStartTime) ? baseStartTime * clock2.ONE_SECOND_IN_TS : void 0; var timeInfo = tsInspector.inspect(data, tsStartTime); var result = null; if (timeInfo) { result = { hasVideo: timeInfo.video && timeInfo.video.length === 2 || false, hasAudio: timeInfo.audio && timeInfo.audio.length === 2 || false }; if (result.hasVideo) { result.videoStart = timeInfo.video[0].ptsTime; } if (result.hasAudio) { result.audioStart = timeInfo.audio[0].ptsTime; } } this.self.postMessage({ action: "probeTs", result, data }, [data.buffer]); }; _proto.clearAllMp4Captions = function clearAllMp4Captions() { if (this.captionParser) { this.captionParser.clearAllCaptions(); } }; _proto.clearParsedMp4Captions = function clearParsedMp4Captions() { if (this.captionParser) { this.captionParser.clearParsedCaptions(); } }; _proto.push = function push(data) { var segment = new Uint8Array(data.data, data.byteOffset, data.byteLength); this.transmuxer.push(segment); }; _proto.reset = function reset3() { this.transmuxer.reset(); }; _proto.setTimestampOffset = function setTimestampOffset(data) { var timestampOffset2 = data.timestampOffset || 0; this.transmuxer.setBaseMediaDecodeTime(Math.round(clock2.secondsToVideoTs(timestampOffset2))); }; _proto.setAudioAppendStart = function setAudioAppendStart(data) { this.transmuxer.setAudioAppendStart(Math.ceil(clock2.secondsToVideoTs(data.appendStart))); }; _proto.setRemux = function setRemux(data) { this.transmuxer.setRemux(data.remux); }; _proto.flush = function flush(data) { this.transmuxer.flush(); self.postMessage({ action: "done", type: "transmuxed" }); }; _proto.endTimeline = function endTimeline3() { this.transmuxer.endTimeline(); self.postMessage({ action: "endedtimeline", type: "transmuxed" }); }; _proto.alignGopsWith = function alignGopsWith(data) { this.transmuxer.alignGopsWith(data.gopsToAlignWith.slice()); }; return MessageHandlers2; }(); self.onmessage = function(event2) { if (event2.data.action === "init" && event2.data.options) { this.messageHandlers = new MessageHandlers(self, event2.data.options); return; } if (!this.messageHandlers) { this.messageHandlers = new MessageHandlers(self); } if (event2.data && event2.data.action && event2.data.action !== "init") { if (this.messageHandlers[event2.data.action]) { this.messageHandlers[event2.data.action](event2.data); } } }; })); var TransmuxWorker = factory(workerCode$1); var handleData_ = function handleData_2(event2, transmuxedData, callback2) { var _event$data$segment = event2.data.segment, type2 = _event$data$segment.type, initSegment = _event$data$segment.initSegment, captions = _event$data$segment.captions, captionStreams = _event$data$segment.captionStreams, metadata = _event$data$segment.metadata, videoFrameDtsTime = _event$data$segment.videoFrameDtsTime, videoFramePtsTime = _event$data$segment.videoFramePtsTime; transmuxedData.buffer.push({ captions, captionStreams, metadata }); var boxes = event2.data.segment.boxes || { data: event2.data.segment.data }; var result = { type: type2, data: new Uint8Array(boxes.data, boxes.data.byteOffset, boxes.data.byteLength), initSegment: new Uint8Array(initSegment.data, initSegment.byteOffset, initSegment.byteLength) }; if (typeof videoFrameDtsTime !== "undefined") { result.videoFrameDtsTime = videoFrameDtsTime; } if (typeof videoFramePtsTime !== "undefined") { result.videoFramePtsTime = videoFramePtsTime; } callback2(result); }; var handleDone_ = function handleDone_2(_ref) { var transmuxedData = _ref.transmuxedData, callback2 = _ref.callback; transmuxedData.buffer = []; callback2(transmuxedData); }; var handleGopInfo_ = function handleGopInfo_2(event2, transmuxedData) { transmuxedData.gopInfo = event2.data.gopInfo; }; var processTransmux = function processTransmux2(options2) { var transmuxer = options2.transmuxer, bytes = options2.bytes, audioAppendStart = options2.audioAppendStart, gopsToAlignWith = options2.gopsToAlignWith, remux = options2.remux, onData = options2.onData, onTrackInfo = options2.onTrackInfo, onAudioTimingInfo = options2.onAudioTimingInfo, onVideoTimingInfo = options2.onVideoTimingInfo, onVideoSegmentTimingInfo = options2.onVideoSegmentTimingInfo, onAudioSegmentTimingInfo = options2.onAudioSegmentTimingInfo, onId3 = options2.onId3, onCaptions = options2.onCaptions, onDone = options2.onDone, onEndedTimeline = options2.onEndedTimeline, onTransmuxerLog = options2.onTransmuxerLog, isEndOfTimeline = options2.isEndOfTimeline; var transmuxedData = { buffer: [] }; var waitForEndedTimelineEvent = isEndOfTimeline; var handleMessage = function handleMessage2(event2) { if (transmuxer.currentTransmux !== options2) { return; } if (event2.data.action === "data") { handleData_(event2, transmuxedData, onData); } if (event2.data.action === "trackinfo") { onTrackInfo(event2.data.trackInfo); } if (event2.data.action === "gopInfo") { handleGopInfo_(event2, transmuxedData); } if (event2.data.action === "audioTimingInfo") { onAudioTimingInfo(event2.data.audioTimingInfo); } if (event2.data.action === "videoTimingInfo") { onVideoTimingInfo(event2.data.videoTimingInfo); } if (event2.data.action === "videoSegmentTimingInfo") { onVideoSegmentTimingInfo(event2.data.videoSegmentTimingInfo); } if (event2.data.action === "audioSegmentTimingInfo") { onAudioSegmentTimingInfo(event2.data.audioSegmentTimingInfo); } if (event2.data.action === "id3Frame") { onId3([event2.data.id3Frame], event2.data.id3Frame.dispatchType); } if (event2.data.action === "caption") { onCaptions(event2.data.caption); } if (event2.data.action === "endedtimeline") { waitForEndedTimelineEvent = false; onEndedTimeline(); } if (event2.data.action === "log") { onTransmuxerLog(event2.data.log); } if (event2.data.type !== "transmuxed") { return; } if (waitForEndedTimelineEvent) { return; } transmuxer.onmessage = null; handleDone_({ transmuxedData, callback: onDone }); dequeue(transmuxer); }; transmuxer.onmessage = handleMessage; if (audioAppendStart) { transmuxer.postMessage({ action: "setAudioAppendStart", appendStart: audioAppendStart }); } if (Array.isArray(gopsToAlignWith)) { transmuxer.postMessage({ action: "alignGopsWith", gopsToAlignWith }); } if (typeof remux !== "undefined") { transmuxer.postMessage({ action: "setRemux", remux }); } if (bytes.byteLength) { var buffer = bytes instanceof ArrayBuffer ? bytes : bytes.buffer; var byteOffset = bytes instanceof ArrayBuffer ? 0 : bytes.byteOffset; transmuxer.postMessage({ action: "push", data: buffer, byteOffset, byteLength: bytes.byteLength }, [buffer]); } if (isEndOfTimeline) { transmuxer.postMessage({ action: "endTimeline" }); } transmuxer.postMessage({ action: "flush" }); }; var dequeue = function dequeue2(transmuxer) { transmuxer.currentTransmux = null; if (transmuxer.transmuxQueue.length) { transmuxer.currentTransmux = transmuxer.transmuxQueue.shift(); if (typeof transmuxer.currentTransmux === "function") { transmuxer.currentTransmux(); } else { processTransmux(transmuxer.currentTransmux); } } }; var processAction = function processAction2(transmuxer, action) { transmuxer.postMessage({ action }); dequeue(transmuxer); }; var enqueueAction = function enqueueAction2(action, transmuxer) { if (!transmuxer.currentTransmux) { transmuxer.currentTransmux = action; processAction(transmuxer, action); return; } transmuxer.transmuxQueue.push(processAction.bind(null, transmuxer, action)); }; var reset = function reset2(transmuxer) { enqueueAction("reset", transmuxer); }; var endTimeline = function endTimeline2(transmuxer) { enqueueAction("endTimeline", transmuxer); }; var transmux = function transmux2(options2) { if (!options2.transmuxer.currentTransmux) { options2.transmuxer.currentTransmux = options2; processTransmux(options2); return; } options2.transmuxer.transmuxQueue.push(options2); }; var createTransmuxer = function createTransmuxer2(options2) { var transmuxer = new TransmuxWorker(); transmuxer.currentTransmux = null; transmuxer.transmuxQueue = []; var term = transmuxer.terminate; transmuxer.terminate = function() { transmuxer.currentTransmux = null; transmuxer.transmuxQueue.length = 0; return term.call(transmuxer); }; transmuxer.postMessage({ action: "init", options: options2 }); return transmuxer; }; var segmentTransmuxer = { reset, endTimeline, transmux, createTransmuxer }; var workerCallback = function workerCallback2(options2) { var transmuxer = options2.transmuxer; var endAction = options2.endAction || options2.action; var callback2 = options2.callback; var message = _extends$2({}, options2, { endAction: null, transmuxer: null, callback: null }); var listenForEndEvent = function listenForEndEvent2(event2) { if (event2.data.action !== endAction) { return; } transmuxer.removeEventListener("message", listenForEndEvent2); if (event2.data.data) { event2.data.data = new Uint8Array(event2.data.data, options2.byteOffset || 0, options2.byteLength || event2.data.data.byteLength); if (options2.data) { options2.data = event2.data.data; } } callback2(event2.data); }; transmuxer.addEventListener("message", listenForEndEvent); if (options2.data) { var isArrayBuffer = options2.data instanceof ArrayBuffer; message.byteOffset = isArrayBuffer ? 0 : options2.data.byteOffset; message.byteLength = options2.data.byteLength; var transfers = [isArrayBuffer ? options2.data : options2.data.buffer]; transmuxer.postMessage(message, transfers); } else { transmuxer.postMessage(message); } }; var REQUEST_ERRORS = { FAILURE: 2, TIMEOUT: -101, ABORTED: -102 }; var abortAll = function abortAll2(activeXhrs) { activeXhrs.forEach(function(xhr) { xhr.abort(); }); }; var getRequestStats = function getRequestStats2(request) { return { bandwidth: request.bandwidth, bytesReceived: request.bytesReceived || 0, roundTripTime: request.roundTripTime || 0 }; }; var getProgressStats = function getProgressStats2(progressEvent) { var request = progressEvent.target; var roundTripTime = Date.now() - request.requestTime; var stats = { bandwidth: Infinity, bytesReceived: 0, roundTripTime: roundTripTime || 0 }; stats.bytesReceived = progressEvent.loaded; stats.bandwidth = Math.floor(stats.bytesReceived / stats.roundTripTime * 8 * 1e3); return stats; }; var handleErrors = function handleErrors2(error, request) { if (request.timedout) { return { status: request.status, message: "HLS request timed-out at URL: " + request.uri, code: REQUEST_ERRORS.TIMEOUT, xhr: request }; } if (request.aborted) { return { status: request.status, message: "HLS request aborted at URL: " + request.uri, code: REQUEST_ERRORS.ABORTED, xhr: request }; } if (error) { return { status: request.status, message: "HLS request errored at URL: " + request.uri, code: REQUEST_ERRORS.FAILURE, xhr: request }; } if (request.responseType === "arraybuffer" && request.response.byteLength === 0) { return { status: request.status, message: "Empty HLS response at URL: " + request.uri, code: REQUEST_ERRORS.FAILURE, xhr: request }; } return null; }; var handleKeyResponse = function handleKeyResponse2(segment, objects, finishProcessingFn) { return function(error, request) { var response = request.response; var errorObj = handleErrors(error, request); if (errorObj) { return finishProcessingFn(errorObj, segment); } if (response.byteLength !== 16) { return finishProcessingFn({ status: request.status, message: "Invalid HLS key at URL: " + request.uri, code: REQUEST_ERRORS.FAILURE, xhr: request }, segment); } var view = new DataView(response); var bytes = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]); for (var i2 = 0; i2 < objects.length; i2++) { objects[i2].bytes = bytes; } return finishProcessingFn(null, segment); }; }; var parseInitSegment = function parseInitSegment2(segment, _callback) { var type2 = detectContainerForBytes2(segment.map.bytes); if (type2 !== "mp4") { var uri = segment.map.resolvedUri || segment.map.uri; return _callback({ internal: true, message: "Found unsupported " + (type2 || "unknown") + " container for initialization segment at URL: " + uri, code: REQUEST_ERRORS.FAILURE }); } workerCallback({ action: "probeMp4Tracks", data: segment.map.bytes, transmuxer: segment.transmuxer, callback: function callback2(_ref) { var tracks = _ref.tracks, data = _ref.data; segment.map.bytes = data; tracks.forEach(function(track) { segment.map.tracks = segment.map.tracks || {}; if (segment.map.tracks[track.type]) { return; } segment.map.tracks[track.type] = track; if (typeof track.id === "number" && track.timescale) { segment.map.timescales = segment.map.timescales || {}; segment.map.timescales[track.id] = track.timescale; } }); return _callback(null); } }); }; var handleInitSegmentResponse = function handleInitSegmentResponse2(_ref2) { var segment = _ref2.segment, finishProcessingFn = _ref2.finishProcessingFn; return function(error, request) { var errorObj = handleErrors(error, request); if (errorObj) { return finishProcessingFn(errorObj, segment); } var bytes = new Uint8Array(request.response); if (segment.map.key) { segment.map.encryptedBytes = bytes; return finishProcessingFn(null, segment); } segment.map.bytes = bytes; parseInitSegment(segment, function(parseError) { if (parseError) { parseError.xhr = request; parseError.status = request.status; return finishProcessingFn(parseError, segment); } finishProcessingFn(null, segment); }); }; }; var handleSegmentResponse = function handleSegmentResponse2(_ref3) { var segment = _ref3.segment, finishProcessingFn = _ref3.finishProcessingFn, responseType = _ref3.responseType; return function(error, request) { var errorObj = handleErrors(error, request); if (errorObj) { return finishProcessingFn(errorObj, segment); } var newBytes = responseType === "arraybuffer" || !request.responseText ? request.response : stringToArrayBuffer(request.responseText.substring(segment.lastReachedChar || 0)); segment.stats = getRequestStats(request); if (segment.key) { segment.encryptedBytes = new Uint8Array(newBytes); } else { segment.bytes = new Uint8Array(newBytes); } return finishProcessingFn(null, segment); }; }; var transmuxAndNotify = function transmuxAndNotify2(_ref4) { var segment = _ref4.segment, bytes = _ref4.bytes, trackInfoFn = _ref4.trackInfoFn, timingInfoFn = _ref4.timingInfoFn, videoSegmentTimingInfoFn = _ref4.videoSegmentTimingInfoFn, audioSegmentTimingInfoFn = _ref4.audioSegmentTimingInfoFn, id3Fn = _ref4.id3Fn, captionsFn = _ref4.captionsFn, isEndOfTimeline = _ref4.isEndOfTimeline, endedTimelineFn = _ref4.endedTimelineFn, dataFn = _ref4.dataFn, doneFn = _ref4.doneFn, onTransmuxerLog = _ref4.onTransmuxerLog; var fmp4Tracks = segment.map && segment.map.tracks || {}; var isMuxed3 = Boolean(fmp4Tracks.audio && fmp4Tracks.video); var audioStartFn = timingInfoFn.bind(null, segment, "audio", "start"); var audioEndFn = timingInfoFn.bind(null, segment, "audio", "end"); var videoStartFn = timingInfoFn.bind(null, segment, "video", "start"); var videoEndFn = timingInfoFn.bind(null, segment, "video", "end"); var finish = function finish2() { return transmux({ bytes, transmuxer: segment.transmuxer, audioAppendStart: segment.audioAppendStart, gopsToAlignWith: segment.gopsToAlignWith, remux: isMuxed3, onData: function onData(result) { result.type = result.type === "combined" ? "video" : result.type; dataFn(segment, result); }, onTrackInfo: function onTrackInfo(trackInfo) { if (trackInfoFn) { if (isMuxed3) { trackInfo.isMuxed = true; } trackInfoFn(segment, trackInfo); } }, onAudioTimingInfo: function onAudioTimingInfo(audioTimingInfo) { if (audioStartFn && typeof audioTimingInfo.start !== "undefined") { audioStartFn(audioTimingInfo.start); audioStartFn = null; } if (audioEndFn && typeof audioTimingInfo.end !== "undefined") { audioEndFn(audioTimingInfo.end); } }, onVideoTimingInfo: function onVideoTimingInfo(videoTimingInfo) { if (videoStartFn && typeof videoTimingInfo.start !== "undefined") { videoStartFn(videoTimingInfo.start); videoStartFn = null; } if (videoEndFn && typeof videoTimingInfo.end !== "undefined") { videoEndFn(videoTimingInfo.end); } }, onVideoSegmentTimingInfo: function onVideoSegmentTimingInfo(videoSegmentTimingInfo) { videoSegmentTimingInfoFn(videoSegmentTimingInfo); }, onAudioSegmentTimingInfo: function onAudioSegmentTimingInfo(audioSegmentTimingInfo) { audioSegmentTimingInfoFn(audioSegmentTimingInfo); }, onId3: function onId3(id3Frames, dispatchType) { id3Fn(segment, id3Frames, dispatchType); }, onCaptions: function onCaptions(captions) { captionsFn(segment, [captions]); }, isEndOfTimeline, onEndedTimeline: function onEndedTimeline() { endedTimelineFn(); }, onTransmuxerLog, onDone: function onDone(result) { if (!doneFn) { return; } result.type = result.type === "combined" ? "video" : result.type; doneFn(null, segment, result); } }); }; workerCallback({ action: "probeTs", transmuxer: segment.transmuxer, data: bytes, baseStartTime: segment.baseStartTime, callback: function callback2(data) { segment.bytes = bytes = data.data; var probeResult = data.result; if (probeResult) { trackInfoFn(segment, { hasAudio: probeResult.hasAudio, hasVideo: probeResult.hasVideo, isMuxed: isMuxed3 }); trackInfoFn = null; if (probeResult.hasAudio && !isMuxed3) { audioStartFn(probeResult.audioStart); } if (probeResult.hasVideo) { videoStartFn(probeResult.videoStart); } audioStartFn = null; videoStartFn = null; } finish(); } }); }; var handleSegmentBytes = function handleSegmentBytes2(_ref5) { var segment = _ref5.segment, bytes = _ref5.bytes, trackInfoFn = _ref5.trackInfoFn, timingInfoFn = _ref5.timingInfoFn, videoSegmentTimingInfoFn = _ref5.videoSegmentTimingInfoFn, audioSegmentTimingInfoFn = _ref5.audioSegmentTimingInfoFn, id3Fn = _ref5.id3Fn, captionsFn = _ref5.captionsFn, isEndOfTimeline = _ref5.isEndOfTimeline, endedTimelineFn = _ref5.endedTimelineFn, dataFn = _ref5.dataFn, doneFn = _ref5.doneFn, onTransmuxerLog = _ref5.onTransmuxerLog; var bytesAsUint8Array = new Uint8Array(bytes); if (isLikelyFmp4MediaSegment2(bytesAsUint8Array)) { segment.isFmp4 = true; var tracks = segment.map.tracks; var trackInfo = { isFmp4: true, hasVideo: !!tracks.video, hasAudio: !!tracks.audio }; if (tracks.audio && tracks.audio.codec && tracks.audio.codec !== "enca") { trackInfo.audioCodec = tracks.audio.codec; } if (tracks.video && tracks.video.codec && tracks.video.codec !== "encv") { trackInfo.videoCodec = tracks.video.codec; } if (tracks.video && tracks.audio) { trackInfo.isMuxed = true; } trackInfoFn(segment, trackInfo); var finishLoading = function finishLoading2(captions) { dataFn(segment, { data: bytesAsUint8Array, type: trackInfo.hasAudio && !trackInfo.isMuxed ? "audio" : "video" }); if (captions && captions.length) { captionsFn(segment, captions); } doneFn(null, segment, {}); }; workerCallback({ action: "probeMp4StartTime", timescales: segment.map.timescales, data: bytesAsUint8Array, transmuxer: segment.transmuxer, callback: function callback2(_ref6) { var data = _ref6.data, startTime = _ref6.startTime; bytes = data.buffer; segment.bytes = bytesAsUint8Array = data; if (trackInfo.hasAudio && !trackInfo.isMuxed) { timingInfoFn(segment, "audio", "start", startTime); } if (trackInfo.hasVideo) { timingInfoFn(segment, "video", "start", startTime); } if (!tracks.video || !data.byteLength || !segment.transmuxer) { finishLoading(); return; } workerCallback({ action: "pushMp4Captions", endAction: "mp4Captions", transmuxer: segment.transmuxer, data: bytesAsUint8Array, timescales: segment.map.timescales, trackIds: [tracks.video.id], callback: function callback3(message) { bytes = message.data.buffer; segment.bytes = bytesAsUint8Array = message.data; message.logs.forEach(function(log2) { onTransmuxerLog(videojs.mergeOptions(log2, { stream: "mp4CaptionParser" })); }); finishLoading(message.captions); } }); } }); return; } if (!segment.transmuxer) { doneFn(null, segment, {}); return; } if (typeof segment.container === "undefined") { segment.container = detectContainerForBytes2(bytesAsUint8Array); } if (segment.container !== "ts" && segment.container !== "aac") { trackInfoFn(segment, { hasAudio: false, hasVideo: false }); doneFn(null, segment, {}); return; } transmuxAndNotify({ segment, bytes, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); }; var decrypt = function decrypt2(_ref7, callback2) { var id = _ref7.id, key = _ref7.key, encryptedBytes = _ref7.encryptedBytes, decryptionWorker = _ref7.decryptionWorker; var decryptionHandler = function decryptionHandler2(event2) { if (event2.data.source === id) { decryptionWorker.removeEventListener("message", decryptionHandler2); var decrypted = event2.data.decrypted; callback2(new Uint8Array(decrypted.bytes, decrypted.byteOffset, decrypted.byteLength)); } }; decryptionWorker.addEventListener("message", decryptionHandler); var keyBytes; if (key.bytes.slice) { keyBytes = key.bytes.slice(); } else { keyBytes = new Uint32Array(Array.prototype.slice.call(key.bytes)); } decryptionWorker.postMessage(createTransferableMessage({ source: id, encrypted: encryptedBytes, key: keyBytes, iv: key.iv }), [encryptedBytes.buffer, keyBytes.buffer]); }; var decryptSegment = function decryptSegment2(_ref8) { var decryptionWorker = _ref8.decryptionWorker, segment = _ref8.segment, trackInfoFn = _ref8.trackInfoFn, timingInfoFn = _ref8.timingInfoFn, videoSegmentTimingInfoFn = _ref8.videoSegmentTimingInfoFn, audioSegmentTimingInfoFn = _ref8.audioSegmentTimingInfoFn, id3Fn = _ref8.id3Fn, captionsFn = _ref8.captionsFn, isEndOfTimeline = _ref8.isEndOfTimeline, endedTimelineFn = _ref8.endedTimelineFn, dataFn = _ref8.dataFn, doneFn = _ref8.doneFn, onTransmuxerLog = _ref8.onTransmuxerLog; decrypt({ id: segment.requestId, key: segment.key, encryptedBytes: segment.encryptedBytes, decryptionWorker }, function(decryptedBytes) { segment.bytes = decryptedBytes; handleSegmentBytes({ segment, bytes: segment.bytes, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); }); }; var waitForCompletion = function waitForCompletion2(_ref9) { var activeXhrs = _ref9.activeXhrs, decryptionWorker = _ref9.decryptionWorker, trackInfoFn = _ref9.trackInfoFn, timingInfoFn = _ref9.timingInfoFn, videoSegmentTimingInfoFn = _ref9.videoSegmentTimingInfoFn, audioSegmentTimingInfoFn = _ref9.audioSegmentTimingInfoFn, id3Fn = _ref9.id3Fn, captionsFn = _ref9.captionsFn, isEndOfTimeline = _ref9.isEndOfTimeline, endedTimelineFn = _ref9.endedTimelineFn, dataFn = _ref9.dataFn, doneFn = _ref9.doneFn, onTransmuxerLog = _ref9.onTransmuxerLog; var count = 0; var didError = false; return function(error, segment) { if (didError) { return; } if (error) { didError = true; abortAll(activeXhrs); return doneFn(error, segment); } count += 1; if (count === activeXhrs.length) { var segmentFinish = function segmentFinish2() { if (segment.encryptedBytes) { return decryptSegment({ decryptionWorker, segment, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); } handleSegmentBytes({ segment, bytes: segment.bytes, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); }; segment.endOfAllRequests = Date.now(); if (segment.map && segment.map.encryptedBytes && !segment.map.bytes) { return decrypt({ decryptionWorker, id: segment.requestId + "-init", encryptedBytes: segment.map.encryptedBytes, key: segment.map.key }, function(decryptedBytes) { segment.map.bytes = decryptedBytes; parseInitSegment(segment, function(parseError) { if (parseError) { abortAll(activeXhrs); return doneFn(parseError, segment); } segmentFinish(); }); }); } segmentFinish(); } }; }; var handleLoadEnd = function handleLoadEnd2(_ref10) { var loadendState = _ref10.loadendState, abortFn = _ref10.abortFn; return function(event2) { var request = event2.target; if (request.aborted && abortFn && !loadendState.calledAbortFn) { abortFn(); loadendState.calledAbortFn = true; } }; }; var handleProgress = function handleProgress2(_ref11) { var segment = _ref11.segment, progressFn = _ref11.progressFn; _ref11.trackInfoFn; _ref11.timingInfoFn; _ref11.videoSegmentTimingInfoFn; _ref11.audioSegmentTimingInfoFn; _ref11.id3Fn; _ref11.captionsFn; _ref11.isEndOfTimeline; _ref11.endedTimelineFn; _ref11.dataFn; return function(event2) { var request = event2.target; if (request.aborted) { return; } segment.stats = videojs.mergeOptions(segment.stats, getProgressStats(event2)); if (!segment.stats.firstBytesReceivedAt && segment.stats.bytesReceived) { segment.stats.firstBytesReceivedAt = Date.now(); } return progressFn(event2, segment); }; }; var mediaSegmentRequest = function mediaSegmentRequest2(_ref12) { var xhr = _ref12.xhr, xhrOptions = _ref12.xhrOptions, decryptionWorker = _ref12.decryptionWorker, segment = _ref12.segment, abortFn = _ref12.abortFn, progressFn = _ref12.progressFn, trackInfoFn = _ref12.trackInfoFn, timingInfoFn = _ref12.timingInfoFn, videoSegmentTimingInfoFn = _ref12.videoSegmentTimingInfoFn, audioSegmentTimingInfoFn = _ref12.audioSegmentTimingInfoFn, id3Fn = _ref12.id3Fn, captionsFn = _ref12.captionsFn, isEndOfTimeline = _ref12.isEndOfTimeline, endedTimelineFn = _ref12.endedTimelineFn, dataFn = _ref12.dataFn, doneFn = _ref12.doneFn, onTransmuxerLog = _ref12.onTransmuxerLog; var activeXhrs = []; var finishProcessingFn = waitForCompletion({ activeXhrs, decryptionWorker, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn, doneFn, onTransmuxerLog }); if (segment.key && !segment.key.bytes) { var objects = [segment.key]; if (segment.map && !segment.map.bytes && segment.map.key && segment.map.key.resolvedUri === segment.key.resolvedUri) { objects.push(segment.map.key); } var keyRequestOptions = videojs.mergeOptions(xhrOptions, { uri: segment.key.resolvedUri, responseType: "arraybuffer" }); var keyRequestCallback = handleKeyResponse(segment, objects, finishProcessingFn); var keyXhr = xhr(keyRequestOptions, keyRequestCallback); activeXhrs.push(keyXhr); } if (segment.map && !segment.map.bytes) { var differentMapKey = segment.map.key && (!segment.key || segment.key.resolvedUri !== segment.map.key.resolvedUri); if (differentMapKey) { var mapKeyRequestOptions = videojs.mergeOptions(xhrOptions, { uri: segment.map.key.resolvedUri, responseType: "arraybuffer" }); var mapKeyRequestCallback = handleKeyResponse(segment, [segment.map.key], finishProcessingFn); var mapKeyXhr = xhr(mapKeyRequestOptions, mapKeyRequestCallback); activeXhrs.push(mapKeyXhr); } var initSegmentOptions = videojs.mergeOptions(xhrOptions, { uri: segment.map.resolvedUri, responseType: "arraybuffer", headers: segmentXhrHeaders(segment.map) }); var initSegmentRequestCallback = handleInitSegmentResponse({ segment, finishProcessingFn }); var initSegmentXhr = xhr(initSegmentOptions, initSegmentRequestCallback); activeXhrs.push(initSegmentXhr); } var segmentRequestOptions = videojs.mergeOptions(xhrOptions, { uri: segment.part && segment.part.resolvedUri || segment.resolvedUri, responseType: "arraybuffer", headers: segmentXhrHeaders(segment) }); var segmentRequestCallback = handleSegmentResponse({ segment, finishProcessingFn, responseType: segmentRequestOptions.responseType }); var segmentXhr = xhr(segmentRequestOptions, segmentRequestCallback); segmentXhr.addEventListener("progress", handleProgress({ segment, progressFn, trackInfoFn, timingInfoFn, videoSegmentTimingInfoFn, audioSegmentTimingInfoFn, id3Fn, captionsFn, isEndOfTimeline, endedTimelineFn, dataFn })); activeXhrs.push(segmentXhr); var loadendState = {}; activeXhrs.forEach(function(activeXhr) { activeXhr.addEventListener("loadend", handleLoadEnd({ loadendState, abortFn })); }); return function() { return abortAll(activeXhrs); }; }; var logFn$1 = logger("CodecUtils"); var getCodecs = function getCodecs2(media) { var mediaAttributes = media.attributes || {}; if (mediaAttributes.CODECS) { return parseCodecs2(mediaAttributes.CODECS); } }; var isMaat = function isMaat2(master, media) { var mediaAttributes = media.attributes || {}; return master && master.mediaGroups && master.mediaGroups.AUDIO && mediaAttributes.AUDIO && master.mediaGroups.AUDIO[mediaAttributes.AUDIO]; }; var isMuxed = function isMuxed2(master, media) { if (!isMaat(master, media)) { return true; } var mediaAttributes = media.attributes || {}; var audioGroup = master.mediaGroups.AUDIO[mediaAttributes.AUDIO]; for (var groupId in audioGroup) { if (!audioGroup[groupId].uri && !audioGroup[groupId].playlists) { return true; } } return false; }; var unwrapCodecList = function unwrapCodecList2(codecList) { var codecs = {}; codecList.forEach(function(_ref) { var mediaType = _ref.mediaType, type2 = _ref.type, details = _ref.details; codecs[mediaType] = codecs[mediaType] || []; codecs[mediaType].push(translateLegacyCodec2("" + type2 + details)); }); Object.keys(codecs).forEach(function(mediaType) { if (codecs[mediaType].length > 1) { logFn$1("multiple " + mediaType + " codecs found as attributes: " + codecs[mediaType].join(", ") + ". Setting playlist codecs to null so that we wait for mux.js to probe segments for real codecs."); codecs[mediaType] = null; return; } codecs[mediaType] = codecs[mediaType][0]; }); return codecs; }; var codecCount = function codecCount2(codecObj) { var count = 0; if (codecObj.audio) { count++; } if (codecObj.video) { count++; } return count; }; var codecsForPlaylist = function codecsForPlaylist2(master, media) { var mediaAttributes = media.attributes || {}; var codecInfo = unwrapCodecList(getCodecs(media) || []); if (isMaat(master, media) && !codecInfo.audio) { if (!isMuxed(master, media)) { var defaultCodecs = unwrapCodecList(codecsFromDefault2(master, mediaAttributes.AUDIO) || []); if (defaultCodecs.audio) { codecInfo.audio = defaultCodecs.audio; } } } return codecInfo; }; var logFn = logger("PlaylistSelector"); var representationToString = function representationToString2(representation) { if (!representation || !representation.playlist) { return; } var playlist = representation.playlist; return JSON.stringify({ id: playlist.id, bandwidth: representation.bandwidth, width: representation.width, height: representation.height, codecs: playlist.attributes && playlist.attributes.CODECS || "" }); }; var safeGetComputedStyle = function safeGetComputedStyle2(el, property) { if (!el) { return ""; } var result = window_1.getComputedStyle(el); if (!result) { return ""; } return result[property]; }; var stableSort = function stableSort2(array, sortFn) { var newArray = array.slice(); array.sort(function(left, right) { var cmp = sortFn(left, right); if (cmp === 0) { return newArray.indexOf(left) - newArray.indexOf(right); } return cmp; }); }; var comparePlaylistBandwidth = function comparePlaylistBandwidth2(left, right) { var leftBandwidth; var rightBandwidth; if (left.attributes.BANDWIDTH) { leftBandwidth = left.attributes.BANDWIDTH; } leftBandwidth = leftBandwidth || window_1.Number.MAX_VALUE; if (right.attributes.BANDWIDTH) { rightBandwidth = right.attributes.BANDWIDTH; } rightBandwidth = rightBandwidth || window_1.Number.MAX_VALUE; return leftBandwidth - rightBandwidth; }; var comparePlaylistResolution = function comparePlaylistResolution2(left, right) { var leftWidth; var rightWidth; if (left.attributes.RESOLUTION && left.attributes.RESOLUTION.width) { leftWidth = left.attributes.RESOLUTION.width; } leftWidth = leftWidth || window_1.Number.MAX_VALUE; if (right.attributes.RESOLUTION && right.attributes.RESOLUTION.width) { rightWidth = right.attributes.RESOLUTION.width; } rightWidth = rightWidth || window_1.Number.MAX_VALUE; if (leftWidth === rightWidth && left.attributes.BANDWIDTH && right.attributes.BANDWIDTH) { return left.attributes.BANDWIDTH - right.attributes.BANDWIDTH; } return leftWidth - rightWidth; }; var simpleSelector = function simpleSelector2(master, playerBandwidth, playerWidth, playerHeight, limitRenditionByPlayerDimensions, masterPlaylistController) { if (!master) { return; } var options2 = { bandwidth: playerBandwidth, width: playerWidth, height: playerHeight, limitRenditionByPlayerDimensions }; var playlists = master.playlists; if (Playlist.isAudioOnly(master)) { playlists = masterPlaylistController.getAudioTrackPlaylists_(); options2.audioOnly = true; } var sortedPlaylistReps = playlists.map(function(playlist) { var bandwidth2; var width2 = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.width; var height2 = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height; bandwidth2 = playlist.attributes && playlist.attributes.BANDWIDTH; bandwidth2 = bandwidth2 || window_1.Number.MAX_VALUE; return { bandwidth: bandwidth2, width: width2, height: height2, playlist }; }); stableSort(sortedPlaylistReps, function(left, right) { return left.bandwidth - right.bandwidth; }); sortedPlaylistReps = sortedPlaylistReps.filter(function(rep2) { return !Playlist.isIncompatible(rep2.playlist); }); var enabledPlaylistReps = sortedPlaylistReps.filter(function(rep2) { return Playlist.isEnabled(rep2.playlist); }); if (!enabledPlaylistReps.length) { enabledPlaylistReps = sortedPlaylistReps.filter(function(rep2) { return !Playlist.isDisabled(rep2.playlist); }); } var bandwidthPlaylistReps = enabledPlaylistReps.filter(function(rep2) { return rep2.bandwidth * Config.BANDWIDTH_VARIANCE < playerBandwidth; }); var highestRemainingBandwidthRep = bandwidthPlaylistReps[bandwidthPlaylistReps.length - 1]; var bandwidthBestRep = bandwidthPlaylistReps.filter(function(rep2) { return rep2.bandwidth === highestRemainingBandwidthRep.bandwidth; })[0]; if (limitRenditionByPlayerDimensions === false) { var _chosenRep = bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0]; if (_chosenRep && _chosenRep.playlist) { var type2 = "sortedPlaylistReps"; if (bandwidthBestRep) { type2 = "bandwidthBestRep"; } if (enabledPlaylistReps[0]) { type2 = "enabledPlaylistReps"; } logFn("choosing " + representationToString(_chosenRep) + " using " + type2 + " with options", options2); return _chosenRep.playlist; } logFn("could not choose a playlist with options", options2); return null; } var haveResolution = bandwidthPlaylistReps.filter(function(rep2) { return rep2.width && rep2.height; }); stableSort(haveResolution, function(left, right) { return left.width - right.width; }); var resolutionBestRepList = haveResolution.filter(function(rep2) { return rep2.width === playerWidth && rep2.height === playerHeight; }); highestRemainingBandwidthRep = resolutionBestRepList[resolutionBestRepList.length - 1]; var resolutionBestRep = resolutionBestRepList.filter(function(rep2) { return rep2.bandwidth === highestRemainingBandwidthRep.bandwidth; })[0]; var resolutionPlusOneList; var resolutionPlusOneSmallest; var resolutionPlusOneRep; if (!resolutionBestRep) { resolutionPlusOneList = haveResolution.filter(function(rep2) { return rep2.width > playerWidth || rep2.height > playerHeight; }); resolutionPlusOneSmallest = resolutionPlusOneList.filter(function(rep2) { return rep2.width === resolutionPlusOneList[0].width && rep2.height === resolutionPlusOneList[0].height; }); highestRemainingBandwidthRep = resolutionPlusOneSmallest[resolutionPlusOneSmallest.length - 1]; resolutionPlusOneRep = resolutionPlusOneSmallest.filter(function(rep2) { return rep2.bandwidth === highestRemainingBandwidthRep.bandwidth; })[0]; } var leastPixelDiffRep; if (masterPlaylistController.experimentalLeastPixelDiffSelector) { var leastPixelDiffList = haveResolution.map(function(rep2) { rep2.pixelDiff = Math.abs(rep2.width - playerWidth) + Math.abs(rep2.height - playerHeight); return rep2; }); stableSort(leastPixelDiffList, function(left, right) { if (left.pixelDiff === right.pixelDiff) { return right.bandwidth - left.bandwidth; } return left.pixelDiff - right.pixelDiff; }); leastPixelDiffRep = leastPixelDiffList[0]; } var chosenRep = leastPixelDiffRep || resolutionPlusOneRep || resolutionBestRep || bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0]; if (chosenRep && chosenRep.playlist) { var _type = "sortedPlaylistReps"; if (leastPixelDiffRep) { _type = "leastPixelDiffRep"; } else if (resolutionPlusOneRep) { _type = "resolutionPlusOneRep"; } else if (resolutionBestRep) { _type = "resolutionBestRep"; } else if (bandwidthBestRep) { _type = "bandwidthBestRep"; } else if (enabledPlaylistReps[0]) { _type = "enabledPlaylistReps"; } logFn("choosing " + representationToString(chosenRep) + " using " + _type + " with options", options2); return chosenRep.playlist; } logFn("could not choose a playlist with options", options2); return null; }; var lastBandwidthSelector = function lastBandwidthSelector2() { var pixelRatio = this.useDevicePixelRatio ? window_1.devicePixelRatio || 1 : 1; return simpleSelector(this.playlists.master, this.systemBandwidth, parseInt(safeGetComputedStyle(this.tech_.el(), "width"), 10) * pixelRatio, parseInt(safeGetComputedStyle(this.tech_.el(), "height"), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.masterPlaylistController_); }; var movingAverageBandwidthSelector = function movingAverageBandwidthSelector2(decay) { var average = -1; var lastSystemBandwidth = -1; if (decay < 0 || decay > 1) { throw new Error("Moving average bandwidth decay must be between 0 and 1."); } return function() { var pixelRatio = this.useDevicePixelRatio ? window_1.devicePixelRatio || 1 : 1; if (average < 0) { average = this.systemBandwidth; lastSystemBandwidth = this.systemBandwidth; } if (this.systemBandwidth > 0 && this.systemBandwidth !== lastSystemBandwidth) { average = decay * this.systemBandwidth + (1 - decay) * average; lastSystemBandwidth = this.systemBandwidth; } return simpleSelector(this.playlists.master, average, parseInt(safeGetComputedStyle(this.tech_.el(), "width"), 10) * pixelRatio, parseInt(safeGetComputedStyle(this.tech_.el(), "height"), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.masterPlaylistController_); }; }; var minRebufferMaxBandwidthSelector = function minRebufferMaxBandwidthSelector2(settings) { var master = settings.master, currentTime = settings.currentTime, bandwidth2 = settings.bandwidth, duration5 = settings.duration, segmentDuration = settings.segmentDuration, timeUntilRebuffer3 = settings.timeUntilRebuffer, currentTimeline = settings.currentTimeline, syncController = settings.syncController; var compatiblePlaylists = master.playlists.filter(function(playlist) { return !Playlist.isIncompatible(playlist); }); var enabledPlaylists = compatiblePlaylists.filter(Playlist.isEnabled); if (!enabledPlaylists.length) { enabledPlaylists = compatiblePlaylists.filter(function(playlist) { return !Playlist.isDisabled(playlist); }); } var bandwidthPlaylists = enabledPlaylists.filter(Playlist.hasAttribute.bind(null, "BANDWIDTH")); var rebufferingEstimates = bandwidthPlaylists.map(function(playlist) { var syncPoint = syncController.getSyncPoint(playlist, duration5, currentTimeline, currentTime); var numRequests = syncPoint ? 1 : 2; var requestTimeEstimate = Playlist.estimateSegmentRequestTime(segmentDuration, bandwidth2, playlist); var rebufferingImpact = requestTimeEstimate * numRequests - timeUntilRebuffer3; return { playlist, rebufferingImpact }; }); var noRebufferingPlaylists = rebufferingEstimates.filter(function(estimate) { return estimate.rebufferingImpact <= 0; }); stableSort(noRebufferingPlaylists, function(a, b) { return comparePlaylistBandwidth(b.playlist, a.playlist); }); if (noRebufferingPlaylists.length) { return noRebufferingPlaylists[0]; } stableSort(rebufferingEstimates, function(a, b) { return a.rebufferingImpact - b.rebufferingImpact; }); return rebufferingEstimates[0] || null; }; var lowestBitrateCompatibleVariantSelector = function lowestBitrateCompatibleVariantSelector2() { var _this = this; var playlists = this.playlists.master.playlists.filter(Playlist.isEnabled); stableSort(playlists, function(a, b) { return comparePlaylistBandwidth(a, b); }); var playlistsWithVideo = playlists.filter(function(playlist) { return !!codecsForPlaylist(_this.playlists.master, playlist).video; }); return playlistsWithVideo[0] || null; }; var concatSegments = function concatSegments2(segmentObj) { var offset = 0; var tempBuffer; if (segmentObj.bytes) { tempBuffer = new Uint8Array(segmentObj.bytes); segmentObj.segments.forEach(function(segment) { tempBuffer.set(segment, offset); offset += segment.byteLength; }); } return tempBuffer; }; var createCaptionsTrackIfNotExists = function createCaptionsTrackIfNotExists2(inbandTextTracks, tech, captionStream) { if (!inbandTextTracks[captionStream]) { tech.trigger({ type: "usage", name: "vhs-608" }); tech.trigger({ type: "usage", name: "hls-608" }); var instreamId = captionStream; if (/^cc708_/.test(captionStream)) { instreamId = "SERVICE" + captionStream.split("_")[1]; } var track = tech.textTracks().getTrackById(instreamId); if (track) { inbandTextTracks[captionStream] = track; } else { var captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {}; var label2 = captionStream; var language = captionStream; var def = false; var captionService = captionServices[instreamId]; if (captionService) { label2 = captionService.label; language = captionService.language; def = captionService["default"]; } inbandTextTracks[captionStream] = tech.addRemoteTextTrack({ kind: "captions", id: instreamId, "default": def, label: label2, language }, false).track; } } }; var addCaptionData = function addCaptionData2(_ref) { var inbandTextTracks = _ref.inbandTextTracks, captionArray = _ref.captionArray, timestampOffset2 = _ref.timestampOffset; if (!captionArray) { return; } var Cue = window_1.WebKitDataCue || window_1.VTTCue; captionArray.forEach(function(caption) { var track = caption.stream; inbandTextTracks[track].addCue(new Cue(caption.startTime + timestampOffset2, caption.endTime + timestampOffset2, caption.text)); }); }; var deprecateOldCue = function deprecateOldCue2(cue) { Object.defineProperties(cue.frame, { id: { get: function get7() { videojs.log.warn("cue.frame.id is deprecated. Use cue.value.key instead."); return cue.value.key; } }, value: { get: function get7() { videojs.log.warn("cue.frame.value is deprecated. Use cue.value.data instead."); return cue.value.data; } }, privateData: { get: function get7() { videojs.log.warn("cue.frame.privateData is deprecated. Use cue.value.data instead."); return cue.value.data; } } }); }; var addMetadata = function addMetadata2(_ref2) { var inbandTextTracks = _ref2.inbandTextTracks, metadataArray = _ref2.metadataArray, timestampOffset2 = _ref2.timestampOffset, videoDuration = _ref2.videoDuration; if (!metadataArray) { return; } var Cue = window_1.WebKitDataCue || window_1.VTTCue; var metadataTrack = inbandTextTracks.metadataTrack_; if (!metadataTrack) { return; } metadataArray.forEach(function(metadata) { var time = metadata.cueTime + timestampOffset2; if (typeof time !== "number" || window_1.isNaN(time) || time < 0 || !(time < Infinity)) { return; } metadata.frames.forEach(function(frame) { var cue = new Cue(time, time, frame.value || frame.url || frame.data || ""); cue.frame = frame; cue.value = frame; deprecateOldCue(cue); metadataTrack.addCue(cue); }); }); if (!metadataTrack.cues || !metadataTrack.cues.length) { return; } var cues = metadataTrack.cues; var cuesArray = []; for (var i2 = 0; i2 < cues.length; i2++) { if (cues[i2]) { cuesArray.push(cues[i2]); } } var cuesGroupedByStartTime = cuesArray.reduce(function(obj, cue) { var timeSlot = obj[cue.startTime] || []; timeSlot.push(cue); obj[cue.startTime] = timeSlot; return obj; }, {}); var sortedStartTimes = Object.keys(cuesGroupedByStartTime).sort(function(a, b) { return Number(a) - Number(b); }); sortedStartTimes.forEach(function(startTime, idx) { var cueGroup = cuesGroupedByStartTime[startTime]; var nextTime = Number(sortedStartTimes[idx + 1]) || videoDuration; cueGroup.forEach(function(cue) { cue.endTime = nextTime; }); }); }; var createMetadataTrackIfNotExists = function createMetadataTrackIfNotExists2(inbandTextTracks, dispatchType, tech) { if (inbandTextTracks.metadataTrack_) { return; } inbandTextTracks.metadataTrack_ = tech.addRemoteTextTrack({ kind: "metadata", label: "Timed Metadata" }, false).track; inbandTextTracks.metadataTrack_.inBandMetadataTrackDispatchType = dispatchType; }; var removeCuesFromTrack = function removeCuesFromTrack2(start2, end, track) { var i2; var cue; if (!track) { return; } if (!track.cues) { return; } i2 = track.cues.length; while (i2--) { cue = track.cues[i2]; if (cue.startTime >= start2 && cue.endTime <= end) { track.removeCue(cue); } } }; var removeDuplicateCuesFromTrack = function removeDuplicateCuesFromTrack2(track) { var cues = track.cues; if (!cues) { return; } for (var i2 = 0; i2 < cues.length; i2++) { var duplicates = []; var occurrences = 0; for (var j = 0; j < cues.length; j++) { if (cues[i2].startTime === cues[j].startTime && cues[i2].endTime === cues[j].endTime && cues[i2].text === cues[j].text) { occurrences++; if (occurrences > 1) { duplicates.push(cues[j]); } } } if (duplicates.length) { duplicates.forEach(function(dupe) { return track.removeCue(dupe); }); } } }; var gopsSafeToAlignWith = function gopsSafeToAlignWith2(buffer, currentTime, mapping) { if (typeof currentTime === "undefined" || currentTime === null || !buffer.length) { return []; } var currentTimePts = Math.ceil((currentTime - mapping + 3) * clock.ONE_SECOND_IN_TS); var i2; for (i2 = 0; i2 < buffer.length; i2++) { if (buffer[i2].pts > currentTimePts) { break; } } return buffer.slice(i2); }; var updateGopBuffer = function updateGopBuffer2(buffer, gops, replace) { if (!gops.length) { return buffer; } if (replace) { return gops.slice(); } var start2 = gops[0].pts; var i2 = 0; for (i2; i2 < buffer.length; i2++) { if (buffer[i2].pts >= start2) { break; } } return buffer.slice(0, i2).concat(gops); }; var removeGopBuffer = function removeGopBuffer2(buffer, start2, end, mapping) { var startPts = Math.ceil((start2 - mapping) * clock.ONE_SECOND_IN_TS); var endPts = Math.ceil((end - mapping) * clock.ONE_SECOND_IN_TS); var updatedBuffer = buffer.slice(); var i2 = buffer.length; while (i2--) { if (buffer[i2].pts <= endPts) { break; } } if (i2 === -1) { return updatedBuffer; } var j = i2 + 1; while (j--) { if (buffer[j].pts <= startPts) { break; } } j = Math.max(j, 0); updatedBuffer.splice(j, i2 - j + 1); return updatedBuffer; }; var shallowEqual = function shallowEqual2(a, b) { if (!a && !b || !a && b || a && !b) { return false; } if (a === b) { return true; } var akeys = Object.keys(a).sort(); var bkeys = Object.keys(b).sort(); if (akeys.length !== bkeys.length) { return false; } for (var i2 = 0; i2 < akeys.length; i2++) { var key = akeys[i2]; if (key !== bkeys[i2]) { return false; } if (a[key] !== b[key]) { return false; } } return true; }; var QUOTA_EXCEEDED_ERR = 22; var getSyncSegmentCandidate = function getSyncSegmentCandidate2(currentTimeline, segments, targetTime) { segments = segments || []; var timelineSegments = []; var time = 0; for (var i2 = 0; i2 < segments.length; i2++) { var segment = segments[i2]; if (currentTimeline === segment.timeline) { timelineSegments.push(i2); time += segment.duration; if (time > targetTime) { return i2; } } } if (timelineSegments.length === 0) { return 0; } return timelineSegments[timelineSegments.length - 1]; }; var MIN_BACK_BUFFER = 1; var CHECK_BUFFER_DELAY = 500; var finite = function finite2(num) { return typeof num === "number" && isFinite(num); }; var MIN_SEGMENT_DURATION_TO_SAVE_STATS = 1 / 60; var illegalMediaSwitch = function illegalMediaSwitch2(loaderType, startingMedia, trackInfo) { if (loaderType !== "main" || !startingMedia || !trackInfo) { return null; } if (!trackInfo.hasAudio && !trackInfo.hasVideo) { return "Neither audio nor video found in segment."; } if (startingMedia.hasVideo && !trackInfo.hasVideo) { return "Only audio found in segment when we expected video. We can't switch to audio only from a stream that had video. To get rid of this message, please add codec information to the manifest."; } if (!startingMedia.hasVideo && trackInfo.hasVideo) { return "Video found in segment when we expected only audio. We can't switch to a stream with video from an audio only stream. To get rid of this message, please add codec information to the manifest."; } return null; }; var safeBackBufferTrimTime = function safeBackBufferTrimTime2(seekable3, currentTime, targetDuration) { var trimTime = currentTime - Config.BACK_BUFFER_LENGTH; if (seekable3.length) { trimTime = Math.max(trimTime, seekable3.start(0)); } var maxTrimTime = currentTime - targetDuration; return Math.min(maxTrimTime, trimTime); }; var segmentInfoString = function segmentInfoString2(segmentInfo) { var startOfSegment = segmentInfo.startOfSegment, duration5 = segmentInfo.duration, segment = segmentInfo.segment, part = segmentInfo.part, _segmentInfo$playlist = segmentInfo.playlist, seq = _segmentInfo$playlist.mediaSequence, id = _segmentInfo$playlist.id, _segmentInfo$playlist2 = _segmentInfo$playlist.segments, segments = _segmentInfo$playlist2 === void 0 ? [] : _segmentInfo$playlist2, index2 = segmentInfo.mediaIndex, partIndex = segmentInfo.partIndex, timeline = segmentInfo.timeline; var segmentLen = segments.length - 1; var selection = "mediaIndex/partIndex increment"; if (segmentInfo.getMediaInfoForTime) { selection = "getMediaInfoForTime (" + segmentInfo.getMediaInfoForTime + ")"; } else if (segmentInfo.isSyncRequest) { selection = "getSyncSegmentCandidate (isSyncRequest)"; } if (segmentInfo.independent) { selection += " with independent " + segmentInfo.independent; } var hasPartIndex = typeof partIndex === "number"; var name = segmentInfo.segment.uri ? "segment" : "pre-segment"; var zeroBasedPartCount = hasPartIndex ? getKnownPartCount({ preloadSegment: segment }) - 1 : 0; return name + " [" + (seq + index2) + "/" + (seq + segmentLen) + "]" + (hasPartIndex ? " part [" + partIndex + "/" + zeroBasedPartCount + "]" : "") + (" segment start/end [" + segment.start + " => " + segment.end + "]") + (hasPartIndex ? " part start/end [" + part.start + " => " + part.end + "]" : "") + (" startOfSegment [" + startOfSegment + "]") + (" duration [" + duration5 + "]") + (" timeline [" + timeline + "]") + (" selected by [" + selection + "]") + (" playlist [" + id + "]"); }; var timingInfoPropertyForMedia = function timingInfoPropertyForMedia2(mediaType) { return mediaType + "TimingInfo"; }; var timestampOffsetForSegment = function timestampOffsetForSegment2(_ref) { var segmentTimeline = _ref.segmentTimeline, currentTimeline = _ref.currentTimeline, startOfSegment = _ref.startOfSegment, buffered = _ref.buffered, overrideCheck = _ref.overrideCheck; if (!overrideCheck && segmentTimeline === currentTimeline) { return null; } if (segmentTimeline < currentTimeline) { return startOfSegment; } return buffered.length ? buffered.end(buffered.length - 1) : startOfSegment; }; var shouldWaitForTimelineChange = function shouldWaitForTimelineChange2(_ref2) { var timelineChangeController = _ref2.timelineChangeController, currentTimeline = _ref2.currentTimeline, segmentTimeline = _ref2.segmentTimeline, loaderType = _ref2.loaderType, audioDisabled = _ref2.audioDisabled; if (currentTimeline === segmentTimeline) { return false; } if (loaderType === "audio") { var lastMainTimelineChange = timelineChangeController.lastTimelineChange({ type: "main" }); return !lastMainTimelineChange || lastMainTimelineChange.to !== segmentTimeline; } if (loaderType === "main" && audioDisabled) { var pendingAudioTimelineChange = timelineChangeController.pendingTimelineChange({ type: "audio" }); if (pendingAudioTimelineChange && pendingAudioTimelineChange.to === segmentTimeline) { return false; } return true; } return false; }; var mediaDuration = function mediaDuration2(timingInfos) { var maxDuration = 0; ["video", "audio"].forEach(function(type2) { var typeTimingInfo = timingInfos[type2 + "TimingInfo"]; if (!typeTimingInfo) { return; } var start2 = typeTimingInfo.start, end = typeTimingInfo.end; var duration5; if (typeof start2 === "bigint" || typeof end === "bigint") { duration5 = window_1.BigInt(end) - window_1.BigInt(start2); } else if (typeof start2 === "number" && typeof end === "number") { duration5 = end - start2; } if (typeof duration5 !== "undefined" && duration5 > maxDuration) { maxDuration = duration5; } }); if (typeof maxDuration === "bigint" && maxDuration < Number.MAX_SAFE_INTEGER) { maxDuration = Number(maxDuration); } return maxDuration; }; var segmentTooLong = function segmentTooLong2(_ref3) { var segmentDuration = _ref3.segmentDuration, maxDuration = _ref3.maxDuration; if (!segmentDuration) { return false; } return Math.round(segmentDuration) > maxDuration + TIME_FUDGE_FACTOR; }; var getTroublesomeSegmentDurationMessage = function getTroublesomeSegmentDurationMessage2(segmentInfo, sourceType) { if (sourceType !== "hls") { return null; } var segmentDuration = mediaDuration({ audioTimingInfo: segmentInfo.audioTimingInfo, videoTimingInfo: segmentInfo.videoTimingInfo }); if (!segmentDuration) { return null; } var targetDuration = segmentInfo.playlist.targetDuration; var isSegmentWayTooLong = segmentTooLong({ segmentDuration, maxDuration: targetDuration * 2 }); var isSegmentSlightlyTooLong = segmentTooLong({ segmentDuration, maxDuration: targetDuration }); var segmentTooLongMessage = "Segment with index " + segmentInfo.mediaIndex + " " + ("from playlist " + segmentInfo.playlist.id + " ") + ("has a duration of " + segmentDuration + " ") + ("when the reported duration is " + segmentInfo.duration + " ") + ("and the target duration is " + targetDuration + ". ") + "For HLS content, a duration in excess of the target duration may result in playback issues. See the HLS specification section on EXT-X-TARGETDURATION for more details: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1"; if (isSegmentWayTooLong || isSegmentSlightlyTooLong) { return { severity: isSegmentWayTooLong ? "warn" : "info", message: segmentTooLongMessage }; } return null; }; var SegmentLoader = /* @__PURE__ */ function(_videojs$EventTarget) { _inheritsLoose(SegmentLoader2, _videojs$EventTarget); function SegmentLoader2(settings, options2) { var _this; _this = _videojs$EventTarget.call(this) || this; if (!settings) { throw new TypeError("Initialization settings are required"); } if (typeof settings.currentTime !== "function") { throw new TypeError("No currentTime getter specified"); } if (!settings.mediaSource) { throw new TypeError("No MediaSource specified"); } _this.bandwidth = settings.bandwidth; _this.throughput = { rate: 0, count: 0 }; _this.roundTrip = NaN; _this.resetStats_(); _this.mediaIndex = null; _this.partIndex = null; _this.hasPlayed_ = settings.hasPlayed; _this.currentTime_ = settings.currentTime; _this.seekable_ = settings.seekable; _this.seeking_ = settings.seeking; _this.duration_ = settings.duration; _this.mediaSource_ = settings.mediaSource; _this.vhs_ = settings.vhs; _this.loaderType_ = settings.loaderType; _this.currentMediaInfo_ = void 0; _this.startingMediaInfo_ = void 0; _this.segmentMetadataTrack_ = settings.segmentMetadataTrack; _this.goalBufferLength_ = settings.goalBufferLength; _this.sourceType_ = settings.sourceType; _this.sourceUpdater_ = settings.sourceUpdater; _this.inbandTextTracks_ = settings.inbandTextTracks; _this.state_ = "INIT"; _this.timelineChangeController_ = settings.timelineChangeController; _this.shouldSaveSegmentTimingInfo_ = true; _this.parse708captions_ = settings.parse708captions; _this.useDtsForTimestampOffset_ = settings.useDtsForTimestampOffset; _this.captionServices_ = settings.captionServices; _this.experimentalExactManifestTimings = settings.experimentalExactManifestTimings; _this.checkBufferTimeout_ = null; _this.error_ = void 0; _this.currentTimeline_ = -1; _this.pendingSegment_ = null; _this.xhrOptions_ = null; _this.pendingSegments_ = []; _this.audioDisabled_ = false; _this.isPendingTimestampOffset_ = false; _this.gopBuffer_ = []; _this.timeMapping_ = 0; _this.safeAppend_ = videojs.browser.IE_VERSION >= 11; _this.appendInitSegment_ = { audio: true, video: true }; _this.playlistOfLastInitSegment_ = { audio: null, video: null }; _this.callQueue_ = []; _this.loadQueue_ = []; _this.metadataQueue_ = { id3: [], caption: [] }; _this.waitingOnRemove_ = false; _this.quotaExceededErrorRetryTimeout_ = null; _this.activeInitSegmentId_ = null; _this.initSegments_ = {}; _this.cacheEncryptionKeys_ = settings.cacheEncryptionKeys; _this.keyCache_ = {}; _this.decrypter_ = settings.decrypter; _this.syncController_ = settings.syncController; _this.syncPoint_ = { segmentIndex: 0, time: 0 }; _this.transmuxer_ = _this.createTransmuxer_(); _this.triggerSyncInfoUpdate_ = function() { return _this.trigger("syncinfoupdate"); }; _this.syncController_.on("syncinfoupdate", _this.triggerSyncInfoUpdate_); _this.mediaSource_.addEventListener("sourceopen", function() { if (!_this.isEndOfStream_()) { _this.ended_ = false; } }); _this.fetchAtBuffer_ = false; _this.logger_ = logger("SegmentLoader[" + _this.loaderType_ + "]"); Object.defineProperty(_assertThisInitialized(_this), "state", { get: function get7() { return this.state_; }, set: function set4(newState) { if (newState !== this.state_) { this.logger_(this.state_ + " -> " + newState); this.state_ = newState; this.trigger("statechange"); } } }); _this.sourceUpdater_.on("ready", function() { if (_this.hasEnoughInfoToAppend_()) { _this.processCallQueue_(); } }); if (_this.loaderType_ === "main") { _this.timelineChangeController_.on("pendingtimelinechange", function() { if (_this.hasEnoughInfoToAppend_()) { _this.processCallQueue_(); } }); } if (_this.loaderType_ === "audio") { _this.timelineChangeController_.on("timelinechange", function() { if (_this.hasEnoughInfoToLoad_()) { _this.processLoadQueue_(); } if (_this.hasEnoughInfoToAppend_()) { _this.processCallQueue_(); } }); } return _this; } var _proto = SegmentLoader2.prototype; _proto.createTransmuxer_ = function createTransmuxer_() { return segmentTransmuxer.createTransmuxer({ remux: false, alignGopsAtEnd: this.safeAppend_, keepOriginalTimestamps: true, parse708captions: this.parse708captions_, captionServices: this.captionServices_ }); }; _proto.resetStats_ = function resetStats_() { this.mediaBytesTransferred = 0; this.mediaRequests = 0; this.mediaRequestsAborted = 0; this.mediaRequestsTimedout = 0; this.mediaRequestsErrored = 0; this.mediaTransferDuration = 0; this.mediaSecondsLoaded = 0; this.mediaAppends = 0; }; _proto.dispose = function dispose() { this.trigger("dispose"); this.state = "DISPOSED"; this.pause(); this.abort_(); if (this.transmuxer_) { this.transmuxer_.terminate(); } this.resetStats_(); if (this.checkBufferTimeout_) { window_1.clearTimeout(this.checkBufferTimeout_); } if (this.syncController_ && this.triggerSyncInfoUpdate_) { this.syncController_.off("syncinfoupdate", this.triggerSyncInfoUpdate_); } this.off(); }; _proto.setAudio = function setAudio(enable) { this.audioDisabled_ = !enable; if (enable) { this.appendInitSegment_.audio = true; } else { this.sourceUpdater_.removeAudio(0, this.duration_()); } }; _proto.abort = function abort2() { if (this.state !== "WAITING") { if (this.pendingSegment_) { this.pendingSegment_ = null; } return; } this.abort_(); this.state = "READY"; if (!this.paused()) { this.monitorBuffer_(); } }; _proto.abort_ = function abort_() { if (this.pendingSegment_ && this.pendingSegment_.abortRequests) { this.pendingSegment_.abortRequests(); } this.pendingSegment_ = null; this.callQueue_ = []; this.loadQueue_ = []; this.metadataQueue_.id3 = []; this.metadataQueue_.caption = []; this.timelineChangeController_.clearPendingTimelineChange(this.loaderType_); this.waitingOnRemove_ = false; window_1.clearTimeout(this.quotaExceededErrorRetryTimeout_); this.quotaExceededErrorRetryTimeout_ = null; }; _proto.checkForAbort_ = function checkForAbort_(requestId) { if (this.state === "APPENDING" && !this.pendingSegment_) { this.state = "READY"; return true; } if (!this.pendingSegment_ || this.pendingSegment_.requestId !== requestId) { return true; } return false; }; _proto.error = function error(_error) { if (typeof _error !== "undefined") { this.logger_("error occurred:", _error); this.error_ = _error; } this.pendingSegment_ = null; return this.error_; }; _proto.endOfStream = function endOfStream2() { this.ended_ = true; if (this.transmuxer_) { segmentTransmuxer.reset(this.transmuxer_); } this.gopBuffer_.length = 0; this.pause(); this.trigger("ended"); }; _proto.buffered_ = function buffered_() { var trackInfo = this.getMediaInfo_(); if (!this.sourceUpdater_ || !trackInfo) { return videojs.createTimeRanges(); } if (this.loaderType_ === "main") { var hasAudio = trackInfo.hasAudio, hasVideo = trackInfo.hasVideo, isMuxed3 = trackInfo.isMuxed; if (hasVideo && hasAudio && !this.audioDisabled_ && !isMuxed3) { return this.sourceUpdater_.buffered(); } if (hasVideo) { return this.sourceUpdater_.videoBuffered(); } } return this.sourceUpdater_.audioBuffered(); }; _proto.initSegmentForMap = function initSegmentForMap(map, set4) { if (set4 === void 0) { set4 = false; } if (!map) { return null; } var id = initSegmentId(map); var storedMap = this.initSegments_[id]; if (set4 && !storedMap && map.bytes) { this.initSegments_[id] = storedMap = { resolvedUri: map.resolvedUri, byterange: map.byterange, bytes: map.bytes, tracks: map.tracks, timescales: map.timescales }; } return storedMap || map; }; _proto.segmentKey = function segmentKey(key, set4) { if (set4 === void 0) { set4 = false; } if (!key) { return null; } var id = segmentKeyId(key); var storedKey = this.keyCache_[id]; if (this.cacheEncryptionKeys_ && set4 && !storedKey && key.bytes) { this.keyCache_[id] = storedKey = { resolvedUri: key.resolvedUri, bytes: key.bytes }; } var result = { resolvedUri: (storedKey || key).resolvedUri }; if (storedKey) { result.bytes = storedKey.bytes; } return result; }; _proto.couldBeginLoading_ = function couldBeginLoading_() { return this.playlist_ && !this.paused(); }; _proto.load = function load() { this.monitorBuffer_(); if (!this.playlist_) { return; } if (this.state === "INIT" && this.couldBeginLoading_()) { return this.init_(); } if (!this.couldBeginLoading_() || this.state !== "READY" && this.state !== "INIT") { return; } this.state = "READY"; }; _proto.init_ = function init_() { this.state = "READY"; this.resetEverything(); return this.monitorBuffer_(); }; _proto.playlist = function playlist(newPlaylist, options2) { if (options2 === void 0) { options2 = {}; } if (!newPlaylist) { return; } var oldPlaylist = this.playlist_; var segmentInfo = this.pendingSegment_; this.playlist_ = newPlaylist; this.xhrOptions_ = options2; if (this.state === "INIT") { newPlaylist.syncInfo = { mediaSequence: newPlaylist.mediaSequence, time: 0 }; if (this.loaderType_ === "main") { this.syncController_.setDateTimeMappingForStart(newPlaylist); } } var oldId = null; if (oldPlaylist) { if (oldPlaylist.id) { oldId = oldPlaylist.id; } else if (oldPlaylist.uri) { oldId = oldPlaylist.uri; } } this.logger_("playlist update [" + oldId + " => " + (newPlaylist.id || newPlaylist.uri) + "]"); this.trigger("syncinfoupdate"); if (this.state === "INIT" && this.couldBeginLoading_()) { return this.init_(); } if (!oldPlaylist || oldPlaylist.uri !== newPlaylist.uri) { if (this.mediaIndex !== null) { if (!newPlaylist.endList) { this.resetLoader(); } else { this.resyncLoader(); } } this.currentMediaInfo_ = void 0; this.trigger("playlistupdate"); return; } var mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence; this.logger_("live window shift [" + mediaSequenceDiff + "]"); if (this.mediaIndex !== null) { this.mediaIndex -= mediaSequenceDiff; if (this.mediaIndex < 0) { this.mediaIndex = null; this.partIndex = null; } else { var segment = this.playlist_.segments[this.mediaIndex]; if (this.partIndex && (!segment.parts || !segment.parts.length || !segment.parts[this.partIndex])) { var mediaIndex = this.mediaIndex; this.logger_("currently processing part (index " + this.partIndex + ") no longer exists."); this.resetLoader(); this.mediaIndex = mediaIndex; } } } if (segmentInfo) { segmentInfo.mediaIndex -= mediaSequenceDiff; if (segmentInfo.mediaIndex < 0) { segmentInfo.mediaIndex = null; segmentInfo.partIndex = null; } else { if (segmentInfo.mediaIndex >= 0) { segmentInfo.segment = newPlaylist.segments[segmentInfo.mediaIndex]; } if (segmentInfo.partIndex >= 0 && segmentInfo.segment.parts) { segmentInfo.part = segmentInfo.segment.parts[segmentInfo.partIndex]; } } } this.syncController_.saveExpiredSegmentInfo(oldPlaylist, newPlaylist); }; _proto.pause = function pause() { if (this.checkBufferTimeout_) { window_1.clearTimeout(this.checkBufferTimeout_); this.checkBufferTimeout_ = null; } }; _proto.paused = function paused() { return this.checkBufferTimeout_ === null; }; _proto.resetEverything = function resetEverything(done) { this.ended_ = false; this.activeInitSegmentId_ = null; this.appendInitSegment_ = { audio: true, video: true }; this.resetLoader(); this.remove(0, Infinity, done); if (this.transmuxer_) { this.transmuxer_.postMessage({ action: "clearAllMp4Captions" }); this.transmuxer_.postMessage({ action: "reset" }); } }; _proto.resetLoader = function resetLoader() { this.fetchAtBuffer_ = false; this.resyncLoader(); }; _proto.resyncLoader = function resyncLoader() { if (this.transmuxer_) { segmentTransmuxer.reset(this.transmuxer_); } this.mediaIndex = null; this.partIndex = null; this.syncPoint_ = null; this.isPendingTimestampOffset_ = false; this.callQueue_ = []; this.loadQueue_ = []; this.metadataQueue_.id3 = []; this.metadataQueue_.caption = []; this.abort(); if (this.transmuxer_) { this.transmuxer_.postMessage({ action: "clearParsedMp4Captions" }); } }; _proto.remove = function remove2(start2, end, done, force) { if (done === void 0) { done = function done2() { }; } if (force === void 0) { force = false; } if (end === Infinity) { end = this.duration_(); } if (end <= start2) { this.logger_("skipping remove because end ${end} is <= start ${start}"); return; } if (!this.sourceUpdater_ || !this.getMediaInfo_()) { this.logger_("skipping remove because no source updater or starting media info"); return; } var removesRemaining = 1; var removeFinished = function removeFinished2() { removesRemaining--; if (removesRemaining === 0) { done(); } }; if (force || !this.audioDisabled_) { removesRemaining++; this.sourceUpdater_.removeAudio(start2, end, removeFinished); } if (force || this.loaderType_ === "main") { this.gopBuffer_ = removeGopBuffer(this.gopBuffer_, start2, end, this.timeMapping_); removesRemaining++; this.sourceUpdater_.removeVideo(start2, end, removeFinished); } for (var track in this.inbandTextTracks_) { removeCuesFromTrack(start2, end, this.inbandTextTracks_[track]); } removeCuesFromTrack(start2, end, this.segmentMetadataTrack_); removeFinished(); }; _proto.monitorBuffer_ = function monitorBuffer_() { if (this.checkBufferTimeout_) { window_1.clearTimeout(this.checkBufferTimeout_); } this.checkBufferTimeout_ = window_1.setTimeout(this.monitorBufferTick_.bind(this), 1); }; _proto.monitorBufferTick_ = function monitorBufferTick_() { if (this.state === "READY") { this.fillBuffer_(); } if (this.checkBufferTimeout_) { window_1.clearTimeout(this.checkBufferTimeout_); } this.checkBufferTimeout_ = window_1.setTimeout(this.monitorBufferTick_.bind(this), CHECK_BUFFER_DELAY); }; _proto.fillBuffer_ = function fillBuffer_() { if (this.sourceUpdater_.updating()) { return; } var segmentInfo = this.chooseNextRequest_(); if (!segmentInfo) { return; } if (typeof segmentInfo.timestampOffset === "number") { this.isPendingTimestampOffset_ = false; this.timelineChangeController_.pendingTimelineChange({ type: this.loaderType_, from: this.currentTimeline_, to: segmentInfo.timeline }); } this.loadSegment_(segmentInfo); }; _proto.isEndOfStream_ = function isEndOfStream_(mediaIndex, playlist, partIndex) { if (mediaIndex === void 0) { mediaIndex = this.mediaIndex; } if (playlist === void 0) { playlist = this.playlist_; } if (partIndex === void 0) { partIndex = this.partIndex; } if (!playlist || !this.mediaSource_) { return false; } var segment = typeof mediaIndex === "number" && playlist.segments[mediaIndex]; var appendedLastSegment = mediaIndex + 1 === playlist.segments.length; var appendedLastPart = !segment || !segment.parts || partIndex + 1 === segment.parts.length; return playlist.endList && this.mediaSource_.readyState === "open" && appendedLastSegment && appendedLastPart; }; _proto.chooseNextRequest_ = function chooseNextRequest_() { var buffered = this.buffered_(); var bufferedEnd = lastBufferedEnd(buffered) || 0; var bufferedTime = timeAheadOf(buffered, this.currentTime_()); var preloaded = !this.hasPlayed_() && bufferedTime >= 1; var haveEnoughBuffer = bufferedTime >= this.goalBufferLength_(); var segments = this.playlist_.segments; if (!segments.length || preloaded || haveEnoughBuffer) { return null; } this.syncPoint_ = this.syncPoint_ || this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_()); var next = { partIndex: null, mediaIndex: null, startOfSegment: null, playlist: this.playlist_, isSyncRequest: Boolean(!this.syncPoint_) }; if (next.isSyncRequest) { next.mediaIndex = getSyncSegmentCandidate(this.currentTimeline_, segments, bufferedEnd); } else if (this.mediaIndex !== null) { var segment = segments[this.mediaIndex]; var partIndex = typeof this.partIndex === "number" ? this.partIndex : -1; next.startOfSegment = segment.end ? segment.end : bufferedEnd; if (segment.parts && segment.parts[partIndex + 1]) { next.mediaIndex = this.mediaIndex; next.partIndex = partIndex + 1; } else { next.mediaIndex = this.mediaIndex + 1; } } else { var _Playlist$getMediaInf = Playlist.getMediaInfoForTime({ experimentalExactManifestTimings: this.experimentalExactManifestTimings, playlist: this.playlist_, currentTime: this.fetchAtBuffer_ ? bufferedEnd : this.currentTime_(), startingPartIndex: this.syncPoint_.partIndex, startingSegmentIndex: this.syncPoint_.segmentIndex, startTime: this.syncPoint_.time }), segmentIndex = _Playlist$getMediaInf.segmentIndex, startTime = _Playlist$getMediaInf.startTime, _partIndex = _Playlist$getMediaInf.partIndex; next.getMediaInfoForTime = this.fetchAtBuffer_ ? "bufferedEnd " + bufferedEnd : "currentTime " + this.currentTime_(); next.mediaIndex = segmentIndex; next.startOfSegment = startTime; next.partIndex = _partIndex; } var nextSegment = segments[next.mediaIndex]; var nextPart = nextSegment && typeof next.partIndex === "number" && nextSegment.parts && nextSegment.parts[next.partIndex]; if (!nextSegment || typeof next.partIndex === "number" && !nextPart) { return null; } if (typeof next.partIndex !== "number" && nextSegment.parts) { next.partIndex = 0; nextPart = nextSegment.parts[0]; } if (!bufferedTime && nextPart && !nextPart.independent) { if (next.partIndex === 0) { var lastSegment = segments[next.mediaIndex - 1]; var lastSegmentLastPart = lastSegment.parts && lastSegment.parts.length && lastSegment.parts[lastSegment.parts.length - 1]; if (lastSegmentLastPart && lastSegmentLastPart.independent) { next.mediaIndex -= 1; next.partIndex = lastSegment.parts.length - 1; next.independent = "previous segment"; } } else if (nextSegment.parts[next.partIndex - 1].independent) { next.partIndex -= 1; next.independent = "previous part"; } } var ended = this.mediaSource_ && this.mediaSource_.readyState === "ended"; if (next.mediaIndex >= segments.length - 1 && ended && !this.seeking_()) { return null; } return this.generateSegmentInfo_(next); }; _proto.generateSegmentInfo_ = function generateSegmentInfo_(options2) { var independent = options2.independent, playlist = options2.playlist, mediaIndex = options2.mediaIndex, startOfSegment = options2.startOfSegment, isSyncRequest = options2.isSyncRequest, partIndex = options2.partIndex, forceTimestampOffset = options2.forceTimestampOffset, getMediaInfoForTime3 = options2.getMediaInfoForTime; var segment = playlist.segments[mediaIndex]; var part = typeof partIndex === "number" && segment.parts[partIndex]; var segmentInfo = { requestId: "segment-loader-" + Math.random(), uri: part && part.resolvedUri || segment.resolvedUri, mediaIndex, partIndex: part ? partIndex : null, isSyncRequest, startOfSegment, playlist, bytes: null, encryptedBytes: null, timestampOffset: null, timeline: segment.timeline, duration: part && part.duration || segment.duration, segment, part, byteLength: 0, transmuxer: this.transmuxer_, getMediaInfoForTime: getMediaInfoForTime3, independent }; var overrideCheck = typeof forceTimestampOffset !== "undefined" ? forceTimestampOffset : this.isPendingTimestampOffset_; segmentInfo.timestampOffset = this.timestampOffsetForSegment_({ segmentTimeline: segment.timeline, currentTimeline: this.currentTimeline_, startOfSegment, buffered: this.buffered_(), overrideCheck }); var audioBufferedEnd = lastBufferedEnd(this.sourceUpdater_.audioBuffered()); if (typeof audioBufferedEnd === "number") { segmentInfo.audioAppendStart = audioBufferedEnd - this.sourceUpdater_.audioTimestampOffset(); } if (this.sourceUpdater_.videoBuffered().length) { segmentInfo.gopsToAlignWith = gopsSafeToAlignWith( this.gopBuffer_, this.currentTime_() - this.sourceUpdater_.videoTimestampOffset(), this.timeMapping_ ); } return segmentInfo; }; _proto.timestampOffsetForSegment_ = function timestampOffsetForSegment_(options2) { return timestampOffsetForSegment(options2); }; _proto.earlyAbortWhenNeeded_ = function earlyAbortWhenNeeded_(stats) { if (this.vhs_.tech_.paused() || !this.xhrOptions_.timeout || !this.playlist_.attributes.BANDWIDTH) { return; } if (Date.now() - (stats.firstBytesReceivedAt || Date.now()) < 1e3) { return; } var currentTime = this.currentTime_(); var measuredBandwidth = stats.bandwidth; var segmentDuration = this.pendingSegment_.duration; var requestTimeRemaining = Playlist.estimateSegmentRequestTime(segmentDuration, measuredBandwidth, this.playlist_, stats.bytesReceived); var timeUntilRebuffer$12 = timeUntilRebuffer(this.buffered_(), currentTime, this.vhs_.tech_.playbackRate()) - 1; if (requestTimeRemaining <= timeUntilRebuffer$12) { return; } var switchCandidate = minRebufferMaxBandwidthSelector({ master: this.vhs_.playlists.master, currentTime, bandwidth: measuredBandwidth, duration: this.duration_(), segmentDuration, timeUntilRebuffer: timeUntilRebuffer$12, currentTimeline: this.currentTimeline_, syncController: this.syncController_ }); if (!switchCandidate) { return; } var rebufferingImpact = requestTimeRemaining - timeUntilRebuffer$12; var timeSavedBySwitching = rebufferingImpact - switchCandidate.rebufferingImpact; var minimumTimeSaving = 0.5; if (timeUntilRebuffer$12 <= TIME_FUDGE_FACTOR) { minimumTimeSaving = 1; } if (!switchCandidate.playlist || switchCandidate.playlist.uri === this.playlist_.uri || timeSavedBySwitching < minimumTimeSaving) { return; } this.bandwidth = switchCandidate.playlist.attributes.BANDWIDTH * Config.BANDWIDTH_VARIANCE + 1; this.trigger("earlyabort"); }; _proto.handleAbort_ = function handleAbort_(segmentInfo) { this.logger_("Aborting " + segmentInfoString(segmentInfo)); this.mediaRequestsAborted += 1; }; _proto.handleProgress_ = function handleProgress_(event2, simpleSegment) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } this.trigger("progress"); }; _proto.handleTrackInfo_ = function handleTrackInfo_(simpleSegment, trackInfo) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } if (this.checkForIllegalMediaSwitch(trackInfo)) { return; } trackInfo = trackInfo || {}; if (!shallowEqual(this.currentMediaInfo_, trackInfo)) { this.appendInitSegment_ = { audio: true, video: true }; this.startingMediaInfo_ = trackInfo; this.currentMediaInfo_ = trackInfo; this.logger_("trackinfo update", trackInfo); this.trigger("trackinfo"); } if (this.checkForAbort_(simpleSegment.requestId)) { return; } this.pendingSegment_.trackInfo = trackInfo; if (this.hasEnoughInfoToAppend_()) { this.processCallQueue_(); } }; _proto.handleTimingInfo_ = function handleTimingInfo_(simpleSegment, mediaType, timeType, time) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } var segmentInfo = this.pendingSegment_; var timingInfoProperty = timingInfoPropertyForMedia(mediaType); segmentInfo[timingInfoProperty] = segmentInfo[timingInfoProperty] || {}; segmentInfo[timingInfoProperty][timeType] = time; this.logger_("timinginfo: " + mediaType + " - " + timeType + " - " + time); if (this.hasEnoughInfoToAppend_()) { this.processCallQueue_(); } }; _proto.handleCaptions_ = function handleCaptions_(simpleSegment, captionData) { var _this2 = this; this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } if (captionData.length === 0) { this.logger_("SegmentLoader received no captions from a caption event"); return; } var segmentInfo = this.pendingSegment_; if (!segmentInfo.hasAppendedData_) { this.metadataQueue_.caption.push(this.handleCaptions_.bind(this, simpleSegment, captionData)); return; } var timestampOffset2 = this.sourceUpdater_.videoTimestampOffset() === null ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset(); var captionTracks = {}; captionData.forEach(function(caption) { captionTracks[caption.stream] = captionTracks[caption.stream] || { startTime: Infinity, captions: [], endTime: 0 }; var captionTrack = captionTracks[caption.stream]; captionTrack.startTime = Math.min(captionTrack.startTime, caption.startTime + timestampOffset2); captionTrack.endTime = Math.max(captionTrack.endTime, caption.endTime + timestampOffset2); captionTrack.captions.push(caption); }); Object.keys(captionTracks).forEach(function(trackName) { var _captionTracks$trackN = captionTracks[trackName], startTime = _captionTracks$trackN.startTime, endTime = _captionTracks$trackN.endTime, captions = _captionTracks$trackN.captions; var inbandTextTracks = _this2.inbandTextTracks_; _this2.logger_("adding cues from " + startTime + " -> " + endTime + " for " + trackName); createCaptionsTrackIfNotExists(inbandTextTracks, _this2.vhs_.tech_, trackName); removeCuesFromTrack(startTime, endTime, inbandTextTracks[trackName]); addCaptionData({ captionArray: captions, inbandTextTracks, timestampOffset: timestampOffset2 }); }); if (this.transmuxer_) { this.transmuxer_.postMessage({ action: "clearParsedMp4Captions" }); } }; _proto.handleId3_ = function handleId3_(simpleSegment, id3Frames, dispatchType) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } var segmentInfo = this.pendingSegment_; if (!segmentInfo.hasAppendedData_) { this.metadataQueue_.id3.push(this.handleId3_.bind(this, simpleSegment, id3Frames, dispatchType)); return; } var timestampOffset2 = this.sourceUpdater_.videoTimestampOffset() === null ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset(); createMetadataTrackIfNotExists(this.inbandTextTracks_, dispatchType, this.vhs_.tech_); addMetadata({ inbandTextTracks: this.inbandTextTracks_, metadataArray: id3Frames, timestampOffset: timestampOffset2, videoDuration: this.duration_() }); }; _proto.processMetadataQueue_ = function processMetadataQueue_() { this.metadataQueue_.id3.forEach(function(fn2) { return fn2(); }); this.metadataQueue_.caption.forEach(function(fn2) { return fn2(); }); this.metadataQueue_.id3 = []; this.metadataQueue_.caption = []; }; _proto.processCallQueue_ = function processCallQueue_() { var callQueue = this.callQueue_; this.callQueue_ = []; callQueue.forEach(function(fun) { return fun(); }); }; _proto.processLoadQueue_ = function processLoadQueue_() { var loadQueue = this.loadQueue_; this.loadQueue_ = []; loadQueue.forEach(function(fun) { return fun(); }); }; _proto.hasEnoughInfoToLoad_ = function hasEnoughInfoToLoad_() { if (this.loaderType_ !== "audio") { return true; } var segmentInfo = this.pendingSegment_; if (!segmentInfo) { return false; } if (!this.getCurrentMediaInfo_()) { return true; } if (shouldWaitForTimelineChange({ timelineChangeController: this.timelineChangeController_, currentTimeline: this.currentTimeline_, segmentTimeline: segmentInfo.timeline, loaderType: this.loaderType_, audioDisabled: this.audioDisabled_ })) { return false; } return true; }; _proto.getCurrentMediaInfo_ = function getCurrentMediaInfo_(segmentInfo) { if (segmentInfo === void 0) { segmentInfo = this.pendingSegment_; } return segmentInfo && segmentInfo.trackInfo || this.currentMediaInfo_; }; _proto.getMediaInfo_ = function getMediaInfo_(segmentInfo) { if (segmentInfo === void 0) { segmentInfo = this.pendingSegment_; } return this.getCurrentMediaInfo_(segmentInfo) || this.startingMediaInfo_; }; _proto.getPendingSegmentPlaylist = function getPendingSegmentPlaylist() { return this.pendingSegment_ ? this.pendingSegment_.playlist : null; }; _proto.hasEnoughInfoToAppend_ = function hasEnoughInfoToAppend_() { if (!this.sourceUpdater_.ready()) { return false; } if (this.waitingOnRemove_ || this.quotaExceededErrorRetryTimeout_) { return false; } var segmentInfo = this.pendingSegment_; var trackInfo = this.getCurrentMediaInfo_(); if (!segmentInfo || !trackInfo) { return false; } var hasAudio = trackInfo.hasAudio, hasVideo = trackInfo.hasVideo, isMuxed3 = trackInfo.isMuxed; if (hasVideo && !segmentInfo.videoTimingInfo) { return false; } if (hasAudio && !this.audioDisabled_ && !isMuxed3 && !segmentInfo.audioTimingInfo) { return false; } if (shouldWaitForTimelineChange({ timelineChangeController: this.timelineChangeController_, currentTimeline: this.currentTimeline_, segmentTimeline: segmentInfo.timeline, loaderType: this.loaderType_, audioDisabled: this.audioDisabled_ })) { return false; } return true; }; _proto.handleData_ = function handleData_3(simpleSegment, result) { this.earlyAbortWhenNeeded_(simpleSegment.stats); if (this.checkForAbort_(simpleSegment.requestId)) { return; } if (this.callQueue_.length || !this.hasEnoughInfoToAppend_()) { this.callQueue_.push(this.handleData_.bind(this, simpleSegment, result)); return; } var segmentInfo = this.pendingSegment_; this.setTimeMapping_(segmentInfo.timeline); this.updateMediaSecondsLoaded_(segmentInfo.part || segmentInfo.segment); if (this.mediaSource_.readyState === "closed") { return; } if (simpleSegment.map) { simpleSegment.map = this.initSegmentForMap(simpleSegment.map, true); segmentInfo.segment.map = simpleSegment.map; } if (simpleSegment.key) { this.segmentKey(simpleSegment.key, true); } segmentInfo.isFmp4 = simpleSegment.isFmp4; segmentInfo.timingInfo = segmentInfo.timingInfo || {}; if (segmentInfo.isFmp4) { this.trigger("fmp4"); segmentInfo.timingInfo.start = segmentInfo[timingInfoPropertyForMedia(result.type)].start; } else { var trackInfo = this.getCurrentMediaInfo_(); var useVideoTimingInfo = this.loaderType_ === "main" && trackInfo && trackInfo.hasVideo; var firstVideoFrameTimeForData; if (useVideoTimingInfo) { firstVideoFrameTimeForData = segmentInfo.videoTimingInfo.start; } segmentInfo.timingInfo.start = this.trueSegmentStart_({ currentStart: segmentInfo.timingInfo.start, playlist: segmentInfo.playlist, mediaIndex: segmentInfo.mediaIndex, currentVideoTimestampOffset: this.sourceUpdater_.videoTimestampOffset(), useVideoTimingInfo, firstVideoFrameTimeForData, videoTimingInfo: segmentInfo.videoTimingInfo, audioTimingInfo: segmentInfo.audioTimingInfo }); } this.updateAppendInitSegmentStatus(segmentInfo, result.type); this.updateSourceBufferTimestampOffset_(segmentInfo); if (segmentInfo.isSyncRequest) { this.updateTimingInfoEnd_(segmentInfo); this.syncController_.saveSegmentTimingInfo({ segmentInfo, shouldSaveTimelineMapping: this.loaderType_ === "main" }); var next = this.chooseNextRequest_(); if (next.mediaIndex !== segmentInfo.mediaIndex || next.partIndex !== segmentInfo.partIndex) { this.logger_("sync segment was incorrect, not appending"); return; } this.logger_("sync segment was correct, appending"); } segmentInfo.hasAppendedData_ = true; this.processMetadataQueue_(); this.appendData_(segmentInfo, result); }; _proto.updateAppendInitSegmentStatus = function updateAppendInitSegmentStatus(segmentInfo, type2) { if (this.loaderType_ === "main" && typeof segmentInfo.timestampOffset === "number" && !segmentInfo.changedTimestampOffset) { this.appendInitSegment_ = { audio: true, video: true }; } if (this.playlistOfLastInitSegment_[type2] !== segmentInfo.playlist) { this.appendInitSegment_[type2] = true; } }; _proto.getInitSegmentAndUpdateState_ = function getInitSegmentAndUpdateState_(_ref4) { var type2 = _ref4.type, initSegment = _ref4.initSegment, map = _ref4.map, playlist = _ref4.playlist; if (map) { var id = initSegmentId(map); if (this.activeInitSegmentId_ === id) { return null; } initSegment = this.initSegmentForMap(map, true).bytes; this.activeInitSegmentId_ = id; } if (initSegment && this.appendInitSegment_[type2]) { this.playlistOfLastInitSegment_[type2] = playlist; this.appendInitSegment_[type2] = false; this.activeInitSegmentId_ = null; return initSegment; } return null; }; _proto.handleQuotaExceededError_ = function handleQuotaExceededError_(_ref5, error) { var _this3 = this; var segmentInfo = _ref5.segmentInfo, type2 = _ref5.type, bytes = _ref5.bytes; var audioBuffered = this.sourceUpdater_.audioBuffered(); var videoBuffered = this.sourceUpdater_.videoBuffered(); if (audioBuffered.length > 1) { this.logger_("On QUOTA_EXCEEDED_ERR, found gaps in the audio buffer: " + timeRangesToArray(audioBuffered).join(", ")); } if (videoBuffered.length > 1) { this.logger_("On QUOTA_EXCEEDED_ERR, found gaps in the video buffer: " + timeRangesToArray(videoBuffered).join(", ")); } var audioBufferStart = audioBuffered.length ? audioBuffered.start(0) : 0; var audioBufferEnd = audioBuffered.length ? audioBuffered.end(audioBuffered.length - 1) : 0; var videoBufferStart = videoBuffered.length ? videoBuffered.start(0) : 0; var videoBufferEnd = videoBuffered.length ? videoBuffered.end(videoBuffered.length - 1) : 0; if (audioBufferEnd - audioBufferStart <= MIN_BACK_BUFFER && videoBufferEnd - videoBufferStart <= MIN_BACK_BUFFER) { this.logger_("On QUOTA_EXCEEDED_ERR, single segment too large to append to buffer, triggering an error. " + ("Appended byte length: " + bytes.byteLength + ", ") + ("audio buffer: " + timeRangesToArray(audioBuffered).join(", ") + ", ") + ("video buffer: " + timeRangesToArray(videoBuffered).join(", ") + ", ")); this.error({ message: "Quota exceeded error with append of a single segment of content", excludeUntil: Infinity }); this.trigger("error"); return; } this.waitingOnRemove_ = true; this.callQueue_.push(this.appendToSourceBuffer_.bind(this, { segmentInfo, type: type2, bytes })); var currentTime = this.currentTime_(); var timeToRemoveUntil = currentTime - MIN_BACK_BUFFER; this.logger_("On QUOTA_EXCEEDED_ERR, removing audio/video from 0 to " + timeToRemoveUntil); this.remove(0, timeToRemoveUntil, function() { _this3.logger_("On QUOTA_EXCEEDED_ERR, retrying append in " + MIN_BACK_BUFFER + "s"); _this3.waitingOnRemove_ = false; _this3.quotaExceededErrorRetryTimeout_ = window_1.setTimeout(function() { _this3.logger_("On QUOTA_EXCEEDED_ERR, re-processing call queue"); _this3.quotaExceededErrorRetryTimeout_ = null; _this3.processCallQueue_(); }, MIN_BACK_BUFFER * 1e3); }, true); }; _proto.handleAppendError_ = function handleAppendError_(_ref6, error) { var segmentInfo = _ref6.segmentInfo, type2 = _ref6.type, bytes = _ref6.bytes; if (!error) { return; } if (error.code === QUOTA_EXCEEDED_ERR) { this.handleQuotaExceededError_({ segmentInfo, type: type2, bytes }); return; } this.logger_("Received non QUOTA_EXCEEDED_ERR on append", error); this.error(type2 + " append of " + bytes.length + "b failed for segment " + ("#" + segmentInfo.mediaIndex + " in playlist " + segmentInfo.playlist.id)); this.trigger("appenderror"); }; _proto.appendToSourceBuffer_ = function appendToSourceBuffer_(_ref7) { var segmentInfo = _ref7.segmentInfo, type2 = _ref7.type, initSegment = _ref7.initSegment, data = _ref7.data, bytes = _ref7.bytes; if (!bytes) { var segments = [data]; var byteLength = data.byteLength; if (initSegment) { segments.unshift(initSegment); byteLength += initSegment.byteLength; } bytes = concatSegments({ bytes: byteLength, segments }); } this.sourceUpdater_.appendBuffer({ segmentInfo, type: type2, bytes }, this.handleAppendError_.bind(this, { segmentInfo, type: type2, bytes })); }; _proto.handleSegmentTimingInfo_ = function handleSegmentTimingInfo_(type2, requestId, segmentTimingInfo) { if (!this.pendingSegment_ || requestId !== this.pendingSegment_.requestId) { return; } var segment = this.pendingSegment_.segment; var timingInfoProperty = type2 + "TimingInfo"; if (!segment[timingInfoProperty]) { segment[timingInfoProperty] = {}; } segment[timingInfoProperty].transmuxerPrependedSeconds = segmentTimingInfo.prependedContentDuration || 0; segment[timingInfoProperty].transmuxedPresentationStart = segmentTimingInfo.start.presentation; segment[timingInfoProperty].transmuxedDecodeStart = segmentTimingInfo.start.decode; segment[timingInfoProperty].transmuxedPresentationEnd = segmentTimingInfo.end.presentation; segment[timingInfoProperty].transmuxedDecodeEnd = segmentTimingInfo.end.decode; segment[timingInfoProperty].baseMediaDecodeTime = segmentTimingInfo.baseMediaDecodeTime; }; _proto.appendData_ = function appendData_(segmentInfo, result) { var type2 = result.type, data = result.data; if (!data || !data.byteLength) { return; } if (type2 === "audio" && this.audioDisabled_) { return; } var initSegment = this.getInitSegmentAndUpdateState_({ type: type2, initSegment: result.initSegment, playlist: segmentInfo.playlist, map: segmentInfo.isFmp4 ? segmentInfo.segment.map : null }); this.appendToSourceBuffer_({ segmentInfo, type: type2, initSegment, data }); }; _proto.loadSegment_ = function loadSegment_(segmentInfo) { var _this4 = this; this.state = "WAITING"; this.pendingSegment_ = segmentInfo; this.trimBackBuffer_(segmentInfo); if (typeof segmentInfo.timestampOffset === "number") { if (this.transmuxer_) { this.transmuxer_.postMessage({ action: "clearAllMp4Captions" }); } } if (!this.hasEnoughInfoToLoad_()) { this.loadQueue_.push(function() { var options2 = _extends$2({}, segmentInfo, { forceTimestampOffset: true }); _extends$2(segmentInfo, _this4.generateSegmentInfo_(options2)); _this4.isPendingTimestampOffset_ = false; _this4.updateTransmuxerAndRequestSegment_(segmentInfo); }); return; } this.updateTransmuxerAndRequestSegment_(segmentInfo); }; _proto.updateTransmuxerAndRequestSegment_ = function updateTransmuxerAndRequestSegment_(segmentInfo) { var _this5 = this; if (this.shouldUpdateTransmuxerTimestampOffset_(segmentInfo.timestampOffset)) { this.gopBuffer_.length = 0; segmentInfo.gopsToAlignWith = []; this.timeMapping_ = 0; this.transmuxer_.postMessage({ action: "reset" }); this.transmuxer_.postMessage({ action: "setTimestampOffset", timestampOffset: segmentInfo.timestampOffset }); } var simpleSegment = this.createSimplifiedSegmentObj_(segmentInfo); var isEndOfStream = this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex); var isWalkingForward = this.mediaIndex !== null; var isDiscontinuity = segmentInfo.timeline !== this.currentTimeline_ && segmentInfo.timeline > 0; var isEndOfTimeline = isEndOfStream || isWalkingForward && isDiscontinuity; this.logger_("Requesting " + segmentInfoString(segmentInfo)); if (simpleSegment.map && !simpleSegment.map.bytes) { this.logger_("going to request init segment."); this.appendInitSegment_ = { video: true, audio: true }; } segmentInfo.abortRequests = mediaSegmentRequest({ xhr: this.vhs_.xhr, xhrOptions: this.xhrOptions_, decryptionWorker: this.decrypter_, segment: simpleSegment, abortFn: this.handleAbort_.bind(this, segmentInfo), progressFn: this.handleProgress_.bind(this), trackInfoFn: this.handleTrackInfo_.bind(this), timingInfoFn: this.handleTimingInfo_.bind(this), videoSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, "video", segmentInfo.requestId), audioSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, "audio", segmentInfo.requestId), captionsFn: this.handleCaptions_.bind(this), isEndOfTimeline, endedTimelineFn: function endedTimelineFn() { _this5.logger_("received endedtimeline callback"); }, id3Fn: this.handleId3_.bind(this), dataFn: this.handleData_.bind(this), doneFn: this.segmentRequestFinished_.bind(this), onTransmuxerLog: function onTransmuxerLog(_ref8) { var message = _ref8.message, level = _ref8.level, stream = _ref8.stream; _this5.logger_(segmentInfoString(segmentInfo) + " logged from transmuxer stream " + stream + " as a " + level + ": " + message); } }); }; _proto.trimBackBuffer_ = function trimBackBuffer_(segmentInfo) { var removeToTime = safeBackBufferTrimTime(this.seekable_(), this.currentTime_(), this.playlist_.targetDuration || 10); if (removeToTime > 0) { this.remove(0, removeToTime); } }; _proto.createSimplifiedSegmentObj_ = function createSimplifiedSegmentObj_(segmentInfo) { var segment = segmentInfo.segment; var part = segmentInfo.part; var simpleSegment = { resolvedUri: part ? part.resolvedUri : segment.resolvedUri, byterange: part ? part.byterange : segment.byterange, requestId: segmentInfo.requestId, transmuxer: segmentInfo.transmuxer, audioAppendStart: segmentInfo.audioAppendStart, gopsToAlignWith: segmentInfo.gopsToAlignWith, part: segmentInfo.part }; var previousSegment = segmentInfo.playlist.segments[segmentInfo.mediaIndex - 1]; if (previousSegment && previousSegment.timeline === segment.timeline) { if (previousSegment.videoTimingInfo) { simpleSegment.baseStartTime = previousSegment.videoTimingInfo.transmuxedDecodeEnd; } else if (previousSegment.audioTimingInfo) { simpleSegment.baseStartTime = previousSegment.audioTimingInfo.transmuxedDecodeEnd; } } if (segment.key) { var iv = segment.key.iv || new Uint32Array([0, 0, 0, segmentInfo.mediaIndex + segmentInfo.playlist.mediaSequence]); simpleSegment.key = this.segmentKey(segment.key); simpleSegment.key.iv = iv; } if (segment.map) { simpleSegment.map = this.initSegmentForMap(segment.map); } return simpleSegment; }; _proto.saveTransferStats_ = function saveTransferStats_(stats) { this.mediaRequests += 1; if (stats) { this.mediaBytesTransferred += stats.bytesReceived; this.mediaTransferDuration += stats.roundTripTime; } }; _proto.saveBandwidthRelatedStats_ = function saveBandwidthRelatedStats_(duration5, stats) { this.pendingSegment_.byteLength = stats.bytesReceived; if (duration5 < MIN_SEGMENT_DURATION_TO_SAVE_STATS) { this.logger_("Ignoring segment's bandwidth because its duration of " + duration5 + (" is less than the min to record " + MIN_SEGMENT_DURATION_TO_SAVE_STATS)); return; } this.bandwidth = stats.bandwidth; this.roundTrip = stats.roundTripTime; }; _proto.handleTimeout_ = function handleTimeout_() { this.mediaRequestsTimedout += 1; this.bandwidth = 1; this.roundTrip = NaN; this.trigger("bandwidthupdate"); this.trigger("timeout"); }; _proto.segmentRequestFinished_ = function segmentRequestFinished_(error, simpleSegment, result) { if (this.callQueue_.length) { this.callQueue_.push(this.segmentRequestFinished_.bind(this, error, simpleSegment, result)); return; } this.saveTransferStats_(simpleSegment.stats); if (!this.pendingSegment_) { return; } if (simpleSegment.requestId !== this.pendingSegment_.requestId) { return; } if (error) { this.pendingSegment_ = null; this.state = "READY"; if (error.code === REQUEST_ERRORS.ABORTED) { return; } this.pause(); if (error.code === REQUEST_ERRORS.TIMEOUT) { this.handleTimeout_(); return; } this.mediaRequestsErrored += 1; this.error(error); this.trigger("error"); return; } var segmentInfo = this.pendingSegment_; this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats); segmentInfo.endOfAllRequests = simpleSegment.endOfAllRequests; if (result.gopInfo) { this.gopBuffer_ = updateGopBuffer(this.gopBuffer_, result.gopInfo, this.safeAppend_); } this.state = "APPENDING"; this.trigger("appending"); this.waitForAppendsToComplete_(segmentInfo); }; _proto.setTimeMapping_ = function setTimeMapping_(timeline) { var timelineMapping = this.syncController_.mappingForTimeline(timeline); if (timelineMapping !== null) { this.timeMapping_ = timelineMapping; } }; _proto.updateMediaSecondsLoaded_ = function updateMediaSecondsLoaded_(segment) { if (typeof segment.start === "number" && typeof segment.end === "number") { this.mediaSecondsLoaded += segment.end - segment.start; } else { this.mediaSecondsLoaded += segment.duration; } }; _proto.shouldUpdateTransmuxerTimestampOffset_ = function shouldUpdateTransmuxerTimestampOffset_(timestampOffset2) { if (timestampOffset2 === null) { return false; } if (this.loaderType_ === "main" && timestampOffset2 !== this.sourceUpdater_.videoTimestampOffset()) { return true; } if (!this.audioDisabled_ && timestampOffset2 !== this.sourceUpdater_.audioTimestampOffset()) { return true; } return false; }; _proto.trueSegmentStart_ = function trueSegmentStart_(_ref9) { var currentStart = _ref9.currentStart, playlist = _ref9.playlist, mediaIndex = _ref9.mediaIndex, firstVideoFrameTimeForData = _ref9.firstVideoFrameTimeForData, currentVideoTimestampOffset = _ref9.currentVideoTimestampOffset, useVideoTimingInfo = _ref9.useVideoTimingInfo, videoTimingInfo = _ref9.videoTimingInfo, audioTimingInfo = _ref9.audioTimingInfo; if (typeof currentStart !== "undefined") { return currentStart; } if (!useVideoTimingInfo) { return audioTimingInfo.start; } var previousSegment = playlist.segments[mediaIndex - 1]; if (mediaIndex === 0 || !previousSegment || typeof previousSegment.start === "undefined" || previousSegment.end !== firstVideoFrameTimeForData + currentVideoTimestampOffset) { return firstVideoFrameTimeForData; } return videoTimingInfo.start; }; _proto.waitForAppendsToComplete_ = function waitForAppendsToComplete_(segmentInfo) { var trackInfo = this.getCurrentMediaInfo_(segmentInfo); if (!trackInfo) { this.error({ message: "No starting media returned, likely due to an unsupported media format.", blacklistDuration: Infinity }); this.trigger("error"); return; } var hasAudio = trackInfo.hasAudio, hasVideo = trackInfo.hasVideo, isMuxed3 = trackInfo.isMuxed; var waitForVideo = this.loaderType_ === "main" && hasVideo; var waitForAudio = !this.audioDisabled_ && hasAudio && !isMuxed3; segmentInfo.waitingOnAppends = 0; if (!segmentInfo.hasAppendedData_) { if (!segmentInfo.timingInfo && typeof segmentInfo.timestampOffset === "number") { this.isPendingTimestampOffset_ = true; } segmentInfo.timingInfo = { start: 0 }; segmentInfo.waitingOnAppends++; if (!this.isPendingTimestampOffset_) { this.updateSourceBufferTimestampOffset_(segmentInfo); this.processMetadataQueue_(); } this.checkAppendsDone_(segmentInfo); return; } if (waitForVideo) { segmentInfo.waitingOnAppends++; } if (waitForAudio) { segmentInfo.waitingOnAppends++; } if (waitForVideo) { this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo)); } if (waitForAudio) { this.sourceUpdater_.audioQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo)); } }; _proto.checkAppendsDone_ = function checkAppendsDone_(segmentInfo) { if (this.checkForAbort_(segmentInfo.requestId)) { return; } segmentInfo.waitingOnAppends--; if (segmentInfo.waitingOnAppends === 0) { this.handleAppendsDone_(); } }; _proto.checkForIllegalMediaSwitch = function checkForIllegalMediaSwitch(trackInfo) { var illegalMediaSwitchError = illegalMediaSwitch(this.loaderType_, this.getCurrentMediaInfo_(), trackInfo); if (illegalMediaSwitchError) { this.error({ message: illegalMediaSwitchError, blacklistDuration: Infinity }); this.trigger("error"); return true; } return false; }; _proto.updateSourceBufferTimestampOffset_ = function updateSourceBufferTimestampOffset_(segmentInfo) { if (segmentInfo.timestampOffset === null || typeof segmentInfo.timingInfo.start !== "number" || segmentInfo.changedTimestampOffset || this.loaderType_ !== "main") { return; } var didChange = false; segmentInfo.timestampOffset -= this.getSegmentStartTimeForTimestampOffsetCalculation_({ videoTimingInfo: segmentInfo.segment.videoTimingInfo, audioTimingInfo: segmentInfo.segment.audioTimingInfo, timingInfo: segmentInfo.timingInfo }); segmentInfo.changedTimestampOffset = true; if (segmentInfo.timestampOffset !== this.sourceUpdater_.videoTimestampOffset()) { this.sourceUpdater_.videoTimestampOffset(segmentInfo.timestampOffset); didChange = true; } if (segmentInfo.timestampOffset !== this.sourceUpdater_.audioTimestampOffset()) { this.sourceUpdater_.audioTimestampOffset(segmentInfo.timestampOffset); didChange = true; } if (didChange) { this.trigger("timestampoffset"); } }; _proto.getSegmentStartTimeForTimestampOffsetCalculation_ = function getSegmentStartTimeForTimestampOffsetCalculation_(_ref10) { var videoTimingInfo = _ref10.videoTimingInfo, audioTimingInfo = _ref10.audioTimingInfo, timingInfo = _ref10.timingInfo; if (!this.useDtsForTimestampOffset_) { return timingInfo.start; } if (videoTimingInfo && typeof videoTimingInfo.transmuxedDecodeStart === "number") { return videoTimingInfo.transmuxedDecodeStart; } if (audioTimingInfo && typeof audioTimingInfo.transmuxedDecodeStart === "number") { return audioTimingInfo.transmuxedDecodeStart; } return timingInfo.start; }; _proto.updateTimingInfoEnd_ = function updateTimingInfoEnd_(segmentInfo) { segmentInfo.timingInfo = segmentInfo.timingInfo || {}; var trackInfo = this.getMediaInfo_(); var useVideoTimingInfo = this.loaderType_ === "main" && trackInfo && trackInfo.hasVideo; var prioritizedTimingInfo = useVideoTimingInfo && segmentInfo.videoTimingInfo ? segmentInfo.videoTimingInfo : segmentInfo.audioTimingInfo; if (!prioritizedTimingInfo) { return; } segmentInfo.timingInfo.end = typeof prioritizedTimingInfo.end === "number" ? prioritizedTimingInfo.end : prioritizedTimingInfo.start + segmentInfo.duration; }; _proto.handleAppendsDone_ = function handleAppendsDone_() { if (this.pendingSegment_) { this.trigger("appendsdone"); } if (!this.pendingSegment_) { this.state = "READY"; if (!this.paused()) { this.monitorBuffer_(); } return; } var segmentInfo = this.pendingSegment_; this.updateTimingInfoEnd_(segmentInfo); if (this.shouldSaveSegmentTimingInfo_) { this.syncController_.saveSegmentTimingInfo({ segmentInfo, shouldSaveTimelineMapping: this.loaderType_ === "main" }); } var segmentDurationMessage = getTroublesomeSegmentDurationMessage(segmentInfo, this.sourceType_); if (segmentDurationMessage) { if (segmentDurationMessage.severity === "warn") { videojs.log.warn(segmentDurationMessage.message); } else { this.logger_(segmentDurationMessage.message); } } this.recordThroughput_(segmentInfo); this.pendingSegment_ = null; this.state = "READY"; if (segmentInfo.isSyncRequest) { this.trigger("syncinfoupdate"); if (!segmentInfo.hasAppendedData_) { this.logger_("Throwing away un-appended sync request " + segmentInfoString(segmentInfo)); return; } } this.logger_("Appended " + segmentInfoString(segmentInfo)); this.addSegmentMetadataCue_(segmentInfo); this.fetchAtBuffer_ = true; if (this.currentTimeline_ !== segmentInfo.timeline) { this.timelineChangeController_.lastTimelineChange({ type: this.loaderType_, from: this.currentTimeline_, to: segmentInfo.timeline }); if (this.loaderType_ === "main" && !this.audioDisabled_) { this.timelineChangeController_.lastTimelineChange({ type: "audio", from: this.currentTimeline_, to: segmentInfo.timeline }); } } this.currentTimeline_ = segmentInfo.timeline; this.trigger("syncinfoupdate"); var segment = segmentInfo.segment; var part = segmentInfo.part; var badSegmentGuess = segment.end && this.currentTime_() - segment.end > segmentInfo.playlist.targetDuration * 3; var badPartGuess = part && part.end && this.currentTime_() - part.end > segmentInfo.playlist.partTargetDuration * 3; if (badSegmentGuess || badPartGuess) { this.logger_("bad " + (badSegmentGuess ? "segment" : "part") + " " + segmentInfoString(segmentInfo)); this.resetEverything(); return; } var isWalkingForward = this.mediaIndex !== null; if (isWalkingForward) { this.trigger("bandwidthupdate"); } this.trigger("progress"); this.mediaIndex = segmentInfo.mediaIndex; this.partIndex = segmentInfo.partIndex; if (this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex)) { this.endOfStream(); } this.trigger("appended"); if (segmentInfo.hasAppendedData_) { this.mediaAppends++; } if (!this.paused()) { this.monitorBuffer_(); } }; _proto.recordThroughput_ = function recordThroughput_(segmentInfo) { if (segmentInfo.duration < MIN_SEGMENT_DURATION_TO_SAVE_STATS) { this.logger_("Ignoring segment's throughput because its duration of " + segmentInfo.duration + (" is less than the min to record " + MIN_SEGMENT_DURATION_TO_SAVE_STATS)); return; } var rate = this.throughput.rate; var segmentProcessingTime = Date.now() - segmentInfo.endOfAllRequests + 1; var segmentProcessingThroughput = Math.floor(segmentInfo.byteLength / segmentProcessingTime * 8 * 1e3); this.throughput.rate += (segmentProcessingThroughput - rate) / ++this.throughput.count; }; _proto.addSegmentMetadataCue_ = function addSegmentMetadataCue_(segmentInfo) { if (!this.segmentMetadataTrack_) { return; } var segment = segmentInfo.segment; var start2 = segment.start; var end = segment.end; if (!finite(start2) || !finite(end)) { return; } removeCuesFromTrack(start2, end, this.segmentMetadataTrack_); var Cue = window_1.WebKitDataCue || window_1.VTTCue; var value = { custom: segment.custom, dateTimeObject: segment.dateTimeObject, dateTimeString: segment.dateTimeString, bandwidth: segmentInfo.playlist.attributes.BANDWIDTH, resolution: segmentInfo.playlist.attributes.RESOLUTION, codecs: segmentInfo.playlist.attributes.CODECS, byteLength: segmentInfo.byteLength, uri: segmentInfo.uri, timeline: segmentInfo.timeline, playlist: segmentInfo.playlist.id, start: start2, end }; var data = JSON.stringify(value); var cue = new Cue(start2, end, data); cue.value = value; this.segmentMetadataTrack_.addCue(cue); }; return SegmentLoader2; }(videojs.EventTarget); function noop() { } var toTitleCase2 = function toTitleCase3(string) { if (typeof string !== "string") { return string; } return string.replace(/./, function(w) { return w.toUpperCase(); }); }; var bufferTypes = ["video", "audio"]; var _updating = function updating2(type2, sourceUpdater) { var sourceBuffer = sourceUpdater[type2 + "Buffer"]; return sourceBuffer && sourceBuffer.updating || sourceUpdater.queuePending[type2]; }; var nextQueueIndexOfType = function nextQueueIndexOfType2(type2, queue) { for (var i2 = 0; i2 < queue.length; i2++) { var queueEntry = queue[i2]; if (queueEntry.type === "mediaSource") { return null; } if (queueEntry.type === type2) { return i2; } } return null; }; var shiftQueue = function shiftQueue2(type2, sourceUpdater) { if (sourceUpdater.queue.length === 0) { return; } var queueIndex = 0; var queueEntry = sourceUpdater.queue[queueIndex]; if (queueEntry.type === "mediaSource") { if (!sourceUpdater.updating() && sourceUpdater.mediaSource.readyState !== "closed") { sourceUpdater.queue.shift(); queueEntry.action(sourceUpdater); if (queueEntry.doneFn) { queueEntry.doneFn(); } shiftQueue2("audio", sourceUpdater); shiftQueue2("video", sourceUpdater); } return; } if (type2 === "mediaSource") { return; } if (!sourceUpdater.ready() || sourceUpdater.mediaSource.readyState === "closed" || _updating(type2, sourceUpdater)) { return; } if (queueEntry.type !== type2) { queueIndex = nextQueueIndexOfType(type2, sourceUpdater.queue); if (queueIndex === null) { return; } queueEntry = sourceUpdater.queue[queueIndex]; } sourceUpdater.queue.splice(queueIndex, 1); sourceUpdater.queuePending[type2] = queueEntry; queueEntry.action(type2, sourceUpdater); if (!queueEntry.doneFn) { sourceUpdater.queuePending[type2] = null; shiftQueue2(type2, sourceUpdater); return; } }; var cleanupBuffer = function cleanupBuffer2(type2, sourceUpdater) { var buffer = sourceUpdater[type2 + "Buffer"]; var titleType = toTitleCase2(type2); if (!buffer) { return; } buffer.removeEventListener("updateend", sourceUpdater["on" + titleType + "UpdateEnd_"]); buffer.removeEventListener("error", sourceUpdater["on" + titleType + "Error_"]); sourceUpdater.codecs[type2] = null; sourceUpdater[type2 + "Buffer"] = null; }; var inSourceBuffers = function inSourceBuffers2(mediaSource, sourceBuffer) { return mediaSource && sourceBuffer && Array.prototype.indexOf.call(mediaSource.sourceBuffers, sourceBuffer) !== -1; }; var actions = { appendBuffer: function appendBuffer(bytes, segmentInfo, onError2) { return function(type2, sourceUpdater) { var sourceBuffer = sourceUpdater[type2 + "Buffer"]; if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_("Appending segment " + segmentInfo.mediaIndex + "'s " + bytes.length + " bytes to " + type2 + "Buffer"); try { sourceBuffer.appendBuffer(bytes); } catch (e) { sourceUpdater.logger_("Error with code " + e.code + " " + (e.code === QUOTA_EXCEEDED_ERR ? "(QUOTA_EXCEEDED_ERR) " : "") + ("when appending segment " + segmentInfo.mediaIndex + " to " + type2 + "Buffer")); sourceUpdater.queuePending[type2] = null; onError2(e); } }; }, remove: function remove(start2, end) { return function(type2, sourceUpdater) { var sourceBuffer = sourceUpdater[type2 + "Buffer"]; if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_("Removing " + start2 + " to " + end + " from " + type2 + "Buffer"); try { sourceBuffer.remove(start2, end); } catch (e) { sourceUpdater.logger_("Remove " + start2 + " to " + end + " from " + type2 + "Buffer failed"); } }; }, timestampOffset: function timestampOffset(offset) { return function(type2, sourceUpdater) { var sourceBuffer = sourceUpdater[type2 + "Buffer"]; if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_("Setting " + type2 + "timestampOffset to " + offset); sourceBuffer.timestampOffset = offset; }; }, callback: function callback(_callback) { return function(type2, sourceUpdater) { _callback(); }; }, endOfStream: function endOfStream(error) { return function(sourceUpdater) { if (sourceUpdater.mediaSource.readyState !== "open") { return; } sourceUpdater.logger_("Calling mediaSource endOfStream(" + (error || "") + ")"); try { sourceUpdater.mediaSource.endOfStream(error); } catch (e) { videojs.log.warn("Failed to call media source endOfStream", e); } }; }, duration: function duration4(_duration) { return function(sourceUpdater) { sourceUpdater.logger_("Setting mediaSource duration to " + _duration); try { sourceUpdater.mediaSource.duration = _duration; } catch (e) { videojs.log.warn("Failed to set media source duration", e); } }; }, abort: function abort() { return function(type2, sourceUpdater) { if (sourceUpdater.mediaSource.readyState !== "open") { return; } var sourceBuffer = sourceUpdater[type2 + "Buffer"]; if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_("calling abort on " + type2 + "Buffer"); try { sourceBuffer.abort(); } catch (e) { videojs.log.warn("Failed to abort on " + type2 + "Buffer", e); } }; }, addSourceBuffer: function addSourceBuffer(type2, codec) { return function(sourceUpdater) { var titleType = toTitleCase2(type2); var mime = getMimeForCodec2(codec); sourceUpdater.logger_("Adding " + type2 + "Buffer with codec " + codec + " to mediaSource"); var sourceBuffer = sourceUpdater.mediaSource.addSourceBuffer(mime); sourceBuffer.addEventListener("updateend", sourceUpdater["on" + titleType + "UpdateEnd_"]); sourceBuffer.addEventListener("error", sourceUpdater["on" + titleType + "Error_"]); sourceUpdater.codecs[type2] = codec; sourceUpdater[type2 + "Buffer"] = sourceBuffer; }; }, removeSourceBuffer: function removeSourceBuffer(type2) { return function(sourceUpdater) { var sourceBuffer = sourceUpdater[type2 + "Buffer"]; cleanupBuffer(type2, sourceUpdater); if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) { return; } sourceUpdater.logger_("Removing " + type2 + "Buffer with codec " + sourceUpdater.codecs[type2] + " from mediaSource"); try { sourceUpdater.mediaSource.removeSourceBuffer(sourceBuffer); } catch (e) { videojs.log.warn("Failed to removeSourceBuffer " + type2 + "Buffer", e); } }; }, changeType: function changeType(codec) { return function(type2, sourceUpdater) { var sourceBuffer = sourceUpdater[type2 + "Buffer"]; var mime = getMimeForCodec2(codec); if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) { return; } if (sourceUpdater.codecs[type2] === codec) { return; } sourceUpdater.logger_("changing " + type2 + "Buffer codec from " + sourceUpdater.codecs[type2] + " to " + codec); sourceBuffer.changeType(mime); sourceUpdater.codecs[type2] = codec; }; } }; var pushQueue = function pushQueue2(_ref) { var type2 = _ref.type, sourceUpdater = _ref.sourceUpdater, action = _ref.action, doneFn = _ref.doneFn, name = _ref.name; sourceUpdater.queue.push({ type: type2, action, doneFn, name }); shiftQueue(type2, sourceUpdater); }; var onUpdateend = function onUpdateend2(type2, sourceUpdater) { return function(e) { if (sourceUpdater.queuePending[type2]) { var doneFn = sourceUpdater.queuePending[type2].doneFn; sourceUpdater.queuePending[type2] = null; if (doneFn) { doneFn(sourceUpdater[type2 + "Error_"]); } } shiftQueue(type2, sourceUpdater); }; }; var SourceUpdater = /* @__PURE__ */ function(_videojs$EventTarget) { _inheritsLoose(SourceUpdater2, _videojs$EventTarget); function SourceUpdater2(mediaSource) { var _this; _this = _videojs$EventTarget.call(this) || this; _this.mediaSource = mediaSource; _this.sourceopenListener_ = function() { return shiftQueue("mediaSource", _assertThisInitialized(_this)); }; _this.mediaSource.addEventListener("sourceopen", _this.sourceopenListener_); _this.logger_ = logger("SourceUpdater"); _this.audioTimestampOffset_ = 0; _this.videoTimestampOffset_ = 0; _this.queue = []; _this.queuePending = { audio: null, video: null }; _this.delayedAudioAppendQueue_ = []; _this.videoAppendQueued_ = false; _this.codecs = {}; _this.onVideoUpdateEnd_ = onUpdateend("video", _assertThisInitialized(_this)); _this.onAudioUpdateEnd_ = onUpdateend("audio", _assertThisInitialized(_this)); _this.onVideoError_ = function(e) { _this.videoError_ = e; }; _this.onAudioError_ = function(e) { _this.audioError_ = e; }; _this.createdSourceBuffers_ = false; _this.initializedEme_ = false; _this.triggeredReady_ = false; return _this; } var _proto = SourceUpdater2.prototype; _proto.initializedEme = function initializedEme() { this.initializedEme_ = true; this.triggerReady(); }; _proto.hasCreatedSourceBuffers = function hasCreatedSourceBuffers() { return this.createdSourceBuffers_; }; _proto.hasInitializedAnyEme = function hasInitializedAnyEme() { return this.initializedEme_; }; _proto.ready = function ready() { return this.hasCreatedSourceBuffers() && this.hasInitializedAnyEme(); }; _proto.createSourceBuffers = function createSourceBuffers(codecs) { if (this.hasCreatedSourceBuffers()) { return; } this.addOrChangeSourceBuffers(codecs); this.createdSourceBuffers_ = true; this.trigger("createdsourcebuffers"); this.triggerReady(); }; _proto.triggerReady = function triggerReady() { if (this.ready() && !this.triggeredReady_) { this.triggeredReady_ = true; this.trigger("ready"); } }; _proto.addSourceBuffer = function addSourceBuffer2(type2, codec) { pushQueue({ type: "mediaSource", sourceUpdater: this, action: actions.addSourceBuffer(type2, codec), name: "addSourceBuffer" }); }; _proto.abort = function abort2(type2) { pushQueue({ type: type2, sourceUpdater: this, action: actions.abort(type2), name: "abort" }); }; _proto.removeSourceBuffer = function removeSourceBuffer2(type2) { if (!this.canRemoveSourceBuffer()) { videojs.log.error("removeSourceBuffer is not supported!"); return; } pushQueue({ type: "mediaSource", sourceUpdater: this, action: actions.removeSourceBuffer(type2), name: "removeSourceBuffer" }); }; _proto.canRemoveSourceBuffer = function canRemoveSourceBuffer() { return !videojs.browser.IE_VERSION && !videojs.browser.IS_FIREFOX && window_1.MediaSource && window_1.MediaSource.prototype && typeof window_1.MediaSource.prototype.removeSourceBuffer === "function"; }; SourceUpdater2.canChangeType = function canChangeType() { return window_1.SourceBuffer && window_1.SourceBuffer.prototype && typeof window_1.SourceBuffer.prototype.changeType === "function"; }; _proto.canChangeType = function canChangeType() { return this.constructor.canChangeType(); }; _proto.changeType = function changeType2(type2, codec) { if (!this.canChangeType()) { videojs.log.error("changeType is not supported!"); return; } pushQueue({ type: type2, sourceUpdater: this, action: actions.changeType(codec), name: "changeType" }); }; _proto.addOrChangeSourceBuffers = function addOrChangeSourceBuffers(codecs) { var _this2 = this; if (!codecs || typeof codecs !== "object" || Object.keys(codecs).length === 0) { throw new Error("Cannot addOrChangeSourceBuffers to undefined codecs"); } Object.keys(codecs).forEach(function(type2) { var codec = codecs[type2]; if (!_this2.hasCreatedSourceBuffers()) { return _this2.addSourceBuffer(type2, codec); } if (_this2.canChangeType()) { _this2.changeType(type2, codec); } }); }; _proto.appendBuffer = function appendBuffer2(options2, doneFn) { var _this3 = this; var segmentInfo = options2.segmentInfo, type2 = options2.type, bytes = options2.bytes; this.processedAppend_ = true; if (type2 === "audio" && this.videoBuffer && !this.videoAppendQueued_) { this.delayedAudioAppendQueue_.push([options2, doneFn]); this.logger_("delayed audio append of " + bytes.length + " until video append"); return; } var onError2 = doneFn; pushQueue({ type: type2, sourceUpdater: this, action: actions.appendBuffer(bytes, segmentInfo || { mediaIndex: -1 }, onError2), doneFn, name: "appendBuffer" }); if (type2 === "video") { this.videoAppendQueued_ = true; if (!this.delayedAudioAppendQueue_.length) { return; } var queue = this.delayedAudioAppendQueue_.slice(); this.logger_("queuing delayed audio " + queue.length + " appendBuffers"); this.delayedAudioAppendQueue_.length = 0; queue.forEach(function(que) { _this3.appendBuffer.apply(_this3, que); }); } }; _proto.audioBuffered = function audioBuffered() { if (!inSourceBuffers(this.mediaSource, this.audioBuffer)) { return videojs.createTimeRange(); } return this.audioBuffer.buffered ? this.audioBuffer.buffered : videojs.createTimeRange(); }; _proto.videoBuffered = function videoBuffered() { if (!inSourceBuffers(this.mediaSource, this.videoBuffer)) { return videojs.createTimeRange(); } return this.videoBuffer.buffered ? this.videoBuffer.buffered : videojs.createTimeRange(); }; _proto.buffered = function buffered() { var video = inSourceBuffers(this.mediaSource, this.videoBuffer) ? this.videoBuffer : null; var audio = inSourceBuffers(this.mediaSource, this.audioBuffer) ? this.audioBuffer : null; if (audio && !video) { return this.audioBuffered(); } if (video && !audio) { return this.videoBuffered(); } return bufferIntersection(this.audioBuffered(), this.videoBuffered()); }; _proto.setDuration = function setDuration(duration5, doneFn) { if (doneFn === void 0) { doneFn = noop; } pushQueue({ type: "mediaSource", sourceUpdater: this, action: actions.duration(duration5), name: "duration", doneFn }); }; _proto.endOfStream = function endOfStream2(error, doneFn) { if (error === void 0) { error = null; } if (doneFn === void 0) { doneFn = noop; } if (typeof error !== "string") { error = void 0; } pushQueue({ type: "mediaSource", sourceUpdater: this, action: actions.endOfStream(error), name: "endOfStream", doneFn }); }; _proto.removeAudio = function removeAudio(start2, end, done) { if (done === void 0) { done = noop; } if (!this.audioBuffered().length || this.audioBuffered().end(0) === 0) { done(); return; } pushQueue({ type: "audio", sourceUpdater: this, action: actions.remove(start2, end), doneFn: done, name: "remove" }); }; _proto.removeVideo = function removeVideo(start2, end, done) { if (done === void 0) { done = noop; } if (!this.videoBuffered().length || this.videoBuffered().end(0) === 0) { done(); return; } pushQueue({ type: "video", sourceUpdater: this, action: actions.remove(start2, end), doneFn: done, name: "remove" }); }; _proto.updating = function updating3() { if (_updating("audio", this) || _updating("video", this)) { return true; } return false; }; _proto.audioTimestampOffset = function audioTimestampOffset(offset) { if (typeof offset !== "undefined" && this.audioBuffer && this.audioTimestampOffset_ !== offset) { pushQueue({ type: "audio", sourceUpdater: this, action: actions.timestampOffset(offset), name: "timestampOffset" }); this.audioTimestampOffset_ = offset; } return this.audioTimestampOffset_; }; _proto.videoTimestampOffset = function videoTimestampOffset(offset) { if (typeof offset !== "undefined" && this.videoBuffer && this.videoTimestampOffset !== offset) { pushQueue({ type: "video", sourceUpdater: this, action: actions.timestampOffset(offset), name: "timestampOffset" }); this.videoTimestampOffset_ = offset; } return this.videoTimestampOffset_; }; _proto.audioQueueCallback = function audioQueueCallback(callback2) { if (!this.audioBuffer) { return; } pushQueue({ type: "audio", sourceUpdater: this, action: actions.callback(callback2), name: "callback" }); }; _proto.videoQueueCallback = function videoQueueCallback(callback2) { if (!this.videoBuffer) { return; } pushQueue({ type: "video", sourceUpdater: this, action: actions.callback(callback2), name: "callback" }); }; _proto.dispose = function dispose() { var _this4 = this; this.trigger("dispose"); bufferTypes.forEach(function(type2) { _this4.abort(type2); if (_this4.canRemoveSourceBuffer()) { _this4.removeSourceBuffer(type2); } else { _this4[type2 + "QueueCallback"](function() { return cleanupBuffer(type2, _this4); }); } }); this.videoAppendQueued_ = false; this.delayedAudioAppendQueue_.length = 0; if (this.sourceopenListener_) { this.mediaSource.removeEventListener("sourceopen", this.sourceopenListener_); } this.off(); }; return SourceUpdater2; }(videojs.EventTarget); var uint8ToUtf8 = function uint8ToUtf82(uintArray) { return decodeURIComponent(escape(String.fromCharCode.apply(null, uintArray))); }; var VTT_LINE_TERMINATORS = new Uint8Array("\n\n".split("").map(function(_char3) { return _char3.charCodeAt(0); })); var NoVttJsError = /* @__PURE__ */ function(_Error) { _inheritsLoose(NoVttJsError2, _Error); function NoVttJsError2() { return _Error.call(this, "Trying to parse received VTT cues, but there is no WebVTT. Make sure vtt.js is loaded.") || this; } return NoVttJsError2; }(/* @__PURE__ */ _wrapNativeSuper(Error)); var VTTSegmentLoader = /* @__PURE__ */ function(_SegmentLoader) { _inheritsLoose(VTTSegmentLoader2, _SegmentLoader); function VTTSegmentLoader2(settings, options2) { var _this; if (options2 === void 0) { options2 = {}; } _this = _SegmentLoader.call(this, settings, options2) || this; _this.mediaSource_ = null; _this.subtitlesTrack_ = null; _this.loaderType_ = "subtitle"; _this.featuresNativeTextTracks_ = settings.featuresNativeTextTracks; _this.loadVttJs = settings.loadVttJs; _this.shouldSaveSegmentTimingInfo_ = false; return _this; } var _proto = VTTSegmentLoader2.prototype; _proto.createTransmuxer_ = function createTransmuxer_() { return null; }; _proto.buffered_ = function buffered_() { if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues || !this.subtitlesTrack_.cues.length) { return videojs.createTimeRanges(); } var cues = this.subtitlesTrack_.cues; var start2 = cues[0].startTime; var end = cues[cues.length - 1].startTime; return videojs.createTimeRanges([[start2, end]]); }; _proto.initSegmentForMap = function initSegmentForMap(map, set4) { if (set4 === void 0) { set4 = false; } if (!map) { return null; } var id = initSegmentId(map); var storedMap = this.initSegments_[id]; if (set4 && !storedMap && map.bytes) { var combinedByteLength = VTT_LINE_TERMINATORS.byteLength + map.bytes.byteLength; var combinedSegment = new Uint8Array(combinedByteLength); combinedSegment.set(map.bytes); combinedSegment.set(VTT_LINE_TERMINATORS, map.bytes.byteLength); this.initSegments_[id] = storedMap = { resolvedUri: map.resolvedUri, byterange: map.byterange, bytes: combinedSegment }; } return storedMap || map; }; _proto.couldBeginLoading_ = function couldBeginLoading_() { return this.playlist_ && this.subtitlesTrack_ && !this.paused(); }; _proto.init_ = function init_() { this.state = "READY"; this.resetEverything(); return this.monitorBuffer_(); }; _proto.track = function track(_track) { if (typeof _track === "undefined") { return this.subtitlesTrack_; } this.subtitlesTrack_ = _track; if (this.state === "INIT" && this.couldBeginLoading_()) { this.init_(); } return this.subtitlesTrack_; }; _proto.remove = function remove2(start2, end) { removeCuesFromTrack(start2, end, this.subtitlesTrack_); }; _proto.fillBuffer_ = function fillBuffer_() { var _this2 = this; var segmentInfo = this.chooseNextRequest_(); if (!segmentInfo) { return; } if (this.syncController_.timestampOffsetForTimeline(segmentInfo.timeline) === null) { var checkTimestampOffset = function checkTimestampOffset2() { _this2.state = "READY"; if (!_this2.paused()) { _this2.monitorBuffer_(); } }; this.syncController_.one("timestampoffset", checkTimestampOffset); this.state = "WAITING_ON_TIMELINE"; return; } this.loadSegment_(segmentInfo); }; _proto.timestampOffsetForSegment_ = function timestampOffsetForSegment_() { return null; }; _proto.chooseNextRequest_ = function chooseNextRequest_() { return this.skipEmptySegments_(_SegmentLoader.prototype.chooseNextRequest_.call(this)); }; _proto.skipEmptySegments_ = function skipEmptySegments_(segmentInfo) { while (segmentInfo && segmentInfo.segment.empty) { if (segmentInfo.mediaIndex + 1 >= segmentInfo.playlist.segments.length) { segmentInfo = null; break; } segmentInfo = this.generateSegmentInfo_({ playlist: segmentInfo.playlist, mediaIndex: segmentInfo.mediaIndex + 1, startOfSegment: segmentInfo.startOfSegment + segmentInfo.duration, isSyncRequest: segmentInfo.isSyncRequest }); } return segmentInfo; }; _proto.stopForError = function stopForError(error) { this.error(error); this.state = "READY"; this.pause(); this.trigger("error"); }; _proto.segmentRequestFinished_ = function segmentRequestFinished_(error, simpleSegment, result) { var _this3 = this; if (!this.subtitlesTrack_) { this.state = "READY"; return; } this.saveTransferStats_(simpleSegment.stats); if (!this.pendingSegment_) { this.state = "READY"; this.mediaRequestsAborted += 1; return; } if (error) { if (error.code === REQUEST_ERRORS.TIMEOUT) { this.handleTimeout_(); } if (error.code === REQUEST_ERRORS.ABORTED) { this.mediaRequestsAborted += 1; } else { this.mediaRequestsErrored += 1; } this.stopForError(error); return; } var segmentInfo = this.pendingSegment_; this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats); if (simpleSegment.key) { this.segmentKey(simpleSegment.key, true); } this.state = "APPENDING"; this.trigger("appending"); var segment = segmentInfo.segment; if (segment.map) { segment.map.bytes = simpleSegment.map.bytes; } segmentInfo.bytes = simpleSegment.bytes; if (typeof window_1.WebVTT !== "function" && typeof this.loadVttJs === "function") { this.state = "WAITING_ON_VTTJS"; this.loadVttJs().then(function() { return _this3.segmentRequestFinished_(error, simpleSegment, result); }, function() { return _this3.stopForError({ message: "Error loading vtt.js" }); }); return; } segment.requested = true; try { this.parseVTTCues_(segmentInfo); } catch (e) { this.stopForError({ message: e.message }); return; } this.updateTimeMapping_(segmentInfo, this.syncController_.timelines[segmentInfo.timeline], this.playlist_); if (segmentInfo.cues.length) { segmentInfo.timingInfo = { start: segmentInfo.cues[0].startTime, end: segmentInfo.cues[segmentInfo.cues.length - 1].endTime }; } else { segmentInfo.timingInfo = { start: segmentInfo.startOfSegment, end: segmentInfo.startOfSegment + segmentInfo.duration }; } if (segmentInfo.isSyncRequest) { this.trigger("syncinfoupdate"); this.pendingSegment_ = null; this.state = "READY"; return; } segmentInfo.byteLength = segmentInfo.bytes.byteLength; this.mediaSecondsLoaded += segment.duration; segmentInfo.cues.forEach(function(cue) { _this3.subtitlesTrack_.addCue(_this3.featuresNativeTextTracks_ ? new window_1.VTTCue(cue.startTime, cue.endTime, cue.text) : cue); }); removeDuplicateCuesFromTrack(this.subtitlesTrack_); this.handleAppendsDone_(); }; _proto.handleData_ = function handleData_3() { }; _proto.updateTimingInfoEnd_ = function updateTimingInfoEnd_() { }; _proto.parseVTTCues_ = function parseVTTCues_(segmentInfo) { var decoder; var decodeBytesToString = false; if (typeof window_1.WebVTT !== "function") { throw new NoVttJsError(); } if (typeof window_1.TextDecoder === "function") { decoder = new window_1.TextDecoder("utf8"); } else { decoder = window_1.WebVTT.StringDecoder(); decodeBytesToString = true; } var parser2 = new window_1.WebVTT.Parser(window_1, window_1.vttjs, decoder); segmentInfo.cues = []; segmentInfo.timestampmap = { MPEGTS: 0, LOCAL: 0 }; parser2.oncue = segmentInfo.cues.push.bind(segmentInfo.cues); parser2.ontimestampmap = function(map) { segmentInfo.timestampmap = map; }; parser2.onparsingerror = function(error) { videojs.log.warn("Error encountered when parsing cues: " + error.message); }; if (segmentInfo.segment.map) { var mapData = segmentInfo.segment.map.bytes; if (decodeBytesToString) { mapData = uint8ToUtf8(mapData); } parser2.parse(mapData); } var segmentData = segmentInfo.bytes; if (decodeBytesToString) { segmentData = uint8ToUtf8(segmentData); } parser2.parse(segmentData); parser2.flush(); }; _proto.updateTimeMapping_ = function updateTimeMapping_(segmentInfo, mappingObj, playlist) { var segment = segmentInfo.segment; if (!mappingObj) { return; } if (!segmentInfo.cues.length) { segment.empty = true; return; } var timestampmap = segmentInfo.timestampmap; var diff = timestampmap.MPEGTS / clock.ONE_SECOND_IN_TS - timestampmap.LOCAL + mappingObj.mapping; segmentInfo.cues.forEach(function(cue) { cue.startTime += diff; cue.endTime += diff; }); if (!playlist.syncInfo) { var firstStart = segmentInfo.cues[0].startTime; var lastStart = segmentInfo.cues[segmentInfo.cues.length - 1].startTime; playlist.syncInfo = { mediaSequence: playlist.mediaSequence + segmentInfo.mediaIndex, time: Math.min(firstStart, lastStart - segment.duration) }; } }; return VTTSegmentLoader2; }(SegmentLoader); var findAdCue = function findAdCue2(track, mediaTime) { var cues = track.cues; for (var i2 = 0; i2 < cues.length; i2++) { var cue = cues[i2]; if (mediaTime >= cue.adStartTime && mediaTime <= cue.adEndTime) { return cue; } } return null; }; var updateAdCues = function updateAdCues2(media, track, offset) { if (offset === void 0) { offset = 0; } if (!media.segments) { return; } var mediaTime = offset; var cue; for (var i2 = 0; i2 < media.segments.length; i2++) { var segment = media.segments[i2]; if (!cue) { cue = findAdCue(track, mediaTime + segment.duration / 2); } if (cue) { if ("cueIn" in segment) { cue.endTime = mediaTime; cue.adEndTime = mediaTime; mediaTime += segment.duration; cue = null; continue; } if (mediaTime < cue.endTime) { mediaTime += segment.duration; continue; } cue.endTime += segment.duration; } else { if ("cueOut" in segment) { cue = new window_1.VTTCue(mediaTime, mediaTime + segment.duration, segment.cueOut); cue.adStartTime = mediaTime; cue.adEndTime = mediaTime + parseFloat(segment.cueOut); track.addCue(cue); } if ("cueOutCont" in segment) { var _segment$cueOutCont$s = segment.cueOutCont.split("/").map(parseFloat), adOffset = _segment$cueOutCont$s[0], adTotal = _segment$cueOutCont$s[1]; cue = new window_1.VTTCue(mediaTime, mediaTime + segment.duration, ""); cue.adStartTime = mediaTime - adOffset; cue.adEndTime = cue.adStartTime + adTotal; track.addCue(cue); } } mediaTime += segment.duration; } }; var MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC = 86400; var syncPointStrategies = [ { name: "VOD", run: function run(syncController, playlist, duration5, currentTimeline, currentTime) { if (duration5 !== Infinity) { var syncPoint = { time: 0, segmentIndex: 0, partIndex: null }; return syncPoint; } return null; } }, { name: "ProgramDateTime", run: function run2(syncController, playlist, duration5, currentTimeline, currentTime) { if (!Object.keys(syncController.timelineToDatetimeMappings).length) { return null; } var syncPoint = null; var lastDistance = null; var partsAndSegments = getPartsAndSegments(playlist); currentTime = currentTime || 0; for (var i2 = 0; i2 < partsAndSegments.length; i2++) { var index2 = playlist.endList || currentTime === 0 ? i2 : partsAndSegments.length - (i2 + 1); var partAndSegment = partsAndSegments[index2]; var segment = partAndSegment.segment; var datetimeMapping = syncController.timelineToDatetimeMappings[segment.timeline]; if (!datetimeMapping || !segment.dateTimeObject) { continue; } var segmentTime = segment.dateTimeObject.getTime() / 1e3; var start2 = segmentTime + datetimeMapping; if (segment.parts && typeof partAndSegment.partIndex === "number") { for (var z = 0; z < partAndSegment.partIndex; z++) { start2 += segment.parts[z].duration; } } var distance2 = Math.abs(currentTime - start2); if (lastDistance !== null && (distance2 === 0 || lastDistance < distance2)) { break; } lastDistance = distance2; syncPoint = { time: start2, segmentIndex: partAndSegment.segmentIndex, partIndex: partAndSegment.partIndex }; } return syncPoint; } }, { name: "Segment", run: function run3(syncController, playlist, duration5, currentTimeline, currentTime) { var syncPoint = null; var lastDistance = null; currentTime = currentTime || 0; var partsAndSegments = getPartsAndSegments(playlist); for (var i2 = 0; i2 < partsAndSegments.length; i2++) { var index2 = playlist.endList || currentTime === 0 ? i2 : partsAndSegments.length - (i2 + 1); var partAndSegment = partsAndSegments[index2]; var segment = partAndSegment.segment; var start2 = partAndSegment.part && partAndSegment.part.start || segment && segment.start; if (segment.timeline === currentTimeline && typeof start2 !== "undefined") { var distance2 = Math.abs(currentTime - start2); if (lastDistance !== null && lastDistance < distance2) { break; } if (!syncPoint || lastDistance === null || lastDistance >= distance2) { lastDistance = distance2; syncPoint = { time: start2, segmentIndex: partAndSegment.segmentIndex, partIndex: partAndSegment.partIndex }; } } } return syncPoint; } }, { name: "Discontinuity", run: function run4(syncController, playlist, duration5, currentTimeline, currentTime) { var syncPoint = null; currentTime = currentTime || 0; if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) { var lastDistance = null; for (var i2 = 0; i2 < playlist.discontinuityStarts.length; i2++) { var segmentIndex = playlist.discontinuityStarts[i2]; var discontinuity = playlist.discontinuitySequence + i2 + 1; var discontinuitySync = syncController.discontinuities[discontinuity]; if (discontinuitySync) { var distance2 = Math.abs(currentTime - discontinuitySync.time); if (lastDistance !== null && lastDistance < distance2) { break; } if (!syncPoint || lastDistance === null || lastDistance >= distance2) { lastDistance = distance2; syncPoint = { time: discontinuitySync.time, segmentIndex, partIndex: null }; } } } } return syncPoint; } }, { name: "Playlist", run: function run5(syncController, playlist, duration5, currentTimeline, currentTime) { if (playlist.syncInfo) { var syncPoint = { time: playlist.syncInfo.time, segmentIndex: playlist.syncInfo.mediaSequence - playlist.mediaSequence, partIndex: null }; return syncPoint; } return null; } } ]; var SyncController = /* @__PURE__ */ function(_videojs$EventTarget) { _inheritsLoose(SyncController2, _videojs$EventTarget); function SyncController2(options2) { var _this; _this = _videojs$EventTarget.call(this) || this; _this.timelines = []; _this.discontinuities = []; _this.timelineToDatetimeMappings = {}; _this.logger_ = logger("SyncController"); return _this; } var _proto = SyncController2.prototype; _proto.getSyncPoint = function getSyncPoint(playlist, duration5, currentTimeline, currentTime) { var syncPoints = this.runStrategies_(playlist, duration5, currentTimeline, currentTime); if (!syncPoints.length) { return null; } return this.selectSyncPoint_(syncPoints, { key: "time", value: currentTime }); }; _proto.getExpiredTime = function getExpiredTime(playlist, duration5) { if (!playlist || !playlist.segments) { return null; } var syncPoints = this.runStrategies_(playlist, duration5, playlist.discontinuitySequence, 0); if (!syncPoints.length) { return null; } var syncPoint = this.selectSyncPoint_(syncPoints, { key: "segmentIndex", value: 0 }); if (syncPoint.segmentIndex > 0) { syncPoint.time *= -1; } return Math.abs(syncPoint.time + sumDurations({ defaultDuration: playlist.targetDuration, durationList: playlist.segments, startIndex: syncPoint.segmentIndex, endIndex: 0 })); }; _proto.runStrategies_ = function runStrategies_(playlist, duration5, currentTimeline, currentTime) { var syncPoints = []; for (var i2 = 0; i2 < syncPointStrategies.length; i2++) { var strategy = syncPointStrategies[i2]; var syncPoint = strategy.run(this, playlist, duration5, currentTimeline, currentTime); if (syncPoint) { syncPoint.strategy = strategy.name; syncPoints.push({ strategy: strategy.name, syncPoint }); } } return syncPoints; }; _proto.selectSyncPoint_ = function selectSyncPoint_(syncPoints, target) { var bestSyncPoint = syncPoints[0].syncPoint; var bestDistance = Math.abs(syncPoints[0].syncPoint[target.key] - target.value); var bestStrategy = syncPoints[0].strategy; for (var i2 = 1; i2 < syncPoints.length; i2++) { var newDistance = Math.abs(syncPoints[i2].syncPoint[target.key] - target.value); if (newDistance < bestDistance) { bestDistance = newDistance; bestSyncPoint = syncPoints[i2].syncPoint; bestStrategy = syncPoints[i2].strategy; } } this.logger_("syncPoint for [" + target.key + ": " + target.value + "] chosen with strategy" + (" [" + bestStrategy + "]: [time:" + bestSyncPoint.time + ",") + (" segmentIndex:" + bestSyncPoint.segmentIndex) + (typeof bestSyncPoint.partIndex === "number" ? ",partIndex:" + bestSyncPoint.partIndex : "") + "]"); return bestSyncPoint; }; _proto.saveExpiredSegmentInfo = function saveExpiredSegmentInfo(oldPlaylist, newPlaylist) { var mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence; if (mediaSequenceDiff > MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC) { videojs.log.warn("Not saving expired segment info. Media sequence gap " + mediaSequenceDiff + " is too large."); return; } for (var i2 = mediaSequenceDiff - 1; i2 >= 0; i2--) { var lastRemovedSegment = oldPlaylist.segments[i2]; if (lastRemovedSegment && typeof lastRemovedSegment.start !== "undefined") { newPlaylist.syncInfo = { mediaSequence: oldPlaylist.mediaSequence + i2, time: lastRemovedSegment.start }; this.logger_("playlist refresh sync: [time:" + newPlaylist.syncInfo.time + "," + (" mediaSequence: " + newPlaylist.syncInfo.mediaSequence + "]")); this.trigger("syncinfoupdate"); break; } } }; _proto.setDateTimeMappingForStart = function setDateTimeMappingForStart(playlist) { this.timelineToDatetimeMappings = {}; if (playlist.segments && playlist.segments.length && playlist.segments[0].dateTimeObject) { var firstSegment = playlist.segments[0]; var playlistTimestamp = firstSegment.dateTimeObject.getTime() / 1e3; this.timelineToDatetimeMappings[firstSegment.timeline] = -playlistTimestamp; } }; _proto.saveSegmentTimingInfo = function saveSegmentTimingInfo(_ref) { var segmentInfo = _ref.segmentInfo, shouldSaveTimelineMapping = _ref.shouldSaveTimelineMapping; var didCalculateSegmentTimeMapping = this.calculateSegmentTimeMapping_(segmentInfo, segmentInfo.timingInfo, shouldSaveTimelineMapping); var segment = segmentInfo.segment; if (didCalculateSegmentTimeMapping) { this.saveDiscontinuitySyncInfo_(segmentInfo); if (!segmentInfo.playlist.syncInfo) { segmentInfo.playlist.syncInfo = { mediaSequence: segmentInfo.playlist.mediaSequence + segmentInfo.mediaIndex, time: segment.start }; } } var dateTime = segment.dateTimeObject; if (segment.discontinuity && shouldSaveTimelineMapping && dateTime) { this.timelineToDatetimeMappings[segment.timeline] = -(dateTime.getTime() / 1e3); } }; _proto.timestampOffsetForTimeline = function timestampOffsetForTimeline(timeline) { if (typeof this.timelines[timeline] === "undefined") { return null; } return this.timelines[timeline].time; }; _proto.mappingForTimeline = function mappingForTimeline(timeline) { if (typeof this.timelines[timeline] === "undefined") { return null; } return this.timelines[timeline].mapping; }; _proto.calculateSegmentTimeMapping_ = function calculateSegmentTimeMapping_(segmentInfo, timingInfo, shouldSaveTimelineMapping) { var segment = segmentInfo.segment; var part = segmentInfo.part; var mappingObj = this.timelines[segmentInfo.timeline]; var start2; var end; if (typeof segmentInfo.timestampOffset === "number") { mappingObj = { time: segmentInfo.startOfSegment, mapping: segmentInfo.startOfSegment - timingInfo.start }; if (shouldSaveTimelineMapping) { this.timelines[segmentInfo.timeline] = mappingObj; this.trigger("timestampoffset"); this.logger_("time mapping for timeline " + segmentInfo.timeline + ": " + ("[time: " + mappingObj.time + "] [mapping: " + mappingObj.mapping + "]")); } start2 = segmentInfo.startOfSegment; end = timingInfo.end + mappingObj.mapping; } else if (mappingObj) { start2 = timingInfo.start + mappingObj.mapping; end = timingInfo.end + mappingObj.mapping; } else { return false; } if (part) { part.start = start2; part.end = end; } if (!segment.start || start2 < segment.start) { segment.start = start2; } segment.end = end; return true; }; _proto.saveDiscontinuitySyncInfo_ = function saveDiscontinuitySyncInfo_(segmentInfo) { var playlist = segmentInfo.playlist; var segment = segmentInfo.segment; if (segment.discontinuity) { this.discontinuities[segment.timeline] = { time: segment.start, accuracy: 0 }; } else if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) { for (var i2 = 0; i2 < playlist.discontinuityStarts.length; i2++) { var segmentIndex = playlist.discontinuityStarts[i2]; var discontinuity = playlist.discontinuitySequence + i2 + 1; var mediaIndexDiff = segmentIndex - segmentInfo.mediaIndex; var accuracy = Math.abs(mediaIndexDiff); if (!this.discontinuities[discontinuity] || this.discontinuities[discontinuity].accuracy > accuracy) { var time = void 0; if (mediaIndexDiff < 0) { time = segment.start - sumDurations({ defaultDuration: playlist.targetDuration, durationList: playlist.segments, startIndex: segmentInfo.mediaIndex, endIndex: segmentIndex }); } else { time = segment.end + sumDurations({ defaultDuration: playlist.targetDuration, durationList: playlist.segments, startIndex: segmentInfo.mediaIndex + 1, endIndex: segmentIndex }); } this.discontinuities[discontinuity] = { time, accuracy }; } } } }; _proto.dispose = function dispose() { this.trigger("dispose"); this.off(); }; return SyncController2; }(videojs.EventTarget); var TimelineChangeController = /* @__PURE__ */ function(_videojs$EventTarget) { _inheritsLoose(TimelineChangeController2, _videojs$EventTarget); function TimelineChangeController2() { var _this; _this = _videojs$EventTarget.call(this) || this; _this.pendingTimelineChanges_ = {}; _this.lastTimelineChanges_ = {}; return _this; } var _proto = TimelineChangeController2.prototype; _proto.clearPendingTimelineChange = function clearPendingTimelineChange(type2) { this.pendingTimelineChanges_[type2] = null; this.trigger("pendingtimelinechange"); }; _proto.pendingTimelineChange = function pendingTimelineChange(_ref) { var type2 = _ref.type, from3 = _ref.from, to = _ref.to; if (typeof from3 === "number" && typeof to === "number") { this.pendingTimelineChanges_[type2] = { type: type2, from: from3, to }; this.trigger("pendingtimelinechange"); } return this.pendingTimelineChanges_[type2]; }; _proto.lastTimelineChange = function lastTimelineChange(_ref2) { var type2 = _ref2.type, from3 = _ref2.from, to = _ref2.to; if (typeof from3 === "number" && typeof to === "number") { this.lastTimelineChanges_[type2] = { type: type2, from: from3, to }; delete this.pendingTimelineChanges_[type2]; this.trigger("timelinechange"); } return this.lastTimelineChanges_[type2]; }; _proto.dispose = function dispose() { this.trigger("dispose"); this.pendingTimelineChanges_ = {}; this.lastTimelineChanges_ = {}; this.off(); }; return TimelineChangeController2; }(videojs.EventTarget); var workerCode = transform(getWorkerString(function() { var commonjsGlobal2 = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function createCommonjsModule(fn2, basedir, module2) { return module2 = { path: basedir, exports: {}, require: function require2(path, base2) { return commonjsRequire(path, base2 === void 0 || base2 === null ? module2.path : base2); } }, fn2(module2, module2.exports), module2.exports; } function commonjsRequire() { throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs"); } var createClass = createCommonjsModule(function(module2) { function _defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } module2.exports = _createClass; module2.exports["default"] = module2.exports, module2.exports.__esModule = true; }); var setPrototypeOf = createCommonjsModule(function(module2) { function _setPrototypeOf2(o, p) { module2.exports = _setPrototypeOf2 = Object.setPrototypeOf || function _setPrototypeOf3(o2, p2) { o2.__proto__ = p2; return o2; }; module2.exports["default"] = module2.exports, module2.exports.__esModule = true; return _setPrototypeOf2(o, p); } module2.exports = _setPrototypeOf2; module2.exports["default"] = module2.exports, module2.exports.__esModule = true; }); var inheritsLoose = createCommonjsModule(function(module2) { function _inheritsLoose2(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; setPrototypeOf(subClass, superClass); } module2.exports = _inheritsLoose2; module2.exports["default"] = module2.exports, module2.exports.__esModule = true; }); var Stream2 = /* @__PURE__ */ function() { function Stream3() { this.listeners = {}; } var _proto = Stream3.prototype; _proto.on = function on3(type2, listener) { if (!this.listeners[type2]) { this.listeners[type2] = []; } this.listeners[type2].push(listener); }; _proto.off = function off2(type2, listener) { if (!this.listeners[type2]) { return false; } var index2 = this.listeners[type2].indexOf(listener); this.listeners[type2] = this.listeners[type2].slice(0); this.listeners[type2].splice(index2, 1); return index2 > -1; }; _proto.trigger = function trigger2(type2) { var callbacks = this.listeners[type2]; if (!callbacks) { return; } if (arguments.length === 2) { var length = callbacks.length; for (var i2 = 0; i2 < length; ++i2) { callbacks[i2].call(this, arguments[1]); } } else { var args = Array.prototype.slice.call(arguments, 1); var _length = callbacks.length; for (var _i = 0; _i < _length; ++_i) { callbacks[_i].apply(this, args); } } }; _proto.dispose = function dispose() { this.listeners = {}; }; _proto.pipe = function pipe(destination2) { this.on("data", function(data) { destination2.push(data); }); }; return Stream3; }(); /*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */ function unpad(padded) { return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]); } /*! @name aes-decrypter @version 3.1.3 @license Apache-2.0 */ var precompute = function precompute2() { var tables = [[[], [], [], [], []], [[], [], [], [], []]]; var encTable = tables[0]; var decTable = tables[1]; var sbox = encTable[4]; var sboxInv = decTable[4]; var i2; var x; var xInv; var d2 = []; var th = []; var x2; var x4; var x8; var s; var tEnc; var tDec; for (i2 = 0; i2 < 256; i2++) { th[(d2[i2] = i2 << 1 ^ (i2 >> 7) * 283) ^ i2] = i2; } for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) { s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4; s = s >> 8 ^ s & 255 ^ 99; sbox[x] = s; sboxInv[s] = x; x8 = d2[x4 = d2[x2 = d2[x]]]; tDec = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008; tEnc = d2[s] * 257 ^ s * 16843008; for (i2 = 0; i2 < 4; i2++) { encTable[i2][x] = tEnc = tEnc << 24 ^ tEnc >>> 8; decTable[i2][s] = tDec = tDec << 24 ^ tDec >>> 8; } } for (i2 = 0; i2 < 5; i2++) { encTable[i2] = encTable[i2].slice(0); decTable[i2] = decTable[i2].slice(0); } return tables; }; var aesTables = null; var AES = /* @__PURE__ */ function() { function AES2(key) { if (!aesTables) { aesTables = precompute(); } this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]]; var i2; var j; var tmp; var sbox = this._tables[0][4]; var decTable = this._tables[1]; var keyLen = key.length; var rcon = 1; if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) { throw new Error("Invalid aes key size"); } var encKey = key.slice(0); var decKey = []; this._key = [encKey, decKey]; for (i2 = keyLen; i2 < 4 * keyLen + 28; i2++) { tmp = encKey[i2 - 1]; if (i2 % keyLen === 0 || keyLen === 8 && i2 % keyLen === 4) { tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; if (i2 % keyLen === 0) { tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24; rcon = rcon << 1 ^ (rcon >> 7) * 283; } } encKey[i2] = encKey[i2 - keyLen] ^ tmp; } for (j = 0; i2; j++, i2--) { tmp = encKey[j & 3 ? i2 : i2 - 4]; if (i2 <= 4 || j < 4) { decKey[j] = tmp; } else { decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]]; } } } var _proto = AES2.prototype; _proto.decrypt = function decrypt4(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) { var key = this._key[1]; var a = encrypted0 ^ key[0]; var b = encrypted3 ^ key[1]; var c = encrypted2 ^ key[2]; var d2 = encrypted1 ^ key[3]; var a2; var b2; var c2; var nInnerRounds = key.length / 4 - 2; var i2; var kIndex = 4; var table = this._tables[1]; var table0 = table[0]; var table1 = table[1]; var table2 = table[2]; var table3 = table[3]; var sbox = table[4]; for (i2 = 0; i2 < nInnerRounds; i2++) { a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d2 & 255] ^ key[kIndex]; b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d2 >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1]; c2 = table0[c >>> 24] ^ table1[d2 >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2]; d2 = table0[d2 >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3]; kIndex += 4; a = a2; b = b2; c = c2; } for (i2 = 0; i2 < 4; i2++) { out[(3 & -i2) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d2 & 255] ^ key[kIndex++]; a2 = a; a = b; b = c; c = d2; d2 = a2; } }; return AES2; }(); var AsyncStream = /* @__PURE__ */ function(_Stream) { inheritsLoose(AsyncStream2, _Stream); function AsyncStream2() { var _this; _this = _Stream.call(this, Stream2) || this; _this.jobs = []; _this.delay = 1; _this.timeout_ = null; return _this; } var _proto = AsyncStream2.prototype; _proto.processJob_ = function processJob_() { this.jobs.shift()(); if (this.jobs.length) { this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay); } else { this.timeout_ = null; } }; _proto.push = function push(job) { this.jobs.push(job); if (!this.timeout_) { this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay); } }; return AsyncStream2; }(Stream2); var ntoh = function ntoh2(word) { return word << 24 | (word & 65280) << 8 | (word & 16711680) >> 8 | word >>> 24; }; var decrypt3 = function decrypt4(encrypted, key, initVector) { var encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2); var decipher = new AES(Array.prototype.slice.call(key)); var decrypted = new Uint8Array(encrypted.byteLength); var decrypted32 = new Int32Array(decrypted.buffer); var init0; var init1; var init2; var init3; var encrypted0; var encrypted1; var encrypted2; var encrypted3; var wordIx; init0 = initVector[0]; init1 = initVector[1]; init2 = initVector[2]; init3 = initVector[3]; for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) { encrypted0 = ntoh(encrypted32[wordIx]); encrypted1 = ntoh(encrypted32[wordIx + 1]); encrypted2 = ntoh(encrypted32[wordIx + 2]); encrypted3 = ntoh(encrypted32[wordIx + 3]); decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx); decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0); decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1); decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2); decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3); init0 = encrypted0; init1 = encrypted1; init2 = encrypted2; init3 = encrypted3; } return decrypted; }; var Decrypter2 = /* @__PURE__ */ function() { function Decrypter3(encrypted, key, initVector, done) { var step = Decrypter3.STEP; var encrypted32 = new Int32Array(encrypted.buffer); var decrypted = new Uint8Array(encrypted.byteLength); var i2 = 0; this.asyncStream_ = new AsyncStream(); this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i2, i2 + step), key, initVector, decrypted)); for (i2 = step; i2 < encrypted32.length; i2 += step) { initVector = new Uint32Array([ntoh(encrypted32[i2 - 4]), ntoh(encrypted32[i2 - 3]), ntoh(encrypted32[i2 - 2]), ntoh(encrypted32[i2 - 1])]); this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i2, i2 + step), key, initVector, decrypted)); } this.asyncStream_.push(function() { done(null, unpad(decrypted)); }); } var _proto = Decrypter3.prototype; _proto.decryptChunk_ = function decryptChunk_(encrypted, key, initVector, decrypted) { return function() { var bytes = decrypt3(encrypted, key, initVector); decrypted.set(bytes, encrypted.byteOffset); }; }; createClass(Decrypter3, null, [{ key: "STEP", get: function get7() { return 32e3; } }]); return Decrypter3; }(); var win2; if (typeof window !== "undefined") { win2 = window; } else if (typeof commonjsGlobal2 !== "undefined") { win2 = commonjsGlobal2; } else if (typeof self !== "undefined") { win2 = self; } else { win2 = {}; } var window_12 = win2; var isArrayBufferView4 = function isArrayBufferView5(obj) { if (ArrayBuffer.isView === "function") { return ArrayBuffer.isView(obj); } return obj && obj.buffer instanceof ArrayBuffer; }; var BigInt2 = window_12.BigInt || Number; [BigInt2("0x1"), BigInt2("0x100"), BigInt2("0x10000"), BigInt2("0x1000000"), BigInt2("0x100000000"), BigInt2("0x10000000000"), BigInt2("0x1000000000000"), BigInt2("0x100000000000000"), BigInt2("0x10000000000000000")]; var createTransferableMessage3 = function createTransferableMessage4(message) { var transferable = {}; Object.keys(message).forEach(function(key) { var value = message[key]; if (isArrayBufferView4(value)) { transferable[key] = { bytes: value.buffer, byteOffset: value.byteOffset, byteLength: value.byteLength }; } else { transferable[key] = value; } }); return transferable; }; self.onmessage = function(event2) { var data = event2.data; var encrypted = new Uint8Array(data.encrypted.bytes, data.encrypted.byteOffset, data.encrypted.byteLength); var key = new Uint32Array(data.key.bytes, data.key.byteOffset, data.key.byteLength / 4); var iv = new Uint32Array(data.iv.bytes, data.iv.byteOffset, data.iv.byteLength / 4); new Decrypter2(encrypted, key, iv, function(err, bytes) { self.postMessage(createTransferableMessage3({ source: data.source, decrypted: bytes }), [bytes.buffer]); }); }; })); var Decrypter = factory(workerCode); var audioTrackKind_ = function audioTrackKind_2(properties) { var kind = properties["default"] ? "main" : "alternative"; if (properties.characteristics && properties.characteristics.indexOf("public.accessibility.describes-video") >= 0) { kind = "main-desc"; } return kind; }; var stopLoaders = function stopLoaders2(segmentLoader, mediaType) { segmentLoader.abort(); segmentLoader.pause(); if (mediaType && mediaType.activePlaylistLoader) { mediaType.activePlaylistLoader.pause(); mediaType.activePlaylistLoader = null; } }; var startLoaders = function startLoaders2(playlistLoader, mediaType) { mediaType.activePlaylistLoader = playlistLoader; playlistLoader.load(); }; var onGroupChanged = function onGroupChanged2(type2, settings) { return function() { var _settings$segmentLoad = settings.segmentLoaders, segmentLoader = _settings$segmentLoad[type2], mainSegmentLoader = _settings$segmentLoad.main, mediaType = settings.mediaTypes[type2]; var activeTrack2 = mediaType.activeTrack(); var activeGroup3 = mediaType.getActiveGroup(); var previousActiveLoader = mediaType.activePlaylistLoader; var lastGroup = mediaType.lastGroup_; if (activeGroup3 && lastGroup && activeGroup3.id === lastGroup.id) { return; } mediaType.lastGroup_ = activeGroup3; mediaType.lastTrack_ = activeTrack2; stopLoaders(segmentLoader, mediaType); if (!activeGroup3 || activeGroup3.isMasterPlaylist) { return; } if (!activeGroup3.playlistLoader) { if (previousActiveLoader) { mainSegmentLoader.resetEverything(); } return; } segmentLoader.resyncLoader(); startLoaders(activeGroup3.playlistLoader, mediaType); }; }; var onGroupChanging = function onGroupChanging2(type2, settings) { return function() { var segmentLoader = settings.segmentLoaders[type2], mediaType = settings.mediaTypes[type2]; mediaType.lastGroup_ = null; segmentLoader.abort(); segmentLoader.pause(); }; }; var onTrackChanged = function onTrackChanged2(type2, settings) { return function() { var masterPlaylistLoader = settings.masterPlaylistLoader, _settings$segmentLoad2 = settings.segmentLoaders, segmentLoader = _settings$segmentLoad2[type2], mainSegmentLoader = _settings$segmentLoad2.main, mediaType = settings.mediaTypes[type2]; var activeTrack2 = mediaType.activeTrack(); var activeGroup3 = mediaType.getActiveGroup(); var previousActiveLoader = mediaType.activePlaylistLoader; var lastTrack = mediaType.lastTrack_; if (lastTrack && activeTrack2 && lastTrack.id === activeTrack2.id) { return; } mediaType.lastGroup_ = activeGroup3; mediaType.lastTrack_ = activeTrack2; stopLoaders(segmentLoader, mediaType); if (!activeGroup3) { return; } if (activeGroup3.isMasterPlaylist) { if (!activeTrack2 || !lastTrack || activeTrack2.id === lastTrack.id) { return; } var mpc = settings.vhs.masterPlaylistController_; var newPlaylist = mpc.selectPlaylist(); if (mpc.media() === newPlaylist) { return; } mediaType.logger_("track change. Switching master audio from " + lastTrack.id + " to " + activeTrack2.id); masterPlaylistLoader.pause(); mainSegmentLoader.resetEverything(); mpc.fastQualityChange_(newPlaylist); return; } if (type2 === "AUDIO") { if (!activeGroup3.playlistLoader) { mainSegmentLoader.setAudio(true); mainSegmentLoader.resetEverything(); return; } segmentLoader.setAudio(true); mainSegmentLoader.setAudio(false); } if (previousActiveLoader === activeGroup3.playlistLoader) { startLoaders(activeGroup3.playlistLoader, mediaType); return; } if (segmentLoader.track) { segmentLoader.track(activeTrack2); } segmentLoader.resetEverything(); startLoaders(activeGroup3.playlistLoader, mediaType); }; }; var onError = { AUDIO: function AUDIO(type2, settings) { return function() { var segmentLoader = settings.segmentLoaders[type2], mediaType = settings.mediaTypes[type2], blacklistCurrentPlaylist = settings.blacklistCurrentPlaylist; stopLoaders(segmentLoader, mediaType); var activeTrack2 = mediaType.activeTrack(); var activeGroup3 = mediaType.activeGroup(); var id = (activeGroup3.filter(function(group) { return group["default"]; })[0] || activeGroup3[0]).id; var defaultTrack = mediaType.tracks[id]; if (activeTrack2 === defaultTrack) { blacklistCurrentPlaylist({ message: "Problem encountered loading the default audio track." }); return; } videojs.log.warn("Problem encountered loading the alternate audio track.Switching back to default."); for (var trackId in mediaType.tracks) { mediaType.tracks[trackId].enabled = mediaType.tracks[trackId] === defaultTrack; } mediaType.onTrackChanged(); }; }, SUBTITLES: function SUBTITLES(type2, settings) { return function() { var segmentLoader = settings.segmentLoaders[type2], mediaType = settings.mediaTypes[type2]; videojs.log.warn("Problem encountered loading the subtitle track.Disabling subtitle track."); stopLoaders(segmentLoader, mediaType); var track = mediaType.activeTrack(); if (track) { track.mode = "disabled"; } mediaType.onTrackChanged(); }; } }; var setupListeners = { AUDIO: function AUDIO2(type2, playlistLoader, settings) { if (!playlistLoader) { return; } var tech = settings.tech, requestOptions = settings.requestOptions, segmentLoader = settings.segmentLoaders[type2]; playlistLoader.on("loadedmetadata", function() { var media = playlistLoader.media(); segmentLoader.playlist(media, requestOptions); if (!tech.paused() || media.endList && tech.preload() !== "none") { segmentLoader.load(); } }); playlistLoader.on("loadedplaylist", function() { segmentLoader.playlist(playlistLoader.media(), requestOptions); if (!tech.paused()) { segmentLoader.load(); } }); playlistLoader.on("error", onError[type2](type2, settings)); }, SUBTITLES: function SUBTITLES2(type2, playlistLoader, settings) { var tech = settings.tech, requestOptions = settings.requestOptions, segmentLoader = settings.segmentLoaders[type2], mediaType = settings.mediaTypes[type2]; playlistLoader.on("loadedmetadata", function() { var media = playlistLoader.media(); segmentLoader.playlist(media, requestOptions); segmentLoader.track(mediaType.activeTrack()); if (!tech.paused() || media.endList && tech.preload() !== "none") { segmentLoader.load(); } }); playlistLoader.on("loadedplaylist", function() { segmentLoader.playlist(playlistLoader.media(), requestOptions); if (!tech.paused()) { segmentLoader.load(); } }); playlistLoader.on("error", onError[type2](type2, settings)); } }; var initialize = { "AUDIO": function AUDIO3(type2, settings) { var vhs = settings.vhs, sourceType = settings.sourceType, segmentLoader = settings.segmentLoaders[type2], requestOptions = settings.requestOptions, mediaGroups = settings.master.mediaGroups, _settings$mediaTypes$ = settings.mediaTypes[type2], groups = _settings$mediaTypes$.groups, tracks = _settings$mediaTypes$.tracks, logger_ = _settings$mediaTypes$.logger_, masterPlaylistLoader = settings.masterPlaylistLoader; var audioOnlyMaster = isAudioOnly(masterPlaylistLoader.master); if (!mediaGroups[type2] || Object.keys(mediaGroups[type2]).length === 0) { mediaGroups[type2] = { main: { "default": { "default": true } } }; if (audioOnlyMaster) { mediaGroups[type2].main["default"].playlists = masterPlaylistLoader.master.playlists; } } for (var groupId in mediaGroups[type2]) { if (!groups[groupId]) { groups[groupId] = []; } for (var variantLabel in mediaGroups[type2][groupId]) { var properties = mediaGroups[type2][groupId][variantLabel]; var playlistLoader = void 0; if (audioOnlyMaster) { logger_("AUDIO group '" + groupId + "' label '" + variantLabel + "' is a master playlist"); properties.isMasterPlaylist = true; playlistLoader = null; } else if (sourceType === "vhs-json" && properties.playlists) { playlistLoader = new PlaylistLoader(properties.playlists[0], vhs, requestOptions); } else if (properties.resolvedUri) { playlistLoader = new PlaylistLoader(properties.resolvedUri, vhs, requestOptions); } else if (properties.playlists && sourceType === "dash") { playlistLoader = new DashPlaylistLoader(properties.playlists[0], vhs, requestOptions, masterPlaylistLoader); } else { playlistLoader = null; } properties = videojs.mergeOptions({ id: variantLabel, playlistLoader }, properties); setupListeners[type2](type2, properties.playlistLoader, settings); groups[groupId].push(properties); if (typeof tracks[variantLabel] === "undefined") { var track = new videojs.AudioTrack({ id: variantLabel, kind: audioTrackKind_(properties), enabled: false, language: properties.language, "default": properties["default"], label: variantLabel }); tracks[variantLabel] = track; } } } segmentLoader.on("error", onError[type2](type2, settings)); }, "SUBTITLES": function SUBTITLES3(type2, settings) { var tech = settings.tech, vhs = settings.vhs, sourceType = settings.sourceType, segmentLoader = settings.segmentLoaders[type2], requestOptions = settings.requestOptions, mediaGroups = settings.master.mediaGroups, _settings$mediaTypes$2 = settings.mediaTypes[type2], groups = _settings$mediaTypes$2.groups, tracks = _settings$mediaTypes$2.tracks, masterPlaylistLoader = settings.masterPlaylistLoader; for (var groupId in mediaGroups[type2]) { if (!groups[groupId]) { groups[groupId] = []; } for (var variantLabel in mediaGroups[type2][groupId]) { if (mediaGroups[type2][groupId][variantLabel].forced) { continue; } var properties = mediaGroups[type2][groupId][variantLabel]; var playlistLoader = void 0; if (sourceType === "hls") { playlistLoader = new PlaylistLoader(properties.resolvedUri, vhs, requestOptions); } else if (sourceType === "dash") { var playlists = properties.playlists.filter(function(p) { return p.excludeUntil !== Infinity; }); if (!playlists.length) { return; } playlistLoader = new DashPlaylistLoader(properties.playlists[0], vhs, requestOptions, masterPlaylistLoader); } else if (sourceType === "vhs-json") { playlistLoader = new PlaylistLoader( properties.playlists ? properties.playlists[0] : properties.resolvedUri, vhs, requestOptions ); } properties = videojs.mergeOptions({ id: variantLabel, playlistLoader }, properties); setupListeners[type2](type2, properties.playlistLoader, settings); groups[groupId].push(properties); if (typeof tracks[variantLabel] === "undefined") { var track = tech.addRemoteTextTrack({ id: variantLabel, kind: "subtitles", "default": properties["default"] && properties.autoselect, language: properties.language, label: variantLabel }, false).track; tracks[variantLabel] = track; } } } segmentLoader.on("error", onError[type2](type2, settings)); }, "CLOSED-CAPTIONS": function CLOSEDCAPTIONS(type2, settings) { var tech = settings.tech, mediaGroups = settings.master.mediaGroups, _settings$mediaTypes$3 = settings.mediaTypes[type2], groups = _settings$mediaTypes$3.groups, tracks = _settings$mediaTypes$3.tracks; for (var groupId in mediaGroups[type2]) { if (!groups[groupId]) { groups[groupId] = []; } for (var variantLabel in mediaGroups[type2][groupId]) { var properties = mediaGroups[type2][groupId][variantLabel]; if (!/^(?:CC|SERVICE)/.test(properties.instreamId)) { continue; } var captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {}; var newProps = { label: variantLabel, language: properties.language, instreamId: properties.instreamId, "default": properties["default"] && properties.autoselect }; if (captionServices[newProps.instreamId]) { newProps = videojs.mergeOptions(newProps, captionServices[newProps.instreamId]); } if (newProps["default"] === void 0) { delete newProps["default"]; } groups[groupId].push(videojs.mergeOptions({ id: variantLabel }, properties)); if (typeof tracks[variantLabel] === "undefined") { var track = tech.addRemoteTextTrack({ id: newProps.instreamId, kind: "captions", "default": newProps["default"], language: newProps.language, label: newProps.label }, false).track; tracks[variantLabel] = track; } } } } }; var groupMatch = function groupMatch2(list, media) { for (var i2 = 0; i2 < list.length; i2++) { if (playlistMatch(media, list[i2])) { return true; } if (list[i2].playlists && groupMatch2(list[i2].playlists, media)) { return true; } } return false; }; var activeGroup = function activeGroup2(type2, settings) { return function(track) { var masterPlaylistLoader = settings.masterPlaylistLoader, groups = settings.mediaTypes[type2].groups; var media = masterPlaylistLoader.media(); if (!media) { return null; } var variants = null; if (media.attributes[type2]) { variants = groups[media.attributes[type2]]; } var groupKeys = Object.keys(groups); if (!variants) { if (type2 === "AUDIO" && groupKeys.length > 1 && isAudioOnly(settings.master)) { for (var i2 = 0; i2 < groupKeys.length; i2++) { var groupPropertyList = groups[groupKeys[i2]]; if (groupMatch(groupPropertyList, media)) { variants = groupPropertyList; break; } } } else if (groups.main) { variants = groups.main; } else if (groupKeys.length === 1) { variants = groups[groupKeys[0]]; } } if (typeof track === "undefined") { return variants; } if (track === null || !variants) { return null; } return variants.filter(function(props) { return props.id === track.id; })[0] || null; }; }; var activeTrack = { AUDIO: function AUDIO4(type2, settings) { return function() { var tracks = settings.mediaTypes[type2].tracks; for (var id in tracks) { if (tracks[id].enabled) { return tracks[id]; } } return null; }; }, SUBTITLES: function SUBTITLES4(type2, settings) { return function() { var tracks = settings.mediaTypes[type2].tracks; for (var id in tracks) { if (tracks[id].mode === "showing" || tracks[id].mode === "hidden") { return tracks[id]; } } return null; }; } }; var getActiveGroup = function getActiveGroup2(type2, _ref) { var mediaTypes2 = _ref.mediaTypes; return function() { var activeTrack_ = mediaTypes2[type2].activeTrack(); if (!activeTrack_) { return null; } return mediaTypes2[type2].activeGroup(activeTrack_); }; }; var setupMediaGroups = function setupMediaGroups2(settings) { ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS"].forEach(function(type2) { initialize[type2](type2, settings); }); var mediaTypes2 = settings.mediaTypes, masterPlaylistLoader = settings.masterPlaylistLoader, tech = settings.tech, vhs = settings.vhs, _settings$segmentLoad3 = settings.segmentLoaders, audioSegmentLoader = _settings$segmentLoad3["AUDIO"], mainSegmentLoader = _settings$segmentLoad3.main; ["AUDIO", "SUBTITLES"].forEach(function(type2) { mediaTypes2[type2].activeGroup = activeGroup(type2, settings); mediaTypes2[type2].activeTrack = activeTrack[type2](type2, settings); mediaTypes2[type2].onGroupChanged = onGroupChanged(type2, settings); mediaTypes2[type2].onGroupChanging = onGroupChanging(type2, settings); mediaTypes2[type2].onTrackChanged = onTrackChanged(type2, settings); mediaTypes2[type2].getActiveGroup = getActiveGroup(type2, settings); }); var audioGroup = mediaTypes2.AUDIO.activeGroup(); if (audioGroup) { var groupId = (audioGroup.filter(function(group) { return group["default"]; })[0] || audioGroup[0]).id; mediaTypes2.AUDIO.tracks[groupId].enabled = true; mediaTypes2.AUDIO.onGroupChanged(); mediaTypes2.AUDIO.onTrackChanged(); var activeAudioGroup = mediaTypes2.AUDIO.getActiveGroup(); if (!activeAudioGroup.playlistLoader) { mainSegmentLoader.setAudio(true); } else { mainSegmentLoader.setAudio(false); audioSegmentLoader.setAudio(true); } } masterPlaylistLoader.on("mediachange", function() { ["AUDIO", "SUBTITLES"].forEach(function(type2) { return mediaTypes2[type2].onGroupChanged(); }); }); masterPlaylistLoader.on("mediachanging", function() { ["AUDIO", "SUBTITLES"].forEach(function(type2) { return mediaTypes2[type2].onGroupChanging(); }); }); var onAudioTrackChanged = function onAudioTrackChanged2() { mediaTypes2.AUDIO.onTrackChanged(); tech.trigger({ type: "usage", name: "vhs-audio-change" }); tech.trigger({ type: "usage", name: "hls-audio-change" }); }; tech.audioTracks().addEventListener("change", onAudioTrackChanged); tech.remoteTextTracks().addEventListener("change", mediaTypes2.SUBTITLES.onTrackChanged); vhs.on("dispose", function() { tech.audioTracks().removeEventListener("change", onAudioTrackChanged); tech.remoteTextTracks().removeEventListener("change", mediaTypes2.SUBTITLES.onTrackChanged); }); tech.clearTracks("audio"); for (var id in mediaTypes2.AUDIO.tracks) { tech.audioTracks().addTrack(mediaTypes2.AUDIO.tracks[id]); } }; var createMediaTypes = function createMediaTypes2() { var mediaTypes2 = {}; ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS"].forEach(function(type2) { mediaTypes2[type2] = { groups: {}, tracks: {}, activePlaylistLoader: null, activeGroup: noop, activeTrack: noop, getActiveGroup: noop, onGroupChanged: noop, onTrackChanged: noop, lastTrack_: null, logger_: logger("MediaGroups[" + type2 + "]") }; }); return mediaTypes2; }; var ABORT_EARLY_BLACKLIST_SECONDS = 60 * 2; var Vhs$1; var loaderStats = ["mediaRequests", "mediaRequestsAborted", "mediaRequestsTimedout", "mediaRequestsErrored", "mediaTransferDuration", "mediaBytesTransferred", "mediaAppends"]; var sumLoaderStat = function sumLoaderStat2(stat) { return this.audioSegmentLoader_[stat] + this.mainSegmentLoader_[stat]; }; var shouldSwitchToMedia = function shouldSwitchToMedia2(_ref) { var currentPlaylist = _ref.currentPlaylist, buffered = _ref.buffered, currentTime = _ref.currentTime, nextPlaylist = _ref.nextPlaylist, bufferLowWaterLine = _ref.bufferLowWaterLine, bufferHighWaterLine = _ref.bufferHighWaterLine, duration5 = _ref.duration, experimentalBufferBasedABR = _ref.experimentalBufferBasedABR, log2 = _ref.log; if (!nextPlaylist) { videojs.log.warn("We received no playlist to switch to. Please check your stream."); return false; } var sharedLogLine = "allowing switch " + (currentPlaylist && currentPlaylist.id || "null") + " -> " + nextPlaylist.id; if (!currentPlaylist) { log2(sharedLogLine + " as current playlist is not set"); return true; } if (nextPlaylist.id === currentPlaylist.id) { return false; } var isBuffered = Boolean(findRange(buffered, currentTime).length); if (!currentPlaylist.endList) { if (!isBuffered && typeof currentPlaylist.partTargetDuration === "number") { log2("not " + sharedLogLine + " as current playlist is live llhls, but currentTime isn't in buffered."); return false; } log2(sharedLogLine + " as current playlist is live"); return true; } var forwardBuffer = timeAheadOf(buffered, currentTime); var maxBufferLowWaterLine = experimentalBufferBasedABR ? Config.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE : Config.MAX_BUFFER_LOW_WATER_LINE; if (duration5 < maxBufferLowWaterLine) { log2(sharedLogLine + " as duration < max low water line (" + duration5 + " < " + maxBufferLowWaterLine + ")"); return true; } var nextBandwidth = nextPlaylist.attributes.BANDWIDTH; var currBandwidth = currentPlaylist.attributes.BANDWIDTH; if (nextBandwidth < currBandwidth && (!experimentalBufferBasedABR || forwardBuffer < bufferHighWaterLine)) { var logLine = sharedLogLine + " as next bandwidth < current bandwidth (" + nextBandwidth + " < " + currBandwidth + ")"; if (experimentalBufferBasedABR) { logLine += " and forwardBuffer < bufferHighWaterLine (" + forwardBuffer + " < " + bufferHighWaterLine + ")"; } log2(logLine); return true; } if ((!experimentalBufferBasedABR || nextBandwidth > currBandwidth) && forwardBuffer >= bufferLowWaterLine) { var _logLine = sharedLogLine + " as forwardBuffer >= bufferLowWaterLine (" + forwardBuffer + " >= " + bufferLowWaterLine + ")"; if (experimentalBufferBasedABR) { _logLine += " and next bandwidth > current bandwidth (" + nextBandwidth + " > " + currBandwidth + ")"; } log2(_logLine); return true; } log2("not " + sharedLogLine + " as no switching criteria met"); return false; }; var MasterPlaylistController = /* @__PURE__ */ function(_videojs$EventTarget) { _inheritsLoose(MasterPlaylistController2, _videojs$EventTarget); function MasterPlaylistController2(options2) { var _this; _this = _videojs$EventTarget.call(this) || this; var src = options2.src, handleManifestRedirects = options2.handleManifestRedirects, withCredentials = options2.withCredentials, tech = options2.tech, bandwidth2 = options2.bandwidth, externVhs = options2.externVhs, useCueTags = options2.useCueTags, blacklistDuration = options2.blacklistDuration, enableLowInitialPlaylist = options2.enableLowInitialPlaylist, sourceType = options2.sourceType, cacheEncryptionKeys = options2.cacheEncryptionKeys, experimentalBufferBasedABR = options2.experimentalBufferBasedABR, experimentalLeastPixelDiffSelector = options2.experimentalLeastPixelDiffSelector, captionServices = options2.captionServices; if (!src) { throw new Error("A non-empty playlist URL or JSON manifest string is required"); } var maxPlaylistRetries = options2.maxPlaylistRetries; if (maxPlaylistRetries === null || typeof maxPlaylistRetries === "undefined") { maxPlaylistRetries = Infinity; } Vhs$1 = externVhs; _this.experimentalBufferBasedABR = Boolean(experimentalBufferBasedABR); _this.experimentalLeastPixelDiffSelector = Boolean(experimentalLeastPixelDiffSelector); _this.withCredentials = withCredentials; _this.tech_ = tech; _this.vhs_ = tech.vhs; _this.sourceType_ = sourceType; _this.useCueTags_ = useCueTags; _this.blacklistDuration = blacklistDuration; _this.maxPlaylistRetries = maxPlaylistRetries; _this.enableLowInitialPlaylist = enableLowInitialPlaylist; if (_this.useCueTags_) { _this.cueTagsTrack_ = _this.tech_.addTextTrack("metadata", "ad-cues"); _this.cueTagsTrack_.inBandMetadataTrackDispatchType = ""; } _this.requestOptions_ = { withCredentials, handleManifestRedirects, maxPlaylistRetries, timeout: null }; _this.on("error", _this.pauseLoading); _this.mediaTypes_ = createMediaTypes(); _this.mediaSource = new window_1.MediaSource(); _this.handleDurationChange_ = _this.handleDurationChange_.bind(_assertThisInitialized(_this)); _this.handleSourceOpen_ = _this.handleSourceOpen_.bind(_assertThisInitialized(_this)); _this.handleSourceEnded_ = _this.handleSourceEnded_.bind(_assertThisInitialized(_this)); _this.mediaSource.addEventListener("durationchange", _this.handleDurationChange_); _this.mediaSource.addEventListener("sourceopen", _this.handleSourceOpen_); _this.mediaSource.addEventListener("sourceended", _this.handleSourceEnded_); _this.seekable_ = videojs.createTimeRanges(); _this.hasPlayed_ = false; _this.syncController_ = new SyncController(options2); _this.segmentMetadataTrack_ = tech.addRemoteTextTrack({ kind: "metadata", label: "segment-metadata" }, false).track; _this.decrypter_ = new Decrypter(); _this.sourceUpdater_ = new SourceUpdater(_this.mediaSource); _this.inbandTextTracks_ = {}; _this.timelineChangeController_ = new TimelineChangeController(); var segmentLoaderSettings = { vhs: _this.vhs_, parse708captions: options2.parse708captions, useDtsForTimestampOffset: options2.useDtsForTimestampOffset, captionServices, mediaSource: _this.mediaSource, currentTime: _this.tech_.currentTime.bind(_this.tech_), seekable: function seekable3() { return _this.seekable(); }, seeking: function seeking() { return _this.tech_.seeking(); }, duration: function duration5() { return _this.duration(); }, hasPlayed: function hasPlayed() { return _this.hasPlayed_; }, goalBufferLength: function goalBufferLength() { return _this.goalBufferLength(); }, bandwidth: bandwidth2, syncController: _this.syncController_, decrypter: _this.decrypter_, sourceType: _this.sourceType_, inbandTextTracks: _this.inbandTextTracks_, cacheEncryptionKeys, sourceUpdater: _this.sourceUpdater_, timelineChangeController: _this.timelineChangeController_, experimentalExactManifestTimings: options2.experimentalExactManifestTimings }; _this.masterPlaylistLoader_ = _this.sourceType_ === "dash" ? new DashPlaylistLoader(src, _this.vhs_, _this.requestOptions_) : new PlaylistLoader(src, _this.vhs_, _this.requestOptions_); _this.setupMasterPlaylistLoaderListeners_(); _this.mainSegmentLoader_ = new SegmentLoader(videojs.mergeOptions(segmentLoaderSettings, { segmentMetadataTrack: _this.segmentMetadataTrack_, loaderType: "main" }), options2); _this.audioSegmentLoader_ = new SegmentLoader(videojs.mergeOptions(segmentLoaderSettings, { loaderType: "audio" }), options2); _this.subtitleSegmentLoader_ = new VTTSegmentLoader(videojs.mergeOptions(segmentLoaderSettings, { loaderType: "vtt", featuresNativeTextTracks: _this.tech_.featuresNativeTextTracks, loadVttJs: function loadVttJs() { return new Promise(function(resolve2, reject2) { function onLoad() { tech.off("vttjserror", onError2); resolve2(); } function onError2() { tech.off("vttjsloaded", onLoad); reject2(); } tech.one("vttjsloaded", onLoad); tech.one("vttjserror", onError2); tech.addWebVttScript_(); }); } }), options2); _this.setupSegmentLoaderListeners_(); if (_this.experimentalBufferBasedABR) { _this.masterPlaylistLoader_.one("loadedplaylist", function() { return _this.startABRTimer_(); }); _this.tech_.on("pause", function() { return _this.stopABRTimer_(); }); _this.tech_.on("play", function() { return _this.startABRTimer_(); }); } loaderStats.forEach(function(stat) { _this[stat + "_"] = sumLoaderStat.bind(_assertThisInitialized(_this), stat); }); _this.logger_ = logger("MPC"); _this.triggeredFmp4Usage = false; if (_this.tech_.preload() === "none") { _this.loadOnPlay_ = function() { _this.loadOnPlay_ = null; _this.masterPlaylistLoader_.load(); }; _this.tech_.one("play", _this.loadOnPlay_); } else { _this.masterPlaylistLoader_.load(); } _this.timeToLoadedData__ = -1; _this.mainAppendsToLoadedData__ = -1; _this.audioAppendsToLoadedData__ = -1; var event2 = _this.tech_.preload() === "none" ? "play" : "loadstart"; _this.tech_.one(event2, function() { var timeToLoadedDataStart = Date.now(); _this.tech_.one("loadeddata", function() { _this.timeToLoadedData__ = Date.now() - timeToLoadedDataStart; _this.mainAppendsToLoadedData__ = _this.mainSegmentLoader_.mediaAppends; _this.audioAppendsToLoadedData__ = _this.audioSegmentLoader_.mediaAppends; }); }); return _this; } var _proto = MasterPlaylistController2.prototype; _proto.mainAppendsToLoadedData_ = function mainAppendsToLoadedData_() { return this.mainAppendsToLoadedData__; }; _proto.audioAppendsToLoadedData_ = function audioAppendsToLoadedData_() { return this.audioAppendsToLoadedData__; }; _proto.appendsToLoadedData_ = function appendsToLoadedData_() { var main = this.mainAppendsToLoadedData_(); var audio = this.audioAppendsToLoadedData_(); if (main === -1 || audio === -1) { return -1; } return main + audio; }; _proto.timeToLoadedData_ = function timeToLoadedData_() { return this.timeToLoadedData__; }; _proto.checkABR_ = function checkABR_(reason) { if (reason === void 0) { reason = "abr"; } var nextPlaylist = this.selectPlaylist(); if (nextPlaylist && this.shouldSwitchToMedia_(nextPlaylist)) { this.switchMedia_(nextPlaylist, reason); } }; _proto.switchMedia_ = function switchMedia_(playlist, cause, delay) { var oldMedia = this.media(); var oldId = oldMedia && (oldMedia.id || oldMedia.uri); var newId = playlist.id || playlist.uri; if (oldId && oldId !== newId) { this.logger_("switch media " + oldId + " -> " + newId + " from " + cause); this.tech_.trigger({ type: "usage", name: "vhs-rendition-change-" + cause }); } this.masterPlaylistLoader_.media(playlist, delay); }; _proto.startABRTimer_ = function startABRTimer_() { var _this2 = this; this.stopABRTimer_(); this.abrTimer_ = window_1.setInterval(function() { return _this2.checkABR_(); }, 250); }; _proto.stopABRTimer_ = function stopABRTimer_() { if (this.tech_.scrubbing && this.tech_.scrubbing()) { return; } window_1.clearInterval(this.abrTimer_); this.abrTimer_ = null; }; _proto.getAudioTrackPlaylists_ = function getAudioTrackPlaylists_() { var master = this.master(); var defaultPlaylists = master && master.playlists || []; if (!master || !master.mediaGroups || !master.mediaGroups.AUDIO) { return defaultPlaylists; } var AUDIO5 = master.mediaGroups.AUDIO; var groupKeys = Object.keys(AUDIO5); var track; if (Object.keys(this.mediaTypes_.AUDIO.groups).length) { track = this.mediaTypes_.AUDIO.activeTrack(); } else { var defaultGroup = AUDIO5.main || groupKeys.length && AUDIO5[groupKeys[0]]; for (var label2 in defaultGroup) { if (defaultGroup[label2]["default"]) { track = { label: label2 }; break; } } } if (!track) { return defaultPlaylists; } var playlists = []; for (var group in AUDIO5) { if (AUDIO5[group][track.label]) { var properties = AUDIO5[group][track.label]; if (properties.playlists && properties.playlists.length) { playlists.push.apply(playlists, properties.playlists); } else if (properties.uri) { playlists.push(properties); } else if (master.playlists.length) { for (var i2 = 0; i2 < master.playlists.length; i2++) { var playlist = master.playlists[i2]; if (playlist.attributes && playlist.attributes.AUDIO && playlist.attributes.AUDIO === group) { playlists.push(playlist); } } } } } if (!playlists.length) { return defaultPlaylists; } return playlists; }; _proto.setupMasterPlaylistLoaderListeners_ = function setupMasterPlaylistLoaderListeners_() { var _this3 = this; this.masterPlaylistLoader_.on("loadedmetadata", function() { var media = _this3.masterPlaylistLoader_.media(); var requestTimeout = media.targetDuration * 1.5 * 1e3; if (isLowestEnabledRendition(_this3.masterPlaylistLoader_.master, _this3.masterPlaylistLoader_.media())) { _this3.requestOptions_.timeout = 0; } else { _this3.requestOptions_.timeout = requestTimeout; } if (media.endList && _this3.tech_.preload() !== "none") { _this3.mainSegmentLoader_.playlist(media, _this3.requestOptions_); _this3.mainSegmentLoader_.load(); } setupMediaGroups({ sourceType: _this3.sourceType_, segmentLoaders: { AUDIO: _this3.audioSegmentLoader_, SUBTITLES: _this3.subtitleSegmentLoader_, main: _this3.mainSegmentLoader_ }, tech: _this3.tech_, requestOptions: _this3.requestOptions_, masterPlaylistLoader: _this3.masterPlaylistLoader_, vhs: _this3.vhs_, master: _this3.master(), mediaTypes: _this3.mediaTypes_, blacklistCurrentPlaylist: _this3.blacklistCurrentPlaylist.bind(_this3) }); _this3.triggerPresenceUsage_(_this3.master(), media); _this3.setupFirstPlay(); if (!_this3.mediaTypes_.AUDIO.activePlaylistLoader || _this3.mediaTypes_.AUDIO.activePlaylistLoader.media()) { _this3.trigger("selectedinitialmedia"); } else { _this3.mediaTypes_.AUDIO.activePlaylistLoader.one("loadedmetadata", function() { _this3.trigger("selectedinitialmedia"); }); } }); this.masterPlaylistLoader_.on("loadedplaylist", function() { if (_this3.loadOnPlay_) { _this3.tech_.off("play", _this3.loadOnPlay_); } var updatedPlaylist = _this3.masterPlaylistLoader_.media(); if (!updatedPlaylist) { _this3.excludeUnsupportedVariants_(); var selectedMedia; if (_this3.enableLowInitialPlaylist) { selectedMedia = _this3.selectInitialPlaylist(); } if (!selectedMedia) { selectedMedia = _this3.selectPlaylist(); } if (!selectedMedia || !_this3.shouldSwitchToMedia_(selectedMedia)) { return; } _this3.initialMedia_ = selectedMedia; _this3.switchMedia_(_this3.initialMedia_, "initial"); var haveJsonSource = _this3.sourceType_ === "vhs-json" && _this3.initialMedia_.segments; if (!haveJsonSource) { return; } updatedPlaylist = _this3.initialMedia_; } _this3.handleUpdatedMediaPlaylist(updatedPlaylist); }); this.masterPlaylistLoader_.on("error", function() { _this3.blacklistCurrentPlaylist(_this3.masterPlaylistLoader_.error); }); this.masterPlaylistLoader_.on("mediachanging", function() { _this3.mainSegmentLoader_.abort(); _this3.mainSegmentLoader_.pause(); }); this.masterPlaylistLoader_.on("mediachange", function() { var media = _this3.masterPlaylistLoader_.media(); var requestTimeout = media.targetDuration * 1.5 * 1e3; if (isLowestEnabledRendition(_this3.masterPlaylistLoader_.master, _this3.masterPlaylistLoader_.media())) { _this3.requestOptions_.timeout = 0; } else { _this3.requestOptions_.timeout = requestTimeout; } _this3.masterPlaylistLoader_.load(); _this3.mainSegmentLoader_.playlist(media, _this3.requestOptions_); _this3.mainSegmentLoader_.load(); _this3.tech_.trigger({ type: "mediachange", bubbles: true }); }); this.masterPlaylistLoader_.on("playlistunchanged", function() { var updatedPlaylist = _this3.masterPlaylistLoader_.media(); if (updatedPlaylist.lastExcludeReason_ === "playlist-unchanged") { return; } var playlistOutdated = _this3.stuckAtPlaylistEnd_(updatedPlaylist); if (playlistOutdated) { _this3.blacklistCurrentPlaylist({ message: "Playlist no longer updating.", reason: "playlist-unchanged" }); _this3.tech_.trigger("playliststuck"); } }); this.masterPlaylistLoader_.on("renditiondisabled", function() { _this3.tech_.trigger({ type: "usage", name: "vhs-rendition-disabled" }); _this3.tech_.trigger({ type: "usage", name: "hls-rendition-disabled" }); }); this.masterPlaylistLoader_.on("renditionenabled", function() { _this3.tech_.trigger({ type: "usage", name: "vhs-rendition-enabled" }); _this3.tech_.trigger({ type: "usage", name: "hls-rendition-enabled" }); }); }; _proto.handleUpdatedMediaPlaylist = function handleUpdatedMediaPlaylist(updatedPlaylist) { if (this.useCueTags_) { this.updateAdCues_(updatedPlaylist); } this.mainSegmentLoader_.playlist(updatedPlaylist, this.requestOptions_); this.updateDuration(!updatedPlaylist.endList); if (!this.tech_.paused()) { this.mainSegmentLoader_.load(); if (this.audioSegmentLoader_) { this.audioSegmentLoader_.load(); } } }; _proto.triggerPresenceUsage_ = function triggerPresenceUsage_(master, media) { var mediaGroups = master.mediaGroups || {}; var defaultDemuxed = true; var audioGroupKeys = Object.keys(mediaGroups.AUDIO); for (var mediaGroup in mediaGroups.AUDIO) { for (var label2 in mediaGroups.AUDIO[mediaGroup]) { var properties = mediaGroups.AUDIO[mediaGroup][label2]; if (!properties.uri) { defaultDemuxed = false; } } } if (defaultDemuxed) { this.tech_.trigger({ type: "usage", name: "vhs-demuxed" }); this.tech_.trigger({ type: "usage", name: "hls-demuxed" }); } if (Object.keys(mediaGroups.SUBTITLES).length) { this.tech_.trigger({ type: "usage", name: "vhs-webvtt" }); this.tech_.trigger({ type: "usage", name: "hls-webvtt" }); } if (Vhs$1.Playlist.isAes(media)) { this.tech_.trigger({ type: "usage", name: "vhs-aes" }); this.tech_.trigger({ type: "usage", name: "hls-aes" }); } if (audioGroupKeys.length && Object.keys(mediaGroups.AUDIO[audioGroupKeys[0]]).length > 1) { this.tech_.trigger({ type: "usage", name: "vhs-alternate-audio" }); this.tech_.trigger({ type: "usage", name: "hls-alternate-audio" }); } if (this.useCueTags_) { this.tech_.trigger({ type: "usage", name: "vhs-playlist-cue-tags" }); this.tech_.trigger({ type: "usage", name: "hls-playlist-cue-tags" }); } }; _proto.shouldSwitchToMedia_ = function shouldSwitchToMedia_(nextPlaylist) { var currentPlaylist = this.masterPlaylistLoader_.media() || this.masterPlaylistLoader_.pendingMedia_; var currentTime = this.tech_.currentTime(); var bufferLowWaterLine = this.bufferLowWaterLine(); var bufferHighWaterLine = this.bufferHighWaterLine(); var buffered = this.tech_.buffered(); return shouldSwitchToMedia({ buffered, currentTime, currentPlaylist, nextPlaylist, bufferLowWaterLine, bufferHighWaterLine, duration: this.duration(), experimentalBufferBasedABR: this.experimentalBufferBasedABR, log: this.logger_ }); }; _proto.setupSegmentLoaderListeners_ = function setupSegmentLoaderListeners_() { var _this4 = this; this.mainSegmentLoader_.on("bandwidthupdate", function() { _this4.checkABR_("bandwidthupdate"); _this4.tech_.trigger("bandwidthupdate"); }); this.mainSegmentLoader_.on("timeout", function() { if (_this4.experimentalBufferBasedABR) { _this4.mainSegmentLoader_.load(); } }); if (!this.experimentalBufferBasedABR) { this.mainSegmentLoader_.on("progress", function() { _this4.trigger("progress"); }); } this.mainSegmentLoader_.on("error", function() { _this4.blacklistCurrentPlaylist(_this4.mainSegmentLoader_.error()); }); this.mainSegmentLoader_.on("appenderror", function() { _this4.error = _this4.mainSegmentLoader_.error_; _this4.trigger("error"); }); this.mainSegmentLoader_.on("syncinfoupdate", function() { _this4.onSyncInfoUpdate_(); }); this.mainSegmentLoader_.on("timestampoffset", function() { _this4.tech_.trigger({ type: "usage", name: "vhs-timestamp-offset" }); _this4.tech_.trigger({ type: "usage", name: "hls-timestamp-offset" }); }); this.audioSegmentLoader_.on("syncinfoupdate", function() { _this4.onSyncInfoUpdate_(); }); this.audioSegmentLoader_.on("appenderror", function() { _this4.error = _this4.audioSegmentLoader_.error_; _this4.trigger("error"); }); this.mainSegmentLoader_.on("ended", function() { _this4.logger_("main segment loader ended"); _this4.onEndOfStream(); }); this.mainSegmentLoader_.on("earlyabort", function(event2) { if (_this4.experimentalBufferBasedABR) { return; } _this4.delegateLoaders_("all", ["abort"]); _this4.blacklistCurrentPlaylist({ message: "Aborted early because there isn't enough bandwidth to complete the request without rebuffering." }, ABORT_EARLY_BLACKLIST_SECONDS); }); var updateCodecs = function updateCodecs2() { if (!_this4.sourceUpdater_.hasCreatedSourceBuffers()) { return _this4.tryToCreateSourceBuffers_(); } var codecs = _this4.getCodecsOrExclude_(); if (!codecs) { return; } _this4.sourceUpdater_.addOrChangeSourceBuffers(codecs); }; this.mainSegmentLoader_.on("trackinfo", updateCodecs); this.audioSegmentLoader_.on("trackinfo", updateCodecs); this.mainSegmentLoader_.on("fmp4", function() { if (!_this4.triggeredFmp4Usage) { _this4.tech_.trigger({ type: "usage", name: "vhs-fmp4" }); _this4.tech_.trigger({ type: "usage", name: "hls-fmp4" }); _this4.triggeredFmp4Usage = true; } }); this.audioSegmentLoader_.on("fmp4", function() { if (!_this4.triggeredFmp4Usage) { _this4.tech_.trigger({ type: "usage", name: "vhs-fmp4" }); _this4.tech_.trigger({ type: "usage", name: "hls-fmp4" }); _this4.triggeredFmp4Usage = true; } }); this.audioSegmentLoader_.on("ended", function() { _this4.logger_("audioSegmentLoader ended"); _this4.onEndOfStream(); }); }; _proto.mediaSecondsLoaded_ = function mediaSecondsLoaded_() { return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded + this.mainSegmentLoader_.mediaSecondsLoaded); }; _proto.load = function load() { this.mainSegmentLoader_.load(); if (this.mediaTypes_.AUDIO.activePlaylistLoader) { this.audioSegmentLoader_.load(); } if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) { this.subtitleSegmentLoader_.load(); } }; _proto.smoothQualityChange_ = function smoothQualityChange_(media) { if (media === void 0) { media = this.selectPlaylist(); } this.fastQualityChange_(media); }; _proto.fastQualityChange_ = function fastQualityChange_(media) { var _this5 = this; if (media === void 0) { media = this.selectPlaylist(); } if (media === this.masterPlaylistLoader_.media()) { this.logger_("skipping fastQualityChange because new media is same as old"); return; } this.switchMedia_(media, "fast-quality"); this.mainSegmentLoader_.resetEverything(function() { if (videojs.browser.IE_VERSION || videojs.browser.IS_EDGE) { _this5.tech_.setCurrentTime(_this5.tech_.currentTime() + 0.04); } else { _this5.tech_.setCurrentTime(_this5.tech_.currentTime()); } }); }; _proto.play = function play() { if (this.setupFirstPlay()) { return; } if (this.tech_.ended()) { this.tech_.setCurrentTime(0); } if (this.hasPlayed_) { this.load(); } var seekable3 = this.tech_.seekable(); if (this.tech_.duration() === Infinity) { if (this.tech_.currentTime() < seekable3.start(0)) { return this.tech_.setCurrentTime(seekable3.end(seekable3.length - 1)); } } }; _proto.setupFirstPlay = function setupFirstPlay() { var _this6 = this; var media = this.masterPlaylistLoader_.media(); if (!media || this.tech_.paused() || this.hasPlayed_) { return false; } if (!media.endList) { var seekable3 = this.seekable(); if (!seekable3.length) { return false; } if (videojs.browser.IE_VERSION && this.tech_.readyState() === 0) { this.tech_.one("loadedmetadata", function() { _this6.trigger("firstplay"); _this6.tech_.setCurrentTime(seekable3.end(0)); _this6.hasPlayed_ = true; }); return false; } this.trigger("firstplay"); this.tech_.setCurrentTime(seekable3.end(0)); } this.hasPlayed_ = true; this.load(); return true; }; _proto.handleSourceOpen_ = function handleSourceOpen_() { this.tryToCreateSourceBuffers_(); if (this.tech_.autoplay()) { var playPromise = this.tech_.play(); if (typeof playPromise !== "undefined" && typeof playPromise.then === "function") { playPromise.then(null, function(e) { }); } } this.trigger("sourceopen"); }; _proto.handleSourceEnded_ = function handleSourceEnded_() { if (!this.inbandTextTracks_.metadataTrack_) { return; } var cues = this.inbandTextTracks_.metadataTrack_.cues; if (!cues || !cues.length) { return; } var duration5 = this.duration(); cues[cues.length - 1].endTime = isNaN(duration5) || Math.abs(duration5) === Infinity ? Number.MAX_VALUE : duration5; }; _proto.handleDurationChange_ = function handleDurationChange_() { this.tech_.trigger("durationchange"); }; _proto.onEndOfStream = function onEndOfStream() { var isEndOfStream = this.mainSegmentLoader_.ended_; if (this.mediaTypes_.AUDIO.activePlaylistLoader) { var mainMediaInfo = this.mainSegmentLoader_.getCurrentMediaInfo_(); if (!mainMediaInfo || mainMediaInfo.hasVideo) { isEndOfStream = isEndOfStream && this.audioSegmentLoader_.ended_; } else { isEndOfStream = this.audioSegmentLoader_.ended_; } } if (!isEndOfStream) { return; } this.stopABRTimer_(); this.sourceUpdater_.endOfStream(); }; _proto.stuckAtPlaylistEnd_ = function stuckAtPlaylistEnd_(playlist) { var seekable3 = this.seekable(); if (!seekable3.length) { return false; } var expired = this.syncController_.getExpiredTime(playlist, this.duration()); if (expired === null) { return false; } var absolutePlaylistEnd = Vhs$1.Playlist.playlistEnd(playlist, expired); var currentTime = this.tech_.currentTime(); var buffered = this.tech_.buffered(); if (!buffered.length) { return absolutePlaylistEnd - currentTime <= SAFE_TIME_DELTA; } var bufferedEnd = buffered.end(buffered.length - 1); return bufferedEnd - currentTime <= SAFE_TIME_DELTA && absolutePlaylistEnd - bufferedEnd <= SAFE_TIME_DELTA; }; _proto.blacklistCurrentPlaylist = function blacklistCurrentPlaylist(error, blacklistDuration) { if (error === void 0) { error = {}; } var currentPlaylist = error.playlist || this.masterPlaylistLoader_.media(); blacklistDuration = blacklistDuration || error.blacklistDuration || this.blacklistDuration; if (!currentPlaylist) { this.error = error; if (this.mediaSource.readyState !== "open") { this.trigger("error"); } else { this.sourceUpdater_.endOfStream("network"); } return; } currentPlaylist.playlistErrors_++; var playlists = this.masterPlaylistLoader_.master.playlists; var enabledPlaylists = playlists.filter(isEnabled); var isFinalRendition = enabledPlaylists.length === 1 && enabledPlaylists[0] === currentPlaylist; if (playlists.length === 1 && blacklistDuration !== Infinity) { videojs.log.warn("Problem encountered with playlist " + currentPlaylist.id + ". Trying again since it is the only playlist."); this.tech_.trigger("retryplaylist"); return this.masterPlaylistLoader_.load(isFinalRendition); } if (isFinalRendition) { var reincluded = false; playlists.forEach(function(playlist) { if (playlist === currentPlaylist) { return; } var excludeUntil2 = playlist.excludeUntil; if (typeof excludeUntil2 !== "undefined" && excludeUntil2 !== Infinity) { reincluded = true; delete playlist.excludeUntil; } }); if (reincluded) { videojs.log.warn("Removing other playlists from the exclusion list because the last rendition is about to be excluded."); this.tech_.trigger("retryplaylist"); } } var excludeUntil; if (currentPlaylist.playlistErrors_ > this.maxPlaylistRetries) { excludeUntil = Infinity; } else { excludeUntil = Date.now() + blacklistDuration * 1e3; } currentPlaylist.excludeUntil = excludeUntil; if (error.reason) { currentPlaylist.lastExcludeReason_ = error.reason; } this.tech_.trigger("blacklistplaylist"); this.tech_.trigger({ type: "usage", name: "vhs-rendition-blacklisted" }); this.tech_.trigger({ type: "usage", name: "hls-rendition-blacklisted" }); var nextPlaylist = this.selectPlaylist(); if (!nextPlaylist) { this.error = "Playback cannot continue. No available working or supported playlists."; this.trigger("error"); return; } var logFn2 = error.internal ? this.logger_ : videojs.log.warn; var errorMessage = error.message ? " " + error.message : ""; logFn2((error.internal ? "Internal problem" : "Problem") + " encountered with playlist " + currentPlaylist.id + "." + (errorMessage + " Switching to playlist " + nextPlaylist.id + ".")); if (nextPlaylist.attributes.AUDIO !== currentPlaylist.attributes.AUDIO) { this.delegateLoaders_("audio", ["abort", "pause"]); } if (nextPlaylist.attributes.SUBTITLES !== currentPlaylist.attributes.SUBTITLES) { this.delegateLoaders_("subtitle", ["abort", "pause"]); } this.delegateLoaders_("main", ["abort", "pause"]); var delayDuration = nextPlaylist.targetDuration / 2 * 1e3 || 5 * 1e3; var shouldDelay = typeof nextPlaylist.lastRequest === "number" && Date.now() - nextPlaylist.lastRequest <= delayDuration; return this.switchMedia_(nextPlaylist, "exclude", isFinalRendition || shouldDelay); }; _proto.pauseLoading = function pauseLoading() { this.delegateLoaders_("all", ["abort", "pause"]); this.stopABRTimer_(); }; _proto.delegateLoaders_ = function delegateLoaders_(filter, fnNames) { var _this7 = this; var loaders = []; var dontFilterPlaylist = filter === "all"; if (dontFilterPlaylist || filter === "main") { loaders.push(this.masterPlaylistLoader_); } var mediaTypes2 = []; if (dontFilterPlaylist || filter === "audio") { mediaTypes2.push("AUDIO"); } if (dontFilterPlaylist || filter === "subtitle") { mediaTypes2.push("CLOSED-CAPTIONS"); mediaTypes2.push("SUBTITLES"); } mediaTypes2.forEach(function(mediaType) { var loader = _this7.mediaTypes_[mediaType] && _this7.mediaTypes_[mediaType].activePlaylistLoader; if (loader) { loaders.push(loader); } }); ["main", "audio", "subtitle"].forEach(function(name) { var loader = _this7[name + "SegmentLoader_"]; if (loader && (filter === name || filter === "all")) { loaders.push(loader); } }); loaders.forEach(function(loader) { return fnNames.forEach(function(fnName) { if (typeof loader[fnName] === "function") { loader[fnName](); } }); }); }; _proto.setCurrentTime = function setCurrentTime(currentTime) { var buffered = findRange(this.tech_.buffered(), currentTime); if (!(this.masterPlaylistLoader_ && this.masterPlaylistLoader_.media())) { return 0; } if (!this.masterPlaylistLoader_.media().segments) { return 0; } if (buffered && buffered.length) { return currentTime; } this.mainSegmentLoader_.resetEverything(); this.mainSegmentLoader_.abort(); if (this.mediaTypes_.AUDIO.activePlaylistLoader) { this.audioSegmentLoader_.resetEverything(); this.audioSegmentLoader_.abort(); } if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) { this.subtitleSegmentLoader_.resetEverything(); this.subtitleSegmentLoader_.abort(); } this.load(); }; _proto.duration = function duration5() { if (!this.masterPlaylistLoader_) { return 0; } var media = this.masterPlaylistLoader_.media(); if (!media) { return 0; } if (!media.endList) { return Infinity; } if (this.mediaSource) { return this.mediaSource.duration; } return Vhs$1.Playlist.duration(media); }; _proto.seekable = function seekable3() { return this.seekable_; }; _proto.onSyncInfoUpdate_ = function onSyncInfoUpdate_() { var audioSeekable; if (!this.masterPlaylistLoader_) { return; } var media = this.masterPlaylistLoader_.media(); if (!media) { return; } var expired = this.syncController_.getExpiredTime(media, this.duration()); if (expired === null) { return; } var master = this.masterPlaylistLoader_.master; var mainSeekable = Vhs$1.Playlist.seekable(media, expired, Vhs$1.Playlist.liveEdgeDelay(master, media)); if (mainSeekable.length === 0) { return; } if (this.mediaTypes_.AUDIO.activePlaylistLoader) { media = this.mediaTypes_.AUDIO.activePlaylistLoader.media(); expired = this.syncController_.getExpiredTime(media, this.duration()); if (expired === null) { return; } audioSeekable = Vhs$1.Playlist.seekable(media, expired, Vhs$1.Playlist.liveEdgeDelay(master, media)); if (audioSeekable.length === 0) { return; } } var oldEnd; var oldStart; if (this.seekable_ && this.seekable_.length) { oldEnd = this.seekable_.end(0); oldStart = this.seekable_.start(0); } if (!audioSeekable) { this.seekable_ = mainSeekable; } else if (audioSeekable.start(0) > mainSeekable.end(0) || mainSeekable.start(0) > audioSeekable.end(0)) { this.seekable_ = mainSeekable; } else { this.seekable_ = videojs.createTimeRanges([[audioSeekable.start(0) > mainSeekable.start(0) ? audioSeekable.start(0) : mainSeekable.start(0), audioSeekable.end(0) < mainSeekable.end(0) ? audioSeekable.end(0) : mainSeekable.end(0)]]); } if (this.seekable_ && this.seekable_.length) { if (this.seekable_.end(0) === oldEnd && this.seekable_.start(0) === oldStart) { return; } } this.logger_("seekable updated [" + printableRange(this.seekable_) + "]"); this.tech_.trigger("seekablechanged"); }; _proto.updateDuration = function updateDuration(isLive) { if (this.updateDuration_) { this.mediaSource.removeEventListener("sourceopen", this.updateDuration_); this.updateDuration_ = null; } if (this.mediaSource.readyState !== "open") { this.updateDuration_ = this.updateDuration.bind(this, isLive); this.mediaSource.addEventListener("sourceopen", this.updateDuration_); return; } if (isLive) { var seekable3 = this.seekable(); if (!seekable3.length) { return; } if (isNaN(this.mediaSource.duration) || this.mediaSource.duration < seekable3.end(seekable3.length - 1)) { this.sourceUpdater_.setDuration(seekable3.end(seekable3.length - 1)); } return; } var buffered = this.tech_.buffered(); var duration5 = Vhs$1.Playlist.duration(this.masterPlaylistLoader_.media()); if (buffered.length > 0) { duration5 = Math.max(duration5, buffered.end(buffered.length - 1)); } if (this.mediaSource.duration !== duration5) { this.sourceUpdater_.setDuration(duration5); } }; _proto.dispose = function dispose() { var _this8 = this; this.trigger("dispose"); this.decrypter_.terminate(); this.masterPlaylistLoader_.dispose(); this.mainSegmentLoader_.dispose(); if (this.loadOnPlay_) { this.tech_.off("play", this.loadOnPlay_); } ["AUDIO", "SUBTITLES"].forEach(function(type2) { var groups = _this8.mediaTypes_[type2].groups; for (var id in groups) { groups[id].forEach(function(group) { if (group.playlistLoader) { group.playlistLoader.dispose(); } }); } }); this.audioSegmentLoader_.dispose(); this.subtitleSegmentLoader_.dispose(); this.sourceUpdater_.dispose(); this.timelineChangeController_.dispose(); this.stopABRTimer_(); if (this.updateDuration_) { this.mediaSource.removeEventListener("sourceopen", this.updateDuration_); } this.mediaSource.removeEventListener("durationchange", this.handleDurationChange_); this.mediaSource.removeEventListener("sourceopen", this.handleSourceOpen_); this.mediaSource.removeEventListener("sourceended", this.handleSourceEnded_); this.off(); }; _proto.master = function master() { return this.masterPlaylistLoader_.master; }; _proto.media = function media() { return this.masterPlaylistLoader_.media() || this.initialMedia_; }; _proto.areMediaTypesKnown_ = function areMediaTypesKnown_() { var usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader; var hasMainMediaInfo = !!this.mainSegmentLoader_.getCurrentMediaInfo_(); var hasAudioMediaInfo = !usingAudioLoader ? true : !!this.audioSegmentLoader_.getCurrentMediaInfo_(); if (!hasMainMediaInfo || !hasAudioMediaInfo) { return false; } return true; }; _proto.getCodecsOrExclude_ = function getCodecsOrExclude_() { var _this9 = this; var media = { main: this.mainSegmentLoader_.getCurrentMediaInfo_() || {}, audio: this.audioSegmentLoader_.getCurrentMediaInfo_() || {} }; var playlist = this.mainSegmentLoader_.getPendingSegmentPlaylist() || this.media(); media.video = media.main; var playlistCodecs = codecsForPlaylist(this.master(), playlist); var codecs = {}; var usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader; if (media.main.hasVideo) { codecs.video = playlistCodecs.video || media.main.videoCodec || DEFAULT_VIDEO_CODEC; } if (media.main.isMuxed) { codecs.video += "," + (playlistCodecs.audio || media.main.audioCodec || DEFAULT_AUDIO_CODEC); } if (media.main.hasAudio && !media.main.isMuxed || media.audio.hasAudio || usingAudioLoader) { codecs.audio = playlistCodecs.audio || media.main.audioCodec || media.audio.audioCodec || DEFAULT_AUDIO_CODEC; media.audio.isFmp4 = media.main.hasAudio && !media.main.isMuxed ? media.main.isFmp4 : media.audio.isFmp4; } if (!codecs.audio && !codecs.video) { this.blacklistCurrentPlaylist({ playlist, message: "Could not determine codecs for playlist.", blacklistDuration: Infinity }); return; } var supportFunction = function supportFunction2(isFmp4, codec) { return isFmp4 ? browserSupportsCodec2(codec) : muxerSupportsCodec2(codec); }; var unsupportedCodecs = {}; var unsupportedAudio; ["video", "audio"].forEach(function(type2) { if (codecs.hasOwnProperty(type2) && !supportFunction(media[type2].isFmp4, codecs[type2])) { var supporter = media[type2].isFmp4 ? "browser" : "muxer"; unsupportedCodecs[supporter] = unsupportedCodecs[supporter] || []; unsupportedCodecs[supporter].push(codecs[type2]); if (type2 === "audio") { unsupportedAudio = supporter; } } }); if (usingAudioLoader && unsupportedAudio && playlist.attributes.AUDIO) { var audioGroup = playlist.attributes.AUDIO; this.master().playlists.forEach(function(variant) { var variantAudioGroup = variant.attributes && variant.attributes.AUDIO; if (variantAudioGroup === audioGroup && variant !== playlist) { variant.excludeUntil = Infinity; } }); this.logger_("excluding audio group " + audioGroup + " as " + unsupportedAudio + ' does not support codec(s): "' + codecs.audio + '"'); } if (Object.keys(unsupportedCodecs).length) { var message = Object.keys(unsupportedCodecs).reduce(function(acc, supporter) { if (acc) { acc += ", "; } acc += supporter + ' does not support codec(s): "' + unsupportedCodecs[supporter].join(",") + '"'; return acc; }, "") + "."; this.blacklistCurrentPlaylist({ playlist, internal: true, message, blacklistDuration: Infinity }); return; } if (this.sourceUpdater_.hasCreatedSourceBuffers() && !this.sourceUpdater_.canChangeType()) { var switchMessages = []; ["video", "audio"].forEach(function(type2) { var newCodec = (parseCodecs2(_this9.sourceUpdater_.codecs[type2] || "")[0] || {}).type; var oldCodec = (parseCodecs2(codecs[type2] || "")[0] || {}).type; if (newCodec && oldCodec && newCodec.toLowerCase() !== oldCodec.toLowerCase()) { switchMessages.push('"' + _this9.sourceUpdater_.codecs[type2] + '" -> "' + codecs[type2] + '"'); } }); if (switchMessages.length) { this.blacklistCurrentPlaylist({ playlist, message: "Codec switching not supported: " + switchMessages.join(", ") + ".", blacklistDuration: Infinity, internal: true }); return; } } return codecs; }; _proto.tryToCreateSourceBuffers_ = function tryToCreateSourceBuffers_() { if (this.mediaSource.readyState !== "open" || this.sourceUpdater_.hasCreatedSourceBuffers()) { return; } if (!this.areMediaTypesKnown_()) { return; } var codecs = this.getCodecsOrExclude_(); if (!codecs) { return; } this.sourceUpdater_.createSourceBuffers(codecs); var codecString = [codecs.video, codecs.audio].filter(Boolean).join(","); this.excludeIncompatibleVariants_(codecString); }; _proto.excludeUnsupportedVariants_ = function excludeUnsupportedVariants_() { var _this10 = this; var playlists = this.master().playlists; var ids = []; Object.keys(playlists).forEach(function(key) { var variant = playlists[key]; if (ids.indexOf(variant.id) !== -1) { return; } ids.push(variant.id); var codecs = codecsForPlaylist(_this10.master, variant); var unsupported = []; if (codecs.audio && !muxerSupportsCodec2(codecs.audio) && !browserSupportsCodec2(codecs.audio)) { unsupported.push("audio codec " + codecs.audio); } if (codecs.video && !muxerSupportsCodec2(codecs.video) && !browserSupportsCodec2(codecs.video)) { unsupported.push("video codec " + codecs.video); } if (codecs.text && codecs.text === "stpp.ttml.im1t") { unsupported.push("text codec " + codecs.text); } if (unsupported.length) { variant.excludeUntil = Infinity; _this10.logger_("excluding " + variant.id + " for unsupported: " + unsupported.join(", ")); } }); }; _proto.excludeIncompatibleVariants_ = function excludeIncompatibleVariants_(codecString) { var _this11 = this; var ids = []; var playlists = this.master().playlists; var codecs = unwrapCodecList(parseCodecs2(codecString)); var codecCount_ = codecCount(codecs); var videoDetails = codecs.video && parseCodecs2(codecs.video)[0] || null; var audioDetails = codecs.audio && parseCodecs2(codecs.audio)[0] || null; Object.keys(playlists).forEach(function(key) { var variant = playlists[key]; if (ids.indexOf(variant.id) !== -1 || variant.excludeUntil === Infinity) { return; } ids.push(variant.id); var blacklistReasons = []; var variantCodecs = codecsForPlaylist(_this11.masterPlaylistLoader_.master, variant); var variantCodecCount = codecCount(variantCodecs); if (!variantCodecs.audio && !variantCodecs.video) { return; } if (variantCodecCount !== codecCount_) { blacklistReasons.push('codec count "' + variantCodecCount + '" !== "' + codecCount_ + '"'); } if (!_this11.sourceUpdater_.canChangeType()) { var variantVideoDetails = variantCodecs.video && parseCodecs2(variantCodecs.video)[0] || null; var variantAudioDetails = variantCodecs.audio && parseCodecs2(variantCodecs.audio)[0] || null; if (variantVideoDetails && videoDetails && variantVideoDetails.type.toLowerCase() !== videoDetails.type.toLowerCase()) { blacklistReasons.push('video codec "' + variantVideoDetails.type + '" !== "' + videoDetails.type + '"'); } if (variantAudioDetails && audioDetails && variantAudioDetails.type.toLowerCase() !== audioDetails.type.toLowerCase()) { blacklistReasons.push('audio codec "' + variantAudioDetails.type + '" !== "' + audioDetails.type + '"'); } } if (blacklistReasons.length) { variant.excludeUntil = Infinity; _this11.logger_("blacklisting " + variant.id + ": " + blacklistReasons.join(" && ")); } }); }; _proto.updateAdCues_ = function updateAdCues_(media) { var offset = 0; var seekable3 = this.seekable(); if (seekable3.length) { offset = seekable3.start(0); } updateAdCues(media, this.cueTagsTrack_, offset); }; _proto.goalBufferLength = function goalBufferLength() { var currentTime = this.tech_.currentTime(); var initial = Config.GOAL_BUFFER_LENGTH; var rate = Config.GOAL_BUFFER_LENGTH_RATE; var max2 = Math.max(initial, Config.MAX_GOAL_BUFFER_LENGTH); return Math.min(initial + currentTime * rate, max2); }; _proto.bufferLowWaterLine = function bufferLowWaterLine() { var currentTime = this.tech_.currentTime(); var initial = Config.BUFFER_LOW_WATER_LINE; var rate = Config.BUFFER_LOW_WATER_LINE_RATE; var max2 = Math.max(initial, Config.MAX_BUFFER_LOW_WATER_LINE); var newMax = Math.max(initial, Config.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE); return Math.min(initial + currentTime * rate, this.experimentalBufferBasedABR ? newMax : max2); }; _proto.bufferHighWaterLine = function bufferHighWaterLine() { return Config.BUFFER_HIGH_WATER_LINE; }; return MasterPlaylistController2; }(videojs.EventTarget); var enableFunction = function enableFunction2(loader, playlistID, changePlaylistFn) { return function(enable) { var playlist = loader.master.playlists[playlistID]; var incompatible = isIncompatible(playlist); var currentlyEnabled = isEnabled(playlist); if (typeof enable === "undefined") { return currentlyEnabled; } if (enable) { delete playlist.disabled; } else { playlist.disabled = true; } if (enable !== currentlyEnabled && !incompatible) { changePlaylistFn(); if (enable) { loader.trigger("renditionenabled"); } else { loader.trigger("renditiondisabled"); } } return enable; }; }; var Representation = function Representation2(vhsHandler, playlist, id) { var mpc = vhsHandler.masterPlaylistController_, smoothQualityChange = vhsHandler.options_.smoothQualityChange; var changeType2 = smoothQualityChange ? "smooth" : "fast"; var qualityChangeFunction = mpc[changeType2 + "QualityChange_"].bind(mpc); if (playlist.attributes) { var resolution = playlist.attributes.RESOLUTION; this.width = resolution && resolution.width; this.height = resolution && resolution.height; this.bandwidth = playlist.attributes.BANDWIDTH; this.frameRate = playlist.attributes["FRAME-RATE"]; } this.codecs = codecsForPlaylist(mpc.master(), playlist); this.playlist = playlist; this.id = id; this.enabled = enableFunction(vhsHandler.playlists, playlist.id, qualityChangeFunction); }; var renditionSelectionMixin = function renditionSelectionMixin2(vhsHandler) { vhsHandler.representations = function() { var master = vhsHandler.masterPlaylistController_.master(); var playlists = isAudioOnly(master) ? vhsHandler.masterPlaylistController_.getAudioTrackPlaylists_() : master.playlists; if (!playlists) { return []; } return playlists.filter(function(media) { return !isIncompatible(media); }).map(function(e, i2) { return new Representation(vhsHandler, e, e.id); }); }; }; var timerCancelEvents = ["seeking", "seeked", "pause", "playing", "error"]; var PlaybackWatcher = /* @__PURE__ */ function() { function PlaybackWatcher2(options2) { var _this = this; this.masterPlaylistController_ = options2.masterPlaylistController; this.tech_ = options2.tech; this.seekable = options2.seekable; this.allowSeeksWithinUnsafeLiveWindow = options2.allowSeeksWithinUnsafeLiveWindow; this.liveRangeSafeTimeDelta = options2.liveRangeSafeTimeDelta; this.media = options2.media; this.consecutiveUpdates = 0; this.lastRecordedTime = null; this.timer_ = null; this.checkCurrentTimeTimeout_ = null; this.logger_ = logger("PlaybackWatcher"); this.logger_("initialize"); var playHandler = function playHandler2() { return _this.monitorCurrentTime_(); }; var canPlayHandler = function canPlayHandler2() { return _this.monitorCurrentTime_(); }; var waitingHandler = function waitingHandler2() { return _this.techWaiting_(); }; var cancelTimerHandler = function cancelTimerHandler2() { return _this.cancelTimer_(); }; var mpc = this.masterPlaylistController_; var loaderTypes = ["main", "subtitle", "audio"]; var loaderChecks = {}; loaderTypes.forEach(function(type2) { loaderChecks[type2] = { reset: function reset3() { return _this.resetSegmentDownloads_(type2); }, updateend: function updateend() { return _this.checkSegmentDownloads_(type2); } }; mpc[type2 + "SegmentLoader_"].on("appendsdone", loaderChecks[type2].updateend); mpc[type2 + "SegmentLoader_"].on("playlistupdate", loaderChecks[type2].reset); _this.tech_.on(["seeked", "seeking"], loaderChecks[type2].reset); }); var setSeekingHandlers = function setSeekingHandlers2(fn2) { ["main", "audio"].forEach(function(type2) { mpc[type2 + "SegmentLoader_"][fn2]("appended", _this.seekingAppendCheck_); }); }; this.seekingAppendCheck_ = function() { if (_this.fixesBadSeeks_()) { _this.consecutiveUpdates = 0; _this.lastRecordedTime = _this.tech_.currentTime(); setSeekingHandlers("off"); } }; this.clearSeekingAppendCheck_ = function() { return setSeekingHandlers("off"); }; this.watchForBadSeeking_ = function() { _this.clearSeekingAppendCheck_(); setSeekingHandlers("on"); }; this.tech_.on("seeked", this.clearSeekingAppendCheck_); this.tech_.on("seeking", this.watchForBadSeeking_); this.tech_.on("waiting", waitingHandler); this.tech_.on(timerCancelEvents, cancelTimerHandler); this.tech_.on("canplay", canPlayHandler); this.tech_.one("play", playHandler); this.dispose = function() { _this.clearSeekingAppendCheck_(); _this.logger_("dispose"); _this.tech_.off("waiting", waitingHandler); _this.tech_.off(timerCancelEvents, cancelTimerHandler); _this.tech_.off("canplay", canPlayHandler); _this.tech_.off("play", playHandler); _this.tech_.off("seeking", _this.watchForBadSeeking_); _this.tech_.off("seeked", _this.clearSeekingAppendCheck_); loaderTypes.forEach(function(type2) { mpc[type2 + "SegmentLoader_"].off("appendsdone", loaderChecks[type2].updateend); mpc[type2 + "SegmentLoader_"].off("playlistupdate", loaderChecks[type2].reset); _this.tech_.off(["seeked", "seeking"], loaderChecks[type2].reset); }); if (_this.checkCurrentTimeTimeout_) { window_1.clearTimeout(_this.checkCurrentTimeTimeout_); } _this.cancelTimer_(); }; } var _proto = PlaybackWatcher2.prototype; _proto.monitorCurrentTime_ = function monitorCurrentTime_() { this.checkCurrentTime_(); if (this.checkCurrentTimeTimeout_) { window_1.clearTimeout(this.checkCurrentTimeTimeout_); } this.checkCurrentTimeTimeout_ = window_1.setTimeout(this.monitorCurrentTime_.bind(this), 250); }; _proto.resetSegmentDownloads_ = function resetSegmentDownloads_(type2) { var loader = this.masterPlaylistController_[type2 + "SegmentLoader_"]; if (this[type2 + "StalledDownloads_"] > 0) { this.logger_("resetting possible stalled download count for " + type2 + " loader"); } this[type2 + "StalledDownloads_"] = 0; this[type2 + "Buffered_"] = loader.buffered_(); }; _proto.checkSegmentDownloads_ = function checkSegmentDownloads_(type2) { var mpc = this.masterPlaylistController_; var loader = mpc[type2 + "SegmentLoader_"]; var buffered = loader.buffered_(); var isBufferedDifferent = isRangeDifferent(this[type2 + "Buffered_"], buffered); this[type2 + "Buffered_"] = buffered; if (isBufferedDifferent) { this.resetSegmentDownloads_(type2); return; } this[type2 + "StalledDownloads_"]++; this.logger_("found #" + this[type2 + "StalledDownloads_"] + " " + type2 + " appends that did not increase buffer (possible stalled download)", { playlistId: loader.playlist_ && loader.playlist_.id, buffered: timeRangesToArray(buffered) }); if (this[type2 + "StalledDownloads_"] < 10) { return; } this.logger_(type2 + " loader stalled download exclusion"); this.resetSegmentDownloads_(type2); this.tech_.trigger({ type: "usage", name: "vhs-" + type2 + "-download-exclusion" }); if (type2 === "subtitle") { return; } mpc.blacklistCurrentPlaylist({ message: "Excessive " + type2 + " segment downloading detected." }, Infinity); }; _proto.checkCurrentTime_ = function checkCurrentTime_() { if (this.tech_.paused() || this.tech_.seeking()) { return; } var currentTime = this.tech_.currentTime(); var buffered = this.tech_.buffered(); if (this.lastRecordedTime === currentTime && (!buffered.length || currentTime + SAFE_TIME_DELTA >= buffered.end(buffered.length - 1))) { return this.techWaiting_(); } if (this.consecutiveUpdates >= 5 && currentTime === this.lastRecordedTime) { this.consecutiveUpdates++; this.waiting_(); } else if (currentTime === this.lastRecordedTime) { this.consecutiveUpdates++; } else { this.consecutiveUpdates = 0; this.lastRecordedTime = currentTime; } }; _proto.cancelTimer_ = function cancelTimer_() { this.consecutiveUpdates = 0; if (this.timer_) { this.logger_("cancelTimer_"); clearTimeout(this.timer_); } this.timer_ = null; }; _proto.fixesBadSeeks_ = function fixesBadSeeks_() { var seeking = this.tech_.seeking(); if (!seeking) { return false; } var seekable3 = this.seekable(); var currentTime = this.tech_.currentTime(); var isAfterSeekableRange = this.afterSeekableWindow_(seekable3, currentTime, this.media(), this.allowSeeksWithinUnsafeLiveWindow); var seekTo; if (isAfterSeekableRange) { var seekableEnd = seekable3.end(seekable3.length - 1); seekTo = seekableEnd; } if (this.beforeSeekableWindow_(seekable3, currentTime)) { var seekableStart = seekable3.start(0); seekTo = seekableStart + (seekableStart === seekable3.end(0) ? 0 : SAFE_TIME_DELTA); } if (typeof seekTo !== "undefined") { this.logger_("Trying to seek outside of seekable at time " + currentTime + " with " + ("seekable range " + printableRange(seekable3) + ". Seeking to ") + (seekTo + ".")); this.tech_.setCurrentTime(seekTo); return true; } var sourceUpdater = this.masterPlaylistController_.sourceUpdater_; var buffered = this.tech_.buffered(); var audioBuffered = sourceUpdater.audioBuffer ? sourceUpdater.audioBuffered() : null; var videoBuffered = sourceUpdater.videoBuffer ? sourceUpdater.videoBuffered() : null; var media = this.media(); var minAppendedDuration = media.partTargetDuration ? media.partTargetDuration : (media.targetDuration - TIME_FUDGE_FACTOR) * 2; var bufferedToCheck = [audioBuffered, videoBuffered]; for (var i2 = 0; i2 < bufferedToCheck.length; i2++) { if (!bufferedToCheck[i2]) { continue; } var timeAhead = timeAheadOf(bufferedToCheck[i2], currentTime); if (timeAhead < minAppendedDuration) { return false; } } var nextRange = findNextRange(buffered, currentTime); if (nextRange.length === 0) { return false; } seekTo = nextRange.start(0) + SAFE_TIME_DELTA; this.logger_("Buffered region starts (" + nextRange.start(0) + ") " + (" just beyond seek point (" + currentTime + "). Seeking to " + seekTo + ".")); this.tech_.setCurrentTime(seekTo); return true; }; _proto.waiting_ = function waiting_() { if (this.techWaiting_()) { return; } var currentTime = this.tech_.currentTime(); var buffered = this.tech_.buffered(); var currentRange = findRange(buffered, currentTime); if (currentRange.length && currentTime + 3 <= currentRange.end(0)) { this.cancelTimer_(); this.tech_.setCurrentTime(currentTime); this.logger_("Stopped at " + currentTime + " while inside a buffered region " + ("[" + currentRange.start(0) + " -> " + currentRange.end(0) + "]. Attempting to resume ") + "playback by seeking to the current time."); this.tech_.trigger({ type: "usage", name: "vhs-unknown-waiting" }); this.tech_.trigger({ type: "usage", name: "hls-unknown-waiting" }); return; } }; _proto.techWaiting_ = function techWaiting_() { var seekable3 = this.seekable(); var currentTime = this.tech_.currentTime(); if (this.tech_.seeking() || this.timer_ !== null) { return true; } if (this.beforeSeekableWindow_(seekable3, currentTime)) { var livePoint = seekable3.end(seekable3.length - 1); this.logger_("Fell out of live window at time " + currentTime + ". Seeking to " + ("live point (seekable end) " + livePoint)); this.cancelTimer_(); this.tech_.setCurrentTime(livePoint); this.tech_.trigger({ type: "usage", name: "vhs-live-resync" }); this.tech_.trigger({ type: "usage", name: "hls-live-resync" }); return true; } var sourceUpdater = this.tech_.vhs.masterPlaylistController_.sourceUpdater_; var buffered = this.tech_.buffered(); var videoUnderflow = this.videoUnderflow_({ audioBuffered: sourceUpdater.audioBuffered(), videoBuffered: sourceUpdater.videoBuffered(), currentTime }); if (videoUnderflow) { this.cancelTimer_(); this.tech_.setCurrentTime(currentTime); this.tech_.trigger({ type: "usage", name: "vhs-video-underflow" }); this.tech_.trigger({ type: "usage", name: "hls-video-underflow" }); return true; } var nextRange = findNextRange(buffered, currentTime); if (nextRange.length > 0) { var difference = nextRange.start(0) - currentTime; this.logger_("Stopped at " + currentTime + ", setting timer for " + difference + ", seeking " + ("to " + nextRange.start(0))); this.cancelTimer_(); this.timer_ = setTimeout(this.skipTheGap_.bind(this), difference * 1e3, currentTime); return true; } return false; }; _proto.afterSeekableWindow_ = function afterSeekableWindow_(seekable3, currentTime, playlist, allowSeeksWithinUnsafeLiveWindow) { if (allowSeeksWithinUnsafeLiveWindow === void 0) { allowSeeksWithinUnsafeLiveWindow = false; } if (!seekable3.length) { return false; } var allowedEnd = seekable3.end(seekable3.length - 1) + SAFE_TIME_DELTA; var isLive = !playlist.endList; if (isLive && allowSeeksWithinUnsafeLiveWindow) { allowedEnd = seekable3.end(seekable3.length - 1) + playlist.targetDuration * 3; } if (currentTime > allowedEnd) { return true; } return false; }; _proto.beforeSeekableWindow_ = function beforeSeekableWindow_(seekable3, currentTime) { if (seekable3.length && seekable3.start(0) > 0 && currentTime < seekable3.start(0) - this.liveRangeSafeTimeDelta) { return true; } return false; }; _proto.videoUnderflow_ = function videoUnderflow_(_ref) { var videoBuffered = _ref.videoBuffered, audioBuffered = _ref.audioBuffered, currentTime = _ref.currentTime; if (!videoBuffered) { return; } var gap; if (videoBuffered.length && audioBuffered.length) { var lastVideoRange = findRange(videoBuffered, currentTime - 3); var videoRange = findRange(videoBuffered, currentTime); var audioRange = findRange(audioBuffered, currentTime); if (audioRange.length && !videoRange.length && lastVideoRange.length) { gap = { start: lastVideoRange.end(0), end: audioRange.end(0) }; } } else { var nextRange = findNextRange(videoBuffered, currentTime); if (!nextRange.length) { gap = this.gapFromVideoUnderflow_(videoBuffered, currentTime); } } if (gap) { this.logger_("Encountered a gap in video from " + gap.start + " to " + gap.end + ". " + ("Seeking to current time " + currentTime)); return true; } return false; }; _proto.skipTheGap_ = function skipTheGap_(scheduledCurrentTime) { var buffered = this.tech_.buffered(); var currentTime = this.tech_.currentTime(); var nextRange = findNextRange(buffered, currentTime); this.cancelTimer_(); if (nextRange.length === 0 || currentTime !== scheduledCurrentTime) { return; } this.logger_("skipTheGap_:", "currentTime:", currentTime, "scheduled currentTime:", scheduledCurrentTime, "nextRange start:", nextRange.start(0)); this.tech_.setCurrentTime(nextRange.start(0) + TIME_FUDGE_FACTOR); this.tech_.trigger({ type: "usage", name: "vhs-gap-skip" }); this.tech_.trigger({ type: "usage", name: "hls-gap-skip" }); }; _proto.gapFromVideoUnderflow_ = function gapFromVideoUnderflow_(buffered, currentTime) { var gaps = findGaps(buffered); for (var i2 = 0; i2 < gaps.length; i2++) { var start2 = gaps.start(i2); var end = gaps.end(i2); if (currentTime - start2 < 4 && currentTime - start2 > 2) { return { start: start2, end }; } } return null; }; return PlaybackWatcher2; }(); var defaultOptions = { errorInterval: 30, getSource: function getSource(next) { var tech = this.tech({ IWillNotUseThisInPlugins: true }); var sourceObj = tech.currentSource_ || this.currentSource(); return next(sourceObj); } }; var initPlugin = function initPlugin2(player, options2) { var lastCalled = 0; var seekTo = 0; var localOptions = videojs.mergeOptions(defaultOptions, options2); player.ready(function() { player.trigger({ type: "usage", name: "vhs-error-reload-initialized" }); player.trigger({ type: "usage", name: "hls-error-reload-initialized" }); }); var loadedMetadataHandler = function loadedMetadataHandler2() { if (seekTo) { player.currentTime(seekTo); } }; var setSource2 = function setSource3(sourceObj) { if (sourceObj === null || sourceObj === void 0) { return; } seekTo = player.duration() !== Infinity && player.currentTime() || 0; player.one("loadedmetadata", loadedMetadataHandler); player.src(sourceObj); player.trigger({ type: "usage", name: "vhs-error-reload" }); player.trigger({ type: "usage", name: "hls-error-reload" }); player.play(); }; var errorHandler = function errorHandler2() { if (Date.now() - lastCalled < localOptions.errorInterval * 1e3) { player.trigger({ type: "usage", name: "vhs-error-reload-canceled" }); player.trigger({ type: "usage", name: "hls-error-reload-canceled" }); return; } if (!localOptions.getSource || typeof localOptions.getSource !== "function") { videojs.log.error("ERROR: reloadSourceOnError - The option getSource must be a function!"); return; } lastCalled = Date.now(); return localOptions.getSource.call(player, setSource2); }; var cleanupEvents = function cleanupEvents2() { player.off("loadedmetadata", loadedMetadataHandler); player.off("error", errorHandler); player.off("dispose", cleanupEvents2); }; var reinitPlugin = function reinitPlugin2(newOptions) { cleanupEvents(); initPlugin2(player, newOptions); }; player.on("error", errorHandler); player.on("dispose", cleanupEvents); player.reloadSourceOnError = reinitPlugin; }; var reloadSourceOnError = function reloadSourceOnError2(options2) { initPlugin(this, options2); }; var version$4 = "2.16.2"; var version$3 = "6.0.1"; var version$2 = "0.22.1"; var version$1$1 = "4.8.0"; var version$6 = "3.1.3"; var Vhs = { PlaylistLoader, Playlist, utils, STANDARD_PLAYLIST_SELECTOR: lastBandwidthSelector, INITIAL_PLAYLIST_SELECTOR: lowestBitrateCompatibleVariantSelector, lastBandwidthSelector, movingAverageBandwidthSelector, comparePlaylistBandwidth, comparePlaylistResolution, xhr: xhrFactory() }; Object.keys(Config).forEach(function(prop) { Object.defineProperty(Vhs, prop, { get: function get7() { videojs.log.warn("using Vhs." + prop + " is UNSAFE be sure you know what you are doing"); return Config[prop]; }, set: function set4(value) { videojs.log.warn("using Vhs." + prop + " is UNSAFE be sure you know what you are doing"); if (typeof value !== "number" || value < 0) { videojs.log.warn("value of Vhs." + prop + " must be greater than or equal to 0"); return; } Config[prop] = value; } }); }); var LOCAL_STORAGE_KEY = "videojs-vhs"; var handleVhsMediaChange = function handleVhsMediaChange2(qualityLevels2, playlistLoader) { var newPlaylist = playlistLoader.media(); var selectedIndex = -1; for (var i2 = 0; i2 < qualityLevels2.length; i2++) { if (qualityLevels2[i2].id === newPlaylist.id) { selectedIndex = i2; break; } } qualityLevels2.selectedIndex_ = selectedIndex; qualityLevels2.trigger({ selectedIndex, type: "change" }); }; var handleVhsLoadedMetadata = function handleVhsLoadedMetadata2(qualityLevels2, vhs) { vhs.representations().forEach(function(rep2) { qualityLevels2.addQualityLevel(rep2); }); handleVhsMediaChange(qualityLevels2, vhs.playlists); }; Vhs.canPlaySource = function() { return videojs.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder."); }; var emeKeySystems = function emeKeySystems2(keySystemOptions, mainPlaylist, audioPlaylist) { if (!keySystemOptions) { return keySystemOptions; } var codecs = {}; if (mainPlaylist && mainPlaylist.attributes && mainPlaylist.attributes.CODECS) { codecs = unwrapCodecList(parseCodecs2(mainPlaylist.attributes.CODECS)); } if (audioPlaylist && audioPlaylist.attributes && audioPlaylist.attributes.CODECS) { codecs.audio = audioPlaylist.attributes.CODECS; } var videoContentType = getMimeForCodec2(codecs.video); var audioContentType = getMimeForCodec2(codecs.audio); var keySystemContentTypes = {}; for (var keySystem in keySystemOptions) { keySystemContentTypes[keySystem] = {}; if (audioContentType) { keySystemContentTypes[keySystem].audioContentType = audioContentType; } if (videoContentType) { keySystemContentTypes[keySystem].videoContentType = videoContentType; } if (mainPlaylist.contentProtection && mainPlaylist.contentProtection[keySystem] && mainPlaylist.contentProtection[keySystem].pssh) { keySystemContentTypes[keySystem].pssh = mainPlaylist.contentProtection[keySystem].pssh; } if (typeof keySystemOptions[keySystem] === "string") { keySystemContentTypes[keySystem].url = keySystemOptions[keySystem]; } } return videojs.mergeOptions(keySystemOptions, keySystemContentTypes); }; var getAllPsshKeySystemsOptions = function getAllPsshKeySystemsOptions2(playlists, keySystems) { return playlists.reduce(function(keySystemsArr, playlist) { if (!playlist.contentProtection) { return keySystemsArr; } var keySystemsOptions = keySystems.reduce(function(keySystemsObj, keySystem) { var keySystemOptions = playlist.contentProtection[keySystem]; if (keySystemOptions && keySystemOptions.pssh) { keySystemsObj[keySystem] = { pssh: keySystemOptions.pssh }; } return keySystemsObj; }, {}); if (Object.keys(keySystemsOptions).length) { keySystemsArr.push(keySystemsOptions); } return keySystemsArr; }, []); }; var waitForKeySessionCreation = function waitForKeySessionCreation2(_ref) { var player = _ref.player, sourceKeySystems = _ref.sourceKeySystems, audioMedia = _ref.audioMedia, mainPlaylists = _ref.mainPlaylists; if (!player.eme.initializeMediaKeys) { return Promise.resolve(); } var playlists = audioMedia ? mainPlaylists.concat([audioMedia]) : mainPlaylists; var keySystemsOptionsArr = getAllPsshKeySystemsOptions(playlists, Object.keys(sourceKeySystems)); var initializationFinishedPromises = []; var keySessionCreatedPromises = []; keySystemsOptionsArr.forEach(function(keySystemsOptions) { keySessionCreatedPromises.push(new Promise(function(resolve2, reject2) { player.tech_.one("keysessioncreated", resolve2); })); initializationFinishedPromises.push(new Promise(function(resolve2, reject2) { player.eme.initializeMediaKeys({ keySystems: keySystemsOptions }, function(err) { if (err) { reject2(err); return; } resolve2(); }); })); }); return Promise.race([ Promise.all(initializationFinishedPromises), Promise.race(keySessionCreatedPromises) ]); }; var setupEmeOptions = function setupEmeOptions2(_ref2) { var player = _ref2.player, sourceKeySystems = _ref2.sourceKeySystems, media = _ref2.media, audioMedia = _ref2.audioMedia; var sourceOptions = emeKeySystems(sourceKeySystems, media, audioMedia); if (!sourceOptions) { return false; } player.currentSource().keySystems = sourceOptions; if (sourceOptions && !player.eme) { videojs.log.warn("DRM encrypted source cannot be decrypted without a DRM plugin"); return false; } return true; }; var getVhsLocalStorage = function getVhsLocalStorage2() { if (!window_1.localStorage) { return null; } var storedObject = window_1.localStorage.getItem(LOCAL_STORAGE_KEY); if (!storedObject) { return null; } try { return JSON.parse(storedObject); } catch (e) { return null; } }; var updateVhsLocalStorage = function updateVhsLocalStorage2(options2) { if (!window_1.localStorage) { return false; } var objectToStore = getVhsLocalStorage(); objectToStore = objectToStore ? videojs.mergeOptions(objectToStore, options2) : options2; try { window_1.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(objectToStore)); } catch (e) { return false; } return objectToStore; }; var expandDataUri = function expandDataUri2(dataUri) { if (dataUri.toLowerCase().indexOf("data:application/vnd.videojs.vhs+json,") === 0) { return JSON.parse(dataUri.substring(dataUri.indexOf(",") + 1)); } return dataUri; }; Vhs.supportsNativeHls = function() { if (!document_1 || !document_1.createElement) { return false; } var video = document_1.createElement("video"); if (!videojs.getTech("Html5").isSupported()) { return false; } var canPlay = [ "application/vnd.apple.mpegurl", "audio/mpegurl", "audio/x-mpegurl", "application/x-mpegurl", "video/x-mpegurl", "video/mpegurl", "application/mpegurl" ]; return canPlay.some(function(canItPlay) { return /maybe|probably/i.test(video.canPlayType(canItPlay)); }); }(); Vhs.supportsNativeDash = function() { if (!document_1 || !document_1.createElement || !videojs.getTech("Html5").isSupported()) { return false; } return /maybe|probably/i.test(document_1.createElement("video").canPlayType("application/dash+xml")); }(); Vhs.supportsTypeNatively = function(type2) { if (type2 === "hls") { return Vhs.supportsNativeHls; } if (type2 === "dash") { return Vhs.supportsNativeDash; } return false; }; Vhs.isSupported = function() { return videojs.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder."); }; var Component = videojs.getComponent("Component"); var VhsHandler = /* @__PURE__ */ function(_Component) { _inheritsLoose(VhsHandler2, _Component); function VhsHandler2(source, tech, options2) { var _this; _this = _Component.call(this, tech, videojs.mergeOptions(options2.hls, options2.vhs)) || this; if (options2.hls && Object.keys(options2.hls).length) { videojs.log.warn("Using hls options is deprecated. Please rename `hls` to `vhs` in your options object."); } if (typeof options2.initialBandwidth === "number") { _this.options_.bandwidth = options2.initialBandwidth; } _this.logger_ = logger("VhsHandler"); if (tech.options_ && tech.options_.playerId) { var _player = videojs(tech.options_.playerId); if (!_player.hasOwnProperty("hls")) { Object.defineProperty(_player, "hls", { get: function get7() { videojs.log.warn("player.hls is deprecated. Use player.tech().vhs instead."); tech.trigger({ type: "usage", name: "hls-player-access" }); return _assertThisInitialized(_this); }, configurable: true }); } if (!_player.hasOwnProperty("vhs")) { Object.defineProperty(_player, "vhs", { get: function get7() { videojs.log.warn("player.vhs is deprecated. Use player.tech().vhs instead."); tech.trigger({ type: "usage", name: "vhs-player-access" }); return _assertThisInitialized(_this); }, configurable: true }); } if (!_player.hasOwnProperty("dash")) { Object.defineProperty(_player, "dash", { get: function get7() { videojs.log.warn("player.dash is deprecated. Use player.tech().vhs instead."); return _assertThisInitialized(_this); }, configurable: true }); } _this.player_ = _player; } _this.tech_ = tech; _this.source_ = source; _this.stats = {}; _this.ignoreNextSeekingEvent_ = false; _this.setOptions_(); if (_this.options_.overrideNative && tech.overrideNativeAudioTracks && tech.overrideNativeVideoTracks) { tech.overrideNativeAudioTracks(true); tech.overrideNativeVideoTracks(true); } else if (_this.options_.overrideNative && (tech.featuresNativeVideoTracks || tech.featuresNativeAudioTracks)) { throw new Error("Overriding native HLS requires emulated tracks. See https://git.io/vMpjB"); } _this.on(document_1, ["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange", "MSFullscreenChange"], function(event2) { var fullscreenElement = document_1.fullscreenElement || document_1.webkitFullscreenElement || document_1.mozFullScreenElement || document_1.msFullscreenElement; if (fullscreenElement && fullscreenElement.contains(_this.tech_.el())) { _this.masterPlaylistController_.fastQualityChange_(); } else { _this.masterPlaylistController_.checkABR_(); } }); _this.on(_this.tech_, "seeking", function() { if (this.ignoreNextSeekingEvent_) { this.ignoreNextSeekingEvent_ = false; return; } this.setCurrentTime(this.tech_.currentTime()); }); _this.on(_this.tech_, "error", function() { if (this.tech_.error() && this.masterPlaylistController_) { this.masterPlaylistController_.pauseLoading(); } }); _this.on(_this.tech_, "play", _this.play); return _this; } var _proto = VhsHandler2.prototype; _proto.setOptions_ = function setOptions_() { var _this2 = this; this.options_.withCredentials = this.options_.withCredentials || false; this.options_.handleManifestRedirects = this.options_.handleManifestRedirects === false ? false : true; this.options_.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions === false ? false : true; this.options_.useDevicePixelRatio = this.options_.useDevicePixelRatio || false; this.options_.smoothQualityChange = this.options_.smoothQualityChange || false; this.options_.useBandwidthFromLocalStorage = typeof this.source_.useBandwidthFromLocalStorage !== "undefined" ? this.source_.useBandwidthFromLocalStorage : this.options_.useBandwidthFromLocalStorage || false; this.options_.useNetworkInformationApi = this.options_.useNetworkInformationApi || false; this.options_.useDtsForTimestampOffset = this.options_.useDtsForTimestampOffset || false; this.options_.customTagParsers = this.options_.customTagParsers || []; this.options_.customTagMappers = this.options_.customTagMappers || []; this.options_.cacheEncryptionKeys = this.options_.cacheEncryptionKeys || false; if (typeof this.options_.blacklistDuration !== "number") { this.options_.blacklistDuration = 5 * 60; } if (typeof this.options_.bandwidth !== "number") { if (this.options_.useBandwidthFromLocalStorage) { var storedObject = getVhsLocalStorage(); if (storedObject && storedObject.bandwidth) { this.options_.bandwidth = storedObject.bandwidth; this.tech_.trigger({ type: "usage", name: "vhs-bandwidth-from-local-storage" }); this.tech_.trigger({ type: "usage", name: "hls-bandwidth-from-local-storage" }); } if (storedObject && storedObject.throughput) { this.options_.throughput = storedObject.throughput; this.tech_.trigger({ type: "usage", name: "vhs-throughput-from-local-storage" }); this.tech_.trigger({ type: "usage", name: "hls-throughput-from-local-storage" }); } } } if (typeof this.options_.bandwidth !== "number") { this.options_.bandwidth = Config.INITIAL_BANDWIDTH; } this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === Config.INITIAL_BANDWIDTH; ["withCredentials", "useDevicePixelRatio", "limitRenditionByPlayerDimensions", "bandwidth", "smoothQualityChange", "customTagParsers", "customTagMappers", "handleManifestRedirects", "cacheEncryptionKeys", "playlistSelector", "initialPlaylistSelector", "experimentalBufferBasedABR", "liveRangeSafeTimeDelta", "experimentalLLHLS", "useNetworkInformationApi", "useDtsForTimestampOffset", "experimentalExactManifestTimings", "experimentalLeastPixelDiffSelector"].forEach(function(option) { if (typeof _this2.source_[option] !== "undefined") { _this2.options_[option] = _this2.source_[option]; } }); this.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions; this.useDevicePixelRatio = this.options_.useDevicePixelRatio; }; _proto.src = function src(_src, type2) { var _this3 = this; if (!_src) { return; } this.setOptions_(); this.options_.src = expandDataUri(this.source_.src); this.options_.tech = this.tech_; this.options_.externVhs = Vhs; this.options_.sourceType = simpleTypeFromSourceType2(type2); this.options_.seekTo = function(time) { _this3.tech_.setCurrentTime(time); }; if (this.options_.smoothQualityChange) { videojs.log.warn("smoothQualityChange is deprecated and will be removed in the next major version"); } this.masterPlaylistController_ = new MasterPlaylistController(this.options_); var playbackWatcherOptions = videojs.mergeOptions({ liveRangeSafeTimeDelta: SAFE_TIME_DELTA }, this.options_, { seekable: function seekable3() { return _this3.seekable(); }, media: function media() { return _this3.masterPlaylistController_.media(); }, masterPlaylistController: this.masterPlaylistController_ }); this.playbackWatcher_ = new PlaybackWatcher(playbackWatcherOptions); this.masterPlaylistController_.on("error", function() { var player = videojs.players[_this3.tech_.options_.playerId]; var error = _this3.masterPlaylistController_.error; if (typeof error === "object" && !error.code) { error.code = 3; } else if (typeof error === "string") { error = { message: error, code: 3 }; } player.error(error); }); var defaultSelector = this.options_.experimentalBufferBasedABR ? Vhs.movingAverageBandwidthSelector(0.55) : Vhs.STANDARD_PLAYLIST_SELECTOR; this.masterPlaylistController_.selectPlaylist = this.selectPlaylist ? this.selectPlaylist.bind(this) : defaultSelector.bind(this); this.masterPlaylistController_.selectInitialPlaylist = Vhs.INITIAL_PLAYLIST_SELECTOR.bind(this); this.playlists = this.masterPlaylistController_.masterPlaylistLoader_; this.mediaSource = this.masterPlaylistController_.mediaSource; Object.defineProperties(this, { selectPlaylist: { get: function get7() { return this.masterPlaylistController_.selectPlaylist; }, set: function set4(selectPlaylist) { this.masterPlaylistController_.selectPlaylist = selectPlaylist.bind(this); } }, throughput: { get: function get7() { return this.masterPlaylistController_.mainSegmentLoader_.throughput.rate; }, set: function set4(throughput) { this.masterPlaylistController_.mainSegmentLoader_.throughput.rate = throughput; this.masterPlaylistController_.mainSegmentLoader_.throughput.count = 1; } }, bandwidth: { get: function get7() { var playerBandwidthEst = this.masterPlaylistController_.mainSegmentLoader_.bandwidth; var networkInformation = window_1.navigator.connection || window_1.navigator.mozConnection || window_1.navigator.webkitConnection; var tenMbpsAsBitsPerSecond = 1e7; if (this.options_.useNetworkInformationApi && networkInformation) { var networkInfoBandwidthEstBitsPerSec = networkInformation.downlink * 1e3 * 1e3; if (networkInfoBandwidthEstBitsPerSec >= tenMbpsAsBitsPerSecond && playerBandwidthEst >= tenMbpsAsBitsPerSecond) { playerBandwidthEst = Math.max(playerBandwidthEst, networkInfoBandwidthEstBitsPerSec); } else { playerBandwidthEst = networkInfoBandwidthEstBitsPerSec; } } return playerBandwidthEst; }, set: function set4(bandwidth2) { this.masterPlaylistController_.mainSegmentLoader_.bandwidth = bandwidth2; this.masterPlaylistController_.mainSegmentLoader_.throughput = { rate: 0, count: 0 }; } }, systemBandwidth: { get: function get7() { var invBandwidth = 1 / (this.bandwidth || 1); var invThroughput; if (this.throughput > 0) { invThroughput = 1 / this.throughput; } else { invThroughput = 0; } var systemBitrate = Math.floor(1 / (invBandwidth + invThroughput)); return systemBitrate; }, set: function set4() { videojs.log.error('The "systemBandwidth" property is read-only'); } } }); if (this.options_.bandwidth) { this.bandwidth = this.options_.bandwidth; } if (this.options_.throughput) { this.throughput = this.options_.throughput; } Object.defineProperties(this.stats, { bandwidth: { get: function get7() { return _this3.bandwidth || 0; }, enumerable: true }, mediaRequests: { get: function get7() { return _this3.masterPlaylistController_.mediaRequests_() || 0; }, enumerable: true }, mediaRequestsAborted: { get: function get7() { return _this3.masterPlaylistController_.mediaRequestsAborted_() || 0; }, enumerable: true }, mediaRequestsTimedout: { get: function get7() { return _this3.masterPlaylistController_.mediaRequestsTimedout_() || 0; }, enumerable: true }, mediaRequestsErrored: { get: function get7() { return _this3.masterPlaylistController_.mediaRequestsErrored_() || 0; }, enumerable: true }, mediaTransferDuration: { get: function get7() { return _this3.masterPlaylistController_.mediaTransferDuration_() || 0; }, enumerable: true }, mediaBytesTransferred: { get: function get7() { return _this3.masterPlaylistController_.mediaBytesTransferred_() || 0; }, enumerable: true }, mediaSecondsLoaded: { get: function get7() { return _this3.masterPlaylistController_.mediaSecondsLoaded_() || 0; }, enumerable: true }, mediaAppends: { get: function get7() { return _this3.masterPlaylistController_.mediaAppends_() || 0; }, enumerable: true }, mainAppendsToLoadedData: { get: function get7() { return _this3.masterPlaylistController_.mainAppendsToLoadedData_() || 0; }, enumerable: true }, audioAppendsToLoadedData: { get: function get7() { return _this3.masterPlaylistController_.audioAppendsToLoadedData_() || 0; }, enumerable: true }, appendsToLoadedData: { get: function get7() { return _this3.masterPlaylistController_.appendsToLoadedData_() || 0; }, enumerable: true }, timeToLoadedData: { get: function get7() { return _this3.masterPlaylistController_.timeToLoadedData_() || 0; }, enumerable: true }, buffered: { get: function get7() { return timeRangesToArray(_this3.tech_.buffered()); }, enumerable: true }, currentTime: { get: function get7() { return _this3.tech_.currentTime(); }, enumerable: true }, currentSource: { get: function get7() { return _this3.tech_.currentSource_; }, enumerable: true }, currentTech: { get: function get7() { return _this3.tech_.name_; }, enumerable: true }, duration: { get: function get7() { return _this3.tech_.duration(); }, enumerable: true }, master: { get: function get7() { return _this3.playlists.master; }, enumerable: true }, playerDimensions: { get: function get7() { return _this3.tech_.currentDimensions(); }, enumerable: true }, seekable: { get: function get7() { return timeRangesToArray(_this3.tech_.seekable()); }, enumerable: true }, timestamp: { get: function get7() { return Date.now(); }, enumerable: true }, videoPlaybackQuality: { get: function get7() { return _this3.tech_.getVideoPlaybackQuality(); }, enumerable: true } }); this.tech_.one("canplay", this.masterPlaylistController_.setupFirstPlay.bind(this.masterPlaylistController_)); this.tech_.on("bandwidthupdate", function() { if (_this3.options_.useBandwidthFromLocalStorage) { updateVhsLocalStorage({ bandwidth: _this3.bandwidth, throughput: Math.round(_this3.throughput) }); } }); this.masterPlaylistController_.on("selectedinitialmedia", function() { renditionSelectionMixin(_this3); }); this.masterPlaylistController_.sourceUpdater_.on("createdsourcebuffers", function() { _this3.setupEme_(); }); this.on(this.masterPlaylistController_, "progress", function() { this.tech_.trigger("progress"); }); this.on(this.masterPlaylistController_, "firstplay", function() { this.ignoreNextSeekingEvent_ = true; }); this.setupQualityLevels_(); if (!this.tech_.el()) { return; } this.mediaSourceUrl_ = window_1.URL.createObjectURL(this.masterPlaylistController_.mediaSource); this.tech_.src(this.mediaSourceUrl_); }; _proto.createKeySessions_ = function createKeySessions_() { var _this4 = this; var audioPlaylistLoader = this.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader; this.logger_("waiting for EME key session creation"); waitForKeySessionCreation({ player: this.player_, sourceKeySystems: this.source_.keySystems, audioMedia: audioPlaylistLoader && audioPlaylistLoader.media(), mainPlaylists: this.playlists.master.playlists }).then(function() { _this4.logger_("created EME key session"); _this4.masterPlaylistController_.sourceUpdater_.initializedEme(); })["catch"](function(err) { _this4.logger_("error while creating EME key session", err); _this4.player_.error({ message: "Failed to initialize media keys for EME", code: 3 }); }); }; _proto.handleWaitingForKey_ = function handleWaitingForKey_() { this.logger_("waitingforkey fired, attempting to create any new key sessions"); this.createKeySessions_(); }; _proto.setupEme_ = function setupEme_() { var _this5 = this; var audioPlaylistLoader = this.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader; var didSetupEmeOptions = setupEmeOptions({ player: this.player_, sourceKeySystems: this.source_.keySystems, media: this.playlists.media(), audioMedia: audioPlaylistLoader && audioPlaylistLoader.media() }); this.player_.tech_.on("keystatuschange", function(e) { if (e.status !== "output-restricted") { return; } var masterPlaylist = _this5.masterPlaylistController_.master(); if (!masterPlaylist || !masterPlaylist.playlists) { return; } var excludedHDPlaylists = []; masterPlaylist.playlists.forEach(function(playlist) { if (playlist && playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height >= 720) { if (!playlist.excludeUntil || playlist.excludeUntil < Infinity) { playlist.excludeUntil = Infinity; excludedHDPlaylists.push(playlist); } } }); if (excludedHDPlaylists.length) { var _videojs$log; (_videojs$log = videojs.log).warn.apply(_videojs$log, ['DRM keystatus changed to "output-restricted." Removing the following HD playlists that will most likely fail to play and clearing the buffer. This may be due to HDCP restrictions on the stream and the capabilities of the current device.'].concat(excludedHDPlaylists)); _this5.masterPlaylistController_.fastQualityChange_(); } }); this.handleWaitingForKey_ = this.handleWaitingForKey_.bind(this); this.player_.tech_.on("waitingforkey", this.handleWaitingForKey_); if (videojs.browser.IE_VERSION === 11 || !didSetupEmeOptions) { this.masterPlaylistController_.sourceUpdater_.initializedEme(); return; } this.createKeySessions_(); }; _proto.setupQualityLevels_ = function setupQualityLevels_() { var _this6 = this; var player = videojs.players[this.tech_.options_.playerId]; if (!player || !player.qualityLevels || this.qualityLevels_) { return; } this.qualityLevels_ = player.qualityLevels(); this.masterPlaylistController_.on("selectedinitialmedia", function() { handleVhsLoadedMetadata(_this6.qualityLevels_, _this6); }); this.playlists.on("mediachange", function() { handleVhsMediaChange(_this6.qualityLevels_, _this6.playlists); }); }; VhsHandler2.version = function version$52() { return { "@videojs/http-streaming": version$4, "mux.js": version$3, "mpd-parser": version$2, "m3u8-parser": version$1$1, "aes-decrypter": version$6 }; }; _proto.version = function version2() { return this.constructor.version(); }; _proto.canChangeType = function canChangeType() { return SourceUpdater.canChangeType(); }; _proto.play = function play() { this.masterPlaylistController_.play(); }; _proto.setCurrentTime = function setCurrentTime(currentTime) { this.masterPlaylistController_.setCurrentTime(currentTime); }; _proto.duration = function duration5() { return this.masterPlaylistController_.duration(); }; _proto.seekable = function seekable3() { return this.masterPlaylistController_.seekable(); }; _proto.dispose = function dispose() { if (this.playbackWatcher_) { this.playbackWatcher_.dispose(); } if (this.masterPlaylistController_) { this.masterPlaylistController_.dispose(); } if (this.qualityLevels_) { this.qualityLevels_.dispose(); } if (this.player_) { delete this.player_.vhs; delete this.player_.dash; delete this.player_.hls; } if (this.tech_ && this.tech_.vhs) { delete this.tech_.vhs; } if (this.tech_) { delete this.tech_.hls; } if (this.mediaSourceUrl_ && window_1.URL.revokeObjectURL) { window_1.URL.revokeObjectURL(this.mediaSourceUrl_); this.mediaSourceUrl_ = null; } if (this.tech_) { this.tech_.off("waitingforkey", this.handleWaitingForKey_); } _Component.prototype.dispose.call(this); }; _proto.convertToProgramTime = function convertToProgramTime(time, callback2) { return getProgramTime({ playlist: this.masterPlaylistController_.media(), time, callback: callback2 }); }; _proto.seekToProgramTime = function seekToProgramTime$12(programTime, callback2, pauseAfterSeek, retryCount) { if (pauseAfterSeek === void 0) { pauseAfterSeek = true; } if (retryCount === void 0) { retryCount = 2; } return seekToProgramTime({ programTime, playlist: this.masterPlaylistController_.media(), retryCount, pauseAfterSeek, seekTo: this.options_.seekTo, tech: this.options_.tech, callback: callback2 }); }; return VhsHandler2; }(Component); var VhsSourceHandler = { name: "videojs-http-streaming", VERSION: version$4, canHandleSource: function canHandleSource(srcObj, options2) { if (options2 === void 0) { options2 = {}; } var localOptions = videojs.mergeOptions(videojs.options, options2); return VhsSourceHandler.canPlayType(srcObj.type, localOptions); }, handleSource: function handleSource(source, tech, options2) { if (options2 === void 0) { options2 = {}; } var localOptions = videojs.mergeOptions(videojs.options, options2); tech.vhs = new VhsHandler(source, tech, localOptions); if (!videojs.hasOwnProperty("hls")) { Object.defineProperty(tech, "hls", { get: function get7() { videojs.log.warn("player.tech().hls is deprecated. Use player.tech().vhs instead."); return tech.vhs; }, configurable: true }); } tech.vhs.xhr = xhrFactory(); tech.vhs.src(source.src, source.type); return tech.vhs; }, canPlayType: function canPlayType2(type2, options2) { var simpleType = simpleTypeFromSourceType2(type2); if (!simpleType) { return ""; } var overrideNative = VhsSourceHandler.getOverrideNative(options2); var supportsTypeNatively = Vhs.supportsTypeNatively(simpleType); var canUseMsePlayback = !supportsTypeNatively || overrideNative; return canUseMsePlayback ? "maybe" : ""; }, getOverrideNative: function getOverrideNative(options2) { if (options2 === void 0) { options2 = {}; } var _options = options2, _options$vhs = _options.vhs, vhs = _options$vhs === void 0 ? {} : _options$vhs, _options$hls = _options.hls, hls = _options$hls === void 0 ? {} : _options$hls; var defaultOverrideNative = !(videojs.browser.IS_ANY_SAFARI || videojs.browser.IS_IOS); var _vhs$overrideNative = vhs.overrideNative, overrideNative = _vhs$overrideNative === void 0 ? defaultOverrideNative : _vhs$overrideNative; var _hls$overrideNative = hls.overrideNative, legacyOverrideNative = _hls$overrideNative === void 0 ? false : _hls$overrideNative; return legacyOverrideNative || overrideNative; } }; var supportsNativeMediaSources = function supportsNativeMediaSources2() { return browserSupportsCodec2("avc1.4d400d,mp4a.40.2"); }; if (supportsNativeMediaSources()) { videojs.getTech("Html5").registerSourceHandler(VhsSourceHandler, 0); } videojs.VhsHandler = VhsHandler; Object.defineProperty(videojs, "HlsHandler", { get: function get4() { videojs.log.warn("videojs.HlsHandler is deprecated. Use videojs.VhsHandler instead."); return VhsHandler; }, configurable: true }); videojs.VhsSourceHandler = VhsSourceHandler; Object.defineProperty(videojs, "HlsSourceHandler", { get: function get5() { videojs.log.warn("videojs.HlsSourceHandler is deprecated. Use videojs.VhsSourceHandler instead."); return VhsSourceHandler; }, configurable: true }); videojs.Vhs = Vhs; Object.defineProperty(videojs, "Hls", { get: function get6() { videojs.log.warn("videojs.Hls is deprecated. Use videojs.Vhs instead."); return Vhs; }, configurable: true }); if (!videojs.use) { videojs.registerComponent("Hls", Vhs); videojs.registerComponent("Vhs", Vhs); } videojs.options.vhs = videojs.options.vhs || {}; videojs.options.hls = videojs.options.hls || {}; if (!videojs.getPlugin || !videojs.getPlugin("reloadSourceOnError")) { var registerPlugin = videojs.registerPlugin || videojs.plugin; registerPlugin("reloadSourceOnError", reloadSourceOnError); } const version = "5.4.2"; var version$1 = "2.2.1"; function FlashRtmpDecorator(Flash2) { Flash2.streamingFormats = { "rtmp/mp4": "MP4", "rtmp/flv": "FLV" }; Flash2.streamFromParts = function(connection, stream) { return connection + "&" + stream; }; Flash2.streamToParts = function(src) { var parts = { connection: "", stream: "" }; if (!src) { return parts; } var connEnd = src.search(/&(?![\w-]+=)/); var streamBegin = void 0; if (connEnd !== -1) { streamBegin = connEnd + 1; } else { connEnd = streamBegin = src.lastIndexOf("/") + 1; if (connEnd === 0) { connEnd = streamBegin = src.length; } } parts.connection = src.substring(0, connEnd); parts.stream = src.substring(streamBegin, src.length); return parts; }; Flash2.isStreamingType = function(srcType) { return srcType in Flash2.streamingFormats; }; Flash2.RTMP_RE = /^rtmp[set]?:\/\//i; Flash2.isStreamingSrc = function(src) { return Flash2.RTMP_RE.test(src); }; Flash2.rtmpSourceHandler = {}; Flash2.rtmpSourceHandler.canPlayType = function(type2) { if (Flash2.isStreamingType(type2)) { return "maybe"; } return ""; }; Flash2.rtmpSourceHandler.canHandleSource = function(source, options2) { var can = Flash2.rtmpSourceHandler.canPlayType(source.type); if (can) { return can; } if (Flash2.isStreamingSrc(source.src)) { return "maybe"; } return ""; }; Flash2.rtmpSourceHandler.handleSource = function(source, tech, options2) { var srcParts = Flash2.streamToParts(source.src); tech.setRtmpConnection(srcParts.connection); tech.setRtmpStream(srcParts.stream); }; Flash2.registerSourceHandler(Flash2.rtmpSourceHandler); return Flash2; } var classCallCheck = function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var inherits = function(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }; var possibleConstructorReturn = function(self2, call) { if (!self2) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self2; }; var Tech = videojs.getComponent("Tech"); var Dom = videojs.dom; var Url = videojs.url; var createTimeRange = videojs.createTimeRange; var mergeOptions$1 = videojs.mergeOptions; var navigator$1 = window_1 && window_1.navigator || {}; var Flash = function(_Tech) { inherits(Flash2, _Tech); function Flash2(options2, ready) { classCallCheck(this, Flash2); var _this = possibleConstructorReturn(this, _Tech.call(this, options2, ready)); if (options2.source) { _this.ready(function() { this.setSource(options2.source); }, true); } if (options2.startTime) { _this.ready(function() { this.load(); this.play(); this.currentTime(options2.startTime); }, true); } window_1.videojs = window_1.videojs || {}; window_1.videojs.Flash = window_1.videojs.Flash || {}; window_1.videojs.Flash.onReady = Flash2.onReady; window_1.videojs.Flash.onEvent = Flash2.onEvent; window_1.videojs.Flash.onError = Flash2.onError; _this.on("seeked", function() { this.lastSeekTarget_ = void 0; }); return _this; } Flash2.prototype.createEl = function createEl2() { var options2 = this.options_; if (!options2.swf) { options2.swf = "https://vjs.zencdn.net/swf/" + version + "/video-js.swf"; } var objId = options2.techId; var flashVars = mergeOptions$1({ readyFunction: "videojs.Flash.onReady", eventProxyFunction: "videojs.Flash.onEvent", errorEventProxyFunction: "videojs.Flash.onError", autoplay: options2.autoplay, preload: options2.preload, loop: options2.loop, muted: options2.muted }, options2.flashVars); var params = mergeOptions$1({ wmode: "opaque", bgcolor: "#000000" }, options2.params); var attributes = mergeOptions$1({ id: objId, name: objId, "class": "vjs-tech" }, options2.attributes); this.el_ = Flash2.embed(options2.swf, flashVars, params, attributes); this.el_.tech = this; return this.el_; }; Flash2.prototype.play = function play() { if (this.ended()) { this.setCurrentTime(0); } this.el_.vjs_play(); }; Flash2.prototype.pause = function pause() { this.el_.vjs_pause(); }; Flash2.prototype.src = function src(_src) { if (_src === void 0) { return this.currentSrc(); } return this.setSrc(_src); }; Flash2.prototype.setSrc = function setSrc(src) { var _this2 = this; src = Url.getAbsoluteURL(src); this.el_.vjs_src(src); if (this.autoplay()) { this.setTimeout(function() { return _this2.play(); }, 0); } }; Flash2.prototype.seeking = function seeking() { return this.lastSeekTarget_ !== void 0; }; Flash2.prototype.setCurrentTime = function setCurrentTime(time) { var seekable3 = this.seekable(); if (seekable3.length) { time = time > seekable3.start(0) ? time : seekable3.start(0); time = time < seekable3.end(seekable3.length - 1) ? time : seekable3.end(seekable3.length - 1); this.lastSeekTarget_ = time; this.trigger("seeking"); this.el_.vjs_setProperty("currentTime", time); _Tech.prototype.setCurrentTime.call(this); } }; Flash2.prototype.currentTime = function currentTime() { if (this.seeking()) { return this.lastSeekTarget_ || 0; } return this.el_.vjs_getProperty("currentTime"); }; Flash2.prototype.currentSrc = function currentSrc() { if (this.currentSource_) { return this.currentSource_.src; } return this.el_.vjs_getProperty("currentSrc"); }; Flash2.prototype.duration = function duration5() { if (this.readyState() === 0) { return NaN; } var duration6 = this.el_.vjs_getProperty("duration"); return duration6 >= 0 ? duration6 : Infinity; }; Flash2.prototype.load = function load() { this.el_.vjs_load(); }; Flash2.prototype.poster = function poster() { this.el_.vjs_getProperty("poster"); }; Flash2.prototype.setPoster = function setPoster() { }; Flash2.prototype.seekable = function seekable3() { var duration5 = this.duration(); if (duration5 === 0) { return createTimeRange(); } return createTimeRange(0, duration5); }; Flash2.prototype.buffered = function buffered() { var ranges = this.el_.vjs_getProperty("buffered"); if (ranges.length === 0) { return createTimeRange(); } return createTimeRange(ranges[0][0], ranges[0][1]); }; Flash2.prototype.supportsFullScreen = function supportsFullScreen() { return false; }; Flash2.prototype.enterFullScreen = function enterFullScreen() { return false; }; Flash2.prototype.getVideoPlaybackQuality = function getVideoPlaybackQuality() { var videoPlaybackQuality = this.el_.vjs_getProperty("getVideoPlaybackQuality"); if (window_1.performance && typeof window_1.performance.now === "function") { videoPlaybackQuality.creationTime = window_1.performance.now(); } else if (window_1.performance && window_1.performance.timing && typeof window_1.performance.timing.navigationStart === "number") { videoPlaybackQuality.creationTime = window_1.Date.now() - window_1.performance.timing.navigationStart; } return videoPlaybackQuality; }; return Flash2; }(Tech); var _readWrite = ["rtmpConnection", "rtmpStream", "preload", "defaultPlaybackRate", "playbackRate", "autoplay", "loop", "controls", "volume", "muted", "defaultMuted"]; var _readOnly = ["networkState", "readyState", "initialTime", "startOffsetTime", "paused", "ended", "videoWidth", "videoHeight"]; var _api = Flash.prototype; function _createSetter(attr) { var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1); _api["set" + attrUpper] = function(val) { return this.el_.vjs_setProperty(attr, val); }; } function _createGetter(attr) { _api[attr] = function() { return this.el_.vjs_getProperty(attr); }; } for (var i$1 = 0; i$1 < _readWrite.length; i$1++) { _createGetter(_readWrite[i$1]); _createSetter(_readWrite[i$1]); } for (var _i = 0; _i < _readOnly.length; _i++) { _createGetter(_readOnly[_i]); } Flash.isSupported = function() { if (videojs.browser.IS_CHROME && (!videojs.browser.IS_ANDROID || !videojs.browser.IS_IOS) || videojs.browser.IS_SAFARI && !videojs.browser.IS_IOS || videojs.browser.IS_EDGE) { return true; } return Flash.version()[0] >= 10; }; Tech.withSourceHandlers(Flash); Flash.nativeSourceHandler = {}; Flash.nativeSourceHandler.canPlayType = function(type2) { if (type2 in Flash.formats) { return "maybe"; } return ""; }; Flash.nativeSourceHandler.canHandleSource = function(source, options2) { var type2 = void 0; function guessMimeType(src) { var ext = Url.getFileExtension(src); if (ext) { return "video/" + ext; } return ""; } if (!source.type) { type2 = guessMimeType(source.src); } else { type2 = source.type.replace(/;.*/, "").toLowerCase(); } return Flash.nativeSourceHandler.canPlayType(type2); }; Flash.nativeSourceHandler.handleSource = function(source, tech, options2) { tech.setSrc(source.src); }; Flash.nativeSourceHandler.dispose = function() { }; Flash.registerSourceHandler(Flash.nativeSourceHandler); Flash.formats = { "video/flv": "FLV", "video/x-flv": "FLV", "video/mp4": "MP4", "video/m4v": "MP4" }; Flash.onReady = function(currSwf) { var el = Dom.$("#" + currSwf); var tech = el && el.tech; if (tech && tech.el()) { Flash.checkReady(tech); } }; Flash.checkReady = function(tech) { if (!tech.el()) { return; } if (tech.el().vjs_getProperty) { tech.triggerReady(); } else { this.setTimeout(function() { Flash.checkReady(tech); }, 50); } }; Flash.onEvent = function(swfID, eventName) { var tech = Dom.$("#" + swfID).tech; var args = Array.prototype.slice.call(arguments, 2); tech.setTimeout(function() { tech.trigger(eventName, args); }, 1); }; Flash.onError = function(swfID, err) { var tech = Dom.$("#" + swfID).tech; if (err === "srcnotfound") { return tech.error(4); } if (typeof err === "string") { tech.error("FLASH: " + err); } else { err.origin = "flash"; tech.error(err); } }; Flash.version = function() { var version$$1 = "0,0,0"; try { version$$1 = new window_1.ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/\D+/g, ",").match(/^,?(.+),?$/)[1]; } catch (e) { try { if (navigator$1.mimeTypes["application/x-shockwave-flash"].enabledPlugin) { version$$1 = (navigator$1.plugins["Shockwave Flash 2.0"] || navigator$1.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1]; } } catch (err) { } } return version$$1.split(","); }; Flash.embed = function(swf, flashVars, params, attributes) { var code = Flash.getEmbedCode(swf, flashVars, params, attributes); var obj = Dom.createEl("div", { innerHTML: code }).childNodes[0]; return obj; }; Flash.getEmbedCode = function(swf, flashVars, params, attributes) { var objTag = ''; }); attributes = mergeOptions$1({ data: swf, width: "100%", height: "100%" }, attributes); Object.getOwnPropertyNames(attributes).forEach(function(key) { attrsString += key + '="' + attributes[key] + '" '; }); return "" + objTag + attrsString + ">" + paramsString + ""; }; FlashRtmpDecorator(Flash); if (Tech.getTech("Flash")) { videojs.log.warn("Not using videojs-flash as it appears to already be registered"); videojs.log.warn("videojs-flash should only be used with video.js@6 and above"); } else { videojs.registerTech("Flash", Flash); } Flash.VERSION = version$1; var flv = { exports: {} }; (function(module2, exports2) { (function webpackUniversalModuleDefinition(root2, factory3) { module2.exports = factory3(); })(self, function() { return function() { var __webpack_modules__ = { "./node_modules/es6-promise/dist/es6-promise.js": function(module3, __unused_webpack_exports, __webpack_require__2) { /*! * @overview es6-promise - a tiny implementation of Promises/A+. * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) * @license Licensed under MIT license * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE * @version v4.2.8+1e68dce6 */ (function(global2, factory3) { module3.exports = factory3(); })(this, function() { function objectOrFunction(x) { var type2 = typeof x; return x !== null && (type2 === "object" || type2 === "function"); } function isFunction2(x) { return typeof x === "function"; } var _isArray = void 0; if (Array.isArray) { _isArray = Array.isArray; } else { _isArray = function(x) { return Object.prototype.toString.call(x) === "[object Array]"; }; } var isArray2 = _isArray; var len = 0; var vertxNext = void 0; var customSchedulerFn = void 0; var asap = function asap2(callback2, arg) { queue[len] = callback2; queue[len + 1] = arg; len += 2; if (len === 2) { if (customSchedulerFn) { customSchedulerFn(flush); } else { scheduleFlush(); } } }; function setScheduler(scheduleFn) { customSchedulerFn = scheduleFn; } function setAsap(asapFn) { asap = asapFn; } var browserWindow = typeof window !== "undefined" ? window : void 0; var browserGlobal = browserWindow || {}; var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; var isNode = typeof self === "undefined" && typeof process !== "undefined" && {}.toString.call(process) === "[object process]"; var isWorker = typeof Uint8ClampedArray !== "undefined" && typeof importScripts !== "undefined" && typeof MessageChannel !== "undefined"; function useNextTick() { return function() { return process.nextTick(flush); }; } function useVertxTimer() { if (typeof vertxNext !== "undefined") { return function() { vertxNext(flush); }; } return useSetTimeout(); } function useMutationObserver() { var iterations = 0; var observer = new BrowserMutationObserver(flush); var node = document.createTextNode(""); observer.observe(node, { characterData: true }); return function() { node.data = iterations = ++iterations % 2; }; } function useMessageChannel() { var channel = new MessageChannel(); channel.port1.onmessage = flush; return function() { return channel.port2.postMessage(0); }; } function useSetTimeout() { var globalSetTimeout = setTimeout; return function() { return globalSetTimeout(flush, 1); }; } var queue = new Array(1e3); function flush() { for (var i2 = 0; i2 < len; i2 += 2) { var callback2 = queue[i2]; var arg = queue[i2 + 1]; callback2(arg); queue[i2] = void 0; queue[i2 + 1] = void 0; } len = 0; } function attemptVertx() { try { var vertx = Function("return this")().require("vertx"); vertxNext = vertx.runOnLoop || vertx.runOnContext; return useVertxTimer(); } catch (e) { return useSetTimeout(); } } var scheduleFlush = void 0; if (isNode) { scheduleFlush = useNextTick(); } else if (BrowserMutationObserver) { scheduleFlush = useMutationObserver(); } else if (isWorker) { scheduleFlush = useMessageChannel(); } else if (browserWindow === void 0 && true) { scheduleFlush = attemptVertx(); } else { scheduleFlush = useSetTimeout(); } function then(onFulfillment, onRejection) { var parent = this; var child = new this.constructor(noop2); if (child[PROMISE_ID] === void 0) { makePromise(child); } var _state = parent._state; if (_state) { var callback2 = arguments[_state - 1]; asap(function() { return invokeCallback(_state, child, callback2, parent._result); }); } else { subscribe(parent, child, onFulfillment, onRejection); } return child; } function resolve$1(object) { var Constructor = this; if (object && typeof object === "object" && object.constructor === Constructor) { return object; } var promise = new Constructor(noop2); resolve2(promise, object); return promise; } var PROMISE_ID = Math.random().toString(36).substring(2); function noop2() { } var PENDING = void 0; var FULFILLED = 1; var REJECTED = 2; function selfFulfillment() { return new TypeError("You cannot resolve a promise with itself"); } function cannotReturnOwn() { return new TypeError("A promises callback cannot return that same promise."); } function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { try { then$$1.call(value, fulfillmentHandler, rejectionHandler); } catch (e) { return e; } } function handleForeignThenable(promise, thenable, then$$1) { asap(function(promise2) { var sealed = false; var error = tryThen(then$$1, thenable, function(value) { if (sealed) { return; } sealed = true; if (thenable !== value) { resolve2(promise2, value); } else { fulfill(promise2, value); } }, function(reason) { if (sealed) { return; } sealed = true; reject2(promise2, reason); }, "Settle: " + (promise2._label || " unknown promise")); if (!sealed && error) { sealed = true; reject2(promise2, error); } }, promise); } function handleOwnThenable(promise, thenable) { if (thenable._state === FULFILLED) { fulfill(promise, thenable._result); } else if (thenable._state === REJECTED) { reject2(promise, thenable._result); } else { subscribe(thenable, void 0, function(value) { return resolve2(promise, value); }, function(reason) { return reject2(promise, reason); }); } } function handleMaybeThenable(promise, maybeThenable, then$$1) { if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { handleOwnThenable(promise, maybeThenable); } else { if (then$$1 === void 0) { fulfill(promise, maybeThenable); } else if (isFunction2(then$$1)) { handleForeignThenable(promise, maybeThenable, then$$1); } else { fulfill(promise, maybeThenable); } } } function resolve2(promise, value) { if (promise === value) { reject2(promise, selfFulfillment()); } else if (objectOrFunction(value)) { var then$$1 = void 0; try { then$$1 = value.then; } catch (error) { reject2(promise, error); return; } handleMaybeThenable(promise, value, then$$1); } else { fulfill(promise, value); } } function publishRejection(promise) { if (promise._onerror) { promise._onerror(promise._result); } publish(promise); } function fulfill(promise, value) { if (promise._state !== PENDING) { return; } promise._result = value; promise._state = FULFILLED; if (promise._subscribers.length !== 0) { asap(publish, promise); } } function reject2(promise, reason) { if (promise._state !== PENDING) { return; } promise._state = REJECTED; promise._result = reason; asap(publishRejection, promise); } function subscribe(parent, child, onFulfillment, onRejection) { var _subscribers = parent._subscribers; var length = _subscribers.length; parent._onerror = null; _subscribers[length] = child; _subscribers[length + FULFILLED] = onFulfillment; _subscribers[length + REJECTED] = onRejection; if (length === 0 && parent._state) { asap(publish, parent); } } function publish(promise) { var subscribers = promise._subscribers; var settled = promise._state; if (subscribers.length === 0) { return; } var child = void 0, callback2 = void 0, detail = promise._result; for (var i2 = 0; i2 < subscribers.length; i2 += 3) { child = subscribers[i2]; callback2 = subscribers[i2 + settled]; if (child) { invokeCallback(settled, child, callback2, detail); } else { callback2(detail); } } promise._subscribers.length = 0; } function invokeCallback(settled, promise, callback2, detail) { var hasCallback = isFunction2(callback2), value = void 0, error = void 0, succeeded = true; if (hasCallback) { try { value = callback2(detail); } catch (e) { succeeded = false; error = e; } if (promise === value) { reject2(promise, cannotReturnOwn()); return; } } else { value = detail; } if (promise._state !== PENDING) ; else if (hasCallback && succeeded) { resolve2(promise, value); } else if (succeeded === false) { reject2(promise, error); } else if (settled === FULFILLED) { fulfill(promise, value); } else if (settled === REJECTED) { reject2(promise, value); } } function initializePromise(promise, resolver) { try { resolver(function resolvePromise(value) { resolve2(promise, value); }, function rejectPromise(reason) { reject2(promise, reason); }); } catch (e) { reject2(promise, e); } } var id = 0; function nextId() { return id++; } function makePromise(promise) { promise[PROMISE_ID] = id++; promise._state = void 0; promise._result = void 0; promise._subscribers = []; } function validationError() { return new Error("Array Methods must be provided an Array"); } var Enumerator = function() { function Enumerator2(Constructor, input) { this._instanceConstructor = Constructor; this.promise = new Constructor(noop2); if (!this.promise[PROMISE_ID]) { makePromise(this.promise); } if (isArray2(input)) { this.length = input.length; this._remaining = input.length; this._result = new Array(this.length); if (this.length === 0) { fulfill(this.promise, this._result); } else { this.length = this.length || 0; this._enumerate(input); if (this._remaining === 0) { fulfill(this.promise, this._result); } } } else { reject2(this.promise, validationError()); } } Enumerator2.prototype._enumerate = function _enumerate(input) { for (var i2 = 0; this._state === PENDING && i2 < input.length; i2++) { this._eachEntry(input[i2], i2); } }; Enumerator2.prototype._eachEntry = function _eachEntry(entry, i2) { var c = this._instanceConstructor; var resolve$$1 = c.resolve; if (resolve$$1 === resolve$1) { var _then = void 0; var error = void 0; var didError = false; try { _then = entry.then; } catch (e) { didError = true; error = e; } if (_then === then && entry._state !== PENDING) { this._settledAt(entry._state, i2, entry._result); } else if (typeof _then !== "function") { this._remaining--; this._result[i2] = entry; } else if (c === Promise$12) { var promise = new c(noop2); if (didError) { reject2(promise, error); } else { handleMaybeThenable(promise, entry, _then); } this._willSettleAt(promise, i2); } else { this._willSettleAt(new c(function(resolve$$12) { return resolve$$12(entry); }), i2); } } else { this._willSettleAt(resolve$$1(entry), i2); } }; Enumerator2.prototype._settledAt = function _settledAt(state, i2, value) { var promise = this.promise; if (promise._state === PENDING) { this._remaining--; if (state === REJECTED) { reject2(promise, value); } else { this._result[i2] = value; } } if (this._remaining === 0) { fulfill(promise, this._result); } }; Enumerator2.prototype._willSettleAt = function _willSettleAt(promise, i2) { var enumerator = this; subscribe(promise, void 0, function(value) { return enumerator._settledAt(FULFILLED, i2, value); }, function(reason) { return enumerator._settledAt(REJECTED, i2, reason); }); }; return Enumerator2; }(); function all(entries) { return new Enumerator(this, entries).promise; } function race(entries) { var Constructor = this; if (!isArray2(entries)) { return new Constructor(function(_, reject3) { return reject3(new TypeError("You must pass an array to race.")); }); } else { return new Constructor(function(resolve3, reject3) { var length = entries.length; for (var i2 = 0; i2 < length; i2++) { Constructor.resolve(entries[i2]).then(resolve3, reject3); } }); } } function reject$1(reason) { var Constructor = this; var promise = new Constructor(noop2); reject2(promise, reason); return promise; } function needsResolver() { throw new TypeError("You must pass a resolver function as the first argument to the promise constructor"); } function needsNew() { throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); } var Promise$12 = function() { function Promise2(resolver) { this[PROMISE_ID] = nextId(); this._result = this._state = void 0; this._subscribers = []; if (noop2 !== resolver) { typeof resolver !== "function" && needsResolver(); this instanceof Promise2 ? initializePromise(this, resolver) : needsNew(); } } Promise2.prototype.catch = function _catch(onRejection) { return this.then(null, onRejection); }; Promise2.prototype.finally = function _finally(callback2) { var promise = this; var constructor = promise.constructor; if (isFunction2(callback2)) { return promise.then(function(value) { return constructor.resolve(callback2()).then(function() { return value; }); }, function(reason) { return constructor.resolve(callback2()).then(function() { throw reason; }); }); } return promise.then(callback2, callback2); }; return Promise2; }(); Promise$12.prototype.then = then; Promise$12.all = all; Promise$12.race = race; Promise$12.resolve = resolve$1; Promise$12.reject = reject$1; Promise$12._setScheduler = setScheduler; Promise$12._setAsap = setAsap; Promise$12._asap = asap; function polyfill() { var local = void 0; if (typeof __webpack_require__2.g !== "undefined") { local = __webpack_require__2.g; } else if (typeof self !== "undefined") { local = self; } else { try { local = Function("return this")(); } catch (e) { throw new Error("polyfill failed because global object is unavailable in this environment"); } } var P2 = local.Promise; if (P2) { var promiseToString = null; try { promiseToString = Object.prototype.toString.call(P2.resolve()); } catch (e) { } if (promiseToString === "[object Promise]" && !P2.cast) { return; } } local.Promise = Promise$12; } Promise$12.polyfill = polyfill; Promise$12.Promise = Promise$12; return Promise$12; }); }, "./node_modules/events/events.js": function(module3) { var R2 = typeof Reflect === "object" ? Reflect : null; var ReflectApply = R2 && typeof R2.apply === "function" ? R2.apply : function ReflectApply2(target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); }; var ReflectOwnKeys; if (R2 && typeof R2.ownKeys === "function") { ReflectOwnKeys = R2.ownKeys; } else if (Object.getOwnPropertySymbols) { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); }; } else { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target); }; } function ProcessEmitWarning(warning) { if (console && console.warn) console.warn(warning); } var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) { return value !== value; }; function EventEmitter() { EventEmitter.init.call(this); } module3.exports = EventEmitter; module3.exports.once = once; EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = void 0; EventEmitter.prototype._eventsCount = 0; EventEmitter.prototype._maxListeners = void 0; var defaultMaxListeners = 10; function checkListener(listener) { if (typeof listener !== "function") { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } } Object.defineProperty(EventEmitter, "defaultMaxListeners", { enumerable: true, get: function() { return defaultMaxListeners; }, set: function(arg) { if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) { throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + "."); } defaultMaxListeners = arg; } }); EventEmitter.init = function() { if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } this._maxListeners = this._maxListeners || void 0; }; EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) { throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + "."); } this._maxListeners = n; return this; }; function _getMaxListeners(that) { if (that._maxListeners === void 0) return EventEmitter.defaultMaxListeners; return that._maxListeners; } EventEmitter.prototype.getMaxListeners = function getMaxListeners() { return _getMaxListeners(this); }; EventEmitter.prototype.emit = function emit(type2) { var args = []; for (var i2 = 1; i2 < arguments.length; i2++) args.push(arguments[i2]); var doError = type2 === "error"; var events = this._events; if (events !== void 0) doError = doError && events.error === void 0; else if (!doError) return false; if (doError) { var er; if (args.length > 0) er = args[0]; if (er instanceof Error) { throw er; } var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : "")); err.context = er; throw err; } var handler = events[type2]; if (handler === void 0) return false; if (typeof handler === "function") { ReflectApply(handler, this, args); } else { var len = handler.length; var listeners = arrayClone(handler, len); for (var i2 = 0; i2 < len; ++i2) ReflectApply(listeners[i2], this, args); } return true; }; function _addListener(target, type2, listener, prepend) { var m; var events; var existing; checkListener(listener); events = target._events; if (events === void 0) { events = target._events = /* @__PURE__ */ Object.create(null); target._eventsCount = 0; } else { if (events.newListener !== void 0) { target.emit("newListener", type2, listener.listener ? listener.listener : listener); events = target._events; } existing = events[type2]; } if (existing === void 0) { existing = events[type2] = listener; ++target._eventsCount; } else { if (typeof existing === "function") { existing = events[type2] = prepend ? [listener, existing] : [existing, listener]; } else if (prepend) { existing.unshift(listener); } else { existing.push(listener); } m = _getMaxListeners(target); if (m > 0 && existing.length > m && !existing.warned) { existing.warned = true; var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type2) + " listeners added. Use emitter.setMaxListeners() to increase limit"); w.name = "MaxListenersExceededWarning"; w.emitter = target; w.type = type2; w.count = existing.length; ProcessEmitWarning(w); } } return target; } EventEmitter.prototype.addListener = function addListener(type2, listener) { return _addListener(this, type2, listener, false); }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.prependListener = function prependListener(type2, listener) { return _addListener(this, type2, listener, true); }; function onceWrapper() { if (!this.fired) { this.target.removeListener(this.type, this.wrapFn); this.fired = true; if (arguments.length === 0) return this.listener.call(this.target); return this.listener.apply(this.target, arguments); } } function _onceWrap(target, type2, listener) { var state = { fired: false, wrapFn: void 0, target, type: type2, listener }; var wrapped = onceWrapper.bind(state); wrapped.listener = listener; state.wrapFn = wrapped; return wrapped; } EventEmitter.prototype.once = function once2(type2, listener) { checkListener(listener); this.on(type2, _onceWrap(this, type2, listener)); return this; }; EventEmitter.prototype.prependOnceListener = function prependOnceListener(type2, listener) { checkListener(listener); this.prependListener(type2, _onceWrap(this, type2, listener)); return this; }; EventEmitter.prototype.removeListener = function removeListener(type2, listener) { var list, events, position2, i2, originalListener; checkListener(listener); events = this._events; if (events === void 0) return this; list = events[type2]; if (list === void 0) return this; if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else { delete events[type2]; if (events.removeListener) this.emit("removeListener", type2, list.listener || listener); } } else if (typeof list !== "function") { position2 = -1; for (i2 = list.length - 1; i2 >= 0; i2--) { if (list[i2] === listener || list[i2].listener === listener) { originalListener = list[i2].listener; position2 = i2; break; } } if (position2 < 0) return this; if (position2 === 0) list.shift(); else { spliceOne(list, position2); } if (list.length === 1) events[type2] = list[0]; if (events.removeListener !== void 0) this.emit("removeListener", type2, originalListener || listener); } return this; }; EventEmitter.prototype.off = EventEmitter.prototype.removeListener; EventEmitter.prototype.removeAllListeners = function removeAllListeners(type2) { var listeners, events, i2; events = this._events; if (events === void 0) return this; if (events.removeListener === void 0) { if (arguments.length === 0) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } else if (events[type2] !== void 0) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else delete events[type2]; } return this; } if (arguments.length === 0) { var keys3 = Object.keys(events); var key; for (i2 = 0; i2 < keys3.length; ++i2) { key = keys3[i2]; if (key === "removeListener") continue; this.removeAllListeners(key); } this.removeAllListeners("removeListener"); this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; return this; } listeners = events[type2]; if (typeof listeners === "function") { this.removeListener(type2, listeners); } else if (listeners !== void 0) { for (i2 = listeners.length - 1; i2 >= 0; i2--) { this.removeListener(type2, listeners[i2]); } } return this; }; function _listeners(target, type2, unwrap) { var events = target._events; if (events === void 0) return []; var evlistener = events[type2]; if (evlistener === void 0) return []; if (typeof evlistener === "function") return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); } EventEmitter.prototype.listeners = function listeners(type2) { return _listeners(this, type2, true); }; EventEmitter.prototype.rawListeners = function rawListeners(type2) { return _listeners(this, type2, false); }; EventEmitter.listenerCount = function(emitter, type2) { if (typeof emitter.listenerCount === "function") { return emitter.listenerCount(type2); } else { return listenerCount.call(emitter, type2); } }; EventEmitter.prototype.listenerCount = listenerCount; function listenerCount(type2) { var events = this._events; if (events !== void 0) { var evlistener = events[type2]; if (typeof evlistener === "function") { return 1; } else if (evlistener !== void 0) { return evlistener.length; } } return 0; } EventEmitter.prototype.eventNames = function eventNames() { return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; function arrayClone(arr, n) { var copy2 = new Array(n); for (var i2 = 0; i2 < n; ++i2) copy2[i2] = arr[i2]; return copy2; } function spliceOne(list, index2) { for (; index2 + 1 < list.length; index2++) list[index2] = list[index2 + 1]; list.pop(); } function unwrapListeners(arr) { var ret = new Array(arr.length); for (var i2 = 0; i2 < ret.length; ++i2) { ret[i2] = arr[i2].listener || arr[i2]; } return ret; } function once(emitter, name) { return new Promise(function(resolve2, reject2) { function errorListener(err) { emitter.removeListener(name, resolver); reject2(err); } function resolver() { if (typeof emitter.removeListener === "function") { emitter.removeListener("error", errorListener); } resolve2([].slice.call(arguments)); } eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); if (name !== "error") { addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); } }); } function addErrorHandlerIfEventEmitter(emitter, handler, flags) { if (typeof emitter.on === "function") { eventTargetAgnosticAddListener(emitter, "error", handler, flags); } } function eventTargetAgnosticAddListener(emitter, name, listener, flags) { if (typeof emitter.on === "function") { if (flags.once) { emitter.once(name, listener); } else { emitter.on(name, listener); } } else if (typeof emitter.addEventListener === "function") { emitter.addEventListener(name, function wrapListener(arg) { if (flags.once) { emitter.removeEventListener(name, wrapListener); } listener(arg); }); } else { throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); } } }, "./node_modules/webworkify-webpack/index.js": function(module3, __unused_webpack_exports, __webpack_require__2) { function webpackBootstrapFunc(modules) { var installedModules = {}; function __nested_webpack_require_164__(moduleId) { if (installedModules[moduleId]) return installedModules[moduleId].exports; var module4 = installedModules[moduleId] = { i: moduleId, l: false, exports: {} }; modules[moduleId].call(module4.exports, module4, module4.exports, __nested_webpack_require_164__); module4.l = true; return module4.exports; } __nested_webpack_require_164__.m = modules; __nested_webpack_require_164__.c = installedModules; __nested_webpack_require_164__.i = function(value) { return value; }; __nested_webpack_require_164__.d = function(exports3, name, getter) { if (!__nested_webpack_require_164__.o(exports3, name)) { Object.defineProperty(exports3, name, { configurable: false, enumerable: true, get: getter }); } }; __nested_webpack_require_164__.r = function(exports3) { Object.defineProperty(exports3, "__esModule", { value: true }); }; __nested_webpack_require_164__.n = function(module4) { var getter = module4 && module4.__esModule ? function getDefault() { return module4["default"]; } : function getModuleExports() { return module4; }; __nested_webpack_require_164__.d(getter, "a", getter); return getter; }; __nested_webpack_require_164__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; __nested_webpack_require_164__.p = "/"; __nested_webpack_require_164__.oe = function(err) { console.error(err); throw err; }; var f = __nested_webpack_require_164__(__nested_webpack_require_164__.s = ENTRY_MODULE); return f.default || f; } var moduleNameReqExp = "[\\.|\\-|\\+|\\w|/|@]+"; var dependencyRegExp = "\\(\\s*(/\\*.*?\\*/)?\\s*.*?(" + moduleNameReqExp + ").*?\\)"; function quoteRegExp(str) { return (str + "").replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&"); } function isNumeric(n) { return !isNaN(1 * n); } function getModuleDependencies(sources, module4, queueName) { var retval = {}; retval[queueName] = []; var fnString = module4.toString(); var wrapperSignature = fnString.match(/^function\s?\w*\(\w+,\s*\w+,\s*(\w+)\)/); if (!wrapperSignature) return retval; var webpackRequireName = wrapperSignature[1]; var re = new RegExp("(\\\\n|\\W)" + quoteRegExp(webpackRequireName) + dependencyRegExp, "g"); var match; while (match = re.exec(fnString)) { if (match[3] === "dll-reference") continue; retval[queueName].push(match[3]); } re = new RegExp("\\(" + quoteRegExp(webpackRequireName) + '\\("(dll-reference\\s(' + moduleNameReqExp + '))"\\)\\)' + dependencyRegExp, "g"); while (match = re.exec(fnString)) { if (!sources[match[2]]) { retval[queueName].push(match[1]); sources[match[2]] = __webpack_require__2(match[1]).m; } retval[match[2]] = retval[match[2]] || []; retval[match[2]].push(match[4]); } var keys3 = Object.keys(retval); for (var i2 = 0; i2 < keys3.length; i2++) { for (var j = 0; j < retval[keys3[i2]].length; j++) { if (isNumeric(retval[keys3[i2]][j])) { retval[keys3[i2]][j] = 1 * retval[keys3[i2]][j]; } } } return retval; } function hasValuesInQueues(queues) { var keys3 = Object.keys(queues); return keys3.reduce(function(hasValues, key) { return hasValues || queues[key].length > 0; }, false); } function getRequiredModules(sources, moduleId) { var modulesQueue = { main: [moduleId] }; var requiredModules = { main: [] }; var seenModules = { main: {} }; while (hasValuesInQueues(modulesQueue)) { var queues = Object.keys(modulesQueue); for (var i2 = 0; i2 < queues.length; i2++) { var queueName = queues[i2]; var queue = modulesQueue[queueName]; var moduleToCheck = queue.pop(); seenModules[queueName] = seenModules[queueName] || {}; if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue; seenModules[queueName][moduleToCheck] = true; requiredModules[queueName] = requiredModules[queueName] || []; requiredModules[queueName].push(moduleToCheck); var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName); var newModulesKeys = Object.keys(newModules); for (var j = 0; j < newModulesKeys.length; j++) { modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || []; modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]]); } } } return requiredModules; } module3.exports = function(moduleId, options2) { options2 = options2 || {}; var sources = { main: __webpack_require__2.m }; var requiredModules = options2.all ? { main: Object.keys(sources.main) } : getRequiredModules(sources, moduleId); var src = ""; Object.keys(requiredModules).filter(function(m) { return m !== "main"; }).forEach(function(module4) { var entryModule = 0; while (requiredModules[module4][entryModule]) { entryModule++; } requiredModules[module4].push(entryModule); sources[module4][entryModule] = "(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })"; src = src + "var " + module4 + " = (" + webpackBootstrapFunc.toString().replace("ENTRY_MODULE", JSON.stringify(entryModule)) + ")({" + requiredModules[module4].map(function(id) { return "" + JSON.stringify(id) + ": " + sources[module4][id].toString(); }).join(",") + "});\n"; }); src = src + "new ((" + webpackBootstrapFunc.toString().replace("ENTRY_MODULE", JSON.stringify(moduleId)) + ")({" + requiredModules.main.map(function(id) { return "" + JSON.stringify(id) + ": " + sources.main[id].toString(); }).join(",") + "}))(self);"; var blob = new window.Blob([src], { type: "text/javascript" }); if (options2.bare) { return blob; } var URL2 = window.URL || window.webkitURL || window.mozURL || window.msURL; var workerUrl = URL2.createObjectURL(blob); var worker = new window.Worker(workerUrl); worker.objectURL = workerUrl; return worker; }; }, "./src/config.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "defaultConfig": function() { return defaultConfig; }, "createDefaultConfig": function() { return createDefaultConfig; } }); var defaultConfig = { enableWorker: false, enableStashBuffer: true, stashInitialSize: void 0, isLive: false, lazyLoad: true, lazyLoadMaxDuration: 3 * 60, lazyLoadRecoverDuration: 30, deferLoadAfterSourceOpen: true, autoCleanupMaxBackwardDuration: 3 * 60, autoCleanupMinBackwardDuration: 2 * 60, statisticsInfoReportInterval: 600, fixAudioTimestampGap: true, accurateSeek: false, seekType: "range", seekParamStart: "bstart", seekParamEnd: "bend", rangeLoadZeroStart: false, customSeekHandler: void 0, reuseRedirectedURL: false, headers: void 0, customLoader: void 0 }; function createDefaultConfig() { return Object.assign({}, defaultConfig); } }, "./src/core/features.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _io_io_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/io/io-controller.js"); var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/config.js"); var Features = function() { function Features2() { } Features2.supportMSEH264Playback = function() { return window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'); }; Features2.supportNetworkStreamIO = function() { var ioctl = new _io_io_controller_js__WEBPACK_IMPORTED_MODULE_0__.default({}, (0, _config_js__WEBPACK_IMPORTED_MODULE_1__.createDefaultConfig)()); var loaderType = ioctl.loaderType; ioctl.destroy(); return loaderType == "fetch-stream-loader" || loaderType == "xhr-moz-chunked-loader"; }; Features2.getNetworkLoaderTypeName = function() { var ioctl = new _io_io_controller_js__WEBPACK_IMPORTED_MODULE_0__.default({}, (0, _config_js__WEBPACK_IMPORTED_MODULE_1__.createDefaultConfig)()); var loaderType = ioctl.loaderType; ioctl.destroy(); return loaderType; }; Features2.supportNativeMediaPlayback = function(mimeType) { if (Features2.videoElement == void 0) { Features2.videoElement = window.document.createElement("video"); } var canPlay = Features2.videoElement.canPlayType(mimeType); return canPlay === "probably" || canPlay == "maybe"; }; Features2.getFeatureList = function() { var features = { mseFlvPlayback: false, mseLiveFlvPlayback: false, networkStreamIO: false, networkLoaderName: "", nativeMP4H264Playback: false, nativeWebmVP8Playback: false, nativeWebmVP9Playback: false }; features.mseFlvPlayback = Features2.supportMSEH264Playback(); features.networkStreamIO = Features2.supportNetworkStreamIO(); features.networkLoaderName = Features2.getNetworkLoaderTypeName(); features.mseLiveFlvPlayback = features.mseFlvPlayback && features.networkStreamIO; features.nativeMP4H264Playback = Features2.supportNativeMediaPlayback('video/mp4; codecs="avc1.42001E, mp4a.40.2"'); features.nativeWebmVP8Playback = Features2.supportNativeMediaPlayback('video/webm; codecs="vp8.0, vorbis"'); features.nativeWebmVP9Playback = Features2.supportNativeMediaPlayback('video/webm; codecs="vp9"'); return features; }; return Features2; }(); __webpack_exports__2["default"] = Features; }, "./src/core/media-info.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var MediaInfo = function() { function MediaInfo2() { this.mimeType = null; this.duration = null; this.hasAudio = null; this.hasVideo = null; this.audioCodec = null; this.videoCodec = null; this.audioDataRate = null; this.videoDataRate = null; this.audioSampleRate = null; this.audioChannelCount = null; this.width = null; this.height = null; this.fps = null; this.profile = null; this.level = null; this.refFrames = null; this.chromaFormat = null; this.sarNum = null; this.sarDen = null; this.metadata = null; this.segments = null; this.segmentCount = null; this.hasKeyframesIndex = null; this.keyframesIndex = null; } MediaInfo2.prototype.isComplete = function() { var audioInfoComplete = this.hasAudio === false || this.hasAudio === true && this.audioCodec != null && this.audioSampleRate != null && this.audioChannelCount != null; var videoInfoComplete = this.hasVideo === false || this.hasVideo === true && this.videoCodec != null && this.width != null && this.height != null && this.fps != null && this.profile != null && this.level != null && this.refFrames != null && this.chromaFormat != null && this.sarNum != null && this.sarDen != null; return this.mimeType != null && this.duration != null && this.metadata != null && this.hasKeyframesIndex != null && audioInfoComplete && videoInfoComplete; }; MediaInfo2.prototype.isSeekable = function() { return this.hasKeyframesIndex === true; }; MediaInfo2.prototype.getNearestKeyframe = function(milliseconds) { if (this.keyframesIndex == null) { return null; } var table = this.keyframesIndex; var keyframeIdx = this._search(table.times, milliseconds); return { index: keyframeIdx, milliseconds: table.times[keyframeIdx], fileposition: table.filepositions[keyframeIdx] }; }; MediaInfo2.prototype._search = function(list, value) { var idx = 0; var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; if (value < list[0]) { idx = 0; lbound = ubound + 1; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || value >= list[mid] && value < list[mid + 1]) { idx = mid; break; } else if (list[mid] < value) { lbound = mid + 1; } else { ubound = mid - 1; } } return idx; }; return MediaInfo2; }(); __webpack_exports__2["default"] = MediaInfo; }, "./src/core/media-segment-info.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "SampleInfo": function() { return SampleInfo; }, "MediaSegmentInfo": function() { return MediaSegmentInfo; }, "IDRSampleList": function() { return IDRSampleList; }, "MediaSegmentInfoList": function() { return MediaSegmentInfoList; } }); var SampleInfo = function() { function SampleInfo2(dts, pts, duration5, originalDts, isSync) { this.dts = dts; this.pts = pts; this.duration = duration5; this.originalDts = originalDts; this.isSyncPoint = isSync; this.fileposition = null; } return SampleInfo2; }(); var MediaSegmentInfo = function() { function MediaSegmentInfo2() { this.beginDts = 0; this.endDts = 0; this.beginPts = 0; this.endPts = 0; this.originalBeginDts = 0; this.originalEndDts = 0; this.syncPoints = []; this.firstSample = null; this.lastSample = null; } MediaSegmentInfo2.prototype.appendSyncPoint = function(sampleInfo) { sampleInfo.isSyncPoint = true; this.syncPoints.push(sampleInfo); }; return MediaSegmentInfo2; }(); var IDRSampleList = function() { function IDRSampleList2() { this._list = []; } IDRSampleList2.prototype.clear = function() { this._list = []; }; IDRSampleList2.prototype.appendArray = function(syncPoints) { var list = this._list; if (syncPoints.length === 0) { return; } if (list.length > 0 && syncPoints[0].originalDts < list[list.length - 1].originalDts) { this.clear(); } Array.prototype.push.apply(list, syncPoints); }; IDRSampleList2.prototype.getLastSyncPointBeforeDts = function(dts) { if (this._list.length == 0) { return null; } var list = this._list; var idx = 0; var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; if (dts < list[0].dts) { idx = 0; lbound = ubound + 1; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || dts >= list[mid].dts && dts < list[mid + 1].dts) { idx = mid; break; } else if (list[mid].dts < dts) { lbound = mid + 1; } else { ubound = mid - 1; } } return this._list[idx]; }; return IDRSampleList2; }(); var MediaSegmentInfoList = function() { function MediaSegmentInfoList2(type2) { this._type = type2; this._list = []; this._lastAppendLocation = -1; } Object.defineProperty(MediaSegmentInfoList2.prototype, "type", { get: function() { return this._type; }, enumerable: false, configurable: true }); Object.defineProperty(MediaSegmentInfoList2.prototype, "length", { get: function() { return this._list.length; }, enumerable: false, configurable: true }); MediaSegmentInfoList2.prototype.isEmpty = function() { return this._list.length === 0; }; MediaSegmentInfoList2.prototype.clear = function() { this._list = []; this._lastAppendLocation = -1; }; MediaSegmentInfoList2.prototype._searchNearestSegmentBefore = function(originalBeginDts) { var list = this._list; if (list.length === 0) { return -2; } var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; var idx = 0; if (originalBeginDts < list[0].originalBeginDts) { idx = -1; return idx; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || originalBeginDts > list[mid].lastSample.originalDts && originalBeginDts < list[mid + 1].originalBeginDts) { idx = mid; break; } else if (list[mid].originalBeginDts < originalBeginDts) { lbound = mid + 1; } else { ubound = mid - 1; } } return idx; }; MediaSegmentInfoList2.prototype._searchNearestSegmentAfter = function(originalBeginDts) { return this._searchNearestSegmentBefore(originalBeginDts) + 1; }; MediaSegmentInfoList2.prototype.append = function(mediaSegmentInfo) { var list = this._list; var msi = mediaSegmentInfo; var lastAppendIdx = this._lastAppendLocation; var insertIdx = 0; if (lastAppendIdx !== -1 && lastAppendIdx < list.length && msi.originalBeginDts >= list[lastAppendIdx].lastSample.originalDts && (lastAppendIdx === list.length - 1 || lastAppendIdx < list.length - 1 && msi.originalBeginDts < list[lastAppendIdx + 1].originalBeginDts)) { insertIdx = lastAppendIdx + 1; } else { if (list.length > 0) { insertIdx = this._searchNearestSegmentBefore(msi.originalBeginDts) + 1; } } this._lastAppendLocation = insertIdx; this._list.splice(insertIdx, 0, msi); }; MediaSegmentInfoList2.prototype.getLastSegmentBefore = function(originalBeginDts) { var idx = this._searchNearestSegmentBefore(originalBeginDts); if (idx >= 0) { return this._list[idx]; } else { return null; } }; MediaSegmentInfoList2.prototype.getLastSampleBefore = function(originalBeginDts) { var segment = this.getLastSegmentBefore(originalBeginDts); if (segment != null) { return segment.lastSample; } else { return null; } }; MediaSegmentInfoList2.prototype.getLastSyncPointBefore = function(originalBeginDts) { var segmentIdx = this._searchNearestSegmentBefore(originalBeginDts); var syncPoints = this._list[segmentIdx].syncPoints; while (syncPoints.length === 0 && segmentIdx > 0) { segmentIdx--; syncPoints = this._list[segmentIdx].syncPoints; } if (syncPoints.length > 0) { return syncPoints[syncPoints.length - 1]; } else { return null; } }; return MediaSegmentInfoList2; }(); }, "./src/core/mse-controller.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = /* @__PURE__ */ __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/logger.js"); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/browser.js"); var _mse_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/core/mse-events.js"); var _media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/media-segment-info.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/utils/exception.js"); var MSEController = function() { function MSEController2(config) { this.TAG = "MSEController"; this._config = config; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); if (this._config.isLive && this._config.autoCleanupSourceBuffer == void 0) { this._config.autoCleanupSourceBuffer = true; } this.e = { onSourceOpen: this._onSourceOpen.bind(this), onSourceEnded: this._onSourceEnded.bind(this), onSourceClose: this._onSourceClose.bind(this), onSourceBufferError: this._onSourceBufferError.bind(this), onSourceBufferUpdateEnd: this._onSourceBufferUpdateEnd.bind(this) }; this._mediaSource = null; this._mediaSourceObjectURL = null; this._mediaElement = null; this._isBufferFull = false; this._hasPendingEos = false; this._requireSetMediaDuration = false; this._pendingMediaDuration = 0; this._pendingSourceBufferInit = []; this._mimeTypes = { video: null, audio: null }; this._sourceBuffers = { video: null, audio: null }; this._lastInitSegments = { video: null, audio: null }; this._pendingSegments = { video: [], audio: [] }; this._pendingRemoveRanges = { video: [], audio: [] }; this._idrList = new _media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.IDRSampleList(); } MSEController2.prototype.destroy = function() { if (this._mediaElement || this._mediaSource) { this.detachMediaElement(); } this.e = null; this._emitter.removeAllListeners(); this._emitter = null; }; MSEController2.prototype.on = function(event2, listener) { this._emitter.addListener(event2, listener); }; MSEController2.prototype.off = function(event2, listener) { this._emitter.removeListener(event2, listener); }; MSEController2.prototype.attachMediaElement = function(mediaElement) { if (this._mediaSource) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__.IllegalStateException("MediaSource has been attached to an HTMLMediaElement!"); } var ms = this._mediaSource = new window.MediaSource(); ms.addEventListener("sourceopen", this.e.onSourceOpen); ms.addEventListener("sourceended", this.e.onSourceEnded); ms.addEventListener("sourceclose", this.e.onSourceClose); this._mediaElement = mediaElement; this._mediaSourceObjectURL = window.URL.createObjectURL(this._mediaSource); mediaElement.src = this._mediaSourceObjectURL; }; MSEController2.prototype.detachMediaElement = function() { if (this._mediaSource) { var ms = this._mediaSource; for (var type2 in this._sourceBuffers) { var ps = this._pendingSegments[type2]; ps.splice(0, ps.length); this._pendingSegments[type2] = null; this._pendingRemoveRanges[type2] = null; this._lastInitSegments[type2] = null; var sb = this._sourceBuffers[type2]; if (sb) { if (ms.readyState !== "closed") { try { ms.removeSourceBuffer(sb); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); } sb.removeEventListener("error", this.e.onSourceBufferError); sb.removeEventListener("updateend", this.e.onSourceBufferUpdateEnd); } this._mimeTypes[type2] = null; this._sourceBuffers[type2] = null; } } if (ms.readyState === "open") { try { ms.endOfStream(); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); } } ms.removeEventListener("sourceopen", this.e.onSourceOpen); ms.removeEventListener("sourceended", this.e.onSourceEnded); ms.removeEventListener("sourceclose", this.e.onSourceClose); this._pendingSourceBufferInit = []; this._isBufferFull = false; this._idrList.clear(); this._mediaSource = null; } if (this._mediaElement) { this._mediaElement.src = ""; this._mediaElement.removeAttribute("src"); this._mediaElement = null; } if (this._mediaSourceObjectURL) { window.URL.revokeObjectURL(this._mediaSourceObjectURL); this._mediaSourceObjectURL = null; } }; MSEController2.prototype.appendInitSegment = function(initSegment, deferred) { if (!this._mediaSource || this._mediaSource.readyState !== "open") { this._pendingSourceBufferInit.push(initSegment); this._pendingSegments[initSegment.type].push(initSegment); return; } var is = initSegment; var mimeType = "" + is.container; if (is.codec && is.codec.length > 0) { mimeType += ";codecs=" + is.codec; } var firstInitSegment = false; _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Received Initialization Segment, mimeType: " + mimeType); this._lastInitSegments[is.type] = is; if (mimeType !== this._mimeTypes[is.type]) { if (!this._mimeTypes[is.type]) { firstInitSegment = true; try { var sb = this._sourceBuffers[is.type] = this._mediaSource.addSourceBuffer(mimeType); sb.addEventListener("error", this.e.onSourceBufferError); sb.addEventListener("updateend", this.e.onSourceBufferUpdateEnd); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, { code: error.code, msg: error.message }); return; } } else { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Notice: " + is.type + " mimeType changed, origin: " + this._mimeTypes[is.type] + ", target: " + mimeType); } this._mimeTypes[is.type] = mimeType; } if (!deferred) { this._pendingSegments[is.type].push(is); } if (!firstInitSegment) { if (this._sourceBuffers[is.type] && !this._sourceBuffers[is.type].updating) { this._doAppendSegments(); } } if (_utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari && is.container === "audio/mpeg" && is.mediaDuration > 0) { this._requireSetMediaDuration = true; this._pendingMediaDuration = is.mediaDuration / 1e3; this._updateMediaSourceDuration(); } }; MSEController2.prototype.appendMediaSegment = function(mediaSegment) { var ms = mediaSegment; this._pendingSegments[ms.type].push(ms); if (this._config.autoCleanupSourceBuffer && this._needCleanupSourceBuffer()) { this._doCleanupSourceBuffer(); } var sb = this._sourceBuffers[ms.type]; if (sb && !sb.updating && !this._hasPendingRemoveRanges()) { this._doAppendSegments(); } }; MSEController2.prototype.seek = function(seconds) { for (var type2 in this._sourceBuffers) { if (!this._sourceBuffers[type2]) { continue; } var sb = this._sourceBuffers[type2]; if (this._mediaSource.readyState === "open") { try { sb.abort(); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); } } this._idrList.clear(); var ps = this._pendingSegments[type2]; ps.splice(0, ps.length); if (this._mediaSource.readyState === "closed") { continue; } for (var i2 = 0; i2 < sb.buffered.length; i2++) { var start2 = sb.buffered.start(i2); var end = sb.buffered.end(i2); this._pendingRemoveRanges[type2].push({ start: start2, end }); } if (!sb.updating) { this._doRemoveRanges(); } if (_utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari) { var lastInitSegment = this._lastInitSegments[type2]; if (lastInitSegment) { this._pendingSegments[type2].push(lastInitSegment); if (!sb.updating) { this._doAppendSegments(); } } } } }; MSEController2.prototype.endOfStream = function() { var ms = this._mediaSource; var sb = this._sourceBuffers; if (!ms || ms.readyState !== "open") { if (ms && ms.readyState === "closed" && this._hasPendingSegments()) { this._hasPendingEos = true; } return; } if (sb.video && sb.video.updating || sb.audio && sb.audio.updating) { this._hasPendingEos = true; } else { this._hasPendingEos = false; ms.endOfStream(); } }; MSEController2.prototype.getNearestKeyframe = function(dts) { return this._idrList.getLastSyncPointBeforeDts(dts); }; MSEController2.prototype._needCleanupSourceBuffer = function() { if (!this._config.autoCleanupSourceBuffer) { return false; } var currentTime = this._mediaElement.currentTime; for (var type2 in this._sourceBuffers) { var sb = this._sourceBuffers[type2]; if (sb) { var buffered = sb.buffered; if (buffered.length >= 1) { if (currentTime - buffered.start(0) >= this._config.autoCleanupMaxBackwardDuration) { return true; } } } } return false; }; MSEController2.prototype._doCleanupSourceBuffer = function() { var currentTime = this._mediaElement.currentTime; for (var type2 in this._sourceBuffers) { var sb = this._sourceBuffers[type2]; if (sb) { var buffered = sb.buffered; var doRemove = false; for (var i2 = 0; i2 < buffered.length; i2++) { var start2 = buffered.start(i2); var end = buffered.end(i2); if (start2 <= currentTime && currentTime < end + 3) { if (currentTime - start2 >= this._config.autoCleanupMaxBackwardDuration) { doRemove = true; var removeEnd = currentTime - this._config.autoCleanupMinBackwardDuration; this._pendingRemoveRanges[type2].push({ start: start2, end: removeEnd }); } } else if (end < currentTime) { doRemove = true; this._pendingRemoveRanges[type2].push({ start: start2, end }); } } if (doRemove && !sb.updating) { this._doRemoveRanges(); } } } }; MSEController2.prototype._updateMediaSourceDuration = function() { var sb = this._sourceBuffers; if (this._mediaElement.readyState === 0 || this._mediaSource.readyState !== "open") { return; } if (sb.video && sb.video.updating || sb.audio && sb.audio.updating) { return; } var current = this._mediaSource.duration; var target = this._pendingMediaDuration; if (target > 0 && (isNaN(current) || target > current)) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Update MediaSource duration from " + current + " to " + target); this._mediaSource.duration = target; } this._requireSetMediaDuration = false; this._pendingMediaDuration = 0; }; MSEController2.prototype._doRemoveRanges = function() { for (var type2 in this._pendingRemoveRanges) { if (!this._sourceBuffers[type2] || this._sourceBuffers[type2].updating) { continue; } var sb = this._sourceBuffers[type2]; var ranges = this._pendingRemoveRanges[type2]; while (ranges.length && !sb.updating) { var range3 = ranges.shift(); sb.remove(range3.start, range3.end); } } }; MSEController2.prototype._doAppendSegments = function() { var pendingSegments = this._pendingSegments; for (var type2 in pendingSegments) { if (!this._sourceBuffers[type2] || this._sourceBuffers[type2].updating) { continue; } if (pendingSegments[type2].length > 0) { var segment = pendingSegments[type2].shift(); if (segment.timestampOffset) { var currentOffset = this._sourceBuffers[type2].timestampOffset; var targetOffset = segment.timestampOffset / 1e3; var delta = Math.abs(currentOffset - targetOffset); if (delta > 0.1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Update MPEG audio timestampOffset from " + currentOffset + " to " + targetOffset); this._sourceBuffers[type2].timestampOffset = targetOffset; } delete segment.timestampOffset; } if (!segment.data || segment.data.byteLength === 0) { continue; } try { this._sourceBuffers[type2].appendBuffer(segment.data); this._isBufferFull = false; if (type2 === "video" && segment.hasOwnProperty("info")) { this._idrList.appendArray(segment.info.syncPoints); } } catch (error) { this._pendingSegments[type2].unshift(segment); if (error.code === 22) { if (!this._isBufferFull) { this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.BUFFER_FULL); } this._isBufferFull = true; } else { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, error.message); this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, { code: error.code, msg: error.message }); } } } } }; MSEController2.prototype._onSourceOpen = function() { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "MediaSource onSourceOpen"); this._mediaSource.removeEventListener("sourceopen", this.e.onSourceOpen); if (this._pendingSourceBufferInit.length > 0) { var pendings = this._pendingSourceBufferInit; while (pendings.length) { var segment = pendings.shift(); this.appendInitSegment(segment, true); } } if (this._hasPendingSegments()) { this._doAppendSegments(); } this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.SOURCE_OPEN); }; MSEController2.prototype._onSourceEnded = function() { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "MediaSource onSourceEnded"); }; MSEController2.prototype._onSourceClose = function() { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "MediaSource onSourceClose"); if (this._mediaSource && this.e != null) { this._mediaSource.removeEventListener("sourceopen", this.e.onSourceOpen); this._mediaSource.removeEventListener("sourceended", this.e.onSourceEnded); this._mediaSource.removeEventListener("sourceclose", this.e.onSourceClose); } }; MSEController2.prototype._hasPendingSegments = function() { var ps = this._pendingSegments; return ps.video.length > 0 || ps.audio.length > 0; }; MSEController2.prototype._hasPendingRemoveRanges = function() { var prr = this._pendingRemoveRanges; return prr.video.length > 0 || prr.audio.length > 0; }; MSEController2.prototype._onSourceBufferUpdateEnd = function() { if (this._requireSetMediaDuration) { this._updateMediaSourceDuration(); } else if (this._hasPendingRemoveRanges()) { this._doRemoveRanges(); } else if (this._hasPendingSegments()) { this._doAppendSegments(); } else if (this._hasPendingEos) { this.endOfStream(); } this._emitter.emit(_mse_events_js__WEBPACK_IMPORTED_MODULE_3__.default.UPDATE_END); }; MSEController2.prototype._onSourceBufferError = function(e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, "SourceBuffer Error: " + e); }; return MSEController2; }(); __webpack_exports__2["default"] = MSEController; }, "./src/core/mse-events.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var MSEEvents = { ERROR: "error", SOURCE_OPEN: "source_open", UPDATE_END: "update_end", BUFFER_FULL: "buffer_full" }; __webpack_exports__2["default"] = MSEEvents; }, "./src/core/transmuxer.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = /* @__PURE__ */ __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var webworkify_webpack__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./node_modules/webworkify-webpack/index.js"); var webworkify_webpack__WEBPACK_IMPORTED_MODULE_1___default = /* @__PURE__ */ __webpack_require__2.n(webworkify_webpack__WEBPACK_IMPORTED_MODULE_1__); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/logger.js"); var _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/utils/logging-control.js"); var _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/transmuxing-controller.js"); var _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/core/transmuxing-events.js"); var _media_info_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/core/media-info.js"); var Transmuxer = function() { function Transmuxer2(mediaDataSource, config) { this.TAG = "Transmuxer"; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); if (config.enableWorker && typeof Worker !== "undefined") { try { this._worker = webworkify_webpack__WEBPACK_IMPORTED_MODULE_1___default()("./src/core/transmuxing-worker.js"); this._workerDestroying = false; this._worker.addEventListener("message", this._onWorkerMessage.bind(this)); this._worker.postMessage({ cmd: "init", param: [mediaDataSource, config] }); this.e = { onLoggingConfigChanged: this._onLoggingConfigChanged.bind(this) }; _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_3__.default.registerListener(this.e.onLoggingConfigChanged); this._worker.postMessage({ cmd: "logging_config", param: _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_3__.default.getConfig() }); } catch (error) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__.default.e(this.TAG, "Error while initialize transmuxing worker, fallback to inline transmuxing"); this._worker = null; this._controller = new _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_4__.default(mediaDataSource, config); } } else { this._controller = new _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_4__.default(mediaDataSource, config); } if (this._controller) { var ctl = this._controller; ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.IO_ERROR, this._onIOError.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.DEMUX_ERROR, this._onDemuxError.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.INIT_SEGMENT, this._onInitSegment.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_SEGMENT, this._onMediaSegment.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.LOADING_COMPLETE, this._onLoadingComplete.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOVERED_EARLY_EOF, this._onRecoveredEarlyEof.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_INFO, this._onMediaInfo.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.METADATA_ARRIVED, this._onMetaDataArrived.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.SCRIPTDATA_ARRIVED, this._onScriptDataArrived.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.STATISTICS_INFO, this._onStatisticsInfo.bind(this)); ctl.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOMMEND_SEEKPOINT, this._onRecommendSeekpoint.bind(this)); } } Transmuxer2.prototype.destroy = function() { if (this._worker) { if (!this._workerDestroying) { this._workerDestroying = true; this._worker.postMessage({ cmd: "destroy" }); _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_3__.default.removeListener(this.e.onLoggingConfigChanged); this.e = null; } } else { this._controller.destroy(); this._controller = null; } this._emitter.removeAllListeners(); this._emitter = null; }; Transmuxer2.prototype.on = function(event2, listener) { this._emitter.addListener(event2, listener); }; Transmuxer2.prototype.off = function(event2, listener) { this._emitter.removeListener(event2, listener); }; Transmuxer2.prototype.hasWorker = function() { return this._worker != null; }; Transmuxer2.prototype.open = function() { if (this._worker) { this._worker.postMessage({ cmd: "start" }); } else { this._controller.start(); } }; Transmuxer2.prototype.close = function() { if (this._worker) { this._worker.postMessage({ cmd: "stop" }); } else { this._controller.stop(); } }; Transmuxer2.prototype.seek = function(milliseconds) { if (this._worker) { this._worker.postMessage({ cmd: "seek", param: milliseconds }); } else { this._controller.seek(milliseconds); } }; Transmuxer2.prototype.pause = function() { if (this._worker) { this._worker.postMessage({ cmd: "pause" }); } else { this._controller.pause(); } }; Transmuxer2.prototype.resume = function() { if (this._worker) { this._worker.postMessage({ cmd: "resume" }); } else { this._controller.resume(); } }; Transmuxer2.prototype._onInitSegment = function(type2, initSegment) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.INIT_SEGMENT, type2, initSegment); }); }; Transmuxer2.prototype._onMediaSegment = function(type2, mediaSegment) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_SEGMENT, type2, mediaSegment); }); }; Transmuxer2.prototype._onLoadingComplete = function() { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.LOADING_COMPLETE); }); }; Transmuxer2.prototype._onRecoveredEarlyEof = function() { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOVERED_EARLY_EOF); }); }; Transmuxer2.prototype._onMediaInfo = function(mediaInfo) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_INFO, mediaInfo); }); }; Transmuxer2.prototype._onMetaDataArrived = function(metadata) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.METADATA_ARRIVED, metadata); }); }; Transmuxer2.prototype._onScriptDataArrived = function(data) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.SCRIPTDATA_ARRIVED, data); }); }; Transmuxer2.prototype._onStatisticsInfo = function(statisticsInfo) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.STATISTICS_INFO, statisticsInfo); }); }; Transmuxer2.prototype._onIOError = function(type2, info) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.IO_ERROR, type2, info); }); }; Transmuxer2.prototype._onDemuxError = function(type2, info) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.DEMUX_ERROR, type2, info); }); }; Transmuxer2.prototype._onRecommendSeekpoint = function(milliseconds) { var _this = this; Promise.resolve().then(function() { _this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOMMEND_SEEKPOINT, milliseconds); }); }; Transmuxer2.prototype._onLoggingConfigChanged = function(config) { if (this._worker) { this._worker.postMessage({ cmd: "logging_config", param: config }); } }; Transmuxer2.prototype._onWorkerMessage = function(e) { var message = e.data; var data = message.data; if (message.msg === "destroyed" || this._workerDestroying) { this._workerDestroying = false; this._worker.terminate(); this._worker = null; return; } switch (message.msg) { case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.INIT_SEGMENT: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_SEGMENT: this._emitter.emit(message.msg, data.type, data.data); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.LOADING_COMPLETE: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOVERED_EARLY_EOF: this._emitter.emit(message.msg); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_INFO: Object.setPrototypeOf(data, _media_info_js__WEBPACK_IMPORTED_MODULE_6__.default.prototype); this._emitter.emit(message.msg, data); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.METADATA_ARRIVED: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.SCRIPTDATA_ARRIVED: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.STATISTICS_INFO: this._emitter.emit(message.msg, data); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.IO_ERROR: case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.DEMUX_ERROR: this._emitter.emit(message.msg, data.type, data.info); break; case _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOMMEND_SEEKPOINT: this._emitter.emit(message.msg, data); break; case "logcat_callback": _utils_logger_js__WEBPACK_IMPORTED_MODULE_2__.default.emitter.emit("log", data.type, data.logcat); break; } }; return Transmuxer2; }(); __webpack_exports__2["default"] = Transmuxer; }, "./src/core/transmuxing-controller.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = /* @__PURE__ */ __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/logger.js"); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/browser.js"); var _media_info_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/core/media-info.js"); var _demux_flv_demuxer_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/demux/flv-demuxer.js"); var _remux_mp4_remuxer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/remux/mp4-remuxer.js"); var _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/demux/demux-errors.js"); var _io_io_controller_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/io/io-controller.js"); var _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/core/transmuxing-events.js"); var TransmuxingController = function() { function TransmuxingController2(mediaDataSource, config) { this.TAG = "TransmuxingController"; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); this._config = config; if (!mediaDataSource.segments) { mediaDataSource.segments = [{ duration: mediaDataSource.duration, filesize: mediaDataSource.filesize, url: mediaDataSource.url }]; } if (typeof mediaDataSource.cors !== "boolean") { mediaDataSource.cors = true; } if (typeof mediaDataSource.withCredentials !== "boolean") { mediaDataSource.withCredentials = false; } this._mediaDataSource = mediaDataSource; this._currentSegmentIndex = 0; var totalDuration = 0; this._mediaDataSource.segments.forEach(function(segment) { segment.timestampBase = totalDuration; totalDuration += segment.duration; segment.cors = mediaDataSource.cors; segment.withCredentials = mediaDataSource.withCredentials; if (config.referrerPolicy) { segment.referrerPolicy = config.referrerPolicy; } }); if (!isNaN(totalDuration) && this._mediaDataSource.duration !== totalDuration) { this._mediaDataSource.duration = totalDuration; } this._mediaInfo = null; this._demuxer = null; this._remuxer = null; this._ioctl = null; this._pendingSeekTime = null; this._pendingResolveSeekPoint = null; this._statisticsReporter = null; } TransmuxingController2.prototype.destroy = function() { this._mediaInfo = null; this._mediaDataSource = null; if (this._statisticsReporter) { this._disableStatisticsReporter(); } if (this._ioctl) { this._ioctl.destroy(); this._ioctl = null; } if (this._demuxer) { this._demuxer.destroy(); this._demuxer = null; } if (this._remuxer) { this._remuxer.destroy(); this._remuxer = null; } this._emitter.removeAllListeners(); this._emitter = null; }; TransmuxingController2.prototype.on = function(event2, listener) { this._emitter.addListener(event2, listener); }; TransmuxingController2.prototype.off = function(event2, listener) { this._emitter.removeListener(event2, listener); }; TransmuxingController2.prototype.start = function() { this._loadSegment(0); this._enableStatisticsReporter(); }; TransmuxingController2.prototype._loadSegment = function(segmentIndex, optionalFrom) { this._currentSegmentIndex = segmentIndex; var dataSource = this._mediaDataSource.segments[segmentIndex]; var ioctl = this._ioctl = new _io_io_controller_js__WEBPACK_IMPORTED_MODULE_7__.default(dataSource, this._config, segmentIndex); ioctl.onError = this._onIOException.bind(this); ioctl.onSeeked = this._onIOSeeked.bind(this); ioctl.onComplete = this._onIOComplete.bind(this); ioctl.onRedirect = this._onIORedirect.bind(this); ioctl.onRecoveredEarlyEof = this._onIORecoveredEarlyEof.bind(this); if (optionalFrom) { this._demuxer.bindDataSource(this._ioctl); } else { ioctl.onDataArrival = this._onInitChunkArrival.bind(this); } ioctl.open(optionalFrom); }; TransmuxingController2.prototype.stop = function() { this._internalAbort(); this._disableStatisticsReporter(); }; TransmuxingController2.prototype._internalAbort = function() { if (this._ioctl) { this._ioctl.destroy(); this._ioctl = null; } }; TransmuxingController2.prototype.pause = function() { if (this._ioctl && this._ioctl.isWorking()) { this._ioctl.pause(); this._disableStatisticsReporter(); } }; TransmuxingController2.prototype.resume = function() { if (this._ioctl && this._ioctl.isPaused()) { this._ioctl.resume(); this._enableStatisticsReporter(); } }; TransmuxingController2.prototype.seek = function(milliseconds) { if (this._mediaInfo == null || !this._mediaInfo.isSeekable()) { return; } var targetSegmentIndex = this._searchSegmentIndexContains(milliseconds); if (targetSegmentIndex === this._currentSegmentIndex) { var segmentInfo = this._mediaInfo.segments[targetSegmentIndex]; if (segmentInfo == void 0) { this._pendingSeekTime = milliseconds; } else { var keyframe = segmentInfo.getNearestKeyframe(milliseconds); this._remuxer.seek(keyframe.milliseconds); this._ioctl.seek(keyframe.fileposition); this._pendingResolveSeekPoint = keyframe.milliseconds; } } else { var targetSegmentInfo = this._mediaInfo.segments[targetSegmentIndex]; if (targetSegmentInfo == void 0) { this._pendingSeekTime = milliseconds; this._internalAbort(); this._remuxer.seek(); this._remuxer.insertDiscontinuity(); this._loadSegment(targetSegmentIndex); } else { var keyframe = targetSegmentInfo.getNearestKeyframe(milliseconds); this._internalAbort(); this._remuxer.seek(milliseconds); this._remuxer.insertDiscontinuity(); this._demuxer.resetMediaInfo(); this._demuxer.timestampBase = this._mediaDataSource.segments[targetSegmentIndex].timestampBase; this._loadSegment(targetSegmentIndex, keyframe.fileposition); this._pendingResolveSeekPoint = keyframe.milliseconds; this._reportSegmentMediaInfo(targetSegmentIndex); } } this._enableStatisticsReporter(); }; TransmuxingController2.prototype._searchSegmentIndexContains = function(milliseconds) { var segments = this._mediaDataSource.segments; var idx = segments.length - 1; for (var i2 = 0; i2 < segments.length; i2++) { if (milliseconds < segments[i2].timestampBase) { idx = i2 - 1; break; } } return idx; }; TransmuxingController2.prototype._onInitChunkArrival = function(data, byteStart) { var _this = this; var probeData = null; var consumed = 0; if (byteStart > 0) { this._demuxer.bindDataSource(this._ioctl); this._demuxer.timestampBase = this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase; consumed = this._demuxer.parseChunks(data, byteStart); } else if ((probeData = _demux_flv_demuxer_js__WEBPACK_IMPORTED_MODULE_4__.default.probe(data)).match) { this._demuxer = new _demux_flv_demuxer_js__WEBPACK_IMPORTED_MODULE_4__.default(probeData, this._config); if (!this._remuxer) { this._remuxer = new _remux_mp4_remuxer_js__WEBPACK_IMPORTED_MODULE_5__.default(this._config); } var mds = this._mediaDataSource; if (mds.duration != void 0 && !isNaN(mds.duration)) { this._demuxer.overridedDuration = mds.duration; } if (typeof mds.hasAudio === "boolean") { this._demuxer.overridedHasAudio = mds.hasAudio; } if (typeof mds.hasVideo === "boolean") { this._demuxer.overridedHasVideo = mds.hasVideo; } this._demuxer.timestampBase = mds.segments[this._currentSegmentIndex].timestampBase; this._demuxer.onError = this._onDemuxException.bind(this); this._demuxer.onMediaInfo = this._onMediaInfo.bind(this); this._demuxer.onMetaDataArrived = this._onMetaDataArrived.bind(this); this._demuxer.onScriptDataArrived = this._onScriptDataArrived.bind(this); this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)); this._remuxer.onInitSegment = this._onRemuxerInitSegmentArrival.bind(this); this._remuxer.onMediaSegment = this._onRemuxerMediaSegmentArrival.bind(this); consumed = this._demuxer.parseChunks(data, byteStart); } else { probeData = null; _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, "Non-FLV, Unsupported media type!"); Promise.resolve().then(function() { _this._internalAbort(); }); this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.DEMUX_ERROR, _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_6__.default.FORMAT_UNSUPPORTED, "Non-FLV, Unsupported media type"); consumed = 0; } return consumed; }; TransmuxingController2.prototype._onMediaInfo = function(mediaInfo) { var _this = this; if (this._mediaInfo == null) { this._mediaInfo = Object.assign({}, mediaInfo); this._mediaInfo.keyframesIndex = null; this._mediaInfo.segments = []; this._mediaInfo.segmentCount = this._mediaDataSource.segments.length; Object.setPrototypeOf(this._mediaInfo, _media_info_js__WEBPACK_IMPORTED_MODULE_3__.default.prototype); } var segmentInfo = Object.assign({}, mediaInfo); Object.setPrototypeOf(segmentInfo, _media_info_js__WEBPACK_IMPORTED_MODULE_3__.default.prototype); this._mediaInfo.segments[this._currentSegmentIndex] = segmentInfo; this._reportSegmentMediaInfo(this._currentSegmentIndex); if (this._pendingSeekTime != null) { Promise.resolve().then(function() { var target = _this._pendingSeekTime; _this._pendingSeekTime = null; _this.seek(target); }); } }; TransmuxingController2.prototype._onMetaDataArrived = function(metadata) { this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.METADATA_ARRIVED, metadata); }; TransmuxingController2.prototype._onScriptDataArrived = function(data) { this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.SCRIPTDATA_ARRIVED, data); }; TransmuxingController2.prototype._onIOSeeked = function() { this._remuxer.insertDiscontinuity(); }; TransmuxingController2.prototype._onIOComplete = function(extraData) { var segmentIndex = extraData; var nextSegmentIndex = segmentIndex + 1; if (nextSegmentIndex < this._mediaDataSource.segments.length) { this._internalAbort(); this._remuxer.flushStashedSamples(); this._loadSegment(nextSegmentIndex); } else { this._remuxer.flushStashedSamples(); this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.LOADING_COMPLETE); this._disableStatisticsReporter(); } }; TransmuxingController2.prototype._onIORedirect = function(redirectedURL) { var segmentIndex = this._ioctl.extraData; this._mediaDataSource.segments[segmentIndex].redirectedURL = redirectedURL; }; TransmuxingController2.prototype._onIORecoveredEarlyEof = function() { this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.RECOVERED_EARLY_EOF); }; TransmuxingController2.prototype._onIOException = function(type2, info) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, "IOException: type = " + type2 + ", code = " + info.code + ", msg = " + info.msg); this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.IO_ERROR, type2, info); this._disableStatisticsReporter(); }; TransmuxingController2.prototype._onDemuxException = function(type2, info) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.e(this.TAG, "DemuxException: type = " + type2 + ", info = " + info); this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.DEMUX_ERROR, type2, info); }; TransmuxingController2.prototype._onRemuxerInitSegmentArrival = function(type2, initSegment) { this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.INIT_SEGMENT, type2, initSegment); }; TransmuxingController2.prototype._onRemuxerMediaSegmentArrival = function(type2, mediaSegment) { if (this._pendingSeekTime != null) { return; } this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.MEDIA_SEGMENT, type2, mediaSegment); if (this._pendingResolveSeekPoint != null && type2 === "video") { var syncPoints = mediaSegment.info.syncPoints; var seekpoint = this._pendingResolveSeekPoint; this._pendingResolveSeekPoint = null; if (_utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari && syncPoints.length > 0 && syncPoints[0].originalDts === seekpoint) { seekpoint = syncPoints[0].pts; } this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.RECOMMEND_SEEKPOINT, seekpoint); } }; TransmuxingController2.prototype._enableStatisticsReporter = function() { if (this._statisticsReporter == null) { this._statisticsReporter = self.setInterval(this._reportStatisticsInfo.bind(this), this._config.statisticsInfoReportInterval); } }; TransmuxingController2.prototype._disableStatisticsReporter = function() { if (this._statisticsReporter) { self.clearInterval(this._statisticsReporter); this._statisticsReporter = null; } }; TransmuxingController2.prototype._reportSegmentMediaInfo = function(segmentIndex) { var segmentInfo = this._mediaInfo.segments[segmentIndex]; var exportInfo = Object.assign({}, segmentInfo); exportInfo.duration = this._mediaInfo.duration; exportInfo.segmentCount = this._mediaInfo.segmentCount; delete exportInfo.segments; delete exportInfo.keyframesIndex; this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.MEDIA_INFO, exportInfo); }; TransmuxingController2.prototype._reportStatisticsInfo = function() { var info = {}; info.url = this._ioctl.currentURL; info.hasRedirect = this._ioctl.hasRedirect; if (info.hasRedirect) { info.redirectedURL = this._ioctl.currentRedirectedURL; } info.speed = this._ioctl.currentSpeed; info.loaderType = this._ioctl.loaderType; info.currentSegmentIndex = this._currentSegmentIndex; info.totalSegmentCount = this._mediaDataSource.segments.length; this._emitter.emit(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_8__.default.STATISTICS_INFO, info); }; return TransmuxingController2; }(); __webpack_exports__2["default"] = TransmuxingController; }, "./src/core/transmuxing-events.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var TransmuxingEvents = { IO_ERROR: "io_error", DEMUX_ERROR: "demux_error", INIT_SEGMENT: "init_segment", MEDIA_SEGMENT: "media_segment", LOADING_COMPLETE: "loading_complete", RECOVERED_EARLY_EOF: "recovered_early_eof", MEDIA_INFO: "media_info", METADATA_ARRIVED: "metadata_arrived", SCRIPTDATA_ARRIVED: "scriptdata_arrived", STATISTICS_INFO: "statistics_info", RECOMMEND_SEEKPOINT: "recommend_seekpoint" }; __webpack_exports__2["default"] = TransmuxingEvents; }, "./src/core/transmuxing-worker.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logging-control.js"); var _utils_polyfill_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/polyfill.js"); var _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/core/transmuxing-controller.js"); var _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/core/transmuxing-events.js"); var TransmuxingWorker = function(self2) { var controller = null; var logcatListener = onLogcatCallback.bind(this); _utils_polyfill_js__WEBPACK_IMPORTED_MODULE_1__.default.install(); self2.addEventListener("message", function(e) { switch (e.data.cmd) { case "init": controller = new _transmuxing_controller_js__WEBPACK_IMPORTED_MODULE_2__.default(e.data.param[0], e.data.param[1]); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.IO_ERROR, onIOError.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.DEMUX_ERROR, onDemuxError.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.INIT_SEGMENT, onInitSegment.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_SEGMENT, onMediaSegment.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.LOADING_COMPLETE, onLoadingComplete.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOVERED_EARLY_EOF, onRecoveredEarlyEof.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO, onMediaInfo.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.METADATA_ARRIVED, onMetaDataArrived.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.SCRIPTDATA_ARRIVED, onScriptDataArrived.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO, onStatisticsInfo.bind(this)); controller.on(_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOMMEND_SEEKPOINT, onRecommendSeekpoint.bind(this)); break; case "destroy": if (controller) { controller.destroy(); controller = null; } self2.postMessage({ msg: "destroyed" }); break; case "start": controller.start(); break; case "stop": controller.stop(); break; case "seek": controller.seek(e.data.param); break; case "pause": controller.pause(); break; case "resume": controller.resume(); break; case "logging_config": { var config = e.data.param; _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_0__.default.applyConfig(config); if (config.enableCallback === true) { _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_0__.default.addLogListener(logcatListener); } else { _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_0__.default.removeLogListener(logcatListener); } break; } } }); function onInitSegment(type2, initSegment) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.INIT_SEGMENT, data: { type: type2, data: initSegment } }; self2.postMessage(obj, [initSegment.data]); } function onMediaSegment(type2, mediaSegment) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_SEGMENT, data: { type: type2, data: mediaSegment } }; self2.postMessage(obj, [mediaSegment.data]); } function onLoadingComplete() { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.LOADING_COMPLETE }; self2.postMessage(obj); } function onRecoveredEarlyEof() { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOVERED_EARLY_EOF }; self2.postMessage(obj); } function onMediaInfo(mediaInfo) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO, data: mediaInfo }; self2.postMessage(obj); } function onMetaDataArrived(metadata) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.METADATA_ARRIVED, data: metadata }; self2.postMessage(obj); } function onScriptDataArrived(data) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.SCRIPTDATA_ARRIVED, data }; self2.postMessage(obj); } function onStatisticsInfo(statInfo) { var obj = { msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO, data: statInfo }; self2.postMessage(obj); } function onIOError(type2, info) { self2.postMessage({ msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.IO_ERROR, data: { type: type2, info } }); } function onDemuxError(type2, info) { self2.postMessage({ msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.DEMUX_ERROR, data: { type: type2, info } }); } function onRecommendSeekpoint(milliseconds) { self2.postMessage({ msg: _transmuxing_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOMMEND_SEEKPOINT, data: milliseconds }); } function onLogcatCallback(type2, str) { self2.postMessage({ msg: "logcat_callback", data: { type: type2, logcat: str } }); } }; __webpack_exports__2["default"] = TransmuxingWorker; }, "./src/demux/amf-parser.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _utils_utf8_conv_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/utf8-conv.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/exception.js"); var le = function() { var buf = new ArrayBuffer(2); new DataView(buf).setInt16(0, 256, true); return new Int16Array(buf)[0] === 256; }(); var AMF = function() { function AMF2() { } AMF2.parseScriptData = function(arrayBuffer, dataOffset, dataSize) { var data = {}; try { var name_1 = AMF2.parseValue(arrayBuffer, dataOffset, dataSize); var value = AMF2.parseValue(arrayBuffer, dataOffset + name_1.size, dataSize - name_1.size); data[name_1.data] = value.data; } catch (e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.e("AMF", e.toString()); } return data; }; AMF2.parseObject = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 3) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data not enough when parse ScriptDataObject"); } var name = AMF2.parseString(arrayBuffer, dataOffset, dataSize); var value = AMF2.parseValue(arrayBuffer, dataOffset + name.size, dataSize - name.size); var isObjectEnd = value.objectEnd; return { data: { name: name.data, value: value.data }, size: name.size + value.size, objectEnd: isObjectEnd }; }; AMF2.parseVariable = function(arrayBuffer, dataOffset, dataSize) { return AMF2.parseObject(arrayBuffer, dataOffset, dataSize); }; AMF2.parseString = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 2) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data not enough when parse String"); } var v = new DataView(arrayBuffer, dataOffset, dataSize); var length = v.getUint16(0, !le); var str; if (length > 0) { str = (0, _utils_utf8_conv_js__WEBPACK_IMPORTED_MODULE_1__.default)(new Uint8Array(arrayBuffer, dataOffset + 2, length)); } else { str = ""; } return { data: str, size: 2 + length }; }; AMF2.parseLongString = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 4) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data not enough when parse LongString"); } var v = new DataView(arrayBuffer, dataOffset, dataSize); var length = v.getUint32(0, !le); var str; if (length > 0) { str = (0, _utils_utf8_conv_js__WEBPACK_IMPORTED_MODULE_1__.default)(new Uint8Array(arrayBuffer, dataOffset + 4, length)); } else { str = ""; } return { data: str, size: 4 + length }; }; AMF2.parseDate = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 10) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data size invalid when parse Date"); } var v = new DataView(arrayBuffer, dataOffset, dataSize); var timestamp = v.getFloat64(0, !le); var localTimeOffset = v.getInt16(8, !le); timestamp += localTimeOffset * 60 * 1e3; return { data: new Date(timestamp), size: 8 + 2 }; }; AMF2.parseValue = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 1) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.IllegalStateException("Data not enough when parse Value"); } var v = new DataView(arrayBuffer, dataOffset, dataSize); var offset = 1; var type2 = v.getUint8(0); var value; var objectEnd = false; try { switch (type2) { case 0: value = v.getFloat64(1, !le); offset += 8; break; case 1: { var b = v.getUint8(1); value = b ? true : false; offset += 1; break; } case 2: { var amfstr = AMF2.parseString(arrayBuffer, dataOffset + 1, dataSize - 1); value = amfstr.data; offset += amfstr.size; break; } case 3: { value = {}; var terminal = 0; if ((v.getUint32(dataSize - 4, !le) & 16777215) === 9) { terminal = 3; } while (offset < dataSize - 4) { var amfobj = AMF2.parseObject(arrayBuffer, dataOffset + offset, dataSize - offset - terminal); if (amfobj.objectEnd) break; value[amfobj.data.name] = amfobj.data.value; offset += amfobj.size; } if (offset <= dataSize - 3) { var marker = v.getUint32(offset - 1, !le) & 16777215; if (marker === 9) { offset += 3; } } break; } case 8: { value = {}; offset += 4; var terminal = 0; if ((v.getUint32(dataSize - 4, !le) & 16777215) === 9) { terminal = 3; } while (offset < dataSize - 8) { var amfvar = AMF2.parseVariable(arrayBuffer, dataOffset + offset, dataSize - offset - terminal); if (amfvar.objectEnd) break; value[amfvar.data.name] = amfvar.data.value; offset += amfvar.size; } if (offset <= dataSize - 3) { var marker = v.getUint32(offset - 1, !le) & 16777215; if (marker === 9) { offset += 3; } } break; } case 9: value = void 0; offset = 1; objectEnd = true; break; case 10: { value = []; var strictArrayLength = v.getUint32(1, !le); offset += 4; for (var i2 = 0; i2 < strictArrayLength; i2++) { var val = AMF2.parseValue(arrayBuffer, dataOffset + offset, dataSize - offset); value.push(val.data); offset += val.size; } break; } case 11: { var date = AMF2.parseDate(arrayBuffer, dataOffset + 1, dataSize - 1); value = date.data; offset += date.size; break; } case 12: { var amfLongStr = AMF2.parseString(arrayBuffer, dataOffset + 1, dataSize - 1); value = amfLongStr.data; offset += amfLongStr.size; break; } default: offset = dataSize; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w("AMF", "Unsupported AMF value type " + type2); } } catch (e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.e("AMF", e.toString()); } return { data: value, size: offset, objectEnd }; }; return AMF2; }(); __webpack_exports__2["default"] = AMF; }, "./src/demux/demux-errors.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var DemuxErrors = { OK: "OK", FORMAT_ERROR: "FormatError", FORMAT_UNSUPPORTED: "FormatUnsupported", CODEC_UNSUPPORTED: "CodecUnsupported" }; __webpack_exports__2["default"] = DemuxErrors; }, "./src/demux/exp-golomb.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/exception.js"); var ExpGolomb = function() { function ExpGolomb2(uint8array) { this.TAG = "ExpGolomb"; this._buffer = uint8array; this._buffer_index = 0; this._total_bytes = uint8array.byteLength; this._total_bits = uint8array.byteLength * 8; this._current_word = 0; this._current_word_bits_left = 0; } ExpGolomb2.prototype.destroy = function() { this._buffer = null; }; ExpGolomb2.prototype._fillCurrentWord = function() { var buffer_bytes_left = this._total_bytes - this._buffer_index; if (buffer_bytes_left <= 0) throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__.IllegalStateException("ExpGolomb: _fillCurrentWord() but no bytes available"); var bytes_read = Math.min(4, buffer_bytes_left); var word = new Uint8Array(4); word.set(this._buffer.subarray(this._buffer_index, this._buffer_index + bytes_read)); this._current_word = new DataView(word.buffer).getUint32(0, false); this._buffer_index += bytes_read; this._current_word_bits_left = bytes_read * 8; }; ExpGolomb2.prototype.readBits = function(bits) { if (bits > 32) throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__.InvalidArgumentException("ExpGolomb: readBits() bits exceeded max 32bits!"); if (bits <= this._current_word_bits_left) { var result_1 = this._current_word >>> 32 - bits; this._current_word <<= bits; this._current_word_bits_left -= bits; return result_1; } var result = this._current_word_bits_left ? this._current_word : 0; result = result >>> 32 - this._current_word_bits_left; var bits_need_left = bits - this._current_word_bits_left; this._fillCurrentWord(); var bits_read_next = Math.min(bits_need_left, this._current_word_bits_left); var result2 = this._current_word >>> 32 - bits_read_next; this._current_word <<= bits_read_next; this._current_word_bits_left -= bits_read_next; result = result << bits_read_next | result2; return result; }; ExpGolomb2.prototype.readBool = function() { return this.readBits(1) === 1; }; ExpGolomb2.prototype.readByte = function() { return this.readBits(8); }; ExpGolomb2.prototype._skipLeadingZero = function() { var zero_count; for (zero_count = 0; zero_count < this._current_word_bits_left; zero_count++) { if (0 !== (this._current_word & 2147483648 >>> zero_count)) { this._current_word <<= zero_count; this._current_word_bits_left -= zero_count; return zero_count; } } this._fillCurrentWord(); return zero_count + this._skipLeadingZero(); }; ExpGolomb2.prototype.readUEG = function() { var leading_zeros = this._skipLeadingZero(); return this.readBits(leading_zeros + 1) - 1; }; ExpGolomb2.prototype.readSEG = function() { var value = this.readUEG(); if (value & 1) { return value + 1 >>> 1; } else { return -1 * (value >>> 1); } }; return ExpGolomb2; }(); __webpack_exports__2["default"] = ExpGolomb; }, "./src/demux/flv-demuxer.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _amf_parser_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/demux/amf-parser.js"); var _sps_parser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/demux/sps-parser.js"); var _demux_errors_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/demux/demux-errors.js"); var _core_media_info_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/media-info.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/utils/exception.js"); function ReadBig32(array, index2) { return array[index2] << 24 | array[index2 + 1] << 16 | array[index2 + 2] << 8 | array[index2 + 3]; } var FLVDemuxer = function() { function FLVDemuxer2(probeData, config) { this.TAG = "FLVDemuxer"; this._config = config; this._onError = null; this._onMediaInfo = null; this._onMetaDataArrived = null; this._onScriptDataArrived = null; this._onTrackMetadata = null; this._onDataAvailable = null; this._dataOffset = probeData.dataOffset; this._firstParse = true; this._dispatch = false; this._hasAudio = probeData.hasAudioTrack; this._hasVideo = probeData.hasVideoTrack; this._hasAudioFlagOverrided = false; this._hasVideoFlagOverrided = false; this._audioInitialMetadataDispatched = false; this._videoInitialMetadataDispatched = false; this._mediaInfo = new _core_media_info_js__WEBPACK_IMPORTED_MODULE_4__.default(); this._mediaInfo.hasAudio = this._hasAudio; this._mediaInfo.hasVideo = this._hasVideo; this._metadata = null; this._audioMetadata = null; this._videoMetadata = null; this._naluLengthSize = 4; this._timestampBase = 0; this._timescale = 1e3; this._duration = 0; this._durationOverrided = false; this._referenceFrameRate = { fixed: true, fps: 23.976, fps_num: 23976, fps_den: 1e3 }; this._flvSoundRateTable = [5500, 11025, 22050, 44100, 48e3]; this._mpegSamplingRates = [ 96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350 ]; this._mpegAudioV10SampleRateTable = [44100, 48e3, 32e3, 0]; this._mpegAudioV20SampleRateTable = [22050, 24e3, 16e3, 0]; this._mpegAudioV25SampleRateTable = [11025, 12e3, 8e3, 0]; this._mpegAudioL1BitRateTable = [0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, -1]; this._mpegAudioL2BitRateTable = [0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, -1]; this._mpegAudioL3BitRateTable = [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1]; this._videoTrack = { type: "video", id: 1, sequenceNumber: 0, samples: [], length: 0 }; this._audioTrack = { type: "audio", id: 2, sequenceNumber: 0, samples: [], length: 0 }; this._littleEndian = function() { var buf = new ArrayBuffer(2); new DataView(buf).setInt16(0, 256, true); return new Int16Array(buf)[0] === 256; }(); } FLVDemuxer2.prototype.destroy = function() { this._mediaInfo = null; this._metadata = null; this._audioMetadata = null; this._videoMetadata = null; this._videoTrack = null; this._audioTrack = null; this._onError = null; this._onMediaInfo = null; this._onMetaDataArrived = null; this._onScriptDataArrived = null; this._onTrackMetadata = null; this._onDataAvailable = null; }; FLVDemuxer2.probe = function(buffer) { var data = new Uint8Array(buffer); var mismatch = { match: false }; if (data[0] !== 70 || data[1] !== 76 || data[2] !== 86 || data[3] !== 1) { return mismatch; } var hasAudio = (data[4] & 4) >>> 2 !== 0; var hasVideo = (data[4] & 1) !== 0; var offset = ReadBig32(data, 5); if (offset < 9) { return mismatch; } return { match: true, consumed: offset, dataOffset: offset, hasAudioTrack: hasAudio, hasVideoTrack: hasVideo }; }; FLVDemuxer2.prototype.bindDataSource = function(loader) { loader.onDataArrival = this.parseChunks.bind(this); return this; }; Object.defineProperty(FLVDemuxer2.prototype, "onTrackMetadata", { get: function() { return this._onTrackMetadata; }, set: function(callback2) { this._onTrackMetadata = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onMediaInfo", { get: function() { return this._onMediaInfo; }, set: function(callback2) { this._onMediaInfo = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onMetaDataArrived", { get: function() { return this._onMetaDataArrived; }, set: function(callback2) { this._onMetaDataArrived = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onScriptDataArrived", { get: function() { return this._onScriptDataArrived; }, set: function(callback2) { this._onScriptDataArrived = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onError", { get: function() { return this._onError; }, set: function(callback2) { this._onError = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "onDataAvailable", { get: function() { return this._onDataAvailable; }, set: function(callback2) { this._onDataAvailable = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "timestampBase", { get: function() { return this._timestampBase; }, set: function(base2) { this._timestampBase = base2; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "overridedDuration", { get: function() { return this._duration; }, set: function(duration5) { this._durationOverrided = true; this._duration = duration5; this._mediaInfo.duration = duration5; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "overridedHasAudio", { set: function(hasAudio) { this._hasAudioFlagOverrided = true; this._hasAudio = hasAudio; this._mediaInfo.hasAudio = hasAudio; }, enumerable: false, configurable: true }); Object.defineProperty(FLVDemuxer2.prototype, "overridedHasVideo", { set: function(hasVideo) { this._hasVideoFlagOverrided = true; this._hasVideo = hasVideo; this._mediaInfo.hasVideo = hasVideo; }, enumerable: false, configurable: true }); FLVDemuxer2.prototype.resetMediaInfo = function() { this._mediaInfo = new _core_media_info_js__WEBPACK_IMPORTED_MODULE_4__.default(); }; FLVDemuxer2.prototype._isInitialMetadataDispatched = function() { if (this._hasAudio && this._hasVideo) { return this._audioInitialMetadataDispatched && this._videoInitialMetadataDispatched; } if (this._hasAudio && !this._hasVideo) { return this._audioInitialMetadataDispatched; } if (!this._hasAudio && this._hasVideo) { return this._videoInitialMetadataDispatched; } return false; }; FLVDemuxer2.prototype.parseChunks = function(chunk, byteStart) { if (!this._onError || !this._onMediaInfo || !this._onTrackMetadata || !this._onDataAvailable) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__.IllegalStateException("Flv: onError & onMediaInfo & onTrackMetadata & onDataAvailable callback must be specified"); } var offset = 0; var le = this._littleEndian; if (byteStart === 0) { if (chunk.byteLength > 13) { var probeData = FLVDemuxer2.probe(chunk); offset = probeData.dataOffset; } else { return 0; } } if (this._firstParse) { this._firstParse = false; if (byteStart + offset !== this._dataOffset) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "First time parsing but chunk byteStart invalid!"); } var v = new DataView(chunk, offset); var prevTagSize0 = v.getUint32(0, !le); if (prevTagSize0 !== 0) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "PrevTagSize0 !== 0 !!!"); } offset += 4; } while (offset < chunk.byteLength) { this._dispatch = true; var v = new DataView(chunk, offset); if (offset + 11 + 4 > chunk.byteLength) { break; } var tagType = v.getUint8(0); var dataSize = v.getUint32(0, !le) & 16777215; if (offset + 11 + dataSize + 4 > chunk.byteLength) { break; } if (tagType !== 8 && tagType !== 9 && tagType !== 18) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Unsupported tag type " + tagType + ", skipped"); offset += 11 + dataSize + 4; continue; } var ts22 = v.getUint8(4); var ts1 = v.getUint8(5); var ts0 = v.getUint8(6); var ts3 = v.getUint8(7); var timestamp = ts0 | ts1 << 8 | ts22 << 16 | ts3 << 24; var streamId = v.getUint32(7, !le) & 16777215; if (streamId !== 0) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Meet tag which has StreamID != 0!"); } var dataOffset = offset + 11; switch (tagType) { case 8: this._parseAudioData(chunk, dataOffset, dataSize, timestamp); break; case 9: this._parseVideoData(chunk, dataOffset, dataSize, timestamp, byteStart + offset); break; case 18: this._parseScriptData(chunk, dataOffset, dataSize); break; } var prevTagSize = v.getUint32(11 + dataSize, !le); if (prevTagSize !== 11 + dataSize) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Invalid PrevTagSize " + prevTagSize); } offset += 11 + dataSize + 4; } if (this._isInitialMetadataDispatched()) { if (this._dispatch && (this._audioTrack.length || this._videoTrack.length)) { this._onDataAvailable(this._audioTrack, this._videoTrack); } } return offset; }; FLVDemuxer2.prototype._parseScriptData = function(arrayBuffer, dataOffset, dataSize) { var scriptData = _amf_parser_js__WEBPACK_IMPORTED_MODULE_1__.default.parseScriptData(arrayBuffer, dataOffset, dataSize); if (scriptData.hasOwnProperty("onMetaData")) { if (scriptData.onMetaData == null || typeof scriptData.onMetaData !== "object") { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Invalid onMetaData structure!"); return; } if (this._metadata) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Found another onMetaData tag!"); } this._metadata = scriptData; var onMetaData = this._metadata.onMetaData; if (this._onMetaDataArrived) { this._onMetaDataArrived(Object.assign({}, onMetaData)); } if (typeof onMetaData.hasAudio === "boolean") { if (this._hasAudioFlagOverrided === false) { this._hasAudio = onMetaData.hasAudio; this._mediaInfo.hasAudio = this._hasAudio; } } if (typeof onMetaData.hasVideo === "boolean") { if (this._hasVideoFlagOverrided === false) { this._hasVideo = onMetaData.hasVideo; this._mediaInfo.hasVideo = this._hasVideo; } } if (typeof onMetaData.audiodatarate === "number") { this._mediaInfo.audioDataRate = onMetaData.audiodatarate; } if (typeof onMetaData.videodatarate === "number") { this._mediaInfo.videoDataRate = onMetaData.videodatarate; } if (typeof onMetaData.width === "number") { this._mediaInfo.width = onMetaData.width; } if (typeof onMetaData.height === "number") { this._mediaInfo.height = onMetaData.height; } if (typeof onMetaData.duration === "number") { if (!this._durationOverrided) { var duration5 = Math.floor(onMetaData.duration * this._timescale); this._duration = duration5; this._mediaInfo.duration = duration5; } } else { this._mediaInfo.duration = 0; } if (typeof onMetaData.framerate === "number") { var fps_num = Math.floor(onMetaData.framerate * 1e3); if (fps_num > 0) { var fps = fps_num / 1e3; this._referenceFrameRate.fixed = true; this._referenceFrameRate.fps = fps; this._referenceFrameRate.fps_num = fps_num; this._referenceFrameRate.fps_den = 1e3; this._mediaInfo.fps = fps; } } if (typeof onMetaData.keyframes === "object") { this._mediaInfo.hasKeyframesIndex = true; var keyframes = onMetaData.keyframes; this._mediaInfo.keyframesIndex = this._parseKeyframesIndex(keyframes); onMetaData.keyframes = null; } else { this._mediaInfo.hasKeyframesIndex = false; } this._dispatch = false; this._mediaInfo.metadata = onMetaData; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "Parsed onMetaData"); if (this._mediaInfo.isComplete()) { this._onMediaInfo(this._mediaInfo); } } if (Object.keys(scriptData).length > 0) { if (this._onScriptDataArrived) { this._onScriptDataArrived(Object.assign({}, scriptData)); } } }; FLVDemuxer2.prototype._parseKeyframesIndex = function(keyframes) { var times = []; var filepositions = []; for (var i2 = 1; i2 < keyframes.times.length; i2++) { var time = this._timestampBase + Math.floor(keyframes.times[i2] * 1e3); times.push(time); filepositions.push(keyframes.filepositions[i2]); } return { times, filepositions }; }; FLVDemuxer2.prototype._parseAudioData = function(arrayBuffer, dataOffset, dataSize, tagTimestamp) { if (dataSize <= 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid audio packet, missing SoundData payload!"); return; } if (this._hasAudioFlagOverrided === true && this._hasAudio === false) { return; } this._littleEndian; var v = new DataView(arrayBuffer, dataOffset, dataSize); var soundSpec = v.getUint8(0); var soundFormat = soundSpec >>> 4; if (soundFormat !== 2 && soundFormat !== 10) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.CODEC_UNSUPPORTED, "Flv: Unsupported audio codec idx: " + soundFormat); return; } var soundRate = 0; var soundRateIndex = (soundSpec & 12) >>> 2; if (soundRateIndex >= 0 && soundRateIndex <= 4) { soundRate = this._flvSoundRateTable[soundRateIndex]; } else { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid audio sample rate idx: " + soundRateIndex); return; } var soundType = soundSpec & 1; var meta2 = this._audioMetadata; var track = this._audioTrack; if (!meta2) { if (this._hasAudio === false && this._hasAudioFlagOverrided === false) { this._hasAudio = true; this._mediaInfo.hasAudio = true; } meta2 = this._audioMetadata = {}; meta2.type = "audio"; meta2.id = track.id; meta2.timescale = this._timescale; meta2.duration = this._duration; meta2.audioSampleRate = soundRate; meta2.channelCount = soundType === 0 ? 1 : 2; } if (soundFormat === 10) { var aacData = this._parseAACAudioData(arrayBuffer, dataOffset + 1, dataSize - 1); if (aacData == void 0) { return; } if (aacData.packetType === 0) { if (meta2.config) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Found another AudioSpecificConfig!"); } var misc = aacData.data; meta2.audioSampleRate = misc.samplingRate; meta2.channelCount = misc.channelCount; meta2.codec = misc.codec; meta2.originalCodec = misc.originalCodec; meta2.config = misc.config; meta2.refSampleDuration = 1024 / meta2.audioSampleRate * meta2.timescale; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "Parsed AudioSpecificConfig"); if (this._isInitialMetadataDispatched()) { if (this._dispatch && (this._audioTrack.length || this._videoTrack.length)) { this._onDataAvailable(this._audioTrack, this._videoTrack); } } else { this._audioInitialMetadataDispatched = true; } this._dispatch = false; this._onTrackMetadata("audio", meta2); var mi = this._mediaInfo; mi.audioCodec = meta2.originalCodec; mi.audioSampleRate = meta2.audioSampleRate; mi.audioChannelCount = meta2.channelCount; if (mi.hasVideo) { if (mi.videoCodec != null) { mi.mimeType = 'video/x-flv; codecs="' + mi.videoCodec + "," + mi.audioCodec + '"'; } } else { mi.mimeType = 'video/x-flv; codecs="' + mi.audioCodec + '"'; } if (mi.isComplete()) { this._onMediaInfo(mi); } } else if (aacData.packetType === 1) { var dts = this._timestampBase + tagTimestamp; var aacSample = { unit: aacData.data, length: aacData.data.byteLength, dts, pts: dts }; track.samples.push(aacSample); track.length += aacData.data.length; } else { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.e(this.TAG, "Flv: Unsupported AAC data type " + aacData.packetType); } } else if (soundFormat === 2) { if (!meta2.codec) { var misc = this._parseMP3AudioData(arrayBuffer, dataOffset + 1, dataSize - 1, true); if (misc == void 0) { return; } meta2.audioSampleRate = misc.samplingRate; meta2.channelCount = misc.channelCount; meta2.codec = misc.codec; meta2.originalCodec = misc.originalCodec; meta2.refSampleDuration = 1152 / meta2.audioSampleRate * meta2.timescale; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "Parsed MPEG Audio Frame Header"); this._audioInitialMetadataDispatched = true; this._onTrackMetadata("audio", meta2); var mi = this._mediaInfo; mi.audioCodec = meta2.codec; mi.audioSampleRate = meta2.audioSampleRate; mi.audioChannelCount = meta2.channelCount; mi.audioDataRate = misc.bitRate; if (mi.hasVideo) { if (mi.videoCodec != null) { mi.mimeType = 'video/x-flv; codecs="' + mi.videoCodec + "," + mi.audioCodec + '"'; } } else { mi.mimeType = 'video/x-flv; codecs="' + mi.audioCodec + '"'; } if (mi.isComplete()) { this._onMediaInfo(mi); } } var data = this._parseMP3AudioData(arrayBuffer, dataOffset + 1, dataSize - 1, false); if (data == void 0) { return; } var dts = this._timestampBase + tagTimestamp; var mp3Sample = { unit: data, length: data.byteLength, dts, pts: dts }; track.samples.push(mp3Sample); track.length += data.length; } }; FLVDemuxer2.prototype._parseAACAudioData = function(arrayBuffer, dataOffset, dataSize) { if (dataSize <= 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid AAC packet, missing AACPacketType or/and Data!"); return; } var result = {}; var array = new Uint8Array(arrayBuffer, dataOffset, dataSize); result.packetType = array[0]; if (array[0] === 0) { result.data = this._parseAACAudioSpecificConfig(arrayBuffer, dataOffset + 1, dataSize - 1); } else { result.data = array.subarray(1); } return result; }; FLVDemuxer2.prototype._parseAACAudioSpecificConfig = function(arrayBuffer, dataOffset, dataSize) { var array = new Uint8Array(arrayBuffer, dataOffset, dataSize); var config = null; var audioObjectType = 0; var originalAudioObjectType = 0; var samplingIndex = 0; var extensionSamplingIndex = null; audioObjectType = originalAudioObjectType = array[0] >>> 3; samplingIndex = (array[0] & 7) << 1 | array[1] >>> 7; if (samplingIndex < 0 || samplingIndex >= this._mpegSamplingRates.length) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: AAC invalid sampling frequency index!"); return; } var samplingFrequence = this._mpegSamplingRates[samplingIndex]; var channelConfig = (array[1] & 120) >>> 3; if (channelConfig < 0 || channelConfig >= 8) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: AAC invalid channel configuration"); return; } if (audioObjectType === 5) { extensionSamplingIndex = (array[1] & 7) << 1 | array[2] >>> 7; (array[2] & 124) >>> 2; } var userAgent = self.navigator.userAgent.toLowerCase(); if (userAgent.indexOf("firefox") !== -1) { if (samplingIndex >= 6) { audioObjectType = 5; config = new Array(4); extensionSamplingIndex = samplingIndex - 3; } else { audioObjectType = 2; config = new Array(2); extensionSamplingIndex = samplingIndex; } } else if (userAgent.indexOf("android") !== -1) { audioObjectType = 2; config = new Array(2); extensionSamplingIndex = samplingIndex; } else { audioObjectType = 5; extensionSamplingIndex = samplingIndex; config = new Array(4); if (samplingIndex >= 6) { extensionSamplingIndex = samplingIndex - 3; } else if (channelConfig === 1) { audioObjectType = 2; config = new Array(2); extensionSamplingIndex = samplingIndex; } } config[0] = audioObjectType << 3; config[0] |= (samplingIndex & 15) >>> 1; config[1] = (samplingIndex & 15) << 7; config[1] |= (channelConfig & 15) << 3; if (audioObjectType === 5) { config[1] |= (extensionSamplingIndex & 15) >>> 1; config[2] = (extensionSamplingIndex & 1) << 7; config[2] |= 2 << 2; config[3] = 0; } return { config, samplingRate: samplingFrequence, channelCount: channelConfig, codec: "mp4a.40." + audioObjectType, originalCodec: "mp4a.40." + originalAudioObjectType }; }; FLVDemuxer2.prototype._parseMP3AudioData = function(arrayBuffer, dataOffset, dataSize, requestHeader) { if (dataSize < 4) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid MP3 packet, header missing!"); return; } this._littleEndian; var array = new Uint8Array(arrayBuffer, dataOffset, dataSize); var result = null; if (requestHeader) { if (array[0] !== 255) { return; } var ver = array[1] >>> 3 & 3; var layer = (array[1] & 6) >> 1; var bitrate_index = (array[2] & 240) >>> 4; var sampling_freq_index = (array[2] & 12) >>> 2; var channel_mode = array[3] >>> 6 & 3; var channel_count = channel_mode !== 3 ? 2 : 1; var sample_rate = 0; var bit_rate = 0; var codec = "mp3"; switch (ver) { case 0: sample_rate = this._mpegAudioV25SampleRateTable[sampling_freq_index]; break; case 2: sample_rate = this._mpegAudioV20SampleRateTable[sampling_freq_index]; break; case 3: sample_rate = this._mpegAudioV10SampleRateTable[sampling_freq_index]; break; } switch (layer) { case 1: if (bitrate_index < this._mpegAudioL3BitRateTable.length) { bit_rate = this._mpegAudioL3BitRateTable[bitrate_index]; } break; case 2: if (bitrate_index < this._mpegAudioL2BitRateTable.length) { bit_rate = this._mpegAudioL2BitRateTable[bitrate_index]; } break; case 3: if (bitrate_index < this._mpegAudioL1BitRateTable.length) { bit_rate = this._mpegAudioL1BitRateTable[bitrate_index]; } break; } result = { bitRate: bit_rate, samplingRate: sample_rate, channelCount: channel_count, codec, originalCodec: codec }; } else { result = array; } return result; }; FLVDemuxer2.prototype._parseVideoData = function(arrayBuffer, dataOffset, dataSize, tagTimestamp, tagPosition) { if (dataSize <= 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid video packet, missing VideoData payload!"); return; } if (this._hasVideoFlagOverrided === true && this._hasVideo === false) { return; } var spec = new Uint8Array(arrayBuffer, dataOffset, dataSize)[0]; var frameType = (spec & 240) >>> 4; var codecId = spec & 15; if (codecId !== 7) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.CODEC_UNSUPPORTED, "Flv: Unsupported codec in video frame: " + codecId); return; } this._parseAVCVideoPacket(arrayBuffer, dataOffset + 1, dataSize - 1, tagTimestamp, tagPosition, frameType); }; FLVDemuxer2.prototype._parseAVCVideoPacket = function(arrayBuffer, dataOffset, dataSize, tagTimestamp, tagPosition, frameType) { if (dataSize < 4) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime"); return; } var le = this._littleEndian; var v = new DataView(arrayBuffer, dataOffset, dataSize); var packetType = v.getUint8(0); var cts_unsigned = v.getUint32(0, !le) & 16777215; var cts = cts_unsigned << 8 >> 8; if (packetType === 0) { this._parseAVCDecoderConfigurationRecord(arrayBuffer, dataOffset + 4, dataSize - 4); } else if (packetType === 1) { this._parseAVCVideoData(arrayBuffer, dataOffset + 4, dataSize - 4, tagTimestamp, tagPosition, frameType, cts); } else if (packetType === 2) ; else { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid video packet type " + packetType); return; } }; FLVDemuxer2.prototype._parseAVCDecoderConfigurationRecord = function(arrayBuffer, dataOffset, dataSize) { if (dataSize < 7) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Invalid AVCDecoderConfigurationRecord, lack of data!"); return; } var meta2 = this._videoMetadata; var track = this._videoTrack; var le = this._littleEndian; var v = new DataView(arrayBuffer, dataOffset, dataSize); if (!meta2) { if (this._hasVideo === false && this._hasVideoFlagOverrided === false) { this._hasVideo = true; this._mediaInfo.hasVideo = true; } meta2 = this._videoMetadata = {}; meta2.type = "video"; meta2.id = track.id; meta2.timescale = this._timescale; meta2.duration = this._duration; } else { if (typeof meta2.avcc !== "undefined") { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Found another AVCDecoderConfigurationRecord!"); } } var version2 = v.getUint8(0); var avcProfile = v.getUint8(1); v.getUint8(2); v.getUint8(3); if (version2 !== 1 || avcProfile === 0) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid AVCDecoderConfigurationRecord"); return; } this._naluLengthSize = (v.getUint8(4) & 3) + 1; if (this._naluLengthSize !== 3 && this._naluLengthSize !== 4) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Strange NaluLengthSizeMinusOne: " + (this._naluLengthSize - 1)); return; } var spsCount = v.getUint8(5) & 31; if (spsCount === 0) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid AVCDecoderConfigurationRecord: No SPS"); return; } else if (spsCount > 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Strange AVCDecoderConfigurationRecord: SPS Count = " + spsCount); } var offset = 6; for (var i2 = 0; i2 < spsCount; i2++) { var len = v.getUint16(offset, !le); offset += 2; if (len === 0) { continue; } var sps = new Uint8Array(arrayBuffer, dataOffset + offset, len); offset += len; var config = _sps_parser_js__WEBPACK_IMPORTED_MODULE_2__.default.parseSPS(sps); if (i2 !== 0) { continue; } meta2.codecWidth = config.codec_size.width; meta2.codecHeight = config.codec_size.height; meta2.presentWidth = config.present_size.width; meta2.presentHeight = config.present_size.height; meta2.profile = config.profile_string; meta2.level = config.level_string; meta2.bitDepth = config.bit_depth; meta2.chromaFormat = config.chroma_format; meta2.sarRatio = config.sar_ratio; meta2.frameRate = config.frame_rate; if (config.frame_rate.fixed === false || config.frame_rate.fps_num === 0 || config.frame_rate.fps_den === 0) { meta2.frameRate = this._referenceFrameRate; } var fps_den = meta2.frameRate.fps_den; var fps_num = meta2.frameRate.fps_num; meta2.refSampleDuration = meta2.timescale * (fps_den / fps_num); var codecArray = sps.subarray(1, 4); var codecString = "avc1."; for (var j = 0; j < 3; j++) { var h2 = codecArray[j].toString(16); if (h2.length < 2) { h2 = "0" + h2; } codecString += h2; } meta2.codec = codecString; var mi = this._mediaInfo; mi.width = meta2.codecWidth; mi.height = meta2.codecHeight; mi.fps = meta2.frameRate.fps; mi.profile = meta2.profile; mi.level = meta2.level; mi.refFrames = config.ref_frames; mi.chromaFormat = config.chroma_format_string; mi.sarNum = meta2.sarRatio.width; mi.sarDen = meta2.sarRatio.height; mi.videoCodec = codecString; if (mi.hasAudio) { if (mi.audioCodec != null) { mi.mimeType = 'video/x-flv; codecs="' + mi.videoCodec + "," + mi.audioCodec + '"'; } } else { mi.mimeType = 'video/x-flv; codecs="' + mi.videoCodec + '"'; } if (mi.isComplete()) { this._onMediaInfo(mi); } } var ppsCount = v.getUint8(offset); if (ppsCount === 0) { this._onError(_demux_errors_js__WEBPACK_IMPORTED_MODULE_3__.default.FORMAT_ERROR, "Flv: Invalid AVCDecoderConfigurationRecord: No PPS"); return; } else if (ppsCount > 1) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Flv: Strange AVCDecoderConfigurationRecord: PPS Count = " + ppsCount); } offset++; for (var i2 = 0; i2 < ppsCount; i2++) { var len = v.getUint16(offset, !le); offset += 2; if (len === 0) { continue; } offset += len; } meta2.avcc = new Uint8Array(dataSize); meta2.avcc.set(new Uint8Array(arrayBuffer, dataOffset, dataSize), 0); _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "Parsed AVCDecoderConfigurationRecord"); if (this._isInitialMetadataDispatched()) { if (this._dispatch && (this._audioTrack.length || this._videoTrack.length)) { this._onDataAvailable(this._audioTrack, this._videoTrack); } } else { this._videoInitialMetadataDispatched = true; } this._dispatch = false; this._onTrackMetadata("video", meta2); }; FLVDemuxer2.prototype._parseAVCVideoData = function(arrayBuffer, dataOffset, dataSize, tagTimestamp, tagPosition, frameType, cts) { var le = this._littleEndian; var v = new DataView(arrayBuffer, dataOffset, dataSize); var units = [], length = 0; var offset = 0; var lengthSize = this._naluLengthSize; var dts = this._timestampBase + tagTimestamp; var keyframe = frameType === 1; while (offset < dataSize) { if (offset + 4 >= dataSize) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Malformed Nalu near timestamp " + dts + ", offset = " + offset + ", dataSize = " + dataSize); break; } var naluSize = v.getUint32(offset, !le); if (lengthSize === 3) { naluSize >>>= 8; } if (naluSize > dataSize - lengthSize) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Malformed Nalus near timestamp " + dts + ", NaluSize > DataSize!"); return; } var unitType = v.getUint8(offset + lengthSize) & 31; if (unitType === 5) { keyframe = true; } var data = new Uint8Array(arrayBuffer, dataOffset + offset, lengthSize + naluSize); var unit = { type: unitType, data }; units.push(unit); length += data.byteLength; offset += lengthSize + naluSize; } if (units.length) { var track = this._videoTrack; var avcSample = { units, length, isKeyframe: keyframe, dts, cts, pts: dts + cts }; if (keyframe) { avcSample.fileposition = tagPosition; } track.samples.push(avcSample); track.length += length; } }; return FLVDemuxer2; }(); __webpack_exports__2["default"] = FLVDemuxer; }, "./src/demux/sps-parser.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _exp_golomb_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/demux/exp-golomb.js"); var SPSParser = function() { function SPSParser2() { } SPSParser2._ebsp2rbsp = function(uint8array) { var src = uint8array; var src_length = src.byteLength; var dst = new Uint8Array(src_length); var dst_idx = 0; for (var i2 = 0; i2 < src_length; i2++) { if (i2 >= 2) { if (src[i2] === 3 && src[i2 - 1] === 0 && src[i2 - 2] === 0) { continue; } } dst[dst_idx] = src[i2]; dst_idx++; } return new Uint8Array(dst.buffer, 0, dst_idx); }; SPSParser2.parseSPS = function(uint8array) { var rbsp = SPSParser2._ebsp2rbsp(uint8array); var gb = new _exp_golomb_js__WEBPACK_IMPORTED_MODULE_0__.default(rbsp); gb.readByte(); var profile_idc = gb.readByte(); gb.readByte(); var level_idc = gb.readByte(); gb.readUEG(); var profile_string = SPSParser2.getProfileString(profile_idc); var level_string = SPSParser2.getLevelString(level_idc); var chroma_format_idc = 1; var chroma_format = 420; var chroma_format_table = [0, 420, 422, 444]; var bit_depth = 8; if (profile_idc === 100 || profile_idc === 110 || profile_idc === 122 || profile_idc === 244 || profile_idc === 44 || profile_idc === 83 || profile_idc === 86 || profile_idc === 118 || profile_idc === 128 || profile_idc === 138 || profile_idc === 144) { chroma_format_idc = gb.readUEG(); if (chroma_format_idc === 3) { gb.readBits(1); } if (chroma_format_idc <= 3) { chroma_format = chroma_format_table[chroma_format_idc]; } bit_depth = gb.readUEG() + 8; gb.readUEG(); gb.readBits(1); if (gb.readBool()) { var scaling_list_count = chroma_format_idc !== 3 ? 8 : 12; for (var i2 = 0; i2 < scaling_list_count; i2++) { if (gb.readBool()) { if (i2 < 6) { SPSParser2._skipScalingList(gb, 16); } else { SPSParser2._skipScalingList(gb, 64); } } } } } gb.readUEG(); var pic_order_cnt_type = gb.readUEG(); if (pic_order_cnt_type === 0) { gb.readUEG(); } else if (pic_order_cnt_type === 1) { gb.readBits(1); gb.readSEG(); gb.readSEG(); var num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG(); for (var i2 = 0; i2 < num_ref_frames_in_pic_order_cnt_cycle; i2++) { gb.readSEG(); } } var ref_frames = gb.readUEG(); gb.readBits(1); var pic_width_in_mbs_minus1 = gb.readUEG(); var pic_height_in_map_units_minus1 = gb.readUEG(); var frame_mbs_only_flag = gb.readBits(1); if (frame_mbs_only_flag === 0) { gb.readBits(1); } gb.readBits(1); var frame_crop_left_offset = 0; var frame_crop_right_offset = 0; var frame_crop_top_offset = 0; var frame_crop_bottom_offset = 0; var frame_cropping_flag = gb.readBool(); if (frame_cropping_flag) { frame_crop_left_offset = gb.readUEG(); frame_crop_right_offset = gb.readUEG(); frame_crop_top_offset = gb.readUEG(); frame_crop_bottom_offset = gb.readUEG(); } var sar_width = 1, sar_height = 1; var fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0; var vui_parameters_present_flag = gb.readBool(); if (vui_parameters_present_flag) { if (gb.readBool()) { var aspect_ratio_idc = gb.readByte(); var sar_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2]; var sar_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1]; if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) { sar_width = sar_w_table[aspect_ratio_idc - 1]; sar_height = sar_h_table[aspect_ratio_idc - 1]; } else if (aspect_ratio_idc === 255) { sar_width = gb.readByte() << 8 | gb.readByte(); sar_height = gb.readByte() << 8 | gb.readByte(); } } if (gb.readBool()) { gb.readBool(); } if (gb.readBool()) { gb.readBits(4); if (gb.readBool()) { gb.readBits(24); } } if (gb.readBool()) { gb.readUEG(); gb.readUEG(); } if (gb.readBool()) { var num_units_in_tick = gb.readBits(32); var time_scale = gb.readBits(32); fps_fixed = gb.readBool(); fps_num = time_scale; fps_den = num_units_in_tick * 2; fps = fps_num / fps_den; } } var sarScale = 1; if (sar_width !== 1 || sar_height !== 1) { sarScale = sar_width / sar_height; } var crop_unit_x = 0, crop_unit_y = 0; if (chroma_format_idc === 0) { crop_unit_x = 1; crop_unit_y = 2 - frame_mbs_only_flag; } else { var sub_wc = chroma_format_idc === 3 ? 1 : 2; var sub_hc = chroma_format_idc === 1 ? 2 : 1; crop_unit_x = sub_wc; crop_unit_y = sub_hc * (2 - frame_mbs_only_flag); } var codec_width = (pic_width_in_mbs_minus1 + 1) * 16; var codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16); codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x; codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y; var present_width = Math.ceil(codec_width * sarScale); gb.destroy(); gb = null; return { profile_string, level_string, bit_depth, ref_frames, chroma_format, chroma_format_string: SPSParser2.getChromaFormatString(chroma_format), frame_rate: { fixed: fps_fixed, fps, fps_den, fps_num }, sar_ratio: { width: sar_width, height: sar_height }, codec_size: { width: codec_width, height: codec_height }, present_size: { width: present_width, height: codec_height } }; }; SPSParser2._skipScalingList = function(gb, count) { var last_scale = 8, next_scale = 8; var delta_scale = 0; for (var i2 = 0; i2 < count; i2++) { if (next_scale !== 0) { delta_scale = gb.readSEG(); next_scale = (last_scale + delta_scale + 256) % 256; } last_scale = next_scale === 0 ? last_scale : next_scale; } }; SPSParser2.getProfileString = function(profile_idc) { switch (profile_idc) { case 66: return "Baseline"; case 77: return "Main"; case 88: return "Extended"; case 100: return "High"; case 110: return "High10"; case 122: return "High422"; case 244: return "High444"; default: return "Unknown"; } }; SPSParser2.getLevelString = function(level_idc) { return (level_idc / 10).toFixed(1); }; SPSParser2.getChromaFormatString = function(chroma) { switch (chroma) { case 420: return "4:2:0"; case 422: return "4:2:2"; case 444: return "4:4:4"; default: return "Unknown"; } }; return SPSParser2; }(); __webpack_exports__2["default"] = SPSParser; }, "./src/flv.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_polyfill_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/polyfill.js"); var _core_features_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/core/features.js"); var _io_loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/io/loader.js"); var _player_flv_player_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/player/flv-player.js"); var _player_native_player_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/player/native-player.js"); var _player_player_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/player/player-events.js"); var _player_player_errors_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/player/player-errors.js"); var _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/utils/logging-control.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/utils/exception.js"); _utils_polyfill_js__WEBPACK_IMPORTED_MODULE_0__.default.install(); function createPlayer(mediaDataSource, optionalConfig) { var mds = mediaDataSource; if (mds == null || typeof mds !== "object") { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_8__.InvalidArgumentException("MediaDataSource must be an javascript object!"); } if (!mds.hasOwnProperty("type")) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_8__.InvalidArgumentException("MediaDataSource must has type field to indicate video file type!"); } switch (mds.type) { case "flv": return new _player_flv_player_js__WEBPACK_IMPORTED_MODULE_3__.default(mds, optionalConfig); default: return new _player_native_player_js__WEBPACK_IMPORTED_MODULE_4__.default(mds, optionalConfig); } } function isSupported() { return _core_features_js__WEBPACK_IMPORTED_MODULE_1__.default.supportMSEH264Playback(); } function getFeatureList() { return _core_features_js__WEBPACK_IMPORTED_MODULE_1__.default.getFeatureList(); } var flvjs2 = {}; flvjs2.createPlayer = createPlayer; flvjs2.isSupported = isSupported; flvjs2.getFeatureList = getFeatureList; flvjs2.BaseLoader = _io_loader_js__WEBPACK_IMPORTED_MODULE_2__.BaseLoader; flvjs2.LoaderStatus = _io_loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus; flvjs2.LoaderErrors = _io_loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors; flvjs2.Events = _player_player_events_js__WEBPACK_IMPORTED_MODULE_5__.default; flvjs2.ErrorTypes = _player_player_errors_js__WEBPACK_IMPORTED_MODULE_6__.ErrorTypes; flvjs2.ErrorDetails = _player_player_errors_js__WEBPACK_IMPORTED_MODULE_6__.ErrorDetails; flvjs2.FlvPlayer = _player_flv_player_js__WEBPACK_IMPORTED_MODULE_3__.default; flvjs2.NativePlayer = _player_native_player_js__WEBPACK_IMPORTED_MODULE_4__.default; flvjs2.LoggingControl = _utils_logging_control_js__WEBPACK_IMPORTED_MODULE_7__.default; Object.defineProperty(flvjs2, "version", { enumerable: true, get: function() { return "1.6.2"; } }); __webpack_exports__2["default"] = flvjs2; }, "./src/index.js": function(module3, __unused_webpack_exports, __webpack_require__2) { module3.exports = __webpack_require__2("./src/flv.js").default; }, "./src/io/fetch-stream-loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/browser.js"); var _loader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/io/loader.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/exception.js"); var __extends = function() { var extendStatics = function(d2, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b2) { d3.__proto__ = b2; } || function(d3, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d3[p] = b2[p]; }; return extendStatics(d2, b); }; return function(d2, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d2, b); function __() { this.constructor = d2; } d2.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var FetchStreamLoader = function(_super) { __extends(FetchStreamLoader2, _super); function FetchStreamLoader2(seekHandler, config) { var _this = _super.call(this, "fetch-stream-loader") || this; _this.TAG = "FetchStreamLoader"; _this._seekHandler = seekHandler; _this._config = config; _this._needStash = true; _this._requestAbort = false; _this._contentLength = null; _this._receivedLength = 0; return _this; } FetchStreamLoader2.isSupported = function() { try { var isWorkWellEdge = _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.msedge && _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.version.minor >= 15048; var browserNotBlacklisted = _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.msedge ? isWorkWellEdge : true; return self.fetch && self.ReadableStream && browserNotBlacklisted; } catch (e) { return false; } }; FetchStreamLoader2.prototype.destroy = function() { if (this.isWorking()) { this.abort(); } _super.prototype.destroy.call(this); }; FetchStreamLoader2.prototype.open = function(dataSource, range3) { var _this = this; this._dataSource = dataSource; this._range = range3; var sourceURL = dataSource.url; if (this._config.reuseRedirectedURL && dataSource.redirectedURL != void 0) { sourceURL = dataSource.redirectedURL; } var seekConfig = this._seekHandler.getConfig(sourceURL, range3); var headers = new self.Headers(); if (typeof seekConfig.headers === "object") { var configHeaders = seekConfig.headers; for (var key in configHeaders) { if (configHeaders.hasOwnProperty(key)) { headers.append(key, configHeaders[key]); } } } var params = { method: "GET", headers, mode: "cors", cache: "default", referrerPolicy: "no-referrer-when-downgrade" }; if (typeof this._config.headers === "object") { for (var key in this._config.headers) { headers.append(key, this._config.headers[key]); } } if (dataSource.cors === false) { params.mode = "same-origin"; } if (dataSource.withCredentials) { params.credentials = "include"; } if (dataSource.referrerPolicy) { params.referrerPolicy = dataSource.referrerPolicy; } if (self.AbortController) { this._abortController = new self.AbortController(); params.signal = this._abortController.signal; } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kConnecting; self.fetch(seekConfig.url, params).then(function(res) { if (_this._requestAbort) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kIdle; res.body.cancel(); return; } if (res.ok && (res.status >= 200 && res.status <= 299)) { if (res.url !== seekConfig.url) { if (_this._onURLRedirect) { var redirectedURL = _this._seekHandler.removeURLParameters(res.url); _this._onURLRedirect(redirectedURL); } } var lengthHeader = res.headers.get("Content-Length"); if (lengthHeader != null) { _this._contentLength = parseInt(lengthHeader); if (_this._contentLength !== 0) { if (_this._onContentLengthKnown) { _this._onContentLengthKnown(_this._contentLength); } } } return _this._pump.call(_this, res.body.getReader()); } else { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; if (_this._onError) { _this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.HTTP_STATUS_CODE_INVALID, { code: res.status, msg: res.statusText }); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException("FetchStreamLoader: Http code invalid, " + res.status + " " + res.statusText); } } }).catch(function(e) { if (_this._abortController && _this._abortController.signal.aborted) { return; } _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; if (_this._onError) { _this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EXCEPTION, { code: -1, msg: e.message }); } else { throw e; } }); }; FetchStreamLoader2.prototype.abort = function() { this._requestAbort = true; if (this._status !== _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kBuffering || !_utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.chrome) { if (this._abortController) { try { this._abortController.abort(); } catch (e) { } } } }; FetchStreamLoader2.prototype._pump = function(reader) { var _this = this; return reader.read().then(function(result) { if (result.done) { if (_this._contentLength !== null && _this._receivedLength < _this._contentLength) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; var type2 = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EARLY_EOF; var info = { code: -1, msg: "Fetch stream meet Early-EOF" }; if (_this._onError) { _this._onError(type2, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException(info.msg); } } else { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; if (_this._onComplete) { _this._onComplete(_this._range.from, _this._range.from + _this._receivedLength - 1); } } } else { if (_this._abortController && _this._abortController.signal.aborted) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; return; } else if (_this._requestAbort === true) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; return reader.cancel(); } _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kBuffering; var chunk = result.value.buffer; var byteStart = _this._range.from + _this._receivedLength; _this._receivedLength += chunk.byteLength; if (_this._onDataArrival) { _this._onDataArrival(chunk, byteStart, _this._receivedLength); } _this._pump(reader); } }).catch(function(e) { if (_this._abortController && _this._abortController.signal.aborted) { _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; return; } if (e.code === 11 && _utils_browser_js__WEBPACK_IMPORTED_MODULE_0__.default.msedge) { return; } _this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; var type2 = 0; var info = null; if ((e.code === 19 || e.message === "network error") && (_this._contentLength === null || _this._contentLength !== null && _this._receivedLength < _this._contentLength)) { type2 = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EARLY_EOF; info = { code: e.code, msg: "Fetch stream meet Early-EOF" }; } else { type2 = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EXCEPTION; info = { code: e.code, msg: e.message }; } if (_this._onError) { _this._onError(type2, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException(info.msg); } }); }; return FetchStreamLoader2; }(_loader_js__WEBPACK_IMPORTED_MODULE_1__.BaseLoader); __webpack_exports__2["default"] = FetchStreamLoader; }, "./src/io/io-controller.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _speed_sampler_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/io/speed-sampler.js"); var _loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/io/loader.js"); var _fetch_stream_loader_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/io/fetch-stream-loader.js"); var _xhr_moz_chunked_loader_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/io/xhr-moz-chunked-loader.js"); var _xhr_range_loader_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/io/xhr-range-loader.js"); var _websocket_loader_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/io/websocket-loader.js"); var _range_seek_handler_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/io/range-seek-handler.js"); var _param_seek_handler_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/io/param-seek-handler.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__2("./src/utils/exception.js"); var IOController = function() { function IOController2(dataSource, config, extraData) { this.TAG = "IOController"; this._config = config; this._extraData = extraData; this._stashInitialSize = 1024 * 384; if (config.stashInitialSize != void 0 && config.stashInitialSize > 0) { this._stashInitialSize = config.stashInitialSize; } this._stashUsed = 0; this._stashSize = this._stashInitialSize; this._bufferSize = 1024 * 1024 * 3; this._stashBuffer = new ArrayBuffer(this._bufferSize); this._stashByteStart = 0; this._enableStash = true; if (config.enableStashBuffer === false) { this._enableStash = false; } this._loader = null; this._loaderClass = null; this._seekHandler = null; this._dataSource = dataSource; this._isWebSocketURL = /wss?:\/\/(.+?)/.test(dataSource.url); this._refTotalLength = dataSource.filesize ? dataSource.filesize : null; this._totalLength = this._refTotalLength; this._fullRequestFlag = false; this._currentRange = null; this._redirectedURL = null; this._speedNormalized = 0; this._speedSampler = new _speed_sampler_js__WEBPACK_IMPORTED_MODULE_1__.default(); this._speedNormalizeList = [64, 128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096]; this._isEarlyEofReconnecting = false; this._paused = false; this._resumeFrom = 0; this._onDataArrival = null; this._onSeeked = null; this._onError = null; this._onComplete = null; this._onRedirect = null; this._onRecoveredEarlyEof = null; this._selectSeekHandler(); this._selectLoader(); this._createLoader(); } IOController2.prototype.destroy = function() { if (this._loader.isWorking()) { this._loader.abort(); } this._loader.destroy(); this._loader = null; this._loaderClass = null; this._dataSource = null; this._stashBuffer = null; this._stashUsed = this._stashSize = this._bufferSize = this._stashByteStart = 0; this._currentRange = null; this._speedSampler = null; this._isEarlyEofReconnecting = false; this._onDataArrival = null; this._onSeeked = null; this._onError = null; this._onComplete = null; this._onRedirect = null; this._onRecoveredEarlyEof = null; this._extraData = null; }; IOController2.prototype.isWorking = function() { return this._loader && this._loader.isWorking() && !this._paused; }; IOController2.prototype.isPaused = function() { return this._paused; }; Object.defineProperty(IOController2.prototype, "status", { get: function() { return this._loader.status; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "extraData", { get: function() { return this._extraData; }, set: function(data) { this._extraData = data; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onDataArrival", { get: function() { return this._onDataArrival; }, set: function(callback2) { this._onDataArrival = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onSeeked", { get: function() { return this._onSeeked; }, set: function(callback2) { this._onSeeked = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onError", { get: function() { return this._onError; }, set: function(callback2) { this._onError = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onComplete", { get: function() { return this._onComplete; }, set: function(callback2) { this._onComplete = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onRedirect", { get: function() { return this._onRedirect; }, set: function(callback2) { this._onRedirect = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "onRecoveredEarlyEof", { get: function() { return this._onRecoveredEarlyEof; }, set: function(callback2) { this._onRecoveredEarlyEof = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "currentURL", { get: function() { return this._dataSource.url; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "hasRedirect", { get: function() { return this._redirectedURL != null || this._dataSource.redirectedURL != void 0; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "currentRedirectedURL", { get: function() { return this._redirectedURL || this._dataSource.redirectedURL; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "currentSpeed", { get: function() { if (this._loaderClass === _xhr_range_loader_js__WEBPACK_IMPORTED_MODULE_5__.default) { return this._loader.currentSpeed; } return this._speedSampler.lastSecondKBps; }, enumerable: false, configurable: true }); Object.defineProperty(IOController2.prototype, "loaderType", { get: function() { return this._loader.type; }, enumerable: false, configurable: true }); IOController2.prototype._selectSeekHandler = function() { var config = this._config; if (config.seekType === "range") { this._seekHandler = new _range_seek_handler_js__WEBPACK_IMPORTED_MODULE_7__.default(this._config.rangeLoadZeroStart); } else if (config.seekType === "param") { var paramStart = config.seekParamStart || "bstart"; var paramEnd = config.seekParamEnd || "bend"; this._seekHandler = new _param_seek_handler_js__WEBPACK_IMPORTED_MODULE_8__.default(paramStart, paramEnd); } else if (config.seekType === "custom") { if (typeof config.customSeekHandler !== "function") { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.InvalidArgumentException("Custom seekType specified in config but invalid customSeekHandler!"); } this._seekHandler = new config.customSeekHandler(); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.InvalidArgumentException("Invalid seekType in config: " + config.seekType); } }; IOController2.prototype._selectLoader = function() { if (this._config.customLoader != null) { this._loaderClass = this._config.customLoader; } else if (this._isWebSocketURL) { this._loaderClass = _websocket_loader_js__WEBPACK_IMPORTED_MODULE_6__.default; } else if (_fetch_stream_loader_js__WEBPACK_IMPORTED_MODULE_3__.default.isSupported()) { this._loaderClass = _fetch_stream_loader_js__WEBPACK_IMPORTED_MODULE_3__.default; } else if (_xhr_moz_chunked_loader_js__WEBPACK_IMPORTED_MODULE_4__.default.isSupported()) { this._loaderClass = _xhr_moz_chunked_loader_js__WEBPACK_IMPORTED_MODULE_4__.default; } else if (_xhr_range_loader_js__WEBPACK_IMPORTED_MODULE_5__.default.isSupported()) { this._loaderClass = _xhr_range_loader_js__WEBPACK_IMPORTED_MODULE_5__.default; } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.RuntimeException("Your browser doesn't support xhr with arraybuffer responseType!"); } }; IOController2.prototype._createLoader = function() { this._loader = new this._loaderClass(this._seekHandler, this._config); if (this._loader.needStashBuffer === false) { this._enableStash = false; } this._loader.onContentLengthKnown = this._onContentLengthKnown.bind(this); this._loader.onURLRedirect = this._onURLRedirect.bind(this); this._loader.onDataArrival = this._onLoaderChunkArrival.bind(this); this._loader.onComplete = this._onLoaderComplete.bind(this); this._loader.onError = this._onLoaderError.bind(this); }; IOController2.prototype.open = function(optionalFrom) { this._currentRange = { from: 0, to: -1 }; if (optionalFrom) { this._currentRange.from = optionalFrom; } this._speedSampler.reset(); if (!optionalFrom) { this._fullRequestFlag = true; } this._loader.open(this._dataSource, Object.assign({}, this._currentRange)); }; IOController2.prototype.abort = function() { this._loader.abort(); if (this._paused) { this._paused = false; this._resumeFrom = 0; } }; IOController2.prototype.pause = function() { if (this.isWorking()) { this._loader.abort(); if (this._stashUsed !== 0) { this._resumeFrom = this._stashByteStart; this._currentRange.to = this._stashByteStart - 1; } else { this._resumeFrom = this._currentRange.to + 1; } this._stashUsed = 0; this._stashByteStart = 0; this._paused = true; } }; IOController2.prototype.resume = function() { if (this._paused) { this._paused = false; var bytes = this._resumeFrom; this._resumeFrom = 0; this._internalSeek(bytes, true); } }; IOController2.prototype.seek = function(bytes) { this._paused = false; this._stashUsed = 0; this._stashByteStart = 0; this._internalSeek(bytes, true); }; IOController2.prototype._internalSeek = function(bytes, dropUnconsumed) { if (this._loader.isWorking()) { this._loader.abort(); } this._flushStashBuffer(dropUnconsumed); this._loader.destroy(); this._loader = null; var requestRange = { from: bytes, to: -1 }; this._currentRange = { from: requestRange.from, to: -1 }; this._speedSampler.reset(); this._stashSize = this._stashInitialSize; this._createLoader(); this._loader.open(this._dataSource, requestRange); if (this._onSeeked) { this._onSeeked(); } }; IOController2.prototype.updateUrl = function(url) { if (!url || typeof url !== "string" || url.length === 0) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.InvalidArgumentException("Url must be a non-empty string!"); } this._dataSource.url = url; }; IOController2.prototype._expandBuffer = function(expectedBytes) { var bufferNewSize = this._stashSize; while (bufferNewSize + 1024 * 1024 * 1 < expectedBytes) { bufferNewSize *= 2; } bufferNewSize += 1024 * 1024 * 1; if (bufferNewSize === this._bufferSize) { return; } var newBuffer = new ArrayBuffer(bufferNewSize); if (this._stashUsed > 0) { var stashOldArray = new Uint8Array(this._stashBuffer, 0, this._stashUsed); var stashNewArray = new Uint8Array(newBuffer, 0, bufferNewSize); stashNewArray.set(stashOldArray, 0); } this._stashBuffer = newBuffer; this._bufferSize = bufferNewSize; }; IOController2.prototype._normalizeSpeed = function(input) { var list = this._speedNormalizeList; var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; if (input < list[0]) { return list[0]; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || input >= list[mid] && input < list[mid + 1]) { return list[mid]; } else if (list[mid] < input) { lbound = mid + 1; } else { ubound = mid - 1; } } }; IOController2.prototype._adjustStashSize = function(normalized) { var stashSizeKB = 0; if (this._config.isLive) { stashSizeKB = normalized; } else { if (normalized < 512) { stashSizeKB = normalized; } else if (normalized >= 512 && normalized <= 1024) { stashSizeKB = Math.floor(normalized * 1.5); } else { stashSizeKB = normalized * 2; } } if (stashSizeKB > 8192) { stashSizeKB = 8192; } var bufferSize = stashSizeKB * 1024 + 1024 * 1024 * 1; if (this._bufferSize < bufferSize) { this._expandBuffer(bufferSize); } this._stashSize = stashSizeKB * 1024; }; IOController2.prototype._dispatchChunks = function(chunks, byteStart) { this._currentRange.to = byteStart + chunks.byteLength - 1; return this._onDataArrival(chunks, byteStart); }; IOController2.prototype._onURLRedirect = function(redirectedURL) { this._redirectedURL = redirectedURL; if (this._onRedirect) { this._onRedirect(redirectedURL); } }; IOController2.prototype._onContentLengthKnown = function(contentLength) { if (contentLength && this._fullRequestFlag) { this._totalLength = contentLength; this._fullRequestFlag = false; } }; IOController2.prototype._onLoaderChunkArrival = function(chunk, byteStart, receivedLength) { if (!this._onDataArrival) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.IllegalStateException("IOController: No existing consumer (onDataArrival) callback!"); } if (this._paused) { return; } if (this._isEarlyEofReconnecting) { this._isEarlyEofReconnecting = false; if (this._onRecoveredEarlyEof) { this._onRecoveredEarlyEof(); } } this._speedSampler.addBytes(chunk.byteLength); var KBps = this._speedSampler.lastSecondKBps; if (KBps !== 0) { var normalized = this._normalizeSpeed(KBps); if (this._speedNormalized !== normalized) { this._speedNormalized = normalized; this._adjustStashSize(normalized); } } if (!this._enableStash) { if (this._stashUsed === 0) { var consumed = this._dispatchChunks(chunk, byteStart); if (consumed < chunk.byteLength) { var remain = chunk.byteLength - consumed; if (remain > this._bufferSize) { this._expandBuffer(remain); } var stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); stashArray.set(new Uint8Array(chunk, consumed), 0); this._stashUsed += remain; this._stashByteStart = byteStart + consumed; } } else { if (this._stashUsed + chunk.byteLength > this._bufferSize) { this._expandBuffer(this._stashUsed + chunk.byteLength); } var stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); stashArray.set(new Uint8Array(chunk), this._stashUsed); this._stashUsed += chunk.byteLength; var consumed = this._dispatchChunks(this._stashBuffer.slice(0, this._stashUsed), this._stashByteStart); if (consumed < this._stashUsed && consumed > 0) { var remainArray = new Uint8Array(this._stashBuffer, consumed); stashArray.set(remainArray, 0); } this._stashUsed -= consumed; this._stashByteStart += consumed; } } else { if (this._stashUsed === 0 && this._stashByteStart === 0) { this._stashByteStart = byteStart; } if (this._stashUsed + chunk.byteLength <= this._stashSize) { var stashArray = new Uint8Array(this._stashBuffer, 0, this._stashSize); stashArray.set(new Uint8Array(chunk), this._stashUsed); this._stashUsed += chunk.byteLength; } else { var stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); if (this._stashUsed > 0) { var buffer = this._stashBuffer.slice(0, this._stashUsed); var consumed = this._dispatchChunks(buffer, this._stashByteStart); if (consumed < buffer.byteLength) { if (consumed > 0) { var remainArray = new Uint8Array(buffer, consumed); stashArray.set(remainArray, 0); this._stashUsed = remainArray.byteLength; this._stashByteStart += consumed; } } else { this._stashUsed = 0; this._stashByteStart += consumed; } if (this._stashUsed + chunk.byteLength > this._bufferSize) { this._expandBuffer(this._stashUsed + chunk.byteLength); stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); } stashArray.set(new Uint8Array(chunk), this._stashUsed); this._stashUsed += chunk.byteLength; } else { var consumed = this._dispatchChunks(chunk, byteStart); if (consumed < chunk.byteLength) { var remain = chunk.byteLength - consumed; if (remain > this._bufferSize) { this._expandBuffer(remain); stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); } stashArray.set(new Uint8Array(chunk, consumed), 0); this._stashUsed += remain; this._stashByteStart = byteStart + consumed; } } } } }; IOController2.prototype._flushStashBuffer = function(dropUnconsumed) { if (this._stashUsed > 0) { var buffer = this._stashBuffer.slice(0, this._stashUsed); var consumed = this._dispatchChunks(buffer, this._stashByteStart); var remain = buffer.byteLength - consumed; if (consumed < buffer.byteLength) { if (dropUnconsumed) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, remain + " bytes unconsumed data remain when flush buffer, dropped"); } else { if (consumed > 0) { var stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize); var remainArray = new Uint8Array(buffer, consumed); stashArray.set(remainArray, 0); this._stashUsed = remainArray.byteLength; this._stashByteStart += consumed; } return 0; } } this._stashUsed = 0; this._stashByteStart = 0; return remain; } return 0; }; IOController2.prototype._onLoaderComplete = function(from3, to) { this._flushStashBuffer(true); if (this._onComplete) { this._onComplete(this._extraData); } }; IOController2.prototype._onLoaderError = function(type2, data) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.e(this.TAG, "Loader error, code = " + data.code + ", msg = " + data.msg); this._flushStashBuffer(false); if (this._isEarlyEofReconnecting) { this._isEarlyEofReconnecting = false; type2 = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.UNRECOVERABLE_EARLY_EOF; } switch (type2) { case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.EARLY_EOF: { if (!this._config.isLive) { if (this._totalLength) { var nextFrom = this._currentRange.to + 1; if (nextFrom < this._totalLength) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Connection lost, trying reconnect..."); this._isEarlyEofReconnecting = true; this._internalSeek(nextFrom, false); } return; } } type2 = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.UNRECOVERABLE_EARLY_EOF; break; } case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.UNRECOVERABLE_EARLY_EOF: case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.CONNECTING_TIMEOUT: case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.HTTP_STATUS_CODE_INVALID: case _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.EXCEPTION: break; } if (this._onError) { this._onError(type2, data); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_9__.RuntimeException("IOException: " + data.msg); } }; return IOController2; }(); __webpack_exports__2["default"] = IOController; }, "./src/io/loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "LoaderStatus": function() { return LoaderStatus; }, "LoaderErrors": function() { return LoaderErrors; }, "BaseLoader": function() { return BaseLoader; } }); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/exception.js"); var LoaderStatus = { kIdle: 0, kConnecting: 1, kBuffering: 2, kError: 3, kComplete: 4 }; var LoaderErrors = { OK: "OK", EXCEPTION: "Exception", HTTP_STATUS_CODE_INVALID: "HttpStatusCodeInvalid", CONNECTING_TIMEOUT: "ConnectingTimeout", EARLY_EOF: "EarlyEof", UNRECOVERABLE_EARLY_EOF: "UnrecoverableEarlyEof" }; var BaseLoader = function() { function BaseLoader2(typeName) { this._type = typeName || "undefined"; this._status = LoaderStatus.kIdle; this._needStash = false; this._onContentLengthKnown = null; this._onURLRedirect = null; this._onDataArrival = null; this._onError = null; this._onComplete = null; } BaseLoader2.prototype.destroy = function() { this._status = LoaderStatus.kIdle; this._onContentLengthKnown = null; this._onURLRedirect = null; this._onDataArrival = null; this._onError = null; this._onComplete = null; }; BaseLoader2.prototype.isWorking = function() { return this._status === LoaderStatus.kConnecting || this._status === LoaderStatus.kBuffering; }; Object.defineProperty(BaseLoader2.prototype, "type", { get: function() { return this._type; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "status", { get: function() { return this._status; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "needStashBuffer", { get: function() { return this._needStash; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onContentLengthKnown", { get: function() { return this._onContentLengthKnown; }, set: function(callback2) { this._onContentLengthKnown = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onURLRedirect", { get: function() { return this._onURLRedirect; }, set: function(callback2) { this._onURLRedirect = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onDataArrival", { get: function() { return this._onDataArrival; }, set: function(callback2) { this._onDataArrival = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onError", { get: function() { return this._onError; }, set: function(callback2) { this._onError = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(BaseLoader2.prototype, "onComplete", { get: function() { return this._onComplete; }, set: function(callback2) { this._onComplete = callback2; }, enumerable: false, configurable: true }); BaseLoader2.prototype.open = function(dataSource, range3) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__.NotImplementedException("Unimplemented abstract function!"); }; BaseLoader2.prototype.abort = function() { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_0__.NotImplementedException("Unimplemented abstract function!"); }; return BaseLoader2; }(); }, "./src/io/param-seek-handler.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var ParamSeekHandler = function() { function ParamSeekHandler2(paramStart, paramEnd) { this._startName = paramStart; this._endName = paramEnd; } ParamSeekHandler2.prototype.getConfig = function(baseUrl, range3) { var url = baseUrl; if (range3.from !== 0 || range3.to !== -1) { var needAnd = true; if (url.indexOf("?") === -1) { url += "?"; needAnd = false; } if (needAnd) { url += "&"; } url += this._startName + "=" + range3.from.toString(); if (range3.to !== -1) { url += "&" + this._endName + "=" + range3.to.toString(); } } return { url, headers: {} }; }; ParamSeekHandler2.prototype.removeURLParameters = function(seekedURL) { var baseURL = seekedURL.split("?")[0]; var params = void 0; var queryIndex = seekedURL.indexOf("?"); if (queryIndex !== -1) { params = seekedURL.substring(queryIndex + 1); } var resultParams = ""; if (params != void 0 && params.length > 0) { var pairs = params.split("&"); for (var i2 = 0; i2 < pairs.length; i2++) { var pair = pairs[i2].split("="); var requireAnd = i2 > 0; if (pair[0] !== this._startName && pair[0] !== this._endName) { if (requireAnd) { resultParams += "&"; } resultParams += pairs[i2]; } } } return resultParams.length === 0 ? baseURL : baseURL + "?" + resultParams; }; return ParamSeekHandler2; }(); __webpack_exports__2["default"] = ParamSeekHandler; }, "./src/io/range-seek-handler.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var RangeSeekHandler = function() { function RangeSeekHandler2(zeroStart) { this._zeroStart = zeroStart || false; } RangeSeekHandler2.prototype.getConfig = function(url, range3) { var headers = {}; if (range3.from !== 0 || range3.to !== -1) { var param = void 0; if (range3.to !== -1) { param = "bytes=" + range3.from.toString() + "-" + range3.to.toString(); } else { param = "bytes=" + range3.from.toString() + "-"; } headers["Range"] = param; } else if (this._zeroStart) { headers["Range"] = "bytes=0-"; } return { url, headers }; }; RangeSeekHandler2.prototype.removeURLParameters = function(seekedURL) { return seekedURL; }; return RangeSeekHandler2; }(); __webpack_exports__2["default"] = RangeSeekHandler; }, "./src/io/speed-sampler.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var SpeedSampler = function() { function SpeedSampler2() { this._firstCheckpoint = 0; this._lastCheckpoint = 0; this._intervalBytes = 0; this._totalBytes = 0; this._lastSecondBytes = 0; if (self.performance && self.performance.now) { this._now = self.performance.now.bind(self.performance); } else { this._now = Date.now; } } SpeedSampler2.prototype.reset = function() { this._firstCheckpoint = this._lastCheckpoint = 0; this._totalBytes = this._intervalBytes = 0; this._lastSecondBytes = 0; }; SpeedSampler2.prototype.addBytes = function(bytes) { if (this._firstCheckpoint === 0) { this._firstCheckpoint = this._now(); this._lastCheckpoint = this._firstCheckpoint; this._intervalBytes += bytes; this._totalBytes += bytes; } else if (this._now() - this._lastCheckpoint < 1e3) { this._intervalBytes += bytes; this._totalBytes += bytes; } else { this._lastSecondBytes = this._intervalBytes; this._intervalBytes = bytes; this._totalBytes += bytes; this._lastCheckpoint = this._now(); } }; Object.defineProperty(SpeedSampler2.prototype, "currentKBps", { get: function() { this.addBytes(0); var durationSeconds = (this._now() - this._lastCheckpoint) / 1e3; if (durationSeconds == 0) durationSeconds = 1; return this._intervalBytes / durationSeconds / 1024; }, enumerable: false, configurable: true }); Object.defineProperty(SpeedSampler2.prototype, "lastSecondKBps", { get: function() { this.addBytes(0); if (this._lastSecondBytes !== 0) { return this._lastSecondBytes / 1024; } else { if (this._now() - this._lastCheckpoint >= 500) { return this.currentKBps; } else { return 0; } } }, enumerable: false, configurable: true }); Object.defineProperty(SpeedSampler2.prototype, "averageKBps", { get: function() { var durationSeconds = (this._now() - this._firstCheckpoint) / 1e3; return this._totalBytes / durationSeconds / 1024; }, enumerable: false, configurable: true }); return SpeedSampler2; }(); __webpack_exports__2["default"] = SpeedSampler; }, "./src/io/websocket-loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _loader_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/io/loader.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/exception.js"); var __extends = function() { var extendStatics = function(d2, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b2) { d3.__proto__ = b2; } || function(d3, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d3[p] = b2[p]; }; return extendStatics(d2, b); }; return function(d2, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d2, b); function __() { this.constructor = d2; } d2.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var WebSocketLoader = function(_super) { __extends(WebSocketLoader2, _super); function WebSocketLoader2() { var _this = _super.call(this, "websocket-loader") || this; _this.TAG = "WebSocketLoader"; _this._needStash = true; _this._ws = null; _this._requestAbort = false; _this._receivedLength = 0; return _this; } WebSocketLoader2.isSupported = function() { try { return typeof self.WebSocket !== "undefined"; } catch (e) { return false; } }; WebSocketLoader2.prototype.destroy = function() { if (this._ws) { this.abort(); } _super.prototype.destroy.call(this); }; WebSocketLoader2.prototype.open = function(dataSource) { try { var ws = this._ws = new self.WebSocket(dataSource.url); ws.binaryType = "arraybuffer"; ws.onopen = this._onWebSocketOpen.bind(this); ws.onclose = this._onWebSocketClose.bind(this); ws.onmessage = this._onWebSocketMessage.bind(this); ws.onerror = this._onWebSocketError.bind(this); this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kConnecting; } catch (e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kError; var info = { code: e.code, msg: e.message }; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.EXCEPTION, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_1__.RuntimeException(info.msg); } } }; WebSocketLoader2.prototype.abort = function() { var ws = this._ws; if (ws && (ws.readyState === 0 || ws.readyState === 1)) { this._requestAbort = true; ws.close(); } this._ws = null; this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kComplete; }; WebSocketLoader2.prototype._onWebSocketOpen = function(e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kBuffering; }; WebSocketLoader2.prototype._onWebSocketClose = function(e) { if (this._requestAbort === true) { this._requestAbort = false; return; } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kComplete; if (this._onComplete) { this._onComplete(0, this._receivedLength - 1); } }; WebSocketLoader2.prototype._onWebSocketMessage = function(e) { var _this = this; if (e.data instanceof ArrayBuffer) { this._dispatchArrayBuffer(e.data); } else if (e.data instanceof Blob) { var reader_1 = new FileReader(); reader_1.onload = function() { _this._dispatchArrayBuffer(reader_1.result); }; reader_1.readAsArrayBuffer(e.data); } else { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kError; var info = { code: -1, msg: "Unsupported WebSocket message type: " + e.data.constructor.name }; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.EXCEPTION, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_1__.RuntimeException(info.msg); } } }; WebSocketLoader2.prototype._dispatchArrayBuffer = function(arraybuffer) { var chunk = arraybuffer; var byteStart = this._receivedLength; this._receivedLength += chunk.byteLength; if (this._onDataArrival) { this._onDataArrival(chunk, byteStart, this._receivedLength); } }; WebSocketLoader2.prototype._onWebSocketError = function(e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderStatus.kError; var info = { code: e.code, msg: e.message }; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.EXCEPTION, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_1__.RuntimeException(info.msg); } }; return WebSocketLoader2; }(_loader_js__WEBPACK_IMPORTED_MODULE_0__.BaseLoader); __webpack_exports__2["default"] = WebSocketLoader; }, "./src/io/xhr-moz-chunked-loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _loader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/io/loader.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/exception.js"); var __extends = function() { var extendStatics = function(d2, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b2) { d3.__proto__ = b2; } || function(d3, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d3[p] = b2[p]; }; return extendStatics(d2, b); }; return function(d2, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d2, b); function __() { this.constructor = d2; } d2.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var MozChunkedLoader = function(_super) { __extends(MozChunkedLoader2, _super); function MozChunkedLoader2(seekHandler, config) { var _this = _super.call(this, "xhr-moz-chunked-loader") || this; _this.TAG = "MozChunkedLoader"; _this._seekHandler = seekHandler; _this._config = config; _this._needStash = true; _this._xhr = null; _this._requestAbort = false; _this._contentLength = null; _this._receivedLength = 0; return _this; } MozChunkedLoader2.isSupported = function() { try { var xhr = new XMLHttpRequest(); xhr.open("GET", "https://example.com", true); xhr.responseType = "moz-chunked-arraybuffer"; return xhr.responseType === "moz-chunked-arraybuffer"; } catch (e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w("MozChunkedLoader", e.message); return false; } }; MozChunkedLoader2.prototype.destroy = function() { if (this.isWorking()) { this.abort(); } if (this._xhr) { this._xhr.onreadystatechange = null; this._xhr.onprogress = null; this._xhr.onloadend = null; this._xhr.onerror = null; this._xhr = null; } _super.prototype.destroy.call(this); }; MozChunkedLoader2.prototype.open = function(dataSource, range3) { this._dataSource = dataSource; this._range = range3; var sourceURL = dataSource.url; if (this._config.reuseRedirectedURL && dataSource.redirectedURL != void 0) { sourceURL = dataSource.redirectedURL; } var seekConfig = this._seekHandler.getConfig(sourceURL, range3); this._requestURL = seekConfig.url; var xhr = this._xhr = new XMLHttpRequest(); xhr.open("GET", seekConfig.url, true); xhr.responseType = "moz-chunked-arraybuffer"; xhr.onreadystatechange = this._onReadyStateChange.bind(this); xhr.onprogress = this._onProgress.bind(this); xhr.onloadend = this._onLoadEnd.bind(this); xhr.onerror = this._onXhrError.bind(this); if (dataSource.withCredentials) { xhr.withCredentials = true; } if (typeof seekConfig.headers === "object") { var headers = seekConfig.headers; for (var key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } } if (typeof this._config.headers === "object") { var headers = this._config.headers; for (var key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kConnecting; xhr.send(); }; MozChunkedLoader2.prototype.abort = function() { this._requestAbort = true; if (this._xhr) { this._xhr.abort(); } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; }; MozChunkedLoader2.prototype._onReadyStateChange = function(e) { var xhr = e.target; if (xhr.readyState === 2) { if (xhr.responseURL != void 0 && xhr.responseURL !== this._requestURL) { if (this._onURLRedirect) { var redirectedURL = this._seekHandler.removeURLParameters(xhr.responseURL); this._onURLRedirect(redirectedURL); } } if (xhr.status !== 0 && (xhr.status < 200 || xhr.status > 299)) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.HTTP_STATUS_CODE_INVALID, { code: xhr.status, msg: xhr.statusText }); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException("MozChunkedLoader: Http code invalid, " + xhr.status + " " + xhr.statusText); } } else { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kBuffering; } } }; MozChunkedLoader2.prototype._onProgress = function(e) { if (this._status === _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError) { return; } if (this._contentLength === null) { if (e.total !== null && e.total !== 0) { this._contentLength = e.total; if (this._onContentLengthKnown) { this._onContentLengthKnown(this._contentLength); } } } var chunk = e.target.response; var byteStart = this._range.from + this._receivedLength; this._receivedLength += chunk.byteLength; if (this._onDataArrival) { this._onDataArrival(chunk, byteStart, this._receivedLength); } }; MozChunkedLoader2.prototype._onLoadEnd = function(e) { if (this._requestAbort === true) { this._requestAbort = false; return; } else if (this._status === _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError) { return; } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kComplete; if (this._onComplete) { this._onComplete(this._range.from, this._range.from + this._receivedLength - 1); } }; MozChunkedLoader2.prototype._onXhrError = function(e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderStatus.kError; var type2 = 0; var info = null; if (this._contentLength && e.loaded < this._contentLength) { type2 = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EARLY_EOF; info = { code: -1, msg: "Moz-Chunked stream meet Early-Eof" }; } else { type2 = _loader_js__WEBPACK_IMPORTED_MODULE_1__.LoaderErrors.EXCEPTION; info = { code: -1, msg: e.constructor.name + " " + e.type }; } if (this._onError) { this._onError(type2, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_2__.RuntimeException(info.msg); } }; return MozChunkedLoader2; }(_loader_js__WEBPACK_IMPORTED_MODULE_1__.BaseLoader); __webpack_exports__2["default"] = MozChunkedLoader; }, "./src/io/xhr-range-loader.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _speed_sampler_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/io/speed-sampler.js"); var _loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/io/loader.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/utils/exception.js"); var __extends = function() { var extendStatics = function(d2, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b2) { d3.__proto__ = b2; } || function(d3, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d3[p] = b2[p]; }; return extendStatics(d2, b); }; return function(d2, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d2, b); function __() { this.constructor = d2; } d2.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var RangeLoader = function(_super) { __extends(RangeLoader2, _super); function RangeLoader2(seekHandler, config) { var _this = _super.call(this, "xhr-range-loader") || this; _this.TAG = "RangeLoader"; _this._seekHandler = seekHandler; _this._config = config; _this._needStash = false; _this._chunkSizeKBList = [ 128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 5120, 6144, 7168, 8192 ]; _this._currentChunkSizeKB = 384; _this._currentSpeedNormalized = 0; _this._zeroSpeedChunkCount = 0; _this._xhr = null; _this._speedSampler = new _speed_sampler_js__WEBPACK_IMPORTED_MODULE_1__.default(); _this._requestAbort = false; _this._waitForTotalLength = false; _this._totalLengthReceived = false; _this._currentRequestURL = null; _this._currentRedirectedURL = null; _this._currentRequestRange = null; _this._totalLength = null; _this._contentLength = null; _this._receivedLength = 0; _this._lastTimeLoaded = 0; return _this; } RangeLoader2.isSupported = function() { try { var xhr = new XMLHttpRequest(); xhr.open("GET", "https://example.com", true); xhr.responseType = "arraybuffer"; return xhr.responseType === "arraybuffer"; } catch (e) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w("RangeLoader", e.message); return false; } }; RangeLoader2.prototype.destroy = function() { if (this.isWorking()) { this.abort(); } if (this._xhr) { this._xhr.onreadystatechange = null; this._xhr.onprogress = null; this._xhr.onload = null; this._xhr.onerror = null; this._xhr = null; } _super.prototype.destroy.call(this); }; Object.defineProperty(RangeLoader2.prototype, "currentSpeed", { get: function() { return this._speedSampler.lastSecondKBps; }, enumerable: false, configurable: true }); RangeLoader2.prototype.open = function(dataSource, range3) { this._dataSource = dataSource; this._range = range3; this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kConnecting; var useRefTotalLength = false; if (this._dataSource.filesize != void 0 && this._dataSource.filesize !== 0) { useRefTotalLength = true; this._totalLength = this._dataSource.filesize; } if (!this._totalLengthReceived && !useRefTotalLength) { this._waitForTotalLength = true; this._internalOpen(this._dataSource, { from: 0, to: -1 }); } else { this._openSubRange(); } }; RangeLoader2.prototype._openSubRange = function() { var chunkSize = this._currentChunkSizeKB * 1024; var from3 = this._range.from + this._receivedLength; var to = from3 + chunkSize; if (this._contentLength != null) { if (to - this._range.from >= this._contentLength) { to = this._range.from + this._contentLength - 1; } } this._currentRequestRange = { from: from3, to }; this._internalOpen(this._dataSource, this._currentRequestRange); }; RangeLoader2.prototype._internalOpen = function(dataSource, range3) { this._lastTimeLoaded = 0; var sourceURL = dataSource.url; if (this._config.reuseRedirectedURL) { if (this._currentRedirectedURL != void 0) { sourceURL = this._currentRedirectedURL; } else if (dataSource.redirectedURL != void 0) { sourceURL = dataSource.redirectedURL; } } var seekConfig = this._seekHandler.getConfig(sourceURL, range3); this._currentRequestURL = seekConfig.url; var xhr = this._xhr = new XMLHttpRequest(); xhr.open("GET", seekConfig.url, true); xhr.responseType = "arraybuffer"; xhr.onreadystatechange = this._onReadyStateChange.bind(this); xhr.onprogress = this._onProgress.bind(this); xhr.onload = this._onLoad.bind(this); xhr.onerror = this._onXhrError.bind(this); if (dataSource.withCredentials) { xhr.withCredentials = true; } if (typeof seekConfig.headers === "object") { var headers = seekConfig.headers; for (var key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } } if (typeof this._config.headers === "object") { var headers = this._config.headers; for (var key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } } xhr.send(); }; RangeLoader2.prototype.abort = function() { this._requestAbort = true; this._internalAbort(); this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kComplete; }; RangeLoader2.prototype._internalAbort = function() { if (this._xhr) { this._xhr.onreadystatechange = null; this._xhr.onprogress = null; this._xhr.onload = null; this._xhr.onerror = null; this._xhr.abort(); this._xhr = null; } }; RangeLoader2.prototype._onReadyStateChange = function(e) { var xhr = e.target; if (xhr.readyState === 2) { if (xhr.responseURL != void 0) { var redirectedURL = this._seekHandler.removeURLParameters(xhr.responseURL); if (xhr.responseURL !== this._currentRequestURL && redirectedURL !== this._currentRedirectedURL) { this._currentRedirectedURL = redirectedURL; if (this._onURLRedirect) { this._onURLRedirect(redirectedURL); } } } if (xhr.status >= 200 && xhr.status <= 299) { if (this._waitForTotalLength) { return; } this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kBuffering; } else { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kError; if (this._onError) { this._onError(_loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.HTTP_STATUS_CODE_INVALID, { code: xhr.status, msg: xhr.statusText }); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.RuntimeException("RangeLoader: Http code invalid, " + xhr.status + " " + xhr.statusText); } } } }; RangeLoader2.prototype._onProgress = function(e) { if (this._status === _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kError) { return; } if (this._contentLength === null) { var openNextRange = false; if (this._waitForTotalLength) { this._waitForTotalLength = false; this._totalLengthReceived = true; openNextRange = true; var total = e.total; this._internalAbort(); if (total != null & total !== 0) { this._totalLength = total; } } if (this._range.to === -1) { this._contentLength = this._totalLength - this._range.from; } else { this._contentLength = this._range.to - this._range.from + 1; } if (openNextRange) { this._openSubRange(); return; } if (this._onContentLengthKnown) { this._onContentLengthKnown(this._contentLength); } } var delta = e.loaded - this._lastTimeLoaded; this._lastTimeLoaded = e.loaded; this._speedSampler.addBytes(delta); }; RangeLoader2.prototype._normalizeSpeed = function(input) { var list = this._chunkSizeKBList; var last = list.length - 1; var mid = 0; var lbound = 0; var ubound = last; if (input < list[0]) { return list[0]; } while (lbound <= ubound) { mid = lbound + Math.floor((ubound - lbound) / 2); if (mid === last || input >= list[mid] && input < list[mid + 1]) { return list[mid]; } else if (list[mid] < input) { lbound = mid + 1; } else { ubound = mid - 1; } } }; RangeLoader2.prototype._onLoad = function(e) { if (this._status === _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kError) { return; } if (this._waitForTotalLength) { this._waitForTotalLength = false; return; } this._lastTimeLoaded = 0; var KBps = this._speedSampler.lastSecondKBps; if (KBps === 0) { this._zeroSpeedChunkCount++; if (this._zeroSpeedChunkCount >= 3) { KBps = this._speedSampler.currentKBps; } } if (KBps !== 0) { var normalized = this._normalizeSpeed(KBps); if (this._currentSpeedNormalized !== normalized) { this._currentSpeedNormalized = normalized; this._currentChunkSizeKB = normalized; } } var chunk = e.target.response; var byteStart = this._range.from + this._receivedLength; this._receivedLength += chunk.byteLength; var reportComplete = false; if (this._contentLength != null && this._receivedLength < this._contentLength) { this._openSubRange(); } else { reportComplete = true; } if (this._onDataArrival) { this._onDataArrival(chunk, byteStart, this._receivedLength); } if (reportComplete) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kComplete; if (this._onComplete) { this._onComplete(this._range.from, this._range.from + this._receivedLength - 1); } } }; RangeLoader2.prototype._onXhrError = function(e) { this._status = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderStatus.kError; var type2 = 0; var info = null; if (this._contentLength && this._receivedLength > 0 && this._receivedLength < this._contentLength) { type2 = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.EARLY_EOF; info = { code: -1, msg: "RangeLoader meet Early-Eof" }; } else { type2 = _loader_js__WEBPACK_IMPORTED_MODULE_2__.LoaderErrors.EXCEPTION; info = { code: -1, msg: e.constructor.name + " " + e.type }; } if (this._onError) { this._onError(type2, info); } else { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.RuntimeException(info.msg); } }; return RangeLoader2; }(_loader_js__WEBPACK_IMPORTED_MODULE_2__.BaseLoader); __webpack_exports__2["default"] = RangeLoader; }, "./src/player/flv-player.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = /* @__PURE__ */ __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/logger.js"); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/utils/browser.js"); var _player_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/player/player-events.js"); var _core_transmuxer_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/transmuxer.js"); var _core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/core/transmuxing-events.js"); var _core_mse_controller_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/core/mse-controller.js"); var _core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/core/mse-events.js"); var _player_errors_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/player/player-errors.js"); var _config_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__2("./src/config.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__2("./src/utils/exception.js"); var FlvPlayer = function() { function FlvPlayer2(mediaDataSource, config) { this.TAG = "FlvPlayer"; this._type = "FlvPlayer"; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); this._config = (0, _config_js__WEBPACK_IMPORTED_MODULE_9__.createDefaultConfig)(); if (typeof config === "object") { Object.assign(this._config, config); } if (mediaDataSource.type.toLowerCase() !== "flv") { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_10__.InvalidArgumentException("FlvPlayer requires an flv MediaDataSource input!"); } if (mediaDataSource.isLive === true) { this._config.isLive = true; } this.e = { onvLoadedMetadata: this._onvLoadedMetadata.bind(this), onvSeeking: this._onvSeeking.bind(this), onvCanPlay: this._onvCanPlay.bind(this), onvStalled: this._onvStalled.bind(this), onvProgress: this._onvProgress.bind(this) }; if (self.performance && self.performance.now) { this._now = self.performance.now.bind(self.performance); } else { this._now = Date.now; } this._pendingSeekTime = null; this._requestSetTime = false; this._seekpointRecord = null; this._progressChecker = null; this._mediaDataSource = mediaDataSource; this._mediaElement = null; this._msectl = null; this._transmuxer = null; this._mseSourceOpened = false; this._hasPendingLoad = false; this._receivedCanPlay = false; this._mediaInfo = null; this._statisticsInfo = null; var chromeNeedIDRFix = _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.chrome && (_utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.version.major < 50 || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.version.major === 50 && _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.version.build < 2661); this._alwaysSeekKeyframe = chromeNeedIDRFix || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.msedge || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.msie ? true : false; if (this._alwaysSeekKeyframe) { this._config.accurateSeek = false; } } FlvPlayer2.prototype.destroy = function() { if (this._progressChecker != null) { window.clearInterval(this._progressChecker); this._progressChecker = null; } if (this._transmuxer) { this.unload(); } if (this._mediaElement) { this.detachMediaElement(); } this.e = null; this._mediaDataSource = null; this._emitter.removeAllListeners(); this._emitter = null; }; FlvPlayer2.prototype.on = function(event2, listener) { var _this = this; if (event2 === _player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO) { if (this._mediaInfo != null) { Promise.resolve().then(function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO, _this.mediaInfo); }); } } else if (event2 === _player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO) { if (this._statisticsInfo != null) { Promise.resolve().then(function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO, _this.statisticsInfo); }); } } this._emitter.addListener(event2, listener); }; FlvPlayer2.prototype.off = function(event2, listener) { this._emitter.removeListener(event2, listener); }; FlvPlayer2.prototype.attachMediaElement = function(mediaElement) { var _this = this; this._mediaElement = mediaElement; mediaElement.addEventListener("loadedmetadata", this.e.onvLoadedMetadata); mediaElement.addEventListener("seeking", this.e.onvSeeking); mediaElement.addEventListener("canplay", this.e.onvCanPlay); mediaElement.addEventListener("stalled", this.e.onvStalled); mediaElement.addEventListener("progress", this.e.onvProgress); this._msectl = new _core_mse_controller_js__WEBPACK_IMPORTED_MODULE_6__.default(this._config); this._msectl.on(_core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__.default.UPDATE_END, this._onmseUpdateEnd.bind(this)); this._msectl.on(_core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__.default.BUFFER_FULL, this._onmseBufferFull.bind(this)); this._msectl.on(_core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__.default.SOURCE_OPEN, function() { _this._mseSourceOpened = true; if (_this._hasPendingLoad) { _this._hasPendingLoad = false; _this.load(); } }); this._msectl.on(_core_mse_events_js__WEBPACK_IMPORTED_MODULE_7__.default.ERROR, function(info) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, _player_errors_js__WEBPACK_IMPORTED_MODULE_8__.ErrorTypes.MEDIA_ERROR, _player_errors_js__WEBPACK_IMPORTED_MODULE_8__.ErrorDetails.MEDIA_MSE_ERROR, info); }); this._msectl.attachMediaElement(mediaElement); if (this._pendingSeekTime != null) { try { mediaElement.currentTime = this._pendingSeekTime; this._pendingSeekTime = null; } catch (e) { } } }; FlvPlayer2.prototype.detachMediaElement = function() { if (this._mediaElement) { this._msectl.detachMediaElement(); this._mediaElement.removeEventListener("loadedmetadata", this.e.onvLoadedMetadata); this._mediaElement.removeEventListener("seeking", this.e.onvSeeking); this._mediaElement.removeEventListener("canplay", this.e.onvCanPlay); this._mediaElement.removeEventListener("stalled", this.e.onvStalled); this._mediaElement.removeEventListener("progress", this.e.onvProgress); this._mediaElement = null; } if (this._msectl) { this._msectl.destroy(); this._msectl = null; } }; FlvPlayer2.prototype.load = function() { var _this = this; if (!this._mediaElement) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_10__.IllegalStateException("HTMLMediaElement must be attached before load()!"); } if (this._transmuxer) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_10__.IllegalStateException("FlvPlayer.load() has been called, please call unload() first!"); } if (this._hasPendingLoad) { return; } if (this._config.deferLoadAfterSourceOpen && this._mseSourceOpened === false) { this._hasPendingLoad = true; return; } if (this._mediaElement.readyState > 0) { this._requestSetTime = true; this._mediaElement.currentTime = 0; } this._transmuxer = new _core_transmuxer_js__WEBPACK_IMPORTED_MODULE_4__.default(this._mediaDataSource, this._config); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.INIT_SEGMENT, function(type2, is) { _this._msectl.appendInitSegment(is); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_SEGMENT, function(type2, ms) { _this._msectl.appendMediaSegment(ms); if (_this._config.lazyLoad && !_this._config.isLive) { var currentTime = _this._mediaElement.currentTime; if (ms.info.endDts >= (currentTime + _this._config.lazyLoadMaxDuration) * 1e3) { if (_this._progressChecker == null) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(_this.TAG, "Maximum buffering duration exceeded, suspend transmuxing task"); _this._suspendTransmuxer(); } } } }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.LOADING_COMPLETE, function() { _this._msectl.endOfStream(); _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.LOADING_COMPLETE); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOVERED_EARLY_EOF, function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.RECOVERED_EARLY_EOF); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.IO_ERROR, function(detail, info) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, _player_errors_js__WEBPACK_IMPORTED_MODULE_8__.ErrorTypes.NETWORK_ERROR, detail, info); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.DEMUX_ERROR, function(detail, info) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.ERROR, _player_errors_js__WEBPACK_IMPORTED_MODULE_8__.ErrorTypes.MEDIA_ERROR, detail, { code: -1, msg: info }); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.MEDIA_INFO, function(mediaInfo) { _this._mediaInfo = mediaInfo; _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.MEDIA_INFO, Object.assign({}, mediaInfo)); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.METADATA_ARRIVED, function(metadata) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.METADATA_ARRIVED, metadata); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.SCRIPTDATA_ARRIVED, function(data) { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.SCRIPTDATA_ARRIVED, data); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.STATISTICS_INFO, function(statInfo) { _this._statisticsInfo = _this._fillStatisticsInfo(statInfo); _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_3__.default.STATISTICS_INFO, Object.assign({}, _this._statisticsInfo)); }); this._transmuxer.on(_core_transmuxing_events_js__WEBPACK_IMPORTED_MODULE_5__.default.RECOMMEND_SEEKPOINT, function(milliseconds) { if (_this._mediaElement && !_this._config.accurateSeek) { _this._requestSetTime = true; _this._mediaElement.currentTime = milliseconds / 1e3; } }); this._transmuxer.open(); }; FlvPlayer2.prototype.unload = function() { if (this._mediaElement) { this._mediaElement.pause(); } if (this._msectl) { this._msectl.seek(0); } if (this._transmuxer) { this._transmuxer.close(); this._transmuxer.destroy(); this._transmuxer = null; } }; FlvPlayer2.prototype.play = function() { return this._mediaElement.play(); }; FlvPlayer2.prototype.pause = function() { this._mediaElement.pause(); }; Object.defineProperty(FlvPlayer2.prototype, "type", { get: function() { return this._type; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "buffered", { get: function() { return this._mediaElement.buffered; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "duration", { get: function() { return this._mediaElement.duration; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "volume", { get: function() { return this._mediaElement.volume; }, set: function(value) { this._mediaElement.volume = value; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "muted", { get: function() { return this._mediaElement.muted; }, set: function(muted) { this._mediaElement.muted = muted; }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "currentTime", { get: function() { if (this._mediaElement) { return this._mediaElement.currentTime; } return 0; }, set: function(seconds) { if (this._mediaElement) { this._internalSeek(seconds); } else { this._pendingSeekTime = seconds; } }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "mediaInfo", { get: function() { return Object.assign({}, this._mediaInfo); }, enumerable: false, configurable: true }); Object.defineProperty(FlvPlayer2.prototype, "statisticsInfo", { get: function() { if (this._statisticsInfo == null) { this._statisticsInfo = {}; } this._statisticsInfo = this._fillStatisticsInfo(this._statisticsInfo); return Object.assign({}, this._statisticsInfo); }, enumerable: false, configurable: true }); FlvPlayer2.prototype._fillStatisticsInfo = function(statInfo) { statInfo.playerType = this._type; if (!(this._mediaElement instanceof HTMLVideoElement)) { return statInfo; } var hasQualityInfo = true; var decoded = 0; var dropped = 0; if (this._mediaElement.getVideoPlaybackQuality) { var quality = this._mediaElement.getVideoPlaybackQuality(); decoded = quality.totalVideoFrames; dropped = quality.droppedVideoFrames; } else if (this._mediaElement.webkitDecodedFrameCount != void 0) { decoded = this._mediaElement.webkitDecodedFrameCount; dropped = this._mediaElement.webkitDroppedFrameCount; } else { hasQualityInfo = false; } if (hasQualityInfo) { statInfo.decodedFrames = decoded; statInfo.droppedFrames = dropped; } return statInfo; }; FlvPlayer2.prototype._onmseUpdateEnd = function() { if (!this._config.lazyLoad || this._config.isLive) { return; } var buffered = this._mediaElement.buffered; var currentTime = this._mediaElement.currentTime; var currentRangeEnd = 0; for (var i2 = 0; i2 < buffered.length; i2++) { var start2 = buffered.start(i2); var end = buffered.end(i2); if (start2 <= currentTime && currentTime < end) { currentRangeEnd = end; break; } } if (currentRangeEnd >= currentTime + this._config.lazyLoadMaxDuration && this._progressChecker == null) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Maximum buffering duration exceeded, suspend transmuxing task"); this._suspendTransmuxer(); } }; FlvPlayer2.prototype._onmseBufferFull = function() { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "MSE SourceBuffer is full, suspend transmuxing task"); if (this._progressChecker == null) { this._suspendTransmuxer(); } }; FlvPlayer2.prototype._suspendTransmuxer = function() { if (this._transmuxer) { this._transmuxer.pause(); if (this._progressChecker == null) { this._progressChecker = window.setInterval(this._checkProgressAndResume.bind(this), 1e3); } } }; FlvPlayer2.prototype._checkProgressAndResume = function() { var currentTime = this._mediaElement.currentTime; var buffered = this._mediaElement.buffered; var needResume = false; for (var i2 = 0; i2 < buffered.length; i2++) { var from3 = buffered.start(i2); var to = buffered.end(i2); if (currentTime >= from3 && currentTime < to) { if (currentTime >= to - this._config.lazyLoadRecoverDuration) { needResume = true; } break; } } if (needResume) { window.clearInterval(this._progressChecker); this._progressChecker = null; if (needResume) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.v(this.TAG, "Continue loading from paused position"); this._transmuxer.resume(); } } }; FlvPlayer2.prototype._isTimepointBuffered = function(seconds) { var buffered = this._mediaElement.buffered; for (var i2 = 0; i2 < buffered.length; i2++) { var from3 = buffered.start(i2); var to = buffered.end(i2); if (seconds >= from3 && seconds < to) { return true; } } return false; }; FlvPlayer2.prototype._internalSeek = function(seconds) { var directSeek = this._isTimepointBuffered(seconds); var directSeekBegin = false; var directSeekBeginTime = 0; if (seconds < 1 && this._mediaElement.buffered.length > 0) { var videoBeginTime = this._mediaElement.buffered.start(0); if (videoBeginTime < 1 && seconds < videoBeginTime || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari) { directSeekBegin = true; directSeekBeginTime = _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari ? 0.1 : videoBeginTime; } } if (directSeekBegin) { this._requestSetTime = true; this._mediaElement.currentTime = directSeekBeginTime; } else if (directSeek) { if (!this._alwaysSeekKeyframe) { this._requestSetTime = true; this._mediaElement.currentTime = seconds; } else { var idr = this._msectl.getNearestKeyframe(Math.floor(seconds * 1e3)); this._requestSetTime = true; if (idr != null) { this._mediaElement.currentTime = idr.dts / 1e3; } else { this._mediaElement.currentTime = seconds; } } if (this._progressChecker != null) { this._checkProgressAndResume(); } } else { if (this._progressChecker != null) { window.clearInterval(this._progressChecker); this._progressChecker = null; } this._msectl.seek(seconds); this._transmuxer.seek(Math.floor(seconds * 1e3)); if (this._config.accurateSeek) { this._requestSetTime = true; this._mediaElement.currentTime = seconds; } } }; FlvPlayer2.prototype._checkAndApplyUnbufferedSeekpoint = function() { if (this._seekpointRecord) { if (this._seekpointRecord.recordTime <= this._now() - 100) { var target = this._mediaElement.currentTime; this._seekpointRecord = null; if (!this._isTimepointBuffered(target)) { if (this._progressChecker != null) { window.clearTimeout(this._progressChecker); this._progressChecker = null; } this._msectl.seek(target); this._transmuxer.seek(Math.floor(target * 1e3)); if (this._config.accurateSeek) { this._requestSetTime = true; this._mediaElement.currentTime = target; } } } else { window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this), 50); } } }; FlvPlayer2.prototype._checkAndResumeStuckPlayback = function(stalled) { var media = this._mediaElement; if (stalled || !this._receivedCanPlay || media.readyState < 2) { var buffered = media.buffered; if (buffered.length > 0 && media.currentTime < buffered.start(0)) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.w(this.TAG, "Playback seems stuck at " + media.currentTime + ", seek to " + buffered.start(0)); this._requestSetTime = true; this._mediaElement.currentTime = buffered.start(0); this._mediaElement.removeEventListener("progress", this.e.onvProgress); } } else { this._mediaElement.removeEventListener("progress", this.e.onvProgress); } }; FlvPlayer2.prototype._onvLoadedMetadata = function(e) { if (this._pendingSeekTime != null) { this._mediaElement.currentTime = this._pendingSeekTime; this._pendingSeekTime = null; } }; FlvPlayer2.prototype._onvSeeking = function(e) { var target = this._mediaElement.currentTime; var buffered = this._mediaElement.buffered; if (this._requestSetTime) { this._requestSetTime = false; return; } if (target < 1 && buffered.length > 0) { var videoBeginTime = buffered.start(0); if (videoBeginTime < 1 && target < videoBeginTime || _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari) { this._requestSetTime = true; this._mediaElement.currentTime = _utils_browser_js__WEBPACK_IMPORTED_MODULE_2__.default.safari ? 0.1 : videoBeginTime; return; } } if (this._isTimepointBuffered(target)) { if (this._alwaysSeekKeyframe) { var idr = this._msectl.getNearestKeyframe(Math.floor(target * 1e3)); if (idr != null) { this._requestSetTime = true; this._mediaElement.currentTime = idr.dts / 1e3; } } if (this._progressChecker != null) { this._checkProgressAndResume(); } return; } this._seekpointRecord = { seekPoint: target, recordTime: this._now() }; window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this), 50); }; FlvPlayer2.prototype._onvCanPlay = function(e) { this._receivedCanPlay = true; this._mediaElement.removeEventListener("canplay", this.e.onvCanPlay); }; FlvPlayer2.prototype._onvStalled = function(e) { this._checkAndResumeStuckPlayback(true); }; FlvPlayer2.prototype._onvProgress = function(e) { this._checkAndResumeStuckPlayback(); }; return FlvPlayer2; }(); __webpack_exports__2["default"] = FlvPlayer; }, "./src/player/native-player.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = /* @__PURE__ */ __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _player_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/player/player-events.js"); var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/config.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/utils/exception.js"); var NativePlayer = function() { function NativePlayer2(mediaDataSource, config) { this.TAG = "NativePlayer"; this._type = "NativePlayer"; this._emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); this._config = (0, _config_js__WEBPACK_IMPORTED_MODULE_2__.createDefaultConfig)(); if (typeof config === "object") { Object.assign(this._config, config); } if (mediaDataSource.type.toLowerCase() === "flv") { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.InvalidArgumentException("NativePlayer does't support flv MediaDataSource input!"); } if (mediaDataSource.hasOwnProperty("segments")) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.InvalidArgumentException("NativePlayer(" + mediaDataSource.type + ") doesn't support multipart playback!"); } this.e = { onvLoadedMetadata: this._onvLoadedMetadata.bind(this) }; this._pendingSeekTime = null; this._statisticsReporter = null; this._mediaDataSource = mediaDataSource; this._mediaElement = null; } NativePlayer2.prototype.destroy = function() { if (this._mediaElement) { this.unload(); this.detachMediaElement(); } this.e = null; this._mediaDataSource = null; this._emitter.removeAllListeners(); this._emitter = null; }; NativePlayer2.prototype.on = function(event2, listener) { var _this = this; if (event2 === _player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.MEDIA_INFO) { if (this._mediaElement != null && this._mediaElement.readyState !== 0) { Promise.resolve().then(function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.MEDIA_INFO, _this.mediaInfo); }); } } else if (event2 === _player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.STATISTICS_INFO) { if (this._mediaElement != null && this._mediaElement.readyState !== 0) { Promise.resolve().then(function() { _this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.STATISTICS_INFO, _this.statisticsInfo); }); } } this._emitter.addListener(event2, listener); }; NativePlayer2.prototype.off = function(event2, listener) { this._emitter.removeListener(event2, listener); }; NativePlayer2.prototype.attachMediaElement = function(mediaElement) { this._mediaElement = mediaElement; mediaElement.addEventListener("loadedmetadata", this.e.onvLoadedMetadata); if (this._pendingSeekTime != null) { try { mediaElement.currentTime = this._pendingSeekTime; this._pendingSeekTime = null; } catch (e) { } } }; NativePlayer2.prototype.detachMediaElement = function() { if (this._mediaElement) { this._mediaElement.src = ""; this._mediaElement.removeAttribute("src"); this._mediaElement.removeEventListener("loadedmetadata", this.e.onvLoadedMetadata); this._mediaElement = null; } if (this._statisticsReporter != null) { window.clearInterval(this._statisticsReporter); this._statisticsReporter = null; } }; NativePlayer2.prototype.load = function() { if (!this._mediaElement) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_3__.IllegalStateException("HTMLMediaElement must be attached before load()!"); } this._mediaElement.src = this._mediaDataSource.url; if (this._mediaElement.readyState > 0) { this._mediaElement.currentTime = 0; } this._mediaElement.preload = "auto"; this._mediaElement.load(); this._statisticsReporter = window.setInterval(this._reportStatisticsInfo.bind(this), this._config.statisticsInfoReportInterval); }; NativePlayer2.prototype.unload = function() { if (this._mediaElement) { this._mediaElement.src = ""; this._mediaElement.removeAttribute("src"); } if (this._statisticsReporter != null) { window.clearInterval(this._statisticsReporter); this._statisticsReporter = null; } }; NativePlayer2.prototype.play = function() { return this._mediaElement.play(); }; NativePlayer2.prototype.pause = function() { this._mediaElement.pause(); }; Object.defineProperty(NativePlayer2.prototype, "type", { get: function() { return this._type; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "buffered", { get: function() { return this._mediaElement.buffered; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "duration", { get: function() { return this._mediaElement.duration; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "volume", { get: function() { return this._mediaElement.volume; }, set: function(value) { this._mediaElement.volume = value; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "muted", { get: function() { return this._mediaElement.muted; }, set: function(muted) { this._mediaElement.muted = muted; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "currentTime", { get: function() { if (this._mediaElement) { return this._mediaElement.currentTime; } return 0; }, set: function(seconds) { if (this._mediaElement) { this._mediaElement.currentTime = seconds; } else { this._pendingSeekTime = seconds; } }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "mediaInfo", { get: function() { var mediaPrefix = this._mediaElement instanceof HTMLAudioElement ? "audio/" : "video/"; var info = { mimeType: mediaPrefix + this._mediaDataSource.type }; if (this._mediaElement) { info.duration = Math.floor(this._mediaElement.duration * 1e3); if (this._mediaElement instanceof HTMLVideoElement) { info.width = this._mediaElement.videoWidth; info.height = this._mediaElement.videoHeight; } } return info; }, enumerable: false, configurable: true }); Object.defineProperty(NativePlayer2.prototype, "statisticsInfo", { get: function() { var info = { playerType: this._type, url: this._mediaDataSource.url }; if (!(this._mediaElement instanceof HTMLVideoElement)) { return info; } var hasQualityInfo = true; var decoded = 0; var dropped = 0; if (this._mediaElement.getVideoPlaybackQuality) { var quality = this._mediaElement.getVideoPlaybackQuality(); decoded = quality.totalVideoFrames; dropped = quality.droppedVideoFrames; } else if (this._mediaElement.webkitDecodedFrameCount != void 0) { decoded = this._mediaElement.webkitDecodedFrameCount; dropped = this._mediaElement.webkitDroppedFrameCount; } else { hasQualityInfo = false; } if (hasQualityInfo) { info.decodedFrames = decoded; info.droppedFrames = dropped; } return info; }, enumerable: false, configurable: true }); NativePlayer2.prototype._onvLoadedMetadata = function(e) { if (this._pendingSeekTime != null) { this._mediaElement.currentTime = this._pendingSeekTime; this._pendingSeekTime = null; } this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.MEDIA_INFO, this.mediaInfo); }; NativePlayer2.prototype._reportStatisticsInfo = function() { this._emitter.emit(_player_events_js__WEBPACK_IMPORTED_MODULE_1__.default.STATISTICS_INFO, this.statisticsInfo); }; return NativePlayer2; }(); __webpack_exports__2["default"] = NativePlayer; }, "./src/player/player-errors.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "ErrorTypes": function() { return ErrorTypes; }, "ErrorDetails": function() { return ErrorDetails; } }); var _io_loader_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/io/loader.js"); var _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/demux/demux-errors.js"); var ErrorTypes = { NETWORK_ERROR: "NetworkError", MEDIA_ERROR: "MediaError", OTHER_ERROR: "OtherError" }; var ErrorDetails = { NETWORK_EXCEPTION: _io_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.EXCEPTION, NETWORK_STATUS_CODE_INVALID: _io_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.HTTP_STATUS_CODE_INVALID, NETWORK_TIMEOUT: _io_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.CONNECTING_TIMEOUT, NETWORK_UNRECOVERABLE_EARLY_EOF: _io_loader_js__WEBPACK_IMPORTED_MODULE_0__.LoaderErrors.UNRECOVERABLE_EARLY_EOF, MEDIA_MSE_ERROR: "MediaMSEError", MEDIA_FORMAT_ERROR: _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_1__.default.FORMAT_ERROR, MEDIA_FORMAT_UNSUPPORTED: _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_1__.default.FORMAT_UNSUPPORTED, MEDIA_CODEC_UNSUPPORTED: _demux_demux_errors_js__WEBPACK_IMPORTED_MODULE_1__.default.CODEC_UNSUPPORTED }; }, "./src/player/player-events.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var PlayerEvents = { ERROR: "error", LOADING_COMPLETE: "loading_complete", RECOVERED_EARLY_EOF: "recovered_early_eof", MEDIA_INFO: "media_info", METADATA_ARRIVED: "metadata_arrived", SCRIPTDATA_ARRIVED: "scriptdata_arrived", STATISTICS_INFO: "statistics_info" }; __webpack_exports__2["default"] = PlayerEvents; }, "./src/remux/aac-silent.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var AAC = function() { function AAC2() { } AAC2.getSilentFrame = function(codec, channelCount) { if (codec === "mp4a.40.2") { if (channelCount === 1) { return new Uint8Array([0, 200, 0, 128, 35, 128]); } else if (channelCount === 2) { return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]); } else if (channelCount === 3) { return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]); } else if (channelCount === 4) { return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]); } else if (channelCount === 5) { return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]); } else if (channelCount === 6) { return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224]); } } else { if (channelCount === 1) { return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); } else if (channelCount === 2) { return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); } else if (channelCount === 3) { return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); } } return null; }; return AAC2; }(); __webpack_exports__2["default"] = AAC; }, "./src/remux/mp4-generator.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var MP4 = function() { function MP42() { } MP42.init = function() { MP42.types = { avc1: [], avcC: [], btrt: [], dinf: [], dref: [], esds: [], ftyp: [], hdlr: [], mdat: [], mdhd: [], mdia: [], mfhd: [], minf: [], moof: [], moov: [], mp4a: [], mvex: [], mvhd: [], sdtp: [], stbl: [], stco: [], stsc: [], stsd: [], stsz: [], stts: [], tfdt: [], tfhd: [], traf: [], trak: [], trun: [], trex: [], tkhd: [], vmhd: [], smhd: [], ".mp3": [] }; for (var name_1 in MP42.types) { if (MP42.types.hasOwnProperty(name_1)) { MP42.types[name_1] = [ name_1.charCodeAt(0), name_1.charCodeAt(1), name_1.charCodeAt(2), name_1.charCodeAt(3) ]; } } var constants = MP42.constants = {}; constants.FTYP = new Uint8Array([ 105, 115, 111, 109, 0, 0, 0, 1, 105, 115, 111, 109, 97, 118, 99, 49 ]); constants.STSD_PREFIX = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1 ]); constants.STTS = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0 ]); constants.STSC = constants.STCO = constants.STTS; constants.STSZ = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]); constants.HDLR_VIDEO = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0 ]); constants.HDLR_AUDIO = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0 ]); constants.DREF = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1 ]); constants.SMHD = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0 ]); constants.VMHD = new Uint8Array([ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ]); }; MP42.box = function(type2) { var size = 8; var result = null; var datas = Array.prototype.slice.call(arguments, 1); var arrayCount = datas.length; for (var i2 = 0; i2 < arrayCount; i2++) { size += datas[i2].byteLength; } result = new Uint8Array(size); result[0] = size >>> 24 & 255; result[1] = size >>> 16 & 255; result[2] = size >>> 8 & 255; result[3] = size & 255; result.set(type2, 4); var offset = 8; for (var i2 = 0; i2 < arrayCount; i2++) { result.set(datas[i2], offset); offset += datas[i2].byteLength; } return result; }; MP42.generateInitSegment = function(meta2) { var ftyp = MP42.box(MP42.types.ftyp, MP42.constants.FTYP); var moov = MP42.moov(meta2); var result = new Uint8Array(ftyp.byteLength + moov.byteLength); result.set(ftyp, 0); result.set(moov, ftyp.byteLength); return result; }; MP42.moov = function(meta2) { var mvhd = MP42.mvhd(meta2.timescale, meta2.duration); var trak = MP42.trak(meta2); var mvex = MP42.mvex(meta2); return MP42.box(MP42.types.moov, mvhd, trak, mvex); }; MP42.mvhd = function(timescale2, duration5) { return MP42.box(MP42.types.mvhd, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, timescale2 >>> 24 & 255, timescale2 >>> 16 & 255, timescale2 >>> 8 & 255, timescale2 & 255, duration5 >>> 24 & 255, duration5 >>> 16 & 255, duration5 >>> 8 & 255, duration5 & 255, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255 ])); }; MP42.trak = function(meta2) { return MP42.box(MP42.types.trak, MP42.tkhd(meta2), MP42.mdia(meta2)); }; MP42.tkhd = function(meta2) { var trackId = meta2.id, duration5 = meta2.duration; var width2 = meta2.presentWidth, height2 = meta2.presentHeight; return MP42.box(MP42.types.tkhd, new Uint8Array([ 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, trackId >>> 24 & 255, trackId >>> 16 & 255, trackId >>> 8 & 255, trackId & 255, 0, 0, 0, 0, duration5 >>> 24 & 255, duration5 >>> 16 & 255, duration5 >>> 8 & 255, duration5 & 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, width2 >>> 8 & 255, width2 & 255, 0, 0, height2 >>> 8 & 255, height2 & 255, 0, 0 ])); }; MP42.mdia = function(meta2) { return MP42.box(MP42.types.mdia, MP42.mdhd(meta2), MP42.hdlr(meta2), MP42.minf(meta2)); }; MP42.mdhd = function(meta2) { var timescale2 = meta2.timescale; var duration5 = meta2.duration; return MP42.box(MP42.types.mdhd, new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, timescale2 >>> 24 & 255, timescale2 >>> 16 & 255, timescale2 >>> 8 & 255, timescale2 & 255, duration5 >>> 24 & 255, duration5 >>> 16 & 255, duration5 >>> 8 & 255, duration5 & 255, 85, 196, 0, 0 ])); }; MP42.hdlr = function(meta2) { var data = null; if (meta2.type === "audio") { data = MP42.constants.HDLR_AUDIO; } else { data = MP42.constants.HDLR_VIDEO; } return MP42.box(MP42.types.hdlr, data); }; MP42.minf = function(meta2) { var xmhd = null; if (meta2.type === "audio") { xmhd = MP42.box(MP42.types.smhd, MP42.constants.SMHD); } else { xmhd = MP42.box(MP42.types.vmhd, MP42.constants.VMHD); } return MP42.box(MP42.types.minf, xmhd, MP42.dinf(), MP42.stbl(meta2)); }; MP42.dinf = function() { var result = MP42.box(MP42.types.dinf, MP42.box(MP42.types.dref, MP42.constants.DREF)); return result; }; MP42.stbl = function(meta2) { var result = MP42.box( MP42.types.stbl, MP42.stsd(meta2), MP42.box(MP42.types.stts, MP42.constants.STTS), MP42.box(MP42.types.stsc, MP42.constants.STSC), MP42.box(MP42.types.stsz, MP42.constants.STSZ), MP42.box(MP42.types.stco, MP42.constants.STCO) ); return result; }; MP42.stsd = function(meta2) { if (meta2.type === "audio") { if (meta2.codec === "mp3") { return MP42.box(MP42.types.stsd, MP42.constants.STSD_PREFIX, MP42.mp3(meta2)); } return MP42.box(MP42.types.stsd, MP42.constants.STSD_PREFIX, MP42.mp4a(meta2)); } else { return MP42.box(MP42.types.stsd, MP42.constants.STSD_PREFIX, MP42.avc1(meta2)); } }; MP42.mp3 = function(meta2) { var channelCount = meta2.channelCount; var sampleRate = meta2.audioSampleRate; var data = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, channelCount, 0, 16, 0, 0, 0, 0, sampleRate >>> 8 & 255, sampleRate & 255, 0, 0 ]); return MP42.box(MP42.types[".mp3"], data); }; MP42.mp4a = function(meta2) { var channelCount = meta2.channelCount; var sampleRate = meta2.audioSampleRate; var data = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, channelCount, 0, 16, 0, 0, 0, 0, sampleRate >>> 8 & 255, sampleRate & 255, 0, 0 ]); return MP42.box(MP42.types.mp4a, data, MP42.esds(meta2)); }; MP42.esds = function(meta2) { var config = meta2.config || []; var configSize = config.length; var data = new Uint8Array([ 0, 0, 0, 0, 3, 23 + configSize, 0, 1, 0, 4, 15 + configSize, 64, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5 ].concat([ configSize ]).concat(config).concat([ 6, 1, 2 ])); return MP42.box(MP42.types.esds, data); }; MP42.avc1 = function(meta2) { var avcc = meta2.avcc; var width2 = meta2.codecWidth, height2 = meta2.codecHeight; var data = new Uint8Array([ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, width2 >>> 8 & 255, width2 & 255, height2 >>> 8 & 255, height2 & 255, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 10, 120, 113, 113, 47, 102, 108, 118, 46, 106, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 255 ]); return MP42.box(MP42.types.avc1, data, MP42.box(MP42.types.avcC, avcc)); }; MP42.mvex = function(meta2) { return MP42.box(MP42.types.mvex, MP42.trex(meta2)); }; MP42.trex = function(meta2) { var trackId = meta2.id; var data = new Uint8Array([ 0, 0, 0, 0, trackId >>> 24 & 255, trackId >>> 16 & 255, trackId >>> 8 & 255, trackId & 255, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1 ]); return MP42.box(MP42.types.trex, data); }; MP42.moof = function(track, baseMediaDecodeTime) { return MP42.box(MP42.types.moof, MP42.mfhd(track.sequenceNumber), MP42.traf(track, baseMediaDecodeTime)); }; MP42.mfhd = function(sequenceNumber) { var data = new Uint8Array([ 0, 0, 0, 0, sequenceNumber >>> 24 & 255, sequenceNumber >>> 16 & 255, sequenceNumber >>> 8 & 255, sequenceNumber & 255 ]); return MP42.box(MP42.types.mfhd, data); }; MP42.traf = function(track, baseMediaDecodeTime) { var trackId = track.id; var tfhd = MP42.box(MP42.types.tfhd, new Uint8Array([ 0, 0, 0, 0, trackId >>> 24 & 255, trackId >>> 16 & 255, trackId >>> 8 & 255, trackId & 255 ])); var tfdt = MP42.box(MP42.types.tfdt, new Uint8Array([ 0, 0, 0, 0, baseMediaDecodeTime >>> 24 & 255, baseMediaDecodeTime >>> 16 & 255, baseMediaDecodeTime >>> 8 & 255, baseMediaDecodeTime & 255 ])); var sdtp = MP42.sdtp(track); var trun = MP42.trun(track, sdtp.byteLength + 16 + 16 + 8 + 16 + 8 + 8); return MP42.box(MP42.types.traf, tfhd, tfdt, trun, sdtp); }; MP42.sdtp = function(track) { var samples = track.samples || []; var sampleCount = samples.length; var data = new Uint8Array(4 + sampleCount); for (var i2 = 0; i2 < sampleCount; i2++) { var flags = samples[i2].flags; data[i2 + 4] = flags.isLeading << 6 | flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy; } return MP42.box(MP42.types.sdtp, data); }; MP42.trun = function(track, offset) { var samples = track.samples || []; var sampleCount = samples.length; var dataSize = 12 + 16 * sampleCount; var data = new Uint8Array(dataSize); offset += 8 + dataSize; data.set([ 0, 0, 15, 1, sampleCount >>> 24 & 255, sampleCount >>> 16 & 255, sampleCount >>> 8 & 255, sampleCount & 255, offset >>> 24 & 255, offset >>> 16 & 255, offset >>> 8 & 255, offset & 255 ], 0); for (var i2 = 0; i2 < sampleCount; i2++) { var duration5 = samples[i2].duration; var size = samples[i2].size; var flags = samples[i2].flags; var cts = samples[i2].cts; data.set([ duration5 >>> 24 & 255, duration5 >>> 16 & 255, duration5 >>> 8 & 255, duration5 & 255, size >>> 24 & 255, size >>> 16 & 255, size >>> 8 & 255, size & 255, flags.isLeading << 2 | flags.dependsOn, flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.isNonSync, 0, 0, cts >>> 24 & 255, cts >>> 16 & 255, cts >>> 8 & 255, cts & 255 ], 12 + 16 * i2); } return MP42.box(MP42.types.trun, data); }; MP42.mdat = function(data) { return MP42.box(MP42.types.mdat, data); }; return MP42; }(); MP4.init(); __webpack_exports__2["default"] = MP4; }, "./src/remux/mp4-remuxer.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/utils/logger.js"); var _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/remux/mp4-generator.js"); var _aac_silent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/remux/aac-silent.js"); var _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/utils/browser.js"); var _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/core/media-segment-info.js"); var _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/utils/exception.js"); var MP4Remuxer = function() { function MP4Remuxer2(config) { this.TAG = "MP4Remuxer"; this._config = config; this._isLive = config.isLive === true ? true : false; this._dtsBase = -1; this._dtsBaseInited = false; this._audioDtsBase = Infinity; this._videoDtsBase = Infinity; this._audioNextDts = void 0; this._videoNextDts = void 0; this._audioStashedLastSample = null; this._videoStashedLastSample = null; this._audioMeta = null; this._videoMeta = null; this._audioSegmentInfoList = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.MediaSegmentInfoList("audio"); this._videoSegmentInfoList = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.MediaSegmentInfoList("video"); this._onInitSegment = null; this._onMediaSegment = null; this._forceFirstIDR = _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.chrome && (_utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.version.major < 50 || _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.version.major === 50 && _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.version.build < 2661) ? true : false; this._fillSilentAfterSeek = _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.msedge || _utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.msie; this._mp3UseMpegAudio = !_utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.firefox; this._fillAudioTimestampGap = this._config.fixAudioTimestampGap; } MP4Remuxer2.prototype.destroy = function() { this._dtsBase = -1; this._dtsBaseInited = false; this._audioMeta = null; this._videoMeta = null; this._audioSegmentInfoList.clear(); this._audioSegmentInfoList = null; this._videoSegmentInfoList.clear(); this._videoSegmentInfoList = null; this._onInitSegment = null; this._onMediaSegment = null; }; MP4Remuxer2.prototype.bindDataSource = function(producer) { producer.onDataAvailable = this.remux.bind(this); producer.onTrackMetadata = this._onTrackMetadataReceived.bind(this); return this; }; Object.defineProperty(MP4Remuxer2.prototype, "onInitSegment", { get: function() { return this._onInitSegment; }, set: function(callback2) { this._onInitSegment = callback2; }, enumerable: false, configurable: true }); Object.defineProperty(MP4Remuxer2.prototype, "onMediaSegment", { get: function() { return this._onMediaSegment; }, set: function(callback2) { this._onMediaSegment = callback2; }, enumerable: false, configurable: true }); MP4Remuxer2.prototype.insertDiscontinuity = function() { this._audioNextDts = this._videoNextDts = void 0; }; MP4Remuxer2.prototype.seek = function(originalDts) { this._audioStashedLastSample = null; this._videoStashedLastSample = null; this._videoSegmentInfoList.clear(); this._audioSegmentInfoList.clear(); }; MP4Remuxer2.prototype.remux = function(audioTrack, videoTrack) { if (!this._onMediaSegment) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__.IllegalStateException("MP4Remuxer: onMediaSegment callback must be specificed!"); } if (!this._dtsBaseInited) { this._calculateDtsBase(audioTrack, videoTrack); } this._remuxVideo(videoTrack); this._remuxAudio(audioTrack); }; MP4Remuxer2.prototype._onTrackMetadataReceived = function(type2, metadata) { var metabox = null; var container = "mp4"; var codec = metadata.codec; if (type2 === "audio") { this._audioMeta = metadata; if (metadata.codec === "mp3" && this._mp3UseMpegAudio) { container = "mpeg"; codec = ""; metabox = new Uint8Array(); } else { metabox = _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.generateInitSegment(metadata); } } else if (type2 === "video") { this._videoMeta = metadata; metabox = _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.generateInitSegment(metadata); } else { return; } if (!this._onInitSegment) { throw new _utils_exception_js__WEBPACK_IMPORTED_MODULE_5__.IllegalStateException("MP4Remuxer: onInitSegment callback must be specified!"); } this._onInitSegment(type2, { type: type2, data: metabox.buffer, codec, container: type2 + "/" + container, mediaDuration: metadata.duration }); }; MP4Remuxer2.prototype._calculateDtsBase = function(audioTrack, videoTrack) { if (this._dtsBaseInited) { return; } if (audioTrack.samples && audioTrack.samples.length) { this._audioDtsBase = audioTrack.samples[0].dts; } if (videoTrack.samples && videoTrack.samples.length) { this._videoDtsBase = videoTrack.samples[0].dts; } this._dtsBase = Math.min(this._audioDtsBase, this._videoDtsBase); this._dtsBaseInited = true; }; MP4Remuxer2.prototype.flushStashedSamples = function() { var videoSample = this._videoStashedLastSample; var audioSample = this._audioStashedLastSample; var videoTrack = { type: "video", id: 1, sequenceNumber: 0, samples: [], length: 0 }; if (videoSample != null) { videoTrack.samples.push(videoSample); videoTrack.length = videoSample.length; } var audioTrack = { type: "audio", id: 2, sequenceNumber: 0, samples: [], length: 0 }; if (audioSample != null) { audioTrack.samples.push(audioSample); audioTrack.length = audioSample.length; } this._videoStashedLastSample = null; this._audioStashedLastSample = null; this._remuxVideo(videoTrack, true); this._remuxAudio(audioTrack, true); }; MP4Remuxer2.prototype._remuxAudio = function(audioTrack, force) { if (this._audioMeta == null) { return; } var track = audioTrack; var samples = track.samples; var dtsCorrection = void 0; var firstDts = -1, lastDts = -1; var refSampleDuration = this._audioMeta.refSampleDuration; var mpegRawTrack = this._audioMeta.codec === "mp3" && this._mp3UseMpegAudio; var firstSegmentAfterSeek = this._dtsBaseInited && this._audioNextDts === void 0; var insertPrefixSilentFrame = false; if (!samples || samples.length === 0) { return; } if (samples.length === 1 && !force) { return; } var offset = 0; var mdatbox = null; var mdatBytes = 0; if (mpegRawTrack) { offset = 0; mdatBytes = track.length; } else { offset = 8; mdatBytes = 8 + track.length; } var lastSample = null; if (samples.length > 1) { lastSample = samples.pop(); mdatBytes -= lastSample.length; } if (this._audioStashedLastSample != null) { var sample = this._audioStashedLastSample; this._audioStashedLastSample = null; samples.unshift(sample); mdatBytes += sample.length; } if (lastSample != null) { this._audioStashedLastSample = lastSample; } var firstSampleOriginalDts = samples[0].dts - this._dtsBase; if (this._audioNextDts) { dtsCorrection = firstSampleOriginalDts - this._audioNextDts; } else { if (this._audioSegmentInfoList.isEmpty()) { dtsCorrection = 0; if (this._fillSilentAfterSeek && !this._videoSegmentInfoList.isEmpty()) { if (this._audioMeta.originalCodec !== "mp3") { insertPrefixSilentFrame = true; } } } else { var lastSample_1 = this._audioSegmentInfoList.getLastSampleBefore(firstSampleOriginalDts); if (lastSample_1 != null) { var distance2 = firstSampleOriginalDts - (lastSample_1.originalDts + lastSample_1.duration); if (distance2 <= 3) { distance2 = 0; } var expectedDts = lastSample_1.dts + lastSample_1.duration + distance2; dtsCorrection = firstSampleOriginalDts - expectedDts; } else { dtsCorrection = 0; } } } if (insertPrefixSilentFrame) { var firstSampleDts = firstSampleOriginalDts - dtsCorrection; var videoSegment = this._videoSegmentInfoList.getLastSegmentBefore(firstSampleOriginalDts); if (videoSegment != null && videoSegment.beginDts < firstSampleDts) { var silentUnit = _aac_silent_js__WEBPACK_IMPORTED_MODULE_2__.default.getSilentFrame(this._audioMeta.originalCodec, this._audioMeta.channelCount); if (silentUnit) { var dts = videoSegment.beginDts; var silentFrameDuration = firstSampleDts - videoSegment.beginDts; _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.v(this.TAG, "InsertPrefixSilentAudio: dts: " + dts + ", duration: " + silentFrameDuration); samples.unshift({ unit: silentUnit, dts, pts: dts }); mdatBytes += silentUnit.byteLength; } } else { insertPrefixSilentFrame = false; } } var mp4Samples = []; for (var i2 = 0; i2 < samples.length; i2++) { var sample = samples[i2]; var unit = sample.unit; var originalDts = sample.dts - this._dtsBase; var dts = originalDts; var needFillSilentFrames = false; var silentFrames = null; var sampleDuration = 0; if (originalDts < -1e-3) { continue; } if (this._audioMeta.codec !== "mp3") { var curRefDts = originalDts; var maxAudioFramesDrift = 3; if (this._audioNextDts) { curRefDts = this._audioNextDts; } dtsCorrection = originalDts - curRefDts; if (dtsCorrection <= -maxAudioFramesDrift * refSampleDuration) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Dropping 1 audio frame (originalDts: " + originalDts + " ms ,curRefDts: " + curRefDts + " ms) due to dtsCorrection: " + dtsCorrection + " ms overlap."); continue; } else if (dtsCorrection >= maxAudioFramesDrift * refSampleDuration && this._fillAudioTimestampGap && !_utils_browser_js__WEBPACK_IMPORTED_MODULE_3__.default.safari) { needFillSilentFrames = true; var frameCount = Math.floor(dtsCorrection / refSampleDuration); _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.\n" + ("originalDts: " + originalDts + " ms, curRefDts: " + curRefDts + " ms, ") + ("dtsCorrection: " + Math.round(dtsCorrection) + " ms, generate: " + frameCount + " frames")); dts = Math.floor(curRefDts); sampleDuration = Math.floor(curRefDts + refSampleDuration) - dts; var silentUnit = _aac_silent_js__WEBPACK_IMPORTED_MODULE_2__.default.getSilentFrame(this._audioMeta.originalCodec, this._audioMeta.channelCount); if (silentUnit == null) { _utils_logger_js__WEBPACK_IMPORTED_MODULE_0__.default.w(this.TAG, "Unable to generate silent frame for " + (this._audioMeta.originalCodec + " with " + this._audioMeta.channelCount + " channels, repeat last frame")); silentUnit = unit; } silentFrames = []; for (var j = 0; j < frameCount; j++) { curRefDts = curRefDts + refSampleDuration; var intDts = Math.floor(curRefDts); var intDuration = Math.floor(curRefDts + refSampleDuration) - intDts; var frame = { dts: intDts, pts: intDts, cts: 0, unit: silentUnit, size: silentUnit.byteLength, duration: intDuration, originalDts, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0 } }; silentFrames.push(frame); mdatBytes += frame.size; } this._audioNextDts = curRefDts + refSampleDuration; } else { dts = Math.floor(curRefDts); sampleDuration = Math.floor(curRefDts + refSampleDuration) - dts; this._audioNextDts = curRefDts + refSampleDuration; } } else { dts = originalDts - dtsCorrection; if (i2 !== samples.length - 1) { var nextDts = samples[i2 + 1].dts - this._dtsBase - dtsCorrection; sampleDuration = nextDts - dts; } else { if (lastSample != null) { var nextDts = lastSample.dts - this._dtsBase - dtsCorrection; sampleDuration = nextDts - dts; } else if (mp4Samples.length >= 1) { sampleDuration = mp4Samples[mp4Samples.length - 1].duration; } else { sampleDuration = Math.floor(refSampleDuration); } } this._audioNextDts = dts + sampleDuration; } if (firstDts === -1) { firstDts = dts; } mp4Samples.push({ dts, pts: dts, cts: 0, unit: sample.unit, size: sample.unit.byteLength, duration: sampleDuration, originalDts, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0 } }); if (needFillSilentFrames) { mp4Samples.push.apply(mp4Samples, silentFrames); } } if (mp4Samples.length === 0) { track.samples = []; track.length = 0; return; } if (mpegRawTrack) { mdatbox = new Uint8Array(mdatBytes); } else { mdatbox = new Uint8Array(mdatBytes); mdatbox[0] = mdatBytes >>> 24 & 255; mdatbox[1] = mdatBytes >>> 16 & 255; mdatbox[2] = mdatBytes >>> 8 & 255; mdatbox[3] = mdatBytes & 255; mdatbox.set(_mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.types.mdat, 4); } for (var i2 = 0; i2 < mp4Samples.length; i2++) { var unit = mp4Samples[i2].unit; mdatbox.set(unit, offset); offset += unit.byteLength; } var latest = mp4Samples[mp4Samples.length - 1]; lastDts = latest.dts + latest.duration; var info = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.MediaSegmentInfo(); info.beginDts = firstDts; info.endDts = lastDts; info.beginPts = firstDts; info.endPts = lastDts; info.originalBeginDts = mp4Samples[0].originalDts; info.originalEndDts = latest.originalDts + latest.duration; info.firstSample = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(mp4Samples[0].dts, mp4Samples[0].pts, mp4Samples[0].duration, mp4Samples[0].originalDts, false); info.lastSample = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(latest.dts, latest.pts, latest.duration, latest.originalDts, false); if (!this._isLive) { this._audioSegmentInfoList.append(info); } track.samples = mp4Samples; track.sequenceNumber++; var moofbox = null; if (mpegRawTrack) { moofbox = new Uint8Array(); } else { moofbox = _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.moof(track, firstDts); } track.samples = []; track.length = 0; var segment = { type: "audio", data: this._mergeBoxes(moofbox, mdatbox).buffer, sampleCount: mp4Samples.length, info }; if (mpegRawTrack && firstSegmentAfterSeek) { segment.timestampOffset = firstDts; } this._onMediaSegment("audio", segment); }; MP4Remuxer2.prototype._remuxVideo = function(videoTrack, force) { if (this._videoMeta == null) { return; } var track = videoTrack; var samples = track.samples; var dtsCorrection = void 0; var firstDts = -1, lastDts = -1; var firstPts = -1, lastPts = -1; if (!samples || samples.length === 0) { return; } if (samples.length === 1 && !force) { return; } var offset = 8; var mdatbox = null; var mdatBytes = 8 + videoTrack.length; var lastSample = null; if (samples.length > 1) { lastSample = samples.pop(); mdatBytes -= lastSample.length; } if (this._videoStashedLastSample != null) { var sample = this._videoStashedLastSample; this._videoStashedLastSample = null; samples.unshift(sample); mdatBytes += sample.length; } if (lastSample != null) { this._videoStashedLastSample = lastSample; } var firstSampleOriginalDts = samples[0].dts - this._dtsBase; if (this._videoNextDts) { dtsCorrection = firstSampleOriginalDts - this._videoNextDts; } else { if (this._videoSegmentInfoList.isEmpty()) { dtsCorrection = 0; } else { var lastSample_2 = this._videoSegmentInfoList.getLastSampleBefore(firstSampleOriginalDts); if (lastSample_2 != null) { var distance2 = firstSampleOriginalDts - (lastSample_2.originalDts + lastSample_2.duration); if (distance2 <= 3) { distance2 = 0; } var expectedDts = lastSample_2.dts + lastSample_2.duration + distance2; dtsCorrection = firstSampleOriginalDts - expectedDts; } else { dtsCorrection = 0; } } } var info = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.MediaSegmentInfo(); var mp4Samples = []; for (var i2 = 0; i2 < samples.length; i2++) { var sample = samples[i2]; var originalDts = sample.dts - this._dtsBase; var isKeyframe = sample.isKeyframe; var dts = originalDts - dtsCorrection; var cts = sample.cts; var pts = dts + cts; if (firstDts === -1) { firstDts = dts; firstPts = pts; } var sampleDuration = 0; if (i2 !== samples.length - 1) { var nextDts = samples[i2 + 1].dts - this._dtsBase - dtsCorrection; sampleDuration = nextDts - dts; } else { if (lastSample != null) { var nextDts = lastSample.dts - this._dtsBase - dtsCorrection; sampleDuration = nextDts - dts; } else if (mp4Samples.length >= 1) { sampleDuration = mp4Samples[mp4Samples.length - 1].duration; } else { sampleDuration = Math.floor(this._videoMeta.refSampleDuration); } } if (isKeyframe) { var syncPoint = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(dts, pts, sampleDuration, sample.dts, true); syncPoint.fileposition = sample.fileposition; info.appendSyncPoint(syncPoint); } mp4Samples.push({ dts, pts, cts, units: sample.units, size: sample.length, isKeyframe, duration: sampleDuration, originalDts, flags: { isLeading: 0, dependsOn: isKeyframe ? 2 : 1, isDependedOn: isKeyframe ? 1 : 0, hasRedundancy: 0, isNonSync: isKeyframe ? 0 : 1 } }); } mdatbox = new Uint8Array(mdatBytes); mdatbox[0] = mdatBytes >>> 24 & 255; mdatbox[1] = mdatBytes >>> 16 & 255; mdatbox[2] = mdatBytes >>> 8 & 255; mdatbox[3] = mdatBytes & 255; mdatbox.set(_mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.types.mdat, 4); for (var i2 = 0; i2 < mp4Samples.length; i2++) { var units = mp4Samples[i2].units; while (units.length) { var unit = units.shift(); var data = unit.data; mdatbox.set(data, offset); offset += data.byteLength; } } var latest = mp4Samples[mp4Samples.length - 1]; lastDts = latest.dts + latest.duration; lastPts = latest.pts + latest.duration; this._videoNextDts = lastDts; info.beginDts = firstDts; info.endDts = lastDts; info.beginPts = firstPts; info.endPts = lastPts; info.originalBeginDts = mp4Samples[0].originalDts; info.originalEndDts = latest.originalDts + latest.duration; info.firstSample = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(mp4Samples[0].dts, mp4Samples[0].pts, mp4Samples[0].duration, mp4Samples[0].originalDts, mp4Samples[0].isKeyframe); info.lastSample = new _core_media_segment_info_js__WEBPACK_IMPORTED_MODULE_4__.SampleInfo(latest.dts, latest.pts, latest.duration, latest.originalDts, latest.isKeyframe); if (!this._isLive) { this._videoSegmentInfoList.append(info); } track.samples = mp4Samples; track.sequenceNumber++; if (this._forceFirstIDR) { var flags = mp4Samples[0].flags; flags.dependsOn = 2; flags.isNonSync = 0; } var moofbox = _mp4_generator_js__WEBPACK_IMPORTED_MODULE_1__.default.moof(track, firstDts); track.samples = []; track.length = 0; this._onMediaSegment("video", { type: "video", data: this._mergeBoxes(moofbox, mdatbox).buffer, sampleCount: mp4Samples.length, info }); }; MP4Remuxer2.prototype._mergeBoxes = function(moof, mdat) { var result = new Uint8Array(moof.byteLength + mdat.byteLength); result.set(moof, 0); result.set(mdat, moof.byteLength); return result; }; return MP4Remuxer2; }(); __webpack_exports__2["default"] = MP4Remuxer; }, "./src/utils/browser.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var Browser = {}; function detect() { var ua = self.navigator.userAgent.toLowerCase(); var match = /(edge)\/([\w.]+)/.exec(ua) || /(opr)[\/]([\w.]+)/.exec(ua) || /(chrome)[ \/]([\w.]+)/.exec(ua) || /(iemobile)[\/]([\w.]+)/.exec(ua) || /(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(ua) || /(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(ua) || /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec(ua) || ua.indexOf("compatible") < 0 && /(firefox)[ \/]([\w.]+)/.exec(ua) || []; var platform_match = /(ipad)/.exec(ua) || /(ipod)/.exec(ua) || /(windows phone)/.exec(ua) || /(iphone)/.exec(ua) || /(kindle)/.exec(ua) || /(android)/.exec(ua) || /(windows)/.exec(ua) || /(mac)/.exec(ua) || /(linux)/.exec(ua) || /(cros)/.exec(ua) || []; var matched = { browser: match[5] || match[3] || match[1] || "", version: match[2] || match[4] || "0", majorVersion: match[4] || match[2] || "0", platform: platform_match[0] || "" }; var browser2 = {}; if (matched.browser) { browser2[matched.browser] = true; var versionArray = matched.majorVersion.split("."); browser2.version = { major: parseInt(matched.majorVersion, 10), string: matched.version }; if (versionArray.length > 1) { browser2.version.minor = parseInt(versionArray[1], 10); } if (versionArray.length > 2) { browser2.version.build = parseInt(versionArray[2], 10); } } if (matched.platform) { browser2[matched.platform] = true; } if (browser2.chrome || browser2.opr || browser2.safari) { browser2.webkit = true; } if (browser2.rv || browser2.iemobile) { if (browser2.rv) { delete browser2.rv; } var msie = "msie"; matched.browser = msie; browser2[msie] = true; } if (browser2.edge) { delete browser2.edge; var msedge = "msedge"; matched.browser = msedge; browser2[msedge] = true; } if (browser2.opr) { var opera = "opera"; matched.browser = opera; browser2[opera] = true; } if (browser2.safari && browser2.android) { var android = "android"; matched.browser = android; browser2[android] = true; } browser2.name = matched.browser; browser2.platform = matched.platform; for (var key in Browser) { if (Browser.hasOwnProperty(key)) { delete Browser[key]; } } Object.assign(Browser, browser2); } detect(); __webpack_exports__2["default"] = Browser; }, "./src/utils/exception.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); __webpack_require__2.d(__webpack_exports__2, { "RuntimeException": function() { return RuntimeException; }, "IllegalStateException": function() { return IllegalStateException; }, "InvalidArgumentException": function() { return InvalidArgumentException; }, "NotImplementedException": function() { return NotImplementedException; } }); var __extends = function() { var extendStatics = function(d2, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b2) { d3.__proto__ = b2; } || function(d3, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d3[p] = b2[p]; }; return extendStatics(d2, b); }; return function(d2, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d2, b); function __() { this.constructor = d2; } d2.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var RuntimeException = function() { function RuntimeException2(message) { this._message = message; } Object.defineProperty(RuntimeException2.prototype, "name", { get: function() { return "RuntimeException"; }, enumerable: false, configurable: true }); Object.defineProperty(RuntimeException2.prototype, "message", { get: function() { return this._message; }, enumerable: false, configurable: true }); RuntimeException2.prototype.toString = function() { return this.name + ": " + this.message; }; return RuntimeException2; }(); var IllegalStateException = function(_super) { __extends(IllegalStateException2, _super); function IllegalStateException2(message) { return _super.call(this, message) || this; } Object.defineProperty(IllegalStateException2.prototype, "name", { get: function() { return "IllegalStateException"; }, enumerable: false, configurable: true }); return IllegalStateException2; }(RuntimeException); var InvalidArgumentException = function(_super) { __extends(InvalidArgumentException2, _super); function InvalidArgumentException2(message) { return _super.call(this, message) || this; } Object.defineProperty(InvalidArgumentException2.prototype, "name", { get: function() { return "InvalidArgumentException"; }, enumerable: false, configurable: true }); return InvalidArgumentException2; }(RuntimeException); var NotImplementedException = function(_super) { __extends(NotImplementedException2, _super); function NotImplementedException2(message) { return _super.call(this, message) || this; } Object.defineProperty(NotImplementedException2.prototype, "name", { get: function() { return "NotImplementedException"; }, enumerable: false, configurable: true }); return NotImplementedException2; }(RuntimeException); }, "./src/utils/logger.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = /* @__PURE__ */ __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var Log = function() { function Log2() { } Log2.e = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "error", str); } if (!Log2.ENABLE_ERROR) { return; } if (console.error) { console.error(str); } else if (console.warn) { console.warn(str); } else { console.log(str); } }; Log2.i = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "info", str); } if (!Log2.ENABLE_INFO) { return; } if (console.info) { console.info(str); } else { console.log(str); } }; Log2.w = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "warn", str); } if (!Log2.ENABLE_WARN) { return; } if (console.warn) { console.warn(str); } else { console.log(str); } }; Log2.d = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "debug", str); } if (!Log2.ENABLE_DEBUG) { return; } if (console.debug) { console.debug(str); } else { console.log(str); } }; Log2.v = function(tag, msg) { if (!tag || Log2.FORCE_GLOBAL_TAG) tag = Log2.GLOBAL_TAG; var str = "[" + tag + "] > " + msg; if (Log2.ENABLE_CALLBACK) { Log2.emitter.emit("log", "verbose", str); } if (!Log2.ENABLE_VERBOSE) { return; } console.log(str); }; return Log2; }(); Log.GLOBAL_TAG = "flv.js"; Log.FORCE_GLOBAL_TAG = false; Log.ENABLE_ERROR = true; Log.ENABLE_INFO = true; Log.ENABLE_WARN = true; Log.ENABLE_DEBUG = true; Log.ENABLE_VERBOSE = true; Log.ENABLE_CALLBACK = false; Log.emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); __webpack_exports__2["default"] = Log; }, "./src/utils/logging-control.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./node_modules/events/events.js"); var events__WEBPACK_IMPORTED_MODULE_0___default = /* @__PURE__ */ __webpack_require__2.n(events__WEBPACK_IMPORTED_MODULE_0__); var _logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/logger.js"); var LoggingControl = function() { function LoggingControl2() { } Object.defineProperty(LoggingControl2, "forceGlobalTag", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.FORCE_GLOBAL_TAG; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.FORCE_GLOBAL_TAG = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "globalTag", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.GLOBAL_TAG; }, set: function(tag) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.GLOBAL_TAG = tag; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableAll", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE && _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG && _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO && _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN && _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE = enable; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG = enable; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO = enable; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN = enable; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableDebug", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableVerbose", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableInfo", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableWarn", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); Object.defineProperty(LoggingControl2, "enableError", { get: function() { return _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR; }, set: function(enable) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR = enable; LoggingControl2._notifyChange(); }, enumerable: false, configurable: true }); LoggingControl2.getConfig = function() { return { globalTag: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.GLOBAL_TAG, forceGlobalTag: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.FORCE_GLOBAL_TAG, enableVerbose: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE, enableDebug: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG, enableInfo: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO, enableWarn: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN, enableError: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR, enableCallback: _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_CALLBACK }; }; LoggingControl2.applyConfig = function(config) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.GLOBAL_TAG = config.globalTag; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.FORCE_GLOBAL_TAG = config.forceGlobalTag; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_VERBOSE = config.enableVerbose; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_DEBUG = config.enableDebug; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_INFO = config.enableInfo; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_WARN = config.enableWarn; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_ERROR = config.enableError; _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_CALLBACK = config.enableCallback; }; LoggingControl2._notifyChange = function() { var emitter = LoggingControl2.emitter; if (emitter.listenerCount("change") > 0) { var config = LoggingControl2.getConfig(); emitter.emit("change", config); } }; LoggingControl2.registerListener = function(listener) { LoggingControl2.emitter.addListener("change", listener); }; LoggingControl2.removeListener = function(listener) { LoggingControl2.emitter.removeListener("change", listener); }; LoggingControl2.addLogListener = function(listener) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.emitter.addListener("log", listener); if (_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.emitter.listenerCount("log") > 0) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_CALLBACK = true; LoggingControl2._notifyChange(); } }; LoggingControl2.removeLogListener = function(listener) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.emitter.removeListener("log", listener); if (_logger_js__WEBPACK_IMPORTED_MODULE_1__.default.emitter.listenerCount("log") === 0) { _logger_js__WEBPACK_IMPORTED_MODULE_1__.default.ENABLE_CALLBACK = false; LoggingControl2._notifyChange(); } }; return LoggingControl2; }(); LoggingControl.emitter = new (events__WEBPACK_IMPORTED_MODULE_0___default())(); __webpack_exports__2["default"] = LoggingControl; }, "./src/utils/polyfill.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); var Polyfill = function() { function Polyfill2() { } Polyfill2.install = function() { Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) { obj.__proto__ = proto; return obj; }; Object.assign = Object.assign || function(target) { if (target === void 0 || target === null) { throw new TypeError("Cannot convert undefined or null to object"); } var output = Object(target); for (var i2 = 1; i2 < arguments.length; i2++) { var source = arguments[i2]; if (source !== void 0 && source !== null) { for (var key in source) { if (source.hasOwnProperty(key)) { output[key] = source[key]; } } } } return output; }; if (typeof self.Promise !== "function") { __webpack_require__2("./node_modules/es6-promise/dist/es6-promise.js").polyfill(); } }; return Polyfill2; }(); Polyfill.install(); __webpack_exports__2["default"] = Polyfill; }, "./src/utils/utf8-conv.js": function(__unused_webpack_module, __webpack_exports__2, __webpack_require__2) { __webpack_require__2.r(__webpack_exports__2); function checkContinuation(uint8array, start2, checkLength) { var array = uint8array; if (start2 + checkLength < array.length) { while (checkLength--) { if ((array[++start2] & 192) !== 128) return false; } return true; } else { return false; } } function decodeUTF8(uint8array) { var out = []; var input = uint8array; var i2 = 0; var length = uint8array.length; while (i2 < length) { if (input[i2] < 128) { out.push(String.fromCharCode(input[i2])); ++i2; continue; } else if (input[i2] < 192) ; else if (input[i2] < 224) { if (checkContinuation(input, i2, 1)) { var ucs4 = (input[i2] & 31) << 6 | input[i2 + 1] & 63; if (ucs4 >= 128) { out.push(String.fromCharCode(ucs4 & 65535)); i2 += 2; continue; } } } else if (input[i2] < 240) { if (checkContinuation(input, i2, 2)) { var ucs4 = (input[i2] & 15) << 12 | (input[i2 + 1] & 63) << 6 | input[i2 + 2] & 63; if (ucs4 >= 2048 && (ucs4 & 63488) !== 55296) { out.push(String.fromCharCode(ucs4 & 65535)); i2 += 3; continue; } } } else if (input[i2] < 248) { if (checkContinuation(input, i2, 3)) { var ucs4 = (input[i2] & 7) << 18 | (input[i2 + 1] & 63) << 12 | (input[i2 + 2] & 63) << 6 | input[i2 + 3] & 63; if (ucs4 > 65536 && ucs4 < 1114112) { ucs4 -= 65536; out.push(String.fromCharCode(ucs4 >>> 10 | 55296)); out.push(String.fromCharCode(ucs4 & 1023 | 56320)); i2 += 4; continue; } } } out.push(String.fromCharCode(65533)); ++i2; } return out.join(""); } __webpack_exports__2["default"] = decodeUTF8; } }; var __webpack_module_cache__ = {}; function __webpack_require__(moduleId) { var cachedModule = __webpack_module_cache__[moduleId]; if (cachedModule !== void 0) { return cachedModule.exports; } var module3 = __webpack_module_cache__[moduleId] = { exports: {} }; __webpack_modules__[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__); return module3.exports; } __webpack_require__.m = __webpack_modules__; !function() { __webpack_require__.n = function(module3) { var getter = module3 && module3.__esModule ? function() { return module3["default"]; } : function() { return module3; }; __webpack_require__.d(getter, { a: getter }); return getter; }; }(); !function() { __webpack_require__.d = function(exports3, definition) { for (var key in definition) { if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports3, key)) { Object.defineProperty(exports3, key, { enumerable: true, get: definition[key] }); } } }; }(); !function() { __webpack_require__.g = function() { if (typeof globalThis === "object") return globalThis; try { return this || new Function("return this")(); } catch (e) { if (typeof window === "object") return window; } }(); }(); !function() { __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }; }(); !function() { __webpack_require__.r = function(exports3) { if (typeof Symbol !== "undefined" && Symbol.toStringTag) { Object.defineProperty(exports3, Symbol.toStringTag, { value: "Module" }); } Object.defineProperty(exports3, "__esModule", { value: true }); }; }(); var __webpack_exports__ = __webpack_require__("./src/index.js"); return __webpack_exports__; }(); }); })(flv); var flvjs = /* @__PURE__ */ getDefaultExportFromCjs(flv.exports); const Html5 = videojs$2.getTech("Html5"); const mergeOptions = videojs$2.mergeOptions || videojs$2.util.mergeOptions; const defaults = { mediaDataSource: {}, config: {} }; class Flvjs extends Html5 { constructor(options2, ready) { options2 = mergeOptions(defaults, options2); super(options2, ready); } setSrc(src) { if (this.flvPlayer) { this.flvPlayer.detachMediaElement(); this.flvPlayer.destroy(); } const mediaDataSource = this.options_.mediaDataSource; const config = this.options_.config; mediaDataSource.type = mediaDataSource.type === void 0 ? "flv" : mediaDataSource.type; mediaDataSource.url = src; this.flvPlayer = flvjs.createPlayer(mediaDataSource, config); this.flvPlayer.attachMediaElement(this.el_); this.flvPlayer.load(); } dispose() { if (this.flvPlayer) { this.flvPlayer.detachMediaElement(); this.flvPlayer.destroy(); } super.dispose(); } } Flvjs.isSupported = function() { return flvjs && flvjs.isSupported(); }; Flvjs.formats = { "video/flv": "FLV", "video/x-flv": "FLV" }; Flvjs.canPlayType = function(type2) { if (Flvjs.isSupported() && type2 in Flvjs.formats) { return "maybe"; } return ""; }; Flvjs.canPlaySource = function(srcObj, options2) { return Flvjs.canPlayType(srcObj.type); }; Flvjs.VERSION = "__VERSION__"; videojs$2.registerTech("Flvjs", Flvjs); var VideoWindow$1 = ""; class VideoWindow { constructor(viewer2, position2, videoInfo, offsetHeight) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!position2) throw new Cesium.DeveloperError("no position object!"); this.viewer = viewer2; this.position = position2; this.offsetHeight = offsetHeight; if (position2 instanceof Cesium.Cartesian3) { this.position = position2; } else { this.position = Cesium.Cartesian3.fromDegrees(position2[0], position2[1], position2[2] || 0); } if (document.getElementsByClassName("popup-video").length > 0) { document.getElementsByClassName("popup-video")[0].remove(); viewer2.entities.remove(viewer2.entities.getById("videoPopupPoint")); } this.id = "popup_video_" + getGuid(); this.popupDiv = document.createElement("div"); this.popupDiv.classList.add("popup-video"); this.popupDiv.id = this.id; this.viewer.container.append(this.popupDiv); this.popupDiv.innerHTML = this._createHtml(videoInfo); switch (videoInfo.type) { case "hls": this.videotype = "application/x-mpegURL"; break; case "rtmp": this.videotype = "rtmp/flv"; break; case "flv": this.videotype = "video/x-flv"; break; case "mp4": this.videotype = "video/mp4"; break; } this.videoPlayer = videojs$2(document.querySelector("#myvideo"), { controls: true, autoplay: "muted", loop: true, muted: false, fluid: true, aspectRatio: "16:9", reload: "auto", fullscreen: { options: { navigationUI: "hide" } }, sources: [{ src: videoInfo.url, type: this.videotype }] }, function onPlayerReady() { }); this.viewer.scene.postRender.addEventListener(this.postRender, this); this.initPoint(); document.getElementsByClassName("popup-video1-close-button")[0].onclick = () => { this.close(); }; } postRender() { this.viewer.scene.canvas.height; const windowPosition = new Cesium.Cartesian2(); Cesium.SceneTransforms.wgs84ToWindowCoordinates( this.viewer.scene, this.position, windowPosition ); let elWidth = this.popupDiv.offsetWidth; let elHeight = this.popupDiv.offsetHeight; if (!!this.offsetHeight) { elHeight += this.offsetHeight; } this.popupDiv.style.left = windowPosition.x - elWidth / 2 + "px"; this.popupDiv.style.top = windowPosition.y - elHeight + "px"; const camerPosition = this.viewer.camera.position; let height2 = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(camerPosition).height; height2 += this.viewer.scene.globe.ellipsoid.maximumRadius; if (!(Cesium.Cartesian3.distance(camerPosition, this.position) > height2) && this.viewer.camera.positionCartographic.height < 5e7) { this.popupDiv.style.display = "block"; } else { this.popupDiv.style.display = "none"; } } _createHtml(videoInfo) { let html = ` `; return html; } initPoint() { this.billboard = new Cesium.Entity({ id: "videoPopupPoint", name: "popupPoint", position: this.position, billboard: { image: "jt3dSDK/imgs/point/point.png", horizontalOrigin: Cesium.HorizontalOrigin.center, verticalOrigin: Cesium.VerticalOrigin.bottom, scale: 1, pixelOffset: new Cesium.Cartesian2(0, 0), disableDepthTestDistance: Number.POSITIVE_INFINITY } }); this.viewer.entities.add(this.billboard); } } Object.assign(VideoWindow.prototype, { close() { this.popupDiv.remove(); this.viewer.scene.postRender.removeEventListener(this.postRender, this); this.viewer.entities.remove(this.billboard); videojs$2("myvideo").dispose(); this.videoPlayer.dispose(); } }); var VideoWindow2$1 = ""; class VideoWindow2 { constructor(viewer2, position2, videoInfo) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!position2) throw new Cesium.DeveloperError("no position object!"); this.viewer = viewer2; this.position = position2; if (position2 instanceof Cesium.Cartesian3) { this.position = position2; } else { this.position = Cesium.Cartesian3.fromDegrees(position2[0], position2[1], position2[2] || 0); } if (document.getElementsByClassName("popup-video2").length > 0) { document.getElementsByClassName("popup-video2")[0].remove(); } this.id = "popup_video_" + getGuid(); this.popupDiv = document.createElement("div"); this.popupDiv.classList.add("popup-video2"); this.popupDiv.id = this.id; this.viewer.container.append(this.popupDiv); this.popupDiv.innerHTML = this._createHtml(videoInfo); switch (videoInfo.type) { case "hls": this.videotype = "application/x-mpegURL"; break; case "rtmp": this.videotype = "rtmp/flv"; break; case "flv": this.videotype = "video/x-flv"; break; case "mp4": this.videotype = "video/mp4"; break; } this.videoPlayer = videojs$2(document.querySelector("#myvideo"), { controls: true, autoplay: "muted", loop: true, muted: false, fluid: true, aspectRatio: "16:9", reload: "auto", fullscreen: { options: { navigationUI: "hide" } }, sources: [{ src: videoInfo.url, type: this.videotype }] }, function onPlayerReady() { console.log("onPlayerReady", this); }); this.viewer.scene.postRender.addEventListener(this.postRender, this); document.getElementsByClassName("popup-video2-close-button")[0].onclick = () => { this.close(); }; } postRender() { this.viewer.scene.canvas.height; const windowPosition = new Cesium.Cartesian2(); Cesium.SceneTransforms.wgs84ToWindowCoordinates( this.viewer.scene, this.position, windowPosition ); this.popupDiv.style.left = windowPosition.x - this.popupDiv.offsetWidth - 120 + "px"; this.popupDiv.style.top = windowPosition.y + "px"; const camerPosition = this.viewer.camera.position; let height2 = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(camerPosition).height; height2 += this.viewer.scene.globe.ellipsoid.maximumRadius; if (!(Cesium.Cartesian3.distance(camerPosition, this.position) > height2) && this.viewer.camera.positionCartographic.height < 5e7) { this.popupDiv.style.display = "block"; } else { this.popupDiv.style.display = "none"; } } _createHtml(videoInfo) { let html = `
`; return html; } } Object.assign(VideoWindow2.prototype, { close() { this.popupDiv.remove(); this.viewer.scene.postRender.removeEventListener(this.postRender, this); } }); var VideoWindow3$1 = ""; class VideoWindow3 { constructor(viewer2, position2, videoInfo) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!position2) throw new Cesium.DeveloperError("no position object!"); this.viewer = viewer2; this.position = position2; if (position2 instanceof Cesium.Cartesian3) { this.position = position2; } else { this.position = Cesium.Cartesian3.fromDegrees(position2[0], position2[1], position2[2] || 0); } if (document.getElementsByClassName("popup-video3").length > 0) { document.getElementsByClassName("popup-video3")[0].remove(); } this.id = "popup_video_" + getGuid(); this.popupDiv = document.createElement("div"); this.popupDiv.classList.add("popup-video3"); this.popupDiv.id = this.id; this.viewer.container.append(this.popupDiv); this.popupDiv.innerHTML = this._createHtml(videoInfo); switch (videoInfo.type) { case "hls": this.videotype = "application/x-mpegURL"; break; case "rtmp": this.videotype = "rtmp/flv"; break; case "flv": this.videotype = "video/x-flv"; break; case "mp4": this.videotype = "video/mp4"; break; } this.videoPlayer = videojs$2(document.querySelector("#myvideo"), { controls: true, autoplay: "muted", loop: true, muted: false, fluid: true, aspectRatio: "16:9", reload: "auto", fullscreen: { options: { navigationUI: "hide" } }, sources: [{ src: videoInfo.url, type: this.videotype }] }, function onPlayerReady() { }); this.viewer.scene.postRender.addEventListener(this.postRender, this); document.getElementsByClassName("popup-video3-close-button")[0].onclick = () => { this.close(); }; } postRender() { this.viewer.scene.canvas.height; const windowPosition = new Cesium.Cartesian2(); Cesium.SceneTransforms.wgs84ToWindowCoordinates( this.viewer.scene, this.position, windowPosition ); this.popupDiv.style.left = windowPosition.x + 70 + "px"; this.popupDiv.style.top = windowPosition.y - this.popupDiv.offsetHeight - 20 + "px"; const camerPosition = this.viewer.camera.position; let height2 = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(camerPosition).height; height2 += this.viewer.scene.globe.ellipsoid.maximumRadius; if (!(Cesium.Cartesian3.distance(camerPosition, this.position) > height2) && this.viewer.camera.positionCartographic.height < 5e7) { this.popupDiv.style.display = "block"; } else { this.popupDiv.style.display = "none"; } } _createHtml(videoInfo) { let html = `
`; return html; } } Object.assign(VideoWindow3.prototype, { close() { this.popupDiv.remove(); this.viewer.scene.postRender.removeEventListener(this.postRender, this); } }); var HtmlWindow1 = ""; class HtmlWindow { constructor(viewer2, position2, title, html, offsetHeight) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!position2) throw new Cesium.DeveloperError("no position object!"); this.viewer = viewer2; this.offsetHeight = offsetHeight; if (position2 instanceof Cesium.Cartesian3) { this.position = position2; } else { this.position = Cesium.Cartesian3.fromDegrees(position2[0], position2[1], position2[2] || 0); } if (document.getElementsByClassName("popup1").length > 0) { document.getElementsByClassName("popup1")[0].remove(); viewer2.entities.remove(viewer2.entities.getById("popupPoint")); } this.id = "popup_" + getGuid(); this.popupDiv = document.createElement("div"); this.popupDiv.classList.add("popup1"); this.popupDiv.id = this.id; this.viewer.container.append(this.popupDiv); this.popupDiv.innerHTML = this._createHtml(title, html); this.viewer.scene.postRender.addEventListener(this.postRender, this); this.initPoint(); document.getElementsByClassName("popup1-close-button")[0].onclick = () => { this.close(); }; } postRender() { this.viewer.scene.canvas.height; const windowPosition = new Cesium.Cartesian2(); Cesium.SceneTransforms.wgs84ToWindowCoordinates( this.viewer.scene, this.position, windowPosition ); let elWidth = this.popupDiv.offsetWidth; let elHeight = this.popupDiv.offsetHeight; if (!!this.offsetHeight) { elHeight += this.offsetHeight; } this.popupDiv.style.left = windowPosition.x - elWidth / 2 + "px"; this.popupDiv.style.top = windowPosition.y - elHeight + "px"; const camerPosition = this.viewer.camera.position; let height2 = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(camerPosition).height; height2 += this.viewer.scene.globe.ellipsoid.maximumRadius; if (!(Cesium.Cartesian3.distance(camerPosition, this.position) > height2) && this.viewer.camera.positionCartographic.height < 5e7) { this.popupDiv.style.display = "block"; } else { this.popupDiv.style.display = "none"; } } _createHtml(header, content) { let html = ` `; return html; } initPoint() { this.billboard = this.viewer.entities.add({ id: "popupPoint", name: "popupPoint", position: this.position, billboard: { image: "jt3dSDK/imgs/point/point.png", horizontalOrigin: Cesium.HorizontalOrigin.center, verticalOrigin: Cesium.VerticalOrigin.bottom, scale: 1, pixelOffset: new Cesium.Cartesian2(0, 0), disableDepthTestDistance: Number.POSITIVE_INFINITY } }); } } Object.assign(HtmlWindow.prototype, { close() { this.popupDiv.remove(); this.viewer.scene.postRender.removeEventListener(this.postRender, this); this.viewer.entities.remove(this.billboard); } }); var HtmlWindow2$1 = ""; class HtmlWindow2 { constructor(viewer2, position2, title, html) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!position2) throw new Cesium.DeveloperError("no position object!"); this.viewer = viewer2; this.position = position2; if (position2 instanceof Cesium.Cartesian3) { this.position = position2; } else { this.position = Cesium.Cartesian3.fromDegrees(position2[0], position2[1], position2[2] || 0); } if (document.getElementsByClassName("popup2").length > 0) { document.getElementsByClassName("popup2")[0].remove(); } this.id = "popup_" + getGuid(); this.popupDiv = document.createElement("div"); this.popupDiv.classList.add("popup2"); this.popupDiv.id = this.id; this.viewer.container.append(this.popupDiv); this.popupDiv.innerHTML = this._createHtml(title, html); this.viewer.scene.postRender.addEventListener(this.postRender, this); document.getElementsByClassName("popup2-close-button")[0].onclick = () => { this.close(); }; } postRender() { this.viewer.scene.canvas.height; const windowPosition = new Cesium.Cartesian2(); Cesium.SceneTransforms.wgs84ToWindowCoordinates( this.viewer.scene, this.position, windowPosition ); this.popupDiv.style.left = windowPosition.x - this.popupDiv.offsetWidth - 120 + "px"; this.popupDiv.style.top = windowPosition.y + "px"; const camerPosition = this.viewer.camera.position; let height2 = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(camerPosition).height; height2 += this.viewer.scene.globe.ellipsoid.maximumRadius; if (!(Cesium.Cartesian3.distance(camerPosition, this.position) > height2) && this.viewer.camera.positionCartographic.height < 5e7) { this.popupDiv.style.display = "block"; } else { this.popupDiv.style.display = "none"; } } _createHtml(title, content) { let html = `
`; return html; } } Object.assign(HtmlWindow2.prototype, { close() { this.popupDiv.remove(); this.viewer.scene.postRender.removeEventListener(this.postRender, this); } }); var HtmlWindow3$1 = ""; class HtmlWindow3 { constructor(viewer2, position2, title, html) { if (!viewer2) throw new Cesium.DeveloperError("no viewer object!"); if (!position2) throw new Cesium.DeveloperError("no position object!"); this.viewer = viewer2; this.position = position2; if (position2 instanceof Cesium.Cartesian3) { this.position = position2; } else { this.position = Cesium.Cartesian3.fromDegrees(position2[0], position2[1], position2[2] || 0); } if (document.getElementsByClassName("popup3").length > 0) { document.getElementsByClassName("popup3")[0].remove(); } this.id = "popup_" + getGuid(); this.popupDiv = document.createElement("div"); this.popupDiv.classList.add("popup3"); this.popupDiv.id = this.id; this.viewer.container.append(this.popupDiv); this.popupDiv.innerHTML = this._createHtml(title, html); this.viewer.scene.postRender.addEventListener(this.postRender, this); document.getElementsByClassName("popup3-close-button")[0].onclick = () => { this.close(); }; } postRender() { this.viewer.scene.canvas.height; const windowPosition = new Cesium.Cartesian2(); Cesium.SceneTransforms.wgs84ToWindowCoordinates( this.viewer.scene, this.position, windowPosition ); this.popupDiv.style.left = windowPosition.x + 70 + "px"; this.popupDiv.style.top = windowPosition.y - this.popupDiv.offsetHeight - 20 + "px"; const camerPosition = this.viewer.camera.position; let height2 = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(camerPosition).height; height2 += this.viewer.scene.globe.ellipsoid.maximumRadius; if (!(Cesium.Cartesian3.distance(camerPosition, this.position) > height2) && this.viewer.camera.positionCartographic.height < 5e7) { this.popupDiv.style.display = "block"; } else { this.popupDiv.style.display = "none"; } } _createHtml(title, content) { let html = `
`; return html; } } Object.assign(HtmlWindow3.prototype, { close() { this.popupDiv.remove(); this.viewer.scene.postRender.removeEventListener(this.postRender, this); } }); let PopupWindow = { MultiFieldAdaptWindow, VideoWindow, VideoWindow2, VideoWindow3, HtmlWindow, HtmlWindow2, HtmlWindow3 }; class AroundPoint { constructor(viewer2, amount, position2) { this._viewer = viewer2; this._amount = amount; this._position = position2; this._range = this._viewer.camera.positionCartographic.height; } _bindEvent() { let _self = this; this._viewer.clock.onTick.addEventListener(this._aroundPoint, this); var handler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); handler.setInputAction(function(click) { _self.stop(); }, Cesium.ScreenSpaceEventType.LEFT_DOWN); } _unbindEvent() { this._viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); this._viewer.clock.onTick.removeEventListener(this._aroundPoint, this); } start() { this._viewer.clock.shouldAnimate = true; this._unbindEvent(); this._bindEvent(); return this; } stop() { this._unbindEvent(); return this; } _aroundPoint() { let heading = this._viewer.camera.heading; let pitch = this._viewer.camera.pitch; let range3 = this._range; heading += Cesium.Math.toRadians(this._amount); if (heading >= Math.PI * 2 || heading <= -Math.PI * 2) { heading = 0; } this._viewer.camera.lookAt( this._position, new Cesium.HeadingPitchRange( heading, pitch, range3 ) ); } } class AroundView { constructor(viewer2, amount) { this._viewer = viewer2; this._amount = amount; } _bindEvent() { let _self = this; this._viewer.clock.onTick.addEventListener(this._aroundView, this); var handler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas); handler.setInputAction(function(click) { _self.stop(); }, Cesium.ScreenSpaceEventType.LEFT_DOWN); } _unbindEvent() { this._viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); this._viewer.clock.onTick.removeEventListener(this._aroundView, this); } start() { this._viewer.clock.shouldAnimate = true; this._unbindEvent(); this._bindEvent(); return this; } stop() { this._unbindEvent(); return this; } _aroundView() { let heading = this._viewer.camera.heading; let pitch = this._viewer.camera.pitch; let roll = this._viewer.camera.roll; heading += Cesium.Math.toRadians(this._amount); if (heading >= Math.PI * 2 || heading <= -Math.PI * 2) { heading = 0; } this._viewer.camera.setView({ orientation: { heading, pitch, roll } }); } } export { AroundPoint, AroundView, CircleObject, CommonTools, CoordTransform, CrImageServerLayer, DrawMilitaryPlot, DrawPoint, DrawTools, LocateUtil, PointObject, PolygonObject, PolylineObject, PopupWindow, CreateRemindertip as ReminderTip, Roaming, RuntimeEnvironment, SceneControl, SceneEffects, SketchViewModel, SpatialAnalysis, StatusBar, TerrainAnalysis, TrackRoam, WallObject, common, jtMap3d, LoadMapData as layer };