\n The buffer is empty. No subtitles in the queue.\n
\n
\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BufferDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BufferDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BufferDisplay.vue?vue&type=template&id=2cf97334&\"\nimport script from \"./BufferDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./BufferDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"crop-layer\"},[(_vm.ready)?_c('vue-draggable-resizable',{attrs:{\"w\":_vm.width,\"h\":_vm.height,\"x\":_vm.x,\"y\":_vm.y,\"parent\":true},on:{\"dragging\":_vm.onDrag,\"resizing\":_vm.onResize}},[(_vm.hasChanges)?_c('button',{staticClass:\"save-button\",on:{\"click\":function($event){$event.preventDefault();return _vm.calculateDimensionsAndSave($event)}}},[_vm._v(\"save\")]):_vm._e()]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n \n \n \n
\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cropLayer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cropLayer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./cropLayer.vue?vue&type=template&id=822d7698&\"\nimport script from \"./cropLayer.vue?vue&type=script&lang=js&\"\nexport * from \"./cropLayer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"timecodes-display\"},[_c('div',{staticClass:\"label-val-wrapper\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Zero base time of the recording related to first fragment. Not all streams have Unix Epoch Time as time zero'),expression:\"'Zero base time of the recording related to first fragment. Not all streams have Unix Epoch Time as time zero'\",modifiers:{\"top-center\":true}}],staticClass:\"label\"},[_vm._v(\"First Segment at\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm._f(\"dateformat\")(_vm.timecodes.timeOffsetToZeroFragment * 1000))+\" \"+_vm._s(_vm._f(\"timeformat\")(_vm.timecodes.timeOffsetToZeroFragment * 1000))+\" \")])]),_c('div',{staticClass:\"label-val-wrapper\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Duration of the playing segment'),expression:\"'Duration of the playing segment'\",modifiers:{\"top-center\":true}}]},[_vm._v(\"Playing Segment Duration\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm._f(\"roundTo3Digits\")(_vm.timecodes.segmentDuration))+\" \")])]),_c('div',{staticClass:\"label-val-wrapper\",class:_vm.playingSegmentMatchClz},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Currently playing segment number. Should be close to latest loaded segment. Move playhead to the front of the stream.'),expression:\"'Currently playing segment number. Should be close to latest loaded segment. Move playhead to the front of the stream.'\",modifiers:{\"top-center\":true}}]},[_vm._v(\"Playing Segment #\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.timecodes.fragPlaying.sn)+\" \")])]),_c('div',{staticClass:\"label-val-wrapper\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Number of segment that has been loaded'),expression:\"'Number of segment that has been loaded'\",modifiers:{\"top-center\":true}}]},[_vm._v(\"Loaded Segment #\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.timecodes.fragLoaded ? _vm.timecodes.fragLoaded.sn : '...')+\" \")])]),_c('div',{staticClass:\"label-val-wrapper\",class:_vm.streamTimeMatchClz},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:(_vm.fpstTitle),expression:\"fpstTitle\",modifiers:{\"top-center\":true}}],on:{\"click\":_vm.copyOffsetToClipboard}},[_vm._v(\"Stream Time\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm._f(\"dateformat\")(_vm.timecodes.playingFragmentTime))+\" \"+_vm._s(_vm._f(\"timeformat\")(_vm.timecodes.playingFragmentTime))+\" \")])]),_c('div',{staticClass:\"label-val-wrapper\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Start time of the currently playing segment in relation to video time currently playing on this client'),expression:\"'Start time of the currently playing segment in relation to video time currently playing on this client'\",modifiers:{\"top-center\":true}}]},[_vm._v(\"Segment at\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm._f(\"roundTo2Digits\")(_vm.timecodes.fragVideoTime))+\" s \")])]),_c('div',{staticClass:\"label-val-wrapper\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Current video time on this client'),expression:\"'Current video time on this client'\",modifiers:{\"top-center\":true}}]},[_vm._v(\"Time:\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm._f(\"roundTo2Digits\")(_vm.timecodes.videoCurrentTime))+\" s \")])]),_c('div',{staticClass:\"label-val-wrapper\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Current video duration on this client'),expression:\"'Current video duration on this client'\",modifiers:{\"top-center\":true}}]},[_vm._v(\"Duration\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm._f(\"roundTo2Digits\")(_vm.timecodes.videoDuration))+\" s \")])]),_c('div',{staticClass:\"label-val-wrapper\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('program date time on chunck'),expression:\"'program date time on chunck'\",modifiers:{\"top-center\":true}}]},[_vm._v(\"Program Date Time\")]),_c('span',{staticClass:\"value\"},[_vm._v(_vm._s(_vm._f(\"dateformat\")(_vm.timecodes.programDateTime))+\" \"+_vm._s(_vm._f(\"timeformat\")(_vm.timecodes.programDateTime))+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TimecodesDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TimecodesDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimecodesDisplay.vue?vue&type=template&id=2372d0ea&\"\nimport script from \"./TimecodesDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./TimecodesDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"session-display\"},[_c('button',{staticClass:\"button\",on:{\"click\":_vm.onReloadClients}},[_vm._v(\"reload clients\")]),_c('button',{staticClass:\"button\",on:{\"click\":_vm.onClosePIP}},[_vm._v(\"close PIP\")]),(_vm.sessionDisplay && _vm.sessionDisplay.length > 0)?_c('table',{staticClass:\"session-display__table\"},[_vm._m(0),_vm._l((_vm.sessionDisplay),function(item){return _c('tr',{key:item.index},[_c('td',[_vm._v(_vm._s(item.viewerID))]),_c('td',[_vm._v(_vm._s(item.fragPlaying))]),_c('td',[_vm._v(_vm._s(item.playingFragmentTime))]),_c('td',[_vm._v(_vm._s(item.currentSubtitleText))]),_c('td',[_vm._v(_vm._s(_vm._f(\"timeformat\")(item.lastActivity * 1000)))]),_c('td',[_vm._v(_vm._s(item.status))])])})],2):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"viewer id\")]),_c('th',[_vm._v(\"fragment\")]),_c('th',[_vm._v(\"fragment time\")]),_c('th',[_vm._v(\"current subtitle\")]),_c('th',[_vm._v(\"last activity\")]),_c('th',[_vm._v(\"status\")])])}]\n\nexport { render, staticRenderFns }","\n
\n \n \n
0\" class=\"session-display__table\">\n
\n
viewer id
\n
fragment
\n
fragment time
\n
current subtitle
\n
last activity
\n
status
\n
\n
\n
{{ item.viewerID }}
\n
{{ item.fragPlaying }}
\n
{{ item.playingFragmentTime }}
\n
{{ item.currentSubtitleText }}
\n
{{ item.lastActivity * 1000 | timeformat }}
\n
{{ item.status }}
\n
\n
\n
\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SessionDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SessionDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SessionDisplay.vue?vue&type=template&id=e67fd6be&\"\nimport script from \"./SessionDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./SessionDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"studio-display\"},[_c('pre',[_vm._v(\" \"+_vm._s(_vm.configDisplay)+\"\\n \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n
\n {{ configDisplay }}\n
\n
\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./StudioDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./StudioDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StudioDisplay.vue?vue&type=template&id=71cd57ec&\"\nimport script from \"./StudioDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./StudioDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"delay-controls\"},[_c('span',{staticClass:\"delay-controls__input-row\"},[_c('span',{staticClass:\"delay-controls__input\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Length of the hls segments in the stream. The stream must be configured to have equal length segemnts'),expression:\"'Length of the hls segments in the stream. The stream must be configured to have equal length segemnts'\",modifiers:{\"top-center\":true}}],attrs:{\"for\":\"segment-length-input\"}},[_vm._v(\"1. Set segment length in seconds\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.value.segmentLength),expression:\"value.segmentLength\"}],staticClass:\"number-input\",attrs:{\"name\":\"segment-length-input\",\"type\":\"number\",\"min\":\"0\",\"max\":\"60\"},domProps:{\"value\":(_vm.value.segmentLength)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.value, \"segmentLength\", $event.target.value)}}})]),_c('button',{staticClass:\"delay-controls__apply button\",on:{\"click\":function($event){return _vm.onSetTimings('segmentLength')}}},[_vm._v(\"apply length\")])]),_c('span',{staticClass:\"delay-controls__input-row\"},[_c('span',{staticClass:\"delay-controls__input\"},[_c('div',{staticClass:\"delay-controls__stream-start-picker\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Time offset to the streams first segment in relation to the sequence id'),expression:\"'Time offset to the streams first segment in relation to the sequence id'\",modifiers:{\"top-center\":true}}]},[_vm._v(\"2. set stream offset\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Calculate based on Unix Epoch Time'),expression:\"'Calculate based on Unix Epoch Time'\",modifiers:{\"top-center\":true}}],staticClass:\"link-button\",on:{\"click\":function($event){return _vm.setDateTo('epoch')}}},[_vm._v(\"Epoch Time\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Calculate based on heuristics'),expression:\"'Calculate based on heuristics'\",modifiers:{\"top-center\":true}}],staticClass:\"link-button\",on:{\"click\":function($event){return _vm.setDateTo('segments')}}},[_vm._v(\"Segments\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Calculate on on right now'),expression:\"'Calculate on on right now'\",modifiers:{\"top-center\":true}}],staticClass:\"link-button\",on:{\"click\":function($event){return _vm.setDateTo('now')}}},[_vm._v(\"Now\")]),_c('date-pick',{attrs:{\"pickTime\":true,\"format\":'DD.MM.YYYY HH:mm'},model:{value:(_vm.date),callback:function ($$v) {_vm.date=$$v},expression:\"date\"}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('Copy this time to the time offset'),expression:\"'Copy this time to the time offset'\",modifiers:{\"top-center\":true}}],staticClass:\"link-button\",on:{\"click\":_vm.applyDateTimeOffset}},[_c('i',{staticClass:\"material-icons\"},[_vm._v(\"save_alt\")])])],1),_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('the offset in seconds to fragment with serial number 0'),expression:\"'the offset in seconds to fragment with serial number 0'\",modifiers:{\"top-center\":true}}],attrs:{\"for\":\"fragment-offset-input\"}},[_vm._v(\"time offset to first fragment in sec\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.timeOffsetToZeroFragment),expression:\"timeOffsetToZeroFragment\"}],staticClass:\"number-input\",attrs:{\"name\":\"fragment-offset-input\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.timeOffsetToZeroFragment)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.timeOffsetToZeroFragment=$event.target.value}}})]),_c('button',{staticClass:\"delay-controls__apply button\",on:{\"click\":function($event){return _vm.onSetTimings('timeOffsetToZeroFragment')}}},[_vm._v(\"apply offset\")])]),_c('span',{staticClass:\"delay-controls__input-row\"}),_c('span',{staticClass:\"delay-controls__input-row\"},[_c('span',{staticClass:\"delay-controls__input\"},[_c('label',{attrs:{\"for\":\"mode\"}},[_vm._v(\"Toggle Program Date Time on / off\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.value.useProgramTimestamp),expression:\"value.useProgramTimestamp\"}],staticClass:\"number-input\",attrs:{\"name\":\"passthrough\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.value.useProgramTimestamp)?_vm._i(_vm.value.useProgramTimestamp,null)>-1:(_vm.value.useProgramTimestamp)},on:{\"change\":function($event){var $$a=_vm.value.useProgramTimestamp,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.value, \"useProgramTimestamp\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.value, \"useProgramTimestamp\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.value, \"useProgramTimestamp\", $$c)}}}})]),_c('button',{staticClass:\"delay-controls__apply button\",on:{\"click\":function($event){return _vm.onSetTimings('useProgramTimestamp')}}},[_vm._v(\"apply Use PDT\")])]),_c('span',{staticClass:\"delay-controls__input-row\"},[_c('span',{staticClass:\"delay-controls__input\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('offset for the subtitles in relation to the stream time. minus(-) if subtitles should come earlier, plus(+) for later. For Chrome / FF / IE and Android'),expression:\"'offset for the subtitles in relation to the stream time. minus(-) if subtitles should come earlier, plus(+) for later. For Chrome / FF / IE and Android'\",modifiers:{\"top-center\":true}}],attrs:{\"for\":\"delay-input\"}},[_vm._v(\"3. Adjust subtitles offset\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.value.delay),expression:\"value.delay\"}],staticClass:\"number-input\",attrs:{\"name\":\"delay-input\",\"type\":\"number\",\"min\":\"-90\",\"max\":\"90\"},domProps:{\"value\":(_vm.value.delay)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.value, \"delay\", $event.target.value)}}})]),_c('button',{staticClass:\"delay-controls__apply button\",on:{\"click\":function($event){return _vm.onSetTimings('delay')}}},[_vm._v(\"apply delay\")])]),_c('span',{staticClass:\"delay-controls__input-row\"},[_c('span',{staticClass:\"delay-controls__input\"},[_c('label',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.top-center\",value:('hard offset for IOS and Safari.'),expression:\"'hard offset for IOS and Safari.'\",modifiers:{\"top-center\":true}}],attrs:{\"for\":\"legacy-delay-input\"}},[_vm._v(\"4. Adjust subtitles hard offset\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.value.legacyDelay),expression:\"value.legacyDelay\"}],staticClass:\"number-input\",attrs:{\"name\":\"legacy-delay-input\",\"type\":\"number\",\"min\":\"-90\",\"max\":\"90\"},domProps:{\"value\":(_vm.value.legacyDelay)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.value, \"legacyDelay\", $event.target.value)}}})]),_c('button',{staticClass:\"delay-controls__apply button\",on:{\"click\":function($event){return _vm.onSetTimings('legacyDelay')}}},[_vm._v(\"apply legacy delay\")])]),_c('span',{staticClass:\"delay-controls__input-row\"},[_c('span',{staticClass:\"delay-controls__input\"},[_c('label',{attrs:{\"for\":\"mode\"}},[_vm._v(\"Toggle Passthrough on / off\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.isPassthrough),expression:\"isPassthrough\"}],staticClass:\"number-input\",attrs:{\"name\":\"passthrough\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.isPassthrough)?_vm._i(_vm.isPassthrough,null)>-1:(_vm.isPassthrough)},on:{\"change\":function($event){var $$a=_vm.isPassthrough,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.isPassthrough=$$a.concat([$$v]))}else{$$i>-1&&(_vm.isPassthrough=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.isPassthrough=$$c}}}})]),_c('button',{staticClass:\"delay-controls__apply button\",on:{\"click\":function($event){return _vm.onSetTimings('passthrough')}}},[_vm._v(\"apply Passthrough\")])]),_c('span',{staticClass:\"delay-controls__input-row\"},[_c('span',{staticClass:\"delay-controls__input\"},[_c('label',{attrs:{\"for\":\"mode\",\"tooltip.top-center\":\"'Force all client players to be delayed. Use this if respeakers work on the livestream directly.'\"}},[_vm._v(\"5. Force Client Players delay\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.value.playerDelay),expression:\"value.playerDelay\"}],staticClass:\"number-input\",attrs:{\"name\":\"playerDelay\",\"type\":\"number\",\"min\":\"0\",\"max\":\"10\"},domProps:{\"value\":(_vm.value.playerDelay)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.value, \"playerDelay\", $event.target.value)}}})]),_c('button',{staticClass:\"delay-controls__apply button\",on:{\"click\":function($event){return _vm.onSetTimings('playerDelay')}}},[_vm._v(\"apply Player Delay\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./list.vue?vue&type=template&id=4f3e9618&\"\nimport script from \"./list.vue?vue&type=script&lang=js&\"\nexport * from \"./list.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"studio__add\"},[_c('label',{attrs:{\"for\":\"title\"}},[_vm._v(\"Title:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.name),expression:\"name\"}],attrs:{\"name\":\"title\",\"type\":\"text\",\"placeholder\":\"Title\"},domProps:{\"value\":(_vm.name)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.create()},\"input\":function($event){if($event.target.composing){ return; }_vm.name=$event.target.value}}}),_c('button',{staticClass:\"button\",attrs:{\"title\":\"Create studio\"},on:{\"click\":function($event){return _vm.create()}}},[_vm._v(\" Create \")]),_c('button',{staticClass:\"button\",attrs:{\"title\":\"Close update\"},on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\" Close \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n
\n \n \n \n \n
\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./add.vue?vue&type=template&id=7dc64d9d&\"\nimport script from \"./add.vue?vue&type=script&lang=js&\"\nexport * from \"./add.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n
\n
\n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n \n \n
\n
\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=709f2699&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"scheduler-root\"},[_c('calendar-view',{staticClass:\"theme-default holiday-us-traditional holiday-us-official\",attrs:{\"showEventTimes\":true,\"show-date\":_vm.showDate,\"starting-day-of-week\":1,\"events\":_vm.schedulerEvents},on:{\"click-date\":_vm.clickDate,\"click-event\":_vm.clickEvent},scopedSlots:_vm._u([{key:\"header\",fn:function(ref){\nvar headerProps = ref.headerProps;\nreturn _c('calendar-view-header',{attrs:{\"header-props\":headerProps},on:{\"input\":_vm.setShowDate}})}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:[\n\t\t'cv-wrapper',\n\t\t'locale-' + _vm.languageCode(_vm.displayLocale),\n\t\t'locale-' + _vm.displayLocale,\n\t\t'y' + _vm.periodStart.getFullYear(),\n\t\t'm' + _vm.paddedMonth(_vm.periodStart),\n\t\t'period-' + _vm.displayPeriodUom,\n\t\t'periodCount-' + _vm.displayPeriodCount,\n\t\t{\n\t\t\tpast: _vm.isPastMonth(_vm.periodStart),\n\t\t\tfuture: _vm.isFutureMonth(_vm.periodStart),\n\t\t\tnoIntl: !_vm.supportsIntl,\n\t\t} ]},[_vm._t(\"header\",null,{\"headerProps\":_vm.headerProps}),_c('div',{staticClass:\"cv-header-days\"},[_vm._l((_vm.weekdayNames),function(label,index){return [_vm._t(\"dayHeader\",[_c('div',{key:_vm.getColumnDOWClass(index),staticClass:\"cv-header-day\",class:_vm.getColumnDOWClass(index)},[_vm._v(\" \"+_vm._s(label)+\" \")])],{\"index\":_vm.getColumnDOWClass(index),\"label\":label})]})],2),_c('div',{staticClass:\"cv-weeks\"},_vm._l((_vm.weeksOfPeriod),function(weekStart,weekIndex){return _c('div',{key:(weekIndex + \"-week\"),class:[\n\t\t\t\t'cv-week',\n\t\t\t\t'week' + (weekIndex + 1),\n\t\t\t\t'ws' + _vm.isoYearMonthDay(weekStart) ]},[_vm._l((_vm.daysOfWeek(weekStart)),function(day,dayIndex){return _c('div',{key:_vm.getColumnDOWClass(dayIndex),class:[\n\t\t\t\t\t'cv-day',\n\t\t\t\t\t_vm.getColumnDOWClass(dayIndex),\n\t\t\t\t\t'd' + _vm.isoYearMonthDay(day),\n\t\t\t\t\t'd' + _vm.isoMonthDay(day),\n\t\t\t\t\t'd' + _vm.paddedDay(day),\n\t\t\t\t\t'instance' + _vm.instanceOfMonth(day),\n\t\t\t\t\t{\n\t\t\t\t\t\ttoday: _vm.isSameDate(day, _vm.today()),\n\t\t\t\t\t\toutsideOfMonth: !_vm.isSameMonth(day, _vm.defaultedShowDate),\n\t\t\t\t\t\tpast: _vm.isInPast(day),\n\t\t\t\t\t\tfuture: _vm.isInFuture(day),\n\t\t\t\t\t\tlast: _vm.isLastDayOfMonth(day),\n\t\t\t\t\t\tlastInstance: _vm.isLastInstanceOfMonth(day),\n\t\t\t\t\t} ].concat( ((_vm.dateClasses && _vm.dateClasses[_vm.isoYearMonthDay(day)]) || null) ),on:{\"click\":function($event){return _vm.onClickDay(day)},\"drop\":function($event){$event.preventDefault();return _vm.onDrop(day, $event)},\"dragover\":function($event){$event.preventDefault();return _vm.onDragOver(day)},\"dragenter\":function($event){$event.preventDefault();return _vm.onDragEnter(day, $event)},\"dragleave\":function($event){$event.preventDefault();return _vm.onDragLeave(day, $event)}}},[_c('div',{staticClass:\"cv-day-number\"},[_vm._v(_vm._s(day.getDate()))]),_vm._t(\"dayContent\",null,{\"day\":day})],2)}),_vm._l((_vm.getWeekItems(weekStart)),function(e){return [_vm._t(\"event\",[_c('div',{key:e.id,staticClass:\"cv-event\",class:e.classes,style:((\"top:\" + (_vm.getItemTop(e)) + \";\" + (e.originalEvent.style))),attrs:{\"draggable\":_vm.enableDragDrop,\"title\":e.title},domProps:{\"innerHTML\":_vm._s(_vm.getItemTitle(e))},on:{\"dragstart\":function($event){return _vm.onDragStart(e, $event)},\"mouseenter\":function($event){return _vm.onMouseEnterItem(e, $event)},\"mouseleave\":function($event){return _vm.onMouseLeaveItem(e, $event)},\"click\":function($event){$event.stopPropagation();return _vm.onClickItem(e, $event)}}})],{\"event\":e,\"weekStartDate\":weekStart,\"top\":_vm.getItemTop(e)})]})],2)}),0)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n***********************************************************\nThis mix-in includes a computed properties and methods that\nare useful in displaying a calendar. It has no state.\n***********************************************************\n*/\nexport default {\n\tmethods: {\n\t\t// ******************************\n\t\t// Series\n\t\t// ******************************\n\n\t\ttoday() {\n\t\t\treturn this.dateOnly(new Date())\n\t\t},\n\n\t\tbeginningOfPeriod(d, periodUom, startDow) {\n\t\t\tswitch (periodUom) {\n\t\t\t\tcase \"year\":\n\t\t\t\t\treturn new Date(d.getFullYear(), 0)\n\t\t\t\tcase \"month\":\n\t\t\t\t\treturn new Date(d.getFullYear(), d.getMonth())\n\t\t\t\tcase \"week\":\n\t\t\t\t\treturn this.beginningOfWeek(d, startDow)\n\t\t\t\tdefault:\n\t\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\n\t\tdaysOfWeek(weekStart) {\n\t\t\treturn Array(7)\n\t\t\t\t.fill()\n\t\t\t\t.map((_, i) => this.addDays(weekStart, i))\n\t\t},\n\n\t\t// ********************************************\n\t\t// Date transforms that retain time of day\n\t\t// ********************************************\n\n\t\taddDays(d, days) {\n\t\t\treturn new Date(\n\t\t\t\td.getFullYear(),\n\t\t\t\td.getMonth(),\n\t\t\t\td.getDate() + days,\n\t\t\t\td.getHours(),\n\t\t\t\td.getMinutes(),\n\t\t\t\td.getSeconds()\n\t\t\t)\n\t\t},\n\n\t\tbeginningOfWeek(d, startDow) {\n\t\t\treturn this.addDays(d, (startDow - d.getDay() - 7) % -7)\n\t\t},\n\t\tendOfWeek(d, startDow) {\n\t\t\treturn this.addDays(this.beginningOfWeek(d, startDow), 7)\n\t\t},\n\n\t\t// ********************************************\n\t\t// Date transforms that ignore/wipe time of day\n\t\t// ********************************************\n\t\tbeginningOfMonth(d) {\n\t\t\treturn new Date(d.getFullYear(), d.getMonth())\n\t\t},\n\n\t\tinstanceOfMonth(d) {\n\t\t\treturn Math.ceil(d.getDate() / 7)\n\t\t},\n\n\t\t// This function increments a date by a given number of date units. Accepted units are: year, month, week. For year and month,\n\t\t// the day of the month is unchanged. This could cause an unexpected result if the units are \"month\" and the starting day is\n\t\t// higher than the number of days in the destination month. The count can be positive or negative.\n\t\tincrementPeriod(d, uom, count) {\n\t\t\treturn new Date(\n\t\t\t\td.getFullYear() + (uom == \"year\" ? count : 0),\n\t\t\t\td.getMonth() + (uom == \"month\" ? count : 0),\n\t\t\t\td.getDate() + (uom == \"week\" ? count * 7 : 0)\n\t\t\t)\n\t\t},\n\n\t\t// ******************************\n\t\t// Date formatting\n\t\t// ******************************\n\n\t\tpaddedMonth(d) {\n\t\t\treturn (\"0\" + String(d.getMonth() + 1)).slice(-2)\n\t\t},\n\t\tpaddedDay(d) {\n\t\t\treturn (\"0\" + String(d.getDate())).slice(-2)\n\t\t},\n\n\t\tisoYearMonth(d) {\n\t\t\treturn d.getFullYear() + \"-\" + this.paddedMonth(d)\n\t\t},\n\t\tisoYearMonthDay(d) {\n\t\t\treturn this.isoYearMonth(d) + \"-\" + this.paddedDay(d)\n\t\t},\n\t\tisoMonthDay(d) {\n\t\t\treturn this.paddedMonth(d) + \"-\" + this.paddedDay(d)\n\t\t},\n\t\tformattedTime(d, locale, options) {\n\t\t\t// Assume midnight = \"all day\" or indeterminate time\n\t\t\tif (d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0)\n\t\t\t\treturn \"\"\n\t\t\t// If Intl is not supported, send back the 24-hour, zero-padded\n\t\t\t// hours and minutes, expressed as local time.\n\t\t\tif (!this.supportsIntl()) {\n\t\t\t\tvar ms = new Date().getTimezoneOffset() * 60000 // TZ offset in milliseconds\n\t\t\t\treturn new Date(d - ms).toISOString().slice(11, 16)\n\t\t\t}\n\t\t\treturn d.toLocaleTimeString(locale, options)\n\t\t},\n\n\t\t// Formats a date period in long English style. Examples supported:\n\t\t// May 2018\n\t\t// May – June 2018\n\t\t// December 2018 – January 2019\n\t\t// May 6 – 26, 2018\n\t\t// May 13 – June 2, 2018\n\t\t// December 16, 2018 – January 5, 2019\n\t\tformattedPeriod(startDate, endDate, periodUom, monthNames) {\n\t\t\tconst singleYear = startDate.getFullYear() === endDate.getFullYear()\n\t\t\tconst singleMonth = this.isSameMonth(startDate, endDate)\n\t\t\tconst isYear = periodUom === \"year\"\n\t\t\tconst isMonth = periodUom === \"month\"\n\t\t\tconst isWeek = !isYear && !isMonth\n\n\t\t\tlet s = []\n\t\t\ts.push(monthNames[startDate.getMonth()])\n\t\t\tif (isWeek) {\n\t\t\t\ts.push(\" \")\n\t\t\t\ts.push(startDate.getDate())\n\t\t\t}\n\t\t\tif (!singleYear) {\n\t\t\t\ts.push(isWeek ? \", \" : \" \")\n\t\t\t\ts.push(startDate.getFullYear())\n\t\t\t}\n\t\t\tif (!singleMonth || !singleYear) {\n\t\t\t\ts.push(\" \\u2013 \")\n\t\t\t\tif (!singleMonth) {\n\t\t\t\t\ts.push(monthNames[endDate.getMonth()])\n\t\t\t\t}\n\t\t\t\tif (isWeek) s.push(\" \")\n\t\t\t} else if (isWeek) {\n\t\t\t\ts.push(\" \\u2013 \")\n\t\t\t}\n\t\t\tif (isWeek) {\n\t\t\t\ts.push(endDate.getDate())\n\t\t\t\ts.push(\", \")\n\t\t\t} else {\n\t\t\t\ts.push(\" \")\n\t\t\t}\n\t\t\ts.push(endDate.getFullYear())\n\t\t\treturn s.join(\"\")\n\t\t},\n\n\t\t// ******************************\n\t\t// Date comparisons\n\t\t// ******************************\n\n\t\t// Number of whole days between two dates. If present, time of day is ignored.\n\t\t// Have to use setUTCHours to ensure that DST changes between these dates don't\n\t\t// result in a fractional answer.\n\t\tdayDiff(d1, d2) {\n\t\t\tconst endDate = new Date(d2.getFullYear(), d2.getMonth(), d2.getDate()),\n\t\t\t\tstartDate = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate())\n\t\t\tendDate.setUTCHours(0, 0, 0, 0)\n\t\t\tstartDate.setUTCHours(0, 0, 0, 0)\n\t\t\treturn (endDate - startDate) / 86400000\n\t\t},\n\n\t\tisSameDate(d1, d2) {\n\t\t\t// http://stackoverflow.com/questions/492994/compare-two-dates-with-javascript\n\t\t\treturn this.dayDiff(d1, d2) === 0\n\t\t},\n\t\tisSameDateTime(d1, d2) {\n\t\t\treturn d1.getTime() === d2.getTime()\n\t\t},\n\t\tisSameMonth(d1, d2) {\n\t\t\treturn (\n\t\t\t\td1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth()\n\t\t\t)\n\t\t},\n\n\t\tisPastMonth(d) {\n\t\t\treturn this.beginningOfMonth(d) < this.beginningOfMonth(this.today())\n\t\t},\n\t\tisFutureMonth(d) {\n\t\t\treturn this.beginningOfMonth(d) > this.beginningOfMonth(this.today())\n\t\t},\n\n\t\tisInFuture(d) {\n\t\t\treturn this.dateOnly(d) > this.today()\n\t\t},\n\t\tisInPast(d) {\n\t\t\treturn this.dateOnly(d) < this.today()\n\t\t},\n\t\tisLastInstanceOfMonth(d) {\n\t\t\treturn d.getMonth() !== this.addDays(d, 7).getMonth()\n\t\t},\n\t\tisLastDayOfMonth(d) {\n\t\t\treturn d.getMonth() !== this.addDays(d, 1).getMonth()\n\t\t},\n\t\tisSelectedDay(d) {\n\t\t\tvar day = Object.keys(this.dateClasses).find(day =>\n\t\t\t\tthis.isSameDate(this.fromIsoStringToLocalDate(day), d)\n\t\t\t)\n\t\t\treturn day ? this.dateClasses[day] : undefined\n\t\t},\n\t\t// Courtesy https://stackoverflow.com/questions/33908299/javascript-parse-a-string-to-date-as-local-time-zone/42626876#42626876\n\t\tfromIsoStringToLocalDate(s) {\n\t\t\tlet ds = s.split(/\\D/).map(s => Number(s))\n\t\t\tds[1]-- // adjust month\n\t\t\treturn new Date(...ds)\n\t\t},\n\n\t\ttoLocalDate(d) {\n\t\t\treturn typeof d === \"string\"\n\t\t\t\t? this.fromIsoStringToLocalDate(d)\n\t\t\t\t: new Date(d)\n\t\t},\n\n\t\tdateOnly(d) {\n\t\t\t// Always use a copy, setHours mutates argument\n\t\t\tconst d2 = new Date(d)\n\t\t\td2.setHours(0, 0, 0, 0)\n\t\t\treturn d2\n\t\t},\n\n\t\t// ******************************\n\t\t// Localization\n\t\t// ******************************\n\n\t\tlanguageCode(l) {\n\t\t\treturn l.substring(0, 2)\n\t\t},\n\n\t\tsupportsIntl() {\n\t\t\treturn typeof Intl !== \"undefined\"\n\t\t},\n\n\t\tgetFormattedMonthNames(locale, format) {\n\t\t\t// Use the provided locale and format if possible to obtain the name of the month\n\t\t\tif (!this.supportsIntl()) return Array(12).fill(\"\")\n\t\t\tconst formatter = new Intl.DateTimeFormat(locale, { month: format })\n\t\t\t// The year doesn't matter, using 2017 for convenience\n\t\t\treturn Array(12)\n\t\t\t\t.fill()\n\t\t\t\t.map((_, i) => formatter.format(new Date(2017, i, 1)))\n\t\t},\n\n\t\tgetFormattedWeekdayNames(locale, format, startingDayOfWeek) {\n\t\t\t// Use the provided locale and format if possible to obtain the name of the days of the week\n\t\t\tif (!this.supportsIntl()) return Array(7).fill(\"\")\n\t\t\tconst formatter = new Intl.DateTimeFormat(locale, { weekday: format })\n\t\t\t// 2017 starts on Sunday, so use it as the baseline date\n\t\t\treturn Array(7)\n\t\t\t\t.fill()\n\t\t\t\t.map((_, i) =>\n\t\t\t\t\tformatter.format(new Date(2017, 0, (i + 1 + startingDayOfWeek) % 7))\n\t\t\t\t)\n\t\t},\n\n\t\tgetDefaultBrowserLocale() {\n\t\t\t// If not running in the browser, cannot determine a default, return the code for unknown (blank is invalid)\n\t\t\tif (typeof navigator === \"undefined\") return \"unk\"\n\t\t\t// Return the browser's language setting, implementation is browser-specific\n\t\t\treturn (navigator.languages && navigator.languages.length\n\t\t\t\t? navigator.languages[0]\n\t\t\t\t: navigator.language || navigator.browserLanguage\n\t\t\t).toLowerCase()\n\t\t},\n\n\t\t// ******************************\n\t\t// Events\n\t\t// ******************************\n\t\tnormalizeEvent(event, isHovered) {\n\t\t\t// Classes may be a string, an array, or null. Normalize to an array\n\t\t\tconst eventClasses = event.classes\n\t\t\t\t? Array.isArray(event.classes)\n\t\t\t\t\t? [...event.classes]\n\t\t\t\t\t: [event.classes]\n\t\t\t\t: []\n\t\t\t// Provides support for pseudo-hover of entire event when one part of it is hovered\n\t\t\tif (isHovered) eventClasses.push(\"isHovered\")\n\t\t\treturn {\n\t\t\t\toriginalEvent: event,\n\t\t\t\tstartDate: this.toLocalDate(event.startDate),\n\t\t\t\t// For an event without an end date, the end date is the start date\n\t\t\t\tendDate: this.toLocalDate(event.endDate || event.startDate),\n\t\t\t\tclasses: eventClasses,\n\t\t\t\t// Events without a title are untitled\n\t\t\t\ttitle: event.title || \"Untitled\",\n\t\t\t\t// An ID is *required*. Auto-generating leads to weird bugs because these are used as keys and passed in events\n\t\t\t\tid: event.id,\n\t\t\t}\n\t\t},\n\t},\n}\n","\n\t