From d6d59fc8de240ab7d5ad80deaff9d6a81b38a8d5 Mon Sep 17 00:00:00 2001 From: Lucas Duarte Sobreira Date: Tue, 21 Dec 2021 23:34:28 -0300 Subject: [PATCH 001/135] fix trying to notify using undefined data --- src/renderer/index.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 706a7777..acb9d957 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -343,11 +343,15 @@ const app = new Vue({ if (this.notification) { this.notification.close() } - this.notification = new Notification(a.name, { - body: a.artistName, - icon: (a.artwork.url.replace('/{w}x{h}bb', '/512x512bb')).replace('/2000x2000bb', '/35x35bb'), - silent: true - }) + if (a.artistName && a.artwork && a.name) { + this.notification = new Notification(a.name, { + body: a.artistName, + icon: a.artwork.url + .replace('/{w}x{h}bb', '/512x512bb') + .replace('/2000x2000bb', '/35x35bb'), + silent: true, + }); + } } }) From 574b4a61a4d5615f3576f650e2deac6def5fd09f Mon Sep 17 00:00:00 2001 From: Lucas Duarte Sobreira Date: Wed, 22 Dec 2021 09:39:58 -0300 Subject: [PATCH 002/135] move checks into platform check --- src/renderer/index.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index acb9d957..e6b91fc2 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -339,19 +339,15 @@ const app = new Vue({ app.loadLyrics() // Playback Notifications - if ((app.platform === "darwin" || app.platform === "linux") && !document.hasFocus()) { + if ((app.platform === "darwin" || app.platform === "linux") && !document.hasFocus() && a.artistName && a.artwork && a.name) { if (this.notification) { this.notification.close() } - if (a.artistName && a.artwork && a.name) { - this.notification = new Notification(a.name, { - body: a.artistName, - icon: a.artwork.url - .replace('/{w}x{h}bb', '/512x512bb') - .replace('/2000x2000bb', '/35x35bb'), - silent: true, - }); - } + this.notification = new Notification(a.name, { + body: a.artistName, + icon: a.artwork.url.replace('/{w}x{h}bb', '/512x512bb').replace('/2000x2000bb', '/35x35bb'), + silent: true, + }); } }) From a5d31ff2f9b6a5ba567f60e21206dce85eea9dc0 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Tue, 28 Dec 2021 13:04:09 -0800 Subject: [PATCH 003/135] readding key to mediaitem-artwork to prevent artwork sticking --- src/renderer/style.less | 6 ++++++ src/renderer/views/components/mediaitem-artwork.ejs | 2 +- src/renderer/views/pages/home.ejs | 5 +++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index 1955353d..75c395c9 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -1544,6 +1544,12 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { top: 0; padding-top: var(--navbarHeight); + .col.madeforyou-col { + width: 420px; + min-width: 0px; + max-width: 420px; + } + .user-icon { border-radius: 100%; width: 128px; diff --git a/src/renderer/views/components/mediaitem-artwork.ejs b/src/renderer/views/components/mediaitem-artwork.ejs index 7c96e926..154df983 100644 --- a/src/renderer/views/components/mediaitem-artwork.ejs +++ b/src/renderer/views/components/mediaitem-artwork.ejs @@ -1,5 +1,5 @@ + + \ No newline at end of file diff --git a/src/renderer/views/pages/home.ejs b/src/renderer/views/pages/home.ejs index 2674138a..9f81ff58 100644 --- a/src/renderer/views/pages/home.ejs +++ b/src/renderer/views/pages/home.ejs @@ -1,13 +1,13 @@ + + \ No newline at end of file diff --git a/src/renderer/views/pages/settings.ejs b/src/renderer/views/pages/settings.ejs index 5f773116..a740852f 100644 --- a/src/renderer/views/pages/settings.ejs +++ b/src/renderer/views/pages/settings.ejs @@ -9,10 +9,10 @@ Audio Quality
- + + +
@@ -25,6 +25,14 @@ +
+
+ Audio Normalization +
+
+ +
+
Visual
@@ -72,7 +80,7 @@ (Requires relaunch)
- @@ -547,7 +555,14 @@ } }, methods: { - + toggleNormalization : function(){ + if (app.cfg.audio.normalization){ + CiderAudio.normalizerOn() + } else {CiderAudio.normalizerOff()} + }, + changeAudioQuality : function(){ + app.mk.bitrate = app.cfg.audio.quality + } } }) \ No newline at end of file From 0da3ad6b1dd1be55cbfa112c8240a1c2d5f6fd2b Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 29 Dec 2021 05:53:14 -0800 Subject: [PATCH 010/135] artist feed will now sort by date correctly, removed some console alerts --- src/renderer/views/pages/artist-feed.ejs | 6 ++++++ src/renderer/views/pages/home.ejs | 14 +++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/renderer/views/pages/artist-feed.ejs b/src/renderer/views/pages/artist-feed.ejs index 8c7c0c6d..b54cb457 100644 --- a/src/renderer/views/pages/artist-feed.ejs +++ b/src/renderer/views/pages/artist-feed.ejs @@ -54,6 +54,12 @@ self.artistFeed.push(item.views["latest-release"].data[0]) } }) + // sort artistFeed by attributes.releaseDate descending, date is formatted as "YYYY-MM-DD" + this.artistFeed.sort((a, b) => { + let dateA = new Date(a.attributes.releaseDate) + let dateB = new Date(b.attributes.releaseDate) + return dateB - dateA + }) }) } diff --git a/src/renderer/views/pages/home.ejs b/src/renderer/views/pages/home.ejs index 9f81ff58..60f07c45 100644 --- a/src/renderer/views/pages/home.ejs +++ b/src/renderer/views/pages/home.ejs @@ -122,23 +122,16 @@ playlists.push(item.id) } } - console.warn(playlists) - console.warn(libraryPlaylists) if (playlists.length != 0) { this.app.mk.api.playlists(playlists).then(playlistsData => { self.favorites.push(...playlistsData) - console.info(playlistsData) }) } if (libraryPlaylists.length != 0) { this.app.mk.api.library.playlists(libraryPlaylists).then(playlistsData => { self.favorites.push(...playlistsData) - console.info(playlistsData) }) } - console.warn(this.favoriteItems) - - console.warn(self.favorites) }, async getArtistFeed() { let artists = this.followedArtists @@ -157,8 +150,15 @@ self.artistFeed.push(item.views["latest-release"].data[0]) } }) + // sort artistFeed by attributes.releaseDate descending, date is formatted as "YYYY-MM-DD" + this.artistFeed.sort((a, b) => { + let dateA = new Date(a.attributes.releaseDate) + let dateB = new Date(b.attributes.releaseDate) + return dateB - dateA + }) }) + }, getRecentlyPlayed() { From 04956a55904bb5741f45f8159ee6e5da31cf7d33 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 29 Dec 2021 21:06:54 +0700 Subject: [PATCH 011/135] fixed this --- src/renderer/index.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 23465e80..24ab8036 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -400,7 +400,21 @@ const app = new Vue({ }; // Load saved quality - app.mk.bitrate = app.cfg.audio.quality + switch (app.cfg.audio.quality){ + case "extreme": + app.mk.bitrate = app.cfg.audio.quality = 990 + break; + case "high": + app.mk.bitrate = app.cfg.audio.quality = 256 + break; + case "low": + app.mk.bitrate = app.cfg.audio.quality = 64 + break; + default: + app.mk.bitrate = app.cfg.audio.quality + } + + // load last played track try { From ee4a2e475129056dc76b4c738a56844447482678 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 29 Dec 2021 06:29:31 -0800 Subject: [PATCH 012/135] added share to some elements, does not work correctly for library songs yet --- src/renderer/index.js | 3 +++ .../views/components/mediaitem-list-item.ejs | 6 ++++++ src/renderer/views/components/mediaitem-square.ejs | 12 +++++++++++- src/renderer/views/pages/artist.ejs | 4 +++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 24ab8036..c5e19c81 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -613,6 +613,9 @@ const app = new Vue({ self.refreshPlaylists() }) }, + copyToClipboard(str) { + navigator.clipboard.writeText(str) + }, newPlaylist(name = "New Playlist", tracks = []) { let self = this let request = { diff --git a/src/renderer/views/components/mediaitem-list-item.ejs b/src/renderer/views/components/mediaitem-list-item.ejs index 9237ad99..0bd21c76 100644 --- a/src/renderer/views/components/mediaitem-list-item.ejs +++ b/src/renderer/views/components/mediaitem-list-item.ejs @@ -276,6 +276,12 @@ app.searchAndNavigate(self.item, 'album') } }, + { + "name": "Share", + "action": function () { + self.app.copyToClipboard(self.item.attributes.url) + } + } ] } } diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index 7d7976d3..23a350d5 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -215,6 +215,7 @@ } }, { + "id": "addToPlaylist", "name": "Add to Playlist...", "action": function () { app.promptAddToPlaylist() @@ -237,11 +238,20 @@ ; } }, + { + "name": "Share", + "action": function () { + self.app.copyToClipboard(self.item.attributes.url) + } + } ] } } if ((self.item.attributes.playParams.kind ?? self.item.type).includes("playlist")) { - menus.normal.items.splice(2, 1); + // remove the add to playlist option by id "addToPlaylist" using the .filter() method + menus.normal.items = menus.normal.items.filter(function (item) { + return item.id != "addToPlaylist" + }) } if (this.contextExt) { if (this.contextExt.normal) { diff --git a/src/renderer/views/pages/artist.ejs b/src/renderer/views/pages/artist.ejs index 72d00995..06278b64 100644 --- a/src/renderer/views/pages/artist.ejs +++ b/src/renderer/views/pages/artist.ejs @@ -169,7 +169,9 @@ followActions[followAction], { name: "Share", - action: ()=>{} + action: ()=>{ + self.app.copyToClipboard(self.data.attributes.url) + } } ] }) From f777f832e49e83daf82d4cfe3db942e8b25f1608 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 29 Dec 2021 06:33:03 -0800 Subject: [PATCH 013/135] removed limit for artist feed on full artist feed page --- src/renderer/views/pages/artist-feed.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/views/pages/artist-feed.ejs b/src/renderer/views/pages/artist-feed.ejs index b54cb457..f8758b9a 100644 --- a/src/renderer/views/pages/artist-feed.ejs +++ b/src/renderer/views/pages/artist-feed.ejs @@ -10,7 +10,7 @@
@@ -225,6 +225,17 @@ kind = data.attributes.playParams.kind; id = data.attributes.playParams.id; return `${kind}:${id}` + }, + getFormattedDate: function (date) { + if (date == null || date === "") return ""; + try{ + var releaseDate = new Date(date); + month = new Intl.DateTimeFormat('en-US', { month: 'long'}).format(releaseDate); + date = releaseDate.getDate(); + year = releaseDate.getFullYear(); + + return date + " " + month + " " + year; + } catch (e){ return ""} } } }) From 7072ccc30c402930788fe732d7fc255cd82b2c58 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 30 Dec 2021 11:17:30 +0700 Subject: [PATCH 019/135] reset normalizer --- src/renderer/audio/audio.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 6be75e9e..3358a577 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -30,6 +30,7 @@ var CiderAudio = { }, normalizerOn: function (){}, normalizerOff: function (){ + CiderAudio.audioNodes.gainNode.gain.value = 1; } } From a256a7265258221e11ac4f9743ac41deb59db183 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 30 Dec 2021 11:50:42 +0700 Subject: [PATCH 020/135] audiocontext toggle --- index.js | 2 +- src/renderer/audio/audio.js | 12 ++++++++++- src/renderer/audio/tuna.js | 1 - src/renderer/views/main.ejs | 1 - src/renderer/views/pages/settings.ejs | 29 ++++++++++++++++++--------- 5 files changed, 31 insertions(+), 14 deletions(-) delete mode 100644 src/renderer/audio/tuna.js diff --git a/index.js b/index.js index 0f046b46..abba9a20 100644 --- a/index.js +++ b/index.js @@ -47,7 +47,7 @@ const configSchema = { "NowPlaying": "true" }, "advanced": { - "AudioContext" : true, + "AudioContext" : false, } } diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 3358a577..cffb98a6 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -18,9 +18,19 @@ var CiderAudio = { } }, 1000); }, + off: function(){ + try{ + CiderAudio.audioNodes.gainNode.disconnect(); + CiderAudio.source.connect(CiderAudio.context.destination);} catch(e){} + }, connectContext: function (mediaElem){ + + if (!CiderAudio.context){ CiderAudio.context = new (window.AudioContext || window.webkitAudioContext); + } + if (!CiderAudio.source){ CiderAudio.source = CiderAudio.context.createMediaElementSource(mediaElem); + } else {try{CiderAudio.source.disconnect(CiderAudio.context.destination)}catch(e){}} CiderAudio.audioNodes.gainNode = CiderAudio.context.createGain() CiderAudio.source.connect(CiderAudio.audioNodes.gainNode); CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination); @@ -30,7 +40,7 @@ var CiderAudio = { }, normalizerOn: function (){}, normalizerOff: function (){ - CiderAudio.audioNodes.gainNode.gain.value = 1; + CiderAudio.audioNodes.gainNode.gain.setTargetAtTime(1, CiderAudio.context.currentTime+ 1, 0.5); } } diff --git a/src/renderer/audio/tuna.js b/src/renderer/audio/tuna.js deleted file mode 100644 index 22ab2014..00000000 --- a/src/renderer/audio/tuna.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var userContext,userInstance,pipe=function(param,val){param.value=val},Super=Object.create(null,{activate:{writable:true,value:function(doActivate){if(doActivate){this.input.disconnect();this.input.connect(this.activateNode);if(this.activateCallback){this.activateCallback(doActivate)}}else{this.input.disconnect();this.input.connect(this.output)}}},bypass:{get:function(){return this._bypass},set:function(value){if(this._lastBypassValue===value){return}this._bypass=value;this.activate(!value);this._lastBypassValue=value}},connect:{value:function(target){this.output.connect(target)}},disconnect:{value:function(target){this.output.disconnect(target)}},connectInOrder:{value:function(nodeArray){var i=nodeArray.length-1;while(i--){if(!nodeArray[i].connect){return console.error("AudioNode.connectInOrder: TypeError: Not an AudioNode.",nodeArray[i])}if(nodeArray[i+1].input){nodeArray[i].connect(nodeArray[i+1].input)}else{nodeArray[i].connect(nodeArray[i+1])}}}},getDefaults:{value:function(){var result={};for(var key in this.defaults){result[key]=this.defaults[key].value}return result}},automate:{value:function(property,value,duration,startTime){var start=startTime?~~(startTime/1e3):userContext.currentTime,dur=duration?~~(duration/1e3):0,_is=this.defaults[property],param=this[property],method;if(param){if(_is.automatable){if(!duration){method="setValueAtTime"}else{method="linearRampToValueAtTime";param.cancelScheduledValues(start);param.setValueAtTime(param.value,start)}param[method](value,dur+start)}else{param=value}}else{console.error("Invalid Property for "+this.name)}}}}),FLOAT="float",BOOLEAN="boolean",STRING="string",INT="int";if(typeof module!=="undefined"&&module.exports){module.exports=Tuna}else if(typeof define==="function"){window.define("Tuna",definition)}else{window.Tuna=Tuna}function definition(){return Tuna}function Tuna(context){if(!(this instanceof Tuna)){return new Tuna(context)}var _window=typeof window==="undefined"?{}:window;if(!_window.AudioContext){_window.AudioContext=_window.webkitAudioContext}if(!context){console.log("tuna.js: Missing audio context! Creating a new context for you.");context=_window.AudioContext&&new _window.AudioContext}if(!context){throw new Error("Tuna cannot initialize because this environment does not support web audio.")}connectify(context);userContext=context;userInstance=this}function connectify(context){if(context.__connectified__===true)return;var gain=context.createGain(),proto=Object.getPrototypeOf(Object.getPrototypeOf(gain)),oconnect=proto.connect;proto.connect=shimConnect;context.__connectified__=true;function shimConnect(){var node=arguments[0];arguments[0]=Super.isPrototypeOf?Super.isPrototypeOf(node)?node.input:node:node.input||node;oconnect.apply(this,arguments);return node}}function dbToWAVolume(db){return Math.max(0,Math.round(100*Math.pow(2,db/6))/100)}function fmod(x,y){var tmp,tmp2,p=0,pY=0,l=0,l2=0;tmp=x.toExponential().match(/^.\.?(.*)e(.+)$/);p=parseInt(tmp[2],10)-(tmp[1]+"").length;tmp=y.toExponential().match(/^.\.?(.*)e(.+)$/);pY=parseInt(tmp[2],10)-(tmp[1]+"").length;if(pY>p){p=pY}tmp2=x%y;if(p<-100||p>20){l=Math.round(Math.log(tmp2)/Math.log(10));l2=Math.pow(10,l);return(tmp2/l2).toFixed(l-p)*l2}else{return parseFloat(tmp2.toFixed(-p))}}function sign(x){if(x===0){return 1}else{return Math.abs(x)/x}}function tanh(n){return(Math.exp(n)-Math.exp(-n))/(Math.exp(n)+Math.exp(-n))}function initValue(userVal,defaultVal){return userVal===undefined?defaultVal:userVal}Tuna.prototype.Bitcrusher=function(properties){if(!properties){properties=this.getDefaults()}this.bufferSize=properties.bufferSize||this.defaults.bufferSize.value;this.input=userContext.createGain();this.activateNode=userContext.createGain();this.processor=userContext.createScriptProcessor(this.bufferSize,1,1);this.output=userContext.createGain();this.activateNode.connect(this.processor);this.processor.connect(this.output);var phaser=0,last=0,input,output,step,i,length;this.processor.onaudioprocess=function(e){input=e.inputBuffer.getChannelData(0),output=e.outputBuffer.getChannelData(0),step=Math.pow(1/2,this.bits);length=input.length;for(i=0;i=1){phaser-=1;last=step*Math.floor(input[i]/step+.5)}output[i]=last}};this.bits=properties.bits||this.defaults.bits.value;this.normfreq=initValue(properties.normfreq,this.defaults.normfreq.value);this.bypass=properties.bypass||this.defaults.bypass.value};Tuna.prototype.Bitcrusher.prototype=Object.create(Super,{name:{value:"Bitcrusher"},defaults:{writable:true,value:{bits:{value:4,min:1,max:16,automatable:false,type:INT},bufferSize:{value:4096,min:256,max:16384,automatable:false,type:INT},bypass:{value:false,automatable:false,type:BOOLEAN},normfreq:{value:.1,min:1e-4,max:1,automatable:false,type:FLOAT}}},bits:{enumerable:true,get:function(){return this.processor.bits},set:function(value){this.processor.bits=value}},normfreq:{enumerable:true,get:function(){return this.processor.normfreq},set:function(value){this.processor.normfreq=value}}});Tuna.prototype.Cabinet=function(properties){if(!properties){properties=this.getDefaults()}this.input=userContext.createGain();this.activateNode=userContext.createGain();this.convolver=this.newConvolver(properties.impulsePath||"../impulses/impulse_guitar.wav");this.makeupNode=userContext.createGain();this.output=userContext.createGain();this.activateNode.connect(this.convolver.input);this.convolver.output.connect(this.makeupNode);this.makeupNode.connect(this.output);this.makeupNode.gain.value=initValue(properties.makeupGain,this.defaults.makeupGain.value);this.bypass=properties.bypass||this.defaults.bypass.value};Tuna.prototype.Cabinet.prototype=Object.create(Super,{name:{value:"Cabinet"},defaults:{writable:true,value:{makeupGain:{value:1,min:0,max:20,automatable:true,type:FLOAT},bypass:{value:false,automatable:false,type:BOOLEAN}}},makeupGain:{enumerable:true,get:function(){return this.makeupNode.gain},set:function(value){this.makeupNode.gain.setTargetAtTime(value,userContext.currentTime,.01)}},newConvolver:{value:function(impulsePath){return new userInstance.Convolver({impulse:impulsePath,dryLevel:0,wetLevel:1})}}});Tuna.prototype.Chorus=function(properties){if(!properties){properties=this.getDefaults()}this.input=userContext.createGain();this.attenuator=this.activateNode=userContext.createGain();this.splitter=userContext.createChannelSplitter(2);this.delayL=userContext.createDelay();this.delayR=userContext.createDelay();this.feedbackGainNodeLR=userContext.createGain();this.feedbackGainNodeRL=userContext.createGain();this.merger=userContext.createChannelMerger(2);this.output=userContext.createGain();this.lfoL=new userInstance.LFO({target:this.delayL.delayTime,callback:pipe});this.lfoR=new userInstance.LFO({target:this.delayR.delayTime,callback:pipe});this.input.connect(this.attenuator);this.attenuator.connect(this.output);this.attenuator.connect(this.splitter);this.splitter.connect(this.delayL,0);this.splitter.connect(this.delayR,1);this.delayL.connect(this.feedbackGainNodeLR);this.delayR.connect(this.feedbackGainNodeRL);this.feedbackGainNodeLR.connect(this.delayR);this.feedbackGainNodeRL.connect(this.delayL);this.delayL.connect(this.merger,0,0);this.delayR.connect(this.merger,0,1);this.merger.connect(this.output);this.feedback=initValue(properties.feedback,this.defaults.feedback.value);this.rate=initValue(properties.rate,this.defaults.rate.value);this.delay=initValue(properties.delay,this.defaults.delay.value);this.depth=initValue(properties.depth,this.defaults.depth.value);this.lfoR.phase=Math.PI/2;this.attenuator.gain.value=.6934;this.lfoL.activate(true);this.lfoR.activate(true);this.bypass=properties.bypass||this.defaults.bypass.value};Tuna.prototype.Chorus.prototype=Object.create(Super,{name:{value:"Chorus"},defaults:{writable:true,value:{feedback:{value:.4,min:0,max:.95,automatable:false,type:FLOAT},delay:{value:.0045,min:0,max:1,automatable:false,type:FLOAT},depth:{value:.7,min:0,max:1,automatable:false,type:FLOAT},rate:{value:1.5,min:0,max:8,automatable:false,type:FLOAT},bypass:{value:false,automatable:false,type:BOOLEAN}}},delay:{enumerable:true,get:function(){return this._delay},set:function(value){this._delay=2e-4*(Math.pow(10,value)*2);this.lfoL.offset=this._delay;this.lfoR.offset=this._delay;this._depth=this._depth}},depth:{enumerable:true,get:function(){return this._depth},set:function(value){this._depth=value;this.lfoL.oscillation=this._depth*this._delay;this.lfoR.oscillation=this._depth*this._delay}},feedback:{enumerable:true,get:function(){return this._feedback},set:function(value){this._feedback=value;this.feedbackGainNodeLR.gain.setTargetAtTime(this._feedback,userContext.currentTime,.01);this.feedbackGainNodeRL.gain.setTargetAtTime(this._feedback,userContext.currentTime,.01)}},rate:{enumerable:true,get:function(){return this._rate},set:function(value){this._rate=value;this.lfoL.frequency=this._rate;this.lfoR.frequency=this._rate}}});Tuna.prototype.Compressor=function(properties){if(!properties){properties=this.getDefaults()}this.input=userContext.createGain();this.compNode=this.activateNode=userContext.createDynamicsCompressor();this.makeupNode=userContext.createGain();this.output=userContext.createGain();this.compNode.connect(this.makeupNode);this.makeupNode.connect(this.output);this.automakeup=initValue(properties.automakeup,this.defaults.automakeup.value);if(this.automakeup){this.makeupNode.gain.value=dbToWAVolume(this.computeMakeup())}else{this.makeupNode.gain.value=dbToWAVolume(initValue(properties.makeupGain,this.defaults.makeupGain.value))}this.threshold=initValue(properties.threshold,this.defaults.threshold.value);this.release=initValue(properties.release,this.defaults.release.value);this.attack=initValue(properties.attack,this.defaults.attack.value);this.ratio=properties.ratio||this.defaults.ratio.value;this.knee=initValue(properties.knee,this.defaults.knee.value);this.bypass=properties.bypass||this.defaults.bypass.value};Tuna.prototype.Compressor.prototype=Object.create(Super,{name:{value:"Compressor"},defaults:{writable:true,value:{threshold:{value:-20,min:-60,max:0,automatable:true,type:FLOAT},release:{value:250,min:10,max:2e3,automatable:true,type:FLOAT},makeupGain:{value:1,min:1,max:100,automatable:true,type:FLOAT},attack:{value:1,min:0,max:1e3,automatable:true,type:FLOAT},ratio:{value:4,min:1,max:50,automatable:true,type:FLOAT},knee:{value:5,min:0,max:40,automatable:true,type:FLOAT},automakeup:{value:false,automatable:false,type:BOOLEAN},bypass:{value:false,automatable:false,type:BOOLEAN}}},computeMakeup:{value:function(){var magicCoefficient=4,c=this.compNode;return-(c.threshold.value-c.threshold.value/c.ratio.value)/magicCoefficient}},automakeup:{enumerable:true,get:function(){return this._automakeup},set:function(value){this._automakeup=value;if(this._automakeup)this.makeupGain=this.computeMakeup()}},threshold:{enumerable:true,get:function(){return this.compNode.threshold},set:function(value){this.compNode.threshold.value=value;if(this._automakeup)this.makeupGain=this.computeMakeup()}},ratio:{enumerable:true,get:function(){return this.compNode.ratio},set:function(value){this.compNode.ratio.value=value;if(this._automakeup)this.makeupGain=this.computeMakeup()}},knee:{enumerable:true,get:function(){return this.compNode.knee},set:function(value){this.compNode.knee.value=value;if(this._automakeup)this.makeupGain=this.computeMakeup()}},attack:{enumerable:true,get:function(){return this.compNode.attack},set:function(value){this.compNode.attack.value=value/1e3}},release:{enumerable:true,get:function(){return this.compNode.release},set:function(value){this.compNode.release.value=value/1e3}},makeupGain:{enumerable:true,get:function(){return this.makeupNode.gain},set:function(value){this.makeupNode.gain.setTargetAtTime(dbToWAVolume(value),userContext.currentTime,.01)}}});Tuna.prototype.Convolver=function(properties){if(!properties){properties=this.getDefaults()}this.input=userContext.createGain();this.activateNode=userContext.createGain();this.convolver=userContext.createConvolver();this.dry=userContext.createGain();this.filterLow=userContext.createBiquadFilter();this.filterHigh=userContext.createBiquadFilter();this.wet=userContext.createGain();this.output=userContext.createGain();this.activateNode.connect(this.filterLow);this.activateNode.connect(this.dry);this.filterLow.connect(this.filterHigh);this.filterHigh.connect(this.convolver);this.convolver.connect(this.wet);this.wet.connect(this.output);this.dry.connect(this.output);this.dry.gain.value=initValue(properties.dryLevel,this.defaults.dryLevel.value);this.wet.gain.value=initValue(properties.wetLevel,this.defaults.wetLevel.value);this.filterHigh.frequency.value=properties.highCut||this.defaults.highCut.value;this.filterLow.frequency.value=properties.lowCut||this.defaults.lowCut.value;this.output.gain.value=initValue(properties.level,this.defaults.level.value);this.filterHigh.type="lowpass";this.filterLow.type="highpass";this.buffer=properties.impulse||"../impulses/ir_rev_short.wav";this.bypass=properties.bypass||this.defaults.bypass.value};Tuna.prototype.Convolver.prototype=Object.create(Super,{name:{value:"Convolver"},defaults:{writable:true,value:{highCut:{value:22050,min:20,max:22050,automatable:true,type:FLOAT},lowCut:{value:20,min:20,max:22050,automatable:true,type:FLOAT},dryLevel:{value:1,min:0,max:1,automatable:true,type:FLOAT},wetLevel:{value:1,min:0,max:1,automatable:true,type:FLOAT},level:{value:1,min:0,max:1,automatable:true,type:FLOAT},bypass:{value:false,automatable:false,type:BOOLEAN}}},lowCut:{get:function(){return this.filterLow.frequency},set:function(value){this.filterLow.frequency.setTargetAtTime(value,userContext.currentTime,.01)}},highCut:{get:function(){return this.filterHigh.frequency},set:function(value){this.filterHigh.frequency.setTargetAtTime(value,userContext.currentTime,.01)}},level:{get:function(){return this.output.gain},set:function(value){this.output.gain.setTargetAtTime(value,userContext.currentTime,.01)}},dryLevel:{get:function(){return this.dry.gain},set:function(value){this.dry.gain.setTargetAtTime(value,userContext.currentTime,.01)}},wetLevel:{get:function(){return this.wet.gain},set:function(value){this.wet.gain.setTargetAtTime(value,userContext.currentTime,.01)}},buffer:{enumerable:false,get:function(){return this.convolver.buffer},set:function(impulse){var convolver=this.convolver,xhr=new XMLHttpRequest;if(!impulse){console.log("Tuna.Convolver.setBuffer: Missing impulse path!");return}xhr.open("GET",impulse,true);xhr.responseType="arraybuffer";xhr.onreadystatechange=function(){if(xhr.readyState===4){if(xhr.status<300&&xhr.status>199||xhr.status===302){userContext.decodeAudioData(xhr.response,function(buffer){convolver.buffer=buffer},function(e){if(e)console.log("Tuna.Convolver.setBuffer: Error decoding data"+e)})}}};xhr.send(null)}}});Tuna.prototype.Delay=function(properties){if(!properties){properties=this.getDefaults()}this.input=userContext.createGain();this.activateNode=userContext.createGain();this.dry=userContext.createGain();this.wet=userContext.createGain();this.filter=userContext.createBiquadFilter();this.delay=userContext.createDelay(10);this.feedbackNode=userContext.createGain();this.output=userContext.createGain();this.activateNode.connect(this.delay);this.activateNode.connect(this.dry);this.delay.connect(this.filter);this.filter.connect(this.feedbackNode);this.feedbackNode.connect(this.delay);this.feedbackNode.connect(this.wet);this.wet.connect(this.output);this.dry.connect(this.output);this.delayTime=properties.delayTime||this.defaults.delayTime.value;this.feedbackNode.gain.value=initValue(properties.feedback,this.defaults.feedback.value);this.wet.gain.value=initValue(properties.wetLevel,this.defaults.wetLevel.value);this.dry.gain.value=initValue(properties.dryLevel,this.defaults.dryLevel.value);this.filter.frequency.value=properties.cutoff||this.defaults.cutoff.value;this.filter.type="lowpass";this.bypass=properties.bypass||this.defaults.bypass.value};Tuna.prototype.Delay.prototype=Object.create(Super,{name:{value:"Delay"},defaults:{writable:true,value:{delayTime:{value:100,min:20,max:1e3,automatable:false,type:FLOAT},feedback:{value:.45,min:0,max:.9,automatable:true,type:FLOAT},cutoff:{value:2e4,min:20,max:2e4,automatable:true,type:FLOAT},wetLevel:{value:.5,min:0,max:1,automatable:true,type:FLOAT},dryLevel:{value:1,min:0,max:1,automatable:true,type:FLOAT},bypass:{value:false,automatable:false,type:BOOLEAN}}},delayTime:{enumerable:true,get:function(){return this.delay.delayTime},set:function(value){this.delay.delayTime.value=value/1e3}},wetLevel:{enumerable:true,get:function(){return this.wet.gain},set:function(value){this.wet.gain.setTargetAtTime(value,userContext.currentTime,.01)}},dryLevel:{enumerable:true,get:function(){return this.dry.gain},set:function(value){this.dry.gain.setTargetAtTime(value,userContext.currentTime,.01)}},feedback:{enumerable:true,get:function(){return this.feedbackNode.gain},set:function(value){this.feedbackNode.gain.setTargetAtTime(value,userContext.currentTime,.01)}},cutoff:{enumerable:true,get:function(){return this.filter.frequency},set:function(value){this.filter.frequency.setTargetAtTime(value,userContext.currentTime,.01)}}});Tuna.prototype.Filter=function(properties){if(!properties){properties=this.getDefaults()}this.input=userContext.createGain();this.activateNode=userContext.createGain();this.filter=userContext.createBiquadFilter();this.output=userContext.createGain();this.activateNode.connect(this.filter);this.filter.connect(this.output);this.filter.frequency.value=properties.frequency||this.defaults.frequency.value;this.Q=properties.resonance||this.defaults.Q.value;this.filterType=initValue(properties.filterType,this.defaults.filterType.value);this.filter.gain.value=initValue(properties.gain,this.defaults.gain.value);this.bypass=properties.bypass||this.defaults.bypass.value};Tuna.prototype.Filter.prototype=Object.create(Super,{name:{value:"Filter"},defaults:{writable:true,value:{frequency:{value:800,min:20,max:22050,automatable:true,type:FLOAT},Q:{value:1,min:.001,max:100,automatable:true,type:FLOAT},gain:{value:0,min:-40,max:40,automatable:true,type:FLOAT},bypass:{value:false,automatable:false,type:BOOLEAN},filterType:{value:"lowpass",automatable:false,type:STRING}}},filterType:{enumerable:true,get:function(){return this.filter.type},set:function(value){this.filter.type=value}},Q:{enumerable:true,get:function(){return this.filter.Q},set:function(value){this.filter.Q.value=value}},gain:{enumerable:true,get:function(){return this.filter.gain},set:function(value){this.filter.gain.setTargetAtTime(value,userContext.currentTime,.01)}},frequency:{enumerable:true,get:function(){return this.filter.frequency},set:function(value){this.filter.frequency.setTargetAtTime(value,userContext.currentTime,.01)}}});Tuna.prototype.Gain=function(properties){if(!properties){properties=this.getDefaults()}this.input=userContext.createGain();this.activateNode=userContext.createGain();this.gainNode=userContext.createGain();this.output=userContext.createGain();this.activateNode.connect(this.gainNode);this.gainNode.connect(this.output);this.gainNode.gain.value=initValue(properties.gain,this.defaults.gain.value);this.bypass=properties.bypass||this.defaults.bypass.value};Tuna.prototype.Gain.prototype=Object.create(Super,{name:{value:"Gain"},defaults:{writable:true,value:{bypass:{value:false,automatable:false,type:BOOLEAN},gain:{value:1,automatable:true,type:FLOAT}}},gain:{enumerable:true,get:function(){return this.gainNode.gain},set:function(value){this.gainNode.gain.setTargetAtTime(value,userContext.currentTime,.01)}}});Tuna.prototype.MoogFilter=function(properties){if(!properties){properties=this.getDefaults()}this.bufferSize=properties.bufferSize||this.defaults.bufferSize.value;this.input=userContext.createGain();this.activateNode=userContext.createGain();this.processor=userContext.createScriptProcessor(this.bufferSize,1,1);this.output=userContext.createGain();this.activateNode.connect(this.processor);this.processor.connect(this.output);var in1,in2,in3,in4,out1,out2,out3,out4;in1=in2=in3=in4=out1=out2=out3=out4=0;var input,output,f,fb,i,length,inputFactor;this.processor.onaudioprocess=function(e){input=e.inputBuffer.getChannelData(0);output=e.outputBuffer.getChannelData(0);f=this.cutoff*1.16;inputFactor=.35013*(f*f)*(f*f);fb=this.resonance*(1-.15*f*f);length=input.length;for(i=0;i=0?5.8:1.2);ws_table[i]=tanh(y)}},function(amount,n_samples,ws_table){var i,x,y,a=1-amount;for(i=0;i.99?.99:1-amount;for(i=0;ia){y=a+(abx-a)/(1+Math.pow((abx-a)/(1-a),2))}else if(abx>1){y=abx}ws_table[i]=sign(x)*y*(1/((a+1)/2))}},function(amount,n_samples,ws_table){var i,x;for(i=0;i=-.08905&&x<.320018){ws_table[i]=-6.153*(x*x)+3.9375*x}else{ws_table[i]=.630035}}},function(amount,n_samples,ws_table){var a=2+Math.round(amount*14),bits=Math.round(Math.pow(2,a-1)),i,x;for(i=0;i1?1:value<0?0:value,this._sensitivity);this.setFilterFreq()}},baseFrequency:{enumerable:true,get:function(){return this._baseFrequency},set:function(value){this._baseFrequency=50*Math.pow(10,value*2);this._excursionFrequency=Math.min(userContext.sampleRate/2,this.baseFrequency*Math.pow(2,this._excursionOctaves));this.setFilterFreq()}},excursionOctaves:{enumerable:true,get:function(){return this._excursionOctaves},set:function(value){this._excursionOctaves=value;this._excursionFrequency=Math.min(userContext.sampleRate/2,this.baseFrequency*Math.pow(2,this._excursionOctaves));this.setFilterFreq()}},sensitivity:{enumerable:true,get:function(){return this._sensitivity},set:function(value){this._sensitivity=Math.pow(10,value)}},resonance:{enumerable:true,get:function(){return this._resonance},set:function(value){this._resonance=value;this.filterPeaking.Q.value=this._resonance}},init:{value:function(){this.output.gain.value=1;this.filterPeaking.type="peaking";this.filterBp.type="bandpass";this.filterPeaking.frequency.value=100;this.filterPeaking.gain.value=20;this.filterPeaking.Q.value=5;this.filterBp.frequency.value=100;this.filterBp.Q.value=1}}});Tuna.prototype.EnvelopeFollower=function(properties){if(!properties){properties=this.getDefaults()}this.input=userContext.createGain();this.jsNode=this.output=userContext.createScriptProcessor(this.buffersize,1,1);this.input.connect(this.output);this.attackTime=initValue(properties.attackTime,this.defaults.attackTime.value);this.releaseTime=initValue(properties.releaseTime,this.defaults.releaseTime.value);this._envelope=0;this.target=properties.target||{};this.callback=properties.callback||function(){};this.bypass=properties.bypass||this.defaults.bypass.value};Tuna.prototype.EnvelopeFollower.prototype=Object.create(Super,{name:{value:"EnvelopeFollower"},defaults:{value:{attackTime:{value:.003,min:0,max:.5,automatable:false,type:FLOAT},releaseTime:{value:.5,min:0,max:.5,automatable:false,type:FLOAT},bypass:{value:false,automatable:false,type:BOOLEAN}}},buffersize:{value:256},envelope:{value:0},sampleRate:{value:44100},attackTime:{enumerable:true,get:function(){return this._attackTime},set:function(value){this._attackTime=value;this._attackC=Math.exp(-1/this._attackTime*this.sampleRate/this.buffersize)}},releaseTime:{enumerable:true,get:function(){return this._releaseTime},set:function(value){this._releaseTime=value;this._releaseC=Math.exp(-1/this._releaseTime*this.sampleRate/this.buffersize)}},callback:{get:function(){return this._callback},set:function(value){if(typeof value==="function"){this._callback=value}else{console.error("tuna.js: "+this.name+": Callback must be a function!")}}},target:{get:function(){return this._target},set:function(value){this._target=value}},activate:{value:function(doActivate){this.activated=doActivate;if(doActivate){this.jsNode.connect(userContext.destination);this.jsNode.onaudioprocess=this.returnCompute(this)}else{this.jsNode.disconnect();this.jsNode.onaudioprocess=null}if(this.activateCallback){this.activateCallback(doActivate)}}},returnCompute:{value:function(instance){return function(event){instance.compute(event)}}},compute:{value:function(event){var count=event.inputBuffer.getChannelData(0).length,channels=event.inputBuffer.numberOfChannels,current,chan,rms,i;chan=rms=i=0;for(chan=0;chan2*Math.PI){that._phase=0}callback(that._target,that._offset+that._oscillation*Math.sin(that._phase))}}}});Tuna.toString=Tuna.prototype.toString=function(){return"Please visit https://github.com/Theodeus/tuna/wiki for instructions on how to use Tuna.js"}})(); \ No newline at end of file diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index 0e4694eb..eebe525f 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -594,7 +594,6 @@ } - \ No newline at end of file diff --git a/src/renderer/views/pages/settings.ejs b/src/renderer/views/pages/settings.ejs index a740852f..dcf49aad 100644 --- a/src/renderer/views/pages/settings.ejs +++ b/src/renderer/views/pages/settings.ejs @@ -27,6 +27,16 @@
+ Enable AudioContext Functionality +
+ Enabling AudioContext functionality will allow for extended audio features like Audio Normalization , Equalizers and Visualizers, however on some systems this may cause stuttering in audio tracks. +
+
+ +
+
+
+
Audio Normalization
@@ -451,16 +461,6 @@
Unfinished / Non Functional
-
-
- Enable AudioContext Functionality -
- Enabling AudioContext functionality will allow for extended audio features like Equalizers and Visualizers, however on some systems this may cause stuttering in audio tracks. -
-
- -
-
Theme @@ -555,6 +555,15 @@ } }, methods: { + toggleAudioContext: function(){ + if (app.cfg.advanced.AudioContext){ + CiderAudio.init(); + if (app.cfg.audio.normalization){ + CiderAudio.normalizerOn()} + } else { + CiderAudio.off(); + } + }, toggleNormalization : function(){ if (app.cfg.audio.normalization){ CiderAudio.normalizerOn() From 691a592d8cdab48847538e0ff1373305a9ea45a6 Mon Sep 17 00:00:00 2001 From: cryptofyre Date: Wed, 29 Dec 2021 23:13:23 -0600 Subject: [PATCH 021/135] Bump to Electron v16 with patches, remove docs/ due to mistreatment and lack of updates. --- docs/CNAME | 1 - docs/Cider.png | Bin 61009 -> 0 bytes docs/app-win/ameframework.css | 1033 ------------------ docs/app-win/assets/arrow-left.svg | 1 - docs/app-win/assets/backward.svg | 1 - docs/app-win/assets/cast_white.svg | 18 - docs/app-win/assets/forward.svg | 1 - docs/app-win/assets/list.svg | 1 - docs/app-win/assets/pause.svg | 1 - docs/app-win/assets/play.svg | 1 - docs/app-win/assets/quote-right.svg | 1 - docs/app-win/assets/repeat.svg | 47 - docs/app-win/assets/search.svg | 1 - docs/app-win/assets/shuffle.svg | 45 - docs/app-win/assets/volume-down.svg | 1 - docs/app-win/assets/volume-up.svg | 1 - docs/app-win/index.html | 442 -------- docs/app-win/index.js | 318 ------ docs/app-win/logotmp.png | Bin 33941 -> 0 bytes docs/app-win/sortable.min.js | 2 - docs/app-win/style.css | 1495 -------------------------- docs/app-win/vue.js | 6 - docs/app-win/vuedraggable.umd.min.js | 2 - docs/index.css | 71 -- docs/index.html | 17 - docs/index.js | 6 - docs/wallpaper.webp | Bin 39818 -> 0 bytes index.js | 28 +- package.json | 4 +- 29 files changed, 18 insertions(+), 3527 deletions(-) delete mode 100644 docs/CNAME delete mode 100644 docs/Cider.png delete mode 100644 docs/app-win/ameframework.css delete mode 100644 docs/app-win/assets/arrow-left.svg delete mode 100644 docs/app-win/assets/backward.svg delete mode 100644 docs/app-win/assets/cast_white.svg delete mode 100644 docs/app-win/assets/forward.svg delete mode 100644 docs/app-win/assets/list.svg delete mode 100644 docs/app-win/assets/pause.svg delete mode 100644 docs/app-win/assets/play.svg delete mode 100644 docs/app-win/assets/quote-right.svg delete mode 100644 docs/app-win/assets/repeat.svg delete mode 100644 docs/app-win/assets/search.svg delete mode 100644 docs/app-win/assets/shuffle.svg delete mode 100644 docs/app-win/assets/volume-down.svg delete mode 100644 docs/app-win/assets/volume-up.svg delete mode 100644 docs/app-win/index.html delete mode 100644 docs/app-win/index.js delete mode 100644 docs/app-win/logotmp.png delete mode 100644 docs/app-win/sortable.min.js delete mode 100644 docs/app-win/style.css delete mode 100644 docs/app-win/vue.js delete mode 100644 docs/app-win/vuedraggable.umd.min.js delete mode 100644 docs/index.css delete mode 100644 docs/index.html delete mode 100644 docs/index.js delete mode 100644 docs/wallpaper.webp diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index 965129f8..00000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -demo.cider.sh \ No newline at end of file diff --git a/docs/Cider.png b/docs/Cider.png deleted file mode 100644 index 66ac6206b1784adc029586fab49a04a8fb0c1a3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61009 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 z 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 R?k;OU@I}iDRYuoi{vWzuAY}jm diff --git a/docs/app-win/ameframework.css b/docs/app-win/ameframework.css deleted file mode 100644 index a7452671..00000000 --- a/docs/app-win/ameframework.css +++ /dev/null @@ -1,1033 +0,0 @@ -:root { - --appleEase: cubic-bezier(.42, 0, .58, 1); - --appleTransition: .2s var(--appleEase); -} - -/* Simple CSS framework for Apple Music Electron */ - -.md-labeltext { - font-size: 14px; - text-transform: uppercase; - opacity: 0.75; - font-weight: 500; -} - -.md-option-container { - border-radius: 10px; - overflow: hidden; -} - -.md-option-line { - display: flex; - width: 100%; - padding: 14px; - background: var(--opaquePageBGColor); - font-size: 0.85em; -} - -.md-option-segment.md-option-segment_auto { - width: auto; -} - -.md-option-container .md-option-line:not(:last-child) { - border-bottom: 1px solid rgb(0 0 0 / 15%); -} - -input[type="range"].md-slider { - -webkit-appearance: none; - height: 7px; - background: rgba(255, 255, 255, 0.6); - border-radius: 5px; - background-size: 70% 100%; - background-repeat: no-repeat; -} - -input[type="range"].md-slider::-webkit-slider-thumb { - -webkit-appearance: none; - height: 20px; - width: 20px; - border-radius: 50%; - background: rgb(255 255 255); - cursor: ew-resize; - box-shadow: 0 0 2px 0 #555; -} - -input[type=range].md-slider::-webkit-slider-runnable-track { - -webkit-appearance: none; - box-shadow: none; - border: none; - background: transparent; -} - -.md-option-segment { - width: 100%; - display: flex; - justify-content: center; - flex-direction: column; -} - -.md-h1 { - font-size: 3em; - text-align: center; -} - -.md-header { - padding: 16px; -} - -.md-header-title { - padding: 18px; - font-weight: 600; - font-size: 16px; - height: 55px; - background: var(--opaquePageBGColor); - border-bottom: 1px solid rgb(0 0 0 / 15%); -} - -.md-footer { - padding: 16px; - text-align: center; -} - - -.md-close-btn { - -webkit-mask-image: url("ameres://icons/webui/close.svg"); - -webkit-mask-repeat: no-repeat; - -webkit-mask-position: center; - background-color: white; - opacity: 0.75; - -webkit-mask-size: contain; - height: 18px; - width: 18px; -} - -.md-btn { - background: rgba(100, 100, 100, 0.5); - padding: 8px 16px; - border-radius: 4px; - font-size: 15px; - border: 1px solid rgb(100 100 100 / 35%); - box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.4); - color: #eee; -} - -.md-btn.md-btn-block { - display: block; -} - -.md-btn:active { - filter: brightness(75%); -} - -.md-select { - padding: 5px 10px; - font-size: 1em; - font-family: inherit; - border-radius: 4px; - border: 1px solid rgb(100 100 100 / 35%); - box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.4); -} - -.md-select:focus { - outline: none; -} - -.md-select > option { - font-size: 1em; - font-family: inherit; - padding: 8px 16px; -} - -.md-btn.md-btn-primary { - background: var(--keyColor); - color: white; -} - -.md-transparent { - background: transparent; -} - -.md-container { - display: flex; - flex-direction: column; - height: 100%; - position: absolute; - top: 0px; - left: 0px; - width: 100%; - padding: 32px; -} - -.md-container_panel { - padding: 0px; -} - -.md-body { - height: 100%; - padding: 16px; - font-size: 1.25em; -} - -/* Vue transitions */ -.fade_simple-enter-active, .fade_simple-leave-active { - transition: all .5s; -} - -.fade_simple-enter, .fade_simple-leave-to { - opacity: 0; -} - -.fade-enter-active, .fade-leave-active { - transition: all .5s; -} - -.fade-enter, .fade-leave-to { - opacity: 0; - transform: scale(0.95); -} - -/* CSS Grids */ - -.container, -.container-fluid, -.container-xxl, -.container-xl, -.container-lg, -.container-md, -.container-sm { - width: 100%; - padding-right: var(--bs-gutter-x, 0.75rem); - padding-left: var(--bs-gutter-x, 0.75rem); - margin-right: auto; - margin-left: auto; -} - -.row { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - display: flex; - flex-wrap: wrap; - /*margin-top: calc(-1 * var(--bs-gutter-y));*/ - /*margin-right: calc(-0.5 * var(--bs-gutter-x));*/ - /*margin-left: calc(-0.5 * var(--bs-gutter-x));*/ -} - -.row > * { - box-sizing: border-box; - flex-shrink: 0; - width: 100%; - max-width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-top: var(--bs-gutter-y); -} - -.col { - flex: 1 0 0%; -} - -.row-cols-auto > * { - flex: 0 0 auto; - width: auto; -} - -.row-cols-1 > * { - flex: 0 0 auto; - width: 100%; -} - -.row-cols-2 > * { - flex: 0 0 auto; - width: 50%; -} - -.row-cols-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; -} - -.row-cols-4 > * { - flex: 0 0 auto; - width: 25%; -} - -.row-cols-5 > * { - flex: 0 0 auto; - width: 20%; -} - -.row-cols-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; -} - -.col-auto { - flex: 0 0 auto; - width: auto; -} - -.col-1 { - flex: 0 0 auto; - width: 8.33333333%; -} - -.col-2 { - flex: 0 0 auto; - width: 16.66666667%; -} - -.col-3 { - flex: 0 0 auto; - width: 25%; -} - -.col-4 { - flex: 0 0 auto; - width: 33.33333333%; -} - -.col-5 { - flex: 0 0 auto; - width: 41.66666667%; -} - -.col-6 { - flex: 0 0 auto; - width: 50%; -} - -.col-7 { - flex: 0 0 auto; - width: 58.33333333%; -} - -.col-8 { - flex: 0 0 auto; - width: 66.66666667%; -} - -.col-9 { - flex: 0 0 auto; - width: 75%; -} - -.col-10 { - flex: 0 0 auto; - width: 83.33333333%; -} - -.col-11 { - flex: 0 0 auto; - width: 91.66666667%; -} - -.col-12 { - flex: 0 0 auto; - width: 100%; -} - -.offset-1 { - margin-left: 8.33333333%; -} - -.offset-2 { - margin-left: 16.66666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.33333333%; -} - -.offset-5 { - margin-left: 41.66666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.33333333%; -} - -.offset-8 { - margin-left: 66.66666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.33333333%; -} - -.offset-11 { - margin-left: 91.66666667%; -} - -.g-0, -.gx-0 { - --bs-gutter-x: 0; -} - -.g-0, -.gy-0 { - --bs-gutter-y: 0; -} - -.g-1, -.gx-1 { - --bs-gutter-x: 0.25rem; -} - -.g-1, -.gy-1 { - --bs-gutter-y: 0.25rem; -} - -.g-2, -.gx-2 { - --bs-gutter-x: 0.5rem; -} - -.g-2, -.gy-2 { - --bs-gutter-y: 0.5rem; -} - -.g-3, -.gx-3 { - --bs-gutter-x: 1rem; -} - -.g-3, -.gy-3 { - --bs-gutter-y: 1rem; -} - -.g-4, -.gx-4 { - --bs-gutter-x: 1.5rem; -} - -.g-4, -.gy-4 { - --bs-gutter-y: 1.5rem; -} - -.g-5, -.gx-5 { - --bs-gutter-x: 3rem; -} - -.g-5, -.gy-5 { - --bs-gutter-y: 3rem; -} - -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-grid { - display: grid !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: flex !important; -} - -.d-inline-flex { - display: inline-flex !important; -} - -.d-none { - display: none !important; -} - -.flex-fill { - flex: 1 1 auto !important; -} - -.flex-row { - flex-direction: row !important; -} - -.flex-column { - flex-direction: column !important; -} - -.flex-row-reverse { - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - flex-direction: column-reverse !important; -} - -.flex-grow-0 { - flex-grow: 0 !important; -} - -.flex-grow-1 { - flex-grow: 1 !important; -} - -.flex-shrink-0 { - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - flex-shrink: 1 !important; -} - -.flex-wrap { - flex-wrap: wrap !important; -} - -.flex-nowrap { - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important; -} - -.justify-content-start { - justify-content: flex-start !important; -} - -.justify-content-end { - justify-content: flex-end !important; -} - -.justify-content-center { - justify-content: center !important; -} - -.justify-content-between { - justify-content: space-between !important; -} - -.justify-content-around { - justify-content: space-around !important; -} - -.justify-content-evenly { - justify-content: space-evenly !important; -} - -.align-items-start { - align-items: flex-start !important; -} - -.align-items-end { - align-items: flex-end !important; -} - -.align-items-center { - align-items: center !important; -} - -.align-items-baseline { - align-items: baseline !important; -} - -.align-items-stretch { - align-items: stretch !important; -} - -.align-content-start { - align-content: flex-start !important; -} - -.align-content-end { - align-content: flex-end !important; -} - -.align-content-center { - align-content: center !important; -} - -.align-content-between { - align-content: space-between !important; -} - -.align-content-around { - align-content: space-around !important; -} - -.align-content-stretch { - align-content: stretch !important; -} - -.align-self-auto { - align-self: auto !important; -} - -.align-self-start { - align-self: flex-start !important; -} - -.align-self-end { - align-self: flex-end !important; -} - -.align-self-center { - align-self: center !important; -} - -.align-self-baseline { - align-self: baseline !important; -} - -.align-self-stretch { - align-self: stretch !important; -} - -.order-first { - order: -1 !important; -} - -.order-0 { - order: 0 !important; -} - -.order-1 { - order: 1 !important; -} - -.order-2 { - order: 2 !important; -} - -.order-3 { - order: 3 !important; -} - -.order-4 { - order: 4 !important; -} - -.order-5 { - order: 5 !important; -} - -.order-last { - order: 6 !important; -} - -.m-0 { - margin: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mx-0 { - margin-right: 0 !important; - margin-left: 0 !important; -} - -.mx-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; -} - -.mx-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; -} - -.mx-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; -} - -.mx-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; -} - -.mx-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; -} - -.mx-auto { - margin-right: auto !important; - margin-left: auto !important; -} - -.my-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.my-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; -} - -.my-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; -} - -.my-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} - -.my-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} - -.my-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} - -.my-auto { - margin-top: auto !important; - margin-bottom: auto !important; -} - -.mt-0 { - margin-top: 0 !important; -} - -.mt-1 { - margin-top: 0.25rem !important; -} - -.mt-2 { - margin-top: 0.5rem !important; -} - -.mt-3 { - margin-top: 1rem !important; -} - -.mt-4 { - margin-top: 1.5rem !important; -} - -.mt-5 { - margin-top: 3rem !important; -} - -.mt-auto { - margin-top: auto !important; -} - -.me-0 { - margin-right: 0 !important; -} - -.me-1 { - margin-right: 0.25rem !important; -} - -.me-2 { - margin-right: 0.5rem !important; -} - -.me-3 { - margin-right: 1rem !important; -} - -.me-4 { - margin-right: 1.5rem !important; -} - -.me-5 { - margin-right: 3rem !important; -} - -.me-auto { - margin-right: auto !important; -} - -.mb-0 { - margin-bottom: 0 !important; -} - -.mb-1 { - margin-bottom: 0.25rem !important; -} - -.mb-2 { - margin-bottom: 0.5rem !important; -} - -.mb-3 { - margin-bottom: 1rem !important; -} - -.mb-4 { - margin-bottom: 1.5rem !important; -} - -.mb-5 { - margin-bottom: 3rem !important; -} - -.mb-auto { - margin-bottom: auto !important; -} - -.ms-0 { - margin-left: 0 !important; -} - -.ms-1 { - margin-left: 0.25rem !important; -} - -.ms-2 { - margin-left: 0.5rem !important; -} - -.ms-3 { - margin-left: 1rem !important; -} - -.ms-4 { - margin-left: 1.5rem !important; -} - -.ms-5 { - margin-left: 3rem !important; -} - -.ms-auto { - margin-left: auto !important; -} - -.p-0 { - padding: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.px-0 { - padding-right: 0 !important; - padding-left: 0 !important; -} - -.px-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; -} - -.px-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; -} - -.px-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; -} - -.px-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; -} - -.px-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; -} - -.py-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.py-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -} - -.py-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; -} - -.py-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} - -.py-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} - -.py-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; -} - -.pt-0 { - padding-top: 0 !important; -} - -.pt-1 { - padding-top: 0.25rem !important; -} - -.pt-2 { - padding-top: 0.5rem !important; -} - -.pt-3 { - padding-top: 1rem !important; -} - -.pt-4 { - padding-top: 1.5rem !important; -} - -.pt-5 { - padding-top: 3rem !important; -} - -.pe-0 { - padding-right: 0 !important; -} - -.pe-1 { - padding-right: 0.25rem !important; -} - -.pe-2 { - padding-right: 0.5rem !important; -} - -.pe-3 { - padding-right: 1rem !important; -} - -.pe-4 { - padding-right: 1.5rem !important; -} - -.pe-5 { - padding-right: 3rem !important; -} - -.pb-0 { - padding-bottom: 0 !important; -} - -.pb-1 { - padding-bottom: 0.25rem !important; -} - -.pb-2 { - padding-bottom: 0.5rem !important; -} - -.pb-3 { - padding-bottom: 1rem !important; -} - -.pb-4 { - padding-bottom: 1.5rem !important; -} - -.pb-5 { - padding-bottom: 3rem !important; -} - -.ps-0 { - padding-left: 0 !important; -} - -.ps-1 { - padding-left: 0.25rem !important; -} - -.ps-2 { - padding-left: 0.5rem !important; -} - -.ps-3 { - padding-left: 1rem !important; -} - -.ps-4 { - padding-left: 1.5rem !important; -} - -.ps-5 { - padding-left: 3rem !important; -} \ No newline at end of file diff --git a/docs/app-win/assets/arrow-left.svg b/docs/app-win/assets/arrow-left.svg deleted file mode 100644 index 41098a56..00000000 --- a/docs/app-win/assets/arrow-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/assets/backward.svg b/docs/app-win/assets/backward.svg deleted file mode 100644 index 4c445c05..00000000 --- a/docs/app-win/assets/backward.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/assets/cast_white.svg b/docs/app-win/assets/cast_white.svg deleted file mode 100644 index a84aed59..00000000 --- a/docs/app-win/assets/cast_white.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - ic_cast_black_24dp - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/app-win/assets/forward.svg b/docs/app-win/assets/forward.svg deleted file mode 100644 index 37b509f1..00000000 --- a/docs/app-win/assets/forward.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/assets/list.svg b/docs/app-win/assets/list.svg deleted file mode 100644 index 5a8ca2c3..00000000 --- a/docs/app-win/assets/list.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/assets/pause.svg b/docs/app-win/assets/pause.svg deleted file mode 100644 index 2e9ab6fd..00000000 --- a/docs/app-win/assets/pause.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/assets/play.svg b/docs/app-win/assets/play.svg deleted file mode 100644 index f6296da5..00000000 --- a/docs/app-win/assets/play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/assets/quote-right.svg b/docs/app-win/assets/quote-right.svg deleted file mode 100644 index 629ab4ee..00000000 --- a/docs/app-win/assets/quote-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/assets/repeat.svg b/docs/app-win/assets/repeat.svg deleted file mode 100644 index 0c283cf4..00000000 --- a/docs/app-win/assets/repeat.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/app-win/assets/search.svg b/docs/app-win/assets/search.svg deleted file mode 100644 index 62953986..00000000 --- a/docs/app-win/assets/search.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/assets/shuffle.svg b/docs/app-win/assets/shuffle.svg deleted file mode 100644 index 5ac0b6ae..00000000 --- a/docs/app-win/assets/shuffle.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/app-win/assets/volume-down.svg b/docs/app-win/assets/volume-down.svg deleted file mode 100644 index 87c9f9fc..00000000 --- a/docs/app-win/assets/volume-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/assets/volume-up.svg b/docs/app-win/assets/volume-up.svg deleted file mode 100644 index 05db44e8..00000000 --- a/docs/app-win/assets/volume-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/app-win/index.html b/docs/app-win/index.html deleted file mode 100644 index 12ae50bd..00000000 --- a/docs/app-win/index.html +++ /dev/null @@ -1,442 +0,0 @@ - - - - - - - - - - - - - - - - - Cider - - - - - - - - -
-
-
-
-
-
-
-
- - -
-
- -
-
- - -
-
- -
-
- - - -
-
-
-
- - -
-
-
-
- -
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- Apple Music -
- - - -
- Library -
- - - - -
- Playlists -
- -
- -
-
- - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- - - - -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/app-win/index.js b/docs/app-win/index.js deleted file mode 100644 index 8d8a95ea..00000000 --- a/docs/app-win/index.js +++ /dev/null @@ -1,318 +0,0 @@ -Vue.component('sidebar-library-item', { - template: '#sidebar-library-item', - props: ['name', 'page', 'cd-click'], - methods: {} -}); - -Vue.component('mediaitem-scroller-horizontal', { - template: '#mediaitem-scroller-horizontal', - props: ['items'], - methods: {} -}); - -Vue.component('mediaitem-square', { - template: '#mediaitem-square', - props: ['item'], - methods: {} -}); - -Vue.component('mediaitem-hrect', { - template: '#mediaitem-hrect', - props: ['item'], - methods: {} -}); - -Vue.component('mediaitem-list-item', { - template: '#mediaitem-list-item', - props: ['item'], - methods: {} -}); - -Vue.component('cider-search', { - template: "#cider-search", - props: ['search'], - methods: { - getTopResult() { - if (this.search.results["meta"]) { - return this.search.results[this.search.results.meta.results.order[0]]["data"][0] - } else { - return false; - } - } - } -}) - -Vue.component('cider-listen-now', { - template: "#cider-listen-now", - props: ["data"] -}) - -const MusicKitTools = { - getHeader() { - return new Headers({ - Authorization: 'Bearer ' + MusicKit.getInstance().developerToken, - Accept: 'application/json', - 'Content-Type': 'application/json', - 'Music-User-Token': '' + MusicKit.getInstance().musicUserToken - }); - } -} - -// limit an array to a certain number of items -Array.prototype.limit = function (n) { - return this.slice(0, n); -}; - -const app = new Vue({ - el: "#app", - data: { - drawertest: false, - mk: {}, - quickPlayQuery: "", - search: { - term: "", - results: {}, - limit: 10 - }, - playerLCD: { - playbackDuration: 0 - }, - listennow: [], - radio: { - personal: [] - }, - library: { - songs: { - listing: [], - meta: {total: 0} - } - }, - playlists: { - listing: [], - details: {} - }, - chrome: { - artworkReady: false - }, - page: "browse" - }, - methods: { - init() { - let self = this - this.mk = MusicKit.getInstance() - this.mk.authorize() - this.$forceUpdate() - - this.mk.addEventListener(MusicKit.Events.playbackTimeDidChange, (a) => { - self.playerLCD.playbackDuration = (self.mk.currentPlaybackTime) - }) - - this.mk.addEventListener(MusicKit.Events.nowPlayingItemDidChange, (a) => { - self.chrome.artworkReady = false - }) - - this.apiCall('https://api.music.apple.com/v1/me/library/playlists', res => { - self.playlists.listing = res.data - }) - document.body.removeAttribute("loading") - }, - - getSidebarItemClass(page) { - if (this.page == page) { - return ["active"] - } else { - return [] - } - }, - async mkapi(method, library = false, term, params = {}, params2 = {}, attempts = 0) { - if (attempts > 3) { - return - } - try { - if (library) { - return await this.mk.api.library[method](term, params, params2) - } else { - return await this.mk.api[method](term, params, params2) - } - } catch (e) { - console.log(e) - return await this.mkapi(method, library, term, params, params2, attempts + 1) - } - }, - async getLibrarySongs() { - var response = await this.mkapi("songs", true, "", {limit: 100}, {includeResponseMeta: !0}) - this.library.songs.listing = response.data - this.library.songs.meta = response.meta - }, - async getListenNow(attempt = 0) { - if (attempt > 3) { - return - } - try { - this.listennow = await this.mk.api.personalRecommendations("", - { - name: "listen-now", - with: "friendsMix,library,social", - "art[social-profiles:url]": "c", - "art[url]": "c,f", - "omit[resource]": "autos", - "relate[editorial-items]": "contents", - extend: ["editorialCard", "editorialVideo"], - "extend[albums]": ["artistUrl"], - "extend[library-albums]": ["artistUrl"], - "extend[playlists]": ["artistNames", "editorialArtwork"], - "extend[library-playlists]": ["artistNames", "editorialArtwork"], - "extend[social-profiles]": "topGenreNames", - "include[albums]": "artists", - "include[songs]": "artists", - "include[music-videos]": "artists", - "fields[albums]": ["artistName", "artistUrl", "artwork", "contentRating", "editorialArtwork", "editorialVideo", "name", "playParams", "releaseDate", "url"], - "fields[artists]": ["name", "url"], - "extend[stations]": ["airDate", "supportsAirTimeUpdates"], - "meta[stations]": "inflectionPoints", - types: "artists,albums,editorial-items,library-albums,library-playlists,music-movies,music-videos,playlists,stations,uploaded-audios,uploaded-videos,activities,apple-curators,curators,tv-shows,social-profiles,social-upsells", - platform: "web" - }, - { - includeResponseMeta: !0, - reload: !0 - }); - console.log(this.listennow) - } catch (e) { - console.log(e) - this.getListenNow(attempt + 1) - } - }, - async getRadioStations(attempt = 0) { - if (attempt > 3) { - return - } - try { - this.radio.personal = await this.mkapi("recentRadioStations", false, "", - { - "platform": "web", - "art[url]": "f" - }); - } catch (e) { - console.log(e) - this.getRadioStations(attempt + 1) - } - }, - unauthorize() { - this.mk.unauthorize() - }, - showSearch() { - this.page = "search" - }, - playMediaItemById(id, kind) { - this.mk.setQueue({[kind]: [id]}).then(function (queue) { - MusicKit.getInstance().play() - }) - }, - searchQuery() { - let self = this - this.mk.api.search(this.search.term, - { - types: "songs,artists,albums,playlists", - limit: self.search.limit - }).then(function (results) { - self.search.results = results - }) - }, - mkReady() { - if (this.mk["nowPlayingItem"]) { - return true - } else { - return false - } - }, - getMediaItemArtwork(url, size = 64) { - return `url("${url.replace('{w}', size).replace('{h}', size).replace('{f}', "webp").replace('{c}', "cc")}")`; - }, - getNowPlayingArtworkBG(size = 600) { - if(!this.mkReady()) { - return "" - } - if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) { - return `${this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size)}`; - } else { - return ""; - } - }, - getNowPlayingArtwork(size = 600) { - if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) { - return `url("${this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size)}")`; - } else { - return ""; - } - }, - quickPlay(query) { - let self = this - MusicKit.getInstance().api.search(query, {limit: 2, types: 'songs'}).then(function (data) { - MusicKit.getInstance().setQueue({song: data["songs"]['data'][0]["id"]}).then(function (queue) { - MusicKit.getInstance().play() - setTimeout(() => { - self.$forceUpdate() - }, 1000) - }) - }) - }, - apiCall(url, callback) { - const xmlHttp = new XMLHttpRequest(); - - xmlHttp.onreadystatechange = (e) => { - if (xmlHttp.readyState !== 4) { - return; - } - - if (xmlHttp.status === 200) { - console.log('SUCCESS', xmlHttp.responseText); - callback(JSON.parse(xmlHttp.responseText)); - } else { - console.warn('request_error'); - } - }; - - xmlHttp.open("GET", url); - xmlHttp.setRequestHeader("Authorization", "Bearer " + MusicKit.getInstance().developerToken); - xmlHttp.setRequestHeader("Music-User-Token", "" + MusicKit.getInstance().musicUserToken); - xmlHttp.setRequestHeader("Accept", "application/json"); - xmlHttp.setRequestHeader("Content-Type", "application/json"); - xmlHttp.responseType = "text"; - xmlHttp.send(); - }, - fetchPlaylist(id, callback) { - // id can be found in playlist.attributes.playParams.globalId - this.mk.api.playlist(id).then(res => { - callback(res) - }) - - // tracks are found in relationship.data - } - } -}) - -document.addEventListener('musickitloaded', function () { - // MusicKit global is now defined - fetch("https://beta.music.apple.com/") - .then(response => response.text()) - .then(data => { - var el = document.createElement("html"); - el.innerHTML = data; - var u = el.querySelector(`[name="desktop-music-app/config/environment"]`) - var amwebCFG = JSON.parse(decodeURIComponent(u.getAttribute("content"))); - console.log(amwebCFG.MEDIA_API.token) - // eh fuck it lets just expose the token - MusicKit.configure({ - developerToken: "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IldlYlBsYXlLaWQifQ.eyJpc3MiOiJBTVBXZWJQbGF5IiwiaWF0IjoxNjM2NTYwMjc1LCJleHAiOjE2NTIxMTIyNzV9.is4KeAN_M9FWTfuw9zMV2lgHSSdPqEV2SX-XfCuEYY4qtmjbo-NjebHCageS28z0P0erksqql9rtsoizE4hsJg", - app: { - name: 'My Cool Web App', - build: '1978.4.1' - } - }); - setTimeout(() => { - app.init() - }, 1000) - }); - -}); \ No newline at end of file diff --git a/docs/app-win/logotmp.png b/docs/app-win/logotmp.png deleted file mode 100644 index 5158c3cbfe3570d6d458d8950ccb3337e897b381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33941 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 diff --git a/docs/app-win/sortable.min.js b/docs/app-win/sortable.min.js deleted file mode 100644 index 7ba6b590..00000000 --- a/docs/app-win/sortable.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! Sortable 1.14.0 - MIT | git://github.com/SortableJS/Sortable.git */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function A(o){for(var t=1;tt.length)&&(e=t.length);for(var n=0,o=new Array(e);n"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function N(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}var g,m=/\s+/g;function I(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(m," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(m," ")))}function P(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=P(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function b(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[j]._onDragOver(o)}}var i,r,a}function Yt(t){q&&q.parentNode[j]._isOutsideThisEl(t.target)}function Bt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[j]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return It(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Bt.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in K.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in Pt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&At,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),Et.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,x())}function Ft(t,e,n,o,i,r,a,l){var s,c,u=t[j],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||k(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function jt(t){t.draggable=!1}function Ht(){Ct=!1}function Lt(t){return setTimeout(t,0)}function Kt(t){return clearTimeout(t)}Bt.prototype={constructor:Bt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(gt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,q):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){Tt.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&Tt.push(o)}}(o),!q&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=N(l,t.draggable,o,!1))&&l.animated||J===l)){if(nt=B(l),it=B(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return U({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),z("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=N(s,t.trim(),o,!1))return U({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),z("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!N(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!q&&n.parentNode===r&&(o=k(n),$=r,V=(q=n).parentNode,Q=q.nextSibling,J=n,at=a.group,st={target:Bt.dragged=q,clientX:(e||t).clientX,clientY:(e||t).clientY},ht=st.clientX-o.left,ft=st.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,q.style["will-change"]="all",o=function(){z("delayEnded",i,{evt:t}),Bt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(q.draggable=!0),i._triggerDragStart(t,e),U({sortable:i,name:"choose",originalEvent:t}),I(q,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){b(q,t.trim(),jt)}),h(l,"dragover",Xt),h(l,"mousemove",Xt),h(l,"touchmove",Xt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,q.draggable=!0),z("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():Bt.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){q&&jt(q),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(q,"dragend",this),h($,"dragstart",this._onDragStart));try{document.selection?Lt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;yt=!1,$&&q?(z("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Yt),n=this.options,t||I(q,n.dragClass,!1),I(q,n.ghostClass,!0),Bt.active=this,t&&this._appendGhost(),U({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(ct){this._lastX=ct.clientX,this._lastY=ct.clientY,kt();for(var t=document.elementFromPoint(ct.clientX,ct.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ct.clientX,ct.clientY))!==e;)e=t;if(q.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j])if(e[j]._onDragOver({clientX:ct.clientX,clientY:ct.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=(t=e).parentNode);Rt()}},_onTouchMove:function(t){if(st){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=Z&&v(Z,!0),a=Z&&r&&r.a,l=Z&&r&&r.d,e=Ot&&bt&&E(bt),a=(i.clientX-st.clientX+o.x)/(a||1)+(e?e[0]-_t[0]:0)/(a||1),l=(i.clientY-st.clientY+o.y)/(l||1)+(e?e[1]-_t[1]:0)/(l||1);if(!Bt.active&&!yt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))n.right+10||t.clientX<=n.right&&t.clientY>n.bottom&&t.clientX>=n.left:t.clientX>n.right&&t.clientY>n.top||t.clientX<=n.right&&t.clientY>n.bottom+10}(n,r,this)&&!g.animated){if(g===q)return O(!1);if((l=g&&a===n.target?g:l)&&(w=k(l)),!1!==Ft($,a,q,o,l,w,n,!!l))return x(),a.appendChild(q),V=a,M(),O(!0)}else if(g&&function(t,e,n){n=k(X(n.el,0,n.options,!0));return e?t.clientX .sidebar-user-icon { - width: 22px; - height: 22px; - border-radius: 100%; - background: var(--keyColor); - margin: 2px; - flex: 0 0 auto; -} - -.app-sidebar-button > .sidebar-user-text { - width: 100%; - display: flex; - font-size: 16px; - margin: 6px 12px; -} - -.app-sidebar-content { - padding: 8px; - overflow-y: scroll; - overflow-y: overlay; - height: 100%; -} - -.app-sidebar-content::-webkit-scrollbar { - display: none; -} - -.app-sidebar-content:hover::-webkit-scrollbar { - display: initial; -} - -.app-sidebar-item { - display: flex; - width: 100%; - padding: 8px 12px; - font-weight: 400; - font-family: inherit; - font-size: 14px; - margin: 6px 0px; - border: 1px solid transparent; - border-radius: 6px; - background: transparent; - color: white; - transition: transform .1s; -} - -.app-sidebar-item:hover { - border: 1px solid rgb(200 200 200 / 5%); - background: rgb(200 200 200 / 15%); -} - -.app-sidebar-item:active { - border: 1px solid rgb(200 200 200 / 5%); - background: rgb(200 200 200 / 15%); - transform: scale(0.98); - transition: transform 0s; -} - -.app-sidebar-item.active { - border: 1px solid rgb(200 200 200 / 5%); - background: rgb(200 200 200 / 15%); - transform: scale(1); - transition: transform 0s; -} - -.app-sidebar-item.active::after { - content: ''; - width: 4px; - height: 16px; - display: block; - position: absolute; - top: calc(100% - 72%); - border-radius: 10px; - left: 0px; - background: var(--keyColor); -} - -.app-chrome { - background: var(--color1); - width: 100%; - height: var(--chromeHeight); - display: flex; - flex-direction: row; - -webkit-app-region: drag; -} - -.app-chrome .app-chrome--left, -.app-chrome .app-chrome--center, -.app-chrome .app-chrome--right { - height: 100%; - width: 100%; - display: flex; - justify-content: center; - align-items: center; -} - -.app-chrome .app-chrome--left { - width: 30%; - justify-content: left; -} - -.app-chrome .app-chrome--center { - width: 100%; -} - -.app-chrome .app-chrome--right { - width: 30%; - justify-content: right; -} - -.app-chrome .app-chrome-item { - height: 100%; - width: auto; - display: flex; - justify-content: center; - align-items: center; - -webkit-app-region: no-drag; - height: auto; -} - -.app-chrome .app-chrome-item.generic { - width: 50px; - opacity: 0.70; -} - -.app-chrome .app-chrome-item.volume { - width: 80px; - margin-right: 6px; -} - -.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb { - transition: all var(--appleTransition); -} - -.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb:hover { - background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px); - transform: scale(1.2); -} - -.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb:active { - background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px); - transform: scale(1); -} - -.app-chrome .app-chrome-item.volume > input[type=range] { - width: 100%; -} - -.app-chrome .app-chrome-item.volume > input[type=range] { - -webkit-appearance: none; - height: 4px; - background: rgba(255, 255, 255, 0.4); - border-radius: 5px; - background-size: 70% 100%; - background-repeat: no-repeat; -} - -.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb { - -webkit-appearance: none; - height: 14px; - width: 14px; - border-radius: 50%; - background: rgb(50 50 50); - cursor: default; - box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.4); -} - -.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-runnable-track { - -webkit-appearance: none; - box-shadow: none; - border: none; - background: transparent; -} - -.app-chrome .back-button { - height: 100%; - width: 60px; -} - -.app-chrome .app-chrome-item.full-height { - height: 100%; -} - -.app-chrome .app-chrome-item > .app-title { - width: 100px; - font-size: 13px; - background: url("./logotmp.png"); - background-size: 90px; - background-repeat: no-repeat; - background-position: center; - height: 100%; - margin-right: 16px; - margin-left: 16px; - image-rendering: -webkit-optimize-contrast; - -webkit-app-region: drag; -} - -.app-chrome .app-chrome-item > .window-controls { - width: 138px; - font-size: 13px; - height: 100%; - display: flex; -} - -.app-chrome .app-chrome-item > .window-controls > div { - height: 100%; - width: 32px; -} - -.app-chrome .app-chrome-item > .window-controls > div:hover { - background: rgb(200 200 200 / 10%); -} - -.app-chrome .app-chrome-item > .window-controls > div.close { - width: 100%; - height: 100%; - background-image: var(--gfx-closeBtn); - background-position: center; - background-repeat: no-repeat; - -webkit-app-region: no-drag; -} - -.app-chrome .app-chrome-item > .window-controls > div.minmax { - background-image: var(--gfx-maxBtn); - background-position: center; - background-repeat: no-repeat; - -webkit-app-region: no-drag; - width: 100%; - height: 100%; -} - -.app-chrome .app-chrome-item > .window-controls > div.minimize { - background-image: var(--gfx-minBtn); - background-position: center; - background-repeat: no-repeat; - -webkit-app-region: no-drag; - width: 100%; - height: 100%; -} - -.app-chrome .app-chrome-item.playback-controls { - width: 80%; - height: 90%; - display: flex; - max-width: 500px; - border-left: 1px solid rgb(200 200 200 / 8%); - border-right: 1px solid rgb(200 200 200 / 8%); -} - -.app-chrome .app-chrome-item > .app-playback-controls { - display: flex; - justify-content: center; - align-content: center; - width: 100%; -} - -.app-chrome .app-chrome-item > .app-playback-controls .song-name { - font-weight: 600; - text-align: center; - font-size: 13px; - height: 1em; - line-height: 1em; - overflow: hidden; -} - -.app-chrome .app-chrome-item > .app-playback-controls .song-artist { - font-weight: 400; - font-size: 13px; - text-align: center; - height: 1em; - line-height: 1em; - overflow: hidden; - /* animation: marquee 10s linear infinite; */ -} - -.app-chrome .app-chrome-item > .app-playback-controls .song-progress { - height: 16px; - position: absolute; - bottom: 0px; - left: 0px; - overflow: hidden; - -} - -@keyframes marquee { - from { - transform: translateX(100%); - } - to { - transform: translateX(-100%); - } -} - -.app-chrome .app-chrome-item > .app-playback-controls .song-progress > input[type=range] { - appearance: none; - width: 100%; - height: 4px; - background-color: rgb(200 200 200 / 10%); -} - -.app-chrome .app-chrome-item > .app-playback-controls .song-progress > input[type=range]::-webkit-slider-thumb { - -webkit-appearance: none; - appearance: none; - width: 4px; - height: 12px; - border-radius: 2px; - background: var(--keyColor); - cursor: ew-resize; -} - -.app-chrome .app-chrome-item > .app-playback-controls .song-progress > input[type=range]::-moz-range-thumb { - width: 8px; - height: 8px; - border-radius: 100%; - background: var(--keyColor); - cursor: pointer; -} - -.app-chrome .app-chrome-item > .app-playback-controls .artwork { - width: 42px; - height: 42px; - background-image: var(--artwork); - background-position: center; - background-size: contain; - background-repeat: no-repeat; - border-radius: 4px; - flex: 0 0 auto; - margin: 6px; - box-shadow: inset 0px 0px 0px 1px rgb(200 200 200 / 25%); - image-rendering: -webkit-optimize-contrast; -} - -.app-chrome .app-chrome-item > .app-playback-controls .actions { - width: 42px; - height: 42px; - border-radius: 2px; - flex: 0 0 auto; - margin: 6px; - display: flex; - justify-content: center; - align-items: center; -} - -.app-chrome .app-chrome-item > .app-playback-controls .playback-info { - width: 100%; - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - position: relative; -} - -.app-chrome .app-chrome-item > .app-playback-controls .playback-info > div { - width: 100%; -} - -.app-navigation { - background: var(--color1); - height: calc(100% - var(--chromeHeight)); - width: 100%; - display: flex; -} - -.display--small { - display: none !important; -} - -/* Window is smaller <= 1023px width */ -@media only screen and (max-width: 1023px) { - .display--small { - display: inherit !important; - } - - .display--large { - display: none !important; - } -} - -.header-text { - margin: 0px; -} - -.media-item--small { - background: rgb(0 0 0 / 25%); - height: 162px; - width: 132px; - display: inline-flex; - flex-direction: column; - justify-content: center; - align-items: center; - border-radius: 10px; -} - -.media-item--small .artwork { - background: red; - margin: 6px; - border-radius: 100%; - width: 90px; - height: 90px; - box-shadow: inset 0px 0px 0px 1px rgb(200 200 200 / 30%); -} - -.media-item--small .text { - font-weight: 600; - font-size: 0.90em; -} - -.media-item--small .subtext { - font-size: 0.75em; -} - -.player-duration-time { - opacity: 0.5; -} - -.player-artwork-container { - display: flex; - align-items: center; - justify-content: center; -} - -.player-duration-container { - font-size: 0.85em; - font-weight: 500; -} - -.media-artwork { - --artwork: url(""); - width: 80vw; - height: 80vw; - max-height: 500px; - max-width: 500px; - background: black; - background-image: var(--artwork); - background-size: cover; - background-position: center; - background-repeat: no-repeat; - border-radius: 8px; - box-shadow: inset 0px 0px 0px 1px rgb(200 200 200 / 16%), 0 8px 40px rgb(0 0 0 / 0.55); - transition: transform .10s var(--appleEase); -} - -.media-artwork.paused { - transition: transform .35s var(--appleEase); - transform: scale(0.85); -} - -.playback-slider { - width: 90%; -} - -.volume-slider { - width: 100%; -} - -.volume-slider-container { - width: 90%; - margin: 0 auto; - padding: 0px; -} - -.volume-slider-container .col-auto, -.volume-slider-container .col { - display: flex; - align-items: center; - justify-self: center; - padding: 0px; - margin: 0px; -} - -.playback-button { - font-size: 2em; - width: 40px; - height: 36px; - padding: 0px; - background: transparent; - border: 0px; - border-radius: 0px; - box-shadow: unset; - background-size: 12px; - background-position: center; - background-repeat: no-repeat; - opacity: 0.70; - border-radius: 6px; -} - -.playback-button:active { - transform: scale(0.95); -} - -.playback-button--small { - border-radius: 6px; - font-size: 1em; - color: inherit; - background-size: 14px; - background-repeat: no-repeat; - background-position: center; - background-color: transparent; - width: 40px; - height: 32px; - border: 0px; - box-shadow: unset; -} - -.playback-button:hover, .playback-button--small:hover { - background-color: rgb(200 200 200 / 10%); -} - -.playback-button:active, .playback-button--small:active { - transform: scale(0.9); -} - -.playback-button--small.active { - background-color: rgb(200 200 200 / 10%); -} - -.playback-button--small.search { - background-image: url("./assets/search.svg"); -} - -.playback-button--small.cast { - background-image: url("./assets/cast_white.svg"); -} - -.playback-button--small.queue { - background-image: url("./assets/list.svg"); -} - -.playback-button--small.lyrics { - background-image: url("./assets/quote-right.svg"); -} - -.playback-button--small.shuffle { - background-image: url("./assets/shuffle.svg"); -} - -.playback-button--small.repeat { - background-image: url("./assets/repeat.svg"); -} - -.playback-button--small.repeat.repeatOne { - background-color: var(--keyColor); -} - -.playback-button.pause { - background-image: url('./assets/pause.svg'); -} - -.playback-button.play { - background-image: url('./assets/play.svg'); -} - -.playback-button.next { - background-image: url('./assets/forward.svg'); -} - -.playback-button.previous { - background-image: url('./assets/backward.svg'); -} - -.playback-buttons { - display: flex; - align-items: center; - justify-content: center; -} - -.player-volume-glyph { - width: 32px; - height: 16px; - background-repeat: no-repeat; - background-size: contain; - background-position: center; -} - -.player-volume-glyph.decrease { - background-image: url("./assets/volume-down.svg"); - opacity: 0.5; -} - -.player-volume-glyph.increase { - background-image: url("./assets/volume-up.svg"); - opacity: 0.5; -} - -.player-track-info { - width: 90%; - margin: 0 auto; -} - -.player-song-title { - font-size: 1.25em; - text-align: left; - margin: 0 auto; - font-weight: 500; -} - -.player-song-artist { - font-size: 1.0em; - text-align: left; - margin: 0 auto; - color: var(--keyColor); - font-weight: 400; -} - -.player-song-artist:hover { - cursor: pointer; - text-decoration: underline; -} - -.player-more-container { - display: flex; - align-items: center; - justify-content: center; -} - -.player-more-button { - appearance: none; - width: 32px; - height: 32px; - border-radius: 50%; - border: 0px; - background: var(--keyColor); - cursor: pointer; - box-shadow: inset 0px 0px 0px 1px rgb(200 200 200 / 16%); - color: white; - font-weight: bold; - padding: 0px; - font-size: 16px; -} - -.back-button { - width: 40px; - height: 40px; - background-color: transparent; - background-size: 16px; - background-position: center; - background-repeat: no-repeat; - background-image: url("./assets/arrow-left.svg"); - border: 0px; - border-radius: 0px; -} - -.header-text { - height: 40px; - display: flex; - align-items: center; - -} - - -.flex-center { - display: flex; - align-items: center; - flex-wrap: wrap; -} - -.list-entry-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 12px; - font-size: 1em; - font-family: inherit; -} - -.list-entry { - display: flex; - align-items: center; - /* justify-content: space-between; */ - padding: 12px; - font-size: 1em; - font-family: inherit; - border-bottom: 1px solid rgba(255 255 255 / 0.1); - cursor: pointer; -} - -.list-entry-image { - --artwork: url(""); - width: 64px; - height: 64px; - background: var(--artwork); - background-size: cover; - background-position: center; - background-repeat: no-repeat; - border-radius: 8px; - box-shadow: inset 0px 0px 0px 1px rgb(200 200 200 / 16%), 0 8px 40px rgb(0 0 0 / 0.55); -} - -.list-entry-image.artist { - border-radius: 50%; -} - -.list-entry-body { - display: flex; - flex-direction: column; - justify-content: center; - align-items: flex-start; - margin-left: 12px; -} - -.list-entry-name { - font-size: 14px; - font-weight: 500; - overflow: hidden; - width: 100%; -} - -.list-entry-artist { - font-size: 12px; - overflow: hidden; - width: 100%; -} - -.list-entry .handle { - height: 100%; - width: 28px; - background: var(--keyColor); - display: flex; - justify-content: center; - align-items: center; -} - -.md-container { - width: 100%; - position: relative; -} - -.search-panel { - background: rgb(0 0 0 / 50%); -} - -.search-header { - position: absolute; - width: 100%; - z-index: 1; - backdrop-filter: blur(16px); - -webkit-backdrop-filter: blur(16px); - border-bottom: 1px solid rgb(200 200 200 / 8%); -} - -.connection-error-panel { - background: rgb(0 0 0 / 50%); -} - -.search-type-container { - display: flex; -} - -.search-type-button { - background: rgb(20 20 20 / 0.85); - border-radius: 50px; - color: white; - border: 0px; - box-shadow: unset; - font-family: inherit; - padding: 8px 16px; - font-size: 14px; - font-weight: 500; - margin: 8px; - margin-top: 0px; - margin-bottom: 0px; -} - -.search-type-button.active { - background: var(--keyColor); -} - -.search-tab-container { - overflow: auto; - white-space: nowrap; - overflow-y: hidden; -} - -.search-body-container { - position: relative; - width: 100%; - height: 100%; -} - -.queue-body { - width: 100%; - height: 100%; -} - -.search-body { - position: absolute; - width: 100%; - height: 100%; - padding-top: 220px; -} - -.search-tab { - background: rgb(20 20 20 / 0.85); - border-radius: 50px; - color: white; - border: 0px; - box-shadow: unset; - font-family: inherit; - padding: 8px 16px; - font-size: 14px; - font-weight: 500; -} - -.search-tab.active { - background: var(--keyColor); -} - -.context-menu { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(0, 0, 0, 0.5); - z-index: 100; -} - -.context-menu .context-menu-item { - --borderRadius: 10px; - appearance: none; - width: 100%; - display: block; - font-size: 1.10em; - padding: 18px 20px; - font-family: inherit; - border: 0px; - font-weight: 600; - border-radius: 0px; - border-bottom: 1px solid rgb(200 200 200 / 15%); - margin: 0px; - background: rgb(60 60 60 / 80%); - backdrop-filter: blur(16px) saturate(180%); - -webkit-backdrop-filter: blur(16px) saturate(180%); - color: #ccc; -} - -.context-menu .context-menu-item:hover { - cursor: pointer; -} - -.context-menu .context-menu-item:active { - filter: brightness(75%); -} - -.context-menu .context-menu-item:first-child { - border-radius: 0px; - border-top-left-radius: var(--borderRadius); - border-top-right-radius: var(--borderRadius); -} - -.context-menu .context-menu-item:last-child { - border-radius: 0px; - border-bottom-left-radius: var(--borderRadius); - border-bottom-right-radius: var(--borderRadius); - border-bottom: 0px; -} - -.context-menu .context-menu-item:only-child { - border-radius: var(--borderRadius); -} - -.context-menu .context-menu-item.context-menu-item--left { - text-align: left; -} - -.context-menu .context-menu-body { - display: flex; - align-items: flex-end; - justify-content: flex-end; - flex-direction: column; -} - -.lyric-body { - -webkit-mask-image: -webkit-gradient(linear, left 95%, left bottom, from(rgba(0, 0, 0, 1)), to(rgba(0, 0, 0, 0))); - overflow-y: scroll; - overflow-x: hidden; - display: flex; - flex-flow: column; -} - -.lyric-line { - --bgSpeed: 1s; - appearance: none; - color: white; - font-size: 2rem; - transform: scale(0.8); - transform-origin: left center; - transition: transform 0.2s var(--appleEase); - opacity: 0.75; - width: auto; - display: inline-block; - margin: 10px; - margin-left: 5%; - margin-right: 0px; -} - -.lyric-line:hover { - cursor: pointer; -} - -.lyric-line:hover::after { - content: ' '; - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - transform: scale(1.06); - background: rgba(200, 200, 200, 0.1); - pointer-events: none; - border-radius: 10px; - -webkit-backface-visibility: hidden; -} - -.lyric-line.active { - --bgSpeed: 1s; - opacity: 1; - transform: scale(1); - /*background: var(--keyColor);*/ - transition: transform 0.2s var(--appleEase); -} - -.lyric-line:not(.active) { - filter: blur(1px) -} - -.lyricWaiting { - margin-top: 8px; - display: none; -} - -.lyric-line.active .lyricWaiting { - display: inline-flex; - animation: lyricWaitingLine 6s cubic-bezier(0.42, 0, 0.58, 1) infinite; -} - - -.lyric-line.active .lyricWaiting > div { - width: 10px; - height: 10px; - background: white; - border-radius: 50%; - margin: 3px; -} - -@keyframes lyricWaitingLine { - 0% { - opacity: 0; - transform: scale(0.85); - } - 50% { - opacity: 1; - transform: scale(1); - } - 100% { - opacity: 0; - transform: scale(0.85); - } -} - - -.lyric-line2:before { - background: var(--keyColor); - content: ''; - width: 0%; - height: 6px; - position: absolute; - bottom: -8px; - left: 0; - border-radius: 10px; - z-index: -1; - transition: width var(--bgSpeed); -} - -.lyric-line2.active:before { - width: 100%; - transition: width var(--bgSpeed); -} - -.player_top { - height: 100%; -} - -/* Cider */ - -.text-overflow-elipsis { - min-width: 0px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -/* horizontal media scroller */ -.cd-hmedia-scroller { - margin: 0 auto; - display: flex; - flex-flow: row; - overflow-x: scroll; -} - -.cd-hmedia-scroller::-webkit-scrollbar-thumb{ - box-shadow: none; -} - -.cd-hmedia-scroller:hover::-webkit-scrollbar-thumb{ - box-shadow: inset 0px 0px 10px 10px rgb(200 200 200 / 50%); -} - -/* mediaitem-list-item */ -.cd-mediaitem-list-item { - width: 100%; - height: 60px; - display: inline-flex; - flex: 0 0 auto; - flex-direction: row; - font-size: 14px; - justify-content: center; - align-items: center; - cursor: pointer; - border-bottom: 1px solid rgb(200 200 200 / 10%); -} - -.cd-mediaitem-list-item:hover { - background: rgb(200 200 200 / 10%); -} - -.cd-mediaitem-list-item .artwork { - height: 34px; - width: 34px; - background: blue; - border-radius: var(--mediaItemRadius); - background: var(--artwork); - background-size: contain; - box-shadow: var(--mediaItemShadow); - flex: 0 0 auto; - background-repeat: no-repeat; - margin: 12px; -} - -.cd-mediaitem-list-item .artwork.round { - border-radius: var(--mediaItemRadiusRound); -} - -.cd-mediaitem-list-item .info-rect { - width: 100%; -} - -.cd-mediaitem-list-item .title { - width: 100%; -} - -.cd-mediaitem-list-item .subtitle { - width: 90%; - font-size: 12px; - opacity: 0.7; -} - -.cd-mediaitem-list-item .content-rating { - text-transform: uppercase; - font-size: 10px; - border-radius: 3px; - background: rgb(200 200 200 / 15%); - width: 60px; - text-align: center; - padding: 5px; - margin-right: 12px; - flex: 0 0 auto; - font-weight: 500; - color: #ccc; -} - -/* mediaitem-hrect */ -.cd-mediaitem-hrect { - background: rgb(255 255 255 / 18%); - width: 264px; - height: 100px; - display: inline-flex; - flex: 0 0 auto; - flex-direction: row; - font-size: 14px; - justify-content: center; - align-items: center; - border-radius: 6px; - cursor: pointer; -} - -.cd-mediaitem-hrect .artwork { - height: 70px; - width: 70px; - background: blue; - border-radius: var(--mediaItemRadius); - background: var(--artwork); - background-size: contain; - box-shadow: var(--mediaItemShadow); - flex: 0 0 auto; - background-repeat: no-repeat; - margin: 18px; -} - -.cd-mediaitem-hrect .artwork.round { - border-radius: var(--mediaItemRadiusRound); -} - -.cd-mediaitem-hrect .info-rect { - width: 100%; -} - -.cd-mediaitem-hrect .title { - width: 100%; - text-align: center; -} - -.cd-mediaitem-hrect .subtitle { - width: 100%; - text-align: center; - font-size: 12px; -} - - -/* mediaitem-square */ -.cd-mediaitem-square { - width: 200px; - height: 190px; - display: inline-flex; - flex: 0 0 auto; - flex-direction: column; - font-size: 14px; - justify-content: center; - align-items: center; - border-radius: 6px; - cursor: pointer; -} - -.cd-mediaitem-square:hover { - background: rgb(200 200 200 / 10%); -} - -.cd-mediaitem-square .artwork { - height: 128px; - width: 128px; - background: blue; - border-radius: var(--mediaItemRadius); - background: var(--artwork); - background-size: cover; - box-shadow: var(--mediaItemShadow); - flex: 0 0 auto; - margin: 6px; -} - -.cd-mediaitem-square .artwork.round { - border-radius: var(--mediaItemRadiusRound); -} - -.cd-mediaitem-square .title { - width: 90%; - text-align: center; -} - -.cd-mediaitem-square .subtitle { - width: 100%; - text-align: center; - font-size: 12px; -} - - -.cd-btn-seeall { - background: transparent; - border: 0px; - color: var(--keyColor); - font-family: inherit; - font-size: 16px; - border-radius: 4px; - padding: 6px; -} - -.cd-btn-seeall:hover { - cursor: pointer; - background: rgb(200 200 200 / 10%) -} - -/* Cider */ - -/* Transitions */ -.wpfade-enter-active, -.wpfade-leave-active { - transition: opacity .1s var(--appleEase); -} - -.wpfade-enter, -.wpfade-leave-to { - opacity: 0; -} - -@media (prefers-color-scheme: light) { - :root { - /* */ - --gfx-closeBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAIn2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgZGM6Zm9ybWF0PSJpbWFnZS9wbmciCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEyOjU1OjM3WiIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMTAtMDVUMTQ6MjY6MjgtMDc6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTEwLTA1VDE0OjI2OjI4LTA3OjAwIgogICB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTk5OWM2NWYtNDhhOS0wNjQyLWI2MTktZmJlYTExMmUxOGZiIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5MzMyOWNhLWNkNjctMzY0Zi04MzU1LTY5N2ZmYzI0ZDdlZCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyZjQwYmU3LTE0YzItZjc0Ni1hZmE1LWQxYmIxNzAyMjM4OCIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qSiIgogICAgICBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0iY3JlYXRlZCIKICAgICAgeG1wTU06aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmY0MGJlNy0xNGMyLWY3NDYtYWZhNS1kMWJiMTcwMjIzODgiCiAgICAgIHhtcE1NOnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIKICAgICAgeG1wTU06d2hlbj0iMjAyMC0wMi0xN1QxMjo1NTozN1oiLz4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0ic2F2ZWQiCiAgICAgIHhtcE1NOmNoYW5nZWQ9Ii8iCiAgICAgIHhtcE1NOmluc3RhbmNlSUQ9InhtcC5paWQ6NjkzMzI5Y2EtY2Q2Ny0zNjRmLTgzNTUtNjk3ZmZjMjRkN2VkIgogICAgICB4bXBNTTpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgICAgIHhtcE1NOndoZW49IjIwMjAtMDItMTdUMTI6NTU6MzdaIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjEwLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMTAtMDVUMTQ6MjY6MjgtMDc6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PtPY89oAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2lhmGFRQUODhDVZlELU0qD0C6pBDbJa9OWPQO3xnhHRGrQKBVFLv4b6C2oNmoOgKIJoC5qLWkpe56mgRJ7Luedzv/eew73ngiWcVjJ6/QBksjktOOF3zUcWXLZX7DTQQSu+qKKrM6HxMDXt64E6M971mbVqn/vXmpbjugJ1jcKjiqrlhCeFp9dzqsm7wu1KKrosfC7s0eSCwvemHivxm8nJEv+YrIWDAbC0CLuSVRyrYiWlZYTl5bgz6TWlfB/zJY54di4ksVu8C50gE/hxMcUYAYYYZETmIfrw0i8rauQPFPNnWZVcRWaVDTRWSJIih0fUNakel5gQPS4jzYbZ/7991RM+b6m6ww8NL4bx0QO2HSjkDeP72DAKJ2B9hqtsJX/1CIY/Rc9XNPchOLfg4rqixfbgchs6n9SoFi1KVnFLIgHvZ9AcgbZbsC+Welbe5/QRwpvyVTewfwC9ct659At2bGftHD0UJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAEpJREFUGJWNkMENwDAIA1Gh3F7sP0Ty7xD5JgpU+OuTLVvMmQohhRTCnCEK8TpfBl9eBpcBu/HXcsAZ9FQjSrWqW2Pa95gzGofPBQZRG2fS0899AAAAAElFTkSuQmCC'); - --gfx-maxBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAIn2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgZGM6Zm9ybWF0PSJpbWFnZS9wbmciCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEyOjU1OjM3WiIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMTAtMDVUMTQ6MjU6NTItMDc6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTEwLTA1VDE0OjI1OjUyLTA3OjAwIgogICB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTk5OWM2NWYtNDhhOS0wNjQyLWI2MTktZmJlYTExMmUxOGZiIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5MzMyOWNhLWNkNjctMzY0Zi04MzU1LTY5N2ZmYzI0ZDdlZCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyZjQwYmU3LTE0YzItZjc0Ni1hZmE1LWQxYmIxNzAyMjM4OCIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qSiIgogICAgICBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0iY3JlYXRlZCIKICAgICAgeG1wTU06aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmY0MGJlNy0xNGMyLWY3NDYtYWZhNS1kMWJiMTcwMjIzODgiCiAgICAgIHhtcE1NOnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIKICAgICAgeG1wTU06d2hlbj0iMjAyMC0wMi0xN1QxMjo1NTozN1oiLz4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0ic2F2ZWQiCiAgICAgIHhtcE1NOmNoYW5nZWQ9Ii8iCiAgICAgIHhtcE1NOmluc3RhbmNlSUQ9InhtcC5paWQ6NjkzMzI5Y2EtY2Q2Ny0zNjRmLTgzNTUtNjk3ZmZjMjRkN2VkIgogICAgICB4bXBNTTpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgICAgIHhtcE1NOndoZW49IjIwMjAtMDItMTdUMTI6NTU6MzdaIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjEwLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMTAtMDVUMTQ6MjU6NTItMDc6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PntJ23wAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2lhmGFRQUODhDVZlELU0qD0C6pBDbJa9OWPQO3xnhHRGrQKBVFLv4b6C2oNmoOgKIJoC5qLWkpe56mgRJ7Luedzv/eew73ngiWcVjJ6/QBksjktOOF3zUcWXLZX7DTQQSu+qKKrM6HxMDXt64E6M971mbVqn/vXmpbjugJ1jcKjiqrlhCeFp9dzqsm7wu1KKrosfC7s0eSCwvemHivxm8nJEv+YrIWDAbC0CLuSVRyrYiWlZYTl5bgz6TWlfB/zJY54di4ksVu8C50gE/hxMcUYAYYYZETmIfrw0i8rauQPFPNnWZVcRWaVDTRWSJIih0fUNakel5gQPS4jzYbZ/7991RM+b6m6ww8NL4bx0QO2HSjkDeP72DAKJ2B9hqtsJX/1CIY/Rc9XNPchOLfg4rqixfbgchs6n9SoFi1KVnFLIgHvZ9AcgbZbsC+Welbe5/QRwpvyVTewfwC9ct659At2bGftHD0UJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAEhJREFUGJVjYGBgmMzAwPCXgYHhPw78l4GBYTIjlKHHwMDwlAE7EGFgYLjJANUlgEMRDPxnIqAADoaKwn8MkCDABaShaogLcACWZRl4ajKVtAAAAABJRU5ErkJggg=='); - --gfx-restoreBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAIn2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgZGM6Zm9ybWF0PSJpbWFnZS9wbmciCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEyOjU1OjM3WiIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMTAtMDVUMTQ6MjY6NTMtMDc6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTEwLTA1VDE0OjI2OjUzLTA3OjAwIgogICB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTk5OWM2NWYtNDhhOS0wNjQyLWI2MTktZmJlYTExMmUxOGZiIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5MzMyOWNhLWNkNjctMzY0Zi04MzU1LTY5N2ZmYzI0ZDdlZCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyZjQwYmU3LTE0YzItZjc0Ni1hZmE1LWQxYmIxNzAyMjM4OCIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qSiIgogICAgICBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0iY3JlYXRlZCIKICAgICAgeG1wTU06aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmY0MGJlNy0xNGMyLWY3NDYtYWZhNS1kMWJiMTcwMjIzODgiCiAgICAgIHhtcE1NOnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIKICAgICAgeG1wTU06d2hlbj0iMjAyMC0wMi0xN1QxMjo1NTozN1oiLz4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0ic2F2ZWQiCiAgICAgIHhtcE1NOmNoYW5nZWQ9Ii8iCiAgICAgIHhtcE1NOmluc3RhbmNlSUQ9InhtcC5paWQ6NjkzMzI5Y2EtY2Q2Ny0zNjRmLTgzNTUtNjk3ZmZjMjRkN2VkIgogICAgICB4bXBNTTpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgICAgIHhtcE1NOndoZW49IjIwMjAtMDItMTdUMTI6NTU6MzdaIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjEwLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMTAtMDVUMTQ6MjY6NTMtMDc6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PluKsJ0AAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2lhmGFRQUODhDVZlELU0qD0C6pBDbJa9OWPQO3xnhHRGrQKBVFLv4b6C2oNmoOgKIJoC5qLWkpe56mgRJ7Luedzv/eew73ngiWcVjJ6/QBksjktOOF3zUcWXLZX7DTQQSu+qKKrM6HxMDXt64E6M971mbVqn/vXmpbjugJ1jcKjiqrlhCeFp9dzqsm7wu1KKrosfC7s0eSCwvemHivxm8nJEv+YrIWDAbC0CLuSVRyrYiWlZYTl5bgz6TWlfB/zJY54di4ksVu8C50gE/hxMcUYAYYYZETmIfrw0i8rauQPFPNnWZVcRWaVDTRWSJIih0fUNakel5gQPS4jzYbZ/7991RM+b6m6ww8NL4bx0QO2HSjkDeP72DAKJ2B9hqtsJX/1CIY/Rc9XNPchOLfg4rqixfbgchs6n9SoFi1KVnFLIgHvZ9AcgbZbsC+Welbe5/QRwpvyVTewfwC9ct659At2bGftHD0UJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAGlJREFUGJWt0LEOgkAQhOFPShspSWyvMPFxKaDh0XgOq8tZuCqBIzRMMsXmn51slr9GlJVfmHC9LII3LGfoomCGHrnSloM9olnGE+3KKVgbi0oMNX1ZaXYCG50aLBj4HJwqgXuwn47eA95vgSGy6zr7OwAAAABJRU5ErkJggg=='); - --gfx-minBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAaxaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPg0KICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPg0KICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDItMTdUMTM6MDA6MzJaIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTE3VDEzOjAwOjMyWiIgeG1wOk1vZGlmeURhdGU9IjIwMjAtMDItMTdUMTM6MDA6MzJaIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg1ZDBlZGIwLWZkMDAtYjY0Zi05ZWZiLWEyYjQ1ODcwNWE4YSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmEzMDAxZTFhLTI5MTktZTQ0OS1iOTRjLWMyMTIyNDhhOWY4YSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjc4N2Y3OTljLTRiMTEtZTU0YS1iMjBkLTY4NjE3ZWQ5YzVlMiIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciPg0KICAgICAgPHhtcE1NOkhpc3Rvcnk+DQogICAgICAgIDxyZGY6U2VxPg0KICAgICAgICAgIDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjc4N2Y3OTljLTRiMTEtZTU0YS1iMjBkLTY4NjE3ZWQ5YzVlMiIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxMzowMDozMloiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgLz4NCiAgICAgICAgICA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODVkMGVkYjAtZmQwMC1iNjRmLTllZmItYTJiNDU4NzA1YThhIiBzdEV2dDp3aGVuPSIyMDIwLTAyLTE3VDEzOjAwOjMyWiIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIiAvPg0KICAgICAgICA8L3JkZjpTZXE+DQogICAgICA8L3htcE1NOkhpc3Rvcnk+DQogICAgICA8cGhvdG9zaG9wOlRleHRMYXllcnM+DQogICAgICAgIDxyZGY6QmFnPg0KICAgICAgICAgIDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qShIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKEiIC8+DQogICAgICAgIDwvcmRmOkJhZz4NCiAgICAgIDwvcGhvdG9zaG9wOlRleHRMYXllcnM+DQogICAgPC9yZGY6RGVzY3JpcHRpb24+DQogIDwvcmRmOlJERj4NCjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0iciI/PmeGdrgAAAAVSURBVChTYxhOgBGI/0OYQx0wMAAAyp4BAZ26NiYAAAAASUVORK5CYII='); - } -} - -@media (prefers-color-scheme: dark) { - :root { - --gfx-closeBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAIn2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgZGM6Zm9ybWF0PSJpbWFnZS9wbmciCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEyOjU1OjM3WiIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMTAtMDVUMTQ6Mjc6MzYtMDc6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTEwLTA1VDE0OjI3OjM2LTA3OjAwIgogICB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTk5OWM2NWYtNDhhOS0wNjQyLWI2MTktZmJlYTExMmUxOGZiIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5MzMyOWNhLWNkNjctMzY0Zi04MzU1LTY5N2ZmYzI0ZDdlZCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyZjQwYmU3LTE0YzItZjc0Ni1hZmE1LWQxYmIxNzAyMjM4OCIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qSiIgogICAgICBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0iY3JlYXRlZCIKICAgICAgeG1wTU06aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmY0MGJlNy0xNGMyLWY3NDYtYWZhNS1kMWJiMTcwMjIzODgiCiAgICAgIHhtcE1NOnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIKICAgICAgeG1wTU06d2hlbj0iMjAyMC0wMi0xN1QxMjo1NTozN1oiLz4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0ic2F2ZWQiCiAgICAgIHhtcE1NOmNoYW5nZWQ9Ii8iCiAgICAgIHhtcE1NOmluc3RhbmNlSUQ9InhtcC5paWQ6NjkzMzI5Y2EtY2Q2Ny0zNjRmLTgzNTUtNjk3ZmZjMjRkN2VkIgogICAgICB4bXBNTTpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgICAgIHhtcE1NOndoZW49IjIwMjAtMDItMTdUMTI6NTU6MzdaIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjEwLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMTAtMDVUMTQ6Mjc6MzYtMDc6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PmN2D9EAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2lhmGFRQUODhDVZlELU0qD0C6pBDbJa9OWPQO3xnhHRGrQKBVFLv4b6C2oNmoOgKIJoC5qLWkpe56mgRJ7Luedzv/eew73ngiWcVjJ6/QBksjktOOF3zUcWXLZX7DTQQSu+qKKrM6HxMDXt64E6M971mbVqn/vXmpbjugJ1jcKjiqrlhCeFp9dzqsm7wu1KKrosfC7s0eSCwvemHivxm8nJEv+YrIWDAbC0CLuSVRyrYiWlZYTl5bgz6TWlfB/zJY54di4ksVu8C50gE/hxMcUYAYYYZETmIfrw0i8rauQPFPNnWZVcRWaVDTRWSJIih0fUNakel5gQPS4jzYbZ/7991RM+b6m6ww8NL4bx0QO2HSjkDeP72DAKJ2B9hqtsJX/1CIY/Rc9XNPchOLfg4rqixfbgchs6n9SoFi1KVnFLIgHvZ9AcgbZbsC+Welbe5/QRwpvyVTewfwC9ct659At2bGftHD0UJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAEtJREFUGJWNkMENwDAIA1FGY/8hkn8HOAqPfBsFKvz1yZYtbqwAlUIB6saUAH2NJ4MvL4PLgK/x13LAGTSqEaVa1a0x7XvcmI3D1wbntaRbB2haYwAAAABJRU5ErkJggg=='); - --gfx-maxBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAIn2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgZGM6Zm9ybWF0PSJpbWFnZS9wbmciCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEyOjU1OjM3WiIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMTAtMDVUMTQ6Mjc6NTgtMDc6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTEwLTA1VDE0OjI3OjU4LTA3OjAwIgogICB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTk5OWM2NWYtNDhhOS0wNjQyLWI2MTktZmJlYTExMmUxOGZiIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5MzMyOWNhLWNkNjctMzY0Zi04MzU1LTY5N2ZmYzI0ZDdlZCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyZjQwYmU3LTE0YzItZjc0Ni1hZmE1LWQxYmIxNzAyMjM4OCIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qSiIgogICAgICBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0iY3JlYXRlZCIKICAgICAgeG1wTU06aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmY0MGJlNy0xNGMyLWY3NDYtYWZhNS1kMWJiMTcwMjIzODgiCiAgICAgIHhtcE1NOnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIKICAgICAgeG1wTU06d2hlbj0iMjAyMC0wMi0xN1QxMjo1NTozN1oiLz4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0ic2F2ZWQiCiAgICAgIHhtcE1NOmNoYW5nZWQ9Ii8iCiAgICAgIHhtcE1NOmluc3RhbmNlSUQ9InhtcC5paWQ6NjkzMzI5Y2EtY2Q2Ny0zNjRmLTgzNTUtNjk3ZmZjMjRkN2VkIgogICAgICB4bXBNTTpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgICAgIHhtcE1NOndoZW49IjIwMjAtMDItMTdUMTI6NTU6MzdaIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjEwLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMTAtMDVUMTQ6Mjc6NTgtMDc6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PlwQMBUAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2lhmGFRQUODhDVZlELU0qD0C6pBDbJa9OWPQO3xnhHRGrQKBVFLv4b6C2oNmoOgKIJoC5qLWkpe56mgRJ7Luedzv/eew73ngiWcVjJ6/QBksjktOOF3zUcWXLZX7DTQQSu+qKKrM6HxMDXt64E6M971mbVqn/vXmpbjugJ1jcKjiqrlhCeFp9dzqsm7wu1KKrosfC7s0eSCwvemHivxm8nJEv+YrIWDAbC0CLuSVRyrYiWlZYTl5bgz6TWlfB/zJY54di4ksVu8C50gE/hxMcUYAYYYZETmIfrw0i8rauQPFPNnWZVcRWaVDTRWSJIih0fUNakel5gQPS4jzYbZ/7991RM+b6m6ww8NL4bx0QO2HSjkDeP72DAKJ2B9hqtsJX/1CIY/Rc9XNPchOLfg4rqixfbgchs6n9SoFi1KVnFLIgHvZ9AcgbZbsC+Welbe5/QRwpvyVTewfwC9ct659At2bGftHD0UJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAFBJREFUGJXV0LERgCAUBNHVsQADM3uwWWbojQIs47MEGhgAuS/eSw41qeFYqGlRA7iAm74DKLyrfRABoLrOgq+/hJXngi71BOoGZKBMHqhAbtMvQzel9pREAAAAAElFTkSuQmCC'); - --gfx-restoreBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAIn2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgZGM6Zm9ybWF0PSJpbWFnZS9wbmciCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEyOjU1OjM3WiIKICAgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMTAtMDVUMTQ6Mjc6MjQtMDc6MDAiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDIxLTEwLTA1VDE0OjI3OjI0LTA3OjAwIgogICB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTk5OWM2NWYtNDhhOS0wNjQyLWI2MTktZmJlYTExMmUxOGZiIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5MzMyOWNhLWNkNjctMzY0Zi04MzU1LTY5N2ZmYzI0ZDdlZCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyZjQwYmU3LTE0YzItZjc0Ni1hZmE1LWQxYmIxNzAyMjM4OCIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0i7qSiIgogICAgICBwaG90b3Nob3A6TGF5ZXJUZXh0PSLupKIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0iY3JlYXRlZCIKICAgICAgeG1wTU06aW5zdGFuY2VJRD0ieG1wLmlpZDo4MmY0MGJlNy0xNGMyLWY3NDYtYWZhNS1kMWJiMTcwMjIzODgiCiAgICAgIHhtcE1NOnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIKICAgICAgeG1wTU06d2hlbj0iMjAyMC0wMi0xN1QxMjo1NTozN1oiLz4KICAgICA8cmRmOmxpCiAgICAgIHhtcE1NOmFjdGlvbj0ic2F2ZWQiCiAgICAgIHhtcE1NOmNoYW5nZWQ9Ii8iCiAgICAgIHhtcE1NOmluc3RhbmNlSUQ9InhtcC5paWQ6NjkzMzI5Y2EtY2Q2Ny0zNjRmLTgzNTUtNjk3ZmZjMjRkN2VkIgogICAgICB4bXBNTTpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiCiAgICAgIHhtcE1NOndoZW49IjIwMjAtMDItMTdUMTI6NTU6MzdaIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZmZpbml0eSBQaG90byAxLjEwLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMTAtMDVUMTQ6Mjc6MjQtMDc6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PqiFCFwAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2lhmGFRQUODhDVZlELU0qD0C6pBDbJa9OWPQO3xnhHRGrQKBVFLv4b6C2oNmoOgKIJoC5qLWkpe56mgRJ7Luedzv/eew73ngiWcVjJ6/QBksjktOOF3zUcWXLZX7DTQQSu+qKKrM6HxMDXt64E6M971mbVqn/vXmpbjugJ1jcKjiqrlhCeFp9dzqsm7wu1KKrosfC7s0eSCwvemHivxm8nJEv+YrIWDAbC0CLuSVRyrYiWlZYTl5bgz6TWlfB/zJY54di4ksVu8C50gE/hxMcUYAYYYZETmIfrw0i8rauQPFPNnWZVcRWaVDTRWSJIih0fUNakel5gQPS4jzYbZ/7991RM+b6m6ww8NL4bx0QO2HSjkDeP72DAKJ2B9hqtsJX/1CIY/Rc9XNPchOLfg4rqixfbgchs6n9SoFi1KVnFLIgHvZ9AcgbZbsC+Welbe5/QRwpvyVTewfwC9ct659At2bGftHD0UJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHNJREFUGJWtkKEOwlAMRc+QM5AwQYJFoPjZCWb2YRPIaeRTLwfTLQs0UxzX3tumtxCog78UdVTbZmM8AmsdXIABeKH2ak221dDuamnUCjyA+WtbB0zAGXgT0ycSFk31kBky/moUeBLpbsl91wi6Nnbfs/g+7XOQq6ifjfkAAAAASUVORK5CYII='); - --gfx-minBtn: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGOmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTAyLTE3VDEzOjAwOjMyWiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0wMi0xN1QxMzowMDozMloiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTE3VDEzOjAwOjMyWiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4NWQwZWRiMC1mZDAwLWI2NGYtOWVmYi1hMmI0NTg3MDVhOGEiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDphMzAwMWUxYS0yOTE5LWU0NDktYjk0Yy1jMjEyMjQ4YTlmOGEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3ODdmNzk5Yy00YjExLWU1NGEtYjIwZC02ODYxN2VkOWM1ZTIiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3ODdmNzk5Yy00YjExLWU1NGEtYjIwZC02ODYxN2VkOWM1ZTIiIHN0RXZ0OndoZW49IjIwMjAtMDItMTdUMTM6MDA6MzJaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjg1ZDBlZGIwLWZkMDAtYjY0Zi05ZWZiLWEyYjQ1ODcwNWE4YSIgc3RFdnQ6d2hlbj0iMjAyMC0wMi0xN1QxMzowMDozMloiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSLupKEiIHBob3Rvc2hvcDpMYXllclRleHQ9Iu6koSIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+FwvRXAAAABdJREFUGNNj/P//PwMxgHGIKPw/XDwDAOr1HuzlELLnAAAAAElFTkSuQmCC'); - } -} \ No newline at end of file diff --git a/docs/app-win/vue.js b/docs/app-win/vue.js deleted file mode 100644 index d998ff72..00000000 --- a/docs/app-win/vue.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Vue.js v2.6.14 - * (c) 2014-2021 Evan You - * Released under the MIT License. - */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){"use strict";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function o(e){return null!==e&&"object"==typeof e}var a=Object.prototype.toString;function s(e){return"[object Object]"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():""})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\B([A-Z])/g,C=g(function(e){return e.replace(w,"-$1").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf("edge/")>0,G=(J&&J.indexOf("android"),J&&/iphone|ipad|ipod|ios/.test(J)||"ios"===K),X=(J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\/(\d+)/)),Y={}.watch,Q=!1;if(V)try{var ee={};Object.defineProperty(ee,"passive",{get:function(){Q=!0}}),window.addEventListener("test-passive",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!V&&!z&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},ne=V&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return"function"==typeof e&&/native code/.test(e.toString())}var ie,oe="undefined"!=typeof Symbol&&re(Symbol)&&"undefined"!=typeof Reflect&&re(Reflect.ownKeys);ie="undefined"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,"default"))a=!1;else if(""===a||a===C(e)){var c=Re(String,i.type);(c<0||s0&&(ct((u=e(u,(a||"")+"_"+c))[0])&&ct(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?ct(f)?s[l]=he(f.text+u):""!==u&&s.push(he(u)):ct(u)&&ct(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key="__vlist"+a+"_"+c+"__"),s.push(u)));return s}(e):void 0}function ct(e){return n(e)&&n(e.text)&&!1===e.isComment}function ut(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=vt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=ht(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,"$stable",a),R(i,"$key",s),R(i,"$hasNormal",o),i}function vt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({}),t=(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:st(e))&&e[0];return e&&(!t||1===e.length&&t.isComment&&!pt(t))?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function ht(e,t){return function(){return e[t]}}function mt(e,t){var r,i,a,s,c;if(Array.isArray(e)||"string"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent("Event").timeStamp&&(cn=function(){return un.now()})}function ln(){var e,t;for(sn=cn(),on=!0,en.sort(function(e,t){return e.id-t.id}),an=0;anan&&en[n].id>e.id;)n--;en.splice(n+1,0,e)}else en.push(e);rn||(rn=!0,Qe(ln))}}(this)},pn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user){var n='callback for watcher "'+this.expression+'"';Be(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},pn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},pn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},pn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var dn={enumerable:!0,configurable:!0,get:S,set:S};function vn(e,t,n){dn.get=function(){return this[t][n]},dn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,dn)}function hn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Ie(o,t,n,e);xe(r,o,a),o in e||vn(e,"_props",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data="function"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return He(e,t,"data()"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&vn(e,"_data",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;r||(n[i]=new pn(e,a||S,S,mn)),i in e||yn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===a.call(n)&&e.test(t));var n}function On(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=a.name;s&&!t(s)&&Sn(n,o,r,i)}}}function Sn(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=$n++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De(wn(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Wt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=lt(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Ht(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Ht(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,"$attrs",o&&o.attrs||e,null,!0),xe(t,"$listeners",n._parentListeners||e,null,!0)}(n),Qt(n,"beforeCreate"),function(e){var t=ut(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),hn(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),Qt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(Cn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return bn(this,e,t,n);(n=n||{}).user=!0;var r=new pn(this,e,t,n);if(n.immediate){var i='callback for immediate watcher "'+r.expression+'"';le(),Be(t,this,[r.value],this,i),fe()}return function(){r.teardown()}}}(Cn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for "'+e+'"',i=0,o=t.length;iparseInt(this.max)&&Sn(e,t[0],t,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Sn(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",function(t){On(e,function(e){return An(t,e)})}),this.$watch("exclude",function(t){On(e,function(e){return!An(t,e)})})},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=zt(e),n=t&&t.componentOptions;if(n){var r=kn(n),i=this.include,o=this.exclude;if(i&&(!r||!An(i,r))||o&&r&&An(o,r))return t;var a=this.cache,s=this.keys,c=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;a[c]?(t.componentInstance=a[c].componentInstance,h(s,c),s.push(c)):(this.vnodeToCache=t,this.keyToCache=c),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Qe,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),I.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,A(e.options.components,Nn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),xn(e),function(e){I.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(e)}(Cn),Object.defineProperty(Cn.prototype,"$isServer",{get:te}),Object.defineProperty(Cn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Cn,"FunctionalRenderContext",{value:Et}),Cn.version="2.6.14";var En=p("style,class"),jn=p("input,textarea,option,select,progress"),Dn=function(e,t,n){return"value"===n&&jn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Ln=p("contenteditable,draggable,spellcheck"),In=p("events,caret,typing,plaintext-only"),Mn=function(e,t){return Bn(t)||"false"===t?"false":"contenteditable"===e&&In(t)?t:"true"},Fn=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Pn="http://www.w3.org/1999/xlink",Rn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Hn=function(e){return Rn(e)?e.slice(6,e.length):""},Bn=function(e){return null==e||!1===e};function Un(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Vn(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Vn(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Kn(t));return""}(t.staticClass,t.class)}function Vn(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+" "+t:e:t||""}function Kn(e){return Array.isArray(e)?function(e){for(var t,r="",i=0,o=e.length;i-1?mr(e,t,n):Fn(t)?Bn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Ln(t)?e.setAttribute(t,Mn(t,n)):Rn(t)?Bn(n)?e.removeAttributeNS(Pn,Hn(t)):e.setAttributeNS(Pn,t,n):mr(e,t,n)}function mr(e,t,n){if(Bn(n))e.removeAttribute(t);else{if(q&&!W&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var yr={create:vr,update:vr};function gr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Un(r),c=i._transitionClasses;n(c)&&(s=zn(s,Kn(c))),s!==i._prevClass&&(i.setAttribute("class",s),i._prevClass=s)}}var _r,br,$r,wr,Cr,xr,kr={create:gr,update:gr},Ar=/[\w).+\-_$\]]/;function Or(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(h=e.charAt(v));v--);h&&Ar.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,wr),key:'"'+e.slice(wr+1)+'"'}:{exp:e,key:null};br=e,wr=Cr=xr=0;for(;!zr();)Kr($r=Vr())?qr($r):91===$r&&Jr($r);return{exp:e.slice(0,Cr),key:e.slice(Cr+1,xr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Vr(){return br.charCodeAt(++wr)}function zr(){return wr>=_r}function Kr(e){return 34===e||39===e}function Jr(e){var t=1;for(Cr=wr;!zr();)if(Kr(e=Vr()))qr(e);else if(91===e&&t++,93===e&&t--,0===t){xr=wr;break}}function qr(e){for(var t=e;!zr()&&(e=Vr())!==t;);}var Wr,Zr="__r",Gr="__c";function Xr(e,t,n){var r=Wr;return function i(){null!==t.apply(null,arguments)&&ei(e,i,n,r)}}var Yr=Ke&&!(X&&Number(X[1])<=53);function Qr(e,t,n,r){if(Yr){var i=sn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}Wr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function ei(e,t,n,r){(r||Wr).removeEventListener(e,t._wrapper||t,n)}function ti(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};Wr=r.elm,function(e){if(n(e[Zr])){var t=q?"change":"input";e[t]=[].concat(e[Zr],e[t]||[]),delete e[Zr]}n(e[Gr])&&(e.change=[].concat(e[Gr],e.change||[]),delete e[Gr])}(i),it(i,o,Qr,ei,Xr,r.context),Wr=void 0}}var ni,ri={create:ti,update:ti};function ii(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]="");for(i in c){if(o=c[i],"textContent"===i||"innerHTML"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===i&&"PROGRESS"!==a.tagName){a._value=o;var u=t(o)?"":String(o);oi(a,u)&&(a.value=u)}else if("innerHTML"===i&&Wn(a.tagName)&&t(a.innerHTML)){(ni=ni||document.createElement("div")).innerHTML=""+o+"";for(var l=ni.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function oi(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var ai={create:ii,update:ii},si=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function ci(e){var t=ui(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ui(e){return Array.isArray(e)?O(e):"string"==typeof e?si(e):e}var li,fi=/^--/,pi=/\s*!important$/,di=function(e,t,n){if(fi.test(t))e.style.setProperty(t,n);else if(pi.test(n))e.style.setProperty(C(t),n.replace(pi,""),"important");else{var r=hi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(gi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function bi(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(gi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function $i(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,wi(e.name||"v")),A(t,e),t}return"string"==typeof e?wi(e):void 0}}var wi=g(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),Ci=V&&!W,xi="transition",ki="animation",Ai="transition",Oi="transitionend",Si="animation",Ti="animationend";Ci&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ai="WebkitTransition",Oi="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Si="WebkitAnimation",Ti="webkitAnimationEnd"));var Ni=V?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ni(function(){Ni(e)})}function ji(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),_i(e,t))}function Di(e,t){e._transitionClasses&&h(e._transitionClasses,t),bi(e,t)}function Li(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===xi?Oi:Ti,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=xi,l=a,f=o.length):t===ki?u>0&&(n=ki,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?xi:ki:null)?n===xi?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===xi&&Ii.test(r[Ai+"Property"])}}function Fi(e,t){for(;e.length1}function Vi(e,t){!0!==t.data.show&&Ri(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,""),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)&&u.setTextContent(p,""):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(E(Zi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Wi(e,t){return t.every(function(t){return!E(t,e)})}function Zi(e){return"_value"in e?e._value:e.value}function Gi(e){e.target.composing=!0}function Xi(e){e.target.composing&&(e.target.composing=!1,Yi(e.target,"input"))}function Yi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Qi(e){return!e.componentInstance||e.data&&e.data.transition?e:Qi(e.componentInstance._vnode)}var eo={model:Ki,show:{bind:function(e,t,n){var r=t.value,i=(n=Qi(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,Ri(n,function(){e.style.display=o})):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Qi(n)).data&&n.data.transition?(n.data.show=!0,r?Ri(n,function(){e.style.display=e.__vOriginalDisplay}):Hi(n,function(){e.style.display="none"})):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},to={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function no(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?no(zt(t.children)):e}function ro(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function io(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var oo=function(e){return e.tag||pt(e)},ao=function(e){return"show"===e.name},so={name:"transition",props:to,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(oo)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=no(o);if(!a)return o;if(this._leaving)return io(e,o);var s="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=ro(this),u=this._vnode,l=no(u);if(a.data.directives&&a.data.directives.some(ao)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!pt(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if("out-in"===r)return this._leaving=!0,ot(f,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),io(e,o);if("in-out"===r){if(pt(a))return u;var p,d=function(){p()};ot(c,"afterEnter",d),ot(c,"enterCancelled",d),ot(f,"delayLeave",function(e){p=e})}}return o}}},co=A({tag:String,moveClass:String},to);function uo(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function lo(e){e.data.newPos=e.elm.getBoundingClientRect()}function fo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete co.mode;var po={Transition:so,TransitionGroup:{props:co,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Gt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=ro(this),s=0;s-1?Xn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Xn[e]=/HTMLUnknownElement/.test(t.toString())},A(Cn.options.directives,eo),A(Cn.options.components,po),Cn.prototype.__patch__=V?zi:S,Cn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Qt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new pn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Qt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Qt(e,"mounted")),e}(this,e=e&&V?Qn(e):void 0,t)},V&&setTimeout(function(){F.devtools&&ne&&ne.emit("init",Cn)},0);var vo=/\{\{((?:.|\r?\n)+?)\}\}/g,ho=/[-.*+?^${}()|[\]\/\\]/g,mo=g(function(e){var t=e[0].replace(ho,"\\$&"),n=e[1].replace(ho,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")});var yo={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=Pr(e,"class");n&&(e.staticClass=JSON.stringify(n));var r=Fr(e,"class",!1);r&&(e.classBinding=r)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}};var go,_o={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=Pr(e,"style");n&&(e.staticStyle=JSON.stringify(si(n)));var r=Fr(e,"style",!1);r&&(e.styleBinding=r)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},bo=function(e){return(go=go||document.createElement("div")).innerHTML=e,go.textContent},$o=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),wo=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Co=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),xo=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ko=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ao="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+P.source+"]*",Oo="((?:"+Ao+"\\:)?"+Ao+")",So=new RegExp("^<"+Oo),To=/^\s*(\/?)>/,No=new RegExp("^<\\/"+Oo+"[^>]*>"),Eo=/^]+>/i,jo=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Fo=/&(?:lt|gt|quot|amp|#39);/g,Po=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Ro=p("pre,textarea",!0),Ho=function(e,t){return e&&Ro(e)&&"\n"===t[0]};function Bo(e,t){var n=t?Po:Fo;return e.replace(n,function(e){return Mo[e]})}var Uo,Vo,zo,Ko,Jo,qo,Wo,Zo,Go=/^@|^v-on:/,Xo=/^v-|^@|^:|^#/,Yo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Qo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,ea=/^\(|\)$/g,ta=/^\[.*\]$/,na=/:(.*)$/,ra=/^:|^\.|^v-bind:/,ia=/\.[^.\]]+(?=[^\]]*$)/g,oa=/^v-slot(:|$)|^#/,aa=/[\r\n]/,sa=/[ \f\t\r\n]+/g,ca=g(bo),ua="_empty_";function la(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ya(t),rawAttrsMap:{},parent:n,children:[]}}function fa(e,t){Uo=t.warn||Tr,qo=t.isPreTag||T,Wo=t.mustUseProp||T,Zo=t.getTagNamespace||T;t.isReservedTag;zo=Nr(t.modules,"transformNode"),Ko=Nr(t.modules,"preTransformNode"),Jo=Nr(t.modules,"postTransformNode"),Vo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=pa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&va(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&va(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),qo(e.tag)&&(c=!1);for(var f=0;f]*>)","i")),p=e.replace(f,function(e,n,r){return u=r.length,Lo(l)||"noscript"===l||(n=n.replace(//g,"$1").replace(//g,"$1")),Ho(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf("<");if(0===d){if(jo.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(Do.test(e)){var h=e.indexOf("]>");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(No);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ho(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(No.test($)||So.test($)||jo.test($)||Do.test($)||(w=$.indexOf("<",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(So);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(To))&&(r=e.match(ko)||e.match(xo));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&("p"===r&&Co(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,o):"p"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Uo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Zo(e);q&&"svg"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Or(r[1].trim());a.push("_s("+u+")"),s.push({"@binding":u}),c=i+r[0].length}return c-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Mr(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Ur(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Ur(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Ur(t,"$$c")+"}",null,!0)}(e,r,i);else if("input"===o&&"radio"===a)!function(e,t,n){var r=n&&n.number,i=Fr(e,"value")||"null";Er(e,"checked","_q("+t+","+(i=r?"_n("+i+")":i)+")"),Mr(e,"change",Ur(t,i),null,!0)}(e,r,i);else if("input"===o||"textarea"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?Zr:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=Ur(t,l);c&&(f="if($event.target.composing)return;"+f),Er(e,"value","("+t+")"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,"blur","$forceUpdate()")}(e,r,i);else if(!F.isReservedTag(o))return Br(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&Er(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:$o,mustUseProp:Dn,canBeLeftOpenTag:wo,isReservedTag:Zn,getTagNamespace:Gn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}($a)},ka=g(function(e){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))});function Aa(e,t){e&&(wa=ka(t.staticKeys||""),Ca=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!Ca(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(wa)))}(t);if(1===t.type){if(!Ca(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function(?:\s+[\w$]+)?\s*\(/,Sa=/\([^)]*?\);*$/,Ta=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Na={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},ja=function(e){return"if("+e+")return null;"},Da={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:ja("$event.target !== $event.currentTarget"),ctrl:ja("!$event.ctrlKey"),shift:ja("!$event.shiftKey"),alt:ja("!$event.altKey"),meta:ja("!$event.metaKey"),left:ja("'button' in $event && $event.button !== 0"),middle:ja("'button' in $event && $event.button !== 1"),right:ja("'button' in $event && $event.button !== 2")};function La(e,t){var n=t?"nativeOn:":"on:",r="",i="";for(var o in e){var a=Ia(e[o]);e[o]&&e[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?n+"_d("+r+",["+i.slice(0,-1)+"])":n+r}function Ia(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return Ia(e)}).join(",")+"]";var t=Ta.test(e.value),n=Oa.test(e.value),r=Ta.test(e.value.replace(Sa,""));if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(Da[s])o+=Da[s],Na[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=ja(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Ma).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(t?"return "+e.value+".apply(null, arguments)":n?"return ("+e.value+").apply(null, arguments)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function Ma(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Na[e],r=Ea[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var Fa={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:S},Pa=function(e){this.options=e,this.warn=e.warn||Tr,this.transforms=Nr(e.modules,"transformCode"),this.dataGenFns=Nr(e.modules,"genData"),this.directives=A(A({},Fa),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ra(e,t){var n=new Pa(t);return{render:"with(this){return "+(e?"script"===e.tag?"null":Ha(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Ha(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ba(e,t);if(e.once&&!e.onceProcessed)return Ua(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Va(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=Wa(e,t),i="_t("+n+(r?",function(){return "+r+"}":""),o=e.attrs||e.dynamicAttrs?Xa((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:Wa(t,n,!0);return"_c("+e+","+Ka(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Ka(e,t));var i=e.inlineTemplate?null:Wa(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Ra(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}(e,t);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+Xa(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ja(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ja))}function qa(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Va(e,t,qa,"null");if(e.for&&!e.forProcessed)return za(e,t,qa);var r=e.slotScope===ua?"":String(e.slotScope),i="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(Wa(e,t)||"undefined")+":undefined":Wa(e,t)||"undefined":Ha(e,t))+"}",o=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+i+o+"}"}function Wa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||Ha)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
',ns.innerHTML.indexOf(" ")>0}var as=!!V&&os(!1),ss=!!V&&os(!0),cs=g(function(e){var t=Qn(e);return t&&t.innerHTML}),us=Cn.prototype.$mount;return Cn.prototype.$mount=function(e,t){if((e=e&&Qn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=cs(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=is(r,{outputSourceRange:!1,shouldDecodeNewlines:as,shouldDecodeNewlinesForHref:ss,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return us.call(this,e,t)},Cn.compile=is,Cn}); \ No newline at end of file diff --git a/docs/app-win/vuedraggable.umd.min.js b/docs/app-win/vuedraggable.umd.min.js deleted file mode 100644 index dee16afe..00000000 --- a/docs/app-win/vuedraggable.umd.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(t,n){"object"===typeof exports&&"object"===typeof module?module.exports=n(require("sortablejs")):"function"===typeof define&&define.amd?define(["sortablejs"],n):"object"===typeof exports?exports["vuedraggable"]=n(require("sortablejs")):t["vuedraggable"]=n(t["Sortable"])})("undefined"!==typeof self?self:this,function(t){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t["default"]}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s="fb15")}({"02f4":function(t,n,e){var r=e("4588"),o=e("be13");t.exports=function(t){return function(n,e){var i,u,c=String(o(n)),a=r(e),f=c.length;return a<0||a>=f?t?"":void 0:(i=c.charCodeAt(a),i<55296||i>56319||a+1===f||(u=c.charCodeAt(a+1))<56320||u>57343?t?c.charAt(a):i:t?c.slice(a,a+2):u-56320+(i-55296<<10)+65536)}}},"0390":function(t,n,e){"use strict";var r=e("02f4")(!0);t.exports=function(t,n,e){return n+(e?r(t,n).length:1)}},"07e3":function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},"0bfb":function(t,n,e){"use strict";var r=e("cb7c");t.exports=function(){var t=r(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},"0fc9":function(t,n,e){var r=e("3a38"),o=Math.max,i=Math.min;t.exports=function(t,n){return t=r(t),t<0?o(t+n,0):i(t,n)}},1654:function(t,n,e){"use strict";var r=e("71c1")(!0);e("30f1")(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,n=this._t,e=this._i;return e>=n.length?{value:void 0,done:!0}:(t=r(n,e),this._i+=t.length,{value:t,done:!1})})},1691:function(t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},"1af6":function(t,n,e){var r=e("63b6");r(r.S,"Array",{isArray:e("9003")})},"1bc3":function(t,n,e){var r=e("f772");t.exports=function(t,n){if(!r(t))return t;var e,o;if(n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;if("function"==typeof(e=t.valueOf)&&!r(o=e.call(t)))return o;if(!n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},"1ec9":function(t,n,e){var r=e("f772"),o=e("e53d").document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},"20fd":function(t,n,e){"use strict";var r=e("d9f6"),o=e("aebd");t.exports=function(t,n,e){n in t?r.f(t,n,o(0,e)):t[n]=e}},"214f":function(t,n,e){"use strict";e("b0c5");var r=e("2aba"),o=e("32e9"),i=e("79e5"),u=e("be13"),c=e("2b4c"),a=e("520a"),f=c("species"),s=!i(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),l=function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var e="ab".split(t);return 2===e.length&&"a"===e[0]&&"b"===e[1]}();t.exports=function(t,n,e){var p=c(t),d=!i(function(){var n={};return n[p]=function(){return 7},7!=""[t](n)}),v=d?!i(function(){var n=!1,e=/a/;return e.exec=function(){return n=!0,null},"split"===t&&(e.constructor={},e.constructor[f]=function(){return e}),e[p](""),!n}):void 0;if(!d||!v||"replace"===t&&!s||"split"===t&&!l){var h=/./[p],b=e(u,p,""[t],function(t,n,e,r,o){return n.exec===a?d&&!o?{done:!0,value:h.call(n,e,r)}:{done:!0,value:t.call(e,n,r)}:{done:!1}}),g=b[0],y=b[1];r(String.prototype,t,g),o(RegExp.prototype,p,2==n?function(t,n){return y.call(t,this,n)}:function(t){return y.call(t,this)})}}},"230e":function(t,n,e){var r=e("d3f4"),o=e("7726").document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},"23c6":function(t,n,e){var r=e("2d95"),o=e("2b4c")("toStringTag"),i="Arguments"==r(function(){return arguments}()),u=function(t,n){try{return t[n]}catch(e){}};t.exports=function(t){var n,e,c;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(e=u(n=Object(t),o))?e:i?r(n):"Object"==(c=r(n))&&"function"==typeof n.callee?"Arguments":c}},"241e":function(t,n,e){var r=e("25eb");t.exports=function(t){return Object(r(t))}},"25eb":function(t,n){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},"294c":function(t,n){t.exports=function(t){try{return!!t()}catch(n){return!0}}},"2aba":function(t,n,e){var r=e("7726"),o=e("32e9"),i=e("69a8"),u=e("ca5a")("src"),c=e("fa5b"),a="toString",f=(""+c).split(a);e("8378").inspectSource=function(t){return c.call(t)},(t.exports=function(t,n,e,c){var a="function"==typeof e;a&&(i(e,"name")||o(e,"name",n)),t[n]!==e&&(a&&(i(e,u)||o(e,u,t[n]?""+t[n]:f.join(String(n)))),t===r?t[n]=e:c?t[n]?t[n]=e:o(t,n,e):(delete t[n],o(t,n,e)))})(Function.prototype,a,function(){return"function"==typeof this&&this[u]||c.call(this)})},"2b4c":function(t,n,e){var r=e("5537")("wks"),o=e("ca5a"),i=e("7726").Symbol,u="function"==typeof i,c=t.exports=function(t){return r[t]||(r[t]=u&&i[t]||(u?i:o)("Symbol."+t))};c.store=r},"2d00":function(t,n){t.exports=!1},"2d95":function(t,n){var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},"2fdb":function(t,n,e){"use strict";var r=e("5ca1"),o=e("d2c8"),i="includes";r(r.P+r.F*e("5147")(i),"String",{includes:function(t){return!!~o(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},"30f1":function(t,n,e){"use strict";var r=e("b8e3"),o=e("63b6"),i=e("9138"),u=e("35e8"),c=e("481b"),a=e("8f60"),f=e("45f2"),s=e("53e2"),l=e("5168")("iterator"),p=!([].keys&&"next"in[].keys()),d="@@iterator",v="keys",h="values",b=function(){return this};t.exports=function(t,n,e,g,y,x,m){a(e,n,g);var w,O,S,j=function(t){if(!p&&t in C)return C[t];switch(t){case v:return function(){return new e(this,t)};case h:return function(){return new e(this,t)}}return function(){return new e(this,t)}},_=n+" Iterator",M=y==h,T=!1,C=t.prototype,E=C[l]||C[d]||y&&C[y],A=E||j(y),P=y?M?j("entries"):A:void 0,I="Array"==n&&C.entries||E;if(I&&(S=s(I.call(new t)),S!==Object.prototype&&S.next&&(f(S,_,!0),r||"function"==typeof S[l]||u(S,l,b))),M&&E&&E.name!==h&&(T=!0,A=function(){return E.call(this)}),r&&!m||!p&&!T&&C[l]||u(C,l,A),c[n]=A,c[_]=b,y)if(w={values:M?A:j(h),keys:x?A:j(v),entries:P},m)for(O in w)O in C||i(C,O,w[O]);else o(o.P+o.F*(p||T),n,w);return w}},"32a6":function(t,n,e){var r=e("241e"),o=e("c3a1");e("ce7e")("keys",function(){return function(t){return o(r(t))}})},"32e9":function(t,n,e){var r=e("86cc"),o=e("4630");t.exports=e("9e1e")?function(t,n,e){return r.f(t,n,o(1,e))}:function(t,n,e){return t[n]=e,t}},"32fc":function(t,n,e){var r=e("e53d").document;t.exports=r&&r.documentElement},"335c":function(t,n,e){var r=e("6b4c");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},"355d":function(t,n){n.f={}.propertyIsEnumerable},"35e8":function(t,n,e){var r=e("d9f6"),o=e("aebd");t.exports=e("8e60")?function(t,n,e){return r.f(t,n,o(1,e))}:function(t,n,e){return t[n]=e,t}},"36c3":function(t,n,e){var r=e("335c"),o=e("25eb");t.exports=function(t){return r(o(t))}},3702:function(t,n,e){var r=e("481b"),o=e("5168")("iterator"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||i[o]===t)}},"3a38":function(t,n){var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},"40c3":function(t,n,e){var r=e("6b4c"),o=e("5168")("toStringTag"),i="Arguments"==r(function(){return arguments}()),u=function(t,n){try{return t[n]}catch(e){}};t.exports=function(t){var n,e,c;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(e=u(n=Object(t),o))?e:i?r(n):"Object"==(c=r(n))&&"function"==typeof n.callee?"Arguments":c}},4588:function(t,n){var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},"45f2":function(t,n,e){var r=e("d9f6").f,o=e("07e3"),i=e("5168")("toStringTag");t.exports=function(t,n,e){t&&!o(t=e?t:t.prototype,i)&&r(t,i,{configurable:!0,value:n})}},4630:function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},"469f":function(t,n,e){e("6c1c"),e("1654"),t.exports=e("7d7b")},"481b":function(t,n){t.exports={}},"4aa6":function(t,n,e){t.exports=e("dc62")},"4bf8":function(t,n,e){var r=e("be13");t.exports=function(t){return Object(r(t))}},"4ee1":function(t,n,e){var r=e("5168")("iterator"),o=!1;try{var i=[7][r]();i["return"]=function(){o=!0},Array.from(i,function(){throw 2})}catch(u){}t.exports=function(t,n){if(!n&&!o)return!1;var e=!1;try{var i=[7],c=i[r]();c.next=function(){return{done:e=!0}},i[r]=function(){return c},t(i)}catch(u){}return e}},"50ed":function(t,n){t.exports=function(t,n){return{value:n,done:!!t}}},5147:function(t,n,e){var r=e("2b4c")("match");t.exports=function(t){var n=/./;try{"/./"[t](n)}catch(e){try{return n[r]=!1,!"/./"[t](n)}catch(o){}}return!0}},5168:function(t,n,e){var r=e("dbdb")("wks"),o=e("62a0"),i=e("e53d").Symbol,u="function"==typeof i,c=t.exports=function(t){return r[t]||(r[t]=u&&i[t]||(u?i:o)("Symbol."+t))};c.store=r},5176:function(t,n,e){t.exports=e("51b6")},"51b6":function(t,n,e){e("a3c3"),t.exports=e("584a").Object.assign},"520a":function(t,n,e){"use strict";var r=e("0bfb"),o=RegExp.prototype.exec,i=String.prototype.replace,u=o,c="lastIndex",a=function(){var t=/a/,n=/b*/g;return o.call(t,"a"),o.call(n,"a"),0!==t[c]||0!==n[c]}(),f=void 0!==/()??/.exec("")[1],s=a||f;s&&(u=function(t){var n,e,u,s,l=this;return f&&(e=new RegExp("^"+l.source+"$(?!\\s)",r.call(l))),a&&(n=l[c]),u=o.call(l,t),a&&u&&(l[c]=l.global?u.index+u[0].length:n),f&&u&&u.length>1&&i.call(u[0],e,function(){for(s=1;s1?arguments[1]:void 0,b=void 0!==h,g=0,y=s(p);if(b&&(h=r(h,v>2?arguments[2]:void 0,2)),void 0==y||d==Array&&c(y))for(n=a(p.length),e=new d(n);n>g;g++)f(e,g,b?h(p[g],g):p[g]);else for(l=y.call(p),e=new d;!(o=l.next()).done;g++)f(e,g,b?u(l,h,[o.value,g],!0):o.value);return e.length=g,e}})},"54a1":function(t,n,e){e("6c1c"),e("1654"),t.exports=e("95d5")},5537:function(t,n,e){var r=e("8378"),o=e("7726"),i="__core-js_shared__",u=o[i]||(o[i]={});(t.exports=function(t,n){return u[t]||(u[t]=void 0!==n?n:{})})("versions",[]).push({version:r.version,mode:e("2d00")?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},5559:function(t,n,e){var r=e("dbdb")("keys"),o=e("62a0");t.exports=function(t){return r[t]||(r[t]=o(t))}},"584a":function(t,n){var e=t.exports={version:"2.6.5"};"number"==typeof __e&&(__e=e)},"5b4e":function(t,n,e){var r=e("36c3"),o=e("b447"),i=e("0fc9");t.exports=function(t){return function(n,e,u){var c,a=r(n),f=o(a.length),s=i(u,f);if(t&&e!=e){while(f>s)if(c=a[s++],c!=c)return!0}else for(;f>s;s++)if((t||s in a)&&a[s]===e)return t||s||0;return!t&&-1}}},"5ca1":function(t,n,e){var r=e("7726"),o=e("8378"),i=e("32e9"),u=e("2aba"),c=e("9b43"),a="prototype",f=function(t,n,e){var s,l,p,d,v=t&f.F,h=t&f.G,b=t&f.S,g=t&f.P,y=t&f.B,x=h?r:b?r[n]||(r[n]={}):(r[n]||{})[a],m=h?o:o[n]||(o[n]={}),w=m[a]||(m[a]={});for(s in h&&(e=n),e)l=!v&&x&&void 0!==x[s],p=(l?x:e)[s],d=y&&l?c(p,r):g&&"function"==typeof p?c(Function.call,p):p,x&&u(x,s,p,t&f.U),m[s]!=p&&i(m,s,d),g&&w[s]!=p&&(w[s]=p)};r.core=o,f.F=1,f.G=2,f.S=4,f.P=8,f.B=16,f.W=32,f.U=64,f.R=128,t.exports=f},"5d73":function(t,n,e){t.exports=e("469f")},"5f1b":function(t,n,e){"use strict";var r=e("23c6"),o=RegExp.prototype.exec;t.exports=function(t,n){var e=t.exec;if("function"===typeof e){var i=e.call(t,n);if("object"!==typeof i)throw new TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw new TypeError("RegExp#exec called on incompatible receiver");return o.call(t,n)}},"626a":function(t,n,e){var r=e("2d95");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},"62a0":function(t,n){var e=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+r).toString(36))}},"63b6":function(t,n,e){var r=e("e53d"),o=e("584a"),i=e("d864"),u=e("35e8"),c=e("07e3"),a="prototype",f=function(t,n,e){var s,l,p,d=t&f.F,v=t&f.G,h=t&f.S,b=t&f.P,g=t&f.B,y=t&f.W,x=v?o:o[n]||(o[n]={}),m=x[a],w=v?r:h?r[n]:(r[n]||{})[a];for(s in v&&(e=n),e)l=!d&&w&&void 0!==w[s],l&&c(x,s)||(p=l?w[s]:e[s],x[s]=v&&"function"!=typeof w[s]?e[s]:g&&l?i(p,r):y&&w[s]==p?function(t){var n=function(n,e,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,e)}return new t(n,e,r)}return t.apply(this,arguments)};return n[a]=t[a],n}(p):b&&"function"==typeof p?i(Function.call,p):p,b&&((x.virtual||(x.virtual={}))[s]=p,t&f.R&&m&&!m[s]&&u(m,s,p)))};f.F=1,f.G=2,f.S=4,f.P=8,f.B=16,f.W=32,f.U=64,f.R=128,t.exports=f},6762:function(t,n,e){"use strict";var r=e("5ca1"),o=e("c366")(!0);r(r.P,"Array",{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),e("9c6c")("includes")},6821:function(t,n,e){var r=e("626a"),o=e("be13");t.exports=function(t){return r(o(t))}},"69a8":function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},"6a99":function(t,n,e){var r=e("d3f4");t.exports=function(t,n){if(!r(t))return t;var e,o;if(n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;if("function"==typeof(e=t.valueOf)&&!r(o=e.call(t)))return o;if(!n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},"6b4c":function(t,n){var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},"6c1c":function(t,n,e){e("c367");for(var r=e("e53d"),o=e("35e8"),i=e("481b"),u=e("5168")("toStringTag"),c="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),a=0;a=f?t?"":void 0:(i=c.charCodeAt(a),i<55296||i>56319||a+1===f||(u=c.charCodeAt(a+1))<56320||u>57343?t?c.charAt(a):i:t?c.slice(a,a+2):u-56320+(i-55296<<10)+65536)}}},7726:function(t,n){var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},"774e":function(t,n,e){t.exports=e("d2d5")},"77f1":function(t,n,e){var r=e("4588"),o=Math.max,i=Math.min;t.exports=function(t,n){return t=r(t),t<0?o(t+n,0):i(t,n)}},"794b":function(t,n,e){t.exports=!e("8e60")&&!e("294c")(function(){return 7!=Object.defineProperty(e("1ec9")("div"),"a",{get:function(){return 7}}).a})},"79aa":function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},"79e5":function(t,n){t.exports=function(t){try{return!!t()}catch(n){return!0}}},"7cd6":function(t,n,e){var r=e("40c3"),o=e("5168")("iterator"),i=e("481b");t.exports=e("584a").getIteratorMethod=function(t){if(void 0!=t)return t[o]||t["@@iterator"]||i[r(t)]}},"7d7b":function(t,n,e){var r=e("e4ae"),o=e("7cd6");t.exports=e("584a").getIterator=function(t){var n=o(t);if("function"!=typeof n)throw TypeError(t+" is not iterable!");return r(n.call(t))}},"7e90":function(t,n,e){var r=e("d9f6"),o=e("e4ae"),i=e("c3a1");t.exports=e("8e60")?Object.defineProperties:function(t,n){o(t);var e,u=i(n),c=u.length,a=0;while(c>a)r.f(t,e=u[a++],n[e]);return t}},8378:function(t,n){var e=t.exports={version:"2.6.5"};"number"==typeof __e&&(__e=e)},8436:function(t,n){t.exports=function(){}},"86cc":function(t,n,e){var r=e("cb7c"),o=e("c69a"),i=e("6a99"),u=Object.defineProperty;n.f=e("9e1e")?Object.defineProperty:function(t,n,e){if(r(t),n=i(n,!0),r(e),o)try{return u(t,n,e)}catch(c){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},"8aae":function(t,n,e){e("32a6"),t.exports=e("584a").Object.keys},"8e60":function(t,n,e){t.exports=!e("294c")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},"8f60":function(t,n,e){"use strict";var r=e("a159"),o=e("aebd"),i=e("45f2"),u={};e("35e8")(u,e("5168")("iterator"),function(){return this}),t.exports=function(t,n,e){t.prototype=r(u,{next:o(1,e)}),i(t,n+" Iterator")}},9003:function(t,n,e){var r=e("6b4c");t.exports=Array.isArray||function(t){return"Array"==r(t)}},9138:function(t,n,e){t.exports=e("35e8")},9306:function(t,n,e){"use strict";var r=e("c3a1"),o=e("9aa9"),i=e("355d"),u=e("241e"),c=e("335c"),a=Object.assign;t.exports=!a||e("294c")(function(){var t={},n={},e=Symbol(),r="abcdefghijklmnopqrst";return t[e]=7,r.split("").forEach(function(t){n[t]=t}),7!=a({},t)[e]||Object.keys(a({},n)).join("")!=r})?function(t,n){var e=u(t),a=arguments.length,f=1,s=o.f,l=i.f;while(a>f){var p,d=c(arguments[f++]),v=s?r(d).concat(s(d)):r(d),h=v.length,b=0;while(h>b)l.call(d,p=v[b++])&&(e[p]=d[p])}return e}:a},9427:function(t,n,e){var r=e("63b6");r(r.S,"Object",{create:e("a159")})},"95d5":function(t,n,e){var r=e("40c3"),o=e("5168")("iterator"),i=e("481b");t.exports=e("584a").isIterable=function(t){var n=Object(t);return void 0!==n[o]||"@@iterator"in n||i.hasOwnProperty(r(n))}},"9aa9":function(t,n){n.f=Object.getOwnPropertySymbols},"9b43":function(t,n,e){var r=e("d8e8");t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,o){return t.call(n,e,r,o)}}return function(){return t.apply(n,arguments)}}},"9c6c":function(t,n,e){var r=e("2b4c")("unscopables"),o=Array.prototype;void 0==o[r]&&e("32e9")(o,r,{}),t.exports=function(t){o[r][t]=!0}},"9def":function(t,n,e){var r=e("4588"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},"9e1e":function(t,n,e){t.exports=!e("79e5")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},a159:function(t,n,e){var r=e("e4ae"),o=e("7e90"),i=e("1691"),u=e("5559")("IE_PROTO"),c=function(){},a="prototype",f=function(){var t,n=e("1ec9")("iframe"),r=i.length,o="<",u=">";n.style.display="none",e("32fc").appendChild(n),n.src="javascript:",t=n.contentWindow.document,t.open(),t.write(o+"script"+u+"document.F=Object"+o+"/script"+u),t.close(),f=t.F;while(r--)delete f[a][i[r]];return f()};t.exports=Object.create||function(t,n){var e;return null!==t?(c[a]=r(t),e=new c,c[a]=null,e[u]=t):e=f(),void 0===n?e:o(e,n)}},a352:function(n,e){n.exports=t},a3c3:function(t,n,e){var r=e("63b6");r(r.S+r.F,"Object",{assign:e("9306")})},a481:function(t,n,e){"use strict";var r=e("cb7c"),o=e("4bf8"),i=e("9def"),u=e("4588"),c=e("0390"),a=e("5f1b"),f=Math.max,s=Math.min,l=Math.floor,p=/\$([$&`']|\d\d?|<[^>]*>)/g,d=/\$([$&`']|\d\d?)/g,v=function(t){return void 0===t?t:String(t)};e("214f")("replace",2,function(t,n,e,h){return[function(r,o){var i=t(this),u=void 0==r?void 0:r[n];return void 0!==u?u.call(r,i,o):e.call(String(i),r,o)},function(t,n){var o=h(e,t,this,n);if(o.done)return o.value;var l=r(t),p=String(this),d="function"===typeof n;d||(n=String(n));var g=l.global;if(g){var y=l.unicode;l.lastIndex=0}var x=[];while(1){var m=a(l,p);if(null===m)break;if(x.push(m),!g)break;var w=String(m[0]);""===w&&(l.lastIndex=c(p,i(l.lastIndex),y))}for(var O="",S=0,j=0;j=S&&(O+=p.slice(S,M)+P,S=M+_.length)}return O+p.slice(S)}];function b(t,n,r,i,u,c){var a=r+t.length,f=i.length,s=d;return void 0!==u&&(u=o(u),s=p),e.call(c,s,function(e,o){var c;switch(o.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,r);case"'":return n.slice(a);case"<":c=u[o.slice(1,-1)];break;default:var s=+o;if(0===s)return e;if(s>f){var p=l(s/10);return 0===p?e:p<=f?void 0===i[p-1]?o.charAt(1):i[p-1]+o.charAt(1):e}c=i[s-1]}return void 0===c?"":c})}})},a4bb:function(t,n,e){t.exports=e("8aae")},a745:function(t,n,e){t.exports=e("f410")},aae3:function(t,n,e){var r=e("d3f4"),o=e("2d95"),i=e("2b4c")("match");t.exports=function(t){var n;return r(t)&&(void 0!==(n=t[i])?!!n:"RegExp"==o(t))}},aebd:function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},b0c5:function(t,n,e){"use strict";var r=e("520a");e("5ca1")({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},b0dc:function(t,n,e){var r=e("e4ae");t.exports=function(t,n,e,o){try{return o?n(r(e)[0],e[1]):n(e)}catch(u){var i=t["return"];throw void 0!==i&&r(i.call(t)),u}}},b447:function(t,n,e){var r=e("3a38"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},b8e3:function(t,n){t.exports=!0},be13:function(t,n){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},c366:function(t,n,e){var r=e("6821"),o=e("9def"),i=e("77f1");t.exports=function(t){return function(n,e,u){var c,a=r(n),f=o(a.length),s=i(u,f);if(t&&e!=e){while(f>s)if(c=a[s++],c!=c)return!0}else for(;f>s;s++)if((t||s in a)&&a[s]===e)return t||s||0;return!t&&-1}}},c367:function(t,n,e){"use strict";var r=e("8436"),o=e("50ed"),i=e("481b"),u=e("36c3");t.exports=e("30f1")(Array,"Array",function(t,n){this._t=u(t),this._i=0,this._k=n},function(){var t=this._t,n=this._k,e=this._i++;return!t||e>=t.length?(this._t=void 0,o(1)):o(0,"keys"==n?e:"values"==n?t[e]:[e,t[e]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},c3a1:function(t,n,e){var r=e("e6f3"),o=e("1691");t.exports=Object.keys||function(t){return r(t,o)}},c649:function(t,n,e){"use strict";(function(t){e.d(n,"c",function(){return l}),e.d(n,"a",function(){return f}),e.d(n,"b",function(){return u}),e.d(n,"d",function(){return s});e("a481");var r=e("4aa6"),o=e.n(r);function i(){return"undefined"!==typeof window?window.console:t.console}var u=i();function c(t){var n=o()(null);return function(e){var r=n[e];return r||(n[e]=t(e))}}var a=/-(\w)/g,f=c(function(t){return t.replace(a,function(t,n){return n?n.toUpperCase():""})});function s(t){null!==t.parentElement&&t.parentElement.removeChild(t)}function l(t,n,e){var r=0===e?t.children[0]:t.children[e-1].nextSibling;t.insertBefore(n,r)}}).call(this,e("c8ba"))},c69a:function(t,n,e){t.exports=!e("9e1e")&&!e("79e5")(function(){return 7!=Object.defineProperty(e("230e")("div"),"a",{get:function(){return 7}}).a})},c8ba:function(t,n){var e;e=function(){return this}();try{e=e||new Function("return this")()}catch(r){"object"===typeof window&&(e=window)}t.exports=e},c8bb:function(t,n,e){t.exports=e("54a1")},ca5a:function(t,n){var e=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+r).toString(36))}},cb7c:function(t,n,e){var r=e("d3f4");t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},ce7e:function(t,n,e){var r=e("63b6"),o=e("584a"),i=e("294c");t.exports=function(t,n){var e=(o.Object||{})[t]||Object[t],u={};u[t]=n(e),r(r.S+r.F*i(function(){e(1)}),"Object",u)}},d2c8:function(t,n,e){var r=e("aae3"),o=e("be13");t.exports=function(t,n,e){if(r(n))throw TypeError("String#"+e+" doesn't accept regex!");return String(o(t))}},d2d5:function(t,n,e){e("1654"),e("549b"),t.exports=e("584a").Array.from},d3f4:function(t,n){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},d864:function(t,n,e){var r=e("79aa");t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,o){return t.call(n,e,r,o)}}return function(){return t.apply(n,arguments)}}},d8e8:function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},d9f6:function(t,n,e){var r=e("e4ae"),o=e("794b"),i=e("1bc3"),u=Object.defineProperty;n.f=e("8e60")?Object.defineProperty:function(t,n,e){if(r(t),n=i(n,!0),r(e),o)try{return u(t,n,e)}catch(c){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},dbdb:function(t,n,e){var r=e("584a"),o=e("e53d"),i="__core-js_shared__",u=o[i]||(o[i]={});(t.exports=function(t,n){return u[t]||(u[t]=void 0!==n?n:{})})("versions",[]).push({version:r.version,mode:e("b8e3")?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},dc62:function(t,n,e){e("9427");var r=e("584a").Object;t.exports=function(t,n){return r.create(t,n)}},e4ae:function(t,n,e){var r=e("f772");t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},e53d:function(t,n){var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},e6f3:function(t,n,e){var r=e("07e3"),o=e("36c3"),i=e("5b4e")(!1),u=e("5559")("IE_PROTO");t.exports=function(t,n){var e,c=o(t),a=0,f=[];for(e in c)e!=u&&r(c,e)&&f.push(e);while(n.length>a)r(c,e=n[a++])&&(~i(f,e)||f.push(e));return f}},f410:function(t,n,e){e("1af6"),t.exports=e("584a").Array.isArray},f559:function(t,n,e){"use strict";var r=e("5ca1"),o=e("9def"),i=e("d2c8"),u="startsWith",c=""[u];r(r.P+r.F*e("5147")(u),"String",{startsWith:function(t){var n=i(this,t,u),e=o(Math.min(arguments.length>1?arguments[1]:void 0,n.length)),r=String(t);return c?c.call(n,r,e):n.slice(e,e+r.length)===r}})},f772:function(t,n){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},fa5b:function(t,n,e){t.exports=e("5537")("native-function-to-string",Function.toString)},fb15:function(t,n,e){"use strict";var r;(e.r(n),"undefined"!==typeof window)&&((r=window.document.currentScript)&&(r=r.src.match(/(.+\/)[^\/]+\.js(\?.*)?$/))&&(e.p=r[1]));var o=e("5176"),i=e.n(o),u=(e("f559"),e("a4bb")),c=e.n(u),a=(e("6762"),e("2fdb"),e("a745")),f=e.n(a);function s(t){if(f()(t))return t}var l=e("5d73"),p=e.n(l);function d(t,n){var e=[],r=!0,o=!1,i=void 0;try{for(var u,c=p()(t);!(r=(u=c.next()).done);r=!0)if(e.push(u.value),n&&e.length===n)break}catch(a){o=!0,i=a}finally{try{r||null==c["return"]||c["return"]()}finally{if(o)throw i}}return e}function v(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function h(t,n){return s(t)||d(t,n)||v()}function b(t){if(f()(t)){for(var n=0,e=new Array(t.length);n=i?o.length:o.indexOf(t)});return e?u.filter(function(t){return-1!==t}):u}function A(t,n){var e=this;this.$nextTick(function(){return e.$emit(t.toLowerCase(),n)})}function P(t){var n=this;return function(e){null!==n.realList&&n["onDrag"+t](e),A.call(n,t,e)}}function I(t){if(!t||1!==t.length)return!1;var n=h(t,1),e=n[0].componentOptions;return!!e&&["transition-group","TransitionGroup"].includes(e.tag)}function L(t,n){var e=n.header,r=n.footer,o=0,i=0;return e&&(o=e.length,t=t?[].concat(S(e),S(t)):S(e)),r&&(i=r.length,t=t?[].concat(S(t),S(r)):S(r)),{children:t,headerOffset:o,footerOffset:i}}function F(t,n){var e=null,r=function(t,n){e=T(e,t,n)},o=c()(t).filter(function(t){return"id"===t||t.startsWith("data-")}).reduce(function(n,e){return n[e]=t[e],n},{});if(r("attrs",o),!n)return e;var u=n.on,a=n.props,f=n.attrs;return r("on",u),r("props",a),i()(e.attrs,f),e}var $=["Start","Add","Remove","Update","End"],k=["Choose","Sort","Filter","Clone"],D=["Move"].concat($,k).map(function(t){return"on"+t}),R=null,V={options:Object,list:{type:Array,required:!1,default:null},value:{type:Array,required:!1,default:null},noTransitionOnDrag:{type:Boolean,default:!1},clone:{type:Function,default:function(t){return t}},element:{type:String,default:"div"},tag:{type:String,default:null},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},N={name:"draggable",inheritAttrs:!1,props:V,data:function(){return{transitionMode:!1,noneFunctionalComponentMode:!1,init:!1}},render:function(t){var n=this.$slots.default;this.transitionMode=I(n);var e=L(n,this.$slots),r=e.children,o=e.headerOffset,i=e.footerOffset;this.headerOffset=o,this.footerOffset=i;var u=F(this.$attrs,this.componentData);return t(this.getTag(),u,r)},created:function(){null!==this.list&&null!==this.value&&M["b"].error("Value and list props are mutually exclusive! Please set one or another."),"div"!==this.element&&M["b"].warn("Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props"),void 0!==this.options&&M["b"].warn("Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props")},mounted:function(){var t=this;if(this.noneFunctionalComponentMode=this.getTag().toLowerCase()!==this.$el.nodeName.toLowerCase(),this.noneFunctionalComponentMode&&this.transitionMode)throw new Error("Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ".concat(this.getTag()));var n={};$.forEach(function(e){n["on"+e]=P.call(t,e)}),k.forEach(function(e){n["on"+e]=A.bind(t,e)});var e=c()(this.$attrs).reduce(function(n,e){return n[Object(M["a"])(e)]=t.$attrs[e],n},{}),r=i()({},this.options,e,n,{onMove:function(n,e){return t.onDragMove(n,e)}});!("draggable"in r)&&(r.draggable=">*"),this._sortable=new _.a(this.rootContainer,r),this.computeIndexes()},beforeDestroy:function(){void 0!==this._sortable&&this._sortable.destroy()},computed:{rootContainer:function(){return this.transitionMode?this.$el.children[0]:this.$el},realList:function(){return this.list?this.list:this.value}},watch:{options:{handler:function(t){this.updateOptions(t)},deep:!0},$attrs:{handler:function(t){this.updateOptions(t)},deep:!0},realList:function(){this.computeIndexes()}},methods:{getTag:function(){return this.tag||this.element},updateOptions:function(t){for(var n in t){var e=Object(M["a"])(n);-1===D.indexOf(e)&&this._sortable.option(e,t[n])}},getChildrenNodes:function(){if(this.init||(this.noneFunctionalComponentMode=this.noneFunctionalComponentMode&&1===this.$children.length,this.init=!0),this.noneFunctionalComponentMode)return this.$children[0].$slots.default;var t=this.$slots.default;return this.transitionMode?t[0].child.$slots.default:t},computeIndexes:function(){var t=this;this.$nextTick(function(){t.visibleIndexes=E(t.getChildrenNodes(),t.rootContainer.children,t.transitionMode,t.footerOffset)})},getUnderlyingVm:function(t){var n=C(this.getChildrenNodes()||[],t);if(-1===n)return null;var e=this.realList[n];return{index:n,element:e}},getUnderlyingPotencialDraggableComponent:function(t){var n=t.__vue__;return n&&n.$options&&"transition-group"===n.$options._componentTag?n.$parent:n},emitChanges:function(t){var n=this;this.$nextTick(function(){n.$emit("change",t)})},alterList:function(t){if(this.list)t(this.list);else{var n=S(this.value);t(n),this.$emit("input",n)}},spliceList:function(){var t=arguments,n=function(n){return n.splice.apply(n,S(t))};this.alterList(n)},updatePosition:function(t,n){var e=function(e){return e.splice(n,0,e.splice(t,1)[0])};this.alterList(e)},getRelatedContextFromMoveEvent:function(t){var n=t.to,e=t.related,r=this.getUnderlyingPotencialDraggableComponent(n);if(!r)return{component:r};var o=r.realList,u={list:o,component:r};if(n!==e&&o&&r.getUnderlyingVm){var c=r.getUnderlyingVm(e);if(c)return i()(c,u)}return u},getVmIndex:function(t){var n=this.visibleIndexes,e=n.length;return t>e-1?e:n[t]},getComponent:function(){return this.$slots.default[0].componentInstance},resetTransitionData:function(t){if(this.noTransitionOnDrag&&this.transitionMode){var n=this.getChildrenNodes();n[t].data=null;var e=this.getComponent();e.children=[],e.kept=void 0}},onDragStart:function(t){this.context=this.getUnderlyingVm(t.item),t.item._underlying_vm_=this.clone(this.context.element),R=t.item},onDragAdd:function(t){var n=t.item._underlying_vm_;if(void 0!==n){Object(M["d"])(t.item);var e=this.getVmIndex(t.newIndex);this.spliceList(e,0,n),this.computeIndexes();var r={element:n,newIndex:e};this.emitChanges({added:r})}},onDragRemove:function(t){if(Object(M["c"])(this.rootContainer,t.item,t.oldIndex),"clone"!==t.pullMode){var n=this.context.index;this.spliceList(n,1);var e={element:this.context.element,oldIndex:n};this.resetTransitionData(n),this.emitChanges({removed:e})}else Object(M["d"])(t.clone)},onDragUpdate:function(t){Object(M["d"])(t.item),Object(M["c"])(t.from,t.item,t.oldIndex);var n=this.context.index,e=this.getVmIndex(t.newIndex);this.updatePosition(n,e);var r={element:this.context.element,oldIndex:n,newIndex:e};this.emitChanges({moved:r})},updateProperty:function(t,n){t.hasOwnProperty(n)&&(t[n]+=this.headerOffset)},computeFutureIndex:function(t,n){if(!t.element)return 0;var e=S(n.to.children).filter(function(t){return"none"!==t.style["display"]}),r=e.indexOf(n.related),o=t.component.getVmIndex(r),i=-1!==e.indexOf(R);return i||!n.willInsertAfter?o:o+1},onDragMove:function(t,n){var e=this.move;if(!e||!this.realList)return!0;var r=this.getRelatedContextFromMoveEvent(t),o=this.context,u=this.computeFutureIndex(r,t);i()(o,{futureIndex:u});var c=i()({},t,{relatedContext:r,draggedContext:o});return e(c,n)},onDragEnd:function(){this.computeIndexes(),R=null}}};"undefined"!==typeof window&&"Vue"in window&&window.Vue.component("draggable",N);var U=N;n["default"]=U}})["default"]}); -//# sourceMappingURL=vuedraggable.umd.min.js.map \ No newline at end of file diff --git a/docs/index.css b/docs/index.css deleted file mode 100644 index 62ae0949..00000000 --- a/docs/index.css +++ /dev/null @@ -1,71 +0,0 @@ -:root { - --appleEase: cubic-bezier(.42, 0, .58, 1); - --appleTransition: .2s var(--appleEase); -} - -body, html { - height: 100%; - margin: 0; - width: 100%; - padding: 0px; -} - -body { - background: #333; - background-image: url("./wallpaper.webp"); - background-size: cover; - background-repeat: no-repeat; -} - -#wrapper { - width: 100%; - height: 100%; - display: flex; - justify-content: center; - align-items: center; -} - -#app-main { - width: 90%; - height: 90%; - max-width: 1366px; - max-height: 768px; - overflow: hidden; - border-radius: 10px; - background: rgb(100 100 100 / 20%); - box-shadow: 0px 0px 0px 1px rgb(200 200 200 / 20%), - 0px 8px 15px 4px rgb(0 0 0 / 25%); - backdrop-filter: blur(64px) saturate(180%); - animation: windowIn var(--appleEase) .35s; -} - -[hidden] { - display: none; -} - -.cider-splash { - width: 200px; - height: 200px; - background-image: url("./Cider.png"); - background-size: contain; - background-repeat: no-repeat; - filter: drop-shadow(0px 10px 10px rgb(255, 42, 85)); - animation: windowIn var(--appleEase) .35s; -} - -#app-main>iframe { - width: 100%; - height: 100%; - border:0px; -} - -@keyframes windowIn { - 0% { - opacity: 0; - transform: scale(0.9); - } - 100% { - opacity: 1; - transform: scale(1); - } -} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index c57ad117..00000000 --- a/docs/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Cider UI Preview - - - -
-
- -
- - - \ No newline at end of file diff --git a/docs/index.js b/docs/index.js deleted file mode 100644 index 7e483805..00000000 --- a/docs/index.js +++ /dev/null @@ -1,6 +0,0 @@ -document.addEventListener('DOMContentLoaded', function() { - setTimeout(function() { - document.querySelector(".cider-splash").setAttribute("hidden", "true"); - document.querySelector("#app-main").removeAttribute("hidden"); - }, 1000); -}); \ No newline at end of file diff --git a/docs/wallpaper.webp b/docs/wallpaper.webp deleted file mode 100644 index 2d5bb1e92e40254b6828574861de882e4080d720..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39818 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%0A$KFSOAZ0m+Qli%J6Gi~wMzf)r=bt>t!`Mk=a?Hi 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 Pwj&4}-Ge;P&E|gq%0W(! diff --git a/index.js b/index.js index abba9a20..ffe470e0 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,5 @@ require('v8-compile-cache'); -const { app } = require('electron'), +const { app, components } = require('electron'), {resolve} = require("path"), CiderBase = require ('./src/main/cider-base'); @@ -97,17 +97,21 @@ if (process.platform === "linux") { app.commandLine.appendSwitch('js-flags', '--max-old-space-size=1024') app.on('ready', () => { - if (app.isQuiting) { app.quit(); return; } - app.commandLine.appendSwitch('high-dpi-support', 1) - app.commandLine.appendSwitch('force-device-scale-factor', 1) - app.commandLine.appendSwitch('disable-pinch'); - - console.log('[Cider] Application is Ready. Creating Window.') - if (!app.isPackaged) { - console.info('[Cider] Running in development mode.') - require('vue-devtools').install() - } - CreateWindow() + app.whenReady().then(async () => { + await components.whenReady().catch(e => console.log(`component ready fail:`, e)); + console.log('components ready:', components.status()); + if (app.isQuiting) { app.quit(); return; } + app.commandLine.appendSwitch('high-dpi-support', 1) + app.commandLine.appendSwitch('force-device-scale-factor', 1) + app.commandLine.appendSwitch('disable-pinch'); + + console.log('[Cider] Application is Ready. Creating Window.') + if (!app.isPackaged) { + console.info('[Cider] Running in development mode.') + require('vue-devtools').install() + } + CreateWindow() + }) }); app.on('before-quit', () => { diff --git a/package.json b/package.json index 4a1e8f8c..d91ec650 100644 --- a/package.json +++ b/package.json @@ -74,9 +74,9 @@ } ], "build": { - "electronVersion": "15.3.4", + "electronVersion": "16.0.5", "electronDownload": { - "version": "15.3.4-wvvmp", + "version": "16.0.5+wvcus", "mirror": "https://github.com/castlabs/electron-releases/releases/download/v" }, "appId": "cider", From acf66945c38bad5dbdb734763320a80116170a24 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 30 Dec 2021 13:42:23 +0700 Subject: [PATCH 022/135] 'Spatialization' i repeat this aint Atmos --- index.js | 1 + src/renderer/audio/audio.js | 38 ++++++++++++++++++++++++++- src/renderer/views/main.ejs | 1 + src/renderer/views/pages/settings.ejs | 19 +++++++++++++- 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index ffe470e0..5abb3eb4 100644 --- a/index.js +++ b/index.js @@ -23,6 +23,7 @@ const configSchema = { "quality": "990", "seamless_audio": true, "normalization": false, + "spatial" : false, }, "visual": { "theme": "", diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index cffb98a6..1c8f8bf1 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -3,7 +3,8 @@ var CiderAudio = { source : null, audioNodes : { gainNode : null, - compressorNode : null, + spatialNode : null, + spatialInput: null, }, init: function (cb = function () { }) { //AudioOutputs.fInit = true; @@ -21,6 +22,7 @@ var CiderAudio = { off: function(){ try{ CiderAudio.audioNodes.gainNode.disconnect(); + CiderAudio.audioNodes.spatialNode.disconnect(); CiderAudio.source.connect(CiderAudio.context.destination);} catch(e){} }, connectContext: function (mediaElem){ @@ -37,10 +39,44 @@ var CiderAudio = { if(app.cfg.audio.normalization){ CiderAudio.normalizerOn() } + if (app.cfg.audio.spatial){ + CiderAudio.spatialOn() + } }, normalizerOn: function (){}, normalizerOff: function (){ CiderAudio.audioNodes.gainNode.gain.setTargetAtTime(1, CiderAudio.context.currentTime+ 1, 0.5); + }, + spatialOn: function (){ + try{ + CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination);} catch(e){} + CiderAudio.audioNodes.spatialNode = new ResonanceAudio(CiderAudio.context); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.context.destination); + let roomDimensions = { + width: 5, + height: 6, + depth: 4, + }; + let roomMaterials = { + // Room wall materials + left: 'acoustic-ceiling-tiles', + right: 'acoustic-ceiling-tiles', + front: 'glass-thin', + back: 'plywood-panel', + // Room floor + down: 'grass', + // Room ceiling + up: 'acoustic-ceiling-tiles', + }; + CiderAudio.audioNodes.spatialNode.setRoomProperties(roomDimensions, roomMaterials); + CiderAudio.audioNodes.spatialInput = CiderAudio.audioNodes.spatialNode.createSource(); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + }, + spatialOff: function (){ + try{ + CiderAudio.audioNodes.spatialNode.output.disconnect(CiderAudio.context.destination); + CiderAudio.audioNodes.gainNode.disconnect(CiderAudio.audioNodes.spatialInput.input);} catch(e){} + CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination); } } diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index eebe525f..89c1d80f 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -594,6 +594,7 @@ } + \ No newline at end of file diff --git a/src/renderer/views/pages/settings.ejs b/src/renderer/views/pages/settings.ejs index dcf49aad..66f6d3af 100644 --- a/src/renderer/views/pages/settings.ejs +++ b/src/renderer/views/pages/settings.ejs @@ -27,7 +27,7 @@
- Enable AudioContext Functionality + Enable Advanced Functionality
Enabling AudioContext functionality will allow for extended audio features like Audio Normalization , Equalizers and Visualizers, however on some systems this may cause stuttering in audio tracks.
@@ -43,6 +43,16 @@
+
+
+ Audio Spatialization +
+ Spatialize audio and make audio more 3-dimensional (note: This is not Dolby Atmos) +
+
+ +
+
Visual
@@ -560,6 +570,8 @@ CiderAudio.init(); if (app.cfg.audio.normalization){ CiderAudio.normalizerOn()} + if (app.cfg.audio.spatial){ + CiderAudio.spatialOn()} } else { CiderAudio.off(); } @@ -569,6 +581,11 @@ CiderAudio.normalizerOn() } else {CiderAudio.normalizerOff()} }, + toggleSpatial : function(){ + if (app.cfg.audio.spatial){ + CiderAudio.spatialOn() + } else {CiderAudio.spatialOff()} + }, changeAudioQuality : function(){ app.mk.bitrate = app.cfg.audio.quality } From b7c61d08475d79bc5008d69c8078a9e5a374cc5c Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Thu, 30 Dec 2021 01:35:46 -0800 Subject: [PATCH 023/135] Added spatialized audio settings --- index.js | 57 +++++-- src/renderer/index.js | 3 +- src/renderer/style.less | 39 +++++ .../views/components/spatial-properties.ejs | 149 ++++++++++++++++++ src/renderer/views/main.ejs | 8 + 5 files changed, 240 insertions(+), 16 deletions(-) create mode 100644 src/renderer/views/components/spatial-properties.ejs diff --git a/index.js b/index.js index 5abb3eb4..fe3fbdfe 100644 --- a/index.js +++ b/index.js @@ -1,18 +1,18 @@ require('v8-compile-cache'); -const { app, components } = require('electron'), - {resolve} = require("path"), - CiderBase = require ('./src/main/cider-base'); +const {app, components} = require('electron'), + {resolve} = require("path"), + CiderBase = require('./src/main/cider-base'); // Analytics for debugging. const ElectronSentry = require("@sentry/electron"); -ElectronSentry.init({ dsn: "https://68c422bfaaf44dea880b86aad5a820d2@o954055.ingest.sentry.io/6112214" }); +ElectronSentry.init({dsn: "https://68c422bfaaf44dea880b86aad5a820d2@o954055.ingest.sentry.io/6112214"}); -const configSchema = { +const configDefaults = { "general": { "close_behavior": 0, // 0 = close, 1 = minimize, 2 = minimize to tray "startup_behavior": 0, // 0 = nothing, 1 = open on startup "discord_rpc": 1, // 0 = disabled, 1 = enabled as Cider, 2 = enabled as Apple Music - "discordClearActivityOnPause" : 0, // 0 = disabled, 1 = enabled + "discordClearActivityOnPause": 0, // 0 = disabled, 1 = enabled "volume": 1 }, "home": { @@ -23,20 +23,37 @@ const configSchema = { "quality": "990", "seamless_audio": true, "normalization": false, - "spatial" : false, + "spatial": false, + "test": false, + "spatial_properties": { + "gain": 0.8, + "room_dimensions": { + "width": 5, + "height": 6, + "depth": 4 + }, + "room_materials": { + "left": 'acoustic-ceiling-tiles', + "right": 'acoustic-ceiling-tiles', + "front": 'glass-thin', + "back": 'glass-thin', + "down": 'grass', + "up": 'acoustic-ceiling-tiles' + } + } }, "visual": { "theme": "", "scrollbars": 0, // 0 = show on hover, 2 = always hide, 3 = always show "refresh_rate": 0, - "animated_artwork": "always", // 0 = always, 1 = limited, 2 = never + "animated_artwork": "limited", // 0 = always, 1 = limited, 2 = never "animated_artwork_qualityLevel": 1, "hw_acceleration": "default", // default, webgpu, disabled "window_transparency": "default" }, "lyrics": { "enable_mxm": false, - "mxm_karaoke" : false, + "mxm_karaoke": false, "mxm_language": "en", "enable_yt": false, }, @@ -44,21 +61,25 @@ const configSchema = { "enabled": false, "scrobble_after": 30, "auth_token": "", - "enabledRemoveFeaturingArtists" : true, + "enabledRemoveFeaturingArtists": true, "NowPlaying": "true" }, "advanced": { - "AudioContext" : false, + "AudioContext": false, } } + // Enable WebGPU and list adapters (EXPERIMENTAL.) // Note: THIS HAS TO BE BEFORE ANYTHING GETS INITIALIZED. const Store = require("electron-store"); app.cfg = new Store({ - defaults: configSchema, + defaults: configDefaults }); +let currentCfg = app.cfg.get() +app.cfg.set(Object.assign(configDefaults, currentCfg)) + switch (app.cfg.get("visual.hw_acceleration")) { default: @@ -77,7 +98,10 @@ switch (app.cfg.get("visual.hw_acceleration")) { // Creating the Application Window and Calling all the Functions function CreateWindow() { - if (app.isQuiting) { app.quit(); return; } + if (app.isQuiting) { + app.quit(); + return; + } /** CIDER **/ const ciderwin = require("./src/main/cider-base") @@ -101,7 +125,10 @@ app.on('ready', () => { app.whenReady().then(async () => { await components.whenReady().catch(e => console.log(`component ready fail:`, e)); console.log('components ready:', components.status()); - if (app.isQuiting) { app.quit(); return; } + if (app.isQuiting) { + app.quit(); + return; + } app.commandLine.appendSwitch('high-dpi-support', 1) app.commandLine.appendSwitch('force-device-scale-factor', 1) app.commandLine.appendSwitch('disable-pinch'); @@ -188,7 +215,7 @@ app.on('second-instance', (_e, argv) => { if (!app.requestSingleInstanceLock() && true) { console.warn("[InstanceHandler] Existing Instance is Blocking Second Instance."); app.quit(); - // app.isQuiting = true + // app.isQuiting = true } diff --git a/src/renderer/index.js b/src/renderer/index.js index 4781149c..5ae5e965 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -256,7 +256,8 @@ const app = new Vue({ routes: ["browse", "listen_now", "radio"], musicBaseUrl: "https://api.music.apple.com/", modals: { - addToPlaylist: false + addToPlaylist: false, + spatialProperties: false }, }, watch: { diff --git a/src/renderer/style.less b/src/renderer/style.less index 5b7c53cb..53e476d8 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -1648,6 +1648,45 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } } +.spatialproperties-panel { + .modal-window { + height: 600px; + max-height: 600px; + width: 800px; + max-width: 800px; + overflow: hidden; + + .modal-header { + padding: 16px; + position: relative; + overflow: hidden; + + .modal-title { + text-align: center; + } + + .close-btn { + width: 50px; + height: 100%; + background-image: var(--gfx-closeBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + appearance: none; + border: 0; + background-color: transparent; + position: absolute; + top: 0; + right: 0; + + &:hover { + background-color: rgb(196, 43, 28) + } + } + } + } +} + .addtoplaylist-panel { .modal-window { max-height: 600px; diff --git a/src/renderer/views/components/spatial-properties.ejs b/src/renderer/views/components/spatial-properties.ejs new file mode 100644 index 00000000..1e5bf6c1 --- /dev/null +++ b/src/renderer/views/components/spatial-properties.ejs @@ -0,0 +1,149 @@ + + + \ No newline at end of file diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index 89c1d80f..ee682ee4 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -215,6 +215,9 @@
+ @@ -472,6 +475,9 @@ + + +
@@ -551,6 +557,8 @@ + +<%- include('components/spatial-properties') %> <%- include('components/add-to-playlist') %> From 9ce6dc8fd38998117a96a448d0d5063056d15c3b Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Thu, 30 Dec 2021 01:37:27 -0800 Subject: [PATCH 024/135] Update spatial-properties.ejs --- src/renderer/views/components/spatial-properties.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/views/components/spatial-properties.ejs b/src/renderer/views/components/spatial-properties.ejs index 1e5bf6c1..5b71bf41 100644 --- a/src/renderer/views/components/spatial-properties.ejs +++ b/src/renderer/views/components/spatial-properties.ejs @@ -31,7 +31,7 @@
From d5c393c071f6c462cbafba3437362a0573d26a80 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Thu, 30 Dec 2021 02:21:27 -0800 Subject: [PATCH 025/135] Added visual representation of the room scale --- src/renderer/style.less | 181 +++++++++++------- .../views/components/spatial-properties.ejs | 43 +++-- 2 files changed, 141 insertions(+), 83 deletions(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index 53e476d8..c34e901f 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -340,7 +340,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { } } -.app-sidebar-button>.sidebar-user-icon { +.app-sidebar-button > .sidebar-user-icon { width: 32px; height: 32px; border-radius: 100%; @@ -351,18 +351,18 @@ input[type=range].web-slider::-webkit-slider-runnable-track { background-size: contain; } -.app-sidebar-button>.sidebar-user-text { +.app-sidebar-button > .sidebar-user-text { width: 100%; display: flex; font-size: 14px; flex-direction: column; } -.app-sidebar-button>.sidebar-user-text .fullname { +.app-sidebar-button > .sidebar-user-text .fullname { text-align: left; } -.app-sidebar-button>.sidebar-user-text .handle-text { +.app-sidebar-button > .sidebar-user-text .handle-text { font-size: 12px; opacity: 0.7; text-align: left; @@ -650,25 +650,25 @@ input[type=range].web-slider::-webkit-slider-runnable-track { background-repeat: no-repeat; } -.app-chrome .app-chrome-item.volume>input[type=range]::-webkit-slider-thumb { +.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb { transition: all var(--appleTransition); } -.app-chrome .app-chrome-item.volume>input[type=range]::-webkit-slider-thumb:hover { +.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb:hover { background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px); transform: scale(1.2); } -.app-chrome .app-chrome-item.volume>input[type=range]::-webkit-slider-thumb:active { +.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb:active { background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px); transform: scale(1); } -.app-chrome .app-chrome-item.volume>input[type=range] { +.app-chrome .app-chrome-item.volume > input[type=range] { width: 100%; } -.app-chrome .app-chrome-item.volume>input[type=range] { +.app-chrome .app-chrome-item.volume > input[type=range] { -webkit-appearance: none; height: 4px; background: rgba(255, 255, 255, 0.4); @@ -677,7 +677,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { background-repeat: no-repeat; } -.app-chrome .app-chrome-item.volume>input[type=range]::-webkit-slider-thumb { +.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; height: 14px; width: 14px; @@ -687,7 +687,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.4); } -.app-chrome .app-chrome-item.volume>input[type=range]::-webkit-slider-runnable-track { +.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-runnable-track { -webkit-appearance: none; box-shadow: none; border: none; @@ -703,7 +703,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { height: 100%; } -.app-chrome .app-chrome-item>.app-title { +.app-chrome .app-chrome-item > .app-title { width: 100px; font-size: 13px; background: url("./logotmp.png"); @@ -717,23 +717,23 @@ input[type=range].web-slider::-webkit-slider-runnable-track { -webkit-app-region: drag; } -.app-chrome .app-chrome-item>.window-controls { +.app-chrome .app-chrome-item > .window-controls { width: 138px; font-size: 13px; height: 100%; display: flex; } -.app-chrome .app-chrome-item>.window-controls>div { +.app-chrome .app-chrome-item > .window-controls > div { height: 100%; width: 32px; } -.app-chrome .app-chrome-item>.window-controls>div:hover { +.app-chrome .app-chrome-item > .window-controls > div:hover { background: rgb(200 200 200 / 10%); } -.app-chrome .app-chrome-item>.window-controls>div.close { +.app-chrome .app-chrome-item > .window-controls > div.close { width: 100%; height: 100%; background-image: var(--gfx-closeBtn); @@ -746,7 +746,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { } } -.app-chrome .app-chrome-item>.window-controls>div.minmax { +.app-chrome .app-chrome-item > .window-controls > div.minmax { background-image: var(--gfx-maxBtn); background-position: center; background-repeat: no-repeat; @@ -755,11 +755,11 @@ input[type=range].web-slider::-webkit-slider-runnable-track { height: 100%; } -.app-chrome .app-chrome-item>.window-controls>div.minmax.restore { +.app-chrome .app-chrome-item > .window-controls > div.minmax.restore { background-image: var(--gfx-restoreBtn); } -.app-chrome .app-chrome-item>.window-controls>div.minimize { +.app-chrome .app-chrome-item > .window-controls > div.minimize { background-image: var(--gfx-minBtn); background-position: center; background-repeat: no-repeat; @@ -777,14 +777,14 @@ input[type=range].web-slider::-webkit-slider-runnable-track { border-right: 1px solid rgb(200 200 200 / 8%); } -.app-chrome .app-chrome-item>.app-playback-controls { +.app-chrome .app-chrome-item > .app-playback-controls { display: flex; justify-content: center; align-content: center; width: 100%; } -.app-chrome .app-chrome-item>.app-playback-controls .song-name { +.app-chrome .app-chrome-item > .app-playback-controls .song-name { font-weight: 600; text-align: center; font-size: 13px; @@ -793,7 +793,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { overflow: hidden; } -.app-chrome .app-chrome-item>.app-playback-controls .song-duration p { +.app-chrome .app-chrome-item > .app-playback-controls .song-duration p { font-weight: 400; font-size: 10px; height: 1.2em; @@ -802,7 +802,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { margin: 0 0 0.5em; } -.app-chrome .app-chrome-item>.app-playback-controls .song-artist { +.app-chrome .app-chrome-item > .app-playback-controls .song-artist { font-weight: 400; font-size: 12px; text-align: center; @@ -813,7 +813,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { /* animation: marquee 10s linear infinite; */ } -.app-chrome .app-chrome-item>.app-playback-controls .song-progress { +.app-chrome .app-chrome-item > .app-playback-controls .song-progress { @bgColor: transparent; //height: 16px; position: absolute; @@ -822,7 +822,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { background: @bgColor; &:hover { - >input[type=range] { + > input[type=range] { &::-webkit-slider-thumb { opacity: 1; transform: scale(1); @@ -831,7 +831,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { } } - >input[type=range] { + > input[type=range] { appearance: none; width: 100%; height: 4px; @@ -871,7 +871,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { } } -.app-chrome .app-chrome-item>.app-playback-controls .artwork { +.app-chrome .app-chrome-item > .app-playback-controls .artwork { width: 42px; height: 42px; background-image: var(--artwork); @@ -885,7 +885,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { image-rendering: -webkit-optimize-contrast; } -.app-chrome .app-chrome-item>.app-playback-controls .actions { +.app-chrome .app-chrome-item > .app-playback-controls .actions { width: 42px; height: 42px; border-radius: 2px; @@ -897,7 +897,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { filter: contrast(0.8); } -.app-chrome .app-chrome-item>.app-playback-controls .playback-info { +.app-chrome .app-chrome-item > .app-playback-controls .playback-info { width: 100%; display: flex; justify-content: center; @@ -906,7 +906,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { position: relative; } -.app-chrome .app-chrome-item>.app-playback-controls .playback-info>div { +.app-chrome .app-chrome-item > .app-playback-controls .playback-info > div { width: 100%; } @@ -1476,7 +1476,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } -.lyric-line.active .lyricWaiting>div { +.lyric-line.active .lyricWaiting > div { width: 10px; height: 10px; background: white; @@ -1585,6 +1585,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { margin: 4px; font-weight: 500; } + .handle { margin: 4px; opacity: 0.7; @@ -1644,7 +1645,8 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { overflow-y: overlay; } - .modal-footer {} + .modal-footer { + } } } @@ -1656,6 +1658,42 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { max-width: 800px; overflow: hidden; + .visual-container { + display: flex; + justify-content: center; + align-items: center; + } + + .visual { + position: relative; + height: 250px; + width: 300px; + display: inline-flex; + align-items: flex-end; + justify-content: center; + filter: drop-shadow(2px 12px 6px rgb(0 0 0 / 25%)); + margin: 0 auto; + + .face { + position: absolute; + width: calc(12px * 6); + height: calc(12px * 6); + border-radius: 6px; + transform: rotateX(60deg) rotateZ(-45deg); + transition: transform 0.2s var(--appleEase); + } + + .face:nth-of-type(1) { + background: linear-gradient(45deg, #28223a, #1f2038); + } + + .face:nth-of-type(2) { + background: linear-gradient(45deg, #7d53ad, #5763ff); + transform: rotateX(60deg) rotateZ(-45deg) translateZ(30px); + opacity: 0.7; + } + } + .modal-header { padding: 16px; position: relative; @@ -1754,7 +1792,8 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { margin-right: 6px; } - .name {} + .name { + } &:hover { background: var(--selected); @@ -1811,7 +1850,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { transition: transform 0s var(--appleEase); } - >svg { + > svg { width: 8px; pointer-events: none; } @@ -1819,7 +1858,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { &:hover { background: var(--selected); - >svg { + > svg { color: rgba(200, 200, 200, 1.0); } } @@ -1843,7 +1882,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { cursor: pointer; } -.reload-btn>svg { +.reload-btn > svg { height: 50%; color: #eee; } @@ -1869,7 +1908,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { flex-flow: wrap; justify-content: center; - >.cd-mediaitem-square { + > .cd-mediaitem-square { width: 220px; height: 260px; display: inline-flex; @@ -2023,7 +2062,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { appearance: none; box-shadow: var(--ciderShadow-Generic); - >svg { + > svg { height: 50%; color: #eee; pointer-events: none; @@ -2138,7 +2177,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { background: var(--selected-click); } - >svg { + > svg { width: 70%; } } @@ -2278,13 +2317,16 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { &.no-shadow { box-shadow: none; + &::after { display: none; } } + &.subtle-shadow { box-shadow: var(--mediaItemShadow-ShadowSubtle); } + &.shadow { box-shadow: var(--mediaItemShadow-Shadow); } @@ -2613,7 +2655,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { font-size: 12px; } - >.cd-mediaitem-square-large-overlay { + > .cd-mediaitem-square-large-overlay { z-index: 3; &:hover { @@ -2621,11 +2663,11 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } } - +.cd-mediaitem-square-large-overlay { + + .cd-mediaitem-square-large-overlay { pointer-events: none; } - &:hover+.cd-mediaitem-square-large-overlay { + &:hover + .cd-mediaitem-square-large-overlay { opacity: 1; } @@ -2636,7 +2678,6 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } - /* mediaitem-square-large */ .cd-mediaitem-square-large { width: 190px; @@ -2651,7 +2692,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { margin-left: 10px; cursor: pointer; - >* { + > * { z-index: inherit; } } @@ -2681,25 +2722,25 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } -.cd-mediaitem-square-large-overlay>* { +.cd-mediaitem-square-large-overlay > * { pointer-events: auto; } -.cd-mediaitem-square-large>.cd-mediaitem-square-large-overlay { +.cd-mediaitem-square-large > .cd-mediaitem-square-large-overlay { z-index: 3; } -.cd-mediaitem-square-large>.cd-mediaitem-square-large-overlay:hover { +.cd-mediaitem-square-large > .cd-mediaitem-square-large-overlay:hover { opacity: 1; } -.cd-mediaitem-square-large+.cd-mediaitem-square-large-overlay { +.cd-mediaitem-square-large + .cd-mediaitem-square-large-overlay { pointer-events: none; } -.cd-mediaitem-square-large:hover+.cd-mediaitem-square-large-overlay { +.cd-mediaitem-square-large:hover + .cd-mediaitem-square-large-overlay { opacity: 1; } @@ -2736,7 +2777,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { margin-left: 10px; cursor: pointer; - >* { + > * { z-index: inherit; } } @@ -2766,25 +2807,25 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } -.cd-mediaitem-mvview-overlay>* { +.cd-mediaitem-mvview-overlay > * { pointer-events: auto; } -.cd-mediaitem-mvview>.cd-mediaitem-mvview-overlay { +.cd-mediaitem-mvview > .cd-mediaitem-mvview-overlay { z-index: 3; } -.cd-mediaitem-mvview>.cd-mediaitem-mvview-overlay:hover { +.cd-mediaitem-mvview > .cd-mediaitem-mvview-overlay:hover { opacity: 1; } -.cd-mediaitem-mvview+.cd-mediaitem-mvview-overlay { +.cd-mediaitem-mvview + .cd-mediaitem-mvview-overlay { pointer-events: none; } -.cd-mediaitem-mvview:hover+.cd-mediaitem-mvview-overlay { +.cd-mediaitem-mvview:hover + .cd-mediaitem-mvview-overlay { opacity: 1; } @@ -2837,8 +2878,8 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } } - >.play-btn, - >.menu-btn { + > .play-btn, + > .menu-btn { opacity: 0; appearance: none; padding: 0px; @@ -2852,14 +2893,14 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { transition: opacity 0.1s var(--appleEase); } - >.play-btn { + > .play-btn { position: absolute; bottom: 14px; left: 14px; z-index: 2; } - >.menu-btn { + > .menu-btn { position: absolute; bottom: 14px; right: 14px; @@ -2868,8 +2909,8 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { &:hover { - >.play-btn, - >.menu-btn { + > .play-btn, + > .menu-btn { opacity: 1; } } @@ -2919,7 +2960,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } /* mediaitem-square */ -.albums-square-containeru>*>.cd-mediaitem-square { +.albums-square-containeru > * > .cd-mediaitem-square { --frame: max(220px, 15vw); width: var(--frame); height: calc(var(--frame) * 13 / 11); @@ -2950,8 +2991,8 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } } - >.play-btn, - >.menu-btn { + > .play-btn, + > .menu-btn { opacity: 0; appearance: none; padding: 0px; @@ -2965,14 +3006,14 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { transition: opacity 0.1s var(--appleEase); } - >.play-btn { + > .play-btn { position: absolute; bottom: calc(var(--frame) / 220 * 14); left: calc(var(--frame) / 220 * 14); z-index: 2; } - >.menu-btn { + > .menu-btn { position: absolute; bottom: calc(var(--frame) / 220 * 14); right: calc(var(--frame) / 220 * 14); @@ -2981,8 +3022,8 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { &:hover { - >.play-btn, - >.menu-btn { + > .play-btn, + > .menu-btn { opacity: 1; } } @@ -3255,7 +3296,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { cursor: pointer; } -#apple-music-video-player-controls #player-pip>svg { +#apple-music-video-player-controls #player-pip > svg { width: 50%; } @@ -3274,7 +3315,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { cursor: pointer; } -#apple-music-video-player-controls #player-fullscreen>svg { +#apple-music-video-player-controls #player-fullscreen > svg { width: 50%; } diff --git a/src/renderer/views/components/spatial-properties.ejs b/src/renderer/views/components/spatial-properties.ejs index 5b71bf41..848c6b47 100644 --- a/src/renderer/views/components/spatial-properties.ejs +++ b/src/renderer/views/components/spatial-properties.ejs @@ -10,30 +10,31 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
@@ -132,7 +133,8 @@ 'wood-ceiling', 'wood-panel', 'uniform' - ] + ], + visualMultiplier: 4 } }, props: {}, @@ -140,9 +142,24 @@ }, methods: { + topFaceStyle() { + let style = { + transform: `rotateX(60deg) rotateZ(-45deg) translateZ(${this.app.cfg.audio.spatial_properties.room_dimensions.height * this.visualMultiplier}px)` + } + return style + }, + faceStyle() { + let style = { + width: `${this.app.cfg.audio.spatial_properties.room_dimensions.width * this.visualMultiplier}px`, + height: `${this.app.cfg.audio.spatial_properties.room_dimensions.depth * this.visualMultiplier}px`, + } + return style + }, setRoom() { window.CiderAudio.audioNodes.spatialNode.setRoomProperties(app.cfg.audio.spatial_properties.room_dimensions, app.cfg.audio.spatial_properties.room_materials); - window.CiderAudio.audioNodes.gainNode.gain.value = app.cfg.audio.spatial_properties.gain + if(!this.app.cfg.audio.normalization) { + window.CiderAudio.audioNodes.gainNode.gain.value = app.cfg.audio.spatial_properties.gain + } } } }); From 193e0a9690cc3f2698d139e67423d39ffed91898 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Thu, 30 Dec 2021 02:46:45 -0800 Subject: [PATCH 026/135] room dimension settings will now change in real time --- .../views/components/spatial-properties.ejs | 65 +++++++++++-------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/src/renderer/views/components/spatial-properties.ejs b/src/renderer/views/components/spatial-properties.ejs index 848c6b47..55531ab7 100644 --- a/src/renderer/views/components/spatial-properties.ejs +++ b/src/renderer/views/components/spatial-properties.ejs @@ -1,31 +1,31 @@ + + \ No newline at end of file diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index ee682ee4..89ce1158 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -183,14 +183,7 @@
Playlists
- +
@@ -557,6 +550,8 @@ + +<%- include('components/sidebar-playlist') %> <%- include('components/spatial-properties') %> From bda22b232136be322aa477bd84b7fe65df7092ec Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 00:58:08 -0800 Subject: [PATCH 049/135] playlist folders will now load recursively --- src/renderer/index.js | 8 ---- src/renderer/style.less | 7 +++ .../views/components/sidebar-playlist.ejs | 43 ++++++++++++++----- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 54962352..688a9607 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -619,15 +619,7 @@ const app = new Vue({ async refreshPlaylists() { let self = this this.apiCall('https://api.music.apple.com/v1/me/library/playlist-folders/p.playlistsroot/children/', res => { - console.log(res) self.playlists.listing = res.data - self.playlists.listing.forEach(playlist => { - if(playlist.type === "library-playlist-folders") { - self.mk.api.library.playlistFolderChildren(playlist.id).then(children => { - playlist.children = children - }) - } - }) self.playlists.listing.sort((a, b) => { if (a.type === "library-playlist-folders" && b.type !== "library-playlist-folders") { return -1 diff --git a/src/renderer/style.less b/src/renderer/style.less index e1cfbdfe..7e75ef19 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -1654,6 +1654,13 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { background: #ffffff0a; border-radius: 10px; padding: 1px 6px; + + .spinner { + display: block; + width: 100%; + height: 32px; + background-size: 16px; + } } } diff --git a/src/renderer/views/components/sidebar-playlist.ejs b/src/renderer/views/components/sidebar-playlist.ejs index 541ecaf9..a42346c3 100644 --- a/src/renderer/views/components/sidebar-playlist.ejs +++ b/src/renderer/views/components/sidebar-playlist.ejs @@ -8,23 +8,22 @@ {{ item.attributes.name }}
- + +
@@ -40,10 +39,34 @@ }, data: function () { return { - folderOpened: false + folderOpened: false, + children: [] } }, methods: { + getPlaylistChildren(item) { + let self = this + this.toggleFolder() + this.$root.mk.api.library.playlistFolderChildren(item.id).then(children => { + self.children = children + self.children.sort((a, b) => { + if (a.type === 'library-playlist-folders' && b.type !== 'library-playlist-folders') { + return -1 + } else if (a.type !== 'library-playlist-folders' && b.type === 'library-playlist-folders') { + return 1 + } else { + return 0 + } + }) + }) + }, + isPlaylistSelected(item) { + if(this.$root.showingPlaylist.id == item.id) { + return ["active"] + } else { + return [] + } + }, toggleFolder() { this.folderOpened = !this.folderOpened; } From b9d2c81fd2b89f8903306328932c6dccd6a8f03f Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 01:00:33 -0800 Subject: [PATCH 050/135] added indicators for selected playlists --- src/renderer/views/components/sidebar-playlist.ejs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/renderer/views/components/sidebar-playlist.ejs b/src/renderer/views/components/sidebar-playlist.ejs index a42346c3..3e22d77e 100644 --- a/src/renderer/views/components/sidebar-playlist.ejs +++ b/src/renderer/views/components/sidebar-playlist.ejs @@ -1,6 +1,7 @@ + @@ -183,7 +184,7 @@
Playlists
- +
From dffd6a4ad08214f46a8af8a1b54cc3db53d5a5fa Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 06:01:45 -0800 Subject: [PATCH 053/135] removed file --- src/renderer/bootbox.all.min.js | 6 ------ src/renderer/views/main.ejs | 1 - 2 files changed, 7 deletions(-) delete mode 100644 src/renderer/bootbox.all.min.js diff --git a/src/renderer/bootbox.all.min.js b/src/renderer/bootbox.all.min.js deleted file mode 100644 index c25de39a..00000000 --- a/src/renderer/bootbox.all.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * bootbox.js 5.5.2 - * - * http://bootboxjs.com/license.txt - */ -!function(t,e){'use strict';'function'==typeof define&&define.amd?define(['jquery'],e):'object'==typeof exports?module.exports=e(require('jquery')):t.bootbox=e(t.jQuery)}(this,function e(u,p){'use strict';var r,n,i,l;Object.keys||(Object.keys=(r=Object.prototype.hasOwnProperty,n=!{toString:null}.propertyIsEnumerable('toString'),l=(i=['toString','toLocaleString','valueOf','hasOwnProperty','isPrototypeOf','propertyIsEnumerable','constructor']).length,function(t){if('function'!=typeof t&&('object'!=typeof t||null===t))throw new TypeError('Object.keys called on non-object');var e,o,a=[];for(e in t)r.call(t,e)&&a.push(e);if(n)for(o=0;o
",header:"
",footer:'',closeButton:'',form:'
',button:'',option:'',promptMessage:'
',inputs:{text:'',textarea:'',email:'',select:'',checkbox:'
',radio:'
',date:'',time:'',number:'',password:'',range:''}},m={locale:'en',backdrop:'static',animate:!0,className:null,closeButton:!0,show:!0,container:'body',value:'',inputType:'text',swapButtonOrder:!1,centerVertical:!1,multiple:!1,scrollable:!1,reusable:!1};function c(t,e,o){return u.extend(!0,{},t,function(t,e){var o=t.length,a={};if(o<1||2').attr('label',e.group)),o=i[e.group]);var a=u(f.option);a.attr('value',e.value).text(e.text),o.append(a)}),O(i,function(t,e){n.append(e)}),n.val(r.value);break;case'checkbox':var l=u.isArray(r.value)?r.value:[r.value];if(!(a=r.inputOptions||[]).length)throw new Error('prompt with "inputType" set to "checkbox" requires at least one option');n=u('
'),O(a,function(t,o){if(o.value===p||o.text===p)throw new Error('each option needs a "value" property and a "text" property');var a=u(f.inputs[r.inputType]);a.find('input').attr('value',o.value),a.find('label').append('\n'+o.text),O(l,function(t,e){e===o.value&&a.find('input').prop('checked',!0)}),n.append(a)});break;case'radio':if(r.value!==p&&u.isArray(r.value))throw new Error('prompt with "inputType" set to "radio" requires a single, non-array value for "value"');if(!(a=r.inputOptions||[]).length)throw new Error('prompt with "inputType" set to "radio" requires at least one option');n=u('
');var s=!0;O(a,function(t,e){if(e.value===p||e.text===p)throw new Error('each option needs a "value" property and a "text" property');var o=u(f.inputs[r.inputType]);o.find('input').attr('value',e.value),o.find('label').append('\n'+e.text),r.value!==p&&e.value===r.value&&(o.find('input').prop('checked',!0),s=!1),n.append(o)}),s&&n.find('input[type="radio"]').first().prop('checked',!0)}if(t.append(n),t.on('submit',function(t){t.preventDefault(),t.stopPropagation(),e.find('.bootbox-accept').trigger('click')}),''!==u.trim(r.message)){var c=u(f.promptMessage).html(r.message);t.prepend(c),r.message=t}else r.message=t;return(e=d.dialog(r)).off('shown.bs.modal',w),e.on('shown.bs.modal',function(){n.focus()}),!0===o&&e.modal('show'),e},d}); \ No newline at end of file diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index 5f47824d..9e1ea18e 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -23,7 +23,6 @@ - From 52b1f3e0ef9ed2a2181fcea0ad76276da26c7426 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 06:34:32 -0800 Subject: [PATCH 054/135] playlist folders can now be renamed and created, folders and playlists names can now be edited with context menu --- src/renderer/index.js | 55 +++++++++++++++++-- .../views/components/sidebar-playlist.ejs | 32 ++++++++++- src/renderer/views/pages/cider-playlist.ejs | 7 ++- 3 files changed, 85 insertions(+), 9 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 0f8915aa..2fd46725 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -658,17 +658,51 @@ const app = new Vue({ action: () => { this.newPlaylist() } + }, + { + name: "New Playlist Folder", + action: () => { + this.newPlaylistFolder() + } } ] } CiderContextMenu.Create(event, menu) }, - async editPlaylist(id, name = "New Playlist") { + async editPlaylistFolder(id, name = "New Playlist") { let self = this - await app.mk.api.library.editPlaylist(id, {name: name}).then(res => { + this.mk.api.v3.music( + `/v1/me/library/playlist-folders/${id}`, + {}, + { + fetchOptions: { + method: "PATCH", + body: JSON.stringify({ + attributes: {name: name} + }) + } + } + ).then(res => { self.refreshPlaylists() }) }, + async editPlaylist(id, name = "New Playlist") { + let self = this + this.mk.api.v3.music( + `/v1/me/library/playlists/${id}`, + {}, + { + fetchOptions: { + method: "PATCH", + body: JSON.stringify({ + attributes: {name: name} + }) + } + } + ).then(res => { + self.refreshPlaylists() + }) + }, copyToClipboard(str) { navigator.clipboard.writeText(str) }, @@ -1718,7 +1752,8 @@ const app = new Vue({ this.getMadeForYou(attempt + 1) } }, - createPlaylistFolder(name = "New Folder") { + newPlaylistFolder(name = "New Folder") { + let self = this this.mk.api.v3.music( "/v1/me/library/playlist-folders/", {}, @@ -1730,10 +1765,20 @@ const app = new Vue({ }) } } - ).then(() => { + ).then((res) => { + let playlist = (res.data.data[0]) + self.playlists.listing.push({ + id: playlist.id, + attributes: { + name: playlist.attributes.name + }, + type: "library-playlist-folders", + parent: "p.playlistsroot" + }) + self.sortPlaylists() setTimeout(() => { app.refreshPlaylists() - }, 3000) + }, 13000) }) }, unauthorize() { diff --git a/src/renderer/views/components/sidebar-playlist.ejs b/src/renderer/views/components/sidebar-playlist.ejs index 5fe152f5..9a85e59f 100644 --- a/src/renderer/views/components/sidebar-playlist.ejs +++ b/src/renderer/views/components/sidebar-playlist.ejs @@ -8,7 +8,10 @@ @drop="onDrop" :href="item.href" @click='$root.appRoute(`playlist_` + item.id); $root.showingPlaylist = [];$root.getPlaylistFromID($root.page.substring(9))'> - {{ item.attributes.name }} + +
diff --git a/src/renderer/vuex.min.js b/src/renderer/vuex.min.js new file mode 100644 index 00000000..0ffa5978 --- /dev/null +++ b/src/renderer/vuex.min.js @@ -0,0 +1,6 @@ +/** + * vuex v2.0.0 + * (c) 2016 Evan You + * @license MIT + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Vuex=e()}(this,function(){"use strict";function t(t){b&&(t._devtoolHook=b,b.emit("vuex:init",t),b.on("vuex:travel-to-state",function(e){t.replaceState(e)}),t.subscribe(function(t,e){b.emit("vuex:mutation",t,e)}))}function e(t){function e(){var t=this.$options;t.store?this.$store=t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}var n=Number(t.version.split(".")[0]);if(n>=2){var o=t.config._lifecycleHooks.indexOf("init")>-1;t.mixin(o?{init:e}:{beforeCreate:e})}else{var i=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[e].concat(t.init):e,i.call(this,t)}}}function n(t){var e={};return s(t).forEach(function(t){var n=t.key,o=t.val;e[n]=function(){return"function"==typeof o?o.call(this,this.$store.state,this.$store.getters):this.$store.state[o]}}),e}function o(t){var e={};return s(t).forEach(function(t){var n=t.key,o=t.val;e[n]=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return this.$store.commit.apply(this.$store,[o].concat(t))}}),e}function i(t){var e={};return s(t).forEach(function(t){var n=t.key,o=t.val;e[n]=function(){return o in this.$store.getters||console.error("[vuex] unknown getter: "+o),this.$store.getters[o]}}),e}function r(t){var e={};return s(t).forEach(function(t){var n=t.key,o=t.val;e[n]=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return this.$store.dispatch.apply(this.$store,[o].concat(t))}}),e}function s(t){return Array.isArray(t)?t.map(function(t){return{key:t,val:t}}):Object.keys(t).map(function(e){return{key:e,val:t[e]}})}function u(t){return null!==t&&"object"==typeof t}function a(t){return t&&"function"==typeof t.then}function c(t,e){if(!t)throw new Error("[vuex] "+e)}function f(t,e){if(e.actions&&(t.actions=e.actions),e.mutations&&(t.mutations=e.mutations),e.getters&&(t.getters=e.getters),e.modules)for(var n in e.modules){if(!t.modules||!t.modules[n])return void console.warn("[vuex] trying to add a new module '"+n+"' on hot reloading, manual reload is needed");f(t.modules[n],e.modules[n])}}function l(t){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null);var e=t.state;p(t,e,[],t._options,!0),Object.keys(t._runtimeModules).forEach(function(n){p(t,e,n.split("."),t._runtimeModules[n],!0)}),h(t,e)}function h(t,e){var n=t._vm;t.getters={};var o=t._wrappedGetters,i={};Object.keys(o).forEach(function(e){var n=o[e];i[e]=function(){return n(t)},Object.defineProperty(t.getters,e,{get:function(){return t._vm[e]}})});var r=w.config.silent;w.config.silent=!0,t._vm=new w({data:{state:e},computed:i}),w.config.silent=r,t.strict&&y(t),n&&(t._withCommit(function(){n.state=null}),w.nextTick(function(){return n.$destroy()}))}function p(t,e,n,o,i){var r=!n.length,s=o.state,u=o.actions,a=o.mutations,c=o.getters,f=o.modules;if(!r&&!i){var l=_(e,n.slice(0,-1)),h=n[n.length-1];t._withCommit(function(){w.set(l,h,s||{})})}a&&Object.keys(a).forEach(function(e){d(t,e,a[e],n)}),u&&Object.keys(u).forEach(function(e){m(t,e,u[e],n)}),c&&v(t,c,n),f&&Object.keys(f).forEach(function(o){p(t,e,n.concat(o),f[o],i)})}function d(t,e,n,o){void 0===o&&(o=[]);var i=t._mutations[e]||(t._mutations[e]=[]);i.push(function(e){n(_(t.state,o),e)})}function m(t,e,n,o){void 0===o&&(o=[]);var i=t._actions[e]||(t._actions[e]=[]),r=t.dispatch,s=t.commit;i.push(function(e,i){var u=n({dispatch:r,commit:s,getters:t.getters,state:_(t.state,o),rootState:t.state},e,i);return a(u)||(u=Promise.resolve(u)),t._devtoolHook?u.catch(function(e){throw t._devtoolHook.emit("vuex:error",e),e}):u})}function v(t,e,n){Object.keys(e).forEach(function(o){var i=e[o];return t._wrappedGetters[o]?void console.error("[vuex] duplicate getter key: "+o):void(t._wrappedGetters[o]=function(t){return i(_(t.state,n),t.getters,t.state)})})}function y(t){t._vm.$watch("state",function(){c(t._committing,"Do not mutate vuex store state outside mutation handlers.")},{deep:!0,sync:!0})}function _(t,e){return e.length?e.reduce(function(t,e){return t[e]},t):t}function g(t){return w?void console.error("[vuex] already installed. Vue.use(Vuex) should be called only once."):(w=t,void e(w))}var w,b="undefined"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,x=function(e){var n=this;void 0===e&&(e={}),c(w,"must call Vue.use(Vuex) before creating a store instance."),c("undefined"!=typeof Promise,"vuex requires a Promise polyfill in this browser.");var o=e.state;void 0===o&&(o={});var i=e.plugins;void 0===i&&(i=[]);var r=e.strict;void 0===r&&(r=!1),this._options=e,this._committing=!1,this._actions=Object.create(null),this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._runtimeModules=Object.create(null),this._subscribers=[],this._watcherVM=new w;var s=this,u=this,a=u.dispatch,f=u.commit;this.dispatch=function(t,e){return a.call(s,t,e)},this.commit=function(t,e,n){return f.call(s,t,e,n)},this.strict=r,p(this,o,[],e),h(this,o),i.concat(t).forEach(function(t){return t(n)})},O={state:{}};O.state.get=function(){return this._vm.state},O.state.set=function(t){c(!1,"Use store.replaceState() to explicit replace store state.")},x.prototype.commit=function(t,e,n){var o=this;u(t)&&t.type&&(n=e,e=t,t=t.type);var i={type:t,payload:e},r=this._mutations[t];return r?(this._withCommit(function(){r.forEach(function(t){t(e)})}),void(n&&n.silent||this._subscribers.forEach(function(t){return t(i,o.state)}))):void console.error("[vuex] unknown mutation type: "+t)},x.prototype.dispatch=function(t,e){u(t)&&t.type&&(e=t,t=t.type);var n=this._actions[t];return n?n.length>1?Promise.all(n.map(function(t){return t(e)})):n[0](e):void console.error("[vuex] unknown action type: "+t)},x.prototype.subscribe=function(t){var e=this._subscribers;return e.indexOf(t)<0&&e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}},x.prototype.watch=function(t,e,n){var o=this;return c("function"==typeof t,"store.watch only accepts a function."),this._watcherVM.$watch(function(){return t(o.state)},e,n)},x.prototype.replaceState=function(t){var e=this;this._withCommit(function(){e._vm.state=t})},x.prototype.registerModule=function(t,e){"string"==typeof t&&(t=[t]),c(Array.isArray(t),"module path must be a string or an Array."),this._runtimeModules[t.join(".")]=e,p(this,this.state,t,e),h(this,this.state)},x.prototype.unregisterModule=function(t){var e=this;"string"==typeof t&&(t=[t]),c(Array.isArray(t),"module path must be a string or an Array."),delete this._runtimeModules[t.join(".")],this._withCommit(function(){var n=_(e.state,t.slice(0,-1));w.delete(n,t[t.length-1])}),l(this)},x.prototype.hotUpdate=function(t){f(this._options,t),l(this)},x.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(x.prototype,O),"undefined"!=typeof window&&window.Vue&&g(window.Vue);var k={Store:x,install:g,mapState:n,mapMutations:o,mapGetters:i,mapActions:r};return k}); \ No newline at end of file From c84a19eb1657729089390579daa7f6ec5e60c949 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 19:10:38 -0800 Subject: [PATCH 057/135] Update index.js --- src/renderer/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index c664104f..341338f4 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -2431,10 +2431,12 @@ const app = new Vue({ console.log(palette) if(palette.DarkMuted != null && palette.DarkVibrant != null){ document.querySelector("#app").style.backgroundImage = `linear-gradient(to bottom, ${self._rgbToRgb(palette.DarkMuted._rgb)} 0%, ${self._rgbToRgb(palette.DarkVibrant._rgb)} 100%)` - }else{ + }else if(palette.Muted != null && palette.LightMuted != null){ document.querySelector("#app").style.backgroundImage = `linear-gradient(to bottom, ${self._rgbToRgb(palette.Muted._rgb)} 0%, ${self._rgbToRgb(palette.LightMuted._rgb)} 100%)` + }else{ + document.querySelector("#app").style.backgroundImage = `linear-gradient(to bottom, ${self._rgbToRgb(palette.Vibrant._rgb)} 0%, ${self._rgbToRgb(palette.DarkVibrant._rgb)} 100%)` } - }) + }).setQuantizer(Vibrant.Quantizer.WebWorker) try { clearInterval(bginterval); From 23fb0db161b2fc082d26a783470570bd2b199cd4 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 19:32:18 -0800 Subject: [PATCH 058/135] slight animation on bg --- src/renderer/index.js | 14 ++++++++++---- src/renderer/style.less | 8 ++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 341338f4..deae283d 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -2408,6 +2408,7 @@ const app = new Vue({ return newurl }, _rgbToRgb(rgb = [0,0,0]) { + // if rgb return `rgb(${rgb[0]},${rgb[1]},${rgb[2]})` }, getNowPlayingArtworkBG(size = 600) { @@ -2428,13 +2429,18 @@ const app = new Vue({ if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) { document.querySelector('.bg-artwork').src = this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size); Vibrant.from(this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size)).getPalette().then(palette=>{ - console.log(palette) + let angle = "140deg" if(palette.DarkMuted != null && palette.DarkVibrant != null){ - document.querySelector("#app").style.backgroundImage = `linear-gradient(to bottom, ${self._rgbToRgb(palette.DarkMuted._rgb)} 0%, ${self._rgbToRgb(palette.DarkVibrant._rgb)} 100%)` + document.querySelector("#app").style.backgroundImage = `linear-gradient(${angle}, ${self._rgbToRgb(palette.DarkMuted._rgb)} 0%, ${self._rgbToRgb(palette.DarkVibrant._rgb)} 100%)` }else if(palette.Muted != null && palette.LightMuted != null){ - document.querySelector("#app").style.backgroundImage = `linear-gradient(to bottom, ${self._rgbToRgb(palette.Muted._rgb)} 0%, ${self._rgbToRgb(palette.LightMuted._rgb)} 100%)` + document.querySelector("#app").style.backgroundImage = `linear-gradient(${angle}, ${self._rgbToRgb(palette.Muted._rgb)} 0%, ${self._rgbToRgb(palette.LightMuted._rgb)} 100%)` + }else if(palette.Vibrant != null && palette.DarkVibrant != null){ + document.querySelector("#app").style.backgroundImage = `linear-gradient(${angle}, ${self._rgbToRgb(palette.Vibrant._rgb)} 0%, ${self._rgbToRgb(palette.DarkVibrant._rgb)} 100%)` }else{ - document.querySelector("#app").style.backgroundImage = `linear-gradient(to bottom, ${self._rgbToRgb(palette.Vibrant._rgb)} 0%, ${self._rgbToRgb(palette.DarkVibrant._rgb)} 100%)` + let colors = Object.values(palette).filter(color=>color!=null) + if(colors.length > 0){ + document.querySelector("#app").style.backgroundImage = `linear-gradient(${angle}, ${self._rgbToRgb(colors[0]._rgb)} 0%, ${self._rgbToRgb(colors[1]._rgb)} 100%)` + } } }).setQuantizer(Vibrant.Quantizer.WebWorker) diff --git a/src/renderer/style.less b/src/renderer/style.less index 16bf58f1..8dc3b457 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -97,6 +97,14 @@ body[platform='linux'] { margin: 0 auto; position: relative; overflow: hidden; + background-size: 400% 400%; + animation: bgGradient 10s ease infinite; +} + +@keyframes bgGradient { + 0%{background-position:0% 50%} + 50%{background-position:100% 50%} + 100%{background-position:0% 50%} } [hidden] { From 250a94f991cbf64011054335e314b4889730a4f4 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 19:55:28 -0800 Subject: [PATCH 059/135] changes to bg gradient --- src/renderer/index.js | 24 ++++++++++++------------ src/renderer/style.less | 29 ++++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index deae283d..2c9ae5c2 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -341,7 +341,7 @@ const app = new Vue({ break; case "disabled": document.querySelector("html").style.background = "#222"; - document.querySelector("body").style.background = "#222"; + // document.querySelector("body").style.background = "#222"; break; } }, @@ -2430,18 +2430,18 @@ const app = new Vue({ document.querySelector('.bg-artwork').src = this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size); Vibrant.from(this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size)).getPalette().then(palette=>{ let angle = "140deg" - if(palette.DarkMuted != null && palette.DarkVibrant != null){ - document.querySelector("#app").style.backgroundImage = `linear-gradient(${angle}, ${self._rgbToRgb(palette.DarkMuted._rgb)} 0%, ${self._rgbToRgb(palette.DarkVibrant._rgb)} 100%)` - }else if(palette.Muted != null && palette.LightMuted != null){ - document.querySelector("#app").style.backgroundImage = `linear-gradient(${angle}, ${self._rgbToRgb(palette.Muted._rgb)} 0%, ${self._rgbToRgb(palette.LightMuted._rgb)} 100%)` - }else if(palette.Vibrant != null && palette.DarkVibrant != null){ - document.querySelector("#app").style.backgroundImage = `linear-gradient(${angle}, ${self._rgbToRgb(palette.Vibrant._rgb)} 0%, ${self._rgbToRgb(palette.DarkVibrant._rgb)} 100%)` - }else{ - let colors = Object.values(palette).filter(color=>color!=null) - if(colors.length > 0){ - document.querySelector("#app").style.backgroundImage = `linear-gradient(${angle}, ${self._rgbToRgb(colors[0]._rgb)} 0%, ${self._rgbToRgb(colors[1]._rgb)} 100%)` - } + let gradient = "" + let colors = Object.values(palette).filter(color=>color!=null) + if(colors.length > 0){ + let stops = [] + colors.forEach(color=>{ + stops.push(`${self._rgbToRgb(color._rgb)} 0%`) + }) + stops.push(`${self._rgbToRgb(colors[0]._rgb)} 100%`) + gradient = `linear-gradient(${angle}, ${stops.join(", ")}` } + + document.querySelector("#app").style.setProperty("--bgColor", gradient) }).setQuantizer(Vibrant.Quantizer.WebWorker) try { diff --git a/src/renderer/style.less b/src/renderer/style.less index 8dc3b457..21792107 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -88,6 +88,7 @@ body[platform='linux'] { #app { --color1: rgba(30, 30, 30, 30%); --color2: rgba(15, 15, 15, 30%); + --bgColor: transparent; --chromeHeight: 55px; width: 100%; height: 100%; @@ -98,13 +99,30 @@ body[platform='linux'] { position: relative; overflow: hidden; background-size: 400% 400%; - animation: bgGradient 10s ease infinite; } -@keyframes bgGradient { - 0%{background-position:0% 50%} - 50%{background-position:100% 50%} - 100%{background-position:0% 50%} +#app::before { + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 250%; + background-image: var(--bgColor); + content: ""; + z-index: -1; + transform: rotateZ(0deg); + transform-origin: center; + animation: bgRotate 10s linear infinite; + filter: brightness(300%) saturate(300%) contrast(1.5); +} + +@keyframes bgRotate { + 0% { + transform: rotateZ(0deg); + } + 100% { + transform: rotateZ(360deg); + } } [hidden] { @@ -153,6 +171,7 @@ input[type="text"], input[type="number"] { transition: opacity .25s var(--appleEase); pointer-events: none; transform: translateZ(0px); + display: none; } From acbc4a8995e4b94d74baf9ba3c4895ab74562227 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 19:58:35 -0800 Subject: [PATCH 060/135] adjusted filter --- src/renderer/style.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index 21792107..b16d2902 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -113,7 +113,7 @@ body[platform='linux'] { transform: rotateZ(0deg); transform-origin: center; animation: bgRotate 10s linear infinite; - filter: brightness(300%) saturate(300%) contrast(1.5); + filter: brightness(100%) saturate(200%) contrast(1.5); } @keyframes bgRotate { From b4ab3c19f353239c14398ed333f03d4f3b1ba371 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Tue, 4 Jan 2022 11:07:16 +0700 Subject: [PATCH 061/135] fix now playing artwork error --- src/renderer/index.js | 1 - src/renderer/style.less | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index deae283d..5e286707 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -2478,7 +2478,6 @@ const app = new Vue({ if (document.querySelector('.app-playback-controls .artwork') != null) { clearInterval(interval); } - document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', ''); if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) { document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${decodeURI((this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"])).replace('{w}', size).replace('{h}', size)}")`); try { diff --git a/src/renderer/style.less b/src/renderer/style.less index 8dc3b457..326c371a 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -682,7 +682,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { } .app-chrome-item.volume-icon { - filter: contrast(0); + opacity: 0.7; background-image: url(http://localhost:9000/assets/volume-up.svg); height: 15px; width: 30px; From 4ca4f33826adadd2c78ca6a3a8aecb6c35418b83 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 20:30:39 -0800 Subject: [PATCH 062/135] fixes lyrics shifting whole view --- src/renderer/style.less | 19 ++++++++++++++ src/renderer/views/components/lyrics-view.ejs | 26 ++++++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index b16d2902..872f71ad 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -101,6 +101,25 @@ body[platform='linux'] { background-size: 400% 400%; } +.bgGradientMaterial { + position:relative; +} + +.bgGradientMaterial::before { + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 250%; + background-image: var(--bgColor); + content: ""; + z-index: -1; + transform: rotateZ(0deg); + transform-origin: center; + animation: bgRotate 10s linear infinite; + filter: brightness(100%) saturate(200%) contrast(1.5); +} + #app::before { position: absolute; top: -50%; diff --git a/src/renderer/views/components/lyrics-view.ejs b/src/renderer/views/components/lyrics-view.ejs index f59c6219..b6971240 100644 --- a/src/renderer/views/components/lyrics-view.ejs +++ b/src/renderer/views/components/lyrics-view.ejs @@ -130,10 +130,30 @@ if(this.$refs.lyricsview.querySelector(`.lyric-line[line-index="${prevLine}"]`)) {this.$refs.lyricsview.querySelector(`.lyric-line[line-index="${prevLine}"]`).classList.remove("active");} this.$refs.lyricsview.querySelector(`.lyric-line[line-index="${i}"]`).classList.add("active") if (checkIfScrollIsStatic) { - this.$refs.lyricsview.querySelector(`.lyric-line[line-index="${i}"]`).scrollIntoView({ - behavior: "smooth", - block: "center" + let lyricElement = this.$refs.lyricsview.querySelector(`.lyric-line[line-index="${i}"]`) + // this.$refs.lyricsview.querySelector(`.lyric-line[line-index="${i}"]`).scrollIntoView({ + // behavior: "smooth", + // block: "nearest", inline: 'start' + // }) + let parent = lyricElement.parentElement + let parentRect = parent.getBoundingClientRect() + let lyricElementRect = lyricElement.getBoundingClientRect() + let parentScrollTop = parent.scrollTop + let parentScrollLeft = parent.scrollLeft + let parentScrollTopDiff = parentScrollTop - parentRect.top + let parentScrollLeftDiff = parentScrollLeft - parentRect.left + let lyricElementScrollTop = lyricElementRect.top + parentScrollTopDiff + let lyricElementScrollLeft = lyricElementRect.left + parentScrollLeftDiff + let scrollTopDiff = lyricElementScrollTop - parentScrollTop + let scrollLeftDiff = lyricElementScrollLeft - parentScrollLeft + let scrollTop = parent.scrollTop + scrollTopDiff + let scrollLeft = parent.scrollLeft + scrollLeftDiff + parent.scrollTo({ + top: scrollTop - 128, + left: scrollLeft, + behavior: 'smooth' }) + } } } else if (app.currentLyricsLine == 0 && app.drawer.open) { From e087129b01f5935a7e6f5e2fdb33b403210b4cc7 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 20:51:15 -0800 Subject: [PATCH 063/135] added toggle for animated artwork background, animated background will stop when window is out of focus --- index.js | 1 + src/renderer/index.js | 3 ++ src/renderer/style.less | 70 ++++++++++++++++++++------- src/renderer/views/main.ejs | 3 +- src/renderer/views/pages/settings.ejs | 8 +++ 5 files changed, 67 insertions(+), 18 deletions(-) diff --git a/index.js b/index.js index 4badd4c0..959e94f0 100644 --- a/index.js +++ b/index.js @@ -50,6 +50,7 @@ const configDefaults = { "refresh_rate": 0, "animated_artwork": "limited", // 0 = always, 1 = limited, 2 = never "animated_artwork_qualityLevel": 1, + "bg_artwork_rotation": false, "hw_acceleration": "default", // default, webgpu, disabled "window_transparency": "default" }, diff --git a/src/renderer/index.js b/src/renderer/index.js index ea33213c..e193b728 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -223,6 +223,7 @@ const app = new Vue({ mxmtoken: "", mkIsReady: false, playerReady: false, + animateBackground: false, lyricon: false, currentTrackID: '', currentTrackIDBG: '', @@ -2583,10 +2584,12 @@ const app = new Vue({ document.querySelectorAll(".animated-artwork-video").forEach(el => { el.play() }) + this.animateBackground = true } else { document.querySelectorAll(".animated-artwork-video").forEach(el => { el.pause() }) + this.animateBackground = false } }, async nowPlayingContextMenu(event) { diff --git a/src/renderer/style.less b/src/renderer/style.less index 8c590a64..f70c9f50 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -99,28 +99,32 @@ body[platform='linux'] { position: relative; overflow: hidden; background-size: 400% 400%; + + &::before { + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 250%; + background-image: var(--bgColor); + content: ""; + z-index: -1; + transform: rotateZ(0deg); + transform-origin: center; + animation: bgRotate 10s linear infinite; + filter: brightness(100%) saturate(200%) contrast(1.5); + } + + &.noanimation::before { + animation: none; + } } -.bgGradientMaterial { +.bgGradientMaterial-base { position:relative; } -.bgGradientMaterial::before { - position: absolute; - top: -50%; - left: -50%; - width: 200%; - height: 250%; - background-image: var(--bgColor); - content: ""; - z-index: -1; - transform: rotateZ(0deg); - transform-origin: center; - animation: bgRotate 10s linear infinite; - filter: brightness(100%) saturate(200%) contrast(1.5); -} - -#app::before { +.bgGradientMaterial-base::before { position: absolute; top: -50%; left: -50%; @@ -305,6 +309,27 @@ input[type=range].web-slider::-webkit-slider-runnable-track { height: 94%; backdrop-filter: blur(40px) saturate(180%); box-shadow: var(--ciderShadow-Generic); + overflow: hidden; + + .bgArtworkMaterial { + display: none; + position: absolute; + width: 100%; + height: 100%; + &::before { + position: absolute; + top: -10%; + left: -100%; + width: 100vh; + height: 100vh; + background-image: var(--bgColor); + content: ""; + z-index: -1; + transform: rotateZ(0deg); + transform-origin: center; + animation: bgRotate 10s linear infinite; + } + } } .search-input-container { @@ -3327,9 +3352,20 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { box-shadow: unset; background: black; + .bgArtworkMaterial { + display: block; + top: -50%; + left: -20%; + width: 200VH; + height: 200VH; + } + .lyric-body { justify-content: center; align-items: center; + padding: 0px; + margin: 0px; + overflow: hidden; .lyric-line { pointer-events: none; diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index 276415b9..0cd98afc 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -30,7 +30,7 @@ -
+
@@ -447,6 +447,7 @@
+
diff --git a/src/renderer/views/pages/settings.ejs b/src/renderer/views/pages/settings.ejs index 66f6d3af..9372feb9 100644 --- a/src/renderer/views/pages/settings.ejs +++ b/src/renderer/views/pages/settings.ejs @@ -82,6 +82,14 @@
+
+
+ Animated Window Background +
+
+ +
+
Window Transparency From 3bf8aabd277eda17ebca245215461ecdd764df06 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 20:53:40 -0800 Subject: [PATCH 064/135] fullscreen lyrics now have animated background --- src/renderer/style.less | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index f70c9f50..fc0bd31b 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -3354,10 +3354,12 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { .bgArtworkMaterial { display: block; - top: -50%; - left: -20%; - width: 200VH; - height: 200VH; + &::before { + top: -50%; + left: -20%; + width: 200VH; + height: 200VH; + } } .lyric-body { From add235af052781b9d884664749ba53db4030a72f Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 21:26:01 -0800 Subject: [PATCH 065/135] change to artwork bg --- src/renderer/index.js | 34 +++++++++++++------------ src/renderer/style.less | 51 +++++++++++++++++++++++++++++-------- src/renderer/views/main.ejs | 8 ++++-- 3 files changed, 65 insertions(+), 28 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index e193b728..0306b38d 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -2428,22 +2428,24 @@ const app = new Vue({ this.currentTrackID = this.mk.nowPlayingItem["id"]; document.querySelector('.bg-artwork').src = ""; if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) { - document.querySelector('.bg-artwork').src = this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size); - Vibrant.from(this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size)).getPalette().then(palette=>{ - let angle = "140deg" - let gradient = "" - let colors = Object.values(palette).filter(color=>color!=null) - if(colors.length > 0){ - let stops = [] - colors.forEach(color=>{ - stops.push(`${self._rgbToRgb(color._rgb)} 0%`) - }) - stops.push(`${self._rgbToRgb(colors[0]._rgb)} 100%`) - gradient = `linear-gradient(${angle}, ${stops.join(", ")}` - } - - document.querySelector("#app").style.setProperty("--bgColor", gradient) - }).setQuantizer(Vibrant.Quantizer.WebWorker) + document.querySelectorAll('.bg-artwork').forEach(artwork => { + artwork.src = this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size); + }) + // Vibrant.from(this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size)).getPalette().then(palette=>{ + // let angle = "140deg" + // let gradient = "" + // let colors = Object.values(palette).filter(color=>color!=null) + // if(colors.length > 0){ + // let stops = [] + // colors.forEach(color=>{ + // stops.push(`${self._rgbToRgb(color._rgb)} 0%`) + // }) + // stops.push(`${self._rgbToRgb(colors[0]._rgb)} 100%`) + // gradient = `linear-gradient(${angle}, ${stops.join(", ")}` + // } + // + // document.querySelector("#app").style.setProperty("--bgColor", gradient) + // }).setQuantizer(Vibrant.Quantizer.WebWorker) try { clearInterval(bginterval); diff --git a/src/renderer/style.less b/src/renderer/style.less index fc0bd31b..1b285ebf 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -89,6 +89,8 @@ body[platform='linux'] { --color1: rgba(30, 30, 30, 30%); --color2: rgba(15, 15, 15, 30%); --bgColor: transparent; + --bgWidth: 0px; + --bgHeight: 0px; --chromeHeight: 55px; width: 100%; height: 100%; @@ -104,8 +106,8 @@ body[platform='linux'] { position: absolute; top: -50%; left: -50%; - width: 200%; - height: 250%; + width: var(--bgWidth); + height: var(--bgHeight); background-image: var(--bgColor); content: ""; z-index: -1; @@ -179,22 +181,51 @@ input[type="text"], input[type="number"] { .bg-artwork { position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; + width: 200%; background: var(--artwork); z-index: -1; - object-fit: cover; - object-position: center; + //object-fit: cover; + //object-position: center; /* filter: blur(60px) saturate(180%); opacity: 0.70; */ filter: blur(180px) saturate(280%); - opacity: 0.60; + opacity: 1; transition: opacity .25s var(--appleEase); pointer-events: none; transform: translateZ(0px); - display: none; + animation: rotateBg 35s linear infinite; + //display: none; +} + +@keyframes rotateBg { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + + +.bg-artwork-container { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + pointer-events: none; + + .bg-artwork.a { + top:0; + left:0; + mix-blend-mode: luminosity; + } + .bg-artwork.b { + bottom:0; + right:0; + animation-direction: reverse; + animation-delay: 10s; + } } diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index 0cd98afc..5db62bc1 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -462,8 +462,12 @@
- +
+ + +
From 35c200ce8a1b9b0704bcaff965f8968c0dfaa4ba Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 21:28:17 -0800 Subject: [PATCH 066/135] moved animation class to new container --- src/renderer/style.less | 10 ++++++---- src/renderer/views/main.ejs | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index 1b285ebf..9210622a 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -116,10 +116,6 @@ body[platform='linux'] { animation: bgRotate 10s linear infinite; filter: brightness(100%) saturate(200%) contrast(1.5); } - - &.noanimation::before { - animation: none; - } } .bgGradientMaterial-base { @@ -226,6 +222,12 @@ input[type="text"], input[type="number"] { animation-direction: reverse; animation-delay: 10s; } + + &.noanimation { + .bg-artwork { + animation: none; + } + } } diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index 5db62bc1..9efc0093 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -30,7 +30,7 @@ -
+
@@ -462,7 +462,7 @@
-
+
Date: Mon, 3 Jan 2022 21:34:17 -0800 Subject: [PATCH 067/135] removed gradient anim from #app --- src/renderer/style.less | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index 9210622a..079c9615 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -102,20 +102,20 @@ body[platform='linux'] { overflow: hidden; background-size: 400% 400%; - &::before { - position: absolute; - top: -50%; - left: -50%; - width: var(--bgWidth); - height: var(--bgHeight); - background-image: var(--bgColor); - content: ""; - z-index: -1; - transform: rotateZ(0deg); - transform-origin: center; - animation: bgRotate 10s linear infinite; - filter: brightness(100%) saturate(200%) contrast(1.5); - } + //&::before { + // position: absolute; + // top: -50%; + // left: -50%; + // width: var(--bgWidth); + // height: var(--bgHeight); + // background-image: var(--bgColor); + // content: ""; + // z-index: -1; + // transform: rotateZ(0deg); + // transform-origin: center; + // animation: bgRotate 10s linear infinite; + // filter: brightness(100%) saturate(200%) contrast(1.5); + //} } .bgGradientMaterial-base { From af07b818c09c69c3e05e8f7461bcb1ad3ee7d744 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 21:37:00 -0800 Subject: [PATCH 068/135] reduced gpu by 5% for animated --- src/renderer/style.less | 1 + 1 file changed, 1 insertion(+) diff --git a/src/renderer/style.less b/src/renderer/style.less index 079c9615..aef42c05 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -190,6 +190,7 @@ input[type="text"], input[type="number"] { pointer-events: none; transform: translateZ(0px); animation: rotateBg 35s linear infinite; + backface-visibility: hidden //display: none; } From f3ad1d3d4e29d19e56dbd4fa7559e7ef30188b16 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 21:37:28 -0800 Subject: [PATCH 069/135] Update style.less --- src/renderer/style.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index aef42c05..a992ef5c 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -215,7 +215,7 @@ input[type="text"], input[type="number"] { .bg-artwork.a { top:0; left:0; - mix-blend-mode: luminosity; + //mix-blend-mode: luminosity; } .bg-artwork.b { bottom:0; From ea6f11dfca6e942506e5673d7e2ec666b6800f00 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 22:11:35 -0800 Subject: [PATCH 070/135] fix for scroll up fab breaking the page --- src/renderer/views/pages/collection-list.ejs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/renderer/views/pages/collection-list.ejs b/src/renderer/views/pages/collection-list.ejs index c60d2c80..3c0d2ba2 100644 --- a/src/renderer/views/pages/collection-list.ejs +++ b/src/renderer/views/pages/collection-list.ejs @@ -64,7 +64,11 @@ }, scrollToTop() { let target = document.querySelector(".header-text") - target.scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"}) + document.querySelector("#app-content").scrollTo({ + top: 0, + left: 0, + behavior: 'smooth' + }) }, getNext() { // if this.data.next is not null, then we can run this.data.next() and concat to this.data.data to get the next page From 952e632e493c3a59fd511ddc91eb375594b2b1b5 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 3 Jan 2022 22:20:21 -0800 Subject: [PATCH 071/135] tweaks to bg --- src/renderer/style.less | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index a992ef5c..e09b02e8 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -179,19 +179,13 @@ input[type="text"], input[type="number"] { position: absolute; width: 200%; background: var(--artwork); - z-index: -1; - //object-fit: cover; - //object-position: center; - /* filter: blur(60px) saturate(180%); - opacity: 0.70; */ - filter: blur(180px) saturate(280%); + filter: brightness(200%) blur(180px) saturate(280%) contrast(2); opacity: 1; - transition: opacity .25s var(--appleEase); + transition: opacity 0.25s var(--appleEase); pointer-events: none; transform: translateZ(0px); animation: rotateBg 35s linear infinite; - backface-visibility: hidden - //display: none; + backface-visibility: hidden; } @keyframes rotateBg { @@ -211,6 +205,8 @@ input[type="text"], input[type="number"] { bottom: 0; right: 0; pointer-events: none; + transform: translateZ(0px); + z-index: -1; .bg-artwork.a { top:0; From 54f197e1e3567516ec02975f836f67bebfc08b27 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Tue, 4 Jan 2022 13:43:05 +0700 Subject: [PATCH 072/135] add button to change lyrics layout --- src/renderer/index.js | 2 ++ src/renderer/style.less | 56 +++++++++++++++++++++++++++++++++++++ src/renderer/views/main.ejs | 9 ++++-- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 0306b38d..cb5c6fb8 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -132,6 +132,7 @@ const app = new Vue({ resultsSocial: {}, limit: 10 }, + fullscreenLyrics: false, playerLCD: { playbackDuration: 0, desiredDuration: 0, @@ -321,6 +322,7 @@ const app = new Vue({ }); }, modularUITest(val = false) { + this.fullscreenLyrics = val; if (val) { document.querySelector("#app-main").classList.add("modular-fs") } else { diff --git a/src/renderer/style.less b/src/renderer/style.less index e09b02e8..f2efc5ad 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -1557,6 +1557,34 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { font-size: 26px; } +.lyric-footer { + bottom: 0; + height: 50px; + width: 100%; + position: absolute; + z-index: 1000; + opacity: 1; + background: rgba(30, 30, 30, 0.8); + justify-content: center; + align-items: center; + display: none; + transition: opacity 0.1s var(--appleEase); +} + +.lyric-body:hover + .lyric-footer, .lyric-footer:hover { + display: flex; +} + +.modular-fs .app-drawer .lyric-footer { + background: rgba(30, 30, 30, 0.3); + display: flex; + opacity: 0.3; +} + +.modular-fs .app-drawer .lyric-footer:hover { + opacity: 1; +} + .lyric-line { --bgSpeed: 1s; appearance: none; @@ -1645,6 +1673,34 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { filter: contrast(0.5); } +.lyric-footer { + bottom: 0; + height: 50px; + width: 100%; + position: absolute; + z-index: 1000; + opacity: 1; + background: rgba(30, 30, 30, 0.8); + justify-content: center; + align-items: center; + display: none; + transition: opacity 0.1s var(--appleEase); +} + +.lyric-body:hover + .lyric-footer, .lyric-footer:hover { + display: flex; +} + +.modular-fs .app-drawer .lyric-footer { + background: rgba(30, 30, 30, 0.3); + display: flex; + opacity: 0.3; +} + +.modular-fs .app-drawer .lyric-footer:hover { + opacity: 1; +} + @keyframes lyricWaitingLine { 0% { opacity: 0.25; diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index 9efc0093..3fb66b37 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -447,9 +447,12 @@
-
- +
+ +
From a1284adad1759e1ec5e63af837d376e1f51cac83 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Tue, 4 Jan 2022 13:44:18 +0700 Subject: [PATCH 073/135] no --- src/main/cider-base.js | 29 ++++++- src/renderer/audio/audio.js | 15 ++++ src/renderer/style.less | 28 ------- .../components/mediaitem-square-large.ejs | 75 +++++++++++++++++-- 4 files changed, 112 insertions(+), 35 deletions(-) diff --git a/src/main/cider-base.js b/src/main/cider-base.js index 032106d8..602aad49 100644 --- a/src/main/cider-base.js +++ b/src/main/cider-base.js @@ -8,9 +8,11 @@ const os = require('os'); const yt = require('youtube-search-without-api-key'); const discord = require('./discordrpc'); const lastfm = require('./lastfm'); +const {writeFile} = require('fs'); const mpris = require('./mpris'); const mm = require('music-metadata'); const fetch = require('electron-fetch').default; +const {Stream} = require('stream'); // Analytics for debugging. const ElectronSentry = require("@sentry/electron"); @@ -18,6 +20,8 @@ ElectronSentry.init({dsn: "https://68c422bfaaf44dea880b86aad5a820d2@o954055.inge const CiderBase = { win: null, + requests : [], + audiostream : new Stream.PassThrough(), async Start() { this.clientPort = await getPort({port: 9000}); this.win = this.CreateBrowserWindow() @@ -241,6 +245,10 @@ const CiderBase = { }) }); + ipcMain.on('writeAudio', function(event,buffer){ + CiderBase.audiostream.write(Buffer.from(buffer)); + }) + return win }, @@ -284,7 +292,7 @@ const CiderBase = { webapp.use(function (req, res, next) { // if not localhost - if (req.headers.host.includes("localhost") && req.headers["user-agent"].includes("Cider")) { + if (req.url.includes("audio.webm") ||(req.headers.host.includes("localhost") && req.headers["user-agent"].includes("Cider"))) { next(); } }); @@ -294,6 +302,25 @@ const CiderBase = { //res.sendFile(path.join(webRemotePath, 'index_old.html')); res.render("main", CiderBase.EnvironmentVariables) }); + webapp.get('/audio.webm', function (req, res) { + try { + req.connection.setTimeout(Number.MAX_SAFE_INTEGER); + // CiderBase.requests.push({req: req, res: res}); + // var pos = CiderBase.requests.length - 1; + // req.on("close", () => { + // console.info("CLOSED", CiderBase.requests.length); + // requests.splice(pos, 1); + // console.info("CLOSED", CiderBase.requests.length); + // }); + CiderBase.audiostream.on('data', (data) => { + try { + res.write(data); + } catch (ex) { + console.log(ex) + } + }) + } catch (ex) {console.log(ex)} + }); webapp.listen(CiderBase.clientPort, function () { console.log(`Cider client port: ${CiderBase.clientPort}`); }); diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 549f1a0f..64118b7c 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -75,6 +75,21 @@ var CiderAudio = { CiderAudio.audioNodes.spatialNode.output.disconnect(CiderAudio.context.destination); CiderAudio.audioNodes.gainNode.disconnect(CiderAudio.audioNodes.spatialInput.input);} catch(e){} CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination); + }, + sendAudio: function (){ + var options = { + mimeType : 'audio/webm; codecs=opus' + }; + var destnode = CiderAudio.context.createMediaStreamDestination(); + CiderAudio.audioNodes.gainNode.connect(destnode) + var mediaRecorder = new MediaRecorder(destnode.stream,options); + mediaRecorder.start(1); + mediaRecorder.ondataavailable = function(e) { + e.data.arrayBuffer().then(buffer => { + ipcRenderer.send('writeAudio',buffer) + } + ); + } } } diff --git a/src/renderer/style.less b/src/renderer/style.less index f2efc5ad..bde486d9 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -1556,34 +1556,6 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { font-weight: bold; font-size: 26px; } - -.lyric-footer { - bottom: 0; - height: 50px; - width: 100%; - position: absolute; - z-index: 1000; - opacity: 1; - background: rgba(30, 30, 30, 0.8); - justify-content: center; - align-items: center; - display: none; - transition: opacity 0.1s var(--appleEase); -} - -.lyric-body:hover + .lyric-footer, .lyric-footer:hover { - display: flex; -} - -.modular-fs .app-drawer .lyric-footer { - background: rgba(30, 30, 30, 0.3); - display: flex; - opacity: 0.3; -} - -.modular-fs .app-drawer .lyric-footer:hover { - opacity: 1; -} .lyric-line { --bgSpeed: 1s; diff --git a/src/renderer/views/components/mediaitem-square-large.ejs b/src/renderer/views/components/mediaitem-square-large.ejs index 04b713b1..5f07c19a 100644 --- a/src/renderer/views/components/mediaitem-square-large.ejs +++ b/src/renderer/views/components/mediaitem-square-large.ejs @@ -1,5 +1,4 @@ diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index 8bdcd644..e1196d37 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -1,7 +1,9 @@ @@ -70,11 +72,54 @@ await this.getBadges() }, methods: { + getBgColor() { + let color = `#${(this.item.attributes.artwork.bgColor != null) ? (this.item.attributes.artwork.bgColor) : `333333`}` + let c = color.substring(1); // strip # + var rgb = parseInt(c, 16); // convert rrggbb to decimal + var r = (rgb >> 16) & 0xff; // extract red + var g = (rgb >> 8) & 0xff; // extract green + var b = (rgb >> 0) & 0xff; // extract blue + + var luma = 0.2126 * r + 0.7152 * g + 0.0722 * b; // per ITU-R BT.709 + + console.log(color) + console.log(luma) + if (luma > 140) { + return "#aaaaaa" + }else{ + return color + } + + + }, + getSubtitle() { + if(this.kind == 'card') { + try { + if (typeof this.item.attributes.artistNames != "undefined") { + return this.item.attributes.artistNames + } else if (typeof this.item.attributes.editorialNotes != "undefined") { + return this.item.attributes.editorialNotes.short + } else if (typeof this.item.attributes.artistName != "undefined") { + return this.item.attributes.artistName + } else { + return '' + } + }catch(e) { + return '' + } + }else { + if (typeof this.item.attributes.artistName != "undefined") { + return this.item.attributes.artistName + } else { + return '' + } + } + }, async getBadges() { let self = this - if(this.badges[this.item.attributes.playParams.id ?? this.item.id]) { + if (this.badges[this.item.attributes.playParams.id ?? this.item.id]) { let friends = this.badges[this.item.attributes.playParams.id ?? this.item.id] - if(friends) { + if (friends) { friends.forEach(function (friend) { self.app.mk.api.socialProfile(friend).then(data => { self.itemBadges.push(data) @@ -141,6 +186,9 @@ default: return [] break; + case "card": + return ["mediaitem-card"] + break; case "385": // editorial return ["mediaitem-brick"] break; @@ -311,12 +359,12 @@ }) } let rating = await app.getRating(self.item) - if(rating == 0) { + if (rating == 0) { menus.normal.items.find(x => x.id == 'love').disabled = false menus.normal.items.find(x => x.id == 'dislike').disabled = false - }else if(rating == 1) { + } else if (rating == 1) { menus.normal.items.find(x => x.id == 'unlove').disabled = false - }else if(rating == -1) { + } else if (rating == -1) { menus.normal.items.find(x => x.id == 'undo_dislike').disabled = false } @@ -332,9 +380,9 @@ }, }, beforeDestroy: function () { - this.item = null; - this.kind = null; - this.size = null; + // this.item = null; + // this.kind = null; + // this.size = null; } }); \ No newline at end of file From b7f3e04eaa47bc05fa4a5d9b94a9e636becf92d0 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 5 Jan 2022 05:58:36 -0800 Subject: [PATCH 094/135] changes to no-gpu body class --- src/renderer/style.less | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/renderer/style.less b/src/renderer/style.less index c86604c2..28d9e322 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -3846,6 +3846,13 @@ input[type=checkbox][switch]:checked:active::before { } body.no-gpu { + --ciderShadow-Generic: var(--mediaItemShadow); + --mediaItemShadow-Shadow: var(--mediaItemShadow); + --mediaItemShadow-ShadowSubtle: var(--mediaItemShadow); + + .bg-artwork-container { + display: none; + } #navigation-bar { backdrop-filter: unset; mix-blend-mode: unset; @@ -3874,4 +3881,14 @@ body.no-gpu { .wpfade-leave-to { opacity: 0; } + + .drawertransition-enter-active, + .drawertransition-leave-active { + transition: right 0s var(--appleEase); + } + + .drawertransition-enter, + .drawertransition-leave-to { + right: -300px; + } } \ No newline at end of file From 9a7404c9506c45df3b4ace66006455deecb5608a Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 5 Jan 2022 07:28:13 -0800 Subject: [PATCH 095/135] fix for ratings --- src/renderer/index.js | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 3e4085e8..51181508 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -2591,13 +2591,13 @@ const app = new Vue({ }, async getRating(item) { let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" - // if item.id starts with "i." put "library-" in front of the type if type does not already have that - if (item.id.startsWith("i.")) { + let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id + if (id.startsWith("i.")) { if(!type.startsWith("library-")) { type = "library-" + type } } - let response = await this.mk.api.v3.music(`/v1/me/ratings/${type}?platform=web&ids=${item.id}`) + let response = await this.mk.api.v3.music(`/v1/me/ratings/${type}?platform=web&ids=${id}`) if(response.data.data.length != 0) { let value = response.data.data[0].attributes.value return value @@ -2607,7 +2607,13 @@ const app = new Vue({ }, love(item) { let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" - this.mk.api.v3.music(`/v1/me/ratings/${type}/${item.id}`, {}, { + let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id + if (id.startsWith("i.")) { + if(!type.startsWith("library-")) { + type = "library-" + type + } + } + this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { fetchOptions: { method: "PUT", @@ -2624,7 +2630,13 @@ const app = new Vue({ }, dislike(item) { let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" - this.mk.api.v3.music(`/v1/me/ratings/${type}/${item.id}`, {}, { + let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id + if (id.startsWith("i.")) { + if(!type.startsWith("library-")) { + type = "library-" + type + } + } + this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { fetchOptions: { method: "PUT", @@ -2641,7 +2653,13 @@ const app = new Vue({ }, unlove(item) { let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" - this.mk.api.v3.music(`/v1/me/ratings/${type}/${item.id}`, {}, { + let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id + if (id.startsWith("i.")) { + if(!type.startsWith("library-")) { + type = "library-" + type + } + } + this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { fetchOptions: { method: "DELETE", From fbcfb079375401337eb923719e9496f74a85bae2 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 5 Jan 2022 07:57:25 -0800 Subject: [PATCH 096/135] another ratings fix --- src/renderer/index.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 51181508..524fee04 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -2592,10 +2592,11 @@ const app = new Vue({ async getRating(item) { let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id - if (id.startsWith("i.")) { + if (item.id.startsWith("i.")) { if(!type.startsWith("library-")) { type = "library-" + type } + id = item.id } let response = await this.mk.api.v3.music(`/v1/me/ratings/${type}?platform=web&ids=${id}`) if(response.data.data.length != 0) { @@ -2608,10 +2609,11 @@ const app = new Vue({ love(item) { let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id - if (id.startsWith("i.")) { + if (item.id.startsWith("i.")) { if(!type.startsWith("library-")) { type = "library-" + type } + id = item.id } this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { fetchOptions: @@ -2631,10 +2633,11 @@ const app = new Vue({ dislike(item) { let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id - if (id.startsWith("i.")) { + if (item.id.startsWith("i.")) { if(!type.startsWith("library-")) { type = "library-" + type } + id = item.id } this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { fetchOptions: @@ -2654,10 +2657,11 @@ const app = new Vue({ unlove(item) { let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id - if (id.startsWith("i.")) { + if (item.id.startsWith("i.")) { if(!type.startsWith("library-")) { type = "library-" + type } + id = item.id } this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { fetchOptions: From 62b41c284858840a978ce6cb3d864b79cff0d1d2 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 5 Jan 2022 08:38:09 -0800 Subject: [PATCH 097/135] working on more reliable, app.inLibrary([MediaItems]) function, applied --- src/renderer/index.js | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/renderer/index.js b/src/renderer/index.js index 524fee04..dcb763c0 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -2394,6 +2394,27 @@ const app = new Vue({ self.search.resultsSocial = results }) }, + async inLibrary(items = []) { + let types = [] + + for (let item of items) { + let type = item.type + if (type.slice(-1) != "s") { + type += "s" + } + let id = item.playParams.catalogId ? item.playParams.catalogId : item.id + + let index = types.findIndex(function (type) { + return type.type == this + }, type) + if (index == -1) { + types.push({type: type, id: [id]}) + } else { + types[index].id.push(id) + } + } + return await this.mk.api.catalogResources(types, {"omit[resource]": "autos", relate: "library", fields: "inLibrary"}) + }, isInLibrary(playParams) { let self = this let id = "" @@ -2680,7 +2701,7 @@ const app = new Vue({ } else if (event.deltaY > 0) { if(this.mk.volume > 0){ if (this.mk.volume >= 0.1){ - this.mk.volume -= 0.1 + this.mk.volume -= 0.1 } else {this.mk.volume = 0} } } @@ -2739,10 +2760,10 @@ const app = new Vue({ let item_id = this.mk.nowPlayingItem.attributes.playParams.id ?? this.mk.nowPlayingItem.id let isLibrary = this.mk.nowPlayingItem.attributes.playParams.isLibrary ?? false let params = {"fields[songs]": "inLibrary", "fields[albums]": "inLibrary", "relate": "library", "t": "1"} - // let res = await app.mkapi(data_type, isLibrary , item_id, params); + // let res = await app.mkapi(data_type, isLibrary , item_id, params); // if (res && res.relationships && res.relationships.library && res.relationships.library.data && res.relationships.library.data.length > 0) { // item_id = res.relationships.library.data[0].id - // } + // } app.selectedMediaItems = [] app.select_selectMediaItem(item_id, data_type, 0, '12344', isLibrary) let useMenu = "normal" @@ -2759,7 +2780,9 @@ const app = new Vue({ } }, { + "id": "addToLibrary", "name": "Add to Library...", + "disabled": false, "action": function () { app.addToLibrary(item_id); // if (!isLibrary) {app.addToLibrary(item_id); this.mk.nowPlayingItem.attributes.playParams["isLibrary"] = true} else { app.removeFromLibrary(data_type,item_id); this.mk.nowPlayingItem.attributes.playParams["isLibrary"] = false}; @@ -2815,6 +2838,16 @@ const app = new Vue({ menus.normal.items = menus.normal.items.concat(this.contextExt.normal) } } + // isLibrary = await app.inLibrary([this.mk.nowPlayingItem]) + // console.warn(isLibrary) + // if(isLibrary.length != 0) { + // if (isLibrary[0].attributes.inLibrary) { + // menus.normal.items.find(x => x.id == "addToLibrary").disabled = true + // } + // }else{ + // menus.normal.items.find(x => x.id == "addToLibrary").disabled = true + // } + let rating = await app.getRating(app.mk.nowPlayingItem) if(rating == 0) { menus.normal.items.find(x => x.id == 'love').disabled = false From cdcc6543f7150c2580a7331a904765c1354da86c Mon Sep 17 00:00:00 2001 From: cryptofyre Date: Wed, 5 Jan 2022 16:42:53 -0600 Subject: [PATCH 098/135] electron v16.0.6 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d91ec650..ba6be5af 100644 --- a/package.json +++ b/package.json @@ -74,9 +74,9 @@ } ], "build": { - "electronVersion": "16.0.5", + "electronVersion": "16.0.6", "electronDownload": { - "version": "16.0.5+wvcus", + "version": "16.0.6+wvcus", "mirror": "https://github.com/castlabs/electron-releases/releases/download/v" }, "appId": "cider", From 8c927cc988b48150e1367f821f5d885793d50eb2 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 6 Jan 2022 09:48:59 +0700 Subject: [PATCH 099/135] =?UTF-8?q?add=20the=20=F0=9F=85=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/style.less | 5 ++- .../views/components/mediaitem-square.ejs | 32 ++++++++++++++++--- src/renderer/views/svg/explicit.svg | 1 + 3 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 src/renderer/views/svg/explicit.svg diff --git a/src/renderer/style.less b/src/renderer/style.less index 28d9e322..15157d85 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -3225,6 +3225,9 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { .title { width: 90%; text-align: center; + display: flex; + align-content: center; + justify-content: center; } .subtitle { @@ -3295,7 +3298,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { display: flex; justify-content: center; align-items: center; - font-size: 0.8em; + font-size: 0.9em; font-weight: 500; } diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index e1196d37..846d326c 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -26,10 +26,11 @@
-
- {{ item.attributes.name }} -
-
+
{{ item.attributes.name }}
+
🅴
+
+
{{ getSubtitle() }}
@@ -115,6 +116,29 @@ } } }, + getSubtitleNavigation() { + if(this.kind == 'card') { + try { + if (typeof this.item.attributes.artistNames != "undefined") { + return app.routeView(this.item) + } else if (typeof this.item.attributes.editorialNotes != "undefined") { + return app.routeView(this.item) + } else if (typeof this.item.attributes.artistName != "undefined") { + return app.searchAndNavigate(this.item,'artist') + } else { + return app.routeView(this.item) + } + }catch(e) { + return app.routeView(this.item) + } + }else { + if (typeof this.item.attributes.artistName != "undefined") { + return app.searchAndNavigate(this.item,'artist') + } else { + return app.routeView(this.item) + } + } + }, async getBadges() { let self = this if (this.badges[this.item.attributes.playParams.id ?? this.item.id]) { diff --git a/src/renderer/views/svg/explicit.svg b/src/renderer/views/svg/explicit.svg new file mode 100644 index 00000000..b9f347b4 --- /dev/null +++ b/src/renderer/views/svg/explicit.svg @@ -0,0 +1 @@ + \ No newline at end of file From bf427b1acea63036fb1ac85a067f7abc62bb36f8 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 6 Jan 2022 11:09:06 +0700 Subject: [PATCH 100/135] use sp for prod for now as square (for sp) is incomplete --- .../components/mediaitem-scroller-horizontal-sp.ejs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs b/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs index e4394c42..f2e101c2 100644 --- a/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs +++ b/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs @@ -1,8 +1,14 @@ From 04b9e547db03c5e5ec3cd5e11f3ced65a1df42d9 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Thu, 6 Jan 2022 11:09:45 +0700 Subject: [PATCH 101/135] Update mediaitem-scroller-horizontal-sp.ejs --- .../views/components/mediaitem-scroller-horizontal-sp.ejs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs b/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs index f2e101c2..507cc549 100644 --- a/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs +++ b/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs @@ -3,7 +3,7 @@
@@ -192,14 +194,21 @@ (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) ); }, - getArtworkUrl() { + getArtworkUrl(size = -1, includeUrl = false) { let artwork = this.item.attributes.artwork ? this.item.attributes.artwork.url : '' + if(size != -1) { + artwork = artwork.replace('{w}', size).replace('{h}', size).replace('{f}', "webp").replace('{c}', ((size === 900) ? "sr" : "cc")) + } switch (this.kind) { case "385": artwork = this.item.attributes.editorialArtwork.subscriptionHero.url break; } - return artwork + if(!includeUrl) { + return artwork + }else{ + return `url("${artwork}")` + } }, getClasses() { let type = this.item.type diff --git a/src/renderer/views/pages/zoo.ejs b/src/renderer/views/pages/zoo.ejs index 3d2ab5a7..6b065883 100644 --- a/src/renderer/views/pages/zoo.ejs +++ b/src/renderer/views/pages/zoo.ejs @@ -4,5 +4,6 @@ {{ $store.state.test }}
+
From 61a3913079625b6d9f8b0cdc2d4cc6817b869b48 Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Wed, 5 Jan 2022 22:30:03 -0800 Subject: [PATCH 105/135] Update mediaitem-scroller-horizontal-sp.ejs --- .../views/components/mediaitem-scroller-horizontal-sp.ejs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs b/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs index 507cc549..f7a5e4b3 100644 --- a/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs +++ b/src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs @@ -1,16 +1,10 @@ \ No newline at end of file diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index d64c6a74..888f7c6b 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -27,7 +27,7 @@
-
+
{{ item.attributes.name }}
🅴
diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index f2cb1029..41fa1a4b 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -69,7 +69,9 @@