platypush/platypush/backend/http/webapp/dist/static/js/9978.96bd5026.js.map

1 line
33 KiB
Plaintext

{"version":3,"file":"static/js/9978.96bd5026.js","mappings":"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","sources":["webpack://platypush/./src/components/Media/Utils.vue","webpack://platypush/./src/components/Media/Utils.vue?af63","webpack://platypush/./src/components/Media/View.vue","webpack://platypush/./src/components/Media/Controls.vue","webpack://platypush/./src/components/Media/Controls.vue?3032","webpack://platypush/./src/components/Media/View.vue?78ca","webpack://platypush/./src/components/elements/Slider.vue","webpack://platypush/./src/components/elements/Slider.vue?787f"],"sourcesContent":["<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Utils\",\n mixins: [Utils],\n\n computed: {\n audioExtensions() {\n return new Set([\n '3gp', 'aa', 'aac', 'aax', 'act', 'aiff', 'amr', 'ape', 'au',\n 'awb', 'dct', 'dss', 'dvf', 'flac', 'gsm', 'iklax', 'ivs',\n 'm4a', 'm4b', 'm4p', 'mmf', 'mp3', 'mpc', 'msv', 'nmf', 'nsf',\n 'ogg,', 'opus', 'ra,', 'raw', 'sln', 'tta', 'vox', 'wav',\n 'wma', 'wv', 'webm', '8svx',\n ])\n },\n\n videoExtensions() {\n return new Set([\n 'webm', 'mkv', 'flv', 'flv', 'vob', 'ogv', 'ogg', 'drc', 'gif',\n 'gifv', 'mng', 'avi', 'mts', 'm2ts', 'mov', 'qt', 'wmv', 'yuv',\n 'rm', 'rmvb', 'asf', 'amv', 'mp4', 'm4p', 'm4v', 'mpg', 'mp2',\n 'mpeg', 'mpe', 'mpv', 'mpg', 'mpeg', 'm2v', 'm4v', 'svi',\n '3gp', '3g2', 'mxf', 'roq', 'nsv', 'flv', 'f4v', 'f4p', 'f4a', 'f4b',\n ])\n },\n\n mediaExtensions() {\n return new Set([...this.videoExtensions, ...this.audioExtensions])\n },\n },\n\n methods: {\n convertTime(time) {\n time = parseFloat(time); // Normalize strings\n const t = {}\n t.h = '' + parseInt(time/3600)\n t.m = '' + parseInt(time/60 - t.h*60)\n t.s = '' + parseInt(time - (t.h*3600 + t.m*60))\n\n for (const attr of ['m','s']) {\n if (parseInt(t[attr]) < 10) {\n t[attr] = '0' + t[attr]\n }\n }\n\n const ret = []\n if (parseInt(t.h)) {\n ret.push(t.h)\n }\n\n ret.push(t.m, t.s)\n return ret.join(':')\n },\n\n async startStreaming(resource, download=false) {\n let url = resource\n let subtitles = null\n\n if (resource instanceof Object) {\n url = resource.url\n subtitles = resource.subtitles\n } else {\n resource = {url: url}\n }\n\n const ret = await this.request(`media.start_streaming`, {\n media: url,\n subtitles: subtitles,\n download: download,\n })\n\n return {...resource, ...ret}\n },\n\n async stopStreaming(mediaId) {\n await this.request('media.stop_streaming', {media_id: mediaId})\n },\n },\n}\n</script>\n","import script from \"./Utils.vue?vue&type=script&lang=js\"\nexport * from \"./Utils.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n <div class=\"media-container\">\n <div class=\"view-container\">\n <slot />\n </div>\n <div class=\"controls-container\">\n <Controls :status=\"status\" :track=\"track\" :buttons=\"buttons\" @play=\"$emit('play', $event)\"\n @pause=\"$emit('pause', $event)\" @stop=\"$emit('stop')\" @previous=\"$emit('previous')\"\n @next=\"$emit('next')\" @seek=\"$emit('seek', $event)\" @set-volume=\"$emit('set-volume', $event)\"\n @consume=\"$emit('consume', $event)\" @repeat=\"$emit('repeat', $event)\" @random=\"$emit('random', $event)\"\n @search=\"$emit('search', $event)\"/>\n </div>\n </div>\n</template>\n\n<script>\nimport Controls from \"@/components/Media/Controls\";\n\nexport default {\n name: \"View\",\n components: {Controls},\n emits: ['play', 'pause', 'stop', 'next', 'previous', 'set-volume', 'seek', 'consume', 'random', 'repeat', 'search'],\n props: {\n pluginName: {\n type: String,\n required: true,\n },\n\n status: {\n type: Object,\n default: () => {},\n },\n\n track: {\n type: Object,\n },\n\n buttons: {\n type: Object,\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n\n.media-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n\n .view-container {\n height: 100%;\n }\n\n .controls-container {\n width: 100%;\n position: absolute;\n bottom: 0;\n border-top: $default-border-2;\n background: $default-bg-2;\n box-shadow: $border-shadow-top;\n }\n}\n</style>\n","<template>\n <div class=\"extension fade-in\" :class=\"{hidden: !expanded}\">\n <div class=\"row\">\n <div class=\"col-3\">\n </div>\n <div class=\"col-6\">\n <div class=\"buttons\">\n <button @click=\"$emit('previous')\" title=\"Play previous track\" v-if=\"buttons_.previous\">\n <i class=\"icon fa fa-step-backward\"></i>\n </button>\n <button @click=\"$emit('stop')\" v-if=\"buttons_.stop && status.state !== 'stop'\" title=\"Stop playback\">\n <i class=\"icon fa fa-stop\"></i>\n </button>\n <button @click=\"$emit('next')\" title=\"Play next track\" v-if=\"buttons_.next\">\n <i class=\"icon fa fa-step-forward\"></i>\n </button>\n </div>\n </div>\n <div class=\"col-3\">\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-9 volume-container\">\n <div class=\"col-1\">\n <button :disabled=\"status.muted == null\" @click=\"$emit(status.muted ? 'unmute' : 'mute')\">\n <i class=\"icon fa fa-volume-up\"></i>\n </button>\n </div>\n <div class=\"col-11 volume-slider\">\n <Slider :value=\"status.volume\" :range=\"volumeRange\" :disabled=\"status.volume == null\"\n @mouseup=\"$emit('set-volume', $event.target.value)\" />\n </div>\n </div>\n\n <div class=\"col-3 list-controls\">\n <button @click=\"$emit('consume', !status.consume)\" :class=\"{enabled: status.consume}\"\n title=\"Toggle consume mode\" v-if=\"buttons_.consume\">\n <i class=\"icon fa fa-utensils\"></i>\n </button>\n\n <button @click=\"$emit('random', !status.random)\" :class=\"{enabled: status.random}\"\n title=\"Toggle shuffle\" v-if=\"buttons_.random\">\n <i class=\"icon fa fa-random\"></i>\n </button>\n\n <button @click=\"$emit('repeat', !status.repeat)\" :class=\"{enabled: status.repeat}\"\n title=\"Toggle repeat\" v-if=\"buttons_.repeat\">\n <i class=\"icon fa fa-redo\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-s-2 col-m-1 time\">\n <span class=\"elapsed-time\"\n v-text=\"elapsed != null && (status.state === 'play' || status.state === 'pause') ? convertTime(elapsed) : '-:--'\"></span>\n </div>\n <div class=\"col-s-8 col-m-10 time-bar\">\n <Slider :value=\"elapsed\" :range=\"[0, duration]\" :disabled=\"!duration || status.state === 'stop'\"\n @mouseup=\"$emit('seek', $event.target.value)\" />\n </div>\n <div class=\"col-s-2 col-m-1 time\">\n <span class=\"total-time\"\n v-text=\"duration && status.state !== 'stop' ? convertTime(duration) : '-:--'\"></span>\n </div>\n </div>\n </div>\n\n <div class=\"controls\">\n <div class=\"playback-controls mobile tablet col-2\">\n <button @click=\"$emit(status.state === 'play' ? 'pause' : 'play')\"\n :title=\"status.state === 'play' ? 'Pause' : 'Play'\">\n <i class=\"icon play-pause fa fa-pause\" v-if=\"status.state === 'play'\"></i>\n <i class=\"icon play-pause fa fa-play\" v-else></i>\n </button>\n </div>\n\n <div class=\"track-container col-s-8 col-m-8 col-l-3\">\n <div class=\"track-info\" v-if=\"track && status?.state !== 'stop'\">\n <div class=\"title\" v-if=\"status.state === 'play' || status.state === 'pause'\">\n <a :href=\"$route.fullPath\" v-text=\"track.title?.length ? track.title : '[No Title]'\"\n @click.prevent=\"$emit('search', {artist: track.artist, album: track.album})\" v-if=\"track.album\"></a>\n <a :href=\"track.url\" v-text=\"track.title?.length ? track.title : '[No Title]'\" v-else-if=\"track.url\"></a>\n <span v-text=\"track.title?.length ? track.title : '[No Title]' \" v-else></span>\n </div>\n <div class=\"artist\" v-if=\"track.artist?.length && (status.state === 'play' || status.state === 'pause')\">\n <a :href=\"$route.fullPath\" v-text=\"track.artist\" @click.prevent=\"$emit('search', {artist: track.artist})\"></a>\n </div>\n </div>\n </div>\n\n <div class=\"playback-controls desktop col-6\">\n <div class=\"row buttons\">\n <button @click=\"$emit('previous')\" title=\"Play previous track\" v-if=\"buttons_.previous\">\n <i class=\"icon fa fa-step-backward\"></i>\n </button>\n <button @click=\"$emit(status.state === 'play' ? 'pause' : 'play')\"\n :title=\"status.state === 'play' ? 'Pause' : 'Play'\">\n <i class=\"icon play-pause fa fa-pause\" v-if=\"status.state === 'play'\"></i>\n <i class=\"icon play-pause fa fa-play\" v-else></i>\n </button>\n <button @click=\"$emit('stop')\" v-if=\"buttons_.stop && status.state !== 'stop'\" title=\"Stop playback\">\n <i class=\"icon fa fa-stop\"></i>\n </button>\n <button @click=\"$emit('next')\" title=\"Play next track\" v-if=\"buttons_.next\">\n <i class=\"icon fa fa-step-forward\"></i>\n </button>\n </div>\n\n <div class=\"row\">\n <div class=\"col-1 time\">\n <span class=\"elapsed-time\"\n v-text=\"elapsed != null && (status.state === 'play' || status.state === 'pause') ? convertTime(elapsed) : '-:--'\"></span>\n </div>\n <div class=\"col-10\">\n <Slider :value=\"elapsed\" :range=\"[0, duration]\" :disabled=\"!duration || status.state === 'stop'\"\n @mouseup=\"$emit('seek', $event.target.value)\" />\n </div>\n <div class=\"col-1 time\">\n <span class=\"total-time\"\n v-text=\"duration && status.state !== 'stop' ? convertTime(duration) : '-:--'\"></span>\n </div>\n </div>\n </div>\n\n <div class=\"col-2 pull-right mobile tablet right-buttons\">\n <button @click=\"expanded = !expanded\" :title=\"expanded ? 'Show more controls' : 'Hide extra controls'\">\n <i class=\"fas\" :class=\"[`fa-chevron-${expanded ? 'down' : 'up'}`]\" />\n </button>\n </div>\n\n <div class=\"col-3 pull-right desktop\">\n <div class=\"row list-controls\">\n <button @click=\"$emit('consume')\" :class=\"{enabled: status.consume}\" title=\"Toggle consume mode\" v-if=\"buttons_.consume\">\n <i class=\"icon fa fa-utensils\"></i>\n </button>\n <button @click=\"$emit('random')\" :class=\"{enabled: status.random}\" title=\"Toggle shuffle\" v-if=\"buttons_.random\">\n <i class=\"icon fa fa-random\"></i>\n </button>\n <button @click=\"$emit('repeat')\" :class=\"{enabled: status.repeat}\" title=\"Toggle repeat\" v-if=\"buttons_.repeat\">\n <i class=\"icon fa fa-redo\"></i>\n </button>\n </div>\n\n <div class=\"row volume-container\">\n <div class=\"col-2\">\n <button :disabled=\"status.muted == null\" @click=\"$emit(status.muted ? 'unmute' : 'mute')\">\n <i class=\"icon fa fa-volume-up\"></i>\n </button>\n </div>\n <div class=\"col-10\">\n <Slider :value=\"status.volume\" :range=\"volumeRange\" :disabled=\"status.volume == null\"\n @mouseup=\"$emit('set-volume', $event.target.value)\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\"\nimport MediaUtils from \"@/components/Media/Utils\";\nimport Slider from \"@/components/elements/Slider\";\n\nexport default {\n name: \"Controls\",\n components: {Slider},\n mixins: [Utils, MediaUtils],\n emits: ['search', 'previous', 'next', 'play', 'pause', 'stop', 'seek', 'consume', 'random', 'repeat',\n 'set-volume', 'mute', 'unmute'],\n\n props: {\n track: {\n type: Object,\n },\n\n status: {\n type: Object,\n default: () => {},\n },\n\n // Enabled playback buttons\n buttons: {\n type: Object,\n default: () => {\n return {\n previous: true,\n next: true,\n stop: true,\n consume: true,\n random: true,\n repeat: true,\n }\n },\n },\n\n // Volume range\n volumeRange: {\n type: Array,\n default: () => [0, 100],\n }\n },\n\n data() {\n const buttons = Object.keys(this.buttons)?.length ? this.buttons : {\n previous: true,\n next: true,\n stop: true,\n consume: true,\n random: true,\n repeat: true,\n }\n\n return {\n expanded: false,\n lastSync: 0,\n elapsed: this.status?.elapsed || this.status?.position,\n buttons_: buttons,\n }\n },\n\n computed: {\n duration() {\n return this.status?.duration != null ? this.status.duration : this.track?.duration\n },\n },\n\n methods: {\n getTime() {\n return (new Date()).getTime() / 1000\n }\n },\n\n mounted() {\n const self = this\n this.lastSync = this.getTime()\n\n this.$watch(() => this.track, (track) => {\n if (!track || self.status?.state !== 'play')\n self.lastSync = this.getTime()\n })\n\n this.$watch(() => this.status, () => {\n self.lastSync = this.getTime()\n })\n\n setInterval(() => {\n if (self.status?.state !== 'stop') {\n self.elapsed = (self.status?.elapsed || self.status?.position || 0)\n if (self.status?.state === 'play')\n self.elapsed += Math.round(this.getTime() - self.lastSync)\n }\n }, 1000)\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n\nbutton {\n border: 0;\n background: none;\n\n &:hover {\n border: 0;\n\n .icon {\n color: $default-hover-fg;\n }\n }\n\n &.enabled {\n color: $selected-fg;\n }\n}\n\n.extension {\n box-shadow: $border-shadow-bottom;\n flex-direction: column;\n display: none;\n overflow: hidden;\n\n @include until($desktop) {\n display: flex;\n padding-top: .5em;\n }\n\n .row {\n display: flex;\n }\n\n .buttons {\n justify-content: center;\n margin: 0;\n }\n\n .volume-container,\n .list-controls {\n display: flex;\n align-items: center;\n\n button {\n padding: 0 .25em;\n }\n }\n\n .list-controls {\n margin-top: -.5em;\n flex-flow: row-reverse;\n }\n\n .time {\n &:first-child {\n margin-left: .25em;\n }\n\n &:last-child {\n margin-right: .25em;\n }\n }\n\n .volume-slider {\n flex-grow: 1;\n }\n}\n\n.controls {\n width: 100%;\n height: $media-ctrl-panel-height;\n display: flex;\n padding: 1em .5em;\n overflow: hidden;\n\n .row {\n width: 100%;\n display: flex;\n }\n\n .track-container {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-left: 0;\n\n @include until($tablet) {\n align-items: center;\n }\n\n a {\n color: initial;\n text-decoration: none;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .artist, .title {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .artist {\n opacity: 0.6;\n letter-spacing: .04em;\n }\n\n .title {\n font-weight: normal;\n font-size: 1em;\n letter-spacing: .05em;\n margin-bottom: .25em;\n }\n }\n\n .playback-controls {\n &.mobile {\n display: none;\n\n @include until($tablet) {\n display: flex !important;\n align-items: center;\n }\n }\n\n &.tablet {\n display: none;\n\n @media screen and (min-width: $tablet) and (max-width: $desktop - 1) {\n display: flex !important;\n align-items: center;\n }\n }\n\n .row {\n justify-content: center;\n }\n\n .buttons {\n height: 50%;\n margin-bottom: .5em;\n align-items: center;\n }\n\n button {\n padding: 0.5em;\n margin: 0 .75em;\n\n .play-pause {\n color: $play-btn-fg;\n font-size: 1.75em;\n\n &:hover {\n color: $default-hover-fg-2;\n }\n }\n }\n }\n\n .list-controls {\n height: 50%;\n opacity: 0.7;\n display: flex;\n align-items: center;\n margin-bottom: 1em;\n flex-flow: row-reverse;\n }\n\n .mobile.right-buttons {\n @include until ($desktop) {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex: 1;\n }\n }\n\n .pull-right {\n button {\n padding: 0.5em;\n }\n\n .volume-container {\n align-items: center;\n margin-top: -1.25em;\n\n button {\n background: none;\n }\n }\n }\n\n .seek-slider {\n width: 75%;\n }\n\n .volume-slider {\n width: 75%;\n margin-right: .5em;\n }\n}\n\n.time {\n font-size: .7em;\n position: relative;\n}\n\n.elapsed-time {\n text-align: right;\n float: right;\n}\n\n.time-bar {\n flex-grow: 1;\n margin: 0 .5em;\n}\n\n.mobile {\n @include from($tablet) {\n display: none;\n }\n}\n\n.tablet {\n @media screen and (max-width: $tablet), screen and (min-width: $desktop - 1) {\n display: none;\n }\n}\n\n.desktop {\n @include until($desktop) {\n display: none;\n }\n}\n</style>\n","import { render } from \"./Controls.vue?vue&type=template&id=8db4988a&scoped=true\"\nimport script from \"./Controls.vue?vue&type=script&lang=js\"\nexport * from \"./Controls.vue?vue&type=script&lang=js\"\n\nimport \"./Controls.vue?vue&type=style&index=0&id=8db4988a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-8db4988a\"]])\n\nexport default __exports__","import { render } from \"./View.vue?vue&type=template&id=70d7a7df&scoped=true\"\nimport script from \"./View.vue?vue&type=script&lang=js\"\nexport * from \"./View.vue?vue&type=script&lang=js\"\n\nimport \"./View.vue?vue&type=style&index=0&id=70d7a7df&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-70d7a7df\"]])\n\nexport default __exports__","<template>\n <label class=\"slider-wrapper\">\n <input class=\"slider\" type=\"range\" ref=\"range\" :min=\"range[0]\" :max=\"range[1]\"\n :step=\"step\" :disabled=\"disabled\" :value=\"value\"\n @input.stop=\"onUpdate\"\n @change.stop=\"onUpdate\"\n @mouseup.stop=\"onUpdate\"\n @mousedown.stop=\"onUpdate\"\n @touchstart.stop=\"onUpdate\"\n @touchend.stop=\"onUpdate\"\n @keyup.stop=\"onUpdate\"\n @keydown.stop=\"onUpdate\">\n\n <div class=\"track\">\n <div class=\"track-inner\" ref=\"track\"></div>\n </div>\n <div class=\"thumb\" ref=\"thumb\"></div>\n <span class=\"label\" v-if=\"withLabel\" v-text=\"value\"></span>\n </label>\n</template>\n\n<script>\nexport default {\n name: \"Slider\",\n emits: ['input', 'change', 'mouseup', 'mousedown', 'touchstart', 'touchend', 'keyup', 'keydown'],\n props: {\n value: {\n type: Number,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n range: {\n type: Array,\n default: () => [0, 100],\n },\n\n step: {\n type: Number,\n default: 1,\n },\n\n withLabel: {\n type: Boolean,\n default: false,\n }\n },\n\n methods: {\n onUpdate(event) {\n this.update(event.target.value)\n this.$emit(event.type, {\n ...event,\n target: {\n ...event.target,\n value: this.$refs.range.value,\n }\n })\n },\n\n update(value) {\n const percent = (value * 100) / (this.range[1] - this.range[0])\n this.$refs.thumb.style.left = `${percent}%`\n this.$refs.thumb.style.transform = `translate(-${percent}%, -50%)`\n this.$refs.track.style.width = `${percent}%`\n },\n },\n\n mounted() {\n if (this.value != null)\n this.update(this.value)\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.slider-wrapper {\n width: 100%;\n display: flex;\n position: relative;\n\n .slider {\n width: 100%;\n cursor: pointer;\n opacity: 0;\n\n &::-ms-tooltip {\n display: none;\n }\n }\n\n .track {\n width: 100%;\n height: 0.75em;\n background: $slider-bg;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: 0.5em;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n pointer-events: none;\n\n .track-inner {\n width: 0;\n height: 100%;\n background: $slider-progress-bg;\n border-radius: 0.5em 0 0 0.5em;\n }\n }\n\n .thumb {\n width: 1.25em;\n height: 1.25em;\n background: $slider-thumb-bg;\n position: absolute;\n top: 50%;\n left: 0;\n transform: translate(0%, -50%);\n border-radius: 50%;\n box-shadow: 1px 0px 2px 0 $slider-thumb-shadow;\n pointer-events: none;\n }\n\n label {\n position: relative;\n .label {\n font-weight: normal;\n text-align: center;\n }\n }\n}\n</style>\n","import { render } from \"./Slider.vue?vue&type=template&id=288acf82&scoped=true\"\nimport script from \"./Slider.vue?vue&type=script&lang=js\"\nexport * from \"./Slider.vue?vue&type=script&lang=js\"\n\nimport \"./Slider.vue?vue&type=style&index=0&id=288acf82&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-288acf82\"]])\n\nexport default __exports__"],"names":["name","mixins","Utils","computed","audioExtensions","Set","videoExtensions","mediaExtensions","this","methods","convertTime","time","parseFloat","t","h","parseInt","m","s","attr","ret","push","join","async","resource","download","url","subtitles","Object","request","media","mediaId","media_id","__exports__","class","status","track","buttons","$emit","$event","expanded","buttons_","previous","title","stop","state","next","disabled","muted","value","volume","range","volumeRange","target","consume","random","repeat","elapsed","duration","album","href","$route","fullPath","length","artist","components","Slider","emits","props","type","default","Array","data","keys","lastSync","position","getTime","Date","mounted","self","$watch","setInterval","Math","round","Controls","pluginName","String","required","render","ref","min","max","step","onUpdate","withLabel","Number","Boolean","event","update","$refs","percent","thumb","style","left","transform","width"],"sourceRoot":""}