add cordova
authormarcelveldt <marcelvanderveldt@MacBook-Silvia.local>
Sun, 3 Nov 2019 22:31:49 +0000 (23:31 +0100)
committermarcelveldt <marcelvanderveldt@MacBook-Silvia.local>
Sun, 3 Nov 2019 22:31:49 +0000 (23:31 +0100)
47 files changed:
frontend/.gitignore
frontend/babel.config.js
frontend/package-lock.json
frontend/package.json
frontend/public/img/icons/apple-touch-icon-152x152.png [new file with mode: 0644]
frontend/public/img/icons/msapplication-icon-144x144.png [new file with mode: 0644]
frontend/src-cordova/config.xml [new file with mode: 0644]
frontend/src-cordova/hooks/README.md [new file with mode: 0644]
frontend/src-cordova/package-lock.json [new file with mode: 0644]
frontend/src-cordova/package.json [new file with mode: 0644]
frontend/src-cordova/www/.gitignore [new file with mode: 0644]
frontend/src/components/InfoHeader.vue
frontend/src/components/PlayerOSD.vue
frontend/src/components/TopBar.vue
frontend/src/plugins/server.js
frontend/src/plugins/store.js
frontend/vue.config.js
music_assistant/music_manager.py
music_assistant/web/css/app.ccd7be77.css [deleted file]
music_assistant/web/css/app.f7c6b061.css [new file with mode: 0644]
music_assistant/web/img/icons/apple-touch-icon-152x152.png [new file with mode: 0644]
music_assistant/web/img/icons/msapplication-icon-144x144.png [new file with mode: 0644]
music_assistant/web/index.html
music_assistant/web/js/app.164646f9.js [new file with mode: 0644]
music_assistant/web/js/app.164646f9.js.map [new file with mode: 0644]
music_assistant/web/js/app.df1cf09c.js [deleted file]
music_assistant/web/js/app.df1cf09c.js.map [deleted file]
music_assistant/web/js/config.328c2668.js [deleted file]
music_assistant/web/js/config.328c2668.js.map [deleted file]
music_assistant/web/js/config.3af84ca2.js [new file with mode: 0644]
music_assistant/web/js/config.3af84ca2.js.map [new file with mode: 0644]
music_assistant/web/js/itemdetails.5c314dae.js [new file with mode: 0644]
music_assistant/web/js/itemdetails.5c314dae.js.map [new file with mode: 0644]
music_assistant/web/js/itemdetails.b7fcbe37.js [deleted file]
music_assistant/web/js/itemdetails.b7fcbe37.js.map [deleted file]
music_assistant/web/js/playerqueue.39a08978.js [deleted file]
music_assistant/web/js/playerqueue.39a08978.js.map [deleted file]
music_assistant/web/js/playerqueue.5fa460a7.js [new file with mode: 0644]
music_assistant/web/js/playerqueue.5fa460a7.js.map [new file with mode: 0644]
music_assistant/web/js/search.56af5cc1.js [new file with mode: 0644]
music_assistant/web/js/search.56af5cc1.js.map [new file with mode: 0644]
music_assistant/web/js/search.5fcda21d.js [deleted file]
music_assistant/web/js/search.5fcda21d.js.map [deleted file]
music_assistant/web/manifest.json
music_assistant/web/precache-manifest.b2f29b1e01a3ce8c6d1036fef5e00131.js [new file with mode: 0644]
music_assistant/web/precache-manifest.e1bc4360d0bea6c59b9258440a2bb0cc.js [deleted file]
music_assistant/web/service-worker.js

index a0dddc6fb8c6b3feeeffa6e29bedca338e483382..9c8db80978a605bfd221e81108ee590cd19a7ffa 100644 (file)
@@ -19,3 +19,8 @@ yarn-error.log*
 *.njsproj
 *.sln
 *.sw?
+
+# Cordova
+/src-cordova/platforms
+/src-cordova/plugins
+/public/cordova.js
index 0b5dddb141250aac61c018968ec8f5f345543312..a11f29e3de8d3a13d89ff1d5c0fe5950ba186ff5 100644 (file)
@@ -1,6 +1,6 @@
 const removeConsolePlugin = []
-if(process.env.NODE_ENV === 'production') {
-  removeConsolePlugin.push("transform-remove-console")
+if (process.env.NODE_ENV === 'production') {
+  removeConsolePlugin.push('transform-remove-console')
 }
 module.exports = {
   presets: [
index 1f6accf671fb2bfa2d73201df621bdc04a42d313..e48e3f7f4c40999e92269a2882b722fb4099ba4e 100644 (file)
         }
       }
     },
+    "cordova-plugin-device": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.0.3.tgz",
+      "integrity": "sha512-Jb3V72btxf3XHpkPQsGdyc8N6tVBYn1vsxSFj43fIz9vonJDUThYPCJJHqk6PX6N4dJw6I4FjxkpfCR4LDYMlw==",
+      "dev": true
+    },
     "core-js": {
       "version": "3.3.4",
       "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.4.tgz",
         "sha.js": "^2.4.8"
       }
     },
+    "cross-env": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz",
+      "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^6.0.5"
+      }
+    },
     "cross-spawn": {
       "version": "6.0.5",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
         }
       }
     },
+    "hasbin": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/hasbin/-/hasbin-1.2.3.tgz",
+      "integrity": "sha1-eMWSaJPIAhXCtWiuH9P8q3omlrA=",
+      "dev": true,
+      "requires": {
+        "async": "~1.5"
+      },
+      "dependencies": {
+        "async": {
+          "version": "1.5.2",
+          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+          "dev": true
+        }
+      }
+    },
     "hash-base": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
       "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
       "dev": true
     },
+    "html-webpack-include-assets-plugin": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/html-webpack-include-assets-plugin/-/html-webpack-include-assets-plugin-1.0.10.tgz",
+      "integrity": "sha512-F+VqD4Vt5zxqzYikT7+B/oZOHCi3xvBy5NaE8AtZGRB840mZ4+cti2p5z0PwXTs3pQShO3MEuhG+vakk0XtTig==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.1.3",
+        "minimatch": "^3.0.4",
+        "slash": "^2.0.0"
+      }
+    },
     "html-webpack-plugin": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
       "integrity": "sha512-p2b/fvPJuPBnvU8027PAAuU5DiOzUn2lku8XLG/f6c8FU0N+/MXWZAlOuHhqd9e7+KIZitwe/c8qlmv7TglbTg==",
       "dev": true
     },
+    "vue-cli-plugin-cordova": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/vue-cli-plugin-cordova/-/vue-cli-plugin-cordova-2.3.6.tgz",
+      "integrity": "sha512-XXL8vjytziYkrzX6aYes4ju/TASTql7X/px1hLAZXJuWQsF5gfxGeU4mpVPq1OQWMgY06GPFFhu1MvGIUHJ4zg==",
+      "dev": true,
+      "requires": {
+        "@vue/cli-shared-utils": "^3.4.0",
+        "address": "^1.0.3",
+        "cordova-plugin-device": "^2.0.1",
+        "cross-env": "^5.2.0",
+        "cross-spawn": "^6.0.5",
+        "hasbin": "^1.2.3",
+        "html-webpack-include-assets-plugin": "^1.0.4",
+        "portfinder": "^1.0.20"
+      },
+      "dependencies": {
+        "@vue/cli-shared-utils": {
+          "version": "3.12.1",
+          "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz",
+          "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==",
+          "dev": true,
+          "requires": {
+            "@hapi/joi": "^15.0.1",
+            "chalk": "^2.4.1",
+            "execa": "^1.0.0",
+            "launch-editor": "^2.2.1",
+            "lru-cache": "^5.1.1",
+            "node-ipc": "^9.1.1",
+            "open": "^6.3.0",
+            "ora": "^3.4.0",
+            "request": "^2.87.0",
+            "request-promise-native": "^1.0.7",
+            "semver": "^6.0.0",
+            "string.prototype.padstart": "^3.0.0"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
+      }
+    },
     "vue-cli-plugin-i18n": {
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/vue-cli-plugin-i18n/-/vue-cli-plugin-i18n-0.6.0.tgz",
index b836ee6b47a18aebd61c762474371e9cc38542ee..82858b791a29adadd7d0b45f9461346734f00a5e 100644 (file)
@@ -6,6 +6,19 @@
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint",
+    "cordova-build-android": "cross-env CORDOVA_PLATFORM=android vue-cli-service cordova-build-android",
+    "cordova-build-browser": "cross-env CORDOVA_PLATFORM=browser vue-cli-service cordova-build-browser",
+    "cordova-build-ios": "cross-env CORDOVA_PLATFORM=ios vue-cli-service cordova-build-ios",
+    "cordova-build-only-www-android": "cross-env CORDOVA_PLATFORM=android vue-cli-service cordova-build-only-www-android",
+    "cordova-build-only-www-browser": "cross-env CORDOVA_PLATFORM=browser vue-cli-service cordova-build-only-www-browser",
+    "cordova-build-only-www-ios": "cross-env CORDOVA_PLATFORM=ios vue-cli-service cordova-build-only-www-ios",
+    "cordova-build-only-www-osx": "cross-env CORDOVA_PLATFORM=osx vue-cli-service cordova-build-only-www-osx",
+    "cordova-build-osx": "cross-env CORDOVA_PLATFORM=osx vue-cli-service cordova-build-osx",
+    "cordova-prepare": "vue-cli-service cordova-prepare",
+    "cordova-serve-android": "cross-env CORDOVA_PLATFORM=android vue-cli-service cordova-serve-android",
+    "cordova-serve-browser": "cross-env CORDOVA_PLATFORM=browser vue-cli-service cordova-serve-browser",
+    "cordova-serve-ios": "cross-env CORDOVA_PLATFORM=ios vue-cli-service cordova-serve-ios",
+    "cordova-serve-osx": "cross-env CORDOVA_PLATFORM=osx vue-cli-service cordova-serve-osx",
     "i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'"
   },
   "dependencies": {
@@ -48,6 +61,7 @@
     "sass": "^1.19.0",
     "sass-loader": "^8.0.0",
     "vue-cli-plugin-axios": "0.0.4",
+    "vue-cli-plugin-cordova": "^2.3.6",
     "vue-cli-plugin-i18n": "^0.6.0",
     "vue-cli-plugin-vuetify": "^1.1.1",
     "vue-template-compiler": "^2.6.10",
diff --git a/frontend/public/img/icons/apple-touch-icon-152x152.png b/frontend/public/img/icons/apple-touch-icon-152x152.png
new file mode 100644 (file)
index 0000000..2b198dc
Binary files /dev/null and b/frontend/public/img/icons/apple-touch-icon-152x152.png differ
diff --git a/frontend/public/img/icons/msapplication-icon-144x144.png b/frontend/public/img/icons/msapplication-icon-144x144.png
new file mode 100644 (file)
index 0000000..d5064f8
Binary files /dev/null and b/frontend/public/img/icons/msapplication-icon-144x144.png differ
diff --git a/frontend/src-cordova/config.xml b/frontend/src-cordova/config.xml
new file mode 100644 (file)
index 0000000..00442fa
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version='1.0' encoding='utf-8'?>
+<widget id="com.vue.musicassistant.app" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+    <name>MusicAssistant</name>
+    <description>
+        A sample Apache Cordova application that responds to the deviceready event.
+    </description>
+    <author email="dev@cordova.apache.org" href="http://cordova.io">
+        Apache Cordova Team
+    </author>
+    <!-- this hook will point your config.xml to the DevServer on Serve -->
+    <hook type="after_prepare" src="../node_modules/vue-cli-plugin-cordova/serve-config-hook.js" />
+    <content src="index.html" />
+    <plugin name="cordova-plugin-whitelist" spec="1" />
+    <access origin="*" />
+    <allow-intent href="http://*/*" />
+    <allow-intent href="https://*/*" />
+    <allow-intent href="tel:*" />
+    <allow-intent href="sms:*" />
+    <allow-intent href="mailto:*" />
+    <allow-intent href="geo:*" />
+    <platform name="android">
+        <allow-intent href="market:*" />
+    </platform>
+    <platform name="ios">
+        <allow-intent href="itms:*" />
+        <allow-intent href="itms-apps:*" />
+    </platform>
+</widget>
diff --git a/frontend/src-cordova/hooks/README.md b/frontend/src-cordova/hooks/README.md
new file mode 100644 (file)
index 0000000..574ad4c
--- /dev/null
@@ -0,0 +1,23 @@
+<!--
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+-->
+# Cordova Hooks
+
+Cordova Hooks represent special scripts which could be added by application and plugin developers or even by your own build system  to customize cordova commands. See Hooks Guide for more details:  http://cordova.apache.org/docs/en/edge/guide_appdev_hooks_index.md.html#Hooks%20Guide.
diff --git a/frontend/src-cordova/package-lock.json b/frontend/src-cordova/package-lock.json
new file mode 100644 (file)
index 0000000..202d424
--- /dev/null
@@ -0,0 +1,1196 @@
+{
+    "name": "com.vue.musicassistant.app",
+    "version": "1.0.0",
+    "lockfileVersion": 1,
+    "requires": true,
+    "dependencies": {
+        "abbrev": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+            "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+        },
+        "accepts": {
+            "version": "1.3.7",
+            "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+            "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+            "requires": {
+                "mime-types": "~2.1.24",
+                "negotiator": "0.6.2"
+            }
+        },
+        "android-versions": {
+            "version": "1.5.0",
+            "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.5.0.tgz",
+            "integrity": "sha512-/GWUAqa2OJNlDF5VGSe3SR1QMHEPXxx54Ur56r0qQC0H9FlBr7kyBF2SgVEhzFCPbrW4UcYgVuWrq/2Ty3QvXg==",
+            "requires": {
+                "semver": "^5.4.1"
+            }
+        },
+        "ansi": {
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
+            "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE="
+        },
+        "ansi-styles": {
+            "version": "3.2.1",
+            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+            "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+            "requires": {
+                "color-convert": "^1.9.0"
+            }
+        },
+        "array-flatten": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+            "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+        },
+        "array-ify": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+            "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4="
+        },
+        "balanced-match": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+            "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+        },
+        "base64-js": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+            "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+        },
+        "big-integer": {
+            "version": "1.6.47",
+            "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.47.tgz",
+            "integrity": "sha512-9t9f7X3as2XGX8b52GqG6ox0GvIdM86LyIXASJnDCFhYNgt+A+MByQZ3W2PyMRZjEvG5f8TEbSPfEotVuMJnQg=="
+        },
+        "body-parser": {
+            "version": "1.19.0",
+            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+            "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+            "requires": {
+                "bytes": "3.1.0",
+                "content-type": "~1.0.4",
+                "debug": "2.6.9",
+                "depd": "~1.1.2",
+                "http-errors": "1.7.2",
+                "iconv-lite": "0.4.24",
+                "on-finished": "~2.3.0",
+                "qs": "6.7.0",
+                "raw-body": "2.4.0",
+                "type-is": "~1.6.17"
+            },
+            "dependencies": {
+                "bytes": {
+                    "version": "3.1.0",
+                    "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+                    "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+                }
+            }
+        },
+        "bplist-creator": {
+            "version": "0.0.7",
+            "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
+            "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=",
+            "requires": {
+                "stream-buffers": "~2.2.0"
+            }
+        },
+        "bplist-parser": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
+            "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=",
+            "requires": {
+                "big-integer": "^1.6.7"
+            }
+        },
+        "brace-expansion": {
+            "version": "1.1.11",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "requires": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+            }
+        },
+        "bytes": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+            "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+        },
+        "chalk": {
+            "version": "2.4.2",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+            "requires": {
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
+            }
+        },
+        "color-convert": {
+            "version": "1.9.3",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+            "requires": {
+                "color-name": "1.1.3"
+            }
+        },
+        "color-name": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+            "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+        },
+        "compare-func": {
+            "version": "1.3.2",
+            "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
+            "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
+            "requires": {
+                "array-ify": "^1.0.0",
+                "dot-prop": "^3.0.0"
+            }
+        },
+        "compressible": {
+            "version": "2.0.17",
+            "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
+            "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
+            "requires": {
+                "mime-db": ">= 1.40.0 < 2"
+            }
+        },
+        "compression": {
+            "version": "1.7.4",
+            "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+            "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+            "requires": {
+                "accepts": "~1.3.5",
+                "bytes": "3.0.0",
+                "compressible": "~2.0.16",
+                "debug": "2.6.9",
+                "on-headers": "~1.0.2",
+                "safe-buffer": "5.1.2",
+                "vary": "~1.1.2"
+            }
+        },
+        "concat-map": {
+            "version": "0.0.1",
+            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+            "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+        },
+        "content-disposition": {
+            "version": "0.5.3",
+            "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+            "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+            "requires": {
+                "safe-buffer": "5.1.2"
+            }
+        },
+        "content-type": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+            "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+        },
+        "cookie": {
+            "version": "0.4.0",
+            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+            "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+        },
+        "cookie-signature": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+            "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+        },
+        "cordova-android": {
+            "version": "8.1.0",
+            "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-8.1.0.tgz",
+            "integrity": "sha512-eAY6g9q3raJ4P03wNdSWC5MOW1EfxoomWNXsPhi7T6Q9yAqmxqn0sLEUjLL1Ib0LCH3nKQWBXdxapQ5LgbHu+g==",
+            "requires": {
+                "android-versions": "^1.4.0",
+                "compare-func": "^1.3.2",
+                "cordova-common": "^3.2.0",
+                "nopt": "^4.0.1",
+                "properties-parser": "^0.3.1",
+                "q": "^1.5.1",
+                "shelljs": "^0.5.3"
+            }
+        },
+        "cordova-browser": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/cordova-browser/-/cordova-browser-6.0.0.tgz",
+            "integrity": "sha512-G61S7fhnVVJC98lvkGeKCVpfFtoW0a1P1Sg9TK+n03g3yupDMIM7XuecWuJ3KEMRhED4+CEc2hauruAff7oXrw==",
+            "requires": {
+                "cordova-common": "^3.1.0",
+                "cordova-serve": "^3.0.0",
+                "nopt": "^4.0.1",
+                "shelljs": "^0.5.3"
+            }
+        },
+        "cordova-common": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-3.2.0.tgz",
+            "integrity": "sha512-EvlQ6PirfR65hGDoQvsluW00uSS2MTVIRKQ3c1Xvsddx7D5T5JgF3fHWkGik/Y/8yNcpI0zI2NcJyie2z/ak2A==",
+            "requires": {
+                "ansi": "^0.3.1",
+                "bplist-parser": "^0.1.0",
+                "cross-spawn": "^6.0.5",
+                "elementtree": "0.1.7",
+                "endent": "^1.1.1",
+                "fs-extra": "^8.0.0",
+                "glob": "^7.1.2",
+                "minimatch": "^3.0.0",
+                "plist": "^3.0.1",
+                "q": "^1.4.1",
+                "strip-bom": "^3.0.0",
+                "underscore": "^1.8.3",
+                "which": "^1.3.0"
+            }
+        },
+        "cordova-ios": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-5.0.1.tgz",
+            "integrity": "sha512-JcFyDmlyzY2OQJo0eHpuFERFqvO4daHl8HL96RhUVjJVtuoqXHsOF0xTuQSAqIbefelMPEWwY3Lc/dvT4ttTwQ==",
+            "requires": {
+                "cordova-common": "^3.1.0",
+                "ios-sim": "^8.0.1",
+                "nopt": "^4.0.1",
+                "plist": "^3.0.1",
+                "q": "^1.5.1",
+                "shelljs": "^0.5.3",
+                "unorm": "^1.4.1",
+                "xcode": "^2.0.0",
+                "xml-escape": "^1.1.0"
+            }
+        },
+        "cordova-osx": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/cordova-osx/-/cordova-osx-5.0.0.tgz",
+            "integrity": "sha512-KuufKtncBwpO0VGBeGH6YXSpiEjE6f5aQtgJZONjOqJ9HFXGwuqbmukJK7Dv5a+/XQ9ZkQhh9CJDdn5HPDhU+g==",
+            "requires": {
+                "cordova-common": "^3.1.0",
+                "nopt": "^4.0.1",
+                "plist": "^3.0.1",
+                "q": "^1.4.1",
+                "shelljs": "^0.5.3",
+                "underscore": "^1.9.1",
+                "unorm": "^1.4.1",
+                "xcode": "^2.0.0"
+            }
+        },
+        "cordova-plugin-whitelist": {
+            "version": "1.3.4",
+            "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.4.tgz",
+            "integrity": "sha512-EYC5eQFVkoYXq39l7tYKE6lEjHJ04mvTmKXxGL7quHLdFPfJMNzru/UYpn92AOfpl3PQaZmou78C7EgmFOwFQQ==",
+            "dev": true
+        },
+        "cordova-serve": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-3.0.0.tgz",
+            "integrity": "sha512-h479g/5a0PXn//yiFuMrD5MDEbB+mtihNkWcE6uD/aCh/6z0FRZ9sWH3NfZbHDB+Bp1yGLYsjbH8LZBL8KOQ0w==",
+            "requires": {
+                "chalk": "^2.4.1",
+                "compression": "^1.6.0",
+                "express": "^4.13.3",
+                "opn": "^5.3.0",
+                "which": "^1.3.0"
+            }
+        },
+        "cross-spawn": {
+            "version": "6.0.5",
+            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+            "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+            "requires": {
+                "nice-try": "^1.0.4",
+                "path-key": "^2.0.1",
+                "semver": "^5.5.0",
+                "shebang-command": "^1.2.0",
+                "which": "^1.2.9"
+            }
+        },
+        "debug": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+            "requires": {
+                "ms": "2.0.0"
+            }
+        },
+        "dedent": {
+            "version": "0.7.0",
+            "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+            "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw="
+        },
+        "deep-equal": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+            "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+        },
+        "define-properties": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+            "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+            "requires": {
+                "object-keys": "^1.0.12"
+            }
+        },
+        "defined": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+            "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+        },
+        "depd": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+            "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+        },
+        "destroy": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+            "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+        },
+        "dot-prop": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+            "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+            "requires": {
+                "is-obj": "^1.0.0"
+            }
+        },
+        "ee-first": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+            "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+        },
+        "elementtree": {
+            "version": "0.1.7",
+            "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
+            "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=",
+            "requires": {
+                "sax": "1.1.4"
+            }
+        },
+        "encodeurl": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+            "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+        },
+        "endent": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/endent/-/endent-1.3.0.tgz",
+            "integrity": "sha512-C8AryqPPwtydqcpO5AF6k9Bd1EpFkQtvsefJqS3y3n8TG13Jy63MascDxTOULZYqrUde+dK6BjNc6LIMr3iI2A==",
+            "requires": {
+                "dedent": "^0.7.0",
+                "fast-json-parse": "^1.0.3",
+                "objectorarray": "^1.0.3"
+            }
+        },
+        "es-abstract": {
+            "version": "1.16.0",
+            "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz",
+            "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==",
+            "requires": {
+                "es-to-primitive": "^1.2.0",
+                "function-bind": "^1.1.1",
+                "has": "^1.0.3",
+                "has-symbols": "^1.0.0",
+                "is-callable": "^1.1.4",
+                "is-regex": "^1.0.4",
+                "object-inspect": "^1.6.0",
+                "object-keys": "^1.1.1",
+                "string.prototype.trimleft": "^2.1.0",
+                "string.prototype.trimright": "^2.1.0"
+            }
+        },
+        "es-to-primitive": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+            "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+            "requires": {
+                "is-callable": "^1.1.4",
+                "is-date-object": "^1.0.1",
+                "is-symbol": "^1.0.2"
+            }
+        },
+        "escape-html": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+            "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+        },
+        "escape-string-regexp": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+            "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+        },
+        "etag": {
+            "version": "1.8.1",
+            "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+            "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+        },
+        "express": {
+            "version": "4.17.1",
+            "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+            "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+            "requires": {
+                "accepts": "~1.3.7",
+                "array-flatten": "1.1.1",
+                "body-parser": "1.19.0",
+                "content-disposition": "0.5.3",
+                "content-type": "~1.0.4",
+                "cookie": "0.4.0",
+                "cookie-signature": "1.0.6",
+                "debug": "2.6.9",
+                "depd": "~1.1.2",
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "etag": "~1.8.1",
+                "finalhandler": "~1.1.2",
+                "fresh": "0.5.2",
+                "merge-descriptors": "1.0.1",
+                "methods": "~1.1.2",
+                "on-finished": "~2.3.0",
+                "parseurl": "~1.3.3",
+                "path-to-regexp": "0.1.7",
+                "proxy-addr": "~2.0.5",
+                "qs": "6.7.0",
+                "range-parser": "~1.2.1",
+                "safe-buffer": "5.1.2",
+                "send": "0.17.1",
+                "serve-static": "1.14.1",
+                "setprototypeof": "1.1.1",
+                "statuses": "~1.5.0",
+                "type-is": "~1.6.18",
+                "utils-merge": "1.0.1",
+                "vary": "~1.1.2"
+            }
+        },
+        "fast-json-parse": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz",
+            "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw=="
+        },
+        "finalhandler": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+            "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+            "requires": {
+                "debug": "2.6.9",
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "on-finished": "~2.3.0",
+                "parseurl": "~1.3.3",
+                "statuses": "~1.5.0",
+                "unpipe": "~1.0.0"
+            }
+        },
+        "for-each": {
+            "version": "0.3.3",
+            "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+            "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+            "requires": {
+                "is-callable": "^1.1.3"
+            }
+        },
+        "forwarded": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+            "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+        },
+        "fresh": {
+            "version": "0.5.2",
+            "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+            "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+        },
+        "fs-extra": {
+            "version": "8.1.0",
+            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+            "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+            "requires": {
+                "graceful-fs": "^4.2.0",
+                "jsonfile": "^4.0.0",
+                "universalify": "^0.1.0"
+            }
+        },
+        "fs.realpath": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+            "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+        },
+        "function-bind": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+        },
+        "glob": {
+            "version": "7.1.5",
+            "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
+            "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
+            "requires": {
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
+            }
+        },
+        "graceful-fs": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+            "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
+        },
+        "has": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+            "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+            "requires": {
+                "function-bind": "^1.1.1"
+            }
+        },
+        "has-flag": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+            "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+        },
+        "has-symbols": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+            "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+        },
+        "http-errors": {
+            "version": "1.7.2",
+            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+            "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+            "requires": {
+                "depd": "~1.1.2",
+                "inherits": "2.0.3",
+                "setprototypeof": "1.1.1",
+                "statuses": ">= 1.5.0 < 2",
+                "toidentifier": "1.0.0"
+            },
+            "dependencies": {
+                "inherits": {
+                    "version": "2.0.3",
+                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+                    "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+                }
+            }
+        },
+        "iconv-lite": {
+            "version": "0.4.24",
+            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+            "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+            "requires": {
+                "safer-buffer": ">= 2.1.2 < 3"
+            }
+        },
+        "inflight": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+            "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+            "requires": {
+                "once": "^1.3.0",
+                "wrappy": "1"
+            }
+        },
+        "inherits": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+            "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+        },
+        "ios-sim": {
+            "version": "8.0.2",
+            "resolved": "https://registry.npmjs.org/ios-sim/-/ios-sim-8.0.2.tgz",
+            "integrity": "sha512-P7nEG771bfd+JoMRjnis1gpZOkjTUUxu+4Ek1Z+eoaEEoT9byllU9pxfQ8Df7hL3gSkIQxNwTSLhos2I8tWUQA==",
+            "requires": {
+                "bplist-parser": "^0.0.6",
+                "nopt": "1.0.9",
+                "plist": "^3.0.1",
+                "simctl": "^2"
+            },
+            "dependencies": {
+                "bplist-parser": {
+                    "version": "0.0.6",
+                    "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
+                    "integrity": "sha1-ONo0cYF9+dRKs4kuJ3B7u9daEbk="
+                },
+                "nopt": {
+                    "version": "1.0.9",
+                    "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz",
+                    "integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=",
+                    "requires": {
+                        "abbrev": "1"
+                    }
+                }
+            }
+        },
+        "ipaddr.js": {
+            "version": "1.9.0",
+            "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
+            "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
+        },
+        "is-callable": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+            "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
+        },
+        "is-date-object": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+            "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+        },
+        "is-obj": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+            "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
+        },
+        "is-regex": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+            "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+            "requires": {
+                "has": "^1.0.1"
+            }
+        },
+        "is-symbol": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+            "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+            "requires": {
+                "has-symbols": "^1.0.0"
+            }
+        },
+        "is-wsl": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+            "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+        },
+        "isexe": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+            "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+        },
+        "jsonfile": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+            "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+            "requires": {
+                "graceful-fs": "^4.1.6"
+            }
+        },
+        "media-typer": {
+            "version": "0.3.0",
+            "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+            "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+        },
+        "merge-descriptors": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+            "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+        },
+        "methods": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+            "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+        },
+        "mime": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+        },
+        "mime-db": {
+            "version": "1.40.0",
+            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+            "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
+        },
+        "mime-types": {
+            "version": "2.1.24",
+            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+            "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+            "requires": {
+                "mime-db": "1.40.0"
+            }
+        },
+        "minimatch": {
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+            "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+            "requires": {
+                "brace-expansion": "^1.1.7"
+            }
+        },
+        "minimist": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+            "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+        },
+        "ms": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+            "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        },
+        "negotiator": {
+            "version": "0.6.2",
+            "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+            "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+        },
+        "nice-try": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+            "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+        },
+        "nopt": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+            "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+            "requires": {
+                "abbrev": "1",
+                "osenv": "^0.1.4"
+            }
+        },
+        "object-inspect": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
+            "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ=="
+        },
+        "object-keys": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+        },
+        "objectorarray": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.3.tgz",
+            "integrity": "sha512-kPoflSYkAf/Onvjr4ZLaq37vDuOXjVzfwLCRuORRzYGdXkHa/vacPT0RgR+KmtkwOYFcxTMM62BRrZk8GGKHjw==",
+            "requires": {
+                "tape": "^4.8.0"
+            }
+        },
+        "on-finished": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+            "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+            "requires": {
+                "ee-first": "1.1.1"
+            }
+        },
+        "on-headers": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+            "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+        },
+        "once": {
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+            "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+            "requires": {
+                "wrappy": "1"
+            }
+        },
+        "opn": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+            "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+            "requires": {
+                "is-wsl": "^1.1.0"
+            }
+        },
+        "os-homedir": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+            "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+        },
+        "os-tmpdir": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+            "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+        },
+        "osenv": {
+            "version": "0.1.5",
+            "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+            "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+            "requires": {
+                "os-homedir": "^1.0.0",
+                "os-tmpdir": "^1.0.0"
+            }
+        },
+        "parseurl": {
+            "version": "1.3.3",
+            "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+            "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+        },
+        "path-is-absolute": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+            "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+        },
+        "path-key": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+            "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+        },
+        "path-parse": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+            "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+        },
+        "path-to-regexp": {
+            "version": "0.1.7",
+            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+            "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+        },
+        "plist": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
+            "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
+            "requires": {
+                "base64-js": "^1.2.3",
+                "xmlbuilder": "^9.0.7",
+                "xmldom": "0.1.x"
+            }
+        },
+        "properties-parser": {
+            "version": "0.3.1",
+            "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz",
+            "integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=",
+            "requires": {
+                "string.prototype.codepointat": "^0.2.0"
+            }
+        },
+        "proxy-addr": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
+            "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+            "requires": {
+                "forwarded": "~0.1.2",
+                "ipaddr.js": "1.9.0"
+            }
+        },
+        "q": {
+            "version": "1.5.1",
+            "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+            "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+        },
+        "qs": {
+            "version": "6.7.0",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+            "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+        },
+        "range-parser": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+            "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+        },
+        "raw-body": {
+            "version": "2.4.0",
+            "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+            "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+            "requires": {
+                "bytes": "3.1.0",
+                "http-errors": "1.7.2",
+                "iconv-lite": "0.4.24",
+                "unpipe": "1.0.0"
+            },
+            "dependencies": {
+                "bytes": {
+                    "version": "3.1.0",
+                    "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+                    "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+                }
+            }
+        },
+        "resolve": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
+            "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+            "requires": {
+                "path-parse": "^1.0.6"
+            }
+        },
+        "resumer": {
+            "version": "0.0.0",
+            "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
+            "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
+            "requires": {
+                "through": "~2.3.4"
+            }
+        },
+        "safe-buffer": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+            "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+        },
+        "safer-buffer": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+            "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+        },
+        "sax": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
+            "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk="
+        },
+        "semver": {
+            "version": "5.7.1",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+            "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        },
+        "send": {
+            "version": "0.17.1",
+            "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+            "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+            "requires": {
+                "debug": "2.6.9",
+                "depd": "~1.1.2",
+                "destroy": "~1.0.4",
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "etag": "~1.8.1",
+                "fresh": "0.5.2",
+                "http-errors": "~1.7.2",
+                "mime": "1.6.0",
+                "ms": "2.1.1",
+                "on-finished": "~2.3.0",
+                "range-parser": "~1.2.1",
+                "statuses": "~1.5.0"
+            },
+            "dependencies": {
+                "ms": {
+                    "version": "2.1.1",
+                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+                    "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+                }
+            }
+        },
+        "serve-static": {
+            "version": "1.14.1",
+            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+            "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+            "requires": {
+                "encodeurl": "~1.0.2",
+                "escape-html": "~1.0.3",
+                "parseurl": "~1.3.3",
+                "send": "0.17.1"
+            }
+        },
+        "setprototypeof": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+            "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+        },
+        "shebang-command": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+            "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+            "requires": {
+                "shebang-regex": "^1.0.0"
+            }
+        },
+        "shebang-regex": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+            "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+        },
+        "shelljs": {
+            "version": "0.5.3",
+            "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
+            "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM="
+        },
+        "simctl": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/simctl/-/simctl-2.0.0.tgz",
+            "integrity": "sha512-5rB7rN4N3b0z0nFdy9eczVssXqrv2aAgdVRksPVqVoiDtvXmfzNvebp3EMdId2sAUzXIflarQlx4P0hjVQEzKQ==",
+            "requires": {
+                "shelljs": "^0.2.6",
+                "tail": "^0.4.0"
+            },
+            "dependencies": {
+                "shelljs": {
+                    "version": "0.2.6",
+                    "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
+                    "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g="
+                }
+            }
+        },
+        "simple-plist": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.0.0.tgz",
+            "integrity": "sha512-043L2rO80LVF7zfZ+fqhsEkoJFvW8o59rt/l4ctx1TJWoTx7/jkiS1R5TatD15Z1oYnuLJytzE7gcnnBuIPL2g==",
+            "requires": {
+                "bplist-creator": "0.0.7",
+                "bplist-parser": "0.1.1",
+                "plist": "^3.0.1"
+            }
+        },
+        "statuses": {
+            "version": "1.5.0",
+            "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+            "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+        },
+        "stream-buffers": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
+            "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ="
+        },
+        "string.prototype.codepointat": {
+            "version": "0.2.1",
+            "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
+            "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="
+        },
+        "string.prototype.trim": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",
+            "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
+            "requires": {
+                "define-properties": "^1.1.2",
+                "es-abstract": "^1.5.0",
+                "function-bind": "^1.0.2"
+            }
+        },
+        "string.prototype.trimleft": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
+            "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
+            "requires": {
+                "define-properties": "^1.1.3",
+                "function-bind": "^1.1.1"
+            }
+        },
+        "string.prototype.trimright": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
+            "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
+            "requires": {
+                "define-properties": "^1.1.3",
+                "function-bind": "^1.1.1"
+            }
+        },
+        "strip-bom": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+            "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+        },
+        "supports-color": {
+            "version": "5.5.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+            "requires": {
+                "has-flag": "^3.0.0"
+            }
+        },
+        "tail": {
+            "version": "0.4.0",
+            "resolved": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz",
+            "integrity": "sha1-0p3nJ1DMmdseBTr/E8NZ7PtxMAI="
+        },
+        "tape": {
+            "version": "4.11.0",
+            "resolved": "https://registry.npmjs.org/tape/-/tape-4.11.0.tgz",
+            "integrity": "sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==",
+            "requires": {
+                "deep-equal": "~1.0.1",
+                "defined": "~1.0.0",
+                "for-each": "~0.3.3",
+                "function-bind": "~1.1.1",
+                "glob": "~7.1.4",
+                "has": "~1.0.3",
+                "inherits": "~2.0.4",
+                "minimist": "~1.2.0",
+                "object-inspect": "~1.6.0",
+                "resolve": "~1.11.1",
+                "resumer": "~0.0.0",
+                "string.prototype.trim": "~1.1.2",
+                "through": "~2.3.8"
+            }
+        },
+        "through": {
+            "version": "2.3.8",
+            "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+            "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+        },
+        "toidentifier": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+            "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+        },
+        "type-is": {
+            "version": "1.6.18",
+            "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+            "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+            "requires": {
+                "media-typer": "0.3.0",
+                "mime-types": "~2.1.24"
+            }
+        },
+        "underscore": {
+            "version": "1.9.1",
+            "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
+            "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
+        },
+        "universalify": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+            "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+        },
+        "unorm": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
+            "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA=="
+        },
+        "unpipe": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+            "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+        },
+        "utils-merge": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+            "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+        },
+        "uuid": {
+            "version": "3.3.3",
+            "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+            "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
+        },
+        "vary": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+            "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+        },
+        "which": {
+            "version": "1.3.1",
+            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+            "requires": {
+                "isexe": "^2.0.0"
+            }
+        },
+        "wrappy": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+            "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+        },
+        "xcode": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.0.0.tgz",
+            "integrity": "sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw==",
+            "requires": {
+                "simple-plist": "^1.0.0",
+                "uuid": "^3.3.2"
+            }
+        },
+        "xml-escape": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz",
+            "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ="
+        },
+        "xmlbuilder": {
+            "version": "9.0.7",
+            "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+            "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+        },
+        "xmldom": {
+            "version": "0.1.27",
+            "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+            "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
+        }
+    }
+}
diff --git a/frontend/src-cordova/package.json b/frontend/src-cordova/package.json
new file mode 100644 (file)
index 0000000..0977c79
--- /dev/null
@@ -0,0 +1,35 @@
+{
+  "name": "com.vue.musicassistant.app",
+  "displayName": "MusicAssistant",
+  "version": "1.0.0",
+  "description": "A sample Apache Cordova application that responds to the deviceready event.",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "keywords": [
+    "ecosystem:cordova"
+  ],
+  "author": "Apache Cordova Team",
+  "license": "Apache-2.0",
+  "dependencies": {
+    "cordova-android": "^8.1.0",
+    "cordova-browser": "^6.0.0",
+    "cordova-ios": "^5.0.1",
+    "cordova-osx": "^5.0.0"
+  },
+  "devDependencies": {
+    "cordova-plugin-whitelist": "^1.3.4"
+  },
+  "cordova": {
+    "plugins": {
+      "cordova-plugin-whitelist": {}
+    },
+    "platforms": [
+      "android",
+      "ios",
+      "browser",
+      "osx"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/frontend/src-cordova/www/.gitignore b/frontend/src-cordova/www/.gitignore
new file mode 100644 (file)
index 0000000..e7a210e
--- /dev/null
@@ -0,0 +1,3 @@
+*
+*/
+!.gitignore
\ No newline at end of file
index 41e2d0260b990a2e20ba554b977ef626957a6c34..fc30fbe632756fd083fd94092321f413fbe9fc49 100644 (file)
@@ -13,7 +13,7 @@
         height="300"\r
         position="center top"\r
         :src="$server.getImageUrl(itemDetails, 'fanart')"\r
-        gradient="to bottom, rgba(0,0,0,.85), rgba(66,66,66,.85)"\r
+        gradient="to bottom, rgba(66,66,66,.95), rgba(0,0,0,.75)"\r
       >\r
         <div class="text-xs-center" style="height:40px;" id="whitespace_top" />\r
 \r
index 022d95a8189fcb4a6f52a489f3538f535f733730..c16761c97d5598930b5bcf53ddd348cc2723c499 100644 (file)
@@ -8,17 +8,17 @@
     style="background-color: #424242"
   >
     <v-card
-      class="flex"
       dense
       flat
       light
       subheader
       tile
       width="100%"
-      color="transparent"
+      color="#E0E0E0"
+      style="margin-top:1px;"
     >
       <!-- now playing media -->
-      <v-list-item dense two-line style="background-color:#E0E0E0;margin-top:1px">
+      <v-list-item two-line>
         <v-list-item-avatar tile v-if="curQueueItem">
           <img
             :src="$server.getImageUrl(curQueueItem)"
         </v-list-item-avatar>
 
         <v-list-item-content>
-          <v-list-item-title class="title" v-if="curQueueItem" style="height: 19px">
+          <v-list-item-title v-if="curQueueItem">
             {{ curQueueItem.name }}</v-list-item-title
           >
-          <v-list-item-title class="title" v-else-if="$server.activePlayer">
+          <v-list-item-title v-else-if="$server.activePlayer">
             {{ $server.activePlayer.name }}</v-list-item-title
           >
-          <v-list-item-subtitle v-if="curQueueItem" class="subtitle-1" style="font-weight:normal;color: primary">
+          <v-list-item-subtitle v-if="curQueueItem" style="color: primary">
             <span
               v-for="(artist, artistindex) in curQueueItem.artists"
               :key="artistindex"
             >
-              <a v-on:click="clickItem(artist)" @click.stop="">{{
+              <a v-on:click="artistClick(artist)" @click.stop="">{{
                 artist.name
               }}</a>
               <label
@@ -59,7 +59,7 @@
       <!-- progress bar -->
       <div
         class="body-2"
-        style="height:30px;width:100%;color:rgba(0,0,0,.65);margin-top:-5px;background-color:#E0E0E0;"
+        style="height:30px;width:100%;color:rgba(0,0,0,.65);margin-top:-12px;background-color:#E0E0E0;"
         align="center"
       >
         <div
         fixed
         light
         :value="progress"
+        v-if="curQueueItem"
         :style="
           'margin-top:-22px;margin-left:80px;width:' + progressBarWidth + 'px;'
         "
       />
+    </v-card>
 
       <!-- Control buttons -->
       <v-list-item
         dark
         dense
-        style="height:50px;margin-bottom:5px;"
+        style="height:44px;margin-bottom:5px;margin-top:-4px;background-color:#424242;"
       >
         <v-list-item-action v-if="$server.activePlayer" style="margin-top:15px">
           <v-btn small icon @click="playerCommand('previous')">
       </v-list-item>
       <!-- add some additional whitespace in standalone mode only -->
       <div style="height:14px" v-if="$store.isInStandaloneMode" />
-    </v-card>
+
   </v-footer>
 </template>
 
@@ -246,12 +248,17 @@ export default Vue.extend({
       return totalSecs.toString().formatDuration()
     },
     progressBarWidth () {
-      return window.innerWidth - 180
+      return window.innerWidth - 160
     }
   },
   methods: {
     playerCommand (cmd, cmd_opt = null) {
       this.$server.playerCommand(cmd, cmd_opt, this.$server.activePlayerId)
+    },
+    artistClick (item) {
+      // artist entry clicked within the listviewItem
+      var url = '/artists/' + item.item_id
+      this.$router.push({ path: url, query: { provider: item.provider } })
     }
   }
 })
index d8b0982040449b591fa13bf9f536d68b2b094a2e..4b7e8d0e4d2bc10c5a0771bf27901d29f5421472 100644 (file)
@@ -1,5 +1,5 @@
 <template>
-  <v-app-bar app scroll-off-screen hide-on-scroll flat dense dark :color="$store.topBarColor">
+  <v-app-bar app scroll-off-screen flat dense dark :color="$store.topBarColor">
     <v-layout>
       <v-toolbar-title class="body-1" v-if="$store.topBarColor != 'transparent'" style="position:fixed;width:100%;text-align:center;vertical-align:center;margin-top:11px;">{{ $store.windowtitle }}</v-toolbar-title>
       <v-btn icon v-on:click="$store.showNavigationMenu=!$store.showNavigationMenu" style="margin-left:-13px">
index 86202548b14a5af5c97a8aeca9f2ae3ddd8ace24..0150a63023260f8a17412fde2bfaee5f68258910 100644 (file)
@@ -137,8 +137,7 @@ const server = new Vue({
       }.bind(this), 5000)
     },
 
-    _onWsError (err) {
-      console.error('Socket encountered error: ', err.message, 'Closing socket')
+    _onWsError () {
       this._ws.close()
     },
 
index 631bbf8bc0e38baf414294d0bc976882b6a2ea73..435e98bde03056f0969bd5f4d0a347642ba4959d 100644 (file)
@@ -6,7 +6,7 @@ const globalStore = new Vue({
       windowtitle: 'Home',
       loading: false,
       showNavigationMenu: false,
-      topBarColor: 'black',
+      topBarColor: '#424242',
       isMobile: false,
       isInStandaloneMode: false
     }
index d7463265b2fb3c8821d3ac701adb359ab06eba3b..27fbfffda800bf4aa9aafaa145f47f959460de44 100644 (file)
@@ -5,7 +5,15 @@ module.exports = {
       fallbackLocale: 'en',
       localeDir: 'locales',
       enableInSFC: true
-    }
+    },
+    cordovaPath: 'src-cordova'
+  },
+  pwa: {
+    name: 'Music Assistant',
+    themeColor: '#424242',
+    msTileColor: '#424242',
+    appleMobileWebAppCapable: 'yes',
+    appleMobileWebAppStatusBarStyle: 'black'
   },
 
   transpileDependencies: [
index 4bd8a99b92763569b8fa6e5af382719e59deacd0..4003d5a2897aeed5cf0e2dc474e550708421ecac 100755 (executable)
@@ -456,6 +456,8 @@ class MusicManager():
         # no file in cache so we should get it
         img_url = ''
         item = await self.item(item_id, media_type, provider)
+        if not item:
+            return ''
         if item and item.metadata.get(key):
             img_url = item.metadata[key]
         elif media_type == MediaType.Track:
diff --git a/music_assistant/web/css/app.ccd7be77.css b/music_assistant/web/css/app.ccd7be77.css
deleted file mode 100644 (file)
index beac046..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.vertical-btn[data-v-5f737c49]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.divider[data-v-5f737c49]{height:1px;width:100%;background-color:#ccc}.right[data-v-5f737c49]{float:right}.left[data-v-5f737c49]{float:left}.vertical-btn[data-v-71935334]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
\ No newline at end of file
diff --git a/music_assistant/web/css/app.f7c6b061.css b/music_assistant/web/css/app.f7c6b061.css
new file mode 100644 (file)
index 0000000..55a6fb1
--- /dev/null
@@ -0,0 +1 @@
+.vertical-btn[data-v-18f32adc]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.divider[data-v-18f32adc]{height:1px;width:100%;background-color:#ccc}.right[data-v-18f32adc]{float:right}.left[data-v-18f32adc]{float:left}.vertical-btn[data-v-71935334]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
\ No newline at end of file
diff --git a/music_assistant/web/img/icons/apple-touch-icon-152x152.png b/music_assistant/web/img/icons/apple-touch-icon-152x152.png
new file mode 100644 (file)
index 0000000..2b198dc
Binary files /dev/null and b/music_assistant/web/img/icons/apple-touch-icon-152x152.png differ
diff --git a/music_assistant/web/img/icons/msapplication-icon-144x144.png b/music_assistant/web/img/icons/msapplication-icon-144x144.png
new file mode 100644 (file)
index 0000000..d5064f8
Binary files /dev/null and b/music_assistant/web/img/icons/msapplication-icon-144x144.png differ
index 01943b49486641ea68f2cdbdd0cd456427219452..07a04e48b2f0e91a7689ff7624bab585ff91af92 100644 (file)
@@ -1 +1 @@
-<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="favicon.ico"><![endif]--><title>Music Assistant</title><link href=css/config.18def958.css rel=prefetch><link href=css/config~search.af60f7e1.css rel=prefetch><link href=css/itemdetails.bd2e4eb1.css rel=prefetch><link href=css/itemdetails~playerqueue~search.93e2919b.css rel=prefetch><link href=js/config.328c2668.js rel=prefetch><link href=js/config~search.9f3e890b.js rel=prefetch><link href=js/itemdetails.b7fcbe37.js rel=prefetch><link href=js/itemdetails~playerqueue~search.1e2b2bfd.js rel=prefetch><link href=js/playerqueue.39a08978.js rel=prefetch><link href=js/search.5fcda21d.js rel=prefetch><link href=css/app.ccd7be77.css rel=preload as=style><link href=css/chunk-vendors.7d5374e7.css rel=preload as=style><link href=js/app.df1cf09c.js rel=preload as=script><link href=js/chunk-vendors.b98bba01.js rel=preload as=script><link href=css/chunk-vendors.7d5374e7.css rel=stylesheet><link href=css/app.ccd7be77.css rel=stylesheet><link rel=icon type=image/png sizes=32x32 href=img/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=img/icons/favicon-16x16.png><link rel=manifest href=manifest.json><meta name=theme-color content=#4DBA87><meta name=apple-mobile-web-app-capable content=no><meta name=apple-mobile-web-app-status-bar-style content=default><meta name=apple-mobile-web-app-title content=musicassistant-frontend><link rel=apple-touch-icon href=img/icons/apple-touch-icon-152x152.png><link rel=mask-icon href=img/icons/safari-pinned-tab.svg color=#4DBA87><meta name=msapplication-TileImage content=img/icons/msapplication-icon-144x144.png><meta name=msapplication-TileColor content=#000000></head><body><noscript><strong>We're sorry but musicassistant-frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.b98bba01.js></script><script src=js/app.df1cf09c.js></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="favicon.ico"><![endif]--><title>Music Assistant</title><link href=css/config.18def958.css rel=prefetch><link href=css/config~search.af60f7e1.css rel=prefetch><link href=css/itemdetails.bd2e4eb1.css rel=prefetch><link href=css/itemdetails~playerqueue~search.93e2919b.css rel=prefetch><link href=js/config.3af84ca2.js rel=prefetch><link href=js/config~search.9f3e890b.js rel=prefetch><link href=js/itemdetails.5c314dae.js rel=prefetch><link href=js/itemdetails~playerqueue~search.1e2b2bfd.js rel=prefetch><link href=js/playerqueue.5fa460a7.js rel=prefetch><link href=js/search.56af5cc1.js rel=prefetch><link href=css/app.f7c6b061.css rel=preload as=style><link href=css/chunk-vendors.7d5374e7.css rel=preload as=style><link href=js/app.164646f9.js rel=preload as=script><link href=js/chunk-vendors.b98bba01.js rel=preload as=script><link href=css/chunk-vendors.7d5374e7.css rel=stylesheet><link href=css/app.f7c6b061.css rel=stylesheet><link rel=icon type=image/png sizes=32x32 href=img/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=img/icons/favicon-16x16.png><link rel=manifest href=manifest.json><meta name=theme-color content=#424242><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black><meta name=apple-mobile-web-app-title content="Music Assistant"><link rel=apple-touch-icon href=img/icons/apple-touch-icon-152x152.png><link rel=mask-icon href=img/icons/safari-pinned-tab.svg color=#424242><meta name=msapplication-TileImage content=img/icons/msapplication-icon-144x144.png><meta name=msapplication-TileColor content=#424242></head><body><noscript><strong>We're sorry but musicassistant-frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.b98bba01.js></script><script src=js/app.164646f9.js></script></body></html>
\ No newline at end of file
diff --git a/music_assistant/web/js/app.164646f9.js b/music_assistant/web/js/app.164646f9.js
new file mode 100644 (file)
index 0000000..afd846a
--- /dev/null
@@ -0,0 +1,2 @@
+(function(e){function t(t){for(var i,a,o=t[0],l=t[1],c=t[2],u=0,p=[];u<o.length;u++)a=o[u],Object.prototype.hasOwnProperty.call(n,a)&&n[a]&&p.push(n[a][0]),n[a]=0;for(i in l)Object.prototype.hasOwnProperty.call(l,i)&&(e[i]=l[i]);d&&d(t);while(p.length)p.shift()();return s.push.apply(s,c||[]),r()}function r(){for(var e,t=0;t<s.length;t++){for(var r=s[t],i=!0,a=1;a<r.length;a++){var o=r[a];0!==n[o]&&(i=!1)}i&&(s.splice(t--,1),e=l(l.s=r[0]))}return e}var i={},a={app:0},n={app:0},s=[];function o(e){return l.p+"js/"+({"config~search":"config~search",config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",search:"search",itemdetails:"itemdetails",playerqueue:"playerqueue"}[e]||e)+"."+{"config~search":"9f3e890b",config:"3af84ca2","itemdetails~playerqueue~search":"1e2b2bfd",search:"56af5cc1",itemdetails:"5c314dae",playerqueue:"5fa460a7"}[e]+".js"}function l(t){if(i[t])return i[t].exports;var r=i[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.e=function(e){var t=[],r={"config~search":1,config:1,"itemdetails~playerqueue~search":1,itemdetails:1};a[e]?t.push(a[e]):0!==a[e]&&r[e]&&t.push(a[e]=new Promise((function(t,r){for(var i="css/"+({"config~search":"config~search",config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",search:"search",itemdetails:"itemdetails",playerqueue:"playerqueue"}[e]||e)+"."+{"config~search":"af60f7e1",config:"18def958","itemdetails~playerqueue~search":"93e2919b",search:"31d6cfe0",itemdetails:"bd2e4eb1",playerqueue:"31d6cfe0"}[e]+".css",n=l.p+i,s=document.getElementsByTagName("link"),o=0;o<s.length;o++){var c=s[o],u=c.getAttribute("data-href")||c.getAttribute("href");if("stylesheet"===c.rel&&(u===i||u===n))return t()}var p=document.getElementsByTagName("style");for(o=0;o<p.length;o++){c=p[o],u=c.getAttribute("data-href");if(u===i||u===n)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var i=t&&t.target&&t.target.src||n,s=new Error("Loading CSS chunk "+e+" failed.\n("+i+")");s.code="CSS_CHUNK_LOAD_FAILED",s.request=i,delete a[e],d.parentNode.removeChild(d),r(s)},d.href=n;var m=document.getElementsByTagName("head")[0];m.appendChild(d)})).then((function(){a[e]=0})));var i=n[e];if(0!==i)if(i)t.push(i[2]);else{var s=new Promise((function(t,r){i=n[e]=[t,r]}));t.push(i[2]=s);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=o(e);var p=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(d);var r=n[e];if(0!==r){if(r){var i=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;p.message="Loading chunk "+e+" failed.\n("+i+": "+a+")",p.name="ChunkLoadError",p.type=i,p.request=a,r[1](p)}n[e]=void 0}};var d=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=i,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)l.d(r,i,function(t){return e[t]}.bind(null,i));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw e};var c=window["webpackJsonp"]=window["webpackJsonp"]||[],u=c.push.bind(c);c.push=t,c=c.slice();for(var p=0;p<c.length;p++)t(c[p]);var d=u;s.push([0,"chunk-vendors"]),r()})({0:function(e,t,r){e.exports=r("56d7")},"0863":function(e,t,r){e.exports=r.p+"img/qobuz.c7eb9a76.png"},"0c3b":function(e,t,r){e.exports=r.p+"img/spotify.1f3fb1af.png"},"1c27":function(e,t,r){},"1c3f":function(e,t,r){},2755:function(e,t,r){e.exports=r.p+"img/http_streamer.4c4e4880.png"},3232:function(e,t,r){e.exports=r.p+"img/homeassistant.29fe3282.png"},"3d05":function(e,t,r){e.exports=r.p+"img/webplayer.8e1a0da9.png"},"49f8":function(e,t,r){var i={"./en.json":"edd4","./nl.json":"a625"};function a(e){var t=n(e);return r(t)}function n(e){if(!r.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}a.keys=function(){return Object.keys(i)},a.resolve=n,e.exports=a,a.id="49f8"},"4bfb":function(e,t,r){e.exports=r.p+"img/default_artist.7305b29c.png"},"56d7":function(e,t,r){"use strict";r.r(t);r("e25e"),r("e260"),r("e6cf"),r("cca6"),r("a79d");var i=r("2b0e"),a=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-app",{attrs:{light:""}},[r("TopBar"),r("NavigationMenu"),r("v-content",[r("router-view",{key:e.$route.path,attrs:{app:""}})],1),r("PlayerOSD",{attrs:{showPlayerSelect:e.showPlayerSelect}}),r("ContextMenu"),r("PlayerSelect"),r("v-overlay",{attrs:{value:e.$store.loading}},[r("v-progress-circular",{attrs:{indeterminate:"",size:"64"}})],1)],1)},n=[],s=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-navigation-drawer",{attrs:{dark:"",app:"",clipped:"",temporary:""},model:{value:e.$store.showNavigationMenu,callback:function(t){e.$set(e.$store,"showNavigationMenu",t)},expression:"$store.showNavigationMenu"}},[r("v-list",[e._l(e.items,(function(t){return r("v-list-item",{key:t.title,on:{click:function(r){return e.$router.push(t.path)}}},[r("v-list-item-action",[r("v-icon",[e._v(e._s(t.icon))])],1),r("v-list-item-content",[r("v-list-item-title",[e._v(e._s(t.title))])],1)],1)})),r("v-btn",{attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}})],2)],1)},o=[],l=i["a"].extend({props:{},data:function(){return{items:[{title:this.$t("home"),icon:"home",path:"/"},{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("radios"),icon:"radio",path:"/radios"},{title:this.$t("search"),icon:"search",path:"/search"},{title:this.$t("settings"),icon:"settings",path:"/config"}]}},mounted:function(){},methods:{}}),c=l,u=r("2877"),p=r("6544"),d=r.n(p),m=r("8336"),h=r("132d"),v=r("8860"),f=r("da13"),y=r("1800"),g=r("5d23"),A=r("f774"),b=Object(u["a"])(c,s,o,!1,null,null,null),k=b.exports;d()(b,{VBtn:m["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:y["a"],VListItemContent:g["a"],VListItemTitle:g["c"],VNavigationDrawer:A["a"]});var w=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-app-bar",{attrs:{app:"","scroll-off-screen":"",flat:"",dense:"",dark:"",color:e.$store.topBarColor}},[r("v-layout",["transparent"!=e.$store.topBarColor?r("v-toolbar-title",{staticClass:"body-1",staticStyle:{position:"fixed",width:"100%","text-align":"center","vertical-align":"center","margin-top":"11px"}},[e._v(e._s(e.$store.windowtitle))]):e._e(),r("v-btn",{staticStyle:{"margin-left":"-13px"},attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}},[r("v-icon",[e._v("menu")])],1),r("v-btn",{attrs:{icon:""},on:{click:function(t){return e.$router.go(-1)}}},[r("v-icon",[e._v("arrow_back")])],1),r("v-spacer"),r("v-btn",{staticStyle:{"margin-right":"-23px"},attrs:{icon:""},on:{click:function(t){return e.$server.$emit("showContextMenu")}}},[r("v-icon",[e._v("more_vert")])],1)],1)],1)},_=[],I=i["a"].extend({props:{color:{type:String,default:"#424242"},fixed:{type:Boolean,default:!0},context:{type:Object,default:null}},data:function(){return{}},mounted:function(){},methods:{}}),x=I,P=r("40dc"),S=r("a722"),C=r("2fa4"),B=r("2a7f"),R=Object(u["a"])(x,w,_,!1,null,null,null),O=R.exports;d()(R,{VAppBar:P["a"],VBtn:m["a"],VIcon:h["a"],VLayout:S["a"],VSpacer:C["a"],VToolbarTitle:B["a"]});var M=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-dialog",{attrs:{"max-width":"500px"},on:{input:function(t){return e.$emit("input",t)}},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[r("v-card",[0===e.playlists.length?r("v-list",[r("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e.subheader?r("v-subheader",[e._v(e._s(e.subheader))]):e._e(),e._l(e.menuItems,(function(t){return r("div",{key:t.label},[r("v-list-item",{on:{click:function(r){return e.itemCommand(t.action)}}},[r("v-list-item-avatar",[r("v-icon",[e._v(e._s(t.icon))])],1),r("v-list-item-content",[r("v-list-item-title",[e._v(e._s(e.$t(t.label)))])],1)],1),r("v-divider")],1)}))],2):e._e(),e.playlists.length>0?r("v-list",[r("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e._l(e.playlists,(function(t,i){return r("listviewItem",{key:t.item_id,attrs:{item:t,totalitems:e.playlists.length,index:i,hideavatar:!1,hidetracknum:!0,hideproviders:!1,hidelibrary:!0,hidemenu:!0},on:{click:e.playlistSelected}})}))],2):e._e()],1)],1)},E=[],V=(r("a4d3"),r("e01a"),r("d28b"),r("99af"),r("caad"),r("b0c0"),r("d3b7"),r("2532"),r("3ca3"),r("ddb0"),r("96cf"),r("89ba")),D=r("284c"),L=r("d3cc"),N=i["a"].extend({components:{ListviewItem:L["a"]},props:{},watch:{},data:function(){return{visible:!1,menuItems:[],header:"",subheader:"",curItem:null,curPlaylist:null,mediaPlayItems:[{label:"play_now",action:"play",icon:"play_circle_outline"},{label:"play_next",action:"next",icon:"queue_play_next"},{label:"add_queue",action:"add",icon:"playlist_add"}],showTrackInfoItem:{label:"show_info",action:"info",icon:"info"},addToPlaylistItem:{label:"add_playlist",action:"add_playlist",icon:"add_circle_outline"},removeFromPlaylistItem:{label:"remove_playlist",action:"remove_playlist",icon:"remove_circle_outline"},playerQueueItems:[],playlists:[]}},mounted:function(){},created:function(){this.$server.$on("showContextMenu",this.showContextMenu),this.$server.$on("showPlayMenu",this.showPlayMenu)},beforeDestroy:function(){this.$server.$off("showContextMenu"),this.$server.$off("showPlayMenu")},computed:{},methods:{showContextMenu:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(this.curItem=e,this.curPlaylist=t,e){if(3===e.media_type){var r=[];r.push.apply(r,Object(D["a"])(this.mediaPlayItems)),r.push(this.showTrackInfoItem),r.push(this.addToPlaylistItem),t&&t.is_editable&&r.push(this.removeFromPlaylistItem),this.menuItems=r}else this.menuItems=this.mediaPlayItems;this.header=e.name,this.subheader="",this.visible=!0}},showPlayMenu:function(e){this.curItem=e,e&&(this.menuItems=this.mediaPlayItems,this.header=e.name,this.subheader="",this.visible=!0)},itemCommand:function(e){if("info"===e)this.$router.push({path:"/tracks/"+this.curItem.item_id,query:{provider:this.curItem.provider}}),this.visible=!1;else{if("add_playlist"===e)return this.showPlaylistsMenu();"remove_playlist"===e?(this.playlistAddRemove(this.curItem,this.curPlaylist.item_id,"playlist_remove"),this.visible=!1):(this.$server.playItem(this.curItem,e),this.visible=!1)}},playlistSelected:function(e){this.playlistAddRemove(this.curItem,e,"playlist_add"),this.visible=!1},playlistAddRemove:function(e,t){var r=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"playlist_add",a="".concat(this.$store.server,"api/track/").concat(e.item_id);this.$axios.get(a,{params:{provider:e.provider,action:i,action_details:t.item_id}}).then((function(e){"playlist_remove"===i&&r.$router.go()}))},showPlaylistsMenu:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(){var t,r,i,a,n,s,o,l,c,u,p,d,m,h,v,f,y,g,A,b,k,w;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:for(t=this.$store.apiAddress+"playlists",r=[],i=!0,a=!1,n=void 0,e.prev=5,s=this.curItem.provider_ids[Symbol.iterator]();!(i=(o=s.next()).done);i=!0)l=o.value,r.push(l.provider);e.next=13;break;case 9:e.prev=9,e.t0=e["catch"](5),a=!0,n=e.t0;case 13:e.prev=13,e.prev=14,i||null==s.return||s.return();case 16:if(e.prev=16,!a){e.next=19;break}throw n;case 19:return e.finish(16);case 20:return e.finish(13);case 21:return e.next=23,this.$axios.get(t,{});case 23:c=e.sent,u=[],p=!0,d=!1,m=void 0,e.prev=28,h=c.data[Symbol.iterator]();case 30:if(p=(v=h.next()).done){e.next=63;break}if(f=v.value,!f.is_editable||f.item_id===this.curPlaylist.item_id){e.next=60;break}y=!0,g=!1,A=void 0,e.prev=36,b=f.provider_ids[Symbol.iterator]();case 38:if(y=(k=b.next()).done){e.next=46;break}if(w=k.value,!r.includes(w.provider)){e.next=43;break}return u.push(f),e.abrupt("break",46);case 43:y=!0,e.next=38;break;case 46:e.next=52;break;case 48:e.prev=48,e.t1=e["catch"](36),g=!0,A=e.t1;case 52:e.prev=52,e.prev=53,y||null==b.return||b.return();case 55:if(e.prev=55,!g){e.next=58;break}throw A;case 58:return e.finish(55);case 59:return e.finish(52);case 60:p=!0,e.next=30;break;case 63:e.next=69;break;case 65:e.prev=65,e.t2=e["catch"](28),d=!0,m=e.t2;case 69:e.prev=69,e.prev=70,p||null==h.return||h.return();case 72:if(e.prev=72,!d){e.next=75;break}throw m;case 75:return e.finish(72);case 76:return e.finish(69);case 77:this.playlists=u;case 78:case"end":return e.stop()}}),e,this,[[5,9,13,21],[14,,16,20],[28,65,69,77],[36,48,52,60],[53,,55,59],[70,,72,76]])})));function t(){return e.apply(this,arguments)}return t}()}}),F=N,T=r("b0af"),z=r("169a"),J=r("ce7e"),H=r("8270"),Q=r("e0c7"),U=Object(u["a"])(F,M,E,!1,null,null,null),j=U.exports;d()(U,{VCard:T["a"],VDialog:z["a"],VDivider:J["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:H["a"],VListItemContent:g["a"],VListItemTitle:g["c"],VSubheader:Q["a"]});var Y=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("v-footer",{staticStyle:{"background-color":"#424242"},attrs:{app:"",fixed:"",padless:"",light:"",elevation:"10"}},[i("v-card",{staticStyle:{"margin-top":"1px"},attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"#E0E0E0"}},[i("v-list-item",{attrs:{"two-line":""}},[e.curQueueItem?i("v-list-item-avatar",{attrs:{tile:""}},[i("img",{staticStyle:{border:"1px solid rgba(0,0,0,.54)"},attrs:{src:e.$server.getImageUrl(e.curQueueItem),"lazy-src":r("71db")}})]):i("v-list-item-avatar",[i("v-icon",[e._v("speaker")])],1),i("v-list-item-content",[e.curQueueItem?i("v-list-item-title",[e._v(" "+e._s(e.curQueueItem.name))]):e.$server.activePlayer?i("v-list-item-title",[e._v(" "+e._s(e.$server.activePlayer.name))]):e._e(),e.curQueueItem?i("v-list-item-subtitle",{staticStyle:{color:"primary"}},e._l(e.curQueueItem.artists,(function(t,r){return i("span",{key:r},[i("a",{on:{click:[function(r){return e.artistClick(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),r+1<e.curQueueItem.artists.length?i("label",{key:r},[e._v(" / ")]):e._e()])})),0):e._e()],1)],1),i("div",{staticClass:"body-2",staticStyle:{height:"30px",width:"100%",color:"rgba(0,0,0,.65)","margin-top":"-12px","background-color":"#E0E0E0"},attrs:{align:"center"}},[e.curQueueItem?i("div",{staticStyle:{height:"12px","margin-left":"22px","margin-right":"20px","margin-top":"2px"}},[i("span",{staticClass:"left"},[e._v(" "+e._s(e.playerCurTimeStr)+" ")]),i("span",{staticClass:"right"},[e._v(" "+e._s(e.playerTotalTimeStr)+" ")])]):e._e()]),e.curQueueItem?i("v-progress-linear",{style:"margin-top:-22px;margin-left:80px;width:"+e.progressBarWidth+"px;",attrs:{fixed:"",light:"",value:e.progress}}):e._e()],1),i("v-list-item",{staticStyle:{height:"44px","margin-bottom":"5px","margin-top":"-4px","background-color":"#424242"},attrs:{dark:"",dense:""}},[e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[i("v-btn",{attrs:{small:"",icon:""},on:{click:function(t){return e.playerCommand("previous")}}},[i("v-icon",[e._v("skip_previous")])],1)],1):e._e(),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-left":"-32px","margin-top":"15px"}},[i("v-btn",{attrs:{icon:"","x-large":""},on:{click:function(t){return e.playerCommand("play_pause")}}},[i("v-icon",{attrs:{size:"50"}},[e._v(e._s("playing"==e.$server.activePlayer.state?"pause":"play_arrow"))])],1)],1):e._e(),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[i("v-btn",{attrs:{icon:"",small:""},on:{click:function(t){return e.playerCommand("next")}}},[i("v-icon",[e._v("skip_next")])],1)],1):e._e(),i("v-list-item-content"),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{padding:"28px"}},[i("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$router.push("/playerqueue/")}}},[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("queue_music")]),i("span",{staticClass:"overline"},[e._v(e._s(e.$t("queue")))])],1)],1)],1):e._e(),e.$server.activePlayer&&!e.$store.isMobile?i("v-list-item-action",{staticStyle:{padding:"20px"}},[i("v-menu",{attrs:{"close-on-content-click":!1,"nudge-width":250,"offset-x":"",top:""},nativeOn:{click:function(e){e.preventDefault()}},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("v-btn",e._g({attrs:{small:"",icon:""}},r),[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("volume_up")]),i("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.activePlayer.volume_level)))])],1)],1)]}}],null,!1,1951340450)},[i("VolumeControl",{attrs:{players:e.$server.players,player_id:e.$server.activePlayer.player_id}})],1)],1):e._e(),i("v-list-item-action",{staticStyle:{padding:"20px","margin-right":"15px"}},[i("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$server.$emit("showPlayersMenu")}}},[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("speaker")]),e.$server.activePlayer?i("span",{staticClass:"overline"},[e._v(e._s(e.$server.activePlayer.name))]):i("span",{staticClass:"overline"})],1)],1)],1)],1),e.$store.isInStandaloneMode?i("div",{staticStyle:{height:"14px"}}):e._e()],1)},X=[],q=(r("0d03"),r("25f0"),function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-card",[r("v-list",[r("v-list-item",{staticStyle:{height:"50px","padding-bottom":"5"}},[r("v-list-item-avatar",{staticStyle:{"margin-left":"-10px"},attrs:{tile:""}},[r("v-icon",{attrs:{large:""}},[e._v(e._s(e.players[e.player_id].is_group?"speaker_group":"speaker"))])],1),r("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[r("v-list-item-title",[e._v(e._s(e.players[e.player_id].name))]),r("v-list-item-subtitle",[e._v(e._s(e.$t("state."+e.players[e.player_id].state)))])],1)],1),r("v-divider"),e._l(e.volumePlayerIds,(function(t){return r("div",{key:t},[r("div",{staticClass:"body-2",style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);"},[r("v-btn",{staticStyle:{"margin-left":"8px"},style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);",attrs:{icon:""},on:{click:function(r){return e.togglePlayerPower(t)}}},[r("v-icon",[e._v("power_settings_new")])],1),r("span",{staticStyle:{"margin-left":"10px"}},[e._v(e._s(e.players[t].name))]),r("div",{staticStyle:{"margin-top":"-8px","margin-left":"15px","margin-right":"15px",height:"35px"}},[e.players[t].disable_volume?e._e():r("v-slider",{attrs:{lazy:"",disabled:!e.players[t].powered,value:Math.round(e.players[t].volume_level),"prepend-icon":"volume_down","append-icon":"volume_up"},on:{end:function(r){return e.setPlayerVolume(t,r)},"click:append":function(r){return e.setPlayerVolume(t,"up")},"click:prepend":function(r){return e.setPlayerVolume(t,"down")}}})],1)],1),r("v-divider")],1)}))],2)],1)}),W=[],Z=i["a"].extend({props:["value","players","player_id"],data:function(){return{}},computed:{volumePlayerIds:function(){var e=[this.player_id];return e.push.apply(e,Object(D["a"])(this.players[this.player_id].group_childs)),e}},mounted:function(){},methods:{setPlayerVolume:function(e,t){this.players[e].volume_level=t,"up"===t?this.$server.playerCommand("volume_up",null,e):"down"===t?this.$server.playerCommand("volume_down",null,e):this.$server.playerCommand("volume_set",t,e)},togglePlayerPower:function(e){this.$server.playerCommand("power_toggle",null,e)}}}),K=Z,G=r("ba0d"),$=Object(u["a"])(K,q,W,!1,null,null,null),ee=$.exports;d()($,{VBtn:m["a"],VCard:T["a"],VDivider:J["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:H["a"],VListItemContent:g["a"],VListItemSubtitle:g["b"],VListItemTitle:g["c"],VSlider:G["a"]});var te=i["a"].extend({components:{VolumeControl:ee},props:[],data:function(){return{curQueueItem:null}},watch:{curQueueItemId:function(e){var t=this;if(null==e)this.curQueueItem=null;else{var r="players/"+this.$server.activePlayerId+"/queue/"+e;this.$server.getData(r).then((function(e){t.curQueueItem=e}))}}},computed:{curQueueItemId:function(){return this.$server.activePlayer?this.$server.activePlayer.cur_queue_item:null},progress:function(){if(!this.curQueueItem)return 0;var e=this.curQueueItem.duration,t=this.$server.activePlayer.cur_time,r=t/e*100;return r},playerCurTimeStr:function(){if(!this.curQueueItem)return"0:00";if(!this.$server.activePlayer.cur_time)return"0:00";var e=this.$server.activePlayer.cur_time;return e.toString().formatDuration()},playerTotalTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.curQueueItem.duration;return e.toString().formatDuration()},progressBarWidth:function(){return window.innerWidth-160}},methods:{playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.$server.playerCommand(e,t,this.$server.activePlayerId)},artistClick:function(e){var t="/artists/"+e.item_id;this.$router.push({path:t,query:{provider:e.provider}})}}}),re=te,ie=(r("826c"),r("0e8f")),ae=r("553a"),ne=r("e449"),se=r("8e36"),oe=Object(u["a"])(re,Y,X,!1,null,"18f32adc",null),le=oe.exports;d()(oe,{VBtn:m["a"],VCard:T["a"],VFlex:ie["a"],VFooter:ae["a"],VIcon:h["a"],VListItem:f["a"],VListItemAction:y["a"],VListItemAvatar:H["a"],VListItemContent:g["a"],VListItemSubtitle:g["b"],VListItemTitle:g["c"],VMenu:ne["a"],VProgressLinear:se["a"]});var ce=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-navigation-drawer",{attrs:{right:"",app:"",clipped:"",temporary:"",width:"300"},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[r("v-card-title",{staticClass:"headline"},[r("b",[e._v(e._s(e.$t("players")))])]),r("v-list",{attrs:{dense:""}},[r("v-divider"),e._l(e.filteredPlayerIds,(function(t){return r("div",{key:t,style:e.$server.activePlayerId==t?"background-color:rgba(50, 115, 220, 0.3);":""},[r("v-list-item",{staticStyle:{"margin-left":"-5px","margin-right":"-15px"},attrs:{ripple:"",dense:""},on:{click:function(r){return e.$server.switchPlayer(e.$server.players[t].player_id)}}},[r("v-list-item-avatar",[r("v-icon",{attrs:{size:"45"}},[e._v(e._s(e.$server.players[t].is_group?"speaker_group":"speaker"))])],1),r("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[r("v-list-item-title",{staticClass:"subtitle-1"},[e._v(e._s(e.$server.players[t].name))]),r("v-list-item-subtitle",{key:e.$server.players[t].state,staticClass:"body-2",staticStyle:{"font-weight":"normal"}},[e._v(" "+e._s(e.$t("state."+e.$server.players[t].state))+" ")])],1),e.$server.activePlayerId?r("v-list-item-action",{staticStyle:{"padding-right":"10px"}},[r("v-menu",{attrs:{"close-on-content-click":!1,"close-on-click":!0,"nudge-width":250,"offset-x":"",right:""},nativeOn:{click:[function(e){e.stopPropagation()},function(e){e.stopPropagation(),e.preventDefault()}]},scopedSlots:e._u([{key:"activator",fn:function(i){var a=i.on;return[r("v-btn",e._g({staticStyle:{color:"rgba(0,0,0,.54)"},attrs:{icon:""}},a),[r("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[r("v-icon",[e._v("volume_up")]),r("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.players[t].volume_level)))])],1)],1)]}}],null,!0)},[r("VolumeControl",{attrs:{players:e.$server.players,player_id:t}})],1)],1):e._e()],1),r("v-divider")],1)}))],2)],1)},ue=[],pe=i["a"].extend({components:{VolumeControl:ee},watch:{},data:function(){return{filteredPlayerIds:[],visible:!1}},computed:{},created:function(){this.$server.$on("showPlayersMenu",this.show),this.$server.$on("players changed",this.getAvailablePlayers),this.getAvailablePlayers()},beforeDestroy:function(){this.$server.$off("showPlayersMenu"),this.$server.$off("players changed")},methods:{show:function(){this.visible=!0},getAvailablePlayers:function(){for(var e in this.filteredPlayerIds=[],this.$server.players)this.$server.players[e].enabled&&0===this.$server.players[e].group_parents.length&&this.filteredPlayerIds.push(e)}}}),de=pe,me=(r("60ce"),r("99d9")),he=Object(u["a"])(de,ce,ue,!1,null,"71935334",null),ve=he.exports;d()(he,{VBtn:m["a"],VCardTitle:me["c"],VDivider:J["a"],VFlex:ie["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:y["a"],VListItemAvatar:H["a"],VListItemContent:g["a"],VListItemSubtitle:g["b"],VListItemTitle:g["c"],VMenu:ne["a"],VNavigationDrawer:A["a"]});var fe=i["a"].extend({name:"App",components:{NavigationMenu:k,TopBar:O,ContextMenu:j,PlayerOSD:le,PlayerSelect:ve},data:function(){return{showPlayerSelect:!1}},created:function(){var e="",t=window.location;e=t.origin+t.pathname,this.$server.connect(e)}}),ye=fe,ge=r("7496"),Ae=r("a75b"),be=r("a797"),ke=r("490a"),we=Object(u["a"])(ye,a,n,!1,null,null,null),_e=we.exports;d()(we,{VApp:ge["a"],VContent:Ae["a"],VOverlay:be["a"],VProgressCircular:ke["a"]});var Ie=r("9483");Object(Ie["a"])("".concat("","service-worker.js"),{ready:function(){},registered:function(){},cached:function(){},updatefound:function(){},updated:function(){},offline:function(){},error:function(e){}});r("4de4"),r("4160"),r("e439"),r("dbb4"),r("b64b"),r("159b");var xe=r("2fa7"),Pe=r("8c4f"),Se=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("section",[r("v-list",{attrs:{tile:""}},e._l(e.items,(function(t){return r("v-list-item",{key:t.title,attrs:{tile:""},on:{click:function(r){return e.$router.push(t.path)}}},[r("v-list-item-icon",{staticStyle:{"margin-left":"15px"}},[r("v-icon",[e._v(e._s(t.icon))])],1),r("v-list-item-content",[r("v-list-item-title",{domProps:{textContent:e._s(t.title)}})],1)],1)})),1)],1)},Ce=[],Be={name:"home",data:function(){return{items:[{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("search"),icon:"search",path:"/search"}]}},created:function(){this.$store.windowtitle=this.$t("musicassistant")}},Re=Be,Oe=r("34c3"),Me=Object(u["a"])(Re,Se,Ce,!1,null,null,null),Ee=Me.exports;d()(Me,{VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemContent:g["a"],VListItemIcon:Oe["a"],VListItemTitle:g["c"]});var Ve=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("section",[r("v-list",{attrs:{"two-line":""}},[r("RecycleScroller",{staticClass:"scroller",attrs:{items:e.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.item;return[r("ListviewItem",{attrs:{item:i,hideavatar:3==i.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:i.media_type<4&&e.$store.isMobile,hidelibrary:!0,hidemenu:3==i.media_type&&e.$store.isMobile,hideduration:5==i.media_type},on:{click:e.itemClicked,menuClick:e.menuClick}})]}}])})],1)],1)},De=[],Le={name:"browse",components:{ListviewItem:L["a"]},props:{mediatype:String,provider:String},data:function(){return{selected:[2],items:[]}},created:function(){this.$store.windowtitle=this.$t(this.mediatype),this.getItems()},methods:{itemClicked:function(e){var t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showContextMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(e){this.$server.$emit("showContextMenu",e)},getItems:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(){var t,r,i,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t=0,r=50;case 2:return e.next=5,this.$server.getData(this.mediatype,{offset:t,limit:r,provider:this.provider});case 5:if(a=e.sent,a&&0!==a.length){e.next=8;break}return e.abrupt("break",14);case 8:if((i=this.items).push.apply(i,Object(D["a"])(a)),t+=r,!(a.length<r)){e.next=12;break}return e.abrupt("break",14);case 12:e.next=2;break;case 14:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()}},Ne=Le,Fe=Object(u["a"])(Ne,Ve,De,!1,null,null,null),Te=Fe.exports;function ze(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function Je(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ze(r,!0).forEach((function(t){Object(xe["a"])(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ze(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}d()(Fe,{VList:v["a"]}),i["a"].use(Pe["a"]);var He=[{path:"/",name:"home",component:Ee},{path:"/config",name:"config",component:function(){return Promise.all([r.e("config~search"),r.e("config")]).then(r.bind(null,"1071"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/config/:configKey",name:"configKey",component:function(){return Promise.all([r.e("config~search"),r.e("config")]).then(r.bind(null,"1071"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/search",name:"search",component:function(){return Promise.all([r.e("itemdetails~playerqueue~search"),r.e("config~search"),r.e("search")]).then(r.bind(null,"2d3b"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/:media_type/:media_id",name:"itemdetails",component:function(){return Promise.all([r.e("itemdetails~playerqueue~search"),r.e("itemdetails")]).then(r.bind(null,"32a2"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/playerqueue",name:"playerqueue",component:function(){return Promise.all([r.e("itemdetails~playerqueue~search"),r.e("playerqueue")]).then(r.bind(null,"b097"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/:mediatype",name:"browse",component:Te,props:function(e){return Je({},e.params,{},e.query)}}],Qe=new Pe["a"]({mode:"hash",routes:He}),Ue=Qe,je=(r("ac1f"),r("466d"),r("1276"),r("a925"));function Ye(){var e=r("49f8"),t={};return e.keys().forEach((function(r){var i=r.match(/([A-Za-z0-9-_]+)\./i);if(i&&i.length>1){var a=i[1];t[a]=e(r)}})),t}i["a"].use(je["a"]);var Xe=new je["a"]({locale:navigator.language.split("-")[0],fallbackLocale:"en",messages:Ye()}),qe=(r("d5e8"),r("d1e78"),r("e508")),We=(r("a899"),r("f309"));r("bf40");i["a"].use(We["a"]);var Ze=new We["a"]({icons:{iconfont:"md"}}),Ke=new i["a"]({data:function(){return{windowtitle:"Home",loading:!1,showNavigationMenu:!1,topBarColor:"#424242",isMobile:!1,isInStandaloneMode:!1}},created:function(){this.handleWindowOptions(),window.addEventListener("resize",this.handleWindowOptions)},destroyed:function(){window.removeEventListener("resize",this.handleWindowOptions)},methods:{handleWindowOptions:function(){this.isMobile=document.body.clientWidth<700,this.isInStandaloneMode="standalone"in window.navigator&&window.navigator.standalone}}}),Ge={globalStore:Ke,install:function(e,t){e.prototype.$store=Ke}},$e=(r("8a79"),r("5319"),r("bc3a")),et=r.n($e),tt={timeout:6e4},rt=et.a.create(tt),it=new i["a"]({_address:"",_ws:null,data:function(){return{connected:!1,players:{},activePlayerId:null}},methods:{connect:function(e){e.endsWith("/")||(e+="/"),this._address=e;var t=e.replace("http","ws")+"ws";this._ws=new WebSocket(t),this._ws.onopen=this._onWsConnect,this._ws.onmessage=this._onWsMessage,this._ws.onclose=this._onWsClose,this._ws.onerror=this._onWsError},toggleLibrary:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(t){var r,i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return r=t.media_type+"/"+t.item_id,i="library_remove",0===t.in_library.length&&(i="library_add"),e.next=5,this.getData(r,{provider:t.provider,action:i});case 5:t.in_library="/library_remove"===i?[]:[t.provider];case 6:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),getImageUrl:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"image",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return e&&e.media_type?"".concat(this._address,"api/").concat(e.media_type,"/").concat(e.item_id,"/image?type=").concat(t,"&provider=").concat(e.provider,"&size=").concat(r):""},getData:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(t){var r,i,a,n=arguments;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return r=n.length>1&&void 0!==n[1]?n[1]:{},i=this._address+"api/"+t,e.next=4,rt.get(i,{params:r});case 4:return a=e.sent,e.abrupt("return",a.data);case 6:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),postData:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(t,r){var i,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return i=this._address+"api/"+t,e.next=3,rt.post(i,r);case 3:return a=e.sent,e.abrupt("return",a.data);case 5:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}(),playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.activePlayerId,i={player_id:r,cmd:e,cmd_args:t};this._ws.send(JSON.stringify({message:"player command",message_details:i}))},playItem:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(t,r){var i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.$store.loading=!0,i="players/"+this.activePlayerId+"/play_media/"+t.media_type+"/"+t.item_id+"/"+r,e.next=4,this.getData(i);case 4:this.$store.loading=!1;case 5:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}(),switchPlayer:function(e){this.activePlayerId=e,localStorage.setItem("activePlayerId",e),this.$emit("new player selected",e)},_onWsConnect:function(){this.connected=!0;var e=JSON.stringify({message:"players",message_details:null});this._ws.send(e)},_onWsMessage:function(e){var t=JSON.parse(e.data);if("player changed"===t.message)i["a"].set(this.players,t.message_details.player_id,t.message_details);else if("player added"===t.message)i["a"].set(this.players,t.message_details.player_id,t.message_details),this._selectActivePlayer(),this.$emit("players changed");else if("player removed"===t.message)i["a"].delete(this.players,t.message_details.player_id),this._selectActivePlayer(),this.$emit("players changed");else if("players"===t.message){var r=!0,a=!1,n=void 0;try{for(var s,o=t.message_details[Symbol.iterator]();!(r=(s=o.next()).done);r=!0){var l=s.value;i["a"].set(this.players,l.player_id,l)}}catch(c){a=!0,n=c}finally{try{r||null==o.return||o.return()}finally{if(a)throw n}}this._selectActivePlayer(),this.$emit("players changed")}else this.$emit(t.message,t.message_details)},_onWsClose:function(e){this.connected=!1,setTimeout(function(){this.connect(this._address)}.bind(this),5e3)},_onWsError:function(){this._ws.close()},_selectActivePlayer:function(){if(!this.activePlayer||!this.activePlayer.enabled||this.activePlayer.group_parents.length>0){var e=localStorage.getItem("activePlayerId");if(e&&this.players[e]&&this.players[e].enabled)this.switchPlayer(e);else{for(var t in this.players)if("playing"===this.players[t].state&&this.players[t].enabled&&0===this.players[t].group_parents.length){this.switchPlayer(t);break}if(!this.activePlayer||!this.activePlayer.enabled)for(var r in this.players)if(this.players[r].enabled&&0===this.players[r].group_parents.length){this.switchPlayer(r);break}}}}},computed:{activePlayer:function(){return this.activePlayerId?this.players[this.activePlayerId]:null}}}),at={server:it,install:function(e,t){e.prototype.$server=it}};i["a"].config.productionTip=!1,i["a"].use(qe["a"]),i["a"].use(Ge),i["a"].use(at),String.prototype.formatDuration=function(){var e=parseInt(this,10),t=Math.floor(e/3600),r=Math.floor((e-3600*t)/60),i=e-3600*t-60*r;return t<10&&(t="0"+t),r<10&&(r="0"+r),i<10&&(i="0"+i),"00"===t?r+":"+i:t+":"+r+":"+i},new i["a"]({router:Ue,i18n:Xe,vuetify:Ze,render:function(e){return e(_e)}}).$mount("#app")},"57d1":function(e,t){e.exports="data:image/png;base64,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"},"60ce":function(e,t,r){"use strict";var i=r("1c3f"),a=r.n(i);a.a},"71db":function(e,t,r){e.exports=r.p+"img/file.813f9dad.png"},"826c":function(e,t,r){"use strict";var i=r("1c27"),a=r.n(i);a.a},"82f5":function(e,t,r){e.exports=r.p+"img/sonos.72e2fecb.png"},"94cc":function(e,t){e.exports="data:image/png;base64,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"},"9a36":function(e,t){e.exports="data:image/png;base64,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"},"9e01":function(e,t,r){var i={"./aac.png":"9a36","./chromecast.png":"57d1","./default_artist.png":"4bfb","./file.png":"71db","./flac.png":"fb30","./hires.png":"f5e3","./homeassistant.png":"3232","./http_streamer.png":"2755","./logo.png":"cf05","./mp3.png":"f1d4","./qobuz.png":"0863","./sonos.png":"82f5","./spotify.png":"0c3b","./squeezebox.png":"bd18","./tunein.png":"e428","./vorbis.png":"94cc","./web.png":"edbf","./webplayer.png":"3d05"};function a(e){var t=n(e);return r(t)}function n(e){if(!r.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}a.keys=function(){return Object.keys(i)},a.resolve=n,e.exports=a,a.id="9e01"},a625:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artiesten","albums":"Albums","tracks":"Nummers","playlists":"Afspeellijsten","playlist_tracks":"Nummers in afspeellijst","radios":"Radio","search":"Zoeken","settings":"Instellingen","queue":"Wachtrij","artist_toptracks":"Top nummers","artist_albums":"Albums","album_tracks":"Album liedjes","album_versions":"Versies","track_versions":"Versies","type_to_search":"Type hier om te zoeken...","add_library":"Voeg toe aan bibliotheek","remove_library":"Verwijder uit bibliotheek","add_playlist":"Aan playlist toevoegen...","remove_playlist":"Verwijder uit playlist","no_player":"Geen speler geselecteerd","reboot_required":"Je moet de server opnieuw starten om de nieuwe instellingen actief te maken!","conf":{"enabled":"Ingeschakeld","base":"Algemene instellingen","musicproviders":"Muziek providers","playerproviders":"Speler providers","player_settings":"Speler instellingen","homeassistant":"Home Assistant integratie","web":"Webserver","http_streamer":"Ingebouwde (sox gebaseerde) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Bestandssysteem","chromecast":"Chromecast","squeezebox":"Squeezebox ondersteuning","sonos":"Sonos","webplayer":"Web Player (alleen Chrome browser)","username":"Gebruikersnaam","password":"Wachtwoord","hostname":"Hostnaam (of IP)","port":"Poort","hass_url":"URL naar homeassistant (b.v. https://homeassistant:8123)","hass_token":"Token met lange levensduur","hass_publish":"Publiceer spelers naar Home Assistant","hass_player_power":"Verbind speler aan/uit met homeassistant entity","hass_player_source":"Benodigde bron op de verbonden homeassistant entity (optioneel)","hass_player_volume":"Verbind volume van speler aan een homeassistant entity","web_ssl_cert":"Pad naar ssl certificaat bestand","web_ssl_key":"Pad naar ssl certificaat key bestand","player_enabled":"Speler inschakelen","player_name":"Aangepaste naam voor deze speler","player_group_with":"Groupeer deze speler met een andere (hoofd)speler","player_mute_power":"Gebruik mute als aan/uit","player_disable_vol":"Schakel volume bediening helemaal uit","player_group_vol":"Pas groep volume toe op onderliggende spelers (alleen groep spelers)","player_group_pow":"Pas groep aan/uit toe op onderliggende spelers (alleen groep spelers)","player_power_play":"Automatisch afspelen bij inschakelen","file_prov_music_path":"Pad naar muziek bestanden","file_prov_playlists_path":"Pad naar playlist bestanden (.m3u)","web_http_port":"HTTP poort","web_https_port":"HTTPS poort","cert_fqdn_host":"Hostname (FQDN van certificaat)","enable_r128_volume_normalisation":"Schakel R128 volume normalisatie in","target_volume_lufs":"Doelvolume (R128 standaard is -23 LUFS)","fallback_gain_correct":"Fallback gain correctie indien R128 meting (nog) niet beschikbaar is","enable_audio_cache":"Sta het cachen van audio toe naar temp map","trim_silence":"Strip stilte van begin en eind van audio (in temp bestanden)","http_streamer_sox_effects":"Eigen sox effects toepassen op audio (alleen voor ingebouwde streamer). Zie http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximale sample rate welke deze speler ondersteund, hoger wordt gedownsampled.","force_http_streamer":"Forceer het gebruik van de ingebouwde streamer, ook al heeft de speler directe ondersteuning voor de muziek provider","not_grouped":"Niet gegroepeerd","conf_saved":"Configuratie is opgeslagen, herstart om actief te maken","audio_cache_folder":"Map om te gebruiken voor cache bestanden","audio_cache_max_size_gb":"Maximale grootte van de cache map in GB.","gapless_enabled":"Schakel ondersteuning voor gapless in.","crossfade_duration":"Crossfade (in seconden, 0 om uit te schakelen)."},"players":"Spelers","play":"Afspelen","play_on":"Afspelen op:","play_now":"Nu afspelen","play_next":"Speel als volgende af","add_queue":"Voeg toe aan wachtrij","show_info":"Bekijk informatie","queue_next_tracks":"Aankomend","queue_previous_tracks":"Reeds afgespeeld","read_more":"meer lezen","state":{"playing":"afspelen","stopped":"gestopt","paused":"gepauzeerd","off":"uitgeschakeld"}}')},bd18:function(e,t,r){e.exports=r.p+"img/squeezebox.60631223.png"},cf05:function(e,t,r){e.exports=r.p+"img/logo.c079bd97.png"},d3cc:function(e,t,r){"use strict";var i=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("v-list-item",{attrs:{ripple:""},on:{click:function(t){return e.$emit("click",e.item)}}},[e.hideavatar?e._e():i("v-list-item-avatar",{attrs:{tile:"",color:"grey"}},[i("img",{staticStyle:{border:"1px solid rgba(0,0,0,.22)"},attrs:{src:e.$server.getImageUrl(e.item,"image",80),"lazy-src":r("71db")}})]),i("v-list-item-content",[i("v-list-item-title",[e._v(" "+e._s(e.item.name)+" "),e.item.version?i("span",[e._v("("+e._s(e.item.version)+")")]):e._e()]),e.item.artists?i("v-list-item-subtitle",[e._l(e.item.artists,(function(t,r){return i("span",{key:t.item_id},[i("a",{on:{click:[function(r){return e.artistClick(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),r+1<e.item.artists.length?i("label",{key:r},[e._v("/")]):e._e()])})),e.item.album&&e.hidetracknum?i("a",{staticStyle:{color:"grey"},on:{click:[function(t){return e.albumClick(e.item.album)},function(e){e.stopPropagation()}]}},[e._v(" - "+e._s(e.item.album.name))]):e._e(),!e.hidetracknum&&e.item.track_number?i("label",{staticStyle:{color:"grey"}},[e._v("- disc "+e._s(e.item.disc_number)+" track "+e._s(e.item.track_number))]):e._e()],2):e._e(),e.item.artist?i("v-list-item-subtitle",[i("a",{on:{click:[function(t){return e.artistClick(e.item.artist)},function(e){e.stopPropagation()}]}},[e._v(e._s(e.item.artist.name))])]):e._e(),e.item.owner?i("v-list-item-subtitle",[e._v(e._s(e.item.owner))]):e._e()],1),e.hideproviders?e._e():i("v-list-item-action",[i("ProviderIcons",{attrs:{providerIds:e.item.provider_ids,height:20}})],1),e.isHiRes?i("v-list-item-action",[i("img",{attrs:{src:r("f5e3"),height:"20"}})]):e._e(),e.hidelibrary?e._e():i("v-list-item-action",[i("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("v-btn",e._g({attrs:{icon:"",ripple:""},on:{click:[function(t){return e.toggleLibrary(e.item)},function(e){e.stopPropagation()}]}},r),[e.item.in_library.length>0?i("v-icon",{attrs:{height:"20"}},[e._v("favorite")]):e._e(),0==e.item.in_library.length?i("v-icon",{attrs:{height:"20"}},[e._v("favorite_border")]):e._e()],1)]}}],null,!1,993341054)},[e.item.in_library.length>0?i("span",[e._v(e._s(e.$t("remove_library")))]):e._e(),0==e.item.in_library.length?i("span",[e._v(e._s(e.$t("add_library")))]):e._e()])],1),!e.hideduration&&e.item.duration?i("v-list-item-action",[e._v(e._s(e.item.duration.toString().formatDuration()))]):e._e(),e.hidemenu?e._e():i("v-icon",{staticStyle:{"margin-right":"-10px","padding-left":"10px"},attrs:{color:"grey lighten-1"},on:{click:[function(t){return e.$emit("menuClick",e.item)},function(e){e.stopPropagation()}]}},[e._v("more_vert")])],1),i("v-divider")],1)},a=[],n=(r("a4d3"),r("e01a"),r("d28b"),r("a9e3"),r("d3b7"),r("3ca3"),r("ddb0"),r("2b0e")),s=r("e00a"),o=n["a"].extend({components:{ProviderIcons:s["a"]},props:{item:Object,index:Number,totalitems:Number,hideavatar:Boolean,hidetracknum:Boolean,hideproviders:Boolean,hidemenu:Boolean,hidelibrary:Boolean,hideduration:Boolean},data:function(){return{}},computed:{isHiRes:function(){var e=!0,t=!1,r=void 0;try{for(var i,a=this.item.provider_ids[Symbol.iterator]();!(e=(i=a.next()).done);e=!0){var n=i.value;if(n.quality>6)return!0}}catch(s){t=!0,r=s}finally{try{e||null==a.return||a.return()}finally{if(t)throw r}}return!1}},mounted:function(){},methods:{artistClick:function(e){var t="/artists/"+e.item_id;this.$router.push({path:t,query:{provider:e.provider}})},albumClick:function(e){var t="/albums/"+e.item_id;this.$router.push({path:t,query:{provider:e.provider}})},toggleLibrary:function(e){this.$server.toggleLibrary(e)}}}),l=o,c=r("2877"),u=r("6544"),p=r.n(u),d=r("8336"),m=r("ce7e"),h=r("132d"),v=r("da13"),f=r("1800"),y=r("8270"),g=r("5d23"),A=r("3a2f"),b=Object(c["a"])(l,i,a,!1,null,null,null);t["a"]=b.exports;p()(b,{VBtn:d["a"],VDivider:m["a"],VIcon:h["a"],VListItem:v["a"],VListItemAction:f["a"],VListItemAvatar:y["a"],VListItemContent:g["a"],VListItemSubtitle:g["b"],VListItemTitle:g["c"],VTooltip:A["a"]})},e00a:function(e,t,r){"use strict";var i=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._l(e.uniqueProviders,(function(t){return i("img",{key:t.provider,staticStyle:{"margin-right":"6px","margin-top":"6px"},attrs:{height:e.height,src:r("9e01")("./"+t.provider+".png")}})})),0)},a=[],n=(r("4160"),r("c975"),r("a9e3"),r("159b"),r("2b0e")),s=n["a"].extend({props:{providerIds:Array,height:Number},data:function(){return{isHiRes:!1}},computed:{uniqueProviders:function(){var e=[],t=[];return this.providerIds?(this.providerIds.forEach((function(r){var i=r["provider"];-1===t.indexOf(i)&&(t.push(i),e.push(r))})),e):[]}},mounted:function(){},methods:{}}),o=s,l=r("2877"),c=Object(l["a"])(o,i,a,!1,null,null,null);t["a"]=c.exports},e428:function(e,t,r){e.exports=r.p+"img/tunein.ca1c1bb0.png"},edbf:function(e,t,r){e.exports=r.p+"img/web.798ba28f.png"},edd4:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artists","albums":"Albums","tracks":"Tracks","playlists":"Playlists","playlist_tracks":"Playlist tracks","radios":"Radio","search":"Search","settings":"Settings","queue":"Queue","artist_toptracks":"Top tracks","artist_albums":"Albums","album_tracks":"Album tracks","album_versions":"Versions","track_versions":"Versions","type_to_search":"Type here to search...","add_library":"Add to library","remove_library":"Remove from library","add_playlist":"Add to playlist...","remove_playlist":"Remove from playlist","no_player":"No player selected","reboot_required":"A reboot is required to activate the new settings!","conf":{"enabled":"Enabled","base":"Generic settings","musicproviders":"Music providers","playerproviders":"Player providers","player_settings":"Player settings","homeassistant":"Home Assistant integration","web":"Webserver","http_streamer":"Built-in (sox based) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Filesystem","chromecast":"Chromecast","squeezebox":"Squeezebox support","sonos":"Sonos","webplayer":"Web Player (Chrome browser only)","username":"Username","password":"Password","hostname":"Hostname (or IP)","port":"Port","hass_url":"URL to homeassistant (e.g. https://homeassistant:8123)","hass_token":"Long Lived Access Token","hass_publish":"Publish players to Home Assistant","hass_player_power":"Attach player power to homeassistant entity","hass_player_source":"Source on the homeassistant entity (optional)","hass_player_volume":"Attach player volume to homeassistant entity","web_ssl_cert":"Path to ssl certificate file","web_ssl_key":"Path to ssl keyfile","player_enabled":"Enable player","player_name":"Custom name for this player","player_group_with":"Group this player to another (parent)player","player_mute_power":"Use muting as power control","player_disable_vol":"Disable volume controls","player_group_vol":"Apply group volume to childs (for group players only)","player_group_pow":"Apply group power based on childs (for group players only)","player_power_play":"Issue play command on power on","file_prov_music_path":"Path to music files","file_prov_playlists_path":"Path to playlists (.m3u)","web_http_port":"HTTP port","web_https_port":"HTTPS port","cert_fqdn_host":"FQDN of hostname in certificate","enable_r128_volume_normalisation":"Enable R128 volume normalization","target_volume_lufs":"Target volume (R128 default is -23 LUFS)","fallback_gain_correct":"Fallback gain correction if R128 readings not (yet) available","enable_audio_cache":"Allow caching of audio to temp files","trim_silence":"Strip silence from beginning and end of audio (temp files only!)","http_streamer_sox_effects":"Custom sox effects to apply to audio (built-in streamer only!) See http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximum sample rate this player supports, higher will be downsampled","force_http_streamer":"Force use of built-in streamer, even if the player can handle the music provider directly","not_grouped":"Not grouped","conf_saved":"Configuration saved, restart app to make effective","audio_cache_folder":"Directory to use for cache files","audio_cache_max_size_gb":"Maximum size of the cache folder (GB)","gapless_enabled":"Enable gapless support","crossfade_duration":"Crossfade duration (in seconds, 0 to disable)"},"players":"Players","play":"Play","play_on":"Play on:","play_now":"Play Now","play_next":"Play Next","add_queue":"Add to Queue","show_info":"Show info","queue_next_tracks":"Next tracks","queue_previous_tracks":"Played tracks","read_more":"read more","state":{"playing":"playing","stopped":"stopped","paused":"paused","off":"off"}}')},f1d4:function(e,t){e.exports="data:image/png;base64,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"},f5e3:function(e,t,r){e.exports=r.p+"img/hires.e97b001e.png"},fb30:function(e,t){e.exports="data:image/png;base64,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"}});
+//# sourceMappingURL=app.164646f9.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/app.164646f9.js.map b/music_assistant/web/js/app.164646f9.js.map
new file mode 100644 (file)
index 0000000..bc65bbe
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/qobuz.png","webpack:///./src/assets/spotify.png","webpack:///./src/assets/http_streamer.png","webpack:///./src/assets/homeassistant.png","webpack:///./src/assets/webplayer.png","webpack:///./src/locales sync [A-Za-z0-9-_,\\s]+\\.json$/","webpack:///./src/assets/default_artist.png","webpack:///./src/App.vue?bb07","webpack:///./src/components/NavigationMenu.vue?94cd","webpack:///src/components/NavigationMenu.vue","webpack:///./src/components/NavigationMenu.vue?f679","webpack:///./src/components/NavigationMenu.vue","webpack:///./src/components/TopBar.vue?0fbf","webpack:///src/components/TopBar.vue","webpack:///./src/components/TopBar.vue?8cdd","webpack:///./src/components/TopBar.vue","webpack:///./src/components/ContextMenu.vue?e0cb","webpack:///src/components/ContextMenu.vue","webpack:///./src/components/ContextMenu.vue?03fa","webpack:///./src/components/ContextMenu.vue","webpack:///./src/components/PlayerOSD.vue?e1d6","webpack:///./src/components/VolumeControl.vue?8ac7","webpack:///src/components/VolumeControl.vue","webpack:///./src/components/VolumeControl.vue?0e80","webpack:///./src/components/VolumeControl.vue","webpack:///src/components/PlayerOSD.vue","webpack:///./src/components/PlayerOSD.vue?1917","webpack:///./src/components/PlayerOSD.vue?3e15","webpack:///./src/components/PlayerSelect.vue?41c3","webpack:///src/components/PlayerSelect.vue","webpack:///./src/components/PlayerSelect.vue?ed4c","webpack:///./src/components/PlayerSelect.vue?2bb5","webpack:///src/App.vue","webpack:///./src/App.vue?0bd2","webpack:///./src/App.vue","webpack:///./src/registerServiceWorker.js","webpack:///./src/views/Home.vue?d9f1","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?f351","webpack:///./src/views/Home.vue","webpack:///./src/views/Browse.vue?4aa8","webpack:///src/views/Browse.vue","webpack:///./src/views/Browse.vue?0b2d","webpack:///./src/views/Browse.vue","webpack:///./src/router/index.js","webpack:///./src/i18n.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/plugins/store.js","webpack:///./src/plugins/server.js","webpack:///./src/main.js","webpack:///./src/assets/chromecast.png","webpack:///./src/components/PlayerSelect.vue?1de5","webpack:///./src/assets/file.png","webpack:///./src/components/PlayerOSD.vue?6f88","webpack:///./src/assets/sonos.png","webpack:///./src/assets/vorbis.png","webpack:///./src/assets/aac.png","webpack:///./src/assets sync ^\\.\\/.*\\.png$","webpack:///./src/assets/squeezebox.png","webpack:///./src/assets/logo.png","webpack:///./src/components/ListviewItem.vue?38ac","webpack:///src/components/ListviewItem.vue","webpack:///./src/components/ListviewItem.vue?6ea0","webpack:///./src/components/ListviewItem.vue","webpack:///./src/components/ProviderIcons.vue?b316","webpack:///src/components/ProviderIcons.vue","webpack:///./src/components/ProviderIcons.vue?97c3","webpack:///./src/components/ProviderIcons.vue","webpack:///./src/assets/tunein.png","webpack:///./src/assets/web.png","webpack:///./src/assets/mp3.png","webpack:///./src/assets/hires.png","webpack:///./src/assets/flac.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","jsonpArray","window","oldJsonpFunction","slice","map","webpackContext","req","id","webpackContextResolve","keys","_vm","this","_h","$createElement","_c","_self","attrs","$route","path","showPlayerSelect","$store","loading","staticRenderFns","model","callback","$$v","$set","expression","_l","item","title","on","$event","$router","_v","_s","icon","showNavigationMenu","props","items","mounted","methods","component","VBtn","VIcon","VList","VListItem","VListItemAction","VListItemContent","VListItemTitle","VNavigationDrawer","topBarColor","staticClass","staticStyle","windowtitle","_e","go","$server","$emit","String","default","Boolean","VAppBar","VLayout","VSpacer","VToolbarTitle","VToolbar","visible","playlists","header","subheader","label","itemCommand","action","$t","index","item_id","playlistSelected","components","ListviewItem","watch","menuItems","curItem","curPlaylist","mediaPlayItems","showTrackInfoItem","addToPlaylistItem","removeFromPlaylistItem","playerQueueItems","created","$on","showContextMenu","showPlayMenu","beforeDestroy","$off","computed","playlist","media_type","is_editable","cmd","query","showPlaylistsMenu","playlistAddRemove","playItem","url","$axios","VCard","VDialog","VDivider","VListItemAvatar","VSubheader","getImageUrl","curQueueItem","activePlayer","artist","artistindex","artistClick","stopPropagation","artists","playerCurTimeStr","playerTotalTimeStr","style","progressBarWidth","progress","playerCommand","state","isMobile","nativeOn","preventDefault","scopedSlots","_u","fn","ref","_g","Math","round","volume_level","players","player_id","is_group","child_id","powered","togglePlayerPower","disable_volume","setPlayerVolume","volumePlayerIds","allIds","playerId","newVolume","VListItemSubtitle","VSlider","VolumeControl","curQueueItemId","val","getData","endpoint","cur_queue_item","totalSecs","duration","curSecs","cur_time","curPercent","toString","formatDuration","innerWidth","cmd_opt","activePlayerId","VFlex","VFooter","VMenu","VProgressLinear","switchPlayer","filteredPlayerIds","show","getAvailablePlayers","enabled","group_parents","VCardTitle","NavigationMenu","TopBar","ContextMenu","PlayerOSD","PlayerSelect","serverAddress","loc","origin","pathname","connect","VApp","VContent","VOverlay","VProgressCircular","register","process","ready","registered","cached","updatefound","updated","offline","domProps","VListItemIcon","itemClicked","menuClick","mediatype","provider","selected","getItems","Vue","use","VueRouter","routes","Home","route","params","Browse","router","loadLocaleMessages","locales","require","messages","forEach","matched","match","locale","VueI18n","navigator","language","split","fallbackLocale","Vuetify","icons","iconfont","globalStore","isInStandaloneMode","handleWindowOptions","addEventListener","destroyed","removeEventListener","body","clientWidth","standalone","install","options","axiosConfig","_axios","axios","server","_address","_ws","connected","endsWith","wsAddress","replace","WebSocket","onopen","_onWsConnect","onmessage","_onWsMessage","onclose","_onWsClose","_onWsError","toggleLibrary","in_library","mediaItem","imageType","size","postData","post","msgDetails","cmd_args","send","JSON","stringify","message_details","queueOpt","newPlayerId","localStorage","setItem","msg","parse","set","_selectActivePlayer","delete","close","lastPlayerId","getItem","config","productionTip","VueVirtualScroller","store","secNum","parseInt","hours","floor","minutes","seconds","i18n","vuetify","render","h","App","$mount","hideavatar","version","album","hidetracknum","albumClick","track_number","disc_number","owner","hideproviders","provider_ids","hidelibrary","hideduration","hidemenu","ProviderIcons","Number","totalitems","isHiRes","VTooltip","prov","height","providerIds","Array","uniqueProviders","output","indexOf"],"mappings":"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","file":"js/app.164646f9.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"config~search\":\"config~search\",\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"search\":\"search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\"}[chunkId]||chunkId) + \".\" + {\"config~search\":\"9f3e890b\",\"config\":\"3af84ca2\",\"itemdetails~playerqueue~search\":\"1e2b2bfd\",\"search\":\"56af5cc1\",\"itemdetails\":\"5c314dae\",\"playerqueue\":\"5fa460a7\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"config~search\":1,\"config\":1,\"itemdetails~playerqueue~search\":1,\"itemdetails\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"config~search\":\"config~search\",\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"search\":\"search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\"}[chunkId]||chunkId) + \".\" + {\"config~search\":\"af60f7e1\",\"config\":\"18def958\",\"itemdetails~playerqueue~search\":\"93e2919b\",\"search\":\"31d6cfe0\",\"itemdetails\":\"bd2e4eb1\",\"playerqueue\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","module.exports = __webpack_public_path__ + \"img/qobuz.c7eb9a76.png\";","module.exports = __webpack_public_path__ + \"img/spotify.1f3fb1af.png\";","module.exports = __webpack_public_path__ + \"img/http_streamer.4c4e4880.png\";","module.exports = __webpack_public_path__ + \"img/homeassistant.29fe3282.png\";","module.exports = __webpack_public_path__ + \"img/webplayer.8e1a0da9.png\";","var map = {\n\t\"./en.json\": \"edd4\",\n\t\"./nl.json\": \"a625\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"49f8\";","module.exports = __webpack_public_path__ + \"img/default_artist.7305b29c.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{attrs:{\"light\":\"\"}},[_c('TopBar'),_c('NavigationMenu'),_c('v-content',[_c('router-view',{key:_vm.$route.path,attrs:{\"app\":\"\"}})],1),_c('PlayerOSD',{attrs:{\"showPlayerSelect\":_vm.showPlayerSelect}}),_c('ContextMenu'),_c('PlayerSelect'),_c('v-overlay',{attrs:{\"value\":_vm.$store.loading}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"size\":\"64\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"dark\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\"},model:{value:(_vm.$store.showNavigationMenu),callback:function ($$v) {_vm.$set(_vm.$store, \"showNavigationMenu\", $$v)},expression:\"$store.showNavigationMenu\"}},[_c('v-list',[_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)],1)}),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-navigation-drawer dark app clipped temporary v-model=\"$store.showNavigationMenu\">\n    <v-list>\n      <v-list-item v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n        <v-list-item-action>\n          <v-icon>{{ item.icon }}</v-icon>\n        </v-list-item-action>\n        <v-list-item-content>\n          <v-list-item-title>{{ item.title }}</v-list-item-title>\n        </v-list-item-content>\n      </v-list-item>\n      <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" />\n    </v-list>\n  </v-navigation-drawer>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n  props: {},\n  data () {\n    return {\n      items: [\n        { title: this.$t('home'), icon: 'home', path: '/' },\n        { title: this.$t('artists'), icon: 'person', path: '/artists' },\n        { title: this.$t('albums'), icon: 'album', path: '/albums' },\n        { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n        { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n        { title: this.$t('radios'), icon: 'radio', path: '/radios' },\n        { title: this.$t('search'), icon: 'search', path: '/search' },\n        { title: this.$t('settings'), icon: 'settings', path: '/config' }\n      ]\n    }\n  },\n  mounted () { },\n  methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavigationMenu.vue?vue&type=template&id=5fe9f182&\"\nimport script from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VIcon,VList,VListItem,VListItemAction,VListItemContent,VListItemTitle,VNavigationDrawer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app-bar',{attrs:{\"app\":\"\",\"scroll-off-screen\":\"\",\"flat\":\"\",\"dense\":\"\",\"dark\":\"\",\"color\":_vm.$store.topBarColor}},[_c('v-layout',[(_vm.$store.topBarColor != 'transparent')?_c('v-toolbar-title',{staticClass:\"body-1\",staticStyle:{\"position\":\"fixed\",\"width\":\"100%\",\"text-align\":\"center\",\"vertical-align\":\"center\",\"margin-top\":\"11px\"}},[_vm._v(_vm._s(_vm.$store.windowtitle))]):_vm._e(),_c('v-btn',{staticStyle:{\"margin-left\":\"-13px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}},[_c('v-icon',[_vm._v(\"menu\")])],1),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}},[_c('v-icon',[_vm._v(\"arrow_back\")])],1),_c('v-spacer'),_c('v-btn',{staticStyle:{\"margin-right\":\"-23px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showContextMenu')}}},[_c('v-icon',[_vm._v(\"more_vert\")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-app-bar app scroll-off-screen flat dense dark :color=\"$store.topBarColor\">\n    <v-layout>\n      <v-toolbar-title class=\"body-1\" v-if=\"$store.topBarColor != 'transparent'\" style=\"position:fixed;width:100%;text-align:center;vertical-align:center;margin-top:11px;\">{{ $store.windowtitle }}</v-toolbar-title>\n      <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" style=\"margin-left:-13px\">\n        <v-icon>menu</v-icon>\n      </v-btn>\n      <v-btn @click=\"$router.go(-1)\" icon>\n        <v-icon>arrow_back</v-icon>\n      </v-btn>\n      <v-spacer></v-spacer>\n      <v-btn icon @click=\"$server.$emit('showContextMenu')\" style=\"margin-right:-23px\">\n        <v-icon>more_vert</v-icon>\n      </v-btn>\n    </v-layout>\n  </v-app-bar>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n  props: {\n    'color': {\n      type: String,\n      default: '#424242'\n    },\n    'fixed': {\n      type: Boolean,\n      default: true\n    },\n    'context': {\n      type: Object,\n      default: null\n    }\n  },\n  data () {\n    return {\n    }\n  },\n  mounted () { },\n  methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=0825a588&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VAppBar,VBtn,VIcon,VLayout,VSpacer,VToolbarTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"max-width\":\"500px\"},on:{\"input\":function($event){return _vm.$emit('input', $event)}},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card',[(_vm.playlists.length === 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),(_vm.subheader)?_c('v-subheader',[_vm._v(_vm._s(_vm.subheader))]):_vm._e(),_vm._l((_vm.menuItems),function(item){return _c('div',{key:item.label},[_c('v-list-item',{on:{\"click\":function($event){return _vm.itemCommand(item.action)}}},[_c('v-list-item-avatar',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(item.label)))])],1)],1),_c('v-divider')],1)})],2):_vm._e(),(_vm.playlists.length > 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),_vm._l((_vm.playlists),function(item,index){return _c('listviewItem',{key:item.item_id,attrs:{\"item\":item,\"totalitems\":_vm.playlists.length,\"index\":index,\"hideavatar\":false,\"hidetracknum\":true,\"hideproviders\":false,\"hidelibrary\":true,\"hidemenu\":true},on:{\"click\":_vm.playlistSelected}})})],2):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <v-dialog v-model=\"visible\" @input=\"$emit('input', $event)\" max-width=\"500px\">\r\n    <v-card>\r\n      <!-- normal contextmenu items -->\r\n      <v-list v-if=\"playlists.length === 0\">\r\n        <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n        <v-subheader v-if=\"subheader\">{{ subheader }}</v-subheader>\r\n        <div v-for=\"item of menuItems\" :key=\"item.label\">\r\n          <v-list-item @click=\"itemCommand(item.action)\">\r\n            <v-list-item-avatar>\r\n              <v-icon>{{item.icon}}</v-icon>\r\n            </v-list-item-avatar>\r\n            <v-list-item-content>\r\n              <v-list-item-title>{{ $t(item.label) }}</v-list-item-title>\r\n            </v-list-item-content>\r\n          </v-list-item>\r\n          <v-divider></v-divider>\r\n        </div>\r\n      </v-list>\r\n      <!-- playlists selection -->\r\n      <v-list v-if=\"playlists.length > 0\">\r\n        <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n        <listviewItem\r\n          v-for=\"(item, index) in playlists\"\r\n          :key=\"item.item_id\"\r\n          v-bind:item=\"item\"\r\n          v-bind:totalitems=\"playlists.length\"\r\n          v-bind:index=\"index\"\r\n          :hideavatar=\"false\"\r\n          :hidetracknum=\"true\"\r\n          :hideproviders=\"false\"\r\n          :hidelibrary=\"true\"\r\n          :hidemenu=\"true\"\r\n          @click=\"playlistSelected\"\r\n        ></listviewItem>\r\n      </v-list>\r\n    </v-card>\r\n  </v-dialog>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ListviewItem from '@/components/ListviewItem.vue'\r\n\r\nexport default Vue.extend({\r\n  components:\r\n  {\r\n    ListviewItem\r\n  },\r\n  props:\r\n    {},\r\n  watch:\r\n    {},\r\n  data () {\r\n    return {\r\n      visible: false,\r\n      menuItems: [],\r\n      header: '',\r\n      subheader: '',\r\n      curItem: null,\r\n      curPlaylist: null,\r\n      mediaPlayItems: [\r\n        {\r\n          label: 'play_now',\r\n          action: 'play',\r\n          icon: 'play_circle_outline'\r\n        },\r\n        {\r\n          label: 'play_next',\r\n          action: 'next',\r\n          icon: 'queue_play_next'\r\n        },\r\n        {\r\n          label: 'add_queue',\r\n          action: 'add',\r\n          icon: 'playlist_add'\r\n        }\r\n      ],\r\n      showTrackInfoItem: {\r\n        label: 'show_info',\r\n        action: 'info',\r\n        icon: 'info'\r\n      },\r\n      addToPlaylistItem: {\r\n        label: 'add_playlist',\r\n        action: 'add_playlist',\r\n        icon: 'add_circle_outline'\r\n      },\r\n      removeFromPlaylistItem: {\r\n        label: 'remove_playlist',\r\n        action: 'remove_playlist',\r\n        icon: 'remove_circle_outline'\r\n      },\r\n      playerQueueItems: [],\r\n      playlists: []\r\n    }\r\n  },\r\n  mounted () { },\r\n  created () {\r\n    this.$server.$on('showContextMenu', this.showContextMenu)\r\n    this.$server.$on('showPlayMenu', this.showPlayMenu)\r\n  },\r\n  beforeDestroy () {\r\n    this.$server.$off('showContextMenu')\r\n    this.$server.$off('showPlayMenu')\r\n  },\r\n  computed: {\r\n  },\r\n  methods: {\r\n    showContextMenu (item, playlist = null) {\r\n      this.curItem = item\r\n      this.curPlaylist = playlist\r\n      if (!item) return\r\n      if (item.media_type === 3) {\r\n        // track item in list\r\n        let items = []\r\n        items.push(...this.mediaPlayItems)\r\n        items.push(this.showTrackInfoItem)\r\n        items.push(this.addToPlaylistItem)\r\n        if (!!playlist && playlist.is_editable) {\r\n          items.push(this.removeFromPlaylistItem)\r\n        }\r\n        this.menuItems = items\r\n      } else {\r\n        // all other playable media\r\n        this.menuItems = this.mediaPlayItems\r\n      }\r\n      this.header = item.name\r\n      this.subheader = ''\r\n      this.visible = true\r\n    },\r\n    showPlayMenu (item) {\r\n      this.curItem = item\r\n      if (!item) return\r\n      this.menuItems = this.mediaPlayItems\r\n      this.header = item.name\r\n      this.subheader = ''\r\n      this.visible = true\r\n    },\r\n    itemCommand (cmd) {\r\n      if (cmd === 'info') {\r\n        // show track info\r\n        this.$router.push({\r\n          path: '/tracks/' + this.curItem.item_id,\r\n          query: { provider: this.curItem.provider }\r\n        })\r\n        this.visible = false\r\n      } else if (cmd === 'add_playlist') {\r\n        // add to playlist\r\n        return this.showPlaylistsMenu()\r\n      } else if (cmd === 'remove_playlist') {\r\n        // remove track from playlist\r\n        this.playlistAddRemove(\r\n          this.curItem,\r\n          this.curPlaylist.item_id,\r\n          'playlist_remove'\r\n        )\r\n        this.visible = false\r\n      } else {\r\n        // assume play command\r\n        this.$server.playItem(this.curItem, cmd)\r\n        this.visible = false\r\n      }\r\n    },\r\n    playlistSelected (playlistobj) {\r\n      this.playlistAddRemove(\r\n        this.curItem,\r\n        playlistobj,\r\n        'playlist_add'\r\n      )\r\n      this.visible = false\r\n    },\r\n    playlistAddRemove (track, playlist, action = 'playlist_add') {\r\n      /// add or remove track on playlist\r\n      var url = `${this.$store.server}api/track/${track.item_id}`\r\n      this.$axios\r\n        .get(url, {\r\n          params: {\r\n            provider: track.provider,\r\n            action: action,\r\n            action_details: playlist.item_id\r\n          }\r\n        })\r\n        .then(result => {\r\n          // reload listing\r\n          if (action === 'playlist_remove') this.$router.go()\r\n        })\r\n    },\r\n    async showPlaylistsMenu () {\r\n      // get all editable playlists\r\n      const url = this.$store.apiAddress + 'playlists'\r\n      let trackProviders = []\r\n      for (let item of this.curItem.provider_ids) {\r\n        trackProviders.push(item.provider)\r\n      }\r\n      let result = await this.$axios.get(url, {})\r\n      let items = []\r\n      for (var playlist of result.data) {\r\n        if (\r\n          playlist.is_editable &&\r\n          playlist.item_id !== this.curPlaylist.item_id\r\n        ) {\r\n          for (let item of playlist.provider_ids) {\r\n            if (trackProviders.includes(item.provider)) {\r\n              items.push(playlist)\r\n              break\r\n            }\r\n          }\r\n        }\r\n      }\r\n      this.playlists = items\r\n    }\r\n  }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContextMenu.vue?vue&type=template&id=05efa336&\"\nimport script from \"./ContextMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContextMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VCard,VDialog,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemTitle,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-footer',{staticStyle:{\"background-color\":\"#424242\"},attrs:{\"app\":\"\",\"fixed\":\"\",\"padless\":\"\",\"light\":\"\",\"elevation\":\"10\"}},[_c('v-card',{staticStyle:{\"margin-top\":\"1px\"},attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"#E0E0E0\"}},[_c('v-list-item',{attrs:{\"two-line\":\"\"}},[(_vm.curQueueItem)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.54)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.curQueueItem),\"lazy-src\":require('../assets/file.png')}})]):_c('v-list-item-avatar',[_c('v-icon',[_vm._v(\"speaker\")])],1),_c('v-list-item-content',[(_vm.curQueueItem)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.curQueueItem.name))]):(_vm.$server.activePlayer)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.$server.activePlayer.name))]):_vm._e(),(_vm.curQueueItem)?_c('v-list-item-subtitle',{staticStyle:{\"color\":\"primary\"}},_vm._l((_vm.curQueueItem.artists),function(artist,artistindex){return _c('span',{key:artistindex},[_c('a',{on:{\"click\":[function($event){return _vm.artistClick(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.curQueueItem.artists.length)?_c('label',{key:artistindex},[_vm._v(\" / \")]):_vm._e()])}),0):_vm._e()],1)],1),_c('div',{staticClass:\"body-2\",staticStyle:{\"height\":\"30px\",\"width\":\"100%\",\"color\":\"rgba(0,0,0,.65)\",\"margin-top\":\"-12px\",\"background-color\":\"#E0E0E0\"},attrs:{\"align\":\"center\"}},[(_vm.curQueueItem)?_c('div',{staticStyle:{\"height\":\"12px\",\"margin-left\":\"22px\",\"margin-right\":\"20px\",\"margin-top\":\"2px\"}},[_c('span',{staticClass:\"left\"},[_vm._v(\" \"+_vm._s(_vm.playerCurTimeStr)+\" \")]),_c('span',{staticClass:\"right\"},[_vm._v(\" \"+_vm._s(_vm.playerTotalTimeStr)+\" \")])]):_vm._e()]),(_vm.curQueueItem)?_c('v-progress-linear',{style:('margin-top:-22px;margin-left:80px;width:' + _vm.progressBarWidth + 'px;'),attrs:{\"fixed\":\"\",\"light\":\"\",\"value\":_vm.progress}}):_vm._e()],1),_c('v-list-item',{staticStyle:{\"height\":\"44px\",\"margin-bottom\":\"5px\",\"margin-top\":\"-4px\",\"background-color\":\"#424242\"},attrs:{\"dark\":\"\",\"dense\":\"\"}},[(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('previous')}}},[_c('v-icon',[_vm._v(\"skip_previous\")])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-left\":\"-32px\",\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"x-large\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('play_pause')}}},[_c('v-icon',{attrs:{\"size\":\"50\"}},[_vm._v(_vm._s(_vm.$server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"))])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('next')}}},[_c('v-icon',[_vm._v(\"skip_next\")])],1)],1):_vm._e(),_c('v-list-item-content'),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"padding\":\"28px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/playerqueue/')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"queue_music\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(_vm.$t(\"queue\")))])],1)],1)],1):_vm._e(),(_vm.$server.activePlayer && !_vm.$store.isMobile)?_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":250,\"offset-x\":\"\",\"top\":\"\"},nativeOn:{\"click\":function($event){$event.preventDefault();}},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.activePlayer.volume_level)))])],1)],1)]}}],null,false,1951340450)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":_vm.$server.activePlayer.player_id}})],1)],1):_vm._e(),_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\",\"margin-right\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayersMenu')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"speaker\")]),(_vm.$server.activePlayer)?_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(_vm.$server.activePlayer.name))]):_c('span',{staticClass:\"overline\"})],1)],1)],1)],1),(_vm.$store.isInStandaloneMode)?_c('div',{staticStyle:{\"height\":\"14px\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-list',[_c('v-list-item',{staticStyle:{\"height\":\"50px\",\"padding-bottom\":\"5\"}},[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-10px\"},attrs:{\"tile\":\"\"}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(_vm._s(_vm.players[_vm.player_id].is_group ? \"speaker_group\" : \"speaker\"))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',[_vm._v(_vm._s(_vm.players[_vm.player_id].name))]),_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.$t(\"state.\" + _vm.players[_vm.player_id].state)))])],1)],1),_c('v-divider'),_vm._l((_vm.volumePlayerIds),function(child_id){return _c('div',{key:child_id},[_c('div',{staticClass:\"body-2\",style:(!_vm.players[child_id].powered\n          ? 'color:rgba(0,0,0,.38);'\n          : 'color:rgba(0,0,0,.54);')},[_c('v-btn',{staticStyle:{\"margin-left\":\"8px\"},style:(!_vm.players[child_id].powered\n            ? 'color:rgba(0,0,0,.38);'\n            : 'color:rgba(0,0,0,.54);'),attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.togglePlayerPower(child_id)}}},[_c('v-icon',[_vm._v(\"power_settings_new\")])],1),_c('span',{staticStyle:{\"margin-left\":\"10px\"}},[_vm._v(_vm._s(_vm.players[child_id].name))]),_c('div',{staticStyle:{\"margin-top\":\"-8px\",\"margin-left\":\"15px\",\"margin-right\":\"15px\",\"height\":\"35px\"}},[(!_vm.players[child_id].disable_volume)?_c('v-slider',{attrs:{\"lazy\":\"\",\"disabled\":!_vm.players[child_id].powered,\"value\":Math.round(_vm.players[child_id].volume_level),\"prepend-icon\":\"volume_down\",\"append-icon\":\"volume_up\"},on:{\"end\":function($event){return _vm.setPlayerVolume(child_id, $event)},\"click:append\":function($event){return _vm.setPlayerVolume(child_id, 'up')},\"click:prepend\":function($event){return _vm.setPlayerVolume(child_id, 'down')}}}):_vm._e()],1)],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-card>\n    <v-list>\n    <v-list-item style=\"height:50px;padding-bottom:5;\">\n      <v-list-item-avatar tile style=\"margin-left:-10px;\">\n        <v-icon large>{{\n          players[player_id].is_group ? \"speaker_group\" : \"speaker\"\n        }}</v-icon>\n      </v-list-item-avatar>\n      <v-list-item-content style=\"margin-left:-15px;\">\n        <v-list-item-title>{{ players[player_id].name }}</v-list-item-title>\n        <v-list-item-subtitle>{{\n          $t(\"state.\" + players[player_id].state)\n        }}</v-list-item-subtitle>\n      </v-list-item-content>\n    </v-list-item>\n    <v-divider></v-divider>\n    <div v-for=\"child_id in volumePlayerIds\" :key=\"child_id\">\n      <div\n        class=\"body-2\"\n        :style=\"\n          !players[child_id].powered\n            ? 'color:rgba(0,0,0,.38);'\n            : 'color:rgba(0,0,0,.54);'\n        \"\n      >\n        <v-btn\n          icon\n          @click=\"togglePlayerPower(child_id)\"\n          style=\"margin-left:8px\"\n          :style=\"\n            !players[child_id].powered\n              ? 'color:rgba(0,0,0,.38);'\n              : 'color:rgba(0,0,0,.54);'\n          \"\n        >\n          <v-icon>power_settings_new</v-icon>\n        </v-btn>\n        <span style=\"margin-left:10px\">{{ players[child_id].name }}</span>\n        <div\n          style=\"margin-top:-8px;margin-left:15px;margin-right:15px;height:35px;\"\n        >\n          <v-slider\n            lazy\n            :disabled=\"!players[child_id].powered\"\n            v-if=\"!players[child_id].disable_volume\"\n            :value=\"Math.round(players[child_id].volume_level)\"\n            prepend-icon=\"volume_down\"\n            append-icon=\"volume_up\"\n            @end=\"setPlayerVolume(child_id, $event)\"\n            @click:append=\"setPlayerVolume(child_id, 'up')\"\n            @click:prepend=\"setPlayerVolume(child_id, 'down')\"\n          ></v-slider>\n        </div>\n      </div>\n      <v-divider></v-divider>\n    </div>\n    </v-list>\n  </v-card>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n  props: ['value', 'players', 'player_id'],\n  data () {\n    return {}\n  },\n  computed: {\n    volumePlayerIds () {\n      var allIds = [this.player_id]\n      allIds.push(...this.players[this.player_id].group_childs)\n      return allIds\n    }\n  },\n  mounted () { },\n  methods: {\n    setPlayerVolume: function (playerId, newVolume) {\n      this.players[playerId].volume_level = newVolume\n      if (newVolume === 'up') {\n        this.$server.playerCommand('volume_up', null, playerId)\n      } else if (newVolume === 'down') {\n        this.$server.playerCommand('volume_down', null, playerId)\n      } else {\n        this.$server.playerCommand('volume_set', newVolume, playerId)\n      }\n    },\n    togglePlayerPower: function (playerId) {\n      this.$server.playerCommand('power_toggle', null, playerId)\n    }\n  }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VolumeControl.vue?vue&type=template&id=65f7b2c2&\"\nimport script from \"./VolumeControl.vue?vue&type=script&lang=js&\"\nexport * from \"./VolumeControl.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\ninstallComponents(component, {VBtn,VCard,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VSlider})\n","<template>\n  <v-footer\n    app\n    fixed\n    padless\n    light\n    elevation=\"10\"\n    style=\"background-color: #424242\"\n  >\n    <v-card\n      dense\n      flat\n      light\n      subheader\n      tile\n      width=\"100%\"\n      color=\"#E0E0E0\"\n      style=\"margin-top:1px;\"\n    >\n      <!-- now playing media -->\n      <v-list-item two-line>\n        <v-list-item-avatar tile v-if=\"curQueueItem\">\n          <img\n            :src=\"$server.getImageUrl(curQueueItem)\"\n            :lazy-src=\"require('../assets/file.png')\"\n            style=\"border: 1px solid rgba(0,0,0,.54);\"\n          />\n        </v-list-item-avatar>\n        <v-list-item-avatar v-else>\n          <v-icon>speaker</v-icon>\n        </v-list-item-avatar>\n\n        <v-list-item-content>\n          <v-list-item-title v-if=\"curQueueItem\">\n            {{ curQueueItem.name }}</v-list-item-title\n          >\n          <v-list-item-title v-else-if=\"$server.activePlayer\">\n            {{ $server.activePlayer.name }}</v-list-item-title\n          >\n          <v-list-item-subtitle v-if=\"curQueueItem\" style=\"color: primary\">\n            <span\n              v-for=\"(artist, artistindex) in curQueueItem.artists\"\n              :key=\"artistindex\"\n            >\n              <a v-on:click=\"artistClick(artist)\" @click.stop=\"\">{{\n                artist.name\n              }}</a>\n              <label\n                v-if=\"artistindex + 1 < curQueueItem.artists.length\"\n                :key=\"artistindex\"\n              >\n                /\n              </label>\n            </span>\n          </v-list-item-subtitle>\n        </v-list-item-content>\n      </v-list-item>\n\n      <!-- progress bar -->\n      <div\n        class=\"body-2\"\n        style=\"height:30px;width:100%;color:rgba(0,0,0,.65);margin-top:-12px;background-color:#E0E0E0;\"\n        align=\"center\"\n      >\n        <div\n          style=\"height:12px;margin-left:22px;margin-right:20px;margin-top:2px;\"\n          v-if=\"curQueueItem\"\n        >\n          <span class=\"left\">\n            {{ playerCurTimeStr }}\n          </span>\n          <span class=\"right\">\n            {{ playerTotalTimeStr }}\n          </span>\n        </div>\n      </div>\n      <v-progress-linear\n        fixed\n        light\n        :value=\"progress\"\n        v-if=\"curQueueItem\"\n        :style=\"\n          'margin-top:-22px;margin-left:80px;width:' + progressBarWidth + 'px;'\n        \"\n      />\n    </v-card>\n\n      <!-- Control buttons -->\n      <v-list-item\n        dark\n        dense\n        style=\"height:44px;margin-bottom:5px;margin-top:-4px;background-color:#424242;\"\n      >\n        <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n          <v-btn small icon @click=\"playerCommand('previous')\">\n            <v-icon>skip_previous</v-icon>\n          </v-btn>\n        </v-list-item-action>\n        <v-list-item-action\n          v-if=\"$server.activePlayer\"\n          style=\"margin-left:-32px;margin-top:15px\"\n        >\n          <v-btn icon x-large @click=\"playerCommand('play_pause')\">\n            <v-icon size=\"50\">{{\n              $server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"\n            }}</v-icon>\n          </v-btn>\n        </v-list-item-action>\n        <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n          <v-btn icon small @click=\"playerCommand('next')\">\n            <v-icon>skip_next</v-icon>\n          </v-btn>\n        </v-list-item-action>\n        <!-- player controls -->\n        <v-list-item-content> </v-list-item-content>\n\n        <!-- active player queue button -->\n        <v-list-item-action style=\"padding:28px;\" v-if=\"$server.activePlayer\">\n          <v-btn\n            small\n            text\n            icon\n            @click=\"$router.push('/playerqueue/')\"\n          >\n            <v-flex xs12 class=\"vertical-btn\">\n              <v-icon>queue_music</v-icon>\n              <span class=\"overline\">{{ $t(\"queue\") }}</span>\n            </v-flex>\n          </v-btn>\n        </v-list-item-action>\n\n        <!-- active player volume -->\n        <v-list-item-action style=\"padding:20px;\" v-if=\"$server.activePlayer && !$store.isMobile\">\n          <v-menu\n            :close-on-content-click=\"false\"\n            :nudge-width=\"250\"\n            offset-x\n            top\n            @click.native.prevent\n          >\n            <template v-slot:activator=\"{ on }\">\n              <v-btn small icon v-on=\"on\">\n                <v-flex xs12 class=\"vertical-btn\">\n                  <v-icon>volume_up</v-icon>\n                  <span class=\"overline\">{{\n                    Math.round($server.activePlayer.volume_level)\n                  }}</span>\n                </v-flex>\n              </v-btn>\n            </template>\n            <VolumeControl\n              v-bind:players=\"$server.players\"\n              v-bind:player_id=\"$server.activePlayer.player_id\"\n            />\n          </v-menu>\n        </v-list-item-action>\n\n        <!-- active player btn -->\n        <v-list-item-action style=\"padding:20px;margin-right:15px\">\n          <v-btn small text icon @click=\"$server.$emit('showPlayersMenu')\">\n            <v-flex xs12 class=\"vertical-btn\">\n              <v-icon>speaker</v-icon>\n              <span class=\"overline\" v-if=\"$server.activePlayer\">{{\n                $server.activePlayer.name\n              }}</span>\n              <span class=\"overline\" v-else> </span>\n            </v-flex>\n          </v-btn>\n        </v-list-item-action>\n      </v-list-item>\n      <!-- add some additional whitespace in standalone mode only -->\n      <div style=\"height:14px\" v-if=\"$store.isInStandaloneMode\" />\n\n  </v-footer>\n</template>\n\n<style scoped>\n.vertical-btn {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n.divider {\n  height: 1px;\n  width: 100%;\n  background-color: #cccccc;\n}\n.right {\n  float: right;\n}\n.left {\n  float: left;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n  components: {\n    VolumeControl\n  },\n  props: [],\n  data () {\n    return {\n      curQueueItem: null\n    }\n  },\n  watch: {\n    curQueueItemId: function (val) {\n      // get info for current track\n      if (val == null) {\n        this.curQueueItem = null\n      } else {\n        let endpoint = 'players/' + this.$server.activePlayerId + '/queue/' + val\n        this.$server.getData(endpoint)\n          .then(result => {\n            this.curQueueItem = result\n          })\n      }\n    }\n  },\n  computed: {\n    curQueueItemId () {\n      if (this.$server.activePlayer) {\n        return this.$server.activePlayer.cur_queue_item\n      } else {\n        return null\n      }\n    },\n    progress () {\n      if (!this.curQueueItem) return 0\n      var totalSecs = this.curQueueItem.duration\n      var curSecs = this.$server.activePlayer.cur_time\n      var curPercent = curSecs / totalSecs * 100\n      return curPercent\n    },\n    playerCurTimeStr () {\n      if (!this.curQueueItem) return '0:00'\n      if (!this.$server.activePlayer.cur_time) return '0:00'\n      var curSecs = this.$server.activePlayer.cur_time\n      return curSecs.toString().formatDuration()\n    },\n    playerTotalTimeStr () {\n      if (!this.curQueueItem) return '0:00'\n      var totalSecs = this.curQueueItem.duration\n      return totalSecs.toString().formatDuration()\n    },\n    progressBarWidth () {\n      return window.innerWidth - 160\n    }\n  },\n  methods: {\n    playerCommand (cmd, cmd_opt = null) {\n      this.$server.playerCommand(cmd, cmd_opt, this.$server.activePlayerId)\n    },\n    artistClick (item) {\n      // artist entry clicked within the listviewItem\n      var url = '/artists/' + item.item_id\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    }\n  }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerOSD.vue?vue&type=template&id=18f32adc&scoped=true&\"\nimport script from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerOSD.vue?vue&type=style&index=0&id=18f32adc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"18f32adc\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VFooter } from 'vuetify/lib/components/VFooter';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\ninstallComponents(component, {VBtn,VCard,VFlex,VFooter,VIcon,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VProgressLinear})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"right\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\",\"width\":\"300\"},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card-title',{staticClass:\"headline\"},[_c('b',[_vm._v(_vm._s(_vm.$t('players')))])]),_c('v-list',{attrs:{\"dense\":\"\"}},[_c('v-divider'),_vm._l((_vm.filteredPlayerIds),function(playerId){return _c('div',{key:playerId,style:(_vm.$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : '')},[_c('v-list-item',{staticStyle:{\"margin-left\":\"-5px\",\"margin-right\":\"-15px\"},attrs:{\"ripple\":\"\",\"dense\":\"\"},on:{\"click\":function($event){return _vm.$server.switchPlayer(_vm.$server.players[playerId].player_id)}}},[_c('v-list-item-avatar',[_c('v-icon',{attrs:{\"size\":\"45\"}},[_vm._v(_vm._s(_vm.$server.players[playerId].is_group ? 'speaker_group' : 'speaker'))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',{staticClass:\"subtitle-1\"},[_vm._v(_vm._s(_vm.$server.players[playerId].name))]),_c('v-list-item-subtitle',{key:_vm.$server.players[playerId].state,staticClass:\"body-2\",staticStyle:{\"font-weight\":\"normal\"}},[_vm._v(\" \"+_vm._s(_vm.$t('state.' + _vm.$server.players[playerId].state))+\" \")])],1),(_vm.$server.activePlayerId)?_c('v-list-item-action',{staticStyle:{\"padding-right\":\"10px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"close-on-click\":true,\"nudge-width\":250,\"offset-x\":\"\",\"right\":\"\"},nativeOn:{\"click\":[function($event){$event.stopPropagation();},function($event){$event.stopPropagation();$event.preventDefault();}]},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({staticStyle:{\"color\":\"rgba(0,0,0,.54)\"},attrs:{\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.players[playerId].volume_level)))])],1)],1)]}}],null,true)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":playerId}})],1)],1):_vm._e()],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <!-- players side menu -->\n  <v-navigation-drawer\n    right\n    app\n    clipped\n    temporary\n    v-model=\"visible\"\n    width=\"300\"\n  >\n    <v-card-title class=\"headline\">\n      <b>{{ $t('players') }}</b>\n    </v-card-title>\n    <v-list dense>\n      <v-divider></v-divider>\n      <div\n        v-for=\"playerId of filteredPlayerIds\"\n        :key=\"playerId\"\n        :style=\"$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : ''\"\n      >\n        <v-list-item\n          ripple\n          dense\n          style=\"margin-left: -5px; margin-right: -15px\"\n          @click=\"$server.switchPlayer($server.players[playerId].player_id)\"\n        >\n          <v-list-item-avatar>\n            <v-icon size=\"45\">{{ $server.players[playerId].is_group ? 'speaker_group' : 'speaker' }}</v-icon>\n          </v-list-item-avatar>\n          <v-list-item-content style=\"margin-left:-15px;\">\n            <v-list-item-title class=\"subtitle-1\">{{ $server.players[playerId].name }}</v-list-item-title>\n\n            <v-list-item-subtitle\n              class=\"body-2\"\n              style=\"font-weight:normal;\"\n              :key=\"$server.players[playerId].state\"\n            >\n              {{ $t('state.' + $server.players[playerId].state) }}\n            </v-list-item-subtitle>\n\n          </v-list-item-content>\n\n          <v-list-item-action\n            style=\"padding-right:10px;\"\n            v-if=\"$server.activePlayerId\"\n          >\n            <v-menu\n              :close-on-content-click=\"false\"\n              :close-on-click=\"true\"\n              :nudge-width=\"250\"\n              offset-x\n              right\n              @click.native.stop\n              @click.native.stop.prevent\n            >\n              <template v-slot:activator=\"{ on }\">\n                <v-btn\n                  icon\n                  style=\"color:rgba(0,0,0,.54);\"\n                  v-on=\"on\"\n                >\n                  <v-flex\n                    xs12\n                    class=\"vertical-btn\"\n                  >\n                    <v-icon>volume_up</v-icon>\n                    <span class=\"overline\">{{ Math.round($server.players[playerId].volume_level) }}</span>\n                  </v-flex>\n                </v-btn>\n              </template>\n              <VolumeControl\n                v-bind:players=\"$server.players\"\n                v-bind:player_id=\"playerId\"\n              />\n            </v-menu>\n          </v-list-item-action>\n        </v-list-item>\n        <v-divider></v-divider>\n      </div>\n    </v-list>\n  </v-navigation-drawer>\n</template>\n\n<style scoped>\n.vertical-btn {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n  components: {\n    VolumeControl\n  },\n  watch: {\n  },\n  data () {\n    return {\n      filteredPlayerIds: [],\n      visible: false\n    }\n  },\n  computed: {\n  },\n  created () {\n    this.$server.$on('showPlayersMenu', this.show)\n    this.$server.$on('players changed', this.getAvailablePlayers)\n    this.getAvailablePlayers()\n  },\n  beforeDestroy () {\n    this.$server.$off('showPlayersMenu')\n    this.$server.$off('players changed')\n  },\n  methods: {\n    show () {\n      this.visible = true\n    },\n    getAvailablePlayers () {\n      // generate a list of playerIds that we want to show in the list\n      this.filteredPlayerIds = []\n      for (var playerId in this.$server.players) {\n        // we're only interested in enabled players that are not group childs\n        if (this.$server.players[playerId].enabled && this.$server.players[playerId].group_parents.length === 0) {\n          this.filteredPlayerIds.push(playerId)\n        }\n      }\n    }\n  }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerSelect.vue?vue&type=template&id=71935334&scoped=true&\"\nimport script from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerSelect.vue?vue&type=style&index=0&id=71935334&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"71935334\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VCardTitle,VDivider,VFlex,VIcon,VList,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VNavigationDrawer})\n","<template>\n  <v-app light>\n    <TopBar />\n    <NavigationMenu></NavigationMenu>\n    <v-content>\n      <!-- <player></player> -->\n      <router-view app :key=\"$route.path\"></router-view>\n    </v-content>\n    <PlayerOSD :showPlayerSelect=\"showPlayerSelect\" />\n    <ContextMenu/>\n    <PlayerSelect/>\n    <v-overlay :value=\"$store.loading\">\n      <v-progress-circular indeterminate size=\"64\"></v-progress-circular>\n    </v-overlay>\n  </v-app>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport NavigationMenu from './components/NavigationMenu.vue'\nimport TopBar from './components/TopBar.vue'\nimport ContextMenu from './components/ContextMenu.vue'\nimport PlayerOSD from './components/PlayerOSD.vue'\nimport PlayerSelect from './components/PlayerSelect.vue'\n\nexport default Vue.extend({\n  name: 'App',\n  components: {\n    NavigationMenu,\n    TopBar,\n    ContextMenu,\n    PlayerOSD,\n    PlayerSelect\n  },\n  data: () => ({\n    showPlayerSelect: false\n  }),\n  created () {\n    // TODO: retrieve serveraddress through discovery and/or user settings\n    let serverAddress = ''\n    if (process.env.NODE_ENV === 'production') {\n      let loc = window.location\n      serverAddress = loc.origin + loc.pathname\n    } else {\n      serverAddress = 'http://192.168.1.79:8095/'\n    }\n    this.$server.connect(serverAddress)\n  }\n})\n</script>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=e71f20a2&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VOverlay } from 'vuetify/lib/components/VOverlay';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VApp,VContent,VOverlay,VProgressCircular})\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n  register(`${process.env.BASE_URL}service-worker.js`, {\n    ready () {\n      console.log(\n        'App is being served from cache by a service worker.\\n' +\n        'For more details, visit https://goo.gl/AFskqB'\n      )\n    },\n    registered () {\n      console.log('Service worker has been registered.')\n    },\n    cached () {\n      console.log('Content has been cached for offline use.')\n    },\n    updatefound () {\n      console.log('New content is downloading.')\n    },\n    updated () {\n      console.log('New content is available; please refresh.')\n    },\n    offline () {\n      console.log('No internet connection found. App is running in offline mode.')\n    },\n    error (error) {\n      console.error('Error during service worker registration:', error)\n    }\n  })\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-icon',{staticStyle:{\"margin-left\":\"15px\"}},[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(item.title)}})],1)],1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-list tile>\n      <v-list-item tile\n        v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n          <v-list-item-icon style=\"margin-left:15px\">\n            <v-icon>{{ item.icon }}</v-icon>\n          </v-list-item-icon>\n          <v-list-item-content>\n            <v-list-item-title v-text=\"item.title\"></v-list-item-title>\n          </v-list-item-content>\n      </v-list-item>\n    </v-list>\n  </section>\n</template>\n\n<script>\n\nexport default {\n  name: 'home',\n  data () {\n    return {\n      items: [\n        { title: this.$t('artists'), icon: 'person', path: '/artists' },\n        { title: this.$t('albums'), icon: 'album', path: '/albums' },\n        { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n        { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n        { title: this.$t('search'), icon: 'search', path: '/search' }\n      ]\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t('musicassistant')\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=38d5da10&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":item.media_type < 4 ? _vm.$store.isMobile : false,\"hidelibrary\":true,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hideduration\":item.media_type == 5},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-list two-line>\n      <RecycleScroller\n        class=\"scroller\"\n        :items=\"items\"\n        :item-size=\"72\"\n        key-field=\"item_id\"\n        v-slot=\"{ item }\"\n        page-mode\n      >\n        <ListviewItem\n          v-bind:item=\"item\"\n          :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n          :hidetracknum=\"true\"\n          :hideproviders=\"item.media_type < 4 ? $store.isMobile : false\"\n          :hidelibrary=\"true\"\n          :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n          :hideduration=\"item.media_type == 5\"\n          v-on:click=\"itemClicked\"\n          v-on:menuClick=\"menuClick\"\n        ></ListviewItem>\n      </RecycleScroller>\n    </v-list>\n  </section>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n  name: 'browse',\n  components: {\n    ListviewItem\n  },\n  props: {\n    mediatype: String,\n    provider: String\n  },\n  data () {\n    return {\n      selected: [2],\n      items: []\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t(this.mediatype)\n    this.getItems()\n  },\n  methods: {\n    itemClicked (item) {\n      // item in the list is clicked\n      let url = ''\n      if (item.media_type === 1) {\n        url = '/artists/' + item.item_id\n      } else if (item.media_type === 2) {\n        url = '/albums/' + item.item_id\n      } else if (item.media_type === 4) {\n        url = '/playlists/' + item.item_id\n      } else {\n        // assume track (or radio) item\n        this.$server.$emit('showContextMenu', item)\n        return\n      }\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    menuClick (item) {\n      // contextmenu button clicked\n      this.$server.$emit('showContextMenu', item)\n    },\n    async getItems () {\n      // retrieve the full list of items\n      let offset = 0\n      let limit = 50\n      while (true) {\n        let items = await this.$server.getData(this.mediatype, { offset: offset, limit: limit, provider: this.provider })\n        if (!items || items.length === 0) break\n        this.items.push(...items)\n        offset += limit\n        if (items.length < limit) break\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Browse.vue?vue&type=template&id=79b8bda8&\"\nimport script from \"./Browse.vue?vue&type=script&lang=js&\"\nexport * from \"./Browse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VList } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VList})\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Home from '../views/Home.vue'\nimport Browse from '../views/Browse.vue'\n\nVue.use(VueRouter)\n\nconst routes = [\n  {\n    path: '/',\n    name: 'home',\n    component: Home\n  },\n  {\n    path: '/config',\n    name: 'config',\n    component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/config/:configKey',\n    name: 'configKey',\n    component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/search',\n    name: 'search',\n    component: () => import(/* webpackChunkName: \"search\" */ '../views/Search.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/:media_type/:media_id',\n    name: 'itemdetails',\n    component: () => import(/* webpackChunkName: \"itemdetails\" */ '../views/ItemDetails.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/playerqueue',\n    name: 'playerqueue',\n    component: () => import(/* webpackChunkName: \"playerqueue\" */ '../views/PlayerQueue.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/:mediatype',\n    name: 'browse',\n    component: Browse,\n    props: route => ({ ...route.params, ...route.query })\n  }\n]\n\nconst router = new VueRouter({\n  mode: 'hash',\n  routes\n})\n\nexport default router\n","import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\n\nVue.use(VueI18n)\n\nfunction loadLocaleMessages () {\n  const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.json$/i)\n  const messages = {}\n  locales.keys().forEach(key => {\n    const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n    if (matched && matched.length > 1) {\n      const locale = matched[1]\n      messages[locale] = locales(key)\n    }\n  })\n  return messages\n}\n\nexport default new VueI18n({\n  // locale: process.env.VUE_APP_I18N_LOCALE || 'en',\n  locale: navigator.language.split('-')[0],\n  fallbackLocale: 'en',\n  messages: loadLocaleMessages()\n})\n","import Vue from 'vue'\n// import Vuetify from 'vuetify'\nimport Vuetify from 'vuetify/lib'\nimport 'vuetify/dist/vuetify.min.css'\n\nVue.use(Vuetify)\n\nexport default new Vuetify({\n  icons: {\n    iconfont: 'md'\n  }\n})\n","import Vue from 'vue'\n\nconst globalStore = new Vue({\n  data () {\n    return {\n      windowtitle: 'Home',\n      loading: false,\n      showNavigationMenu: false,\n      topBarColor: '#424242',\n      isMobile: false,\n      isInStandaloneMode: false\n    }\n  },\n  created () {\n    this.handleWindowOptions()\n    window.addEventListener('resize', this.handleWindowOptions)\n  },\n  destroyed () {\n    window.removeEventListener('resize', this.handleWindowOptions)\n  },\n  methods: {\n    handleWindowOptions () {\n      this.isMobile = (document.body.clientWidth < 700)\n      this.isInStandaloneMode = 'standalone' in window.navigator && window.navigator.standalone\n    }\n  }\n})\n\nexport default {\n  globalStore,\n  // we can add objects to the Vue prototype in the install() hook:\n  install (Vue, options) {\n    Vue.prototype.$store = globalStore\n  }\n}\n","'use strict'\n\nimport Vue from 'vue'\nimport axios from 'axios'\n\nconst axiosConfig = {\n  timeout: 60 * 1000\n  // withCredentials: true, // Check cross-site Access-Control\n}\nconst _axios = axios.create(axiosConfig)\n\n// Holds the connection to the server\n\nconst server = new Vue({\n\n  _address: '',\n  _ws: null,\n\n  data () {\n    return {\n      connected: false,\n      players: {},\n      activePlayerId: null\n    }\n  },\n  methods: {\n\n    connect (serverAddress) {\n      // Connect to the server\n      if (!serverAddress.endsWith('/')) {\n        serverAddress = serverAddress + '/'\n      }\n      this._address = serverAddress\n      let wsAddress = serverAddress.replace('http', 'ws') + 'ws'\n      this._ws = new WebSocket(wsAddress)\n      this._ws.onopen = this._onWsConnect\n      this._ws.onmessage = this._onWsMessage\n      this._ws.onclose = this._onWsClose\n      this._ws.onerror = this._onWsError\n    },\n\n    async toggleLibrary (item) {\n      /// triggered when user clicks the library (heart) button\n      let endpoint = item.media_type + '/' + item.item_id\n      let action = 'library_remove'\n      if (item.in_library.length === 0) {\n        action = 'library_add'\n      }\n      await this.getData(endpoint, { provider: item.provider, action: action })\n      if (action === '/library_remove') {\n        item.in_library = []\n      } else {\n        item.in_library = [item.provider]\n      }\n    },\n\n    getImageUrl (mediaItem, imageType = 'image', size = 0) {\n      // format the image url\n      if (!mediaItem || !mediaItem.media_type) return ''\n      return `${this._address}api/${mediaItem.media_type}/${mediaItem.item_id}/image?type=${imageType}&provider=${mediaItem.provider}&size=${size}`\n    },\n\n    async getData (endpoint, params = {}) {\n      // get data from the server\n      let url = this._address + 'api/' + endpoint\n      let result = await _axios.get(url, { params: params })\n      return result.data\n    },\n\n    async postData (endpoint, data) {\n      // post data to the server\n      let url = this._address + 'api/' + endpoint\n      let result = await _axios.post(url, data)\n      return result.data\n    },\n\n    playerCommand (cmd, cmd_opt = null, playerId = this.activePlayerId) {\n      let msgDetails = {\n        player_id: playerId,\n        cmd: cmd,\n        cmd_args: cmd_opt\n      }\n      this._ws.send(JSON.stringify({ message: 'player command', message_details: msgDetails }))\n    },\n\n    async playItem (item, queueOpt) {\n      this.$store.loading = true\n      let endpoint = 'players/' + this.activePlayerId + '/play_media/' + item.media_type + '/' + item.item_id + '/' + queueOpt\n      await this.getData(endpoint)\n      this.$store.loading = false\n    },\n\n    switchPlayer (newPlayerId) {\n      this.activePlayerId = newPlayerId\n      localStorage.setItem('activePlayerId', newPlayerId)\n      this.$emit('new player selected', newPlayerId)\n    },\n\n    _onWsConnect () {\n      // Websockets connection established\n      // console.log('Connected to server ' + this._address)\n      this.connected = true\n      // request all players\n      let data = JSON.stringify({ message: 'players', message_details: null })\n      this._ws.send(data)\n    },\n\n    _onWsMessage (e) {\n      // Message retrieved on the websocket\n      var msg = JSON.parse(e.data)\n      if (msg.message === 'player changed') {\n        Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n      } else if (msg.message === 'player added') {\n        Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n        this._selectActivePlayer()\n        this.$emit('players changed')\n      } else if (msg.message === 'player removed') {\n        Vue.delete(this.players, msg.message_details.player_id)\n        this._selectActivePlayer()\n        this.$emit('players changed')\n      } else if (msg.message === 'players') {\n        for (var item of msg.message_details) {\n          Vue.set(this.players, item.player_id, item)\n        }\n        this._selectActivePlayer()\n        this.$emit('players changed')\n      } else {\n        this.$emit(msg.message, msg.message_details)\n      }\n    },\n\n    _onWsClose (e) {\n      this.connected = false\n      // console.log('Socket is closed. Reconnect will be attempted in 5 seconds.', e.reason)\n      setTimeout(function () {\n        this.connect(this._address)\n      }.bind(this), 5000)\n    },\n\n    _onWsError () {\n      this._ws.close()\n    },\n\n    _selectActivePlayer () {\n      // auto select new active player if we have none\n      if (!this.activePlayer || !this.activePlayer.enabled || this.activePlayer.group_parents.length > 0) {\n        // prefer last selected player\n        let lastPlayerId = localStorage.getItem('activePlayerId')\n        if (lastPlayerId && this.players[lastPlayerId] && this.players[lastPlayerId].enabled) {\n          this.switchPlayer(lastPlayerId)\n        } else {\n          // prefer the first playing player\n          for (let playerId in this.players) {\n            if (this.players[playerId].state === 'playing' && this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n              this.switchPlayer(playerId)\n              break\n            }\n          }\n          // fallback to just the first player\n          if (!this.activePlayer || !this.activePlayer.enabled) {\n            for (let playerId in this.players) {\n              if (this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n                this.switchPlayer(playerId)\n                break\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  computed: {\n    activePlayer () {\n      if (!this.activePlayerId) {\n        return null\n      } else {\n        return this.players[this.activePlayerId]\n      }\n    }\n  }\n})\n\n// install as plugin\nexport default {\n  server,\n  // we can add objects to the Vue prototype in the install() hook:\n  install (Vue, options) {\n    Vue.prototype.$server = server\n  }\n}\n","import Vue from 'vue'\nimport App from './App.vue'\nimport './registerServiceWorker'\nimport router from './router'\nimport i18n from './i18n'\nimport 'roboto-fontface/css/roboto/roboto-fontface.css'\nimport 'material-design-icons-iconfont/dist/material-design-icons.css'\nimport VueVirtualScroller from 'vue-virtual-scroller'\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css'\nimport vuetify from './plugins/vuetify'\nimport store from './plugins/store'\nimport server from './plugins/server'\nimport '@babel/polyfill'\n\nVue.config.productionTip = false\nVue.use(VueVirtualScroller)\nVue.use(store)\nVue.use(server)\n\n// eslint-disable-next-line no-extend-native\nString.prototype.formatDuration = function () {\n  var secNum = parseInt(this, 10) // don't forget the second param\n  var hours = Math.floor(secNum / 3600)\n  var minutes = Math.floor((secNum - (hours * 3600)) / 60)\n  var seconds = secNum - (hours * 3600) - (minutes * 60)\n  if (hours < 10) { hours = '0' + hours }\n  if (minutes < 10) { minutes = '0' + minutes }\n  if (seconds < 10) { seconds = '0' + seconds }\n  if (hours === '00') { return minutes + ':' + seconds } else { return hours + ':' + minutes + ':' + seconds }\n}\n\nnew Vue({\n  router,\n  i18n,\n  vuetify,\n  render: h => h(App)\n}).$mount('#app')\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAQAAAD41aSMAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAACYktHRAD/h4/MvwAAAAlwSFlzAAALEwAACxMBAJqcGAAACPhJREFUeNrtnX1wVNUZxn8JIYD5GAIIWKtAOhAtgzFCSz5GC1HHSKAFHMaUdrBMpgWp2lbECbW26EwLFKSDDBVmmNaCtqBTgg4fQk1KbJNKKpLEhkmokAwWSysh2Ag0KyH9AzJUNsk5d+9dNnv3efgv++ze3ffH+Xjfc869cUuQIql4hUAABEASAAGQBEAAJAEQAEkABEASAAGQBEAAJAEQAEkABEASAAGQBEAAJO+VYOVKYTr5ZJJOKv0VtF71KR/TRC1l7KLNbI8zbswaRwlFDFJkHescv2MF77vpggaxmnrmK/wh6TqKOczPGRgqgLH8lcWWnZTUvfqzhAN8IRQAWVQyXhH0QLdRRaZTAGPZy/WKnUcazr6eWkF8D71XqcLvMYLt3Y8F3QN4Vp1PGDqiZ2ynoeOo19AblgzhVo7atIAShT9MM6ISmy4olSLFKkz6OslmAIVKu8KmJKaZAeQrTmFUvhlApqIURmWaAaQrSmFUus0gLIVPg6/+Q0I3k6XeFaco9qrOXl9NtMuEpWsmARAAAZAEQAAkARAASQAEQBIAAZAEQAAkARAASQAEQBIAAZAEQAAkAfCngvcFad+PWoAASAIgAJIACIAkAAIgCYAASAIgAJIACIAkAH5T8HpABwHaCXCeVlpo4RT/pIlmmvjQcAZW8gRAPAMv31zr5qteOc9h6qijlndsbkkqhQagZw1iIhMvt5L3qKSScv6lELpT8C3LnHQzndTwBnv4CxcUSsv4xXkJoEun2M42KuhQ/J0C8GYWNIzvUMYJ1jJBBCI3DR3BY9TxNsUkKbCRywMms4kP+Bk3KLiRS8TSWEozL3KLAhy5TDiRh6hnS293DpfCXYqI55s0sIkbFejIALiU6hXTyNO6G2mkAAAk8SwNzFG4IwUA4GZeYSc3KeSRAgBQSD2PaP915ABACuso5/MK/JUhMvgviSQygMEMZRjDGcUYRnMLwzy75hTqWMCrCj7YPEesSzcwgdvJIc+jh5v8mu9y3ocRdV0NNWssd1PA3cH3wneoGmbTJAChZ7p3MYcHGOriy7YylzdiG0Dog3CAN1nASArYRiDEz0hjF4s1C3KjC+yliBtZbHpmYo/XX816+gmAO51iDRnMpiqkdy/itdhdQfAuD7hIKXl8hYqQErQ/BN9ZXwBC0VtM4R6qHb8vh3IPM40Yz4TLyGYeHzp8VxZvxeIqWnhKEZ1sYRwrHG5WuZWy2GsF4asFnWUpkzjoEMG+WBsLwluMq2UyS/nUUUe0x3WGLQD/pw5WkMMRB+/IZmss5QXXohx9kCy2OJqUPi8A3uoc83jEQVe0KHYKFMHFuABttNHGJ/yHZhpopJFmT3Z95jl4TvdFprMnKiMals25AerZTzkVLs8FpLObDEtvK5M4JgCf1QUO8iZb+VvIX28IO7jT0ltDbhQu2YS1HJ3AZJ7iPQ7xA4aH9PVOcx97Lb23s16DcE+hWcMJdob07OHzfJUdlt75/t9LFPosKIFCyqii0PE7A8yh1NK70e87idxOQ3PYybvMdviuCxRZdkRpbPb3PiIv8oAsfk+Zw63oAWbxJyvnFBYJgFn51LKc6xyNBTNptHIu93M35F0mnEgJhylwNCOaxkcWvhReEAA7jWI3Kx2cPT7GLKsCRaF/Z0Ne14LieJIKB11GpWXVZ9Xl0/sCYKFcahxMTtfxklXbekIAnBQcXmeBtXshf7dwlfjzoFN82D53Az+x9J5lrsVIkMQyAXCmZay3/Px3rIL7LT+euAyuhiaSTAopjCCDDDKY6Gqnwla+wUULXz+qucPo2sxDfT6inu+OjmMCU8nn3hDPOb5gmclmUW2cwHYw3jJ5ixoA8RYfWMdavsZIiqkI4V4qD/NjK98h1li0kyf93wX1rnSWMJ8BDq+ykI0WrmSOGPfGtTOak7HVAq7OXR8mnV84XKn6JdMsXJ/wQ6NnAI/Gdgvo0hieZ7oDfwtZfGCRR1czyeA5zU2ci90W0KUmZjCT49b+oWy1qBF18pRFkveg8oBLeo1M68VFyOWnFq59/Nno+bYAdOkMs/i+9QmxJVbF6qeNjhzGC8AVrSWfVrvxhg0WSzb7ORBLbcCLUkQld3LCyjmKH1m4VhsdD/rnlsve/JB6ci13QC+2WDvezlGDYyR3CcBndZx7+YeFL9Fis9VFNli0AQEIQlBgNRbkM8vo+Y1xYH/AL2cIvOxL65lhNSMyjwMf8brBcT3ZAtDdcGxTLLuD+42eXxkdBf4A0P35gFbep4G3Keffjj+xlJlGTxV5Bkd/TjKkV8dBY9EiKkoRpu3p1Wzht5x28AUGUxv05IFgTWW/wbGJYsMPHRnCf48+B8DUBX2ZdRznOQdHqM/wPQvX40bHK8YfMiVWxoAkHucIT1hvuNrBLqPnfuNhpQrOGhx5sQIAIJlVHLBeFH/UuF6QwFyDo50/CsDVs5d3mWHlbLJYAZtndJgO6WX64SY3zqahqZQahsYurabdiPOLBke5sRVNijUA0M84O7mkE7xo9BQZXm+kxeC4LTYTsY1WHdEq44TsHuOErsoDAJ3X+F/vCngBoB8vWQzHR41rW18y3pajynct4Iw3pYhUtllMSjcb+3BTUbnW8Pr4qDs/dswbADCRx4yeV/mvwWE65lpnzFBGRBmAWq8AwDLjj/+YMoPDlMueMBZBxkQZgDLvAKRYHJkoN3Yhpus3GF4fHVXhP8tu7wDAQtJcAhjIKIOj2Vct4OXg8oobAMnGmXytcSaf4RLA56Io/AFWepMH2JcTOjkUZgBDowjAc93dfscdgMnGmmajSwCmin/03Oayhme8yoSvKI6pLgGYBtEWn7SAk8zuvjrmdk042yWAVJcAhkRJ+O/r6VEVbgFkGC9tmsz2LtNGl2g4vl1Dbs8ppVsAYw2vt7kEYCpqD+jjwQ+wnOzeHtSS4PICaREGkNin066XWWm68aBbAKkuAaT6rgUEOMMxailjt3FVu1sA3tYX211+Xofr79PH66W+2eYdrRIAARAASQAEQBIAAZAEQAAkARAASQAEQBIAAZAEQAAkARAASQAEQBIAf+p/HywBqGkNkGEAAAAASUVORK5CYII=\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=71935334&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=71935334&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/file.813f9dad.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=18f32adc&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=18f32adc&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/sonos.72e2fecb.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKEAAABtCAYAAADJewF5AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QwaCisvSBa6TQAACqJJREFUeNrtnXmQFdUVh787MGyirMqgBlDUEAKImkRRqUIxcbfcjcakFDFqlZrSBMtKlf5hSs2uRrOVVuKSGI27FFQlLiHG4AKKKxBBDYICIrtsAvPLH31eqn3Ou91vmHHmvT5fVRfy+p7T3dyft++5fe+54DiO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziOU3RCkR9eUm9gFDACmGjHeqAn8IUcLlYBa4DtwDpgMfAqsBxYCswPIcx3mbkIy4W3L3AEcLyJby+gsZ0utxpYBLwGPGr/vSCEsN6lV0ARSpoIXAEcBvTtqNsA3gRmAh8C04H/hBBWuQjrW3wDgB8ClwLdOuEtvmWinAk8CSwJIWx1EdaPAI8Ffmr9vh1twTZbX68bsAJ42/4cBAwF9gQ2ADsBO1u5hiqvsxmYBfwdmAa8FkLY7iKs3YDjGuAHrRDCCuCfwPvWh1sCLAPeA9aavy0hhA2p6/UCegHbgK7Wx9wLGAPsBuwBDDShDjXhZrERmAf8BXg8hLDAe4+1I8A+kqapetZKulnS3u14bz0l7SnpQElnSPqlpOclbcy4t48kPSzpBEk9vJY7twD7SXqiFQJ8VNLoDrrnIGmUpPMkTTXBxXhV0hRJw7zGO6cIH61SfEslndvJnmE/SedKuk3SLEmrIq3j7ZLGes13jorrJumPVQrwdUljOvlzBUnDJV0kaXqF1/bLroDOUVmXVCnAZyUNqbFnDJJG2Kv4aUnb7Vne8Oi44yunBzDXotE8vAicGEL4sA3vYXdgpEW9g4Emi4pL45KrbfhmpUXcy2y4Z3kI4aNWXK8rcDBwOTAohDDBRdixIrwM+FXO4i8BJ4QQlrVF343k89+ZwH42/FINa02cq7DvzMACG5b5AFiUZ9Ba0uAQwlJ/H3acAHtKuruKIZhRO3i9LhY0zDB/7cVqSS9KulXSoZJ6em13XhEekOobZXHzDl5rjAUHHcELkn4i6RhJu3rNdy4RXiupOUclbtyRSFjS+ZJWtKGomiVta6XtMkn3Sposaa96qMdQ4yKcA+QZJ5sNHBxCaK7SfyNwPTCllbe4iWR+4UILShaTfAZcTPJZrp8FM03AEAtmmuz3gSRzGmN1tAZ4MIRwYS3XY9ca/59oY85yT7ZCgN2B3wCTWnFfzwD3ADOAxSGELdUMxZB8h+5tQvwScKAdY/n0d+e+JFPTnA5sCf+d8xV2Vit8/64Vr8onJR3Tjs87TNKpkv4gaa5dc6EroTZEeESVfsfl7GuWeFvSBZ/zszdK+oakSa6E2hDhkVX6vb8KAf7VBqudgvYJ20PYhwAn5ix+C3Bltf3NsuuNtP5e/0i/dxkwN4TwjouwGFxNstoui5nA91sR8OwETACOA8ZbVNwnh+lKSfMt6JlHMsl2GfB+COFjr7Y6eR1L6iHptRz+1lQ7hUrSzpIuTQUUbcFKSY95S9ix9Gpjf3uSTMXP4rYQwitVCPBI4OfAAW18v/2BfWpdhA01fv9/Aprb0F9TpG9WYhvwQBUC/DrwWDsIsMQWF2HH8jTJSrgs8q5Yy7N+4wWSqWN5BDgCuItk4NmpUxH2BrrkKDcgp7/uOcpMzznFqhG4lWR+oVPHIlxJsv43izNz+tspR4v6Qk5fk4CjXGJ1LsIQwlzrb2UxQVJTjnKbMs6vADIDElv3fKXLqxgtIcAjOYKTQcDhOXy9A8TG3NbakcV4ktnWThFEGEJ4FngoR9HTc5RZYEcses7TxzvbpVWslhDgqRxlJma9kkMIn2SIsDfJgqYs9nBpFU+E91t/LcZA4PwcvuZFznUhySXjuAg/04KtIVn+mNU3/F6OAGUa8XHFPDNmNru0itcSEkK4z4KUrAAla6r+S8DUyPmxNvs5xnMurYJiq+82ZHz035A1+cCWWW6tYP++Jd6M2X9R0sef00q8mk8D0lBPIgwhzCHJ5xejF3CdpNizPw88EXkdZw1+LyDJcegUtDUcYtm2sjgtw8/pGenZembYT/aWsNhCPC9H5b0Xm5ZvcwtnR+yvyriHpkhaNxdhQYT4SI4KvD3DxwRJn0RSdeybYf97F2GxRbi3pA8yKnCbJVeP+bkmYv9Qhu0+NvvZRVhgIZ6ZI1fNf2O5Cm1pZaUMsNslnZFxD1e5CF2Iv86ZNLMp4mOwpAWR3DCjI7YDJL3hIiy2CPtkBBglZkjaOeLnEEmLKti+JKlbxHa0BUIuwgILcZSk5Tkq9DHLQVPJz0GS1lWwvSlHkLPURVhsIR6WY7+QPBHzBRHbm2Kf9CRNlLTeRVhsIZ5lQytZ3Bv7omIJKytxt+3wVMn2bElbXITFFuJ4CyayeNAWK1Xy87OI7Z0ZLeK32vDbsouwRoU4LhJkpHk4I+C4MWJ7Y4YQT26jvNcuwhoW4khJ89qgRbwo8oq/R9LAiO2xbSBEF2GNC3GYpOdyCrFrxM8BET+vSzo0YvvVnK2yi7COhThA0gM5hdgz4qefpH9EEihdErHd33b7dBEWWIiNkq7PuZXDmIifwZJezkioObSCbX9Jt7gIXYyTc4zjrZf07Ur9REmDJP05Yr9c0jmVhoAknVRl+ri3av3fPbj0PiOCo4HYlgyNJJkabgwhvBrx8x3gpBZOdSdZCHVxCGFlBdu+wBXAl3Pc8rshhClec47jOP46dtqzexBIEnc2AOtDCJtdhMUVw/HA/iQL458JITxXhW1fklRxPUgyvd4RQliVYbM7cCxwMjDObOeRrGl+IITwL6+VYgmwt6R3UhHpHNvsO6/9WWUR7YUZ5YdLejMSEa+TdIrXTLFEeEILQhhXhf3UMtu/RYZoGmxe4//XsUg62o6rUzO8P5Z0uNdOcUT4UGqFXWm7sd/mtN039X24NAa5pdIG4LancekaU8u/0tjXlVKWiRdzpCRx6kCAw1Mimmzfgkv72Q3IYX+llV9kA9GlibU/qlD+mVRLNzIi1POtn+oUQIRTUhMRGiTdkHpVnp1h29VaK0m603571v7+hu3u9KkAxlb/lUTrO265ANUo6RUTxWWp1+Em++3xDPtDU4vnjysTtSQdVVZ+mKQPUyJs9FpwER5lglgiaZfU73fb72tjWRgk/bi0J7GkXSXtIunE1PT+O8vKD00tyFqYkbTJKYgI7zBBbLQZNLMlzSqb/3dRBdtdJL1rZTZJmm92K8rWLA9O2XS3vqasfJcKvi+XNNOO0V5T9SvAXVMpPLbYa3WbHekciLNbEouk01JlNtqcwpX2uv0odW5Smd119vtWSd9swe/u5qvk19MX17EIL7aK/kTSqZb4cqQdI1LDNlsljW/B/r6USA+0KV4Dbd7gcEmL7fwTLbySl9i5pZIOL/UNbafQaSkBX+s1Vb8C7GoDypI0o0KZU1Ji+EXZuSHWWm2XdE4F+1tSrdnYsnMHpV7L22zY5q6y2df3xhbqO7UvwjGpyv5uhTK7pTIqfJBOIZIaG2yW1L+C/ddMYJJ0QwvnR1ifryWmS+pTL//ePtreskD6k+xX0gzMCSFsqlBuFFCKmmeVNl6UtB/JlhXNwMu2P0q5bQPJ9rPdgdUhhHktlOkHfIVkd6geJDNpFgJPhRDWeU05juM4juM4juM4juM4juM4juM4juM4juM4juM4juM4juPUC/8DLSVc5VaBblAAAAAASUVORK5CYII=\"","var map = {\n\t\"./aac.png\": \"9a36\",\n\t\"./chromecast.png\": \"57d1\",\n\t\"./default_artist.png\": \"4bfb\",\n\t\"./file.png\": \"71db\",\n\t\"./flac.png\": \"fb30\",\n\t\"./hires.png\": \"f5e3\",\n\t\"./homeassistant.png\": \"3232\",\n\t\"./http_streamer.png\": \"2755\",\n\t\"./logo.png\": \"cf05\",\n\t\"./mp3.png\": \"f1d4\",\n\t\"./qobuz.png\": \"0863\",\n\t\"./sonos.png\": \"82f5\",\n\t\"./spotify.png\": \"0c3b\",\n\t\"./squeezebox.png\": \"bd18\",\n\t\"./tunein.png\": \"e428\",\n\t\"./vorbis.png\": \"94cc\",\n\t\"./web.png\": \"edbf\",\n\t\"./webplayer.png\": \"3d05\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"9e01\";","module.exports = __webpack_public_path__ + \"img/squeezebox.60631223.png\";","module.exports = __webpack_public_path__ + \"img/logo.c079bd97.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-list-item',{attrs:{\"ripple\":\"\"},on:{\"click\":function($event){return _vm.$emit('click', _vm.item)}}},[(!_vm.hideavatar)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\",\"color\":\"grey\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.22)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.item, 'image', 80),\"lazy-src\":require('../assets/file.png')}})]):_vm._e(),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.item.name)+\" \"),(!!_vm.item.version)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.item.version)+\")\")]):_vm._e()]),(_vm.item.artists)?_c('v-list-item-subtitle',[_vm._l((_vm.item.artists),function(artist,artistindex){return _c('span',{key:artist.item_id},[_c('a',{on:{\"click\":[function($event){return _vm.artistClick(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.item.artists.length)?_c('label',{key:artistindex},[_vm._v(\"/\")]):_vm._e()])}),(!!_vm.item.album && !!_vm.hidetracknum)?_c('a',{staticStyle:{\"color\":\"grey\"},on:{\"click\":[function($event){return _vm.albumClick(_vm.item.album)},function($event){$event.stopPropagation();}]}},[_vm._v(\" - \"+_vm._s(_vm.item.album.name))]):_vm._e(),(!_vm.hidetracknum && _vm.item.track_number)?_c('label',{staticStyle:{\"color\":\"grey\"}},[_vm._v(\"- disc \"+_vm._s(_vm.item.disc_number)+\" track \"+_vm._s(_vm.item.track_number))]):_vm._e()],2):_vm._e(),(_vm.item.artist)?_c('v-list-item-subtitle',[_c('a',{on:{\"click\":[function($event){return _vm.artistClick(_vm.item.artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(_vm.item.artist.name))])]):_vm._e(),(!!_vm.item.owner)?_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.item.owner))]):_vm._e()],1),(!_vm.hideproviders)?_c('v-list-item-action',[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.item.provider_ids,\"height\":20}})],1):_vm._e(),(_vm.isHiRes)?_c('v-list-item-action',[_c('img',{attrs:{\"src\":require('../assets/hires.png'),\"height\":\"20\"}})]):_vm._e(),(!_vm.hidelibrary)?_c('v-list-item-action',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\",\"ripple\":\"\"},on:{\"click\":[function($event){return _vm.toggleLibrary(_vm.item)},function($event){$event.stopPropagation();}]}},on),[(_vm.item.in_library.length > 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite\")]):_vm._e(),(_vm.item.in_library.length == 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite_border\")]):_vm._e()],1)]}}],null,false,993341054)},[(_vm.item.in_library.length > 0)?_c('span',[_vm._v(_vm._s(_vm.$t('remove_library')))]):_vm._e(),(_vm.item.in_library.length == 0)?_c('span',[_vm._v(_vm._s(_vm.$t('add_library')))]):_vm._e()])],1):_vm._e(),(!_vm.hideduration && !!_vm.item.duration)?_c('v-list-item-action',[_vm._v(_vm._s(_vm.item.duration.toString().formatDuration()))]):_vm._e(),(!_vm.hidemenu)?_c('v-icon',{staticStyle:{\"margin-right\":\"-10px\",\"padding-left\":\"10px\"},attrs:{\"color\":\"grey lighten-1\"},on:{\"click\":[function($event){return _vm.$emit('menuClick', _vm.item)},function($event){$event.stopPropagation();}]}},[_vm._v(\"more_vert\")]):_vm._e()],1),_c('v-divider')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div>\n    <v-list-item ripple @click=\"$emit('click', item)\">\n      <v-list-item-avatar tile color=\"grey\" v-if=\"!hideavatar\">\n        <img\n          :src=\"$server.getImageUrl(item, 'image', 80)\"\n          :lazy-src=\"require('../assets/file.png')\"\n          style=\"border: 1px solid rgba(0,0,0,.22);\"\n        />\n      </v-list-item-avatar>\n\n      <v-list-item-content>\n        <v-list-item-title>\n          {{ item.name }}\n          <span v-if=\"!!item.version\">({{ item.version }})</span>\n        </v-list-item-title>\n\n        <v-list-item-subtitle v-if=\"item.artists\">\n          <span v-for=\"(artist, artistindex) in item.artists\" :key=\"artist.item_id\">\n            <a v-on:click=\"artistClick(artist)\" @click.stop>{{ artist.name }}</a>\n            <label v-if=\"artistindex + 1 < item.artists.length\" :key=\"artistindex\">/</label>\n          </span>\n          <a\n            v-if=\"!!item.album && !!hidetracknum\"\n            v-on:click=\"albumClick(item.album)\"\n            @click.stop\n            style=\"color:grey\"\n          > - {{ item.album.name }}</a>\n          <label\n            v-if=\"!hidetracknum && item.track_number\"\n            style=\"color:grey\"\n          >- disc {{ item.disc_number }} track {{ item.track_number }}</label>\n        </v-list-item-subtitle>\n        <v-list-item-subtitle v-if=\"item.artist\">\n          <a v-on:click=\"artistClick(item.artist)\" @click.stop>{{ item.artist.name }}</a>\n        </v-list-item-subtitle>\n\n        <v-list-item-subtitle v-if=\"!!item.owner\">{{ item.owner }}</v-list-item-subtitle>\n      </v-list-item-content>\n\n      <v-list-item-action v-if=\"!hideproviders\">\n      <ProviderIcons\n        v-bind:providerIds=\"item.provider_ids\"\n        :height=\"20\"\n      />\n      </v-list-item-action>\n\n      <v-list-item-action v-if=\"isHiRes\">\n        <img\n          :src=\"require('../assets/hires.png')\"\n          height=\"20\"\n        />\n      </v-list-item-action>\n\n      <v-list-item-action v-if=\"!hidelibrary\">\n        <v-tooltip bottom>\n          <template v-slot:activator=\"{ on }\">\n            <v-btn icon ripple v-on=\"on\" v-on:click=\"toggleLibrary(item)\" @click.stop>\n              <v-icon height=\"20\" v-if=\"item.in_library.length > 0\">favorite</v-icon>\n              <v-icon height=\"20\" v-if=\"item.in_library.length == 0\">favorite_border</v-icon>\n            </v-btn>\n          </template>\n          <span v-if=\"item.in_library.length > 0\">{{ $t('remove_library') }}</span>\n          <span v-if=\"item.in_library.length == 0\">{{ $t('add_library') }}</span>\n        </v-tooltip>\n      </v-list-item-action>\n\n      <v-list-item-action\n        v-if=\"!hideduration && !!item.duration\"\n      >{{ item.duration.toString().formatDuration() }}</v-list-item-action>\n\n      <!-- menu button/icon -->\n      <v-icon\n        v-if=\"!hidemenu\"\n        @click=\"$emit('menuClick', item)\"\n        @click.stop\n        color=\"grey lighten-1\"\n        style=\"margin-right:-10px;padding-left:10px\"\n      >more_vert</v-icon>\n    </v-list-item>\n    <v-divider></v-divider>\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ProviderIcons from '@/components/ProviderIcons.vue'\n\nexport default Vue.extend({\n  components: {\n    ProviderIcons\n  },\n  props: {\n    item: Object,\n    index: Number,\n    totalitems: Number,\n    hideavatar: Boolean,\n    hidetracknum: Boolean,\n    hideproviders: Boolean,\n    hidemenu: Boolean,\n    hidelibrary: Boolean,\n    hideduration: Boolean\n  },\n  data () {\n    return {}\n  },\n  computed: {\n    isHiRes () {\n      for (var prov of this.item.provider_ids) {\n        if (prov.quality > 6) {\n          return true\n        }\n      }\n      return false\n    }\n  },\n  mounted () { },\n  methods: {\n    artistClick (item) {\n      // artist entry clicked within the listviewItem\n      var url = '/artists/' + item.item_id\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    albumClick (item) {\n      // album entry clicked within the listviewItem\n      var url = '/albums/' + item.item_id\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    toggleLibrary (item) {\n      // library button clicked on item\n      this.$server.toggleLibrary(item)\n    }\n  }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListviewItem.vue?vue&type=template&id=7dd2252b&\"\nimport script from \"./ListviewItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ListviewItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VDivider,VIcon,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.uniqueProviders),function(prov){return _c('img',{key:prov.provider,staticStyle:{\"margin-right\":\"6px\",\"margin-top\":\"6px\"},attrs:{\"height\":_vm.height,\"src\":require('../assets/' + prov.provider + '.png')}})}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div>\r\n  <img\r\n    v-for=\"prov of uniqueProviders\" :key=\"prov.provider\"\r\n    :height=\"height\"\r\n    :src=\"require('../assets/' + prov.provider + '.png')\"\r\n    style=\"margin-right:6px;margin-top:6px;\"\r\n  />\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n  props: {\r\n    providerIds: Array,\r\n    height: Number\r\n  },\r\n  data () {\r\n    return {\r\n      isHiRes: false\r\n    }\r\n  },\r\n  computed: {\r\n    uniqueProviders: function () {\r\n      var output = []\r\n      var keys = []\r\n      if (!this.providerIds) return []\r\n      this.providerIds.forEach(function (prov) {\r\n        var key = prov['provider']\r\n        if (keys.indexOf(key) === -1) {\r\n          keys.push(key)\r\n          output.push(prov)\r\n        }\r\n      })\r\n      return output\r\n    }\r\n  },\r\n  mounted () { },\r\n  methods: {\r\n  }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProviderIcons.vue?vue&type=template&id=39dc952a&\"\nimport script from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\nexport * from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/tunein.ca1c1bb0.png\";","module.exports = __webpack_public_path__ + \"img/web.798ba28f.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/hires.e97b001e.png\";","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/music_assistant/web/js/app.df1cf09c.js b/music_assistant/web/js/app.df1cf09c.js
deleted file mode 100644 (file)
index 8e1d658..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-(function(e){function t(t){for(var i,a,o=t[0],l=t[1],c=t[2],u=0,p=[];u<o.length;u++)a=o[u],Object.prototype.hasOwnProperty.call(s,a)&&s[a]&&p.push(s[a][0]),s[a]=0;for(i in l)Object.prototype.hasOwnProperty.call(l,i)&&(e[i]=l[i]);d&&d(t);while(p.length)p.shift()();return n.push.apply(n,c||[]),r()}function r(){for(var e,t=0;t<n.length;t++){for(var r=n[t],i=!0,a=1;a<r.length;a++){var o=r[a];0!==s[o]&&(i=!1)}i&&(n.splice(t--,1),e=l(l.s=r[0]))}return e}var i={},a={app:0},s={app:0},n=[];function o(e){return l.p+"js/"+({"config~search":"config~search",config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",search:"search",itemdetails:"itemdetails",playerqueue:"playerqueue"}[e]||e)+"."+{"config~search":"9f3e890b",config:"328c2668","itemdetails~playerqueue~search":"1e2b2bfd",search:"5fcda21d",itemdetails:"b7fcbe37",playerqueue:"39a08978"}[e]+".js"}function l(t){if(i[t])return i[t].exports;var r=i[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.e=function(e){var t=[],r={"config~search":1,config:1,"itemdetails~playerqueue~search":1,itemdetails:1};a[e]?t.push(a[e]):0!==a[e]&&r[e]&&t.push(a[e]=new Promise((function(t,r){for(var i="css/"+({"config~search":"config~search",config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",search:"search",itemdetails:"itemdetails",playerqueue:"playerqueue"}[e]||e)+"."+{"config~search":"af60f7e1",config:"18def958","itemdetails~playerqueue~search":"93e2919b",search:"31d6cfe0",itemdetails:"bd2e4eb1",playerqueue:"31d6cfe0"}[e]+".css",s=l.p+i,n=document.getElementsByTagName("link"),o=0;o<n.length;o++){var c=n[o],u=c.getAttribute("data-href")||c.getAttribute("href");if("stylesheet"===c.rel&&(u===i||u===s))return t()}var p=document.getElementsByTagName("style");for(o=0;o<p.length;o++){c=p[o],u=c.getAttribute("data-href");if(u===i||u===s)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var i=t&&t.target&&t.target.src||s,n=new Error("Loading CSS chunk "+e+" failed.\n("+i+")");n.code="CSS_CHUNK_LOAD_FAILED",n.request=i,delete a[e],d.parentNode.removeChild(d),r(n)},d.href=s;var m=document.getElementsByTagName("head")[0];m.appendChild(d)})).then((function(){a[e]=0})));var i=s[e];if(0!==i)if(i)t.push(i[2]);else{var n=new Promise((function(t,r){i=s[e]=[t,r]}));t.push(i[2]=n);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=o(e);var p=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(d);var r=s[e];if(0!==r){if(r){var i=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;p.message="Loading chunk "+e+" failed.\n("+i+": "+a+")",p.name="ChunkLoadError",p.type=i,p.request=a,r[1](p)}s[e]=void 0}};var d=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=i,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)l.d(r,i,function(t){return e[t]}.bind(null,i));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw e};var c=window["webpackJsonp"]=window["webpackJsonp"]||[],u=c.push.bind(c);c.push=t,c=c.slice();for(var p=0;p<c.length;p++)t(c[p]);var d=u;n.push([0,"chunk-vendors"]),r()})({0:function(e,t,r){e.exports=r("56d7")},"0863":function(e,t,r){e.exports=r.p+"img/qobuz.c7eb9a76.png"},"0afa4":function(e,t,r){"use strict";var i=r("39f1"),a=r.n(i);a.a},"0c3b":function(e,t,r){e.exports=r.p+"img/spotify.1f3fb1af.png"},"1c3f":function(e,t,r){},2755:function(e,t,r){e.exports=r.p+"img/http_streamer.4c4e4880.png"},3232:function(e,t,r){e.exports=r.p+"img/homeassistant.29fe3282.png"},"39f1":function(e,t,r){},"3d05":function(e,t,r){e.exports=r.p+"img/webplayer.8e1a0da9.png"},"49f8":function(e,t,r){var i={"./en.json":"edd4","./nl.json":"a625"};function a(e){var t=s(e);return r(t)}function s(e){if(!r.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}a.keys=function(){return Object.keys(i)},a.resolve=s,e.exports=a,a.id="49f8"},"4bfb":function(e,t,r){e.exports=r.p+"img/default_artist.7305b29c.png"},"56d7":function(e,t,r){"use strict";r.r(t);r("e25e"),r("e260"),r("e6cf"),r("cca6"),r("a79d");var i=r("2b0e"),a=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-app",{attrs:{light:""}},[r("TopBar"),r("NavigationMenu"),r("v-content",[r("router-view",{key:e.$route.path,attrs:{app:""}})],1),r("PlayerOSD",{attrs:{showPlayerSelect:e.showPlayerSelect}}),r("ContextMenu"),r("PlayerSelect"),r("v-overlay",{attrs:{value:e.$store.loading}},[r("v-progress-circular",{attrs:{indeterminate:"",size:"64"}})],1)],1)},s=[],n=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-navigation-drawer",{attrs:{dark:"",app:"",clipped:"",temporary:""},model:{value:e.$store.showNavigationMenu,callback:function(t){e.$set(e.$store,"showNavigationMenu",t)},expression:"$store.showNavigationMenu"}},[r("v-list",[e._l(e.items,(function(t){return r("v-list-item",{key:t.title,on:{click:function(r){return e.$router.push(t.path)}}},[r("v-list-item-action",[r("v-icon",[e._v(e._s(t.icon))])],1),r("v-list-item-content",[r("v-list-item-title",[e._v(e._s(t.title))])],1)],1)})),r("v-btn",{attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}})],2)],1)},o=[],l=i["a"].extend({props:{},data:function(){return{items:[{title:this.$t("home"),icon:"home",path:"/"},{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("radios"),icon:"radio",path:"/radios"},{title:this.$t("search"),icon:"search",path:"/search"},{title:this.$t("settings"),icon:"settings",path:"/config"}]}},mounted:function(){},methods:{}}),c=l,u=r("2877"),p=r("6544"),d=r.n(p),m=r("8336"),h=r("132d"),v=r("8860"),f=r("da13"),y=r("1800"),g=r("5d23"),A=r("f774"),b=Object(u["a"])(c,n,o,!1,null,null,null),k=b.exports;d()(b,{VBtn:m["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:y["a"],VListItemContent:g["a"],VListItemTitle:g["c"],VNavigationDrawer:A["a"]});var w=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-app-bar",{attrs:{app:"","scroll-off-screen":"","hide-on-scroll":"",flat:"",dense:"",dark:"",color:e.$store.topBarColor}},[r("v-layout",["transparent"!=e.$store.topBarColor?r("v-toolbar-title",{staticClass:"body-1",staticStyle:{position:"fixed",width:"100%","text-align":"center","vertical-align":"center","margin-top":"11px"}},[e._v(e._s(e.$store.windowtitle))]):e._e(),r("v-btn",{staticStyle:{"margin-left":"-13px"},attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}},[r("v-icon",[e._v("menu")])],1),r("v-btn",{attrs:{icon:""},on:{click:function(t){return e.$router.go(-1)}}},[r("v-icon",[e._v("arrow_back")])],1),r("v-spacer"),r("v-btn",{staticStyle:{"margin-right":"-23px"},attrs:{icon:""},on:{click:function(t){return e.$server.$emit("showContextMenu")}}},[r("v-icon",[e._v("more_vert")])],1)],1)],1)},_=[],I=i["a"].extend({props:{color:{type:String,default:"#424242"},fixed:{type:Boolean,default:!0},context:{type:Object,default:null}},data:function(){return{}},mounted:function(){},methods:{}}),x=I,P=r("40dc"),S=r("a722"),C=r("2fa4"),B=r("2a7f"),R=Object(u["a"])(x,w,_,!1,null,null,null),O=R.exports;d()(R,{VAppBar:P["a"],VBtn:m["a"],VIcon:h["a"],VLayout:S["a"],VSpacer:C["a"],VToolbarTitle:B["a"]});var M=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-dialog",{attrs:{"max-width":"500px"},on:{input:function(t){return e.$emit("input",t)}},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[r("v-card",[0===e.playlists.length?r("v-list",[r("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e.subheader?r("v-subheader",[e._v(e._s(e.subheader))]):e._e(),e._l(e.menuItems,(function(t){return r("div",{key:t.label},[r("v-list-item",{on:{click:function(r){return e.itemCommand(t.action)}}},[r("v-list-item-avatar",[r("v-icon",[e._v(e._s(t.icon))])],1),r("v-list-item-content",[r("v-list-item-title",[e._v(e._s(e.$t(t.label)))])],1)],1),r("v-divider")],1)}))],2):e._e(),e.playlists.length>0?r("v-list",[r("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e._l(e.playlists,(function(t,i){return r("listviewItem",{key:t.item_id,attrs:{item:t,totalitems:e.playlists.length,index:i,hideavatar:!1,hidetracknum:!0,hideproviders:!1,hidelibrary:!0,hidemenu:!0},on:{click:e.playlistSelected}})}))],2):e._e()],1)],1)},E=[],V=(r("a4d3"),r("e01a"),r("d28b"),r("99af"),r("caad"),r("b0c0"),r("d3b7"),r("2532"),r("3ca3"),r("ddb0"),r("96cf"),r("89ba")),D=r("284c"),L=r("d3cc"),N=i["a"].extend({components:{ListviewItem:L["a"]},props:{},watch:{},data:function(){return{visible:!1,menuItems:[],header:"",subheader:"",curItem:null,curPlaylist:null,mediaPlayItems:[{label:"play_now",action:"play",icon:"play_circle_outline"},{label:"play_next",action:"next",icon:"queue_play_next"},{label:"add_queue",action:"add",icon:"playlist_add"}],showTrackInfoItem:{label:"show_info",action:"info",icon:"info"},addToPlaylistItem:{label:"add_playlist",action:"add_playlist",icon:"add_circle_outline"},removeFromPlaylistItem:{label:"remove_playlist",action:"remove_playlist",icon:"remove_circle_outline"},playerQueueItems:[],playlists:[]}},mounted:function(){},created:function(){this.$server.$on("showContextMenu",this.showContextMenu),this.$server.$on("showPlayMenu",this.showPlayMenu)},beforeDestroy:function(){this.$server.$off("showContextMenu"),this.$server.$off("showPlayMenu")},computed:{},methods:{showContextMenu:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(this.curItem=e,this.curPlaylist=t,e){if(3===e.media_type){var r=[];r.push.apply(r,Object(D["a"])(this.mediaPlayItems)),r.push(this.showTrackInfoItem),r.push(this.addToPlaylistItem),t&&t.is_editable&&r.push(this.removeFromPlaylistItem),this.menuItems=r}else this.menuItems=this.mediaPlayItems;this.header=e.name,this.subheader="",this.visible=!0}},showPlayMenu:function(e){this.curItem=e,e&&(this.menuItems=this.mediaPlayItems,this.header=e.name,this.subheader="",this.visible=!0)},itemCommand:function(e){if("info"===e)this.$router.push({path:"/tracks/"+this.curItem.item_id,query:{provider:this.curItem.provider}}),this.visible=!1;else{if("add_playlist"===e)return this.showPlaylistsMenu();"remove_playlist"===e?(this.playlistAddRemove(this.curItem,this.curPlaylist.item_id,"playlist_remove"),this.visible=!1):(this.$server.playItem(this.curItem,e),this.visible=!1)}},playlistSelected:function(e){this.playlistAddRemove(this.curItem,e,"playlist_add"),this.visible=!1},playlistAddRemove:function(e,t){var r=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"playlist_add",a="".concat(this.$store.server,"api/track/").concat(e.item_id);this.$axios.get(a,{params:{provider:e.provider,action:i,action_details:t.item_id}}).then((function(e){"playlist_remove"===i&&r.$router.go()}))},showPlaylistsMenu:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(){var t,r,i,a,s,n,o,l,c,u,p,d,m,h,v,f,y,g,A,b,k,w;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:for(t=this.$store.apiAddress+"playlists",r=[],i=!0,a=!1,s=void 0,e.prev=5,n=this.curItem.provider_ids[Symbol.iterator]();!(i=(o=n.next()).done);i=!0)l=o.value,r.push(l.provider);e.next=13;break;case 9:e.prev=9,e.t0=e["catch"](5),a=!0,s=e.t0;case 13:e.prev=13,e.prev=14,i||null==n.return||n.return();case 16:if(e.prev=16,!a){e.next=19;break}throw s;case 19:return e.finish(16);case 20:return e.finish(13);case 21:return e.next=23,this.$axios.get(t,{});case 23:c=e.sent,u=[],p=!0,d=!1,m=void 0,e.prev=28,h=c.data[Symbol.iterator]();case 30:if(p=(v=h.next()).done){e.next=63;break}if(f=v.value,!f.is_editable||f.item_id===this.curPlaylist.item_id){e.next=60;break}y=!0,g=!1,A=void 0,e.prev=36,b=f.provider_ids[Symbol.iterator]();case 38:if(y=(k=b.next()).done){e.next=46;break}if(w=k.value,!r.includes(w.provider)){e.next=43;break}return u.push(f),e.abrupt("break",46);case 43:y=!0,e.next=38;break;case 46:e.next=52;break;case 48:e.prev=48,e.t1=e["catch"](36),g=!0,A=e.t1;case 52:e.prev=52,e.prev=53,y||null==b.return||b.return();case 55:if(e.prev=55,!g){e.next=58;break}throw A;case 58:return e.finish(55);case 59:return e.finish(52);case 60:p=!0,e.next=30;break;case 63:e.next=69;break;case 65:e.prev=65,e.t2=e["catch"](28),d=!0,m=e.t2;case 69:e.prev=69,e.prev=70,p||null==h.return||h.return();case 72:if(e.prev=72,!d){e.next=75;break}throw m;case 75:return e.finish(72);case 76:return e.finish(69);case 77:this.playlists=u;case 78:case"end":return e.stop()}}),e,this,[[5,9,13,21],[14,,16,20],[28,65,69,77],[36,48,52,60],[53,,55,59],[70,,72,76]])})));function t(){return e.apply(this,arguments)}return t}()}}),F=N,T=r("b0af"),z=r("169a"),J=r("ce7e"),H=r("8270"),Q=r("e0c7"),U=Object(u["a"])(F,M,E,!1,null,null,null),j=U.exports;d()(U,{VCard:T["a"],VDialog:z["a"],VDivider:J["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:H["a"],VListItemContent:g["a"],VListItemTitle:g["c"],VSubheader:Q["a"]});var Y=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("v-footer",{staticStyle:{"background-color":"#424242"},attrs:{app:"",fixed:"",padless:"",light:"",elevation:"10"}},[i("v-card",{staticClass:"flex",attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"transparent"}},[i("v-list-item",{staticStyle:{"background-color":"#E0E0E0","margin-top":"1px"},attrs:{dense:"","two-line":""}},[e.curQueueItem?i("v-list-item-avatar",{attrs:{tile:""}},[i("img",{staticStyle:{border:"1px solid rgba(0,0,0,.54)"},attrs:{src:e.$server.getImageUrl(e.curQueueItem),"lazy-src":r("71db")}})]):i("v-list-item-avatar",[i("v-icon",[e._v("speaker")])],1),i("v-list-item-content",[e.curQueueItem?i("v-list-item-title",{staticClass:"title",staticStyle:{height:"19px"}},[e._v(" "+e._s(e.curQueueItem.name))]):e.$server.activePlayer?i("v-list-item-title",{staticClass:"title"},[e._v(" "+e._s(e.$server.activePlayer.name))]):e._e(),e.curQueueItem?i("v-list-item-subtitle",{staticClass:"subtitle-1",staticStyle:{"font-weight":"normal",color:"primary"}},e._l(e.curQueueItem.artists,(function(t,r){return i("span",{key:r},[i("a",{on:{click:[function(r){return e.clickItem(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),r+1<e.curQueueItem.artists.length?i("label",{key:r},[e._v(" / ")]):e._e()])})),0):e._e()],1)],1),i("div",{staticClass:"body-2",staticStyle:{height:"30px",width:"100%",color:"rgba(0,0,0,.65)","margin-top":"-5px","background-color":"#E0E0E0"},attrs:{align:"center"}},[e.curQueueItem?i("div",{staticStyle:{height:"12px","margin-left":"22px","margin-right":"20px","margin-top":"2px"}},[i("span",{staticClass:"left"},[e._v(" "+e._s(e.playerCurTimeStr)+" ")]),i("span",{staticClass:"right"},[e._v(" "+e._s(e.playerTotalTimeStr)+" ")])]):e._e()]),i("v-progress-linear",{style:"margin-top:-22px;margin-left:80px;width:"+e.progressBarWidth+"px;",attrs:{fixed:"",light:"",value:e.progress}}),i("v-list-item",{staticStyle:{height:"50px","margin-bottom":"5px"},attrs:{dark:"",dense:""}},[e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[i("v-btn",{attrs:{small:"",icon:""},on:{click:function(t){return e.playerCommand("previous")}}},[i("v-icon",[e._v("skip_previous")])],1)],1):e._e(),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-left":"-32px","margin-top":"15px"}},[i("v-btn",{attrs:{icon:"","x-large":""},on:{click:function(t){return e.playerCommand("play_pause")}}},[i("v-icon",{attrs:{size:"50"}},[e._v(e._s("playing"==e.$server.activePlayer.state?"pause":"play_arrow"))])],1)],1):e._e(),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[i("v-btn",{attrs:{icon:"",small:""},on:{click:function(t){return e.playerCommand("next")}}},[i("v-icon",[e._v("skip_next")])],1)],1):e._e(),i("v-list-item-content"),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{padding:"28px"}},[i("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$router.push("/playerqueue/")}}},[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("queue_music")]),i("span",{staticClass:"overline"},[e._v(e._s(e.$t("queue")))])],1)],1)],1):e._e(),e.$server.activePlayer&&!e.$store.isMobile?i("v-list-item-action",{staticStyle:{padding:"20px"}},[i("v-menu",{attrs:{"close-on-content-click":!1,"nudge-width":250,"offset-x":"",top:""},nativeOn:{click:function(e){e.preventDefault()}},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("v-btn",e._g({attrs:{small:"",icon:""}},r),[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("volume_up")]),i("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.activePlayer.volume_level)))])],1)],1)]}}],null,!1,1951340450)},[i("VolumeControl",{attrs:{players:e.$server.players,player_id:e.$server.activePlayer.player_id}})],1)],1):e._e(),i("v-list-item-action",{staticStyle:{padding:"20px","margin-right":"15px"}},[i("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$server.$emit("showPlayersMenu")}}},[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("speaker")]),e.$server.activePlayer?i("span",{staticClass:"overline"},[e._v(e._s(e.$server.activePlayer.name))]):i("span",{staticClass:"overline"})],1)],1)],1)],1),e.$store.isInStandaloneMode?i("div",{staticStyle:{height:"14px"}}):e._e()],1)],1)},X=[],W=(r("0d03"),r("25f0"),function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-card",[r("v-list",[r("v-list-item",{staticStyle:{height:"50px","padding-bottom":"5"}},[r("v-list-item-avatar",{staticStyle:{"margin-left":"-10px"},attrs:{tile:""}},[r("v-icon",{attrs:{large:""}},[e._v(e._s(e.players[e.player_id].is_group?"speaker_group":"speaker"))])],1),r("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[r("v-list-item-title",[e._v(e._s(e.players[e.player_id].name))]),r("v-list-item-subtitle",[e._v(e._s(e.$t("state."+e.players[e.player_id].state)))])],1)],1),r("v-divider"),e._l(e.volumePlayerIds,(function(t){return r("div",{key:t},[r("div",{staticClass:"body-2",style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);"},[r("v-btn",{staticStyle:{"margin-left":"8px"},style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);",attrs:{icon:""},on:{click:function(r){return e.togglePlayerPower(t)}}},[r("v-icon",[e._v("power_settings_new")])],1),r("span",{staticStyle:{"margin-left":"10px"}},[e._v(e._s(e.players[t].name))]),r("div",{staticStyle:{"margin-top":"-8px","margin-left":"15px","margin-right":"15px",height:"35px"}},[e.players[t].disable_volume?e._e():r("v-slider",{attrs:{lazy:"",disabled:!e.players[t].powered,value:Math.round(e.players[t].volume_level),"prepend-icon":"volume_down","append-icon":"volume_up"},on:{end:function(r){return e.setPlayerVolume(t,r)},"click:append":function(r){return e.setPlayerVolume(t,"up")},"click:prepend":function(r){return e.setPlayerVolume(t,"down")}}})],1)],1),r("v-divider")],1)}))],2)],1)}),q=[],Z=i["a"].extend({props:["value","players","player_id"],data:function(){return{}},computed:{volumePlayerIds:function(){var e=[this.player_id];return e.push.apply(e,Object(D["a"])(this.players[this.player_id].group_childs)),e}},mounted:function(){},methods:{setPlayerVolume:function(e,t){this.players[e].volume_level=t,"up"===t?this.$server.playerCommand("volume_up",null,e):"down"===t?this.$server.playerCommand("volume_down",null,e):this.$server.playerCommand("volume_set",t,e)},togglePlayerPower:function(e){this.$server.playerCommand("power_toggle",null,e)}}}),K=Z,G=r("ba0d"),$=Object(u["a"])(K,W,q,!1,null,null,null),ee=$.exports;d()($,{VBtn:m["a"],VCard:T["a"],VDivider:J["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:H["a"],VListItemContent:g["a"],VListItemSubtitle:g["b"],VListItemTitle:g["c"],VSlider:G["a"]});var te=i["a"].extend({components:{VolumeControl:ee},props:[],data:function(){return{curQueueItem:null}},watch:{curQueueItemId:function(e){var t=this;if(null==e)this.curQueueItem=null;else{var r="players/"+this.$server.activePlayerId+"/queue/"+e;this.$server.getData(r).then((function(e){t.curQueueItem=e}))}}},computed:{curQueueItemId:function(){return this.$server.activePlayer?this.$server.activePlayer.cur_queue_item:null},progress:function(){if(!this.curQueueItem)return 0;var e=this.curQueueItem.duration,t=this.$server.activePlayer.cur_time,r=t/e*100;return r},playerCurTimeStr:function(){if(!this.curQueueItem)return"0:00";if(!this.$server.activePlayer.cur_time)return"0:00";var e=this.$server.activePlayer.cur_time;return e.toString().formatDuration()},playerTotalTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.curQueueItem.duration;return e.toString().formatDuration()},progressBarWidth:function(){return window.innerWidth-180}},methods:{playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.$server.playerCommand(e,t,this.$server.activePlayerId)}}}),re=te,ie=(r("0afa4"),r("0e8f")),ae=r("553a"),se=r("e449"),ne=r("8e36"),oe=Object(u["a"])(re,Y,X,!1,null,"5f737c49",null),le=oe.exports;d()(oe,{VBtn:m["a"],VCard:T["a"],VFlex:ie["a"],VFooter:ae["a"],VIcon:h["a"],VListItem:f["a"],VListItemAction:y["a"],VListItemAvatar:H["a"],VListItemContent:g["a"],VListItemSubtitle:g["b"],VListItemTitle:g["c"],VMenu:se["a"],VProgressLinear:ne["a"]});var ce=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("v-navigation-drawer",{attrs:{right:"",app:"",clipped:"",temporary:"",width:"300"},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[r("v-card-title",{staticClass:"headline"},[r("b",[e._v(e._s(e.$t("players")))])]),r("v-list",{attrs:{dense:""}},[r("v-divider"),e._l(e.filteredPlayerIds,(function(t){return r("div",{key:t,style:e.$server.activePlayerId==t?"background-color:rgba(50, 115, 220, 0.3);":""},[r("v-list-item",{staticStyle:{"margin-left":"-5px","margin-right":"-15px"},attrs:{ripple:"",dense:""},on:{click:function(r){return e.$server.switchPlayer(e.$server.players[t].player_id)}}},[r("v-list-item-avatar",[r("v-icon",{attrs:{size:"45"}},[e._v(e._s(e.$server.players[t].is_group?"speaker_group":"speaker"))])],1),r("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[r("v-list-item-title",{staticClass:"subtitle-1"},[e._v(e._s(e.$server.players[t].name))]),r("v-list-item-subtitle",{key:e.$server.players[t].state,staticClass:"body-2",staticStyle:{"font-weight":"normal"}},[e._v(" "+e._s(e.$t("state."+e.$server.players[t].state))+" ")])],1),e.$server.activePlayerId?r("v-list-item-action",{staticStyle:{"padding-right":"10px"}},[r("v-menu",{attrs:{"close-on-content-click":!1,"close-on-click":!0,"nudge-width":250,"offset-x":"",right:""},nativeOn:{click:[function(e){e.stopPropagation()},function(e){e.stopPropagation(),e.preventDefault()}]},scopedSlots:e._u([{key:"activator",fn:function(i){var a=i.on;return[r("v-btn",e._g({staticStyle:{color:"rgba(0,0,0,.54)"},attrs:{icon:""}},a),[r("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[r("v-icon",[e._v("volume_up")]),r("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.players[t].volume_level)))])],1)],1)]}}],null,!0)},[r("VolumeControl",{attrs:{players:e.$server.players,player_id:t}})],1)],1):e._e()],1),r("v-divider")],1)}))],2)],1)},ue=[],pe=i["a"].extend({components:{VolumeControl:ee},watch:{},data:function(){return{filteredPlayerIds:[],visible:!1}},computed:{},created:function(){this.$server.$on("showPlayersMenu",this.show),this.$server.$on("players changed",this.getAvailablePlayers),this.getAvailablePlayers()},beforeDestroy:function(){this.$server.$off("showPlayersMenu"),this.$server.$off("players changed")},methods:{show:function(){this.visible=!0},getAvailablePlayers:function(){for(var e in this.filteredPlayerIds=[],this.$server.players)this.$server.players[e].enabled&&0===this.$server.players[e].group_parents.length&&this.filteredPlayerIds.push(e)}}}),de=pe,me=(r("60ce"),r("99d9")),he=Object(u["a"])(de,ce,ue,!1,null,"71935334",null),ve=he.exports;d()(he,{VBtn:m["a"],VCardTitle:me["c"],VDivider:J["a"],VFlex:ie["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:y["a"],VListItemAvatar:H["a"],VListItemContent:g["a"],VListItemSubtitle:g["b"],VListItemTitle:g["c"],VMenu:se["a"],VNavigationDrawer:A["a"]});var fe=i["a"].extend({name:"App",components:{NavigationMenu:k,TopBar:O,ContextMenu:j,PlayerOSD:le,PlayerSelect:ve},data:function(){return{showPlayerSelect:!1}},created:function(){var e="",t=window.location;e=t.origin+t.pathname,this.$server.connect(e)}}),ye=fe,ge=r("7496"),Ae=r("a75b"),be=r("a797"),ke=r("490a"),we=Object(u["a"])(ye,a,s,!1,null,null,null),_e=we.exports;d()(we,{VApp:ge["a"],VContent:Ae["a"],VOverlay:be["a"],VProgressCircular:ke["a"]});var Ie=r("9483");Object(Ie["a"])("".concat("","service-worker.js"),{ready:function(){},registered:function(){},cached:function(){},updatefound:function(){},updated:function(){},offline:function(){},error:function(e){}});r("4de4"),r("4160"),r("e439"),r("dbb4"),r("b64b"),r("159b");var xe=r("2fa7"),Pe=r("8c4f"),Se=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("section",[r("v-list",{attrs:{tile:""}},e._l(e.items,(function(t){return r("v-list-item",{key:t.title,attrs:{tile:""},on:{click:function(r){return e.$router.push(t.path)}}},[r("v-list-item-icon",{staticStyle:{"margin-left":"15px"}},[r("v-icon",[e._v(e._s(t.icon))])],1),r("v-list-item-content",[r("v-list-item-title",{domProps:{textContent:e._s(t.title)}})],1)],1)})),1)],1)},Ce=[],Be={name:"home",data:function(){return{items:[{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("search"),icon:"search",path:"/search"}]}},created:function(){this.$store.windowtitle=this.$t("musicassistant")}},Re=Be,Oe=r("34c3"),Me=Object(u["a"])(Re,Se,Ce,!1,null,null,null),Ee=Me.exports;d()(Me,{VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemContent:g["a"],VListItemIcon:Oe["a"],VListItemTitle:g["c"]});var Ve=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("section",[r("v-list",{attrs:{"two-line":""}},[r("RecycleScroller",{staticClass:"scroller",attrs:{items:e.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.item;return[r("ListviewItem",{attrs:{item:i,hideavatar:3==i.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:i.media_type<4&&e.$store.isMobile,hidelibrary:!0,hidemenu:3==i.media_type&&e.$store.isMobile,hideduration:5==i.media_type},on:{click:e.itemClicked,menuClick:e.menuClick}})]}}])})],1)],1)},De=[],Le={name:"browse",components:{ListviewItem:L["a"]},props:{mediatype:String,provider:String},data:function(){return{selected:[2],items:[]}},created:function(){this.$store.windowtitle=this.$t(this.mediatype),this.getItems()},methods:{itemClicked:function(e){var t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showContextMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(e){this.$server.$emit("showContextMenu",e)},getItems:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(){var t,r,i,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t=0,r=50;case 2:return e.next=5,this.$server.getData(this.mediatype,{offset:t,limit:r,provider:this.provider});case 5:if(a=e.sent,a&&0!==a.length){e.next=8;break}return e.abrupt("break",14);case 8:if((i=this.items).push.apply(i,Object(D["a"])(a)),t+=r,!(a.length<r)){e.next=12;break}return e.abrupt("break",14);case 12:e.next=2;break;case 14:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()}},Ne=Le,Fe=Object(u["a"])(Ne,Ve,De,!1,null,null,null),Te=Fe.exports;function ze(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function Je(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ze(r,!0).forEach((function(t){Object(xe["a"])(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ze(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}d()(Fe,{VList:v["a"]}),i["a"].use(Pe["a"]);var He=[{path:"/",name:"home",component:Ee},{path:"/config",name:"config",component:function(){return Promise.all([r.e("config~search"),r.e("config")]).then(r.bind(null,"1071"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/config/:configKey",name:"configKey",component:function(){return Promise.all([r.e("config~search"),r.e("config")]).then(r.bind(null,"1071"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/search",name:"search",component:function(){return Promise.all([r.e("itemdetails~playerqueue~search"),r.e("config~search"),r.e("search")]).then(r.bind(null,"2d3b"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/:media_type/:media_id",name:"itemdetails",component:function(){return Promise.all([r.e("itemdetails~playerqueue~search"),r.e("itemdetails")]).then(r.bind(null,"32a2"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/playerqueue",name:"playerqueue",component:function(){return Promise.all([r.e("itemdetails~playerqueue~search"),r.e("playerqueue")]).then(r.bind(null,"b097"))},props:function(e){return Je({},e.params,{},e.query)}},{path:"/:mediatype",name:"browse",component:Te,props:function(e){return Je({},e.params,{},e.query)}}],Qe=new Pe["a"]({mode:"hash",routes:He}),Ue=Qe,je=(r("ac1f"),r("466d"),r("1276"),r("a925"));function Ye(){var e=r("49f8"),t={};return e.keys().forEach((function(r){var i=r.match(/([A-Za-z0-9-_]+)\./i);if(i&&i.length>1){var a=i[1];t[a]=e(r)}})),t}i["a"].use(je["a"]);var Xe=new je["a"]({locale:navigator.language.split("-")[0],fallbackLocale:"en",messages:Ye()}),We=(r("d5e8"),r("d1e78"),r("e508")),qe=(r("a899"),r("f309"));r("bf40");i["a"].use(qe["a"]);var Ze=new qe["a"]({icons:{iconfont:"md"}}),Ke=new i["a"]({data:function(){return{windowtitle:"Home",loading:!1,showNavigationMenu:!1,topBarColor:"black",isMobile:!1,isInStandaloneMode:!1}},created:function(){this.handleWindowOptions(),window.addEventListener("resize",this.handleWindowOptions)},destroyed:function(){window.removeEventListener("resize",this.handleWindowOptions)},methods:{handleWindowOptions:function(){this.isMobile=document.body.clientWidth<700,this.isInStandaloneMode="standalone"in window.navigator&&window.navigator.standalone}}}),Ge={globalStore:Ke,install:function(e,t){e.prototype.$store=Ke}},$e=(r("8a79"),r("5319"),r("bc3a")),et=r.n($e),tt={timeout:6e4},rt=et.a.create(tt),it=new i["a"]({_address:"",_ws:null,data:function(){return{connected:!1,players:{},activePlayerId:null}},methods:{connect:function(e){e.endsWith("/")||(e+="/"),this._address=e;var t=e.replace("http","ws")+"ws";this._ws=new WebSocket(t),this._ws.onopen=this._onWsConnect,this._ws.onmessage=this._onWsMessage,this._ws.onclose=this._onWsClose,this._ws.onerror=this._onWsError},toggleLibrary:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(t){var r,i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return r=t.media_type+"/"+t.item_id,i="library_remove",0===t.in_library.length&&(i="library_add"),e.next=5,this.getData(r,{provider:t.provider,action:i});case 5:t.in_library="/library_remove"===i?[]:[t.provider];case 6:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),getImageUrl:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"image",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return e&&e.media_type?"".concat(this._address,"api/").concat(e.media_type,"/").concat(e.item_id,"/image?type=").concat(t,"&provider=").concat(e.provider,"&size=").concat(r):""},getData:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(t){var r,i,a,s=arguments;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return r=s.length>1&&void 0!==s[1]?s[1]:{},i=this._address+"api/"+t,e.next=4,rt.get(i,{params:r});case 4:return a=e.sent,e.abrupt("return",a.data);case 6:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),postData:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(t,r){var i,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return i=this._address+"api/"+t,e.next=3,rt.post(i,r);case 3:return a=e.sent,e.abrupt("return",a.data);case 5:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}(),playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.activePlayerId,i={player_id:r,cmd:e,cmd_args:t};this._ws.send(JSON.stringify({message:"player command",message_details:i}))},playItem:function(){var e=Object(V["a"])(regeneratorRuntime.mark((function e(t,r){var i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.$store.loading=!0,i="players/"+this.activePlayerId+"/play_media/"+t.media_type+"/"+t.item_id+"/"+r,e.next=4,this.getData(i);case 4:this.$store.loading=!1;case 5:case"end":return e.stop()}}),e,this)})));function t(t,r){return e.apply(this,arguments)}return t}(),switchPlayer:function(e){this.activePlayerId=e,localStorage.setItem("activePlayerId",e),this.$emit("new player selected",e)},_onWsConnect:function(){this.connected=!0;var e=JSON.stringify({message:"players",message_details:null});this._ws.send(e)},_onWsMessage:function(e){var t=JSON.parse(e.data);if("player changed"===t.message)i["a"].set(this.players,t.message_details.player_id,t.message_details);else if("player added"===t.message)i["a"].set(this.players,t.message_details.player_id,t.message_details),this._selectActivePlayer(),this.$emit("players changed");else if("player removed"===t.message)i["a"].delete(this.players,t.message_details.player_id),this._selectActivePlayer(),this.$emit("players changed");else if("players"===t.message){var r=!0,a=!1,s=void 0;try{for(var n,o=t.message_details[Symbol.iterator]();!(r=(n=o.next()).done);r=!0){var l=n.value;i["a"].set(this.players,l.player_id,l)}}catch(c){a=!0,s=c}finally{try{r||null==o.return||o.return()}finally{if(a)throw s}}this._selectActivePlayer(),this.$emit("players changed")}else this.$emit(t.message,t.message_details)},_onWsClose:function(e){this.connected=!1,setTimeout(function(){this.connect(this._address)}.bind(this),5e3)},_onWsError:function(e){this._ws.close()},_selectActivePlayer:function(){if(!this.activePlayer||!this.activePlayer.enabled||this.activePlayer.group_parents.length>0){var e=localStorage.getItem("activePlayerId");if(e&&this.players[e]&&this.players[e].enabled)this.switchPlayer(e);else{for(var t in this.players)if("playing"===this.players[t].state&&this.players[t].enabled&&0===this.players[t].group_parents.length){this.switchPlayer(t);break}if(!this.activePlayer||!this.activePlayer.enabled)for(var r in this.players)if(this.players[r].enabled&&0===this.players[r].group_parents.length){this.switchPlayer(r);break}}}}},computed:{activePlayer:function(){return this.activePlayerId?this.players[this.activePlayerId]:null}}}),at={server:it,install:function(e,t){e.prototype.$server=it}};i["a"].config.productionTip=!1,i["a"].use(We["a"]),i["a"].use(Ge),i["a"].use(at),String.prototype.formatDuration=function(){var e=parseInt(this,10),t=Math.floor(e/3600),r=Math.floor((e-3600*t)/60),i=e-3600*t-60*r;return t<10&&(t="0"+t),r<10&&(r="0"+r),i<10&&(i="0"+i),"00"===t?r+":"+i:t+":"+r+":"+i},new i["a"]({router:Ue,i18n:Xe,vuetify:Ze,render:function(e){return e(_e)}}).$mount("#app")},"57d1":function(e,t){e.exports="data:image/png;base64,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"},"60ce":function(e,t,r){"use strict";var i=r("1c3f"),a=r.n(i);a.a},"71db":function(e,t,r){e.exports=r.p+"img/file.813f9dad.png"},"82f5":function(e,t,r){e.exports=r.p+"img/sonos.72e2fecb.png"},"94cc":function(e,t){e.exports="data:image/png;base64,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"},"9a36":function(e,t){e.exports="data:image/png;base64,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"},"9e01":function(e,t,r){var i={"./aac.png":"9a36","./chromecast.png":"57d1","./default_artist.png":"4bfb","./file.png":"71db","./flac.png":"fb30","./hires.png":"f5e3","./homeassistant.png":"3232","./http_streamer.png":"2755","./logo.png":"cf05","./mp3.png":"f1d4","./qobuz.png":"0863","./sonos.png":"82f5","./spotify.png":"0c3b","./squeezebox.png":"bd18","./tunein.png":"e428","./vorbis.png":"94cc","./web.png":"edbf","./webplayer.png":"3d05"};function a(e){var t=s(e);return r(t)}function s(e){if(!r.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}a.keys=function(){return Object.keys(i)},a.resolve=s,e.exports=a,a.id="9e01"},a625:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artiesten","albums":"Albums","tracks":"Nummers","playlists":"Afspeellijsten","playlist_tracks":"Nummers in afspeellijst","radios":"Radio","search":"Zoeken","settings":"Instellingen","queue":"Wachtrij","artist_toptracks":"Top nummers","artist_albums":"Albums","album_tracks":"Album liedjes","album_versions":"Versies","track_versions":"Versies","type_to_search":"Type hier om te zoeken...","add_library":"Voeg toe aan bibliotheek","remove_library":"Verwijder uit bibliotheek","add_playlist":"Aan playlist toevoegen...","remove_playlist":"Verwijder uit playlist","no_player":"Geen speler geselecteerd","reboot_required":"Je moet de server opnieuw starten om de nieuwe instellingen actief te maken!","conf":{"enabled":"Ingeschakeld","base":"Algemene instellingen","musicproviders":"Muziek providers","playerproviders":"Speler providers","player_settings":"Speler instellingen","homeassistant":"Home Assistant integratie","web":"Webserver","http_streamer":"Ingebouwde (sox gebaseerde) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Bestandssysteem","chromecast":"Chromecast","squeezebox":"Squeezebox ondersteuning","sonos":"Sonos","webplayer":"Web Player (alleen Chrome browser)","username":"Gebruikersnaam","password":"Wachtwoord","hostname":"Hostnaam (of IP)","port":"Poort","hass_url":"URL naar homeassistant (b.v. https://homeassistant:8123)","hass_token":"Token met lange levensduur","hass_publish":"Publiceer spelers naar Home Assistant","hass_player_power":"Verbind speler aan/uit met homeassistant entity","hass_player_source":"Benodigde bron op de verbonden homeassistant entity (optioneel)","hass_player_volume":"Verbind volume van speler aan een homeassistant entity","web_ssl_cert":"Pad naar ssl certificaat bestand","web_ssl_key":"Pad naar ssl certificaat key bestand","player_enabled":"Speler inschakelen","player_name":"Aangepaste naam voor deze speler","player_group_with":"Groupeer deze speler met een andere (hoofd)speler","player_mute_power":"Gebruik mute als aan/uit","player_disable_vol":"Schakel volume bediening helemaal uit","player_group_vol":"Pas groep volume toe op onderliggende spelers (alleen groep spelers)","player_group_pow":"Pas groep aan/uit toe op onderliggende spelers (alleen groep spelers)","player_power_play":"Automatisch afspelen bij inschakelen","file_prov_music_path":"Pad naar muziek bestanden","file_prov_playlists_path":"Pad naar playlist bestanden (.m3u)","web_http_port":"HTTP poort","web_https_port":"HTTPS poort","cert_fqdn_host":"Hostname (FQDN van certificaat)","enable_r128_volume_normalisation":"Schakel R128 volume normalisatie in","target_volume_lufs":"Doelvolume (R128 standaard is -23 LUFS)","fallback_gain_correct":"Fallback gain correctie indien R128 meting (nog) niet beschikbaar is","enable_audio_cache":"Sta het cachen van audio toe naar temp map","trim_silence":"Strip stilte van begin en eind van audio (in temp bestanden)","http_streamer_sox_effects":"Eigen sox effects toepassen op audio (alleen voor ingebouwde streamer). Zie http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximale sample rate welke deze speler ondersteund, hoger wordt gedownsampled.","force_http_streamer":"Forceer het gebruik van de ingebouwde streamer, ook al heeft de speler directe ondersteuning voor de muziek provider","not_grouped":"Niet gegroepeerd","conf_saved":"Configuratie is opgeslagen, herstart om actief te maken","audio_cache_folder":"Map om te gebruiken voor cache bestanden","audio_cache_max_size_gb":"Maximale grootte van de cache map in GB.","gapless_enabled":"Schakel ondersteuning voor gapless in.","crossfade_duration":"Crossfade (in seconden, 0 om uit te schakelen)."},"players":"Spelers","play":"Afspelen","play_on":"Afspelen op:","play_now":"Nu afspelen","play_next":"Speel als volgende af","add_queue":"Voeg toe aan wachtrij","show_info":"Bekijk informatie","queue_next_tracks":"Aankomend","queue_previous_tracks":"Reeds afgespeeld","read_more":"meer lezen","state":{"playing":"afspelen","stopped":"gestopt","paused":"gepauzeerd","off":"uitgeschakeld"}}')},bd18:function(e,t,r){e.exports=r.p+"img/squeezebox.60631223.png"},cf05:function(e,t,r){e.exports=r.p+"img/logo.c079bd97.png"},d3cc:function(e,t,r){"use strict";var i=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("v-list-item",{attrs:{ripple:""},on:{click:function(t){return e.$emit("click",e.item)}}},[e.hideavatar?e._e():i("v-list-item-avatar",{attrs:{tile:"",color:"grey"}},[i("img",{staticStyle:{border:"1px solid rgba(0,0,0,.22)"},attrs:{src:e.$server.getImageUrl(e.item,"image",80),"lazy-src":r("71db")}})]),i("v-list-item-content",[i("v-list-item-title",[e._v(" "+e._s(e.item.name)+" "),e.item.version?i("span",[e._v("("+e._s(e.item.version)+")")]):e._e()]),e.item.artists?i("v-list-item-subtitle",[e._l(e.item.artists,(function(t,r){return i("span",{key:t.item_id},[i("a",{on:{click:[function(r){return e.artistClick(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),r+1<e.item.artists.length?i("label",{key:r},[e._v("/")]):e._e()])})),e.item.album&&e.hidetracknum?i("a",{staticStyle:{color:"grey"},on:{click:[function(t){return e.albumClick(e.item.album)},function(e){e.stopPropagation()}]}},[e._v(" - "+e._s(e.item.album.name))]):e._e(),!e.hidetracknum&&e.item.track_number?i("label",{staticStyle:{color:"grey"}},[e._v("- disc "+e._s(e.item.disc_number)+" track "+e._s(e.item.track_number))]):e._e()],2):e._e(),e.item.artist?i("v-list-item-subtitle",[i("a",{on:{click:[function(t){return e.artistClick(e.item.artist)},function(e){e.stopPropagation()}]}},[e._v(e._s(e.item.artist.name))])]):e._e(),e.item.owner?i("v-list-item-subtitle",[e._v(e._s(e.item.owner))]):e._e()],1),e.hideproviders?e._e():i("v-list-item-action",[i("ProviderIcons",{attrs:{providerIds:e.item.provider_ids,height:20}})],1),e.isHiRes?i("v-list-item-action",[i("img",{attrs:{src:r("f5e3"),height:"20"}})]):e._e(),e.hidelibrary?e._e():i("v-list-item-action",[i("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("v-btn",e._g({attrs:{icon:"",ripple:""},on:{click:[function(t){return e.toggleLibrary(e.item)},function(e){e.stopPropagation()}]}},r),[e.item.in_library.length>0?i("v-icon",{attrs:{height:"20"}},[e._v("favorite")]):e._e(),0==e.item.in_library.length?i("v-icon",{attrs:{height:"20"}},[e._v("favorite_border")]):e._e()],1)]}}],null,!1,993341054)},[e.item.in_library.length>0?i("span",[e._v(e._s(e.$t("remove_library")))]):e._e(),0==e.item.in_library.length?i("span",[e._v(e._s(e.$t("add_library")))]):e._e()])],1),!e.hideduration&&e.item.duration?i("v-list-item-action",[e._v(e._s(e.item.duration.toString().formatDuration()))]):e._e(),e.hidemenu?e._e():i("v-icon",{staticStyle:{"margin-right":"-10px","padding-left":"10px"},attrs:{color:"grey lighten-1"},on:{click:[function(t){return e.$emit("menuClick",e.item)},function(e){e.stopPropagation()}]}},[e._v("more_vert")])],1),i("v-divider")],1)},a=[],s=(r("a4d3"),r("e01a"),r("d28b"),r("a9e3"),r("d3b7"),r("3ca3"),r("ddb0"),r("2b0e")),n=r("e00a"),o=s["a"].extend({components:{ProviderIcons:n["a"]},props:{item:Object,index:Number,totalitems:Number,hideavatar:Boolean,hidetracknum:Boolean,hideproviders:Boolean,hidemenu:Boolean,hidelibrary:Boolean,hideduration:Boolean},data:function(){return{}},computed:{isHiRes:function(){var e=!0,t=!1,r=void 0;try{for(var i,a=this.item.provider_ids[Symbol.iterator]();!(e=(i=a.next()).done);e=!0){var s=i.value;if(s.quality>6)return!0}}catch(n){t=!0,r=n}finally{try{e||null==a.return||a.return()}finally{if(t)throw r}}return!1}},mounted:function(){},methods:{artistClick:function(e){var t="/artists/"+e.item_id;this.$router.push({path:t,query:{provider:e.provider}})},albumClick:function(e){var t="/albums/"+e.item_id;this.$router.push({path:t,query:{provider:e.provider}})},toggleLibrary:function(e){this.$server.toggleLibrary(e)}}}),l=o,c=r("2877"),u=r("6544"),p=r.n(u),d=r("8336"),m=r("ce7e"),h=r("132d"),v=r("da13"),f=r("1800"),y=r("8270"),g=r("5d23"),A=r("3a2f"),b=Object(c["a"])(l,i,a,!1,null,null,null);t["a"]=b.exports;p()(b,{VBtn:d["a"],VDivider:m["a"],VIcon:h["a"],VListItem:v["a"],VListItemAction:f["a"],VListItemAvatar:y["a"],VListItemContent:g["a"],VListItemSubtitle:g["b"],VListItemTitle:g["c"],VTooltip:A["a"]})},e00a:function(e,t,r){"use strict";var i=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._l(e.uniqueProviders,(function(t){return i("img",{key:t.provider,staticStyle:{"margin-right":"6px","margin-top":"6px"},attrs:{height:e.height,src:r("9e01")("./"+t.provider+".png")}})})),0)},a=[],s=(r("4160"),r("c975"),r("a9e3"),r("159b"),r("2b0e")),n=s["a"].extend({props:{providerIds:Array,height:Number},data:function(){return{isHiRes:!1}},computed:{uniqueProviders:function(){var e=[],t=[];return this.providerIds?(this.providerIds.forEach((function(r){var i=r["provider"];-1===t.indexOf(i)&&(t.push(i),e.push(r))})),e):[]}},mounted:function(){},methods:{}}),o=n,l=r("2877"),c=Object(l["a"])(o,i,a,!1,null,null,null);t["a"]=c.exports},e428:function(e,t,r){e.exports=r.p+"img/tunein.ca1c1bb0.png"},edbf:function(e,t,r){e.exports=r.p+"img/web.798ba28f.png"},edd4:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artists","albums":"Albums","tracks":"Tracks","playlists":"Playlists","playlist_tracks":"Playlist tracks","radios":"Radio","search":"Search","settings":"Settings","queue":"Queue","artist_toptracks":"Top tracks","artist_albums":"Albums","album_tracks":"Album tracks","album_versions":"Versions","track_versions":"Versions","type_to_search":"Type here to search...","add_library":"Add to library","remove_library":"Remove from library","add_playlist":"Add to playlist...","remove_playlist":"Remove from playlist","no_player":"No player selected","reboot_required":"A reboot is required to activate the new settings!","conf":{"enabled":"Enabled","base":"Generic settings","musicproviders":"Music providers","playerproviders":"Player providers","player_settings":"Player settings","homeassistant":"Home Assistant integration","web":"Webserver","http_streamer":"Built-in (sox based) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Filesystem","chromecast":"Chromecast","squeezebox":"Squeezebox support","sonos":"Sonos","webplayer":"Web Player (Chrome browser only)","username":"Username","password":"Password","hostname":"Hostname (or IP)","port":"Port","hass_url":"URL to homeassistant (e.g. https://homeassistant:8123)","hass_token":"Long Lived Access Token","hass_publish":"Publish players to Home Assistant","hass_player_power":"Attach player power to homeassistant entity","hass_player_source":"Source on the homeassistant entity (optional)","hass_player_volume":"Attach player volume to homeassistant entity","web_ssl_cert":"Path to ssl certificate file","web_ssl_key":"Path to ssl keyfile","player_enabled":"Enable player","player_name":"Custom name for this player","player_group_with":"Group this player to another (parent)player","player_mute_power":"Use muting as power control","player_disable_vol":"Disable volume controls","player_group_vol":"Apply group volume to childs (for group players only)","player_group_pow":"Apply group power based on childs (for group players only)","player_power_play":"Issue play command on power on","file_prov_music_path":"Path to music files","file_prov_playlists_path":"Path to playlists (.m3u)","web_http_port":"HTTP port","web_https_port":"HTTPS port","cert_fqdn_host":"FQDN of hostname in certificate","enable_r128_volume_normalisation":"Enable R128 volume normalization","target_volume_lufs":"Target volume (R128 default is -23 LUFS)","fallback_gain_correct":"Fallback gain correction if R128 readings not (yet) available","enable_audio_cache":"Allow caching of audio to temp files","trim_silence":"Strip silence from beginning and end of audio (temp files only!)","http_streamer_sox_effects":"Custom sox effects to apply to audio (built-in streamer only!) See http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximum sample rate this player supports, higher will be downsampled","force_http_streamer":"Force use of built-in streamer, even if the player can handle the music provider directly","not_grouped":"Not grouped","conf_saved":"Configuration saved, restart app to make effective","audio_cache_folder":"Directory to use for cache files","audio_cache_max_size_gb":"Maximum size of the cache folder (GB)","gapless_enabled":"Enable gapless support","crossfade_duration":"Crossfade duration (in seconds, 0 to disable)"},"players":"Players","play":"Play","play_on":"Play on:","play_now":"Play Now","play_next":"Play Next","add_queue":"Add to Queue","show_info":"Show info","queue_next_tracks":"Next tracks","queue_previous_tracks":"Played tracks","read_more":"read more","state":{"playing":"playing","stopped":"stopped","paused":"paused","off":"off"}}')},f1d4:function(e,t){e.exports="data:image/png;base64,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"},f5e3:function(e,t,r){e.exports=r.p+"img/hires.e97b001e.png"},fb30:function(e,t){e.exports="data:image/png;base64,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"}});
-//# sourceMappingURL=app.df1cf09c.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/app.df1cf09c.js.map b/music_assistant/web/js/app.df1cf09c.js.map
deleted file mode 100644 (file)
index e96b03e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/qobuz.png","webpack:///./src/components/PlayerOSD.vue?7efa","webpack:///./src/assets/spotify.png","webpack:///./src/assets/http_streamer.png","webpack:///./src/assets/homeassistant.png","webpack:///./src/assets/webplayer.png","webpack:///./src/locales sync [A-Za-z0-9-_,\\s]+\\.json$/","webpack:///./src/assets/default_artist.png","webpack:///./src/App.vue?3ac1","webpack:///./src/components/NavigationMenu.vue?e8ea","webpack:///src/components/NavigationMenu.vue","webpack:///./src/components/NavigationMenu.vue?f679","webpack:///./src/components/NavigationMenu.vue","webpack:///./src/components/TopBar.vue?0694","webpack:///src/components/TopBar.vue","webpack:///./src/components/TopBar.vue?8cdd","webpack:///./src/components/TopBar.vue","webpack:///./src/components/ContextMenu.vue?3153","webpack:///src/components/ContextMenu.vue","webpack:///./src/components/ContextMenu.vue?03fa","webpack:///./src/components/ContextMenu.vue","webpack:///./src/components/PlayerOSD.vue?57e2","webpack:///./src/components/VolumeControl.vue?3471","webpack:///src/components/VolumeControl.vue","webpack:///./src/components/VolumeControl.vue?0e80","webpack:///./src/components/VolumeControl.vue","webpack:///src/components/PlayerOSD.vue","webpack:///./src/components/PlayerOSD.vue?1917","webpack:///./src/components/PlayerOSD.vue?3e15","webpack:///./src/components/PlayerSelect.vue?2a3e","webpack:///src/components/PlayerSelect.vue","webpack:///./src/components/PlayerSelect.vue?ed4c","webpack:///./src/components/PlayerSelect.vue?2bb5","webpack:///src/App.vue","webpack:///./src/App.vue?0bd2","webpack:///./src/App.vue","webpack:///./src/registerServiceWorker.js","webpack:///./src/views/Home.vue?1af8","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?f351","webpack:///./src/views/Home.vue","webpack:///./src/views/Browse.vue?c202","webpack:///src/views/Browse.vue","webpack:///./src/views/Browse.vue?0b2d","webpack:///./src/views/Browse.vue","webpack:///./src/router/index.js","webpack:///./src/i18n.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/plugins/store.js","webpack:///./src/plugins/server.js","webpack:///./src/main.js","webpack:///./src/assets/chromecast.png","webpack:///./src/components/PlayerSelect.vue?1de5","webpack:///./src/assets/file.png","webpack:///./src/assets/sonos.png","webpack:///./src/assets/vorbis.png","webpack:///./src/assets/aac.png","webpack:///./src/assets sync ^\\.\\/.*\\.png$","webpack:///./src/assets/squeezebox.png","webpack:///./src/assets/logo.png","webpack:///./src/components/ListviewItem.vue?d722","webpack:///src/components/ListviewItem.vue","webpack:///./src/components/ListviewItem.vue?6ea0","webpack:///./src/components/ListviewItem.vue","webpack:///./src/components/ProviderIcons.vue?a96b","webpack:///src/components/ProviderIcons.vue","webpack:///./src/components/ProviderIcons.vue?97c3","webpack:///./src/components/ProviderIcons.vue","webpack:///./src/assets/tunein.png","webpack:///./src/assets/web.png","webpack:///./src/assets/mp3.png","webpack:///./src/assets/hires.png","webpack:///./src/assets/flac.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","jsonpArray","window","oldJsonpFunction","slice","map","webpackContext","req","id","webpackContextResolve","keys","_vm","this","_h","$createElement","_c","_self","attrs","$route","path","showPlayerSelect","$store","loading","staticRenderFns","model","callback","$$v","$set","expression","_l","item","title","on","$event","$router","_v","_s","icon","showNavigationMenu","props","items","mounted","methods","component","VBtn","VIcon","VList","VListItem","VListItemAction","VListItemContent","VListItemTitle","VNavigationDrawer","topBarColor","staticClass","staticStyle","windowtitle","_e","go","$server","$emit","String","default","Boolean","VAppBar","VLayout","VSpacer","VToolbarTitle","VToolbar","visible","playlists","header","subheader","label","itemCommand","action","$t","index","item_id","playlistSelected","components","ListviewItem","watch","menuItems","curItem","curPlaylist","mediaPlayItems","showTrackInfoItem","addToPlaylistItem","removeFromPlaylistItem","playerQueueItems","created","$on","showContextMenu","showPlayMenu","beforeDestroy","$off","computed","playlist","media_type","is_editable","cmd","query","showPlaylistsMenu","playlistAddRemove","playItem","url","$axios","VCard","VDialog","VDivider","VListItemAvatar","VSubheader","getImageUrl","curQueueItem","activePlayer","artist","artistindex","clickItem","stopPropagation","artists","playerCurTimeStr","playerTotalTimeStr","style","progressBarWidth","progress","playerCommand","state","isMobile","nativeOn","preventDefault","scopedSlots","_u","fn","ref","_g","Math","round","volume_level","players","player_id","is_group","child_id","powered","togglePlayerPower","disable_volume","setPlayerVolume","volumePlayerIds","allIds","playerId","newVolume","VListItemSubtitle","VSlider","VolumeControl","curQueueItemId","val","getData","endpoint","cur_queue_item","totalSecs","duration","curSecs","cur_time","curPercent","toString","formatDuration","innerWidth","cmd_opt","activePlayerId","VFlex","VFooter","VMenu","VProgressLinear","switchPlayer","filteredPlayerIds","show","getAvailablePlayers","enabled","group_parents","VCardTitle","NavigationMenu","TopBar","ContextMenu","PlayerOSD","PlayerSelect","serverAddress","loc","origin","pathname","connect","VApp","VContent","VOverlay","VProgressCircular","register","process","ready","registered","cached","updatefound","updated","offline","domProps","VListItemIcon","itemClicked","menuClick","mediatype","provider","selected","getItems","Vue","use","VueRouter","routes","Home","route","params","Browse","router","loadLocaleMessages","locales","require","messages","forEach","matched","match","locale","VueI18n","navigator","language","split","fallbackLocale","Vuetify","icons","iconfont","globalStore","isInStandaloneMode","handleWindowOptions","addEventListener","destroyed","removeEventListener","body","clientWidth","standalone","install","options","axiosConfig","_axios","axios","server","_address","_ws","connected","endsWith","wsAddress","replace","WebSocket","onopen","_onWsConnect","onmessage","_onWsMessage","onclose","_onWsClose","_onWsError","toggleLibrary","in_library","mediaItem","imageType","size","postData","post","msgDetails","cmd_args","send","JSON","stringify","message_details","queueOpt","newPlayerId","localStorage","setItem","msg","parse","set","_selectActivePlayer","delete","close","lastPlayerId","getItem","config","productionTip","VueVirtualScroller","store","secNum","parseInt","hours","floor","minutes","seconds","i18n","vuetify","render","h","App","$mount","hideavatar","version","artistClick","album","hidetracknum","albumClick","track_number","disc_number","owner","hideproviders","provider_ids","hidelibrary","hideduration","hidemenu","ProviderIcons","Number","totalitems","isHiRes","VTooltip","prov","height","providerIds","Array","uniqueProviders","output","indexOf"],"mappings":"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","file":"js/app.df1cf09c.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"config~search\":\"config~search\",\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"search\":\"search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\"}[chunkId]||chunkId) + \".\" + {\"config~search\":\"9f3e890b\",\"config\":\"328c2668\",\"itemdetails~playerqueue~search\":\"1e2b2bfd\",\"search\":\"5fcda21d\",\"itemdetails\":\"b7fcbe37\",\"playerqueue\":\"39a08978\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"config~search\":1,\"config\":1,\"itemdetails~playerqueue~search\":1,\"itemdetails\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"config~search\":\"config~search\",\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"search\":\"search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\"}[chunkId]||chunkId) + \".\" + {\"config~search\":\"af60f7e1\",\"config\":\"18def958\",\"itemdetails~playerqueue~search\":\"93e2919b\",\"search\":\"31d6cfe0\",\"itemdetails\":\"bd2e4eb1\",\"playerqueue\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","module.exports = __webpack_public_path__ + \"img/qobuz.c7eb9a76.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=5f737c49&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=5f737c49&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/spotify.1f3fb1af.png\";","module.exports = __webpack_public_path__ + \"img/http_streamer.4c4e4880.png\";","module.exports = __webpack_public_path__ + \"img/homeassistant.29fe3282.png\";","module.exports = __webpack_public_path__ + \"img/webplayer.8e1a0da9.png\";","var map = {\n\t\"./en.json\": \"edd4\",\n\t\"./nl.json\": \"a625\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"49f8\";","module.exports = __webpack_public_path__ + \"img/default_artist.7305b29c.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{attrs:{\"light\":\"\"}},[_c('TopBar'),_c('NavigationMenu'),_c('v-content',[_c('router-view',{key:_vm.$route.path,attrs:{\"app\":\"\"}})],1),_c('PlayerOSD',{attrs:{\"showPlayerSelect\":_vm.showPlayerSelect}}),_c('ContextMenu'),_c('PlayerSelect'),_c('v-overlay',{attrs:{\"value\":_vm.$store.loading}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"size\":\"64\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"dark\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\"},model:{value:(_vm.$store.showNavigationMenu),callback:function ($$v) {_vm.$set(_vm.$store, \"showNavigationMenu\", $$v)},expression:\"$store.showNavigationMenu\"}},[_c('v-list',[_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)],1)}),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-navigation-drawer dark app clipped temporary v-model=\"$store.showNavigationMenu\">\n    <v-list>\n      <v-list-item v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n        <v-list-item-action>\n          <v-icon>{{ item.icon }}</v-icon>\n        </v-list-item-action>\n        <v-list-item-content>\n          <v-list-item-title>{{ item.title }}</v-list-item-title>\n        </v-list-item-content>\n      </v-list-item>\n      <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" />\n    </v-list>\n  </v-navigation-drawer>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n  props: {},\n  data () {\n    return {\n      items: [\n        { title: this.$t('home'), icon: 'home', path: '/' },\n        { title: this.$t('artists'), icon: 'person', path: '/artists' },\n        { title: this.$t('albums'), icon: 'album', path: '/albums' },\n        { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n        { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n        { title: this.$t('radios'), icon: 'radio', path: '/radios' },\n        { title: this.$t('search'), icon: 'search', path: '/search' },\n        { title: this.$t('settings'), icon: 'settings', path: '/config' }\n      ]\n    }\n  },\n  mounted () { },\n  methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavigationMenu.vue?vue&type=template&id=5fe9f182&\"\nimport script from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VIcon,VList,VListItem,VListItemAction,VListItemContent,VListItemTitle,VNavigationDrawer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app-bar',{attrs:{\"app\":\"\",\"scroll-off-screen\":\"\",\"hide-on-scroll\":\"\",\"flat\":\"\",\"dense\":\"\",\"dark\":\"\",\"color\":_vm.$store.topBarColor}},[_c('v-layout',[(_vm.$store.topBarColor != 'transparent')?_c('v-toolbar-title',{staticClass:\"body-1\",staticStyle:{\"position\":\"fixed\",\"width\":\"100%\",\"text-align\":\"center\",\"vertical-align\":\"center\",\"margin-top\":\"11px\"}},[_vm._v(_vm._s(_vm.$store.windowtitle))]):_vm._e(),_c('v-btn',{staticStyle:{\"margin-left\":\"-13px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}},[_c('v-icon',[_vm._v(\"menu\")])],1),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}},[_c('v-icon',[_vm._v(\"arrow_back\")])],1),_c('v-spacer'),_c('v-btn',{staticStyle:{\"margin-right\":\"-23px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showContextMenu')}}},[_c('v-icon',[_vm._v(\"more_vert\")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-app-bar app scroll-off-screen hide-on-scroll flat dense dark :color=\"$store.topBarColor\">\n    <v-layout>\n      <v-toolbar-title class=\"body-1\" v-if=\"$store.topBarColor != 'transparent'\" style=\"position:fixed;width:100%;text-align:center;vertical-align:center;margin-top:11px;\">{{ $store.windowtitle }}</v-toolbar-title>\n      <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" style=\"margin-left:-13px\">\n        <v-icon>menu</v-icon>\n      </v-btn>\n      <v-btn @click=\"$router.go(-1)\" icon>\n        <v-icon>arrow_back</v-icon>\n      </v-btn>\n      <v-spacer></v-spacer>\n      <v-btn icon @click=\"$server.$emit('showContextMenu')\" style=\"margin-right:-23px\">\n        <v-icon>more_vert</v-icon>\n      </v-btn>\n    </v-layout>\n  </v-app-bar>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n  props: {\n    'color': {\n      type: String,\n      default: '#424242'\n    },\n    'fixed': {\n      type: Boolean,\n      default: true\n    },\n    'context': {\n      type: Object,\n      default: null\n    }\n  },\n  data () {\n    return {\n    }\n  },\n  mounted () { },\n  methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=a42a6424&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VAppBar,VBtn,VIcon,VLayout,VSpacer,VToolbarTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"max-width\":\"500px\"},on:{\"input\":function($event){return _vm.$emit('input', $event)}},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card',[(_vm.playlists.length === 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),(_vm.subheader)?_c('v-subheader',[_vm._v(_vm._s(_vm.subheader))]):_vm._e(),_vm._l((_vm.menuItems),function(item){return _c('div',{key:item.label},[_c('v-list-item',{on:{\"click\":function($event){return _vm.itemCommand(item.action)}}},[_c('v-list-item-avatar',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(item.label)))])],1)],1),_c('v-divider')],1)})],2):_vm._e(),(_vm.playlists.length > 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),_vm._l((_vm.playlists),function(item,index){return _c('listviewItem',{key:item.item_id,attrs:{\"item\":item,\"totalitems\":_vm.playlists.length,\"index\":index,\"hideavatar\":false,\"hidetracknum\":true,\"hideproviders\":false,\"hidelibrary\":true,\"hidemenu\":true},on:{\"click\":_vm.playlistSelected}})})],2):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <v-dialog v-model=\"visible\" @input=\"$emit('input', $event)\" max-width=\"500px\">\r\n    <v-card>\r\n      <!-- normal contextmenu items -->\r\n      <v-list v-if=\"playlists.length === 0\">\r\n        <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n        <v-subheader v-if=\"subheader\">{{ subheader }}</v-subheader>\r\n        <div v-for=\"item of menuItems\" :key=\"item.label\">\r\n          <v-list-item @click=\"itemCommand(item.action)\">\r\n            <v-list-item-avatar>\r\n              <v-icon>{{item.icon}}</v-icon>\r\n            </v-list-item-avatar>\r\n            <v-list-item-content>\r\n              <v-list-item-title>{{ $t(item.label) }}</v-list-item-title>\r\n            </v-list-item-content>\r\n          </v-list-item>\r\n          <v-divider></v-divider>\r\n        </div>\r\n      </v-list>\r\n      <!-- playlists selection -->\r\n      <v-list v-if=\"playlists.length > 0\">\r\n        <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n        <listviewItem\r\n          v-for=\"(item, index) in playlists\"\r\n          :key=\"item.item_id\"\r\n          v-bind:item=\"item\"\r\n          v-bind:totalitems=\"playlists.length\"\r\n          v-bind:index=\"index\"\r\n          :hideavatar=\"false\"\r\n          :hidetracknum=\"true\"\r\n          :hideproviders=\"false\"\r\n          :hidelibrary=\"true\"\r\n          :hidemenu=\"true\"\r\n          @click=\"playlistSelected\"\r\n        ></listviewItem>\r\n      </v-list>\r\n    </v-card>\r\n  </v-dialog>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ListviewItem from '@/components/ListviewItem.vue'\r\n\r\nexport default Vue.extend({\r\n  components:\r\n  {\r\n    ListviewItem\r\n  },\r\n  props:\r\n    {},\r\n  watch:\r\n    {},\r\n  data () {\r\n    return {\r\n      visible: false,\r\n      menuItems: [],\r\n      header: '',\r\n      subheader: '',\r\n      curItem: null,\r\n      curPlaylist: null,\r\n      mediaPlayItems: [\r\n        {\r\n          label: 'play_now',\r\n          action: 'play',\r\n          icon: 'play_circle_outline'\r\n        },\r\n        {\r\n          label: 'play_next',\r\n          action: 'next',\r\n          icon: 'queue_play_next'\r\n        },\r\n        {\r\n          label: 'add_queue',\r\n          action: 'add',\r\n          icon: 'playlist_add'\r\n        }\r\n      ],\r\n      showTrackInfoItem: {\r\n        label: 'show_info',\r\n        action: 'info',\r\n        icon: 'info'\r\n      },\r\n      addToPlaylistItem: {\r\n        label: 'add_playlist',\r\n        action: 'add_playlist',\r\n        icon: 'add_circle_outline'\r\n      },\r\n      removeFromPlaylistItem: {\r\n        label: 'remove_playlist',\r\n        action: 'remove_playlist',\r\n        icon: 'remove_circle_outline'\r\n      },\r\n      playerQueueItems: [],\r\n      playlists: []\r\n    }\r\n  },\r\n  mounted () { },\r\n  created () {\r\n    this.$server.$on('showContextMenu', this.showContextMenu)\r\n    this.$server.$on('showPlayMenu', this.showPlayMenu)\r\n  },\r\n  beforeDestroy () {\r\n    this.$server.$off('showContextMenu')\r\n    this.$server.$off('showPlayMenu')\r\n  },\r\n  computed: {\r\n  },\r\n  methods: {\r\n    showContextMenu (item, playlist = null) {\r\n      this.curItem = item\r\n      this.curPlaylist = playlist\r\n      if (!item) return\r\n      if (item.media_type === 3) {\r\n        // track item in list\r\n        let items = []\r\n        items.push(...this.mediaPlayItems)\r\n        items.push(this.showTrackInfoItem)\r\n        items.push(this.addToPlaylistItem)\r\n        if (!!playlist && playlist.is_editable) {\r\n          items.push(this.removeFromPlaylistItem)\r\n        }\r\n        this.menuItems = items\r\n      } else {\r\n        // all other playable media\r\n        this.menuItems = this.mediaPlayItems\r\n      }\r\n      this.header = item.name\r\n      this.subheader = ''\r\n      this.visible = true\r\n    },\r\n    showPlayMenu (item) {\r\n      this.curItem = item\r\n      if (!item) return\r\n      this.menuItems = this.mediaPlayItems\r\n      this.header = item.name\r\n      this.subheader = ''\r\n      this.visible = true\r\n    },\r\n    itemCommand (cmd) {\r\n      if (cmd === 'info') {\r\n        // show track info\r\n        this.$router.push({\r\n          path: '/tracks/' + this.curItem.item_id,\r\n          query: { provider: this.curItem.provider }\r\n        })\r\n        this.visible = false\r\n      } else if (cmd === 'add_playlist') {\r\n        // add to playlist\r\n        return this.showPlaylistsMenu()\r\n      } else if (cmd === 'remove_playlist') {\r\n        // remove track from playlist\r\n        this.playlistAddRemove(\r\n          this.curItem,\r\n          this.curPlaylist.item_id,\r\n          'playlist_remove'\r\n        )\r\n        this.visible = false\r\n      } else {\r\n        // assume play command\r\n        this.$server.playItem(this.curItem, cmd)\r\n        this.visible = false\r\n      }\r\n    },\r\n    playlistSelected (playlistobj) {\r\n      this.playlistAddRemove(\r\n        this.curItem,\r\n        playlistobj,\r\n        'playlist_add'\r\n      )\r\n      this.visible = false\r\n    },\r\n    playlistAddRemove (track, playlist, action = 'playlist_add') {\r\n      /// add or remove track on playlist\r\n      var url = `${this.$store.server}api/track/${track.item_id}`\r\n      this.$axios\r\n        .get(url, {\r\n          params: {\r\n            provider: track.provider,\r\n            action: action,\r\n            action_details: playlist.item_id\r\n          }\r\n        })\r\n        .then(result => {\r\n          // reload listing\r\n          if (action === 'playlist_remove') this.$router.go()\r\n        })\r\n    },\r\n    async showPlaylistsMenu () {\r\n      // get all editable playlists\r\n      const url = this.$store.apiAddress + 'playlists'\r\n      let trackProviders = []\r\n      for (let item of this.curItem.provider_ids) {\r\n        trackProviders.push(item.provider)\r\n      }\r\n      let result = await this.$axios.get(url, {})\r\n      let items = []\r\n      for (var playlist of result.data) {\r\n        if (\r\n          playlist.is_editable &&\r\n          playlist.item_id !== this.curPlaylist.item_id\r\n        ) {\r\n          for (let item of playlist.provider_ids) {\r\n            if (trackProviders.includes(item.provider)) {\r\n              items.push(playlist)\r\n              break\r\n            }\r\n          }\r\n        }\r\n      }\r\n      this.playlists = items\r\n    }\r\n  }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContextMenu.vue?vue&type=template&id=05efa336&\"\nimport script from \"./ContextMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContextMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VCard,VDialog,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemTitle,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-footer',{staticStyle:{\"background-color\":\"#424242\"},attrs:{\"app\":\"\",\"fixed\":\"\",\"padless\":\"\",\"light\":\"\",\"elevation\":\"10\"}},[_c('v-card',{staticClass:\"flex\",attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"transparent\"}},[_c('v-list-item',{staticStyle:{\"background-color\":\"#E0E0E0\",\"margin-top\":\"1px\"},attrs:{\"dense\":\"\",\"two-line\":\"\"}},[(_vm.curQueueItem)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.54)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.curQueueItem),\"lazy-src\":require('../assets/file.png')}})]):_c('v-list-item-avatar',[_c('v-icon',[_vm._v(\"speaker\")])],1),_c('v-list-item-content',[(_vm.curQueueItem)?_c('v-list-item-title',{staticClass:\"title\",staticStyle:{\"height\":\"19px\"}},[_vm._v(\" \"+_vm._s(_vm.curQueueItem.name))]):(_vm.$server.activePlayer)?_c('v-list-item-title',{staticClass:\"title\"},[_vm._v(\" \"+_vm._s(_vm.$server.activePlayer.name))]):_vm._e(),(_vm.curQueueItem)?_c('v-list-item-subtitle',{staticClass:\"subtitle-1\",staticStyle:{\"font-weight\":\"normal\",\"color\":\"primary\"}},_vm._l((_vm.curQueueItem.artists),function(artist,artistindex){return _c('span',{key:artistindex},[_c('a',{on:{\"click\":[function($event){return _vm.clickItem(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.curQueueItem.artists.length)?_c('label',{key:artistindex},[_vm._v(\" / \")]):_vm._e()])}),0):_vm._e()],1)],1),_c('div',{staticClass:\"body-2\",staticStyle:{\"height\":\"30px\",\"width\":\"100%\",\"color\":\"rgba(0,0,0,.65)\",\"margin-top\":\"-5px\",\"background-color\":\"#E0E0E0\"},attrs:{\"align\":\"center\"}},[(_vm.curQueueItem)?_c('div',{staticStyle:{\"height\":\"12px\",\"margin-left\":\"22px\",\"margin-right\":\"20px\",\"margin-top\":\"2px\"}},[_c('span',{staticClass:\"left\"},[_vm._v(\" \"+_vm._s(_vm.playerCurTimeStr)+\" \")]),_c('span',{staticClass:\"right\"},[_vm._v(\" \"+_vm._s(_vm.playerTotalTimeStr)+\" \")])]):_vm._e()]),_c('v-progress-linear',{style:('margin-top:-22px;margin-left:80px;width:' + _vm.progressBarWidth + 'px;'),attrs:{\"fixed\":\"\",\"light\":\"\",\"value\":_vm.progress}}),_c('v-list-item',{staticStyle:{\"height\":\"50px\",\"margin-bottom\":\"5px\"},attrs:{\"dark\":\"\",\"dense\":\"\"}},[(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('previous')}}},[_c('v-icon',[_vm._v(\"skip_previous\")])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-left\":\"-32px\",\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"x-large\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('play_pause')}}},[_c('v-icon',{attrs:{\"size\":\"50\"}},[_vm._v(_vm._s(_vm.$server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"))])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('next')}}},[_c('v-icon',[_vm._v(\"skip_next\")])],1)],1):_vm._e(),_c('v-list-item-content'),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"padding\":\"28px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/playerqueue/')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"queue_music\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(_vm.$t(\"queue\")))])],1)],1)],1):_vm._e(),(_vm.$server.activePlayer && !_vm.$store.isMobile)?_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":250,\"offset-x\":\"\",\"top\":\"\"},nativeOn:{\"click\":function($event){$event.preventDefault();}},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.activePlayer.volume_level)))])],1)],1)]}}],null,false,1951340450)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":_vm.$server.activePlayer.player_id}})],1)],1):_vm._e(),_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\",\"margin-right\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayersMenu')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"speaker\")]),(_vm.$server.activePlayer)?_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(_vm.$server.activePlayer.name))]):_c('span',{staticClass:\"overline\"})],1)],1)],1)],1),(_vm.$store.isInStandaloneMode)?_c('div',{staticStyle:{\"height\":\"14px\"}}):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-list',[_c('v-list-item',{staticStyle:{\"height\":\"50px\",\"padding-bottom\":\"5\"}},[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-10px\"},attrs:{\"tile\":\"\"}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(_vm._s(_vm.players[_vm.player_id].is_group ? \"speaker_group\" : \"speaker\"))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',[_vm._v(_vm._s(_vm.players[_vm.player_id].name))]),_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.$t(\"state.\" + _vm.players[_vm.player_id].state)))])],1)],1),_c('v-divider'),_vm._l((_vm.volumePlayerIds),function(child_id){return _c('div',{key:child_id},[_c('div',{staticClass:\"body-2\",style:(!_vm.players[child_id].powered\n          ? 'color:rgba(0,0,0,.38);'\n          : 'color:rgba(0,0,0,.54);')},[_c('v-btn',{staticStyle:{\"margin-left\":\"8px\"},style:(!_vm.players[child_id].powered\n            ? 'color:rgba(0,0,0,.38);'\n            : 'color:rgba(0,0,0,.54);'),attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.togglePlayerPower(child_id)}}},[_c('v-icon',[_vm._v(\"power_settings_new\")])],1),_c('span',{staticStyle:{\"margin-left\":\"10px\"}},[_vm._v(_vm._s(_vm.players[child_id].name))]),_c('div',{staticStyle:{\"margin-top\":\"-8px\",\"margin-left\":\"15px\",\"margin-right\":\"15px\",\"height\":\"35px\"}},[(!_vm.players[child_id].disable_volume)?_c('v-slider',{attrs:{\"lazy\":\"\",\"disabled\":!_vm.players[child_id].powered,\"value\":Math.round(_vm.players[child_id].volume_level),\"prepend-icon\":\"volume_down\",\"append-icon\":\"volume_up\"},on:{\"end\":function($event){return _vm.setPlayerVolume(child_id, $event)},\"click:append\":function($event){return _vm.setPlayerVolume(child_id, 'up')},\"click:prepend\":function($event){return _vm.setPlayerVolume(child_id, 'down')}}}):_vm._e()],1)],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <v-card>\n    <v-list>\n    <v-list-item style=\"height:50px;padding-bottom:5;\">\n      <v-list-item-avatar tile style=\"margin-left:-10px;\">\n        <v-icon large>{{\n          players[player_id].is_group ? \"speaker_group\" : \"speaker\"\n        }}</v-icon>\n      </v-list-item-avatar>\n      <v-list-item-content style=\"margin-left:-15px;\">\n        <v-list-item-title>{{ players[player_id].name }}</v-list-item-title>\n        <v-list-item-subtitle>{{\n          $t(\"state.\" + players[player_id].state)\n        }}</v-list-item-subtitle>\n      </v-list-item-content>\n    </v-list-item>\n    <v-divider></v-divider>\n    <div v-for=\"child_id in volumePlayerIds\" :key=\"child_id\">\n      <div\n        class=\"body-2\"\n        :style=\"\n          !players[child_id].powered\n            ? 'color:rgba(0,0,0,.38);'\n            : 'color:rgba(0,0,0,.54);'\n        \"\n      >\n        <v-btn\n          icon\n          @click=\"togglePlayerPower(child_id)\"\n          style=\"margin-left:8px\"\n          :style=\"\n            !players[child_id].powered\n              ? 'color:rgba(0,0,0,.38);'\n              : 'color:rgba(0,0,0,.54);'\n          \"\n        >\n          <v-icon>power_settings_new</v-icon>\n        </v-btn>\n        <span style=\"margin-left:10px\">{{ players[child_id].name }}</span>\n        <div\n          style=\"margin-top:-8px;margin-left:15px;margin-right:15px;height:35px;\"\n        >\n          <v-slider\n            lazy\n            :disabled=\"!players[child_id].powered\"\n            v-if=\"!players[child_id].disable_volume\"\n            :value=\"Math.round(players[child_id].volume_level)\"\n            prepend-icon=\"volume_down\"\n            append-icon=\"volume_up\"\n            @end=\"setPlayerVolume(child_id, $event)\"\n            @click:append=\"setPlayerVolume(child_id, 'up')\"\n            @click:prepend=\"setPlayerVolume(child_id, 'down')\"\n          ></v-slider>\n        </div>\n      </div>\n      <v-divider></v-divider>\n    </div>\n    </v-list>\n  </v-card>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n  props: ['value', 'players', 'player_id'],\n  data () {\n    return {}\n  },\n  computed: {\n    volumePlayerIds () {\n      var allIds = [this.player_id]\n      allIds.push(...this.players[this.player_id].group_childs)\n      return allIds\n    }\n  },\n  mounted () { },\n  methods: {\n    setPlayerVolume: function (playerId, newVolume) {\n      this.players[playerId].volume_level = newVolume\n      if (newVolume === 'up') {\n        this.$server.playerCommand('volume_up', null, playerId)\n      } else if (newVolume === 'down') {\n        this.$server.playerCommand('volume_down', null, playerId)\n      } else {\n        this.$server.playerCommand('volume_set', newVolume, playerId)\n      }\n    },\n    togglePlayerPower: function (playerId) {\n      this.$server.playerCommand('power_toggle', null, playerId)\n    }\n  }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VolumeControl.vue?vue&type=template&id=65f7b2c2&\"\nimport script from \"./VolumeControl.vue?vue&type=script&lang=js&\"\nexport * from \"./VolumeControl.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\ninstallComponents(component, {VBtn,VCard,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VSlider})\n","<template>\n  <v-footer\n    app\n    fixed\n    padless\n    light\n    elevation=\"10\"\n    style=\"background-color: #424242\"\n  >\n    <v-card\n      class=\"flex\"\n      dense\n      flat\n      light\n      subheader\n      tile\n      width=\"100%\"\n      color=\"transparent\"\n    >\n      <!-- now playing media -->\n      <v-list-item dense two-line style=\"background-color:#E0E0E0;margin-top:1px\">\n        <v-list-item-avatar tile v-if=\"curQueueItem\">\n          <img\n            :src=\"$server.getImageUrl(curQueueItem)\"\n            :lazy-src=\"require('../assets/file.png')\"\n            style=\"border: 1px solid rgba(0,0,0,.54);\"\n          />\n        </v-list-item-avatar>\n        <v-list-item-avatar v-else>\n          <v-icon>speaker</v-icon>\n        </v-list-item-avatar>\n\n        <v-list-item-content>\n          <v-list-item-title class=\"title\" v-if=\"curQueueItem\" style=\"height: 19px\">\n            {{ curQueueItem.name }}</v-list-item-title\n          >\n          <v-list-item-title class=\"title\" v-else-if=\"$server.activePlayer\">\n            {{ $server.activePlayer.name }}</v-list-item-title\n          >\n          <v-list-item-subtitle v-if=\"curQueueItem\" class=\"subtitle-1\" style=\"font-weight:normal;color: primary\">\n            <span\n              v-for=\"(artist, artistindex) in curQueueItem.artists\"\n              :key=\"artistindex\"\n            >\n              <a v-on:click=\"clickItem(artist)\" @click.stop=\"\">{{\n                artist.name\n              }}</a>\n              <label\n                v-if=\"artistindex + 1 < curQueueItem.artists.length\"\n                :key=\"artistindex\"\n              >\n                /\n              </label>\n            </span>\n          </v-list-item-subtitle>\n        </v-list-item-content>\n      </v-list-item>\n\n      <!-- progress bar -->\n      <div\n        class=\"body-2\"\n        style=\"height:30px;width:100%;color:rgba(0,0,0,.65);margin-top:-5px;background-color:#E0E0E0;\"\n        align=\"center\"\n      >\n        <div\n          style=\"height:12px;margin-left:22px;margin-right:20px;margin-top:2px;\"\n          v-if=\"curQueueItem\"\n        >\n          <span class=\"left\">\n            {{ playerCurTimeStr }}\n          </span>\n          <span class=\"right\">\n            {{ playerTotalTimeStr }}\n          </span>\n        </div>\n      </div>\n      <v-progress-linear\n        fixed\n        light\n        :value=\"progress\"\n        :style=\"\n          'margin-top:-22px;margin-left:80px;width:' + progressBarWidth + 'px;'\n        \"\n      />\n\n      <!-- Control buttons -->\n      <v-list-item\n        dark\n        dense\n        style=\"height:50px;margin-bottom:5px;\"\n      >\n        <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n          <v-btn small icon @click=\"playerCommand('previous')\">\n            <v-icon>skip_previous</v-icon>\n          </v-btn>\n        </v-list-item-action>\n        <v-list-item-action\n          v-if=\"$server.activePlayer\"\n          style=\"margin-left:-32px;margin-top:15px\"\n        >\n          <v-btn icon x-large @click=\"playerCommand('play_pause')\">\n            <v-icon size=\"50\">{{\n              $server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"\n            }}</v-icon>\n          </v-btn>\n        </v-list-item-action>\n        <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n          <v-btn icon small @click=\"playerCommand('next')\">\n            <v-icon>skip_next</v-icon>\n          </v-btn>\n        </v-list-item-action>\n        <!-- player controls -->\n        <v-list-item-content> </v-list-item-content>\n\n        <!-- active player queue button -->\n        <v-list-item-action style=\"padding:28px;\" v-if=\"$server.activePlayer\">\n          <v-btn\n            small\n            text\n            icon\n            @click=\"$router.push('/playerqueue/')\"\n          >\n            <v-flex xs12 class=\"vertical-btn\">\n              <v-icon>queue_music</v-icon>\n              <span class=\"overline\">{{ $t(\"queue\") }}</span>\n            </v-flex>\n          </v-btn>\n        </v-list-item-action>\n\n        <!-- active player volume -->\n        <v-list-item-action style=\"padding:20px;\" v-if=\"$server.activePlayer && !$store.isMobile\">\n          <v-menu\n            :close-on-content-click=\"false\"\n            :nudge-width=\"250\"\n            offset-x\n            top\n            @click.native.prevent\n          >\n            <template v-slot:activator=\"{ on }\">\n              <v-btn small icon v-on=\"on\">\n                <v-flex xs12 class=\"vertical-btn\">\n                  <v-icon>volume_up</v-icon>\n                  <span class=\"overline\">{{\n                    Math.round($server.activePlayer.volume_level)\n                  }}</span>\n                </v-flex>\n              </v-btn>\n            </template>\n            <VolumeControl\n              v-bind:players=\"$server.players\"\n              v-bind:player_id=\"$server.activePlayer.player_id\"\n            />\n          </v-menu>\n        </v-list-item-action>\n\n        <!-- active player btn -->\n        <v-list-item-action style=\"padding:20px;margin-right:15px\">\n          <v-btn small text icon @click=\"$server.$emit('showPlayersMenu')\">\n            <v-flex xs12 class=\"vertical-btn\">\n              <v-icon>speaker</v-icon>\n              <span class=\"overline\" v-if=\"$server.activePlayer\">{{\n                $server.activePlayer.name\n              }}</span>\n              <span class=\"overline\" v-else> </span>\n            </v-flex>\n          </v-btn>\n        </v-list-item-action>\n      </v-list-item>\n      <!-- add some additional whitespace in standalone mode only -->\n      <div style=\"height:14px\" v-if=\"$store.isInStandaloneMode\" />\n    </v-card>\n  </v-footer>\n</template>\n\n<style scoped>\n.vertical-btn {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n.divider {\n  height: 1px;\n  width: 100%;\n  background-color: #cccccc;\n}\n.right {\n  float: right;\n}\n.left {\n  float: left;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n  components: {\n    VolumeControl\n  },\n  props: [],\n  data () {\n    return {\n      curQueueItem: null\n    }\n  },\n  watch: {\n    curQueueItemId: function (val) {\n      // get info for current track\n      if (val == null) {\n        this.curQueueItem = null\n      } else {\n        let endpoint = 'players/' + this.$server.activePlayerId + '/queue/' + val\n        this.$server.getData(endpoint)\n          .then(result => {\n            this.curQueueItem = result\n          })\n      }\n    }\n  },\n  computed: {\n    curQueueItemId () {\n      if (this.$server.activePlayer) {\n        return this.$server.activePlayer.cur_queue_item\n      } else {\n        return null\n      }\n    },\n    progress () {\n      if (!this.curQueueItem) return 0\n      var totalSecs = this.curQueueItem.duration\n      var curSecs = this.$server.activePlayer.cur_time\n      var curPercent = curSecs / totalSecs * 100\n      return curPercent\n    },\n    playerCurTimeStr () {\n      if (!this.curQueueItem) return '0:00'\n      if (!this.$server.activePlayer.cur_time) return '0:00'\n      var curSecs = this.$server.activePlayer.cur_time\n      return curSecs.toString().formatDuration()\n    },\n    playerTotalTimeStr () {\n      if (!this.curQueueItem) return '0:00'\n      var totalSecs = this.curQueueItem.duration\n      return totalSecs.toString().formatDuration()\n    },\n    progressBarWidth () {\n      return window.innerWidth - 180\n    }\n  },\n  methods: {\n    playerCommand (cmd, cmd_opt = null) {\n      this.$server.playerCommand(cmd, cmd_opt, this.$server.activePlayerId)\n    }\n  }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerOSD.vue?vue&type=template&id=5f737c49&scoped=true&\"\nimport script from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerOSD.vue?vue&type=style&index=0&id=5f737c49&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5f737c49\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VFooter } from 'vuetify/lib/components/VFooter';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\ninstallComponents(component, {VBtn,VCard,VFlex,VFooter,VIcon,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VProgressLinear})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"right\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\",\"width\":\"300\"},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card-title',{staticClass:\"headline\"},[_c('b',[_vm._v(_vm._s(_vm.$t('players')))])]),_c('v-list',{attrs:{\"dense\":\"\"}},[_c('v-divider'),_vm._l((_vm.filteredPlayerIds),function(playerId){return _c('div',{key:playerId,style:(_vm.$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : '')},[_c('v-list-item',{staticStyle:{\"margin-left\":\"-5px\",\"margin-right\":\"-15px\"},attrs:{\"ripple\":\"\",\"dense\":\"\"},on:{\"click\":function($event){return _vm.$server.switchPlayer(_vm.$server.players[playerId].player_id)}}},[_c('v-list-item-avatar',[_c('v-icon',{attrs:{\"size\":\"45\"}},[_vm._v(_vm._s(_vm.$server.players[playerId].is_group ? 'speaker_group' : 'speaker'))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',{staticClass:\"subtitle-1\"},[_vm._v(_vm._s(_vm.$server.players[playerId].name))]),_c('v-list-item-subtitle',{key:_vm.$server.players[playerId].state,staticClass:\"body-2\",staticStyle:{\"font-weight\":\"normal\"}},[_vm._v(\" \"+_vm._s(_vm.$t('state.' + _vm.$server.players[playerId].state))+\" \")])],1),(_vm.$server.activePlayerId)?_c('v-list-item-action',{staticStyle:{\"padding-right\":\"10px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"close-on-click\":true,\"nudge-width\":250,\"offset-x\":\"\",\"right\":\"\"},nativeOn:{\"click\":[function($event){$event.stopPropagation();},function($event){$event.stopPropagation();$event.preventDefault();}]},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({staticStyle:{\"color\":\"rgba(0,0,0,.54)\"},attrs:{\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.players[playerId].volume_level)))])],1)],1)]}}],null,true)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":playerId}})],1)],1):_vm._e()],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <!-- players side menu -->\n  <v-navigation-drawer\n    right\n    app\n    clipped\n    temporary\n    v-model=\"visible\"\n    width=\"300\"\n  >\n    <v-card-title class=\"headline\">\n      <b>{{ $t('players') }}</b>\n    </v-card-title>\n    <v-list dense>\n      <v-divider></v-divider>\n      <div\n        v-for=\"playerId of filteredPlayerIds\"\n        :key=\"playerId\"\n        :style=\"$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : ''\"\n      >\n        <v-list-item\n          ripple\n          dense\n          style=\"margin-left: -5px; margin-right: -15px\"\n          @click=\"$server.switchPlayer($server.players[playerId].player_id)\"\n        >\n          <v-list-item-avatar>\n            <v-icon size=\"45\">{{ $server.players[playerId].is_group ? 'speaker_group' : 'speaker' }}</v-icon>\n          </v-list-item-avatar>\n          <v-list-item-content style=\"margin-left:-15px;\">\n            <v-list-item-title class=\"subtitle-1\">{{ $server.players[playerId].name }}</v-list-item-title>\n\n            <v-list-item-subtitle\n              class=\"body-2\"\n              style=\"font-weight:normal;\"\n              :key=\"$server.players[playerId].state\"\n            >\n              {{ $t('state.' + $server.players[playerId].state) }}\n            </v-list-item-subtitle>\n\n          </v-list-item-content>\n\n          <v-list-item-action\n            style=\"padding-right:10px;\"\n            v-if=\"$server.activePlayerId\"\n          >\n            <v-menu\n              :close-on-content-click=\"false\"\n              :close-on-click=\"true\"\n              :nudge-width=\"250\"\n              offset-x\n              right\n              @click.native.stop\n              @click.native.stop.prevent\n            >\n              <template v-slot:activator=\"{ on }\">\n                <v-btn\n                  icon\n                  style=\"color:rgba(0,0,0,.54);\"\n                  v-on=\"on\"\n                >\n                  <v-flex\n                    xs12\n                    class=\"vertical-btn\"\n                  >\n                    <v-icon>volume_up</v-icon>\n                    <span class=\"overline\">{{ Math.round($server.players[playerId].volume_level) }}</span>\n                  </v-flex>\n                </v-btn>\n              </template>\n              <VolumeControl\n                v-bind:players=\"$server.players\"\n                v-bind:player_id=\"playerId\"\n              />\n            </v-menu>\n          </v-list-item-action>\n        </v-list-item>\n        <v-divider></v-divider>\n      </div>\n    </v-list>\n  </v-navigation-drawer>\n</template>\n\n<style scoped>\n.vertical-btn {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n  components: {\n    VolumeControl\n  },\n  watch: {\n  },\n  data () {\n    return {\n      filteredPlayerIds: [],\n      visible: false\n    }\n  },\n  computed: {\n  },\n  created () {\n    this.$server.$on('showPlayersMenu', this.show)\n    this.$server.$on('players changed', this.getAvailablePlayers)\n    this.getAvailablePlayers()\n  },\n  beforeDestroy () {\n    this.$server.$off('showPlayersMenu')\n    this.$server.$off('players changed')\n  },\n  methods: {\n    show () {\n      this.visible = true\n    },\n    getAvailablePlayers () {\n      // generate a list of playerIds that we want to show in the list\n      this.filteredPlayerIds = []\n      for (var playerId in this.$server.players) {\n        // we're only interested in enabled players that are not group childs\n        if (this.$server.players[playerId].enabled && this.$server.players[playerId].group_parents.length === 0) {\n          this.filteredPlayerIds.push(playerId)\n        }\n      }\n    }\n  }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerSelect.vue?vue&type=template&id=71935334&scoped=true&\"\nimport script from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerSelect.vue?vue&type=style&index=0&id=71935334&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"71935334\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VCardTitle,VDivider,VFlex,VIcon,VList,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VNavigationDrawer})\n","<template>\n  <v-app light>\n    <TopBar />\n    <NavigationMenu></NavigationMenu>\n    <v-content>\n      <!-- <player></player> -->\n      <router-view app :key=\"$route.path\"></router-view>\n    </v-content>\n    <PlayerOSD :showPlayerSelect=\"showPlayerSelect\" />\n    <ContextMenu/>\n    <PlayerSelect/>\n    <v-overlay :value=\"$store.loading\">\n      <v-progress-circular indeterminate size=\"64\"></v-progress-circular>\n    </v-overlay>\n  </v-app>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport NavigationMenu from './components/NavigationMenu.vue'\nimport TopBar from './components/TopBar.vue'\nimport ContextMenu from './components/ContextMenu.vue'\nimport PlayerOSD from './components/PlayerOSD.vue'\nimport PlayerSelect from './components/PlayerSelect.vue'\n\nexport default Vue.extend({\n  name: 'App',\n  components: {\n    NavigationMenu,\n    TopBar,\n    ContextMenu,\n    PlayerOSD,\n    PlayerSelect\n  },\n  data: () => ({\n    showPlayerSelect: false\n  }),\n  created () {\n    // TODO: retrieve serveraddress through discovery and/or user settings\n    let serverAddress = ''\n    if (process.env.NODE_ENV === 'production') {\n      let loc = window.location\n      serverAddress = loc.origin + loc.pathname\n    } else {\n      serverAddress = 'http://192.168.1.79:8095/'\n    }\n    this.$server.connect(serverAddress)\n  }\n})\n</script>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=e71f20a2&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VOverlay } from 'vuetify/lib/components/VOverlay';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VApp,VContent,VOverlay,VProgressCircular})\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n  register(`${process.env.BASE_URL}service-worker.js`, {\n    ready () {\n      console.log(\n        'App is being served from cache by a service worker.\\n' +\n        'For more details, visit https://goo.gl/AFskqB'\n      )\n    },\n    registered () {\n      console.log('Service worker has been registered.')\n    },\n    cached () {\n      console.log('Content has been cached for offline use.')\n    },\n    updatefound () {\n      console.log('New content is downloading.')\n    },\n    updated () {\n      console.log('New content is available; please refresh.')\n    },\n    offline () {\n      console.log('No internet connection found. App is running in offline mode.')\n    },\n    error (error) {\n      console.error('Error during service worker registration:', error)\n    }\n  })\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-icon',{staticStyle:{\"margin-left\":\"15px\"}},[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(item.title)}})],1)],1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-list tile>\n      <v-list-item tile\n        v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n          <v-list-item-icon style=\"margin-left:15px\">\n            <v-icon>{{ item.icon }}</v-icon>\n          </v-list-item-icon>\n          <v-list-item-content>\n            <v-list-item-title v-text=\"item.title\"></v-list-item-title>\n          </v-list-item-content>\n      </v-list-item>\n    </v-list>\n  </section>\n</template>\n\n<script>\n\nexport default {\n  name: 'home',\n  data () {\n    return {\n      items: [\n        { title: this.$t('artists'), icon: 'person', path: '/artists' },\n        { title: this.$t('albums'), icon: 'album', path: '/albums' },\n        { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n        { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n        { title: this.$t('search'), icon: 'search', path: '/search' }\n      ]\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t('musicassistant')\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=38d5da10&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":item.media_type < 4 ? _vm.$store.isMobile : false,\"hidelibrary\":true,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hideduration\":item.media_type == 5},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-list two-line>\n      <RecycleScroller\n        class=\"scroller\"\n        :items=\"items\"\n        :item-size=\"72\"\n        key-field=\"item_id\"\n        v-slot=\"{ item }\"\n        page-mode\n      >\n        <ListviewItem\n          v-bind:item=\"item\"\n          :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n          :hidetracknum=\"true\"\n          :hideproviders=\"item.media_type < 4 ? $store.isMobile : false\"\n          :hidelibrary=\"true\"\n          :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n          :hideduration=\"item.media_type == 5\"\n          v-on:click=\"itemClicked\"\n          v-on:menuClick=\"menuClick\"\n        ></ListviewItem>\n      </RecycleScroller>\n    </v-list>\n  </section>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n  name: 'browse',\n  components: {\n    ListviewItem\n  },\n  props: {\n    mediatype: String,\n    provider: String\n  },\n  data () {\n    return {\n      selected: [2],\n      items: []\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t(this.mediatype)\n    this.getItems()\n  },\n  methods: {\n    itemClicked (item) {\n      // item in the list is clicked\n      let url = ''\n      if (item.media_type === 1) {\n        url = '/artists/' + item.item_id\n      } else if (item.media_type === 2) {\n        url = '/albums/' + item.item_id\n      } else if (item.media_type === 4) {\n        url = '/playlists/' + item.item_id\n      } else {\n        // assume track (or radio) item\n        this.$server.$emit('showContextMenu', item)\n        return\n      }\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    menuClick (item) {\n      // contextmenu button clicked\n      this.$server.$emit('showContextMenu', item)\n    },\n    async getItems () {\n      // retrieve the full list of items\n      let offset = 0\n      let limit = 50\n      while (true) {\n        let items = await this.$server.getData(this.mediatype, { offset: offset, limit: limit, provider: this.provider })\n        if (!items || items.length === 0) break\n        this.items.push(...items)\n        offset += limit\n        if (items.length < limit) break\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Browse.vue?vue&type=template&id=79b8bda8&\"\nimport script from \"./Browse.vue?vue&type=script&lang=js&\"\nexport * from \"./Browse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VList } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VList})\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Home from '../views/Home.vue'\nimport Browse from '../views/Browse.vue'\n\nVue.use(VueRouter)\n\nconst routes = [\n  {\n    path: '/',\n    name: 'home',\n    component: Home\n  },\n  {\n    path: '/config',\n    name: 'config',\n    component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/config/:configKey',\n    name: 'configKey',\n    component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/search',\n    name: 'search',\n    component: () => import(/* webpackChunkName: \"search\" */ '../views/Search.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/:media_type/:media_id',\n    name: 'itemdetails',\n    component: () => import(/* webpackChunkName: \"itemdetails\" */ '../views/ItemDetails.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/playerqueue',\n    name: 'playerqueue',\n    component: () => import(/* webpackChunkName: \"playerqueue\" */ '../views/PlayerQueue.vue'),\n    props: route => ({ ...route.params, ...route.query })\n  },\n  {\n    path: '/:mediatype',\n    name: 'browse',\n    component: Browse,\n    props: route => ({ ...route.params, ...route.query })\n  }\n]\n\nconst router = new VueRouter({\n  mode: 'hash',\n  routes\n})\n\nexport default router\n","import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\n\nVue.use(VueI18n)\n\nfunction loadLocaleMessages () {\n  const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.json$/i)\n  const messages = {}\n  locales.keys().forEach(key => {\n    const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n    if (matched && matched.length > 1) {\n      const locale = matched[1]\n      messages[locale] = locales(key)\n    }\n  })\n  return messages\n}\n\nexport default new VueI18n({\n  // locale: process.env.VUE_APP_I18N_LOCALE || 'en',\n  locale: navigator.language.split('-')[0],\n  fallbackLocale: 'en',\n  messages: loadLocaleMessages()\n})\n","import Vue from 'vue'\n// import Vuetify from 'vuetify'\nimport Vuetify from 'vuetify/lib'\nimport 'vuetify/dist/vuetify.min.css'\n\nVue.use(Vuetify)\n\nexport default new Vuetify({\n  icons: {\n    iconfont: 'md'\n  }\n})\n","import Vue from 'vue'\n\nconst globalStore = new Vue({\n  data () {\n    return {\n      windowtitle: 'Home',\n      loading: false,\n      showNavigationMenu: false,\n      topBarColor: 'black',\n      isMobile: false,\n      isInStandaloneMode: false\n    }\n  },\n  created () {\n    this.handleWindowOptions()\n    window.addEventListener('resize', this.handleWindowOptions)\n  },\n  destroyed () {\n    window.removeEventListener('resize', this.handleWindowOptions)\n  },\n  methods: {\n    handleWindowOptions () {\n      this.isMobile = (document.body.clientWidth < 700)\n      this.isInStandaloneMode = 'standalone' in window.navigator && window.navigator.standalone\n    }\n  }\n})\n\nexport default {\n  globalStore,\n  // we can add objects to the Vue prototype in the install() hook:\n  install (Vue, options) {\n    Vue.prototype.$store = globalStore\n  }\n}\n","'use strict'\n\nimport Vue from 'vue'\nimport axios from 'axios'\n\nconst axiosConfig = {\n  timeout: 60 * 1000\n  // withCredentials: true, // Check cross-site Access-Control\n}\nconst _axios = axios.create(axiosConfig)\n\n// Holds the connection to the server\n\nconst server = new Vue({\n\n  _address: '',\n  _ws: null,\n\n  data () {\n    return {\n      connected: false,\n      players: {},\n      activePlayerId: null\n    }\n  },\n  methods: {\n\n    connect (serverAddress) {\n      // Connect to the server\n      if (!serverAddress.endsWith('/')) {\n        serverAddress = serverAddress + '/'\n      }\n      this._address = serverAddress\n      let wsAddress = serverAddress.replace('http', 'ws') + 'ws'\n      this._ws = new WebSocket(wsAddress)\n      this._ws.onopen = this._onWsConnect\n      this._ws.onmessage = this._onWsMessage\n      this._ws.onclose = this._onWsClose\n      this._ws.onerror = this._onWsError\n    },\n\n    async toggleLibrary (item) {\n      /// triggered when user clicks the library (heart) button\n      let endpoint = item.media_type + '/' + item.item_id\n      let action = 'library_remove'\n      if (item.in_library.length === 0) {\n        action = 'library_add'\n      }\n      await this.getData(endpoint, { provider: item.provider, action: action })\n      if (action === '/library_remove') {\n        item.in_library = []\n      } else {\n        item.in_library = [item.provider]\n      }\n    },\n\n    getImageUrl (mediaItem, imageType = 'image', size = 0) {\n      // format the image url\n      if (!mediaItem || !mediaItem.media_type) return ''\n      return `${this._address}api/${mediaItem.media_type}/${mediaItem.item_id}/image?type=${imageType}&provider=${mediaItem.provider}&size=${size}`\n    },\n\n    async getData (endpoint, params = {}) {\n      // get data from the server\n      let url = this._address + 'api/' + endpoint\n      let result = await _axios.get(url, { params: params })\n      return result.data\n    },\n\n    async postData (endpoint, data) {\n      // post data to the server\n      let url = this._address + 'api/' + endpoint\n      let result = await _axios.post(url, data)\n      return result.data\n    },\n\n    playerCommand (cmd, cmd_opt = null, playerId = this.activePlayerId) {\n      let msgDetails = {\n        player_id: playerId,\n        cmd: cmd,\n        cmd_args: cmd_opt\n      }\n      this._ws.send(JSON.stringify({ message: 'player command', message_details: msgDetails }))\n    },\n\n    async playItem (item, queueOpt) {\n      this.$store.loading = true\n      let endpoint = 'players/' + this.activePlayerId + '/play_media/' + item.media_type + '/' + item.item_id + '/' + queueOpt\n      await this.getData(endpoint)\n      this.$store.loading = false\n    },\n\n    switchPlayer (newPlayerId) {\n      this.activePlayerId = newPlayerId\n      localStorage.setItem('activePlayerId', newPlayerId)\n      this.$emit('new player selected', newPlayerId)\n    },\n\n    _onWsConnect () {\n      // Websockets connection established\n      // console.log('Connected to server ' + this._address)\n      this.connected = true\n      // request all players\n      let data = JSON.stringify({ message: 'players', message_details: null })\n      this._ws.send(data)\n    },\n\n    _onWsMessage (e) {\n      // Message retrieved on the websocket\n      var msg = JSON.parse(e.data)\n      if (msg.message === 'player changed') {\n        Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n      } else if (msg.message === 'player added') {\n        Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n        this._selectActivePlayer()\n        this.$emit('players changed')\n      } else if (msg.message === 'player removed') {\n        Vue.delete(this.players, msg.message_details.player_id)\n        this._selectActivePlayer()\n        this.$emit('players changed')\n      } else if (msg.message === 'players') {\n        for (var item of msg.message_details) {\n          Vue.set(this.players, item.player_id, item)\n        }\n        this._selectActivePlayer()\n        this.$emit('players changed')\n      } else {\n        this.$emit(msg.message, msg.message_details)\n      }\n    },\n\n    _onWsClose (e) {\n      this.connected = false\n      // console.log('Socket is closed. Reconnect will be attempted in 5 seconds.', e.reason)\n      setTimeout(function () {\n        this.connect(this._address)\n      }.bind(this), 5000)\n    },\n\n    _onWsError (err) {\n      console.error('Socket encountered error: ', err.message, 'Closing socket')\n      this._ws.close()\n    },\n\n    _selectActivePlayer () {\n      // auto select new active player if we have none\n      if (!this.activePlayer || !this.activePlayer.enabled || this.activePlayer.group_parents.length > 0) {\n        // prefer last selected player\n        let lastPlayerId = localStorage.getItem('activePlayerId')\n        if (lastPlayerId && this.players[lastPlayerId] && this.players[lastPlayerId].enabled) {\n          this.switchPlayer(lastPlayerId)\n        } else {\n          // prefer the first playing player\n          for (let playerId in this.players) {\n            if (this.players[playerId].state === 'playing' && this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n              this.switchPlayer(playerId)\n              break\n            }\n          }\n          // fallback to just the first player\n          if (!this.activePlayer || !this.activePlayer.enabled) {\n            for (let playerId in this.players) {\n              if (this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n                this.switchPlayer(playerId)\n                break\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  computed: {\n    activePlayer () {\n      if (!this.activePlayerId) {\n        return null\n      } else {\n        return this.players[this.activePlayerId]\n      }\n    }\n  }\n})\n\n// install as plugin\nexport default {\n  server,\n  // we can add objects to the Vue prototype in the install() hook:\n  install (Vue, options) {\n    Vue.prototype.$server = server\n  }\n}\n","import Vue from 'vue'\nimport App from './App.vue'\nimport './registerServiceWorker'\nimport router from './router'\nimport i18n from './i18n'\nimport 'roboto-fontface/css/roboto/roboto-fontface.css'\nimport 'material-design-icons-iconfont/dist/material-design-icons.css'\nimport VueVirtualScroller from 'vue-virtual-scroller'\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css'\nimport vuetify from './plugins/vuetify'\nimport store from './plugins/store'\nimport server from './plugins/server'\nimport '@babel/polyfill'\n\nVue.config.productionTip = false\nVue.use(VueVirtualScroller)\nVue.use(store)\nVue.use(server)\n\n// eslint-disable-next-line no-extend-native\nString.prototype.formatDuration = function () {\n  var secNum = parseInt(this, 10) // don't forget the second param\n  var hours = Math.floor(secNum / 3600)\n  var minutes = Math.floor((secNum - (hours * 3600)) / 60)\n  var seconds = secNum - (hours * 3600) - (minutes * 60)\n  if (hours < 10) { hours = '0' + hours }\n  if (minutes < 10) { minutes = '0' + minutes }\n  if (seconds < 10) { seconds = '0' + seconds }\n  if (hours === '00') { return minutes + ':' + seconds } else { return hours + ':' + minutes + ':' + seconds }\n}\n\nnew Vue({\n  router,\n  i18n,\n  vuetify,\n  render: h => h(App)\n}).$mount('#app')\n","module.exports = \"data:image/png;base64,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\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=71935334&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=71935334&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/file.813f9dad.png\";","module.exports = __webpack_public_path__ + \"img/sonos.72e2fecb.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","var map = {\n\t\"./aac.png\": \"9a36\",\n\t\"./chromecast.png\": \"57d1\",\n\t\"./default_artist.png\": \"4bfb\",\n\t\"./file.png\": \"71db\",\n\t\"./flac.png\": \"fb30\",\n\t\"./hires.png\": \"f5e3\",\n\t\"./homeassistant.png\": \"3232\",\n\t\"./http_streamer.png\": \"2755\",\n\t\"./logo.png\": \"cf05\",\n\t\"./mp3.png\": \"f1d4\",\n\t\"./qobuz.png\": \"0863\",\n\t\"./sonos.png\": \"82f5\",\n\t\"./spotify.png\": \"0c3b\",\n\t\"./squeezebox.png\": \"bd18\",\n\t\"./tunein.png\": \"e428\",\n\t\"./vorbis.png\": \"94cc\",\n\t\"./web.png\": \"edbf\",\n\t\"./webplayer.png\": \"3d05\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"9e01\";","module.exports = __webpack_public_path__ + \"img/squeezebox.60631223.png\";","module.exports = __webpack_public_path__ + \"img/logo.c079bd97.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-list-item',{attrs:{\"ripple\":\"\"},on:{\"click\":function($event){return _vm.$emit('click', _vm.item)}}},[(!_vm.hideavatar)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\",\"color\":\"grey\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.22)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.item, 'image', 80),\"lazy-src\":require('../assets/file.png')}})]):_vm._e(),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.item.name)+\" \"),(!!_vm.item.version)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.item.version)+\")\")]):_vm._e()]),(_vm.item.artists)?_c('v-list-item-subtitle',[_vm._l((_vm.item.artists),function(artist,artistindex){return _c('span',{key:artist.item_id},[_c('a',{on:{\"click\":[function($event){return _vm.artistClick(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.item.artists.length)?_c('label',{key:artistindex},[_vm._v(\"/\")]):_vm._e()])}),(!!_vm.item.album && !!_vm.hidetracknum)?_c('a',{staticStyle:{\"color\":\"grey\"},on:{\"click\":[function($event){return _vm.albumClick(_vm.item.album)},function($event){$event.stopPropagation();}]}},[_vm._v(\" - \"+_vm._s(_vm.item.album.name))]):_vm._e(),(!_vm.hidetracknum && _vm.item.track_number)?_c('label',{staticStyle:{\"color\":\"grey\"}},[_vm._v(\"- disc \"+_vm._s(_vm.item.disc_number)+\" track \"+_vm._s(_vm.item.track_number))]):_vm._e()],2):_vm._e(),(_vm.item.artist)?_c('v-list-item-subtitle',[_c('a',{on:{\"click\":[function($event){return _vm.artistClick(_vm.item.artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(_vm.item.artist.name))])]):_vm._e(),(!!_vm.item.owner)?_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.item.owner))]):_vm._e()],1),(!_vm.hideproviders)?_c('v-list-item-action',[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.item.provider_ids,\"height\":20}})],1):_vm._e(),(_vm.isHiRes)?_c('v-list-item-action',[_c('img',{attrs:{\"src\":require('../assets/hires.png'),\"height\":\"20\"}})]):_vm._e(),(!_vm.hidelibrary)?_c('v-list-item-action',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\",\"ripple\":\"\"},on:{\"click\":[function($event){return _vm.toggleLibrary(_vm.item)},function($event){$event.stopPropagation();}]}},on),[(_vm.item.in_library.length > 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite\")]):_vm._e(),(_vm.item.in_library.length == 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite_border\")]):_vm._e()],1)]}}],null,false,993341054)},[(_vm.item.in_library.length > 0)?_c('span',[_vm._v(_vm._s(_vm.$t('remove_library')))]):_vm._e(),(_vm.item.in_library.length == 0)?_c('span',[_vm._v(_vm._s(_vm.$t('add_library')))]):_vm._e()])],1):_vm._e(),(!_vm.hideduration && !!_vm.item.duration)?_c('v-list-item-action',[_vm._v(_vm._s(_vm.item.duration.toString().formatDuration()))]):_vm._e(),(!_vm.hidemenu)?_c('v-icon',{staticStyle:{\"margin-right\":\"-10px\",\"padding-left\":\"10px\"},attrs:{\"color\":\"grey lighten-1\"},on:{\"click\":[function($event){return _vm.$emit('menuClick', _vm.item)},function($event){$event.stopPropagation();}]}},[_vm._v(\"more_vert\")]):_vm._e()],1),_c('v-divider')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div>\n    <v-list-item ripple @click=\"$emit('click', item)\">\n      <v-list-item-avatar tile color=\"grey\" v-if=\"!hideavatar\">\n        <img\n          :src=\"$server.getImageUrl(item, 'image', 80)\"\n          :lazy-src=\"require('../assets/file.png')\"\n          style=\"border: 1px solid rgba(0,0,0,.22);\"\n        />\n      </v-list-item-avatar>\n\n      <v-list-item-content>\n        <v-list-item-title>\n          {{ item.name }}\n          <span v-if=\"!!item.version\">({{ item.version }})</span>\n        </v-list-item-title>\n\n        <v-list-item-subtitle v-if=\"item.artists\">\n          <span v-for=\"(artist, artistindex) in item.artists\" :key=\"artist.item_id\">\n            <a v-on:click=\"artistClick(artist)\" @click.stop>{{ artist.name }}</a>\n            <label v-if=\"artistindex + 1 < item.artists.length\" :key=\"artistindex\">/</label>\n          </span>\n          <a\n            v-if=\"!!item.album && !!hidetracknum\"\n            v-on:click=\"albumClick(item.album)\"\n            @click.stop\n            style=\"color:grey\"\n          > - {{ item.album.name }}</a>\n          <label\n            v-if=\"!hidetracknum && item.track_number\"\n            style=\"color:grey\"\n          >- disc {{ item.disc_number }} track {{ item.track_number }}</label>\n        </v-list-item-subtitle>\n        <v-list-item-subtitle v-if=\"item.artist\">\n          <a v-on:click=\"artistClick(item.artist)\" @click.stop>{{ item.artist.name }}</a>\n        </v-list-item-subtitle>\n\n        <v-list-item-subtitle v-if=\"!!item.owner\">{{ item.owner }}</v-list-item-subtitle>\n      </v-list-item-content>\n\n      <v-list-item-action v-if=\"!hideproviders\">\n      <ProviderIcons\n        v-bind:providerIds=\"item.provider_ids\"\n        :height=\"20\"\n      />\n      </v-list-item-action>\n\n      <v-list-item-action v-if=\"isHiRes\">\n        <img\n          :src=\"require('../assets/hires.png')\"\n          height=\"20\"\n        />\n      </v-list-item-action>\n\n      <v-list-item-action v-if=\"!hidelibrary\">\n        <v-tooltip bottom>\n          <template v-slot:activator=\"{ on }\">\n            <v-btn icon ripple v-on=\"on\" v-on:click=\"toggleLibrary(item)\" @click.stop>\n              <v-icon height=\"20\" v-if=\"item.in_library.length > 0\">favorite</v-icon>\n              <v-icon height=\"20\" v-if=\"item.in_library.length == 0\">favorite_border</v-icon>\n            </v-btn>\n          </template>\n          <span v-if=\"item.in_library.length > 0\">{{ $t('remove_library') }}</span>\n          <span v-if=\"item.in_library.length == 0\">{{ $t('add_library') }}</span>\n        </v-tooltip>\n      </v-list-item-action>\n\n      <v-list-item-action\n        v-if=\"!hideduration && !!item.duration\"\n      >{{ item.duration.toString().formatDuration() }}</v-list-item-action>\n\n      <!-- menu button/icon -->\n      <v-icon\n        v-if=\"!hidemenu\"\n        @click=\"$emit('menuClick', item)\"\n        @click.stop\n        color=\"grey lighten-1\"\n        style=\"margin-right:-10px;padding-left:10px\"\n      >more_vert</v-icon>\n    </v-list-item>\n    <v-divider></v-divider>\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ProviderIcons from '@/components/ProviderIcons.vue'\n\nexport default Vue.extend({\n  components: {\n    ProviderIcons\n  },\n  props: {\n    item: Object,\n    index: Number,\n    totalitems: Number,\n    hideavatar: Boolean,\n    hidetracknum: Boolean,\n    hideproviders: Boolean,\n    hidemenu: Boolean,\n    hidelibrary: Boolean,\n    hideduration: Boolean\n  },\n  data () {\n    return {}\n  },\n  computed: {\n    isHiRes () {\n      for (var prov of this.item.provider_ids) {\n        if (prov.quality > 6) {\n          return true\n        }\n      }\n      return false\n    }\n  },\n  mounted () { },\n  methods: {\n    artistClick (item) {\n      // artist entry clicked within the listviewItem\n      var url = '/artists/' + item.item_id\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    albumClick (item) {\n      // album entry clicked within the listviewItem\n      var url = '/albums/' + item.item_id\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    toggleLibrary (item) {\n      // library button clicked on item\n      this.$server.toggleLibrary(item)\n    }\n  }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListviewItem.vue?vue&type=template&id=7dd2252b&\"\nimport script from \"./ListviewItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ListviewItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VDivider,VIcon,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.uniqueProviders),function(prov){return _c('img',{key:prov.provider,staticStyle:{\"margin-right\":\"6px\",\"margin-top\":\"6px\"},attrs:{\"height\":_vm.height,\"src\":require('../assets/' + prov.provider + '.png')}})}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div>\r\n  <img\r\n    v-for=\"prov of uniqueProviders\" :key=\"prov.provider\"\r\n    :height=\"height\"\r\n    :src=\"require('../assets/' + prov.provider + '.png')\"\r\n    style=\"margin-right:6px;margin-top:6px;\"\r\n  />\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n  props: {\r\n    providerIds: Array,\r\n    height: Number\r\n  },\r\n  data () {\r\n    return {\r\n      isHiRes: false\r\n    }\r\n  },\r\n  computed: {\r\n    uniqueProviders: function () {\r\n      var output = []\r\n      var keys = []\r\n      if (!this.providerIds) return []\r\n      this.providerIds.forEach(function (prov) {\r\n        var key = prov['provider']\r\n        if (keys.indexOf(key) === -1) {\r\n          keys.push(key)\r\n          output.push(prov)\r\n        }\r\n      })\r\n      return output\r\n    }\r\n  },\r\n  mounted () { },\r\n  methods: {\r\n  }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProviderIcons.vue?vue&type=template&id=39dc952a&\"\nimport script from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\nexport * from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/tunein.ca1c1bb0.png\";","module.exports = __webpack_public_path__ + \"img/web.798ba28f.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/hires.e97b001e.png\";","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/music_assistant/web/js/config.328c2668.js b/music_assistant/web/js/config.328c2668.js
deleted file mode 100644 (file)
index 8992a4c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["config"],{"0c18":function(t,e,i){},1071:function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",[n("v-alert",{attrs:{value:t.restart_message,type:"info"}},[t._v(" "+t._s(t.$t("reboot_required"))+" ")]),t.configKey?t._e():n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{tile:""}},t._l(t.conf,(function(e,i){return n("v-list-item",{key:i,attrs:{tile:""},on:{click:function(e){return t.$router.push("/config/"+i)}}},[n("v-list-item-content",[n("v-list-item-title",[t._v(" "+t._s(t.$t("conf."+i)))])],1)],1)})),1)],1),"player_settings"!=t.configKey?n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{"two-line":"",tile:""}},t._l(t.conf[t.configKey],(function(e,s){return n("v-list-group",{key:s,attrs:{"no-action":""},scopedSlots:t._u([{key:"activator",fn:function(){return[n("v-list-item",[n("v-list-item-avatar",{staticStyle:{"margin-left":"-15px"},attrs:{tile:""}},[n("img",{staticStyle:{"border-radius":"5px",border:"1px solid rgba(0,0,0,.85)"},attrs:{src:i("9e01")("./"+s+".png")}})]),n("v-list-item-content",[n("v-list-item-title",[t._v(t._s(t.$t("conf."+s)))])],1)],1)]},proxy:!0}],null,!0)},[t._l(t.conf[t.configKey][s].__desc__,(function(e,i){return n("div",{key:i},[n("v-list-item",["boolean"==typeof e[1]?n("v-switch",{attrs:{label:t.$t("conf."+e[2])},on:{change:function(e){return t.confChanged(t.configKey,s,t.conf[t.configKey][s])}},model:{value:t.conf[t.configKey][s][e[0]],callback:function(i){t.$set(t.conf[t.configKey][s],e[0],i)},expression:"conf[configKey][conf_subkey][conf_item_value[0]]"}}):"<password>"==e[1]?n("v-text-field",{attrs:{label:t.$t("conf."+e[2]),filled:"",type:"password"},on:{change:function(e){return t.confChanged(t.configKey,s,t.conf[t.configKey][s])}},model:{value:t.conf[t.configKey][s][e[0]],callback:function(i){t.$set(t.conf[t.configKey][s],e[0],i)},expression:"conf[configKey][conf_subkey][conf_item_value[0]]"}}):"<player>"==e[1]?n("v-select",{attrs:{label:t.$t("conf."+e[2]),filled:"",type:"password"},on:{change:function(e){return t.confChanged(t.configKey,s,t.conf[t.configKey][s])}},model:{value:t.conf[t.configKey][s][e[0]],callback:function(i){t.$set(t.conf[t.configKey][s],e[0],i)},expression:"conf[configKey][conf_subkey][conf_item_value[0]]"}}):n("v-text-field",{attrs:{label:t.$t("conf."+e[2]),filled:""},on:{change:function(e){return t.confChanged(t.configKey,s,t.conf[t.configKey][s])}},model:{value:t.conf[t.configKey][s][e[0]],callback:function(i){t.$set(t.conf[t.configKey][s],e[0],i)},expression:"conf[configKey][conf_subkey][conf_item_value[0]]"}})],1)],1)})),n("v-divider")],2)})),1)],1):t._e(),"player_settings"==t.configKey?n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{"two-line":""}},t._l(t.$server.players,(function(e,s){return n("v-list-group",{key:s,attrs:{"no-action":""},scopedSlots:t._u([{key:"activator",fn:function(){return[n("v-list-item",[n("v-list-item-avatar",{staticStyle:{"margin-left":"-20px","margin-right":"6px"},attrs:{tile:""}},[n("img",{staticStyle:{"border-radius":"5px",border:"1px solid rgba(0,0,0,.85)"},attrs:{src:i("9e01")("./"+e.player_provider+".png")}})]),n("v-list-item-content",[n("v-list-item-title",{staticClass:"title"},[t._v(t._s(e.name))]),n("v-list-item-subtitle",{staticClass:"caption"},[t._v(t._s(s))])],1)],1)]},proxy:!0}],null,!0)},[t.conf.player_settings[s].enabled?n("div",t._l(t.conf.player_settings[s].__desc__,(function(e,i){return n("div",{key:i},[n("v-list-item",["boolean"==typeof e[1]?n("v-switch",{attrs:{label:t.$t("conf."+e[2])},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}}):"<password>"==e[1]?n("v-text-field",{attrs:{label:t.$t("conf."+e[2]),filled:"",type:"password"},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}}):"<player>"==e[1]?n("v-select",{attrs:{label:t.$t("conf."+e[2]),filled:""},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}},t._l(t.$server.players,(function(e,i){return n("option",{key:i,domProps:{value:t.item.id}},[t._v(t._s(t.item.name))])})),0):"max_sample_rate"==e[0]?n("v-select",{attrs:{label:t.$t("conf."+e[2]),items:t.sample_rates,filled:""},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}}):"crossfade_duration"==e[0]?n("v-slider",{attrs:{label:t.$t("conf."+e[2]),min:"0",max:"10",filled:"","thumb-label":""},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}}):n("v-text-field",{attrs:{label:t.$t("conf."+e[2]),filled:""},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}})],1),t.conf.player_settings[s].enabled?t._e():n("v-list-item",[n("v-switch",{attrs:{label:t.$t("conf.enabled")},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s].enabled,callback:function(e){t.$set(t.conf.player_settings[s],"enabled",e)},expression:"conf.player_settings[key].enabled"}})],1)],1)})),0):n("div",[n("v-list-item",[n("v-switch",{attrs:{label:t.$t("conf.enabled")},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s].enabled,callback:function(e){t.$set(t.conf.player_settings[s],"enabled",e)},expression:"conf.player_settings[key].enabled"}})],1)],1),n("v-divider")],1)})),1)],1):t._e()],1)},s=[],r=(i("96cf"),i("89ba")),o={components:{},props:["configKey"],data:function(){return{conf:{},players:{},active:0,sample_rates:[44100,48e3,88200,96e3,192e3,384e3],restart_message:!1}},created:function(){this.$store.windowtitle=this.$t("settings"),this.configKey&&(this.$store.windowtitle+=" | "+this.$t("conf."+this.configKey)),this.getConfig()},methods:{getConfig:function(){var t=Object(r["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.$server.getData("config");case 2:this.conf=t.sent;case 3:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),confChanged:function(){var t=Object(r["a"])(regeneratorRuntime.mark((function t(e,i,n){var s,r;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return s="config/"+e+"/"+i,t.next=3,this.$server.postData(s,n);case 3:r=t.sent,r.restart_required&&(this.restart_message=!0);case 5:case"end":return t.stop()}}),t,this)})));function e(e,i,n){return t.apply(this,arguments)}return e}()}},a=o,l=i("2877"),c=i("6544"),u=i.n(c),h=(i("a4d3"),i("4de4"),i("4160"),i("caad"),i("e439"),i("dbb4"),i("b64b"),i("159b"),i("2fa7")),d=(i("0c18"),i("10d2")),p=i("afdd"),f=i("9d26"),v=i("f2e7"),g=i("7560"),m=i("2b0e"),b=m["a"].extend({name:"transitionable",props:{mode:String,origin:String,transition:String}}),y=i("58df"),x=i("d9bd");function _(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function $(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?_(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):_(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var C=Object(y["a"])(d["a"],v["a"],b).extend({name:"v-alert",props:{border:{type:String,validator:function(t){return["top","right","bottom","left"].includes(t)}},closeLabel:{type:String,default:"$vuetify.close"},coloredBorder:Boolean,dense:Boolean,dismissible:Boolean,icon:{default:"",type:[Boolean,String],validator:function(t){return"string"===typeof t||!1===t}},outlined:Boolean,prominent:Boolean,text:Boolean,type:{type:String,validator:function(t){return["info","error","success","warning"].includes(t)}},value:{type:Boolean,default:!0}},computed:{__cachedBorder:function(){if(!this.border)return null;var t={staticClass:"v-alert__border",class:Object(h["a"])({},"v-alert__border--".concat(this.border),!0)};return this.coloredBorder&&(t=this.setBackgroundColor(this.computedColor,t),t.class["v-alert__border--has-color"]=!0),this.$createElement("div",t)},__cachedDismissible:function(){var t=this;if(!this.dismissible)return null;var e=this.iconColor;return this.$createElement(p["a"],{staticClass:"v-alert__dismissible",props:{color:e,icon:!0,small:!0},attrs:{"aria-label":this.$vuetify.lang.t(this.closeLabel)},on:{click:function(){return t.isActive=!1}}},[this.$createElement(f["a"],{props:{color:e}},"$cancel")])},__cachedIcon:function(){return this.computedIcon?this.$createElement(f["a"],{staticClass:"v-alert__icon",props:{color:this.iconColor}},this.computedIcon):null},classes:function(){var t=$({},d["a"].options.computed.classes.call(this),{"v-alert--border":Boolean(this.border),"v-alert--dense":this.dense,"v-alert--outlined":this.outlined,"v-alert--prominent":this.prominent,"v-alert--text":this.text});return this.border&&(t["v-alert--border-".concat(this.border)]=!0),t},computedColor:function(){return this.color||this.type},computedIcon:function(){return!1!==this.icon&&("string"===typeof this.icon&&this.icon?this.icon:!!["error","info","success","warning"].includes(this.type)&&"$".concat(this.type))},hasColoredIcon:function(){return this.hasText||Boolean(this.border)&&this.coloredBorder},hasText:function(){return this.text||this.outlined},iconColor:function(){return this.hasColoredIcon?this.computedColor:void 0},isDark:function(){return!(!this.type||this.coloredBorder||this.outlined)||g["a"].options.computed.isDark.call(this)}},created:function(){this.$attrs.hasOwnProperty("outline")&&Object(x["a"])("outline","outlined",this)},methods:{genWrapper:function(){var t=[this.$slots.prepend||this.__cachedIcon,this.genContent(),this.__cachedBorder,this.$slots.append,this.$scopedSlots.close?this.$scopedSlots.close({toggle:this.toggle}):this.__cachedDismissible],e={staticClass:"v-alert__wrapper"};return this.$createElement("div",e,t)},genContent:function(){return this.$createElement("div",{staticClass:"v-alert__content"},this.$slots.default)},genAlert:function(){var t={staticClass:"v-alert",attrs:{role:"alert"},class:this.classes,style:this.styles,directives:[{name:"show",value:this.isActive}]};if(!this.coloredBorder){var e=this.hasText?this.setTextColor:this.setBackgroundColor;t=e(this.computedColor,t)}return this.$createElement("div",t,[this.genWrapper()])},toggle:function(){this.isActive=!this.isActive}},render:function(t){var e=this.genAlert();return this.transition?t("transition",{props:{name:this.transition,origin:this.origin,mode:this.mode}},[e]):e}}),O=i("b0af"),k=i("ce7e"),w=i("8860"),S=i("56b0"),I=i("da13"),j=i("8270"),D=i("5d23"),A=(i("e01a"),i("d28b"),i("99af"),i("c740"),i("a630"),i("d81d"),i("13d5"),i("fb6a"),i("a434"),i("0d03"),i("4ec9"),i("d3b7"),i("ac1f"),i("25f0"),i("2532"),i("3ca3"),i("1276"),i("2ca0"),i("498a"),i("ddb0"),i("4ff9"),i("68dd"),i("e587")),P=(i("8adc"),i("0789")),V=i("a9ad"),T=i("4e82"),B=i("1c87"),E=i("af2b");function M(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function L(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?M(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):M(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var K=Object(y["a"])(V["a"],E["a"],B["a"],g["a"],Object(T["a"])("chipGroup"),Object(v["b"])("inputValue")).extend({name:"v-chip",props:{active:{type:Boolean,default:!0},activeClass:{type:String,default:function(){return this.chipGroup?this.chipGroup.activeClass:""}},close:Boolean,closeIcon:{type:String,default:"$delete"},disabled:Boolean,draggable:Boolean,filter:Boolean,filterIcon:{type:String,default:"$complete"},label:Boolean,link:Boolean,outlined:Boolean,pill:Boolean,tag:{type:String,default:"span"},textColor:String,value:null},data:function(){return{proxyClass:"v-chip--active"}},computed:{classes:function(){return L({"v-chip":!0},B["a"].options.computed.classes.call(this),{"v-chip--clickable":this.isClickable,"v-chip--disabled":this.disabled,"v-chip--draggable":this.draggable,"v-chip--label":this.label,"v-chip--link":this.isLink,"v-chip--no-color":!this.color,"v-chip--outlined":this.outlined,"v-chip--pill":this.pill,"v-chip--removable":this.hasClose},this.themeClasses,{},this.sizeableClasses,{},this.groupClasses)},hasClose:function(){return Boolean(this.close)},isClickable:function(){return Boolean(B["a"].options.computed.isClickable.call(this)||this.chipGroup)}},created:function(){var t=this,e=[["outline","outlined"],["selected","input-value"],["value","active"],["@input","@active.sync"]];e.forEach((function(e){var i=Object(A["a"])(e,2),n=i[0],s=i[1];t.$attrs.hasOwnProperty(n)&&Object(x["a"])(n,s,t)}))},methods:{click:function(t){this.$emit("click",t),this.chipGroup&&this.toggle()},genFilter:function(){var t=[];return this.isActive&&t.push(this.$createElement(f["a"],{staticClass:"v-chip__filter",props:{left:!0}},this.filterIcon)),this.$createElement(P["b"],t)},genClose:function(){var t=this;return this.$createElement(f["a"],{staticClass:"v-chip__close",props:{right:!0},on:{click:function(e){e.stopPropagation(),t.$emit("click:close"),t.$emit("update:active",!1)}}},this.closeIcon)},genContent:function(){return this.$createElement("span",{staticClass:"v-chip__content"},[this.filter&&this.genFilter(),this.$slots.default,this.hasClose&&this.genClose()])}},render:function(t){var e=[this.genContent()],i=this.generateRouteLink(),n=i.tag,s=i.data;s.attrs=L({},s.attrs,{draggable:this.draggable?"true":void 0,tabindex:this.chipGroup&&!this.disabled?0:s.attrs.tabindex}),s.directives.push({name:"show",value:this.active}),s=this.setBackgroundColor(this.color,s);var r=this.textColor||this.outlined&&this.color;return t(n,this.setTextColor(r,s),e)}}),F=K,z=i("326d"),R=(i("c975"),i("a15b"),i("b0c0"),i("615b"),i("cf36"),i("5607")),H=i("132d"),G=i("80d2");function U(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function W(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?U(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):U(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var J=m["a"].extend({name:"v-simple-checkbox",functional:!0,directives:{ripple:R["a"]},props:W({},V["a"].options.props,{},g["a"].options.props,{disabled:Boolean,ripple:{type:Boolean,default:!0},value:Boolean,indeterminate:Boolean,indeterminateIcon:{type:String,default:"$checkboxIndeterminate"},onIcon:{type:String,default:"$checkboxOn"},offIcon:{type:String,default:"$checkboxOff"}}),render:function(t,e){var i=e.props,n=e.data,s=[];if(i.ripple&&!i.disabled){var r=t("div",V["a"].options.methods.setTextColor(i.color,{staticClass:"v-input--selection-controls__ripple",directives:[{name:"ripple",value:{center:!0}}]}));s.push(r)}var o=i.offIcon;i.indeterminate?o=i.indeterminateIcon:i.value&&(o=i.onIcon),s.push(t(H["a"],V["a"].options.methods.setTextColor(i.value&&i.color,{props:{disabled:i.disabled,dark:i.dark,light:i.light}}),o));var a={"v-simple-checkbox":!0,"v-simple-checkbox--disabled":i.disabled};return t("div",W({},n,{class:a,on:{click:function(t){t.stopPropagation(),n.on&&n.on.input&&!i.disabled&&Object(G["y"])(n.on.input).forEach((function(t){return t(!i.value)}))}}}),s)}}),N=i("b810"),q=i("24e2"),Q=i("1800");function Y(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function X(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?Y(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Y(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var Z=Object(y["a"])(V["a"],g["a"]).extend({name:"v-select-list",directives:{ripple:R["a"]},props:{action:Boolean,dense:Boolean,hideSelected:Boolean,items:{type:Array,default:function(){return[]}},itemDisabled:{type:[String,Array,Function],default:"disabled"},itemText:{type:[String,Array,Function],default:"text"},itemValue:{type:[String,Array,Function],default:"value"},noDataText:String,noFilter:Boolean,searchInput:{default:null},selectedItems:{type:Array,default:function(){return[]}}},computed:{parsedItems:function(){var t=this;return this.selectedItems.map((function(e){return t.getValue(e)}))},tileActiveClass:function(){return Object.keys(this.setTextColor(this.color).class||{}).join(" ")},staticNoDataTile:function(){var t={attrs:{role:void 0},on:{mousedown:function(t){return t.preventDefault()}}};return this.$createElement(I["a"],t,[this.genTileContent(this.noDataText)])}},methods:{genAction:function(t,e){var i=this;return this.$createElement(Q["a"],[this.$createElement(J,{props:{color:this.color,value:e},on:{input:function(){return i.$emit("select",t)}}})])},genDivider:function(t){return this.$createElement(N["a"],{props:t})},genFilteredText:function(t){if(t=t||"",!this.searchInput||this.noFilter)return Object(G["k"])(t);var e=this.getMaskedCharacters(t),i=e.start,n=e.middle,s=e.end;return"".concat(Object(G["k"])(i)).concat(this.genHighlight(n)).concat(Object(G["k"])(s))},genHeader:function(t){return this.$createElement(q["a"],{props:t},t.header)},genHighlight:function(t){return'<span class="v-list-item__mask">'.concat(Object(G["k"])(t),"</span>")},genLabelledBy:function(t){var e=Object(G["k"])(this.getText(t).split(" ").join("-").toLowerCase());return"".concat(e,"-list-item-").concat(this._uid)},getMaskedCharacters:function(t){var e=(this.searchInput||"").toString().toLocaleLowerCase(),i=t.toLocaleLowerCase().indexOf(e);if(i<0)return{start:"",middle:t,end:""};var n=t.slice(0,i),s=t.slice(i,i+e.length),r=t.slice(i+e.length);return{start:n,middle:s,end:r}},genTile:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n||(n=this.hasItem(t)),t===Object(t)&&(i=null!==i?i:this.getDisabled(t));var s={attrs:{"aria-selected":String(n),"aria-labelledby":this.genLabelledBy(t),role:"option"},on:{mousedown:function(t){t.preventDefault()},click:function(){return i||e.$emit("select",t)}},props:{activeClass:this.tileActiveClass,disabled:i,ripple:!0,inputValue:n}};if(!this.$scopedSlots.item)return this.$createElement(I["a"],s,[this.action&&!this.hideSelected&&this.items.length>0?this.genAction(t,n):null,this.genTileContent(t)]);var r=this,o=this.$scopedSlots.item({parent:r,item:t,attrs:X({},s.attrs,{},s.props),on:s.on});return this.needsTile(o)?this.$createElement(I["a"],s,o):o},genTileContent:function(t){var e=this.genFilteredText(this.getText(t));return this.$createElement(D["a"],[this.$createElement(D["c"],{attrs:{id:this.genLabelledBy(t)},domProps:{innerHTML:e}})])},hasItem:function(t){return this.parsedItems.indexOf(this.getValue(t))>-1},needsTile:function(t){return 1!==t.length||null==t[0].componentOptions||"v-list-item"!==t[0].componentOptions.Ctor.options.name},getDisabled:function(t){return Boolean(Object(G["n"])(t,this.itemDisabled,!1))},getText:function(t){return String(Object(G["n"])(t,this.itemText,t))},getValue:function(t){return Object(G["n"])(t,this.itemValue,this.getText(t))}},render:function(){var t=[],e=!0,i=!1,n=void 0;try{for(var s,r=this.items[Symbol.iterator]();!(e=(s=r.next()).done);e=!0){var o=s.value;this.hideSelected&&this.hasItem(o)||(null==o?t.push(this.genTile(o)):o.header?t.push(this.genHeader(o)):o.divider?t.push(this.genDivider(o)):t.push(this.genTile(o)))}}catch(a){i=!0,n=a}finally{try{e||null==r.return||r.return()}finally{if(i)throw n}}return t.length||t.push(this.$slots["no-data"]||this.staticNoDataTile),this.$slots["prepend-item"]&&t.unshift(this.$slots["prepend-item"]),this.$slots["append-item"]&&t.push(this.$slots["append-item"]),this.$createElement("div",{staticClass:"v-select-list v-card",class:this.themeClasses},[this.$createElement(w["a"],{attrs:{id:this.$attrs.id,role:"listbox",tabindex:-1},props:{dense:this.dense}},t)])}}),tt=i("8654"),et=m["a"].extend({name:"comparable",props:{valueComparator:{type:Function,default:G["j"]}}}),it=m["a"].extend({name:"filterable",props:{noDataText:{type:String,default:"$vuetify.noDataText"}}}),nt=i("a293");function st(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function rt(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?st(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):st(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var ot={closeOnClick:!1,closeOnContentClick:!1,disableKeys:!0,openOnClick:!1,maxHeight:304},at=Object(y["a"])(tt["a"],et,it),lt=at.extend().extend({name:"v-select",directives:{ClickOutside:nt["a"]},props:{appendIcon:{type:String,default:"$dropdown"},attach:{default:!1},cacheItems:Boolean,chips:Boolean,clearable:Boolean,deletableChips:Boolean,eager:Boolean,hideSelected:Boolean,items:{type:Array,default:function(){return[]}},itemColor:{type:String,default:"primary"},itemDisabled:{type:[String,Array,Function],default:"disabled"},itemText:{type:[String,Array,Function],default:"text"},itemValue:{type:[String,Array,Function],default:"value"},menuProps:{type:[String,Array,Object],default:function(){return ot}},multiple:Boolean,openOnClear:Boolean,returnObject:Boolean,smallChips:Boolean},data:function(){return{cachedItems:this.cacheItems?this.items:[],content:null,isBooted:!1,isMenuActive:!1,lastItem:20,lazyValue:void 0!==this.value?this.value:this.multiple?[]:void 0,selectedIndex:-1,selectedItems:[],keyboardLookupPrefix:"",keyboardLookupLastTime:0}},computed:{allItems:function(){return this.filterDuplicates(this.cachedItems.concat(this.items))},classes:function(){return rt({},tt["a"].options.computed.classes.call(this),{"v-select":!0,"v-select--chips":this.hasChips,"v-select--chips--small":this.smallChips,"v-select--is-menu-active":this.isMenuActive,"v-select--is-multi":this.multiple})},computedItems:function(){return this.allItems},computedOwns:function(){return"list-".concat(this._uid)},counterValue:function(){return this.multiple?this.selectedItems.length:(this.getText(this.selectedItems[0])||"").toString().length},directives:function(){return this.isFocused?[{name:"click-outside",value:this.blur,args:{closeConditional:this.closeConditional}}]:void 0},dynamicHeight:function(){return"auto"},hasChips:function(){return this.chips||this.smallChips},hasSlot:function(){return Boolean(this.hasChips||this.$scopedSlots.selection)},isDirty:function(){return this.selectedItems.length>0},listData:function(){var t=this.$vnode&&this.$vnode.context.$options._scopeId,e=t?Object(h["a"])({},t,!0):{};return{attrs:rt({},e,{id:this.computedOwns}),props:{action:this.multiple,color:this.itemColor,dense:this.dense,hideSelected:this.hideSelected,items:this.virtualizedItems,itemDisabled:this.itemDisabled,itemText:this.itemText,itemValue:this.itemValue,noDataText:this.$vuetify.lang.t(this.noDataText),selectedItems:this.selectedItems},on:{select:this.selectItem},scopedSlots:{item:this.$scopedSlots.item}}},staticList:function(){return(this.$slots["no-data"]||this.$slots["prepend-item"]||this.$slots["append-item"])&&Object(x["b"])("assert: staticList should not be called if slots are used"),this.$createElement(Z,this.listData)},virtualizedItems:function(){return this.$_menuProps.auto?this.computedItems:this.computedItems.slice(0,this.lastItem)},menuCanShow:function(){return!0},$_menuProps:function(){var t="string"===typeof this.menuProps?this.menuProps.split(","):this.menuProps;return Array.isArray(t)&&(t=t.reduce((function(t,e){return t[e.trim()]=!0,t}),{})),rt({},ot,{eager:this.eager,value:this.menuCanShow&&this.isMenuActive,nudgeBottom:t.offsetY?1:0},t)}},watch:{internalValue:function(t){this.initialValue=t,this.setSelectedItems()},isBooted:function(){var t=this;this.$nextTick((function(){t.content&&t.content.addEventListener&&t.content.addEventListener("scroll",t.onScroll,!1)}))},isMenuActive:function(t){var e=this;this.$nextTick((function(){return e.onMenuActiveChange(t)})),t&&(this.isBooted=!0)},items:{immediate:!0,handler:function(t){var e=this;this.cacheItems&&this.$nextTick((function(){e.cachedItems=e.filterDuplicates(e.cachedItems.concat(t))})),this.setSelectedItems()}}},mounted:function(){this.content=this.$refs.menu&&this.$refs.menu.$refs.content},methods:{blur:function(t){tt["a"].options.methods.blur.call(this,t),this.isMenuActive=!1,this.isFocused=!1,this.selectedIndex=-1},activateMenu:function(){this.disabled||this.readonly||this.isMenuActive||(this.isMenuActive=!0)},clearableCallback:function(){var t=this;this.setValue(this.multiple?[]:void 0),this.$nextTick((function(){return t.$refs.input&&t.$refs.input.focus()})),this.openOnClear&&(this.isMenuActive=!0)},closeConditional:function(t){return!this._isDestroyed&&this.content&&!this.content.contains(t.target)&&this.$el&&!this.$el.contains(t.target)&&t.target!==this.$el},filterDuplicates:function(t){for(var e=new Map,i=0;i<t.length;++i){var n=t[i],s=this.getValue(n);!e.has(s)&&e.set(s,n)}return Array.from(e.values())},findExistingIndex:function(t){var e=this,i=this.getValue(t);return(this.internalValue||[]).findIndex((function(t){return e.valueComparator(e.getValue(t),i)}))},genChipSelection:function(t,e){var i=this,n=this.disabled||this.readonly||this.getDisabled(t);return this.$createElement(F,{staticClass:"v-chip--select",attrs:{tabindex:-1},props:{close:this.deletableChips&&!n,disabled:n,inputValue:e===this.selectedIndex,small:this.smallChips},on:{click:function(t){n||(t.stopPropagation(),i.selectedIndex=e)},"click:close":function(){return i.onChipInput(t)}},key:JSON.stringify(this.getValue(t))},this.getText(t))},genCommaSelection:function(t,e,i){var n=e===this.selectedIndex&&this.computedColor,s=this.disabled||this.getDisabled(t);return this.$createElement("div",this.setTextColor(n,{staticClass:"v-select__selection v-select__selection--comma",class:{"v-select__selection--disabled":s},key:JSON.stringify(this.getValue(t))}),"".concat(this.getText(t)).concat(i?"":", "))},genDefaultSlot:function(){var t=this.genSelections(),e=this.genInput();return Array.isArray(t)?t.push(e):(t.children=t.children||[],t.children.push(e)),[this.genFieldset(),this.$createElement("div",{staticClass:"v-select__slot",directives:this.directives},[this.genLabel(),this.prefix?this.genAffix("prefix"):null,t,this.suffix?this.genAffix("suffix"):null,this.genClearIcon(),this.genIconSlot()]),this.genMenu(),this.genProgress()]},genInput:function(){var t=tt["a"].options.methods.genInput.call(this);return t.data.domProps.value=null,t.data.attrs.readonly=!0,t.data.attrs.type="text",t.data.attrs["aria-readonly"]=!0,t.data.on.keypress=this.onKeyPress,t},genInputSlot:function(){var t=tt["a"].options.methods.genInputSlot.call(this);return t.data.attrs=rt({},t.data.attrs,{role:"button","aria-haspopup":"listbox","aria-expanded":String(this.isMenuActive),"aria-owns":this.computedOwns}),t},genList:function(){return this.$slots["no-data"]||this.$slots["prepend-item"]||this.$slots["append-item"]?this.genListWithSlot():this.staticList},genListWithSlot:function(){var t=this,e=["prepend-item","no-data","append-item"].filter((function(e){return t.$slots[e]})).map((function(e){return t.$createElement("template",{slot:e},t.$slots[e])}));return this.$createElement(Z,rt({},this.listData),e)},genMenu:function(){var t=this,e=this.$_menuProps;return e.activator=this.$refs["input-slot"],""===this.attach||!0===this.attach||"attach"===this.attach?e.attach=this.$el:e.attach=this.attach,this.$createElement(z["a"],{attrs:{role:void 0},props:e,on:{input:function(e){t.isMenuActive=e,t.isFocused=e}},ref:"menu"},[this.genList()])},genSelections:function(){var t,e=this.selectedItems.length,i=new Array(e);t=this.$scopedSlots.selection?this.genSlotSelection:this.hasChips?this.genChipSelection:this.genCommaSelection;while(e--)i[e]=t(this.selectedItems[e],e,e===i.length-1);return this.$createElement("div",{staticClass:"v-select__selections"},i)},genSlotSelection:function(t,e){var i=this;return this.$scopedSlots.selection({attrs:{class:"v-chip--select"},parent:this,item:t,index:e,select:function(t){t.stopPropagation(),i.selectedIndex=e},selected:e===this.selectedIndex,disabled:this.disabled||this.readonly})},getMenuIndex:function(){return this.$refs.menu?this.$refs.menu.listIndex:-1},getDisabled:function(t){return Object(G["n"])(t,this.itemDisabled,!1)},getText:function(t){return Object(G["n"])(t,this.itemText,t)},getValue:function(t){return Object(G["n"])(t,this.itemValue,this.getText(t))},onBlur:function(t){t&&this.$emit("blur",t)},onChipInput:function(t){this.multiple?this.selectItem(t):this.setValue(null),0===this.selectedItems.length?this.isMenuActive=!0:this.isMenuActive=!1,this.selectedIndex=-1},onClick:function(){this.isDisabled||(this.isMenuActive=!0,this.isFocused||(this.isFocused=!0,this.$emit("focus")))},onEscDown:function(t){t.preventDefault(),this.isMenuActive&&(t.stopPropagation(),this.isMenuActive=!1)},onKeyPress:function(t){var e=this;if(!this.multiple&&!this.readonly){var i=1e3,n=performance.now();n-this.keyboardLookupLastTime>i&&(this.keyboardLookupPrefix=""),this.keyboardLookupPrefix+=t.key.toLowerCase(),this.keyboardLookupLastTime=n;var s=this.allItems.findIndex((function(t){var i=(e.getText(t)||"").toString();return i.toLowerCase().startsWith(e.keyboardLookupPrefix)})),r=this.allItems[s];-1!==s&&(this.setValue(this.returnObject?r:this.getValue(r)),setTimeout((function(){return e.setMenuIndex(s)})))}},onKeyDown:function(t){var e=this,i=t.keyCode,n=this.$refs.menu;if([G["s"].enter,G["s"].space].includes(i)&&this.activateMenu(),n)return this.isMenuActive&&i!==G["s"].tab&&this.$nextTick((function(){n.changeListIndex(t),e.$emit("update:list-index",n.listIndex)})),!this.isMenuActive&&[G["s"].up,G["s"].down].includes(i)?this.onUpDown(t):i===G["s"].esc?this.onEscDown(t):i===G["s"].tab?this.onTabDown(t):i===G["s"].space?this.onSpaceDown(t):void 0},onMenuActiveChange:function(t){if(!(this.multiple&&!t||this.getMenuIndex()>-1)){var e=this.$refs.menu;if(e&&this.isDirty)for(var i=0;i<e.tiles.length;i++)if("true"===e.tiles[i].getAttribute("aria-selected")){this.setMenuIndex(i);break}}},onMouseUp:function(t){var e=this;if(this.hasMouseDown&&3!==t.which){var i=this.$refs["append-inner"];this.isMenuActive&&i&&(i===t.target||i.contains(t.target))?this.$nextTick((function(){return e.isMenuActive=!e.isMenuActive})):this.isEnclosed&&!this.isDisabled&&(this.isMenuActive=!0)}tt["a"].options.methods.onMouseUp.call(this,t)},onScroll:function(){var t=this;if(this.isMenuActive){if(this.lastItem>=this.computedItems.length)return;var e=this.content.scrollHeight-(this.content.scrollTop+this.content.clientHeight)<200;e&&(this.lastItem+=20)}else requestAnimationFrame((function(){return t.content.scrollTop=0}))},onSpaceDown:function(t){t.preventDefault()},onTabDown:function(t){var e=this.$refs.menu;if(e){var i=e.activeTile;!this.multiple&&i&&this.isMenuActive?(t.preventDefault(),t.stopPropagation(),i.click()):this.blur(t)}},onUpDown:function(t){var e=this.$refs.menu;if(e){if(t.preventDefault(),this.multiple)return this.activateMenu();var i=t.keyCode;e.getTiles(),G["s"].up===i?e.prevTile():e.nextTile(),e.activeTile&&e.activeTile.click()}},selectItem:function(t){var e=this;if(this.multiple){var i=(this.internalValue||[]).slice(),n=this.findExistingIndex(t);if(-1!==n?i.splice(n,1):i.push(t),this.setValue(i.map((function(t){return e.returnObject?t:e.getValue(t)}))),this.$nextTick((function(){e.$refs.menu&&e.$refs.menu.updateDimensions()})),!this.multiple)return;var s=this.getMenuIndex();if(this.setMenuIndex(-1),this.hideSelected)return;this.$nextTick((function(){return e.setMenuIndex(s)}))}else this.setValue(this.returnObject?t:this.getValue(t)),this.isMenuActive=!1},setMenuIndex:function(t){this.$refs.menu&&(this.$refs.menu.listIndex=t)},setSelectedItems:function(){var t=this,e=[],i=this.multiple&&Array.isArray(this.internalValue)?this.internalValue:[this.internalValue],n=!0,s=!1,r=void 0;try{for(var o,a=function(){var i=o.value,n=t.allItems.findIndex((function(e){return t.valueComparator(t.getValue(e),t.getValue(i))}));n>-1&&e.push(t.allItems[n])},l=i[Symbol.iterator]();!(n=(o=l.next()).done);n=!0)a()}catch(c){s=!0,r=c}finally{try{n||null==l.return||l.return()}finally{if(s)throw r}}this.selectedItems=e},setValue:function(t){var e=this.internalValue;this.internalValue=t,t!==e&&this.$emit("change",t)}}}),ct=i("ba0d"),ut=(i("0481"),i("4069"),i("ec29"),i("9d01"),i("45fc"),i("c37a")),ht=m["a"].extend({name:"rippleable",directives:{ripple:R["a"]},props:{ripple:{type:[Boolean,Object],default:!0}},methods:{genRipple:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.ripple?(t.staticClass="v-input--selection-controls__ripple",t.directives=t.directives||[],t.directives.push({name:"ripple",value:{center:!0}}),t.on=Object.assign({click:this.onChange},this.$listeners),this.$createElement("div",t)):null},onChange:function(){}}}),dt=Object(y["a"])(ut["a"],ht,et).extend({name:"selectable",model:{prop:"inputValue",event:"change"},props:{id:String,inputValue:null,falseValue:null,trueValue:null,multiple:{type:Boolean,default:null},label:String},data:function(){return{hasColor:this.inputValue,lazyValue:this.inputValue}},computed:{computedColor:function(){if(this.isActive)return this.color?this.color:this.isDark&&!this.appIsDark?"white":"accent"},isMultiple:function(){return!0===this.multiple||null===this.multiple&&Array.isArray(this.internalValue)},isActive:function(){var t=this,e=this.value,i=this.internalValue;return this.isMultiple?!!Array.isArray(i)&&i.some((function(i){return t.valueComparator(i,e)})):void 0===this.trueValue||void 0===this.falseValue?e?this.valueComparator(e,i):Boolean(i):this.valueComparator(i,this.trueValue)},isDirty:function(){return this.isActive}},watch:{inputValue:function(t){this.lazyValue=t,this.hasColor=t}},methods:{genLabel:function(){var t=this,e=ut["a"].options.methods.genLabel.call(this);return e?(e.data.on={click:function(e){e.preventDefault(),t.onChange()}},e):e},genInput:function(t,e){return this.$createElement("input",{attrs:Object.assign({"aria-checked":this.isActive.toString(),disabled:this.isDisabled,id:this.computedId,role:t,type:t},e),domProps:{value:this.value,checked:this.isActive},on:{blur:this.onBlur,change:this.onChange,focus:this.onFocus,keydown:this.onKeydown},ref:"input"})},onBlur:function(){this.isFocused=!1},onChange:function(){var t=this;if(!this.isDisabled){var e=this.value,i=this.internalValue;if(this.isMultiple){Array.isArray(i)||(i=[]);var n=i.length;i=i.filter((function(i){return!t.valueComparator(i,e)})),i.length===n&&i.push(e)}else i=void 0!==this.trueValue&&void 0!==this.falseValue?this.valueComparator(i,this.trueValue)?this.falseValue:this.trueValue:e?this.valueComparator(i,e)?null:e:!i;this.validate(!0,i),this.internalValue=i,this.hasColor=i}},onFocus:function(){this.isFocused=!0},onKeydown:function(t){}}}),pt=i("c3f0"),ft=i("490a");function vt(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function gt(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?vt(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):vt(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var mt=dt.extend({name:"v-switch",directives:{Touch:pt["a"]},props:{inset:Boolean,loading:{type:[Boolean,String],default:!1},flat:{type:Boolean,default:!1}},computed:{classes:function(){return gt({},ut["a"].options.computed.classes.call(this),{"v-input--selection-controls v-input--switch":!0,"v-input--switch--flat":this.flat,"v-input--switch--inset":this.inset})},attrs:function(){return{"aria-checked":String(this.isActive),"aria-disabled":String(this.disabled),role:"switch"}},validationState:function(){return this.hasError&&this.shouldValidate?"error":this.hasSuccess?"success":null!==this.hasColor?this.computedColor:void 0},switchData:function(){return this.setTextColor(this.loading?void 0:this.validationState,{class:this.themeClasses})}},methods:{genDefaultSlot:function(){return[this.genSwitch(),this.genLabel()]},genSwitch:function(){return this.$createElement("div",{staticClass:"v-input--selection-controls__input"},[this.genInput("checkbox",gt({},this.attrs,{},this.attrs$)),this.genRipple(this.setTextColor(this.validationState,{directives:[{name:"touch",value:{left:this.onSwipeLeft,right:this.onSwipeRight}}]})),this.$createElement("div",gt({staticClass:"v-input--switch__track"},this.switchData)),this.$createElement("div",gt({staticClass:"v-input--switch__thumb"},this.switchData),[this.genProgress()])])},genProgress:function(){return this.$createElement(P["c"],{},[!1===this.loading?null:this.$slots.progress||this.$createElement(ft["a"],{props:{color:!0===this.loading||""===this.loading?this.color||"primary":this.loading,size:16,width:2,indeterminate:!0}})])},onSwipeLeft:function(){this.isActive&&this.onChange()},onSwipeRight:function(){this.isActive||this.onChange()},onKeydown:function(t){(t.keyCode===G["s"].left&&this.isActive||t.keyCode===G["s"].right&&!this.isActive)&&this.onChange()}}}),bt=Object(l["a"])(a,n,s,!1,null,null,null);e["default"]=bt.exports;u()(bt,{VAlert:C,VCard:O["a"],VDivider:k["a"],VList:w["a"],VListGroup:S["a"],VListItem:I["a"],VListItemAvatar:j["a"],VListItemContent:D["a"],VListItemSubtitle:D["b"],VListItemTitle:D["c"],VSelect:lt,VSlider:ct["a"],VSwitch:mt,VTextField:tt["a"]})},"24e2":function(t,e,i){"use strict";var n=i("e0c7");e["a"]=n["a"]},"326d":function(t,e,i){"use strict";var n=i("e449");e["a"]=n["a"]},"4ec9":function(t,e,i){"use strict";var n=i("6d61"),s=i("6566");t.exports=n("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),s,!0)},6566:function(t,e,i){"use strict";var n=i("9bf2").f,s=i("7c73"),r=i("e2cc"),o=i("f8c2"),a=i("19aa"),l=i("2266"),c=i("7dd0"),u=i("2626"),h=i("83ab"),d=i("f183").fastKey,p=i("69f3"),f=p.set,v=p.getterFor;t.exports={getConstructor:function(t,e,i,c){var u=t((function(t,n){a(t,u,e),f(t,{type:e,index:s(null),first:void 0,last:void 0,size:0}),h||(t.size=0),void 0!=n&&l(n,t[c],t,i)})),p=v(e),g=function(t,e,i){var n,s,r=p(t),o=m(t,e);return o?o.value=i:(r.last=o={index:s=d(e,!0),key:e,value:i,previous:n=r.last,next:void 0,removed:!1},r.first||(r.first=o),n&&(n.next=o),h?r.size++:t.size++,"F"!==s&&(r.index[s]=o)),t},m=function(t,e){var i,n=p(t),s=d(e);if("F"!==s)return n.index[s];for(i=n.first;i;i=i.next)if(i.key==e)return i};return r(u.prototype,{clear:function(){var t=this,e=p(t),i=e.index,n=e.first;while(n)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete i[n.index],n=n.next;e.first=e.last=void 0,h?e.size=0:t.size=0},delete:function(t){var e=this,i=p(e),n=m(e,t);if(n){var s=n.next,r=n.previous;delete i.index[n.index],n.removed=!0,r&&(r.next=s),s&&(s.previous=r),i.first==n&&(i.first=s),i.last==n&&(i.last=r),h?i.size--:e.size--}return!!n},forEach:function(t){var e,i=p(this),n=o(t,arguments.length>1?arguments[1]:void 0,3);while(e=e?e.next:i.first){n(e.value,e.key,this);while(e&&e.removed)e=e.previous}},has:function(t){return!!m(this,t)}}),r(u.prototype,i?{get:function(t){var e=m(this,t);return e&&e.value},set:function(t,e){return g(this,0===t?0:t,e)}}:{add:function(t){return g(this,t=0===t?0:t,t)}}),h&&n(u.prototype,"size",{get:function(){return p(this).size}}),u},setStrong:function(t,e,i){var n=e+" Iterator",s=v(e),r=v(n);c(t,e,(function(t,e){f(this,{type:n,target:t,state:s(t),kind:e,last:void 0})}),(function(){var t=r(this),e=t.kind,i=t.last;while(i&&i.removed)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?"keys"==e?{value:i.key,done:!1}:"values"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?"entries":"values",!i,!0),u(e)}}},"68dd":function(t,e,i){},"6d61":function(t,e,i){"use strict";var n=i("23e7"),s=i("da84"),r=i("94ca"),o=i("6eeb"),a=i("f183"),l=i("2266"),c=i("19aa"),u=i("861d"),h=i("d039"),d=i("1c7e"),p=i("d44e"),f=i("7156");t.exports=function(t,e,i,v,g){var m=s[t],b=m&&m.prototype,y=m,x=v?"set":"add",_={},$=function(t){var e=b[t];o(b,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(g&&!u(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!u(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(g&&!u(t))&&e.call(this,0===t?0:t)}:function(t,i){return e.call(this,0===t?0:t,i),this})};if(r(t,"function"!=typeof m||!(g||b.forEach&&!h((function(){(new m).entries().next()})))))y=i.getConstructor(e,t,v,x),a.REQUIRED=!0;else if(r(t,!0)){var C=new y,O=C[x](g?{}:-0,1)!=C,k=h((function(){C.has(1)})),w=d((function(t){new m(t)})),S=!g&&h((function(){var t=new m,e=5;while(e--)t[x](e,e);return!t.has(-0)}));w||(y=e((function(e,i){c(e,y,t);var n=f(new m,e,y);return void 0!=i&&l(i,n[x],n,v),n})),y.prototype=b,b.constructor=y),(k||S)&&($("delete"),$("has"),v&&$("get")),(S||O)&&$(x),g&&b.clear&&delete b.clear}return _[t]=y,n({global:!0,forced:y!=m},_),p(y,t),g||i.setStrong(y,t,v),y}},"8adc":function(t,e,i){},"9d01":function(t,e,i){},afdd:function(t,e,i){"use strict";var n=i("8336");e["a"]=n["a"]},b810:function(t,e,i){"use strict";var n=i("ce7e");e["a"]=n["a"]},cf36:function(t,e,i){},ec29:function(t,e,i){}}]);
-//# sourceMappingURL=config.328c2668.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/config.328c2668.js.map b/music_assistant/web/js/config.328c2668.js.map
deleted file mode 100644 (file)
index ce07132..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./src/views/Config.vue?9d4c","webpack:///src/views/Config.vue","webpack:///./src/views/Config.vue?194c","webpack:///./node_modules/vuetify/lib/mixins/transitionable/index.js","webpack:///./node_modules/vuetify/lib/components/VAlert/VAlert.js","webpack:///./node_modules/vuetify/lib/components/VChip/VChip.js","webpack:///./node_modules/vuetify/lib/components/VChip/index.js","webpack:///./node_modules/vuetify/lib/components/VCheckbox/VSimpleCheckbox.js","webpack:///./node_modules/vuetify/lib/components/VSelect/VSelectList.js","webpack:///./node_modules/vuetify/lib/mixins/comparable/index.js","webpack:///./node_modules/vuetify/lib/mixins/filterable/index.js","webpack:///./node_modules/vuetify/lib/components/VSelect/VSelect.js","webpack:///./node_modules/vuetify/lib/mixins/rippleable/index.js","webpack:///./node_modules/vuetify/lib/mixins/selectable/index.js","webpack:///./node_modules/vuetify/lib/components/VSwitch/VSwitch.js","webpack:///./src/views/Config.vue","webpack:///./node_modules/vuetify/lib/components/VSubheader/index.js","webpack:///./node_modules/vuetify/lib/components/VMenu/index.js","webpack:///./node_modules/core-js/modules/es.map.js","webpack:///./node_modules/core-js/internals/collection-strong.js","webpack:///./node_modules/core-js/internals/collection.js","webpack:///./node_modules/vuetify/lib/components/VBtn/index.js","webpack:///./node_modules/vuetify/lib/components/VDivider/index.js"],"names":["_vm","this","_h","$createElement","_c","_self","attrs","restart_message","_v","_s","$t","configKey","_e","_l","conf_value","conf_key","key","on","$event","$router","push","conf","conf_subvalue","conf_subkey","scopedSlots","_u","fn","staticStyle","proxy","conf_item_value","conf_item_key","confChanged","model","value","callback","$$v","$set","expression","$server","player","player_provider","staticClass","name","player_settings","domProps","item","id","sample_rates","enabled","staticRenderFns","components","props","data","players","active","created","$store","windowtitle","getConfig","methods","Vue","extend","mode","String","origin","transition","mixins","VSheet","Toggleable","Transitionable","border","type","validator","val","includes","closeLabel","default","coloredBorder","Boolean","dense","dismissible","icon","outlined","prominent","text","computed","__cachedBorder","class","setBackgroundColor","computedColor","__cachedDismissible","color","iconColor","VBtn","small","$vuetify","lang","t","click","isActive","VIcon","__cachedIcon","computedIcon","classes","options","call","hasColoredIcon","hasText","undefined","isDark","Themeable","$attrs","hasOwnProperty","breaking","genWrapper","children","$slots","prepend","genContent","append","$scopedSlots","close","toggle","genAlert","role","style","styles","directives","setColor","setTextColor","render","h","Colorable","Sizeable","Routable","GroupableFactory","ToggleableFactory","activeClass","chipGroup","closeIcon","disabled","draggable","filter","filterIcon","label","link","pill","tag","textColor","proxyClass","isClickable","isLink","hasClose","themeClasses","sizeableClasses","groupClasses","breakingProps","forEach","original","replacement","e","$emit","genFilter","left","VExpandXTransition","genClose","right","stopPropagation","generateRouteLink","tabindex","VChip","functional","ripple","indeterminate","indeterminateIcon","onIcon","offIcon","center","dark","light","input","wrapInArray","f","action","hideSelected","items","Array","itemDisabled","Function","itemText","itemValue","noDataText","noFilter","searchInput","selectedItems","parsedItems","map","getValue","tileActiveClass","Object","keys","join","staticNoDataTile","tile","mousedown","preventDefault","VListItem","genTileContent","genAction","inputValue","VListItemAction","VSimpleCheckbox","genDivider","VDivider","genFilteredText","escapeHTML","getMaskedCharacters","start","middle","end","genHighlight","genHeader","VSubheader","header","genLabelledBy","getText","split","toLowerCase","_uid","toString","toLocaleLowerCase","index","indexOf","slice","length","genTile","hasItem","getDisabled","parent","scopedSlot","needsTile","innerHTML","VListItemContent","VListItemTitle","slot","componentOptions","Ctor","getPropertyFromItem","divider","unshift","VList","valueComparator","deepEqual","defaultMenuProps","closeOnClick","closeOnContentClick","disableKeys","openOnClick","maxHeight","baseMixins","VTextField","Comparable","Filterable","ClickOutside","appendIcon","attach","cacheItems","chips","clearable","deletableChips","eager","itemColor","menuProps","multiple","openOnClear","returnObject","smallChips","cachedItems","content","isBooted","isMenuActive","lastItem","lazyValue","selectedIndex","keyboardLookupPrefix","keyboardLookupLastTime","allItems","filterDuplicates","concat","hasChips","computedItems","computedOwns","counterValue","isFocused","blur","args","closeConditional","dynamicHeight","hasSlot","selection","isDirty","listData","scopeId","$vnode","context","$options","_scopeId","virtualizedItems","select","selectItem","staticList","consoleError","VSelectList","$_menuProps","auto","menuCanShow","normalisedProps","isArray","reduce","acc","p","trim","nudgeBottom","offsetY","watch","internalValue","initialValue","setSelectedItems","$nextTick","addEventListener","onScroll","onMenuActiveChange","immediate","handler","mounted","$refs","menu","activateMenu","readonly","clearableCallback","setValue","focus","_isDestroyed","contains","target","$el","arr","uniqueValues","Map","has","set","from","values","findExistingIndex","findIndex","i","genChipSelection","isDisabled","onChipInput","JSON","stringify","genCommaSelection","last","genDefaultSlot","selections","genSelections","genInput","genFieldset","genLabel","prefix","genAffix","suffix","genClearIcon","genIconSlot","genMenu","genProgress","keypress","onKeyPress","genInputSlot","genList","genListWithSlot","slots","slotName","activator","VMenu","ref","genSelection","genSlotSelection","selected","getMenuIndex","listIndex","onBlur","onClick","onEscDown","KEYBOARD_LOOKUP_THRESHOLD","now","performance","startsWith","setTimeout","setMenuIndex","onKeyDown","keyCode","keyCodes","enter","space","tab","changeListIndex","up","down","onUpDown","esc","onTabDown","onSpaceDown","tiles","getAttribute","onMouseUp","hasMouseDown","which","appendInner","isEnclosed","showMoreItems","scrollHeight","scrollTop","clientHeight","requestAnimationFrame","activeTile","getTiles","prevTile","nextTile","splice","updateDimensions","v","oldValue","genRipple","assign","onChange","$listeners","VInput","Rippleable","prop","event","falseValue","trueValue","hasColor","appIsDark","isMultiple","some","computedId","checked","change","onFocus","keydown","onKeydown","validate","Selectable","Touch","inset","loading","flat","validationState","hasError","shouldValidate","hasSuccess","switchData","genSwitch","attrs$","onSwipeLeft","onSwipeRight","VFabTransition","progress","VProgressCircular","size","width","component","VAlert","VCard","VListGroup","VListItemAvatar","VListItemSubtitle","VSelect","VSlider","VSwitch","collection","collectionStrong","module","exports","get","arguments","defineProperty","create","redefineAll","bind","anInstance","iterate","defineIterator","setSpecies","DESCRIPTORS","fastKey","InternalStateModule","setInternalState","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","IS_MAP","ADDER","C","that","iterable","first","getInternalState","define","previous","state","entry","getEntry","next","removed","prototype","clear","prev","callbackfn","boundFunction","add","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","done","$","global","isForced","redefine","InternalMetadataModule","isObject","fails","checkCorrectnessOfIteration","setToStringTag","inheritIfRequired","common","IS_WEAK","NativeConstructor","NativePrototype","Constructor","exported","fixMethod","KEY","nativeMethod","entries","REQUIRED","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","constructor","forced"],"mappings":"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","file":"js/config.328c2668.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-alert',{attrs:{\"value\":_vm.restart_message,\"type\":\"info\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"reboot_required\"))+\" \")]),(!_vm.configKey)?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.conf),function(conf_value,conf_key){return _c('v-list-item',{key:conf_key,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/config/' + conf_key)}}},[_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"conf.\" + conf_key)))])],1)],1)}),1)],1):_vm._e(),(_vm.configKey != 'player_settings')?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\",\"tile\":\"\"}},_vm._l((_vm.conf[_vm.configKey]),function(conf_subvalue,conf_subkey){return _c('v-list-group',{key:conf_subkey,attrs:{\"no-action\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c('v-list-item',[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-15px\"},attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border-radius\":\"5px\",\"border\":\"1px solid rgba(0,0,0,.85)\"},attrs:{\"src\":require('../assets/' + conf_subkey + '.png')}})]),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"conf.\" + conf_subkey)))])],1)],1)]},proxy:true}],null,true)},[_vm._l((_vm.conf[_vm.configKey][\n                conf_subkey\n              ].__desc__),function(conf_item_value,conf_item_key){return _c('div',{key:conf_item_key},[_c('v-list-item',[(typeof conf_item_value[1] == 'boolean')?_c('v-switch',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2])},on:{\"change\":function($event){return _vm.confChanged(\n                      _vm.configKey,\n                      conf_subkey,\n                      _vm.conf[_vm.configKey][conf_subkey]\n                    )}},model:{value:(_vm.conf[_vm.configKey][conf_subkey][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf[_vm.configKey][conf_subkey], conf_item_value[0], $$v)},expression:\"conf[configKey][conf_subkey][conf_item_value[0]]\"}}):(conf_item_value[1] == '<password>')?_c('v-text-field',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\",\"type\":\"password\"},on:{\"change\":function($event){return _vm.confChanged(\n                      _vm.configKey,\n                      conf_subkey,\n                      _vm.conf[_vm.configKey][conf_subkey]\n                    )}},model:{value:(_vm.conf[_vm.configKey][conf_subkey][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf[_vm.configKey][conf_subkey], conf_item_value[0], $$v)},expression:\"conf[configKey][conf_subkey][conf_item_value[0]]\"}}):(conf_item_value[1] == '<player>')?_c('v-select',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\",\"type\":\"password\"},on:{\"change\":function($event){return _vm.confChanged(\n                      _vm.configKey,\n                      conf_subkey,\n                      _vm.conf[_vm.configKey][conf_subkey]\n                    )}},model:{value:(_vm.conf[_vm.configKey][conf_subkey][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf[_vm.configKey][conf_subkey], conf_item_value[0], $$v)},expression:\"conf[configKey][conf_subkey][conf_item_value[0]]\"}}):_c('v-text-field',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                      _vm.configKey,\n                      conf_subkey,\n                      _vm.conf[_vm.configKey][conf_subkey]\n                    )}},model:{value:(_vm.conf[_vm.configKey][conf_subkey][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf[_vm.configKey][conf_subkey], conf_item_value[0], $$v)},expression:\"conf[configKey][conf_subkey][conf_item_value[0]]\"}})],1)],1)}),_c('v-divider')],2)}),1)],1):_vm._e(),(_vm.configKey == 'player_settings')?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},_vm._l((_vm.$server.players),function(player,key){return _c('v-list-group',{key:key,attrs:{\"no-action\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c('v-list-item',[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-20px\",\"margin-right\":\"6px\"},attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border-radius\":\"5px\",\"border\":\"1px solid rgba(0,0,0,.85)\"},attrs:{\"src\":require('../assets/' + player.player_provider + '.png')}})]),_c('v-list-item-content',[_c('v-list-item-title',{staticClass:\"title\"},[_vm._v(_vm._s(player.name))]),_c('v-list-item-subtitle',{staticClass:\"caption\"},[_vm._v(_vm._s(key))])],1)],1)]},proxy:true}],null,true)},[(_vm.conf.player_settings[key].enabled)?_c('div',_vm._l((_vm.conf\n                  .player_settings[key].__desc__),function(conf_item_value,conf_item_key){return _c('div',{key:conf_item_key},[_c('v-list-item',[(typeof conf_item_value[1] == 'boolean')?_c('v-switch',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2])},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}}):(conf_item_value[1] == '<password>')?_c('v-text-field',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\",\"type\":\"password\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}}):(conf_item_value[1] == '<player>')?_c('v-select',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}},_vm._l((_vm.$server.players),function(player,key){return _c('option',{key:key,domProps:{\"value\":_vm.item.id}},[_vm._v(_vm._s(_vm.item.name))])}),0):(conf_item_value[0] == 'max_sample_rate')?_c('v-select',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"items\":_vm.sample_rates,\"filled\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}}):(conf_item_value[0] == 'crossfade_duration')?_c('v-slider',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"min\":\"0\",\"max\":\"10\",\"filled\":\"\",\"thumb-label\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}}):_c('v-text-field',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}})],1),(!_vm.conf.player_settings[key].enabled)?_c('v-list-item',[_c('v-switch',{attrs:{\"label\":_vm.$t('conf.' + 'enabled')},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key].enabled),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], \"enabled\", $$v)},expression:\"conf.player_settings[key].enabled\"}})],1):_vm._e()],1)}),0):_c('div',[_c('v-list-item',[_c('v-switch',{attrs:{\"label\":_vm.$t('conf.' + 'enabled')},on:{\"change\":function($event){return _vm.confChanged(\n                      'player_settings',\n                      key,\n                      _vm.conf.player_settings[key]\n                    )}},model:{value:(_vm.conf.player_settings[key].enabled),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], \"enabled\", $$v)},expression:\"conf.player_settings[key].enabled\"}})],1)],1),_c('v-divider')],1)}),1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-alert :value=\"restart_message\" type=\"info\">\n      {{ $t(\"reboot_required\") }}\n    </v-alert>\n\n        <!-- config main menu -->\n        <v-card flat v-if=\"!configKey\">\n          <v-list tile>\n            <v-list-item tile\n              v-for=\"(conf_value, conf_key) in conf\" :key=\"conf_key\" @click=\"$router.push('/config/' + conf_key)\">\n                <!-- <v-list-item-icon style=\"margin-left:15px\">\n                  <v-icon>{{ item.icon }}</v-icon>\n                </v-list-item-icon> -->\n                <v-list-item-content>\n                  <v-list-item-title> {{ $t(\"conf.\" + conf_key) }}</v-list-item-title>\n                </v-list-item-content>\n            </v-list-item>\n          </v-list>\n        </v-card>\n        <!-- generic and module settings -->\n        <v-card flat v-if=\"configKey != 'player_settings'\">\n          <v-list two-line tile>\n            <v-list-group\n              no-action\n              v-for=\"(conf_subvalue, conf_subkey) in conf[configKey]\"\n              :key=\"conf_subkey\"\n            >\n              <template v-slot:activator>\n                <v-list-item>\n                  <v-list-item-avatar tile style=\"margin-left:-15px\">\n                    <img :src=\"require('../assets/' + conf_subkey + '.png')\" style=\"border-radius:5px;border: 1px solid rgba(0,0,0,.85);\" />\n                  </v-list-item-avatar>\n                  <v-list-item-content>\n                    <v-list-item-title>{{\n                      $t(\"conf.\" + conf_subkey)\n                    }}</v-list-item-title>\n                  </v-list-item-content>\n                </v-list-item>\n              </template>\n              <div\n                v-for=\"(conf_item_value, conf_item_key) in conf[configKey][\n                  conf_subkey\n                ].__desc__\"\n                :key=\"conf_item_key\"\n              >\n                <v-list-item>\n                  <v-switch\n                    v-if=\"typeof conf_item_value[1] == 'boolean'\"\n                    v-model=\"conf[configKey][conf_subkey][conf_item_value[0]]\"\n                    :label=\"$t('conf.' + conf_item_value[2])\"\n                    @change=\"\n                      confChanged(\n                        configKey,\n                        conf_subkey,\n                        conf[configKey][conf_subkey]\n                      )\n                    \"\n                  ></v-switch>\n                  <v-text-field\n                    v-else-if=\"conf_item_value[1] == '<password>'\"\n                    v-model=\"conf[configKey][conf_subkey][conf_item_value[0]]\"\n                    :label=\"$t('conf.' + conf_item_value[2])\"\n                    filled\n                    type=\"password\"\n                    @change=\"\n                      confChanged(\n                        configKey,\n                        conf_subkey,\n                        conf[configKey][conf_subkey]\n                      )\n                    \"\n                  ></v-text-field>\n                  <v-select\n                    v-else-if=\"conf_item_value[1] == '<player>'\"\n                    v-model=\"conf[configKey][conf_subkey][conf_item_value[0]]\"\n                    :label=\"$t('conf.' + conf_item_value[2])\"\n                    filled\n                    type=\"password\"\n                    @change=\"\n                      confChanged(\n                        configKey,\n                        conf_subkey,\n                        conf[configKey][conf_subkey]\n                      )\n                    \"\n                  ></v-select>\n                  <v-text-field\n                    v-else\n                    v-model=\"conf[configKey][conf_subkey][conf_item_value[0]]\"\n                    :label=\"$t('conf.' + conf_item_value[2])\"\n                    @change=\"\n                      confChanged(\n                        configKey,\n                        conf_subkey,\n                        conf[configKey][conf_subkey]\n                      )\n                    \"\n                    filled\n                  ></v-text-field>\n                </v-list-item>\n              </div>\n              <v-divider></v-divider>\n            </v-list-group>\n          </v-list>\n        </v-card>\n        <!-- player settings -->\n        <v-card flat v-if=\"configKey == 'player_settings'\">\n          <v-list two-line>\n            <v-list-group\n              no-action\n              v-for=\"(player, key) in $server.players\"\n              :key=\"key\"\n            >\n              <template v-slot:activator>\n                <v-list-item>\n                  <v-list-item-avatar tile style=\"margin-left:-20px;margin-right:6px;\">\n                    <img\n                      :src=\"\n                        require('../assets/' + player.player_provider + '.png')\n                      \"\n                      style=\"border-radius:5px;border: 1px solid rgba(0,0,0,.85);\"\n                    />\n                  </v-list-item-avatar>\n                  <v-list-item-content>\n                    <v-list-item-title class=\"title\">{{\n                      player.name\n                    }}</v-list-item-title>\n                    <v-list-item-subtitle class=\"caption\">{{\n                      key\n                    }}</v-list-item-subtitle>\n                  </v-list-item-content>\n                </v-list-item>\n              </template>\n              <div v-if=\"conf.player_settings[key].enabled\">\n                <!-- enabled player -->\n                <div\n                  v-for=\"(conf_item_value, conf_item_key) in conf\n                    .player_settings[key].__desc__\"\n                  :key=\"conf_item_key\"\n                >\n                  <v-list-item>\n                    <v-switch\n                      v-if=\"typeof conf_item_value[1] == 'boolean'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                    ></v-switch>\n                    <v-text-field\n                      v-else-if=\"conf_item_value[1] == '<password>'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      filled\n                      type=\"password\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                    ></v-text-field>\n                    <v-select\n                      v-else-if=\"conf_item_value[1] == '<player>'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                      filled\n                    >\n                      <option\n                        v-for=\"(player, key) in $server.players\"\n                        :value=\"item.id\"\n                        :key=\"key\"\n                        >{{ item.name }}</option\n                      >\n                    </v-select>\n                    <v-select\n                      v-else-if=\"conf_item_value[0] == 'max_sample_rate'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      :items=\"sample_rates\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                      filled\n                    ></v-select>\n                    <v-slider\n                      v-else-if=\"conf_item_value[0] == 'crossfade_duration'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                      min=\"0\"\n                      max=\"10\"\n                      filled\n                      thumb-label\n                    ></v-slider>\n                    <v-text-field\n                      v-else\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                      filled\n                    ></v-text-field>\n                  </v-list-item>\n                  <v-list-item v-if=\"!conf.player_settings[key].enabled\">\n                    <v-switch\n                      v-model=\"conf.player_settings[key].enabled\"\n                      :label=\"$t('conf.' + 'enabled')\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                    ></v-switch>\n                  </v-list-item>\n                </div>\n              </div>\n              <div v-else>\n                <!-- disabled player -->\n                <v-list-item>\n                  <v-switch\n                    v-model=\"conf.player_settings[key].enabled\"\n                    :label=\"$t('conf.' + 'enabled')\"\n                    @change=\"\n                      confChanged(\n                        'player_settings',\n                        key,\n                        conf.player_settings[key]\n                      )\n                    \"\n                  ></v-switch>\n                </v-list-item>\n              </div>\n              <v-divider></v-divider>\n            </v-list-group>\n          </v-list>\n        </v-card>\n\n  </section>\n</template>\n\n<script>\n\nexport default {\n  components: {\n  },\n  props: ['configKey'],\n  data () {\n    return {\n      conf: {},\n      players: {},\n      active: 0,\n      sample_rates: [44100, 48000, 88200, 96000, 192000, 384000],\n      restart_message: false\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t('settings')\n    if (this.configKey) {\n      this.$store.windowtitle += ' | ' + this.$t('conf.' + this.configKey)\n    }\n    this.getConfig()\n  },\n  methods: {\n    async getConfig () {\n      this.conf = await this.$server.getData('config')\n    },\n    async confChanged (key, subkey, newvalue) {\n      let endpoint = 'config/' + key + '/' + subkey\n      let result = await this.$server.postData(endpoint, newvalue)\n      if (result.restart_required) {\n        this.restart_message = true\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Config.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Config.vue?vue&type=script&lang=js&\"","import Vue from 'vue';\nexport default Vue.extend({\n  name: 'transitionable',\n  props: {\n    mode: String,\n    origin: String,\n    transition: String\n  }\n});\n//# sourceMappingURL=index.js.map","// Styles\nimport \"../../../src/components/VAlert/VAlert.sass\"; // Extensions\n\nimport VSheet from '../VSheet'; // Components\n\nimport VBtn from '../VBtn';\nimport VIcon from '../VIcon'; // Mixins\n\nimport Toggleable from '../../mixins/toggleable';\nimport Themeable from '../../mixins/themeable';\nimport Transitionable from '../../mixins/transitionable'; // Utilities\n\nimport mixins from '../../util/mixins';\nimport { breaking } from '../../util/console';\n/* @vue/component */\n\nexport default mixins(VSheet, Toggleable, Transitionable).extend({\n  name: 'v-alert',\n  props: {\n    border: {\n      type: String,\n\n      validator(val) {\n        return ['top', 'right', 'bottom', 'left'].includes(val);\n      }\n\n    },\n    closeLabel: {\n      type: String,\n      default: '$vuetify.close'\n    },\n    coloredBorder: Boolean,\n    dense: Boolean,\n    dismissible: Boolean,\n    icon: {\n      default: '',\n      type: [Boolean, String],\n\n      validator(val) {\n        return typeof val === 'string' || val === false;\n      }\n\n    },\n    outlined: Boolean,\n    prominent: Boolean,\n    text: Boolean,\n    type: {\n      type: String,\n\n      validator(val) {\n        return ['info', 'error', 'success', 'warning'].includes(val);\n      }\n\n    },\n    value: {\n      type: Boolean,\n      default: true\n    }\n  },\n  computed: {\n    __cachedBorder() {\n      if (!this.border) return null;\n      let data = {\n        staticClass: 'v-alert__border',\n        class: {\n          [`v-alert__border--${this.border}`]: true\n        }\n      };\n\n      if (this.coloredBorder) {\n        data = this.setBackgroundColor(this.computedColor, data);\n        data.class['v-alert__border--has-color'] = true;\n      }\n\n      return this.$createElement('div', data);\n    },\n\n    __cachedDismissible() {\n      if (!this.dismissible) return null;\n      const color = this.iconColor;\n      return this.$createElement(VBtn, {\n        staticClass: 'v-alert__dismissible',\n        props: {\n          color,\n          icon: true,\n          small: true\n        },\n        attrs: {\n          'aria-label': this.$vuetify.lang.t(this.closeLabel)\n        },\n        on: {\n          click: () => this.isActive = false\n        }\n      }, [this.$createElement(VIcon, {\n        props: {\n          color\n        }\n      }, '$cancel')]);\n    },\n\n    __cachedIcon() {\n      if (!this.computedIcon) return null;\n      return this.$createElement(VIcon, {\n        staticClass: 'v-alert__icon',\n        props: {\n          color: this.iconColor\n        }\n      }, this.computedIcon);\n    },\n\n    classes() {\n      const classes = { ...VSheet.options.computed.classes.call(this),\n        'v-alert--border': Boolean(this.border),\n        'v-alert--dense': this.dense,\n        'v-alert--outlined': this.outlined,\n        'v-alert--prominent': this.prominent,\n        'v-alert--text': this.text\n      };\n\n      if (this.border) {\n        classes[`v-alert--border-${this.border}`] = true;\n      }\n\n      return classes;\n    },\n\n    computedColor() {\n      return this.color || this.type;\n    },\n\n    computedIcon() {\n      if (this.icon === false) return false;\n      if (typeof this.icon === 'string' && this.icon) return this.icon;\n      if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false;\n      return `$${this.type}`;\n    },\n\n    hasColoredIcon() {\n      return this.hasText || Boolean(this.border) && this.coloredBorder;\n    },\n\n    hasText() {\n      return this.text || this.outlined;\n    },\n\n    iconColor() {\n      return this.hasColoredIcon ? this.computedColor : undefined;\n    },\n\n    isDark() {\n      if (this.type && !this.coloredBorder && !this.outlined) return true;\n      return Themeable.options.computed.isDark.call(this);\n    }\n\n  },\n\n  created() {\n    /* istanbul ignore next */\n    if (this.$attrs.hasOwnProperty('outline')) {\n      breaking('outline', 'outlined', this);\n    }\n  },\n\n  methods: {\n    genWrapper() {\n      const children = [this.$slots.prepend || this.__cachedIcon, this.genContent(), this.__cachedBorder, this.$slots.append, this.$scopedSlots.close ? this.$scopedSlots.close({\n        toggle: this.toggle\n      }) : this.__cachedDismissible];\n      const data = {\n        staticClass: 'v-alert__wrapper'\n      };\n      return this.$createElement('div', data, children);\n    },\n\n    genContent() {\n      return this.$createElement('div', {\n        staticClass: 'v-alert__content'\n      }, this.$slots.default);\n    },\n\n    genAlert() {\n      let data = {\n        staticClass: 'v-alert',\n        attrs: {\n          role: 'alert'\n        },\n        class: this.classes,\n        style: this.styles,\n        directives: [{\n          name: 'show',\n          value: this.isActive\n        }]\n      };\n\n      if (!this.coloredBorder) {\n        const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor;\n        data = setColor(this.computedColor, data);\n      }\n\n      return this.$createElement('div', data, [this.genWrapper()]);\n    },\n\n    /** @public */\n    toggle() {\n      this.isActive = !this.isActive;\n    }\n\n  },\n\n  render(h) {\n    const render = this.genAlert();\n    if (!this.transition) return render;\n    return h('transition', {\n      props: {\n        name: this.transition,\n        origin: this.origin,\n        mode: this.mode\n      }\n    }, [render]);\n  }\n\n});\n//# sourceMappingURL=VAlert.js.map","// Styles\nimport \"../../../src/components/VChip/VChip.sass\";\nimport mixins from '../../util/mixins'; // Components\n\nimport { VExpandXTransition } from '../transitions';\nimport VIcon from '../VIcon'; // Mixins\n\nimport Colorable from '../../mixins/colorable';\nimport { factory as GroupableFactory } from '../../mixins/groupable';\nimport Themeable from '../../mixins/themeable';\nimport { factory as ToggleableFactory } from '../../mixins/toggleable';\nimport Routable from '../../mixins/routable';\nimport Sizeable from '../../mixins/sizeable'; // Utilities\n\nimport { breaking } from '../../util/console';\n/* @vue/component */\n\nexport default mixins(Colorable, Sizeable, Routable, Themeable, GroupableFactory('chipGroup'), ToggleableFactory('inputValue')).extend({\n  name: 'v-chip',\n  props: {\n    active: {\n      type: Boolean,\n      default: true\n    },\n    activeClass: {\n      type: String,\n\n      default() {\n        if (!this.chipGroup) return '';\n        return this.chipGroup.activeClass;\n      }\n\n    },\n    close: Boolean,\n    closeIcon: {\n      type: String,\n      default: '$delete'\n    },\n    disabled: Boolean,\n    draggable: Boolean,\n    filter: Boolean,\n    filterIcon: {\n      type: String,\n      default: '$complete'\n    },\n    label: Boolean,\n    link: Boolean,\n    outlined: Boolean,\n    pill: Boolean,\n    tag: {\n      type: String,\n      default: 'span'\n    },\n    textColor: String,\n    value: null\n  },\n  data: () => ({\n    proxyClass: 'v-chip--active'\n  }),\n  computed: {\n    classes() {\n      return {\n        'v-chip': true,\n        ...Routable.options.computed.classes.call(this),\n        'v-chip--clickable': this.isClickable,\n        'v-chip--disabled': this.disabled,\n        'v-chip--draggable': this.draggable,\n        'v-chip--label': this.label,\n        'v-chip--link': this.isLink,\n        'v-chip--no-color': !this.color,\n        'v-chip--outlined': this.outlined,\n        'v-chip--pill': this.pill,\n        'v-chip--removable': this.hasClose,\n        ...this.themeClasses,\n        ...this.sizeableClasses,\n        ...this.groupClasses\n      };\n    },\n\n    hasClose() {\n      return Boolean(this.close);\n    },\n\n    isClickable() {\n      return Boolean(Routable.options.computed.isClickable.call(this) || this.chipGroup);\n    }\n\n  },\n\n  created() {\n    const breakingProps = [['outline', 'outlined'], ['selected', 'input-value'], ['value', 'active'], ['@input', '@active.sync']];\n    /* istanbul ignore next */\n\n    breakingProps.forEach(([original, replacement]) => {\n      if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this);\n    });\n  },\n\n  methods: {\n    click(e) {\n      this.$emit('click', e);\n      this.chipGroup && this.toggle();\n    },\n\n    genFilter() {\n      const children = [];\n\n      if (this.isActive) {\n        children.push(this.$createElement(VIcon, {\n          staticClass: 'v-chip__filter',\n          props: {\n            left: true\n          }\n        }, this.filterIcon));\n      }\n\n      return this.$createElement(VExpandXTransition, children);\n    },\n\n    genClose() {\n      return this.$createElement(VIcon, {\n        staticClass: 'v-chip__close',\n        props: {\n          right: true\n        },\n        on: {\n          click: e => {\n            e.stopPropagation();\n            this.$emit('click:close');\n            this.$emit('update:active', false);\n          }\n        }\n      }, this.closeIcon);\n    },\n\n    genContent() {\n      return this.$createElement('span', {\n        staticClass: 'v-chip__content'\n      }, [this.filter && this.genFilter(), this.$slots.default, this.hasClose && this.genClose()]);\n    }\n\n  },\n\n  render(h) {\n    const children = [this.genContent()];\n    let {\n      tag,\n      data\n    } = this.generateRouteLink();\n    data.attrs = { ...data.attrs,\n      draggable: this.draggable ? 'true' : undefined,\n      tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs.tabindex\n    };\n    data.directives.push({\n      name: 'show',\n      value: this.active\n    });\n    data = this.setBackgroundColor(this.color, data);\n    const color = this.textColor || this.outlined && this.color;\n    return h(tag, this.setTextColor(color, data), children);\n  }\n\n});\n//# sourceMappingURL=VChip.js.map","import VChip from './VChip';\nexport { VChip };\nexport default VChip;\n//# sourceMappingURL=index.js.map","import \"../../../src/components/VCheckbox/VSimpleCheckbox.sass\";\nimport ripple from '../../directives/ripple';\nimport Vue from 'vue';\nimport { VIcon } from '../VIcon';\nimport Colorable from '../../mixins/colorable';\nimport Themeable from '../../mixins/themeable';\nimport { wrapInArray } from '../../util/helpers';\nexport default Vue.extend({\n  name: 'v-simple-checkbox',\n  functional: true,\n  directives: {\n    ripple\n  },\n  props: { ...Colorable.options.props,\n    ...Themeable.options.props,\n    disabled: Boolean,\n    ripple: {\n      type: Boolean,\n      default: true\n    },\n    value: Boolean,\n    indeterminate: Boolean,\n    indeterminateIcon: {\n      type: String,\n      default: '$checkboxIndeterminate'\n    },\n    onIcon: {\n      type: String,\n      default: '$checkboxOn'\n    },\n    offIcon: {\n      type: String,\n      default: '$checkboxOff'\n    }\n  },\n\n  render(h, {\n    props,\n    data\n  }) {\n    const children = [];\n\n    if (props.ripple && !props.disabled) {\n      const ripple = h('div', Colorable.options.methods.setTextColor(props.color, {\n        staticClass: 'v-input--selection-controls__ripple',\n        directives: [{\n          name: 'ripple',\n          value: {\n            center: true\n          }\n        }]\n      }));\n      children.push(ripple);\n    }\n\n    let icon = props.offIcon;\n    if (props.indeterminate) icon = props.indeterminateIcon;else if (props.value) icon = props.onIcon;\n    children.push(h(VIcon, Colorable.options.methods.setTextColor(props.value && props.color, {\n      props: {\n        disabled: props.disabled,\n        dark: props.dark,\n        light: props.light\n      }\n    }), icon));\n    const classes = {\n      'v-simple-checkbox': true,\n      'v-simple-checkbox--disabled': props.disabled\n    };\n    return h('div', { ...data,\n      class: classes,\n      on: {\n        click: e => {\n          e.stopPropagation();\n\n          if (data.on && data.on.input && !props.disabled) {\n            wrapInArray(data.on.input).forEach(f => f(!props.value));\n          }\n        }\n      }\n    }, children);\n  }\n\n});\n//# sourceMappingURL=VSimpleCheckbox.js.map","// Styles\nimport \"../../../src/components/VCard/VCard.sass\"; // Components\n\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox';\nimport VDivider from '../VDivider';\nimport VSubheader from '../VSubheader';\nimport { VList, VListItem, VListItemAction, VListItemContent, VListItemTitle } from '../VList'; // Directives\n\nimport ripple from '../../directives/ripple'; // Mixins\n\nimport Colorable from '../../mixins/colorable';\nimport Themeable from '../../mixins/themeable'; // Helpers\n\nimport { escapeHTML, getPropertyFromItem } from '../../util/helpers'; // Types\n\nimport mixins from '../../util/mixins';\n/* @vue/component */\n\nexport default mixins(Colorable, Themeable).extend({\n  name: 'v-select-list',\n  // https://github.com/vuejs/vue/issues/6872\n  directives: {\n    ripple\n  },\n  props: {\n    action: Boolean,\n    dense: Boolean,\n    hideSelected: Boolean,\n    items: {\n      type: Array,\n      default: () => []\n    },\n    itemDisabled: {\n      type: [String, Array, Function],\n      default: 'disabled'\n    },\n    itemText: {\n      type: [String, Array, Function],\n      default: 'text'\n    },\n    itemValue: {\n      type: [String, Array, Function],\n      default: 'value'\n    },\n    noDataText: String,\n    noFilter: Boolean,\n    searchInput: {\n      default: null\n    },\n    selectedItems: {\n      type: Array,\n      default: () => []\n    }\n  },\n  computed: {\n    parsedItems() {\n      return this.selectedItems.map(item => this.getValue(item));\n    },\n\n    tileActiveClass() {\n      return Object.keys(this.setTextColor(this.color).class || {}).join(' ');\n    },\n\n    staticNoDataTile() {\n      const tile = {\n        attrs: {\n          role: undefined\n        },\n        on: {\n          mousedown: e => e.preventDefault()\n        }\n      };\n      return this.$createElement(VListItem, tile, [this.genTileContent(this.noDataText)]);\n    }\n\n  },\n  methods: {\n    genAction(item, inputValue) {\n      return this.$createElement(VListItemAction, [this.$createElement(VSimpleCheckbox, {\n        props: {\n          color: this.color,\n          value: inputValue\n        },\n        on: {\n          input: () => this.$emit('select', item)\n        }\n      })]);\n    },\n\n    genDivider(props) {\n      return this.$createElement(VDivider, {\n        props\n      });\n    },\n\n    genFilteredText(text) {\n      text = text || '';\n      if (!this.searchInput || this.noFilter) return escapeHTML(text);\n      const {\n        start,\n        middle,\n        end\n      } = this.getMaskedCharacters(text);\n      return `${escapeHTML(start)}${this.genHighlight(middle)}${escapeHTML(end)}`;\n    },\n\n    genHeader(props) {\n      return this.$createElement(VSubheader, {\n        props\n      }, props.header);\n    },\n\n    genHighlight(text) {\n      return `<span class=\"v-list-item__mask\">${escapeHTML(text)}</span>`;\n    },\n\n    genLabelledBy(item) {\n      const text = escapeHTML(this.getText(item).split(' ').join('-').toLowerCase());\n      return `${text}-list-item-${this._uid}`;\n    },\n\n    getMaskedCharacters(text) {\n      const searchInput = (this.searchInput || '').toString().toLocaleLowerCase();\n      const index = text.toLocaleLowerCase().indexOf(searchInput);\n      if (index < 0) return {\n        start: '',\n        middle: text,\n        end: ''\n      };\n      const start = text.slice(0, index);\n      const middle = text.slice(index, index + searchInput.length);\n      const end = text.slice(index + searchInput.length);\n      return {\n        start,\n        middle,\n        end\n      };\n    },\n\n    genTile(item, disabled = null, value = false) {\n      if (!value) value = this.hasItem(item);\n\n      if (item === Object(item)) {\n        disabled = disabled !== null ? disabled : this.getDisabled(item);\n      }\n\n      const tile = {\n        attrs: {\n          // Default behavior in list does not\n          // contain aria-selected by default\n          'aria-selected': String(value),\n          'aria-labelledby': this.genLabelledBy(item),\n          role: 'option'\n        },\n        on: {\n          mousedown: e => {\n            // Prevent onBlur from being called\n            e.preventDefault();\n          },\n          click: () => disabled || this.$emit('select', item)\n        },\n        props: {\n          activeClass: this.tileActiveClass,\n          disabled,\n          ripple: true,\n          inputValue: value\n        }\n      };\n\n      if (!this.$scopedSlots.item) {\n        return this.$createElement(VListItem, tile, [this.action && !this.hideSelected && this.items.length > 0 ? this.genAction(item, value) : null, this.genTileContent(item)]);\n      }\n\n      const parent = this;\n      const scopedSlot = this.$scopedSlots.item({\n        parent,\n        item,\n        attrs: { ...tile.attrs,\n          ...tile.props\n        },\n        on: tile.on\n      });\n      return this.needsTile(scopedSlot) ? this.$createElement(VListItem, tile, scopedSlot) : scopedSlot;\n    },\n\n    genTileContent(item) {\n      const innerHTML = this.genFilteredText(this.getText(item));\n      return this.$createElement(VListItemContent, [this.$createElement(VListItemTitle, {\n        attrs: {\n          id: this.genLabelledBy(item)\n        },\n        domProps: {\n          innerHTML\n        }\n      })]);\n    },\n\n    hasItem(item) {\n      return this.parsedItems.indexOf(this.getValue(item)) > -1;\n    },\n\n    needsTile(slot) {\n      return slot.length !== 1 || slot[0].componentOptions == null || slot[0].componentOptions.Ctor.options.name !== 'v-list-item';\n    },\n\n    getDisabled(item) {\n      return Boolean(getPropertyFromItem(item, this.itemDisabled, false));\n    },\n\n    getText(item) {\n      return String(getPropertyFromItem(item, this.itemText, item));\n    },\n\n    getValue(item) {\n      return getPropertyFromItem(item, this.itemValue, this.getText(item));\n    }\n\n  },\n\n  render() {\n    const children = [];\n\n    for (const item of this.items) {\n      if (this.hideSelected && this.hasItem(item)) continue;\n      if (item == null) children.push(this.genTile(item));else if (item.header) children.push(this.genHeader(item));else if (item.divider) children.push(this.genDivider(item));else children.push(this.genTile(item));\n    }\n\n    children.length || children.push(this.$slots['no-data'] || this.staticNoDataTile);\n    this.$slots['prepend-item'] && children.unshift(this.$slots['prepend-item']);\n    this.$slots['append-item'] && children.push(this.$slots['append-item']);\n    return this.$createElement('div', {\n      staticClass: 'v-select-list v-card',\n      class: this.themeClasses\n    }, [this.$createElement(VList, {\n      attrs: {\n        id: this.$attrs.id,\n        role: 'listbox',\n        tabindex: -1\n      },\n      props: {\n        dense: this.dense\n      }\n    }, children)]);\n  }\n\n});\n//# sourceMappingURL=VSelectList.js.map","import Vue from 'vue';\nimport { deepEqual } from '../../util/helpers';\nexport default Vue.extend({\n  name: 'comparable',\n  props: {\n    valueComparator: {\n      type: Function,\n      default: deepEqual\n    }\n  }\n});\n//# sourceMappingURL=index.js.map","import Vue from 'vue';\n/* @vue/component */\n\nexport default Vue.extend({\n  name: 'filterable',\n  props: {\n    noDataText: {\n      type: String,\n      default: '$vuetify.noDataText'\n    }\n  }\n});\n//# sourceMappingURL=index.js.map","// Styles\nimport \"../../../src/components/VTextField/VTextField.sass\";\nimport \"../../../src/components/VSelect/VSelect.sass\"; // Components\n\nimport VChip from '../VChip';\nimport VMenu from '../VMenu';\nimport VSelectList from './VSelectList'; // Extensions\n\nimport VTextField from '../VTextField/VTextField'; // Mixins\n\nimport Comparable from '../../mixins/comparable';\nimport Filterable from '../../mixins/filterable'; // Directives\n\nimport ClickOutside from '../../directives/click-outside'; // Utilities\n\nimport { getPropertyFromItem, keyCodes } from '../../util/helpers';\nimport { consoleError } from '../../util/console'; // Types\n\nimport mixins from '../../util/mixins';\nexport const defaultMenuProps = {\n  closeOnClick: false,\n  closeOnContentClick: false,\n  disableKeys: true,\n  openOnClick: false,\n  maxHeight: 304\n};\nconst baseMixins = mixins(VTextField, Comparable, Filterable);\n/* @vue/component */\n\nexport default baseMixins.extend().extend({\n  name: 'v-select',\n  directives: {\n    ClickOutside\n  },\n  props: {\n    appendIcon: {\n      type: String,\n      default: '$dropdown'\n    },\n    attach: {\n      default: false\n    },\n    cacheItems: Boolean,\n    chips: Boolean,\n    clearable: Boolean,\n    deletableChips: Boolean,\n    eager: Boolean,\n    hideSelected: Boolean,\n    items: {\n      type: Array,\n      default: () => []\n    },\n    itemColor: {\n      type: String,\n      default: 'primary'\n    },\n    itemDisabled: {\n      type: [String, Array, Function],\n      default: 'disabled'\n    },\n    itemText: {\n      type: [String, Array, Function],\n      default: 'text'\n    },\n    itemValue: {\n      type: [String, Array, Function],\n      default: 'value'\n    },\n    menuProps: {\n      type: [String, Array, Object],\n      default: () => defaultMenuProps\n    },\n    multiple: Boolean,\n    openOnClear: Boolean,\n    returnObject: Boolean,\n    smallChips: Boolean\n  },\n\n  data() {\n    return {\n      cachedItems: this.cacheItems ? this.items : [],\n      content: null,\n      isBooted: false,\n      isMenuActive: false,\n      lastItem: 20,\n      // As long as a value is defined, show it\n      // Otherwise, check if multiple\n      // to determine which default to provide\n      lazyValue: this.value !== undefined ? this.value : this.multiple ? [] : undefined,\n      selectedIndex: -1,\n      selectedItems: [],\n      keyboardLookupPrefix: '',\n      keyboardLookupLastTime: 0\n    };\n  },\n\n  computed: {\n    /* All items that the select has */\n    allItems() {\n      return this.filterDuplicates(this.cachedItems.concat(this.items));\n    },\n\n    classes() {\n      return { ...VTextField.options.computed.classes.call(this),\n        'v-select': true,\n        'v-select--chips': this.hasChips,\n        'v-select--chips--small': this.smallChips,\n        'v-select--is-menu-active': this.isMenuActive,\n        'v-select--is-multi': this.multiple\n      };\n    },\n\n    /* Used by other components to overwrite */\n    computedItems() {\n      return this.allItems;\n    },\n\n    computedOwns() {\n      return `list-${this._uid}`;\n    },\n\n    counterValue() {\n      return this.multiple ? this.selectedItems.length : (this.getText(this.selectedItems[0]) || '').toString().length;\n    },\n\n    directives() {\n      return this.isFocused ? [{\n        name: 'click-outside',\n        value: this.blur,\n        args: {\n          closeConditional: this.closeConditional\n        }\n      }] : undefined;\n    },\n\n    dynamicHeight() {\n      return 'auto';\n    },\n\n    hasChips() {\n      return this.chips || this.smallChips;\n    },\n\n    hasSlot() {\n      return Boolean(this.hasChips || this.$scopedSlots.selection);\n    },\n\n    isDirty() {\n      return this.selectedItems.length > 0;\n    },\n\n    listData() {\n      const scopeId = this.$vnode && this.$vnode.context.$options._scopeId;\n      const attrs = scopeId ? {\n        [scopeId]: true\n      } : {};\n      return {\n        attrs: { ...attrs,\n          id: this.computedOwns\n        },\n        props: {\n          action: this.multiple,\n          color: this.itemColor,\n          dense: this.dense,\n          hideSelected: this.hideSelected,\n          items: this.virtualizedItems,\n          itemDisabled: this.itemDisabled,\n          itemText: this.itemText,\n          itemValue: this.itemValue,\n          noDataText: this.$vuetify.lang.t(this.noDataText),\n          selectedItems: this.selectedItems\n        },\n        on: {\n          select: this.selectItem\n        },\n        scopedSlots: {\n          item: this.$scopedSlots.item\n        }\n      };\n    },\n\n    staticList() {\n      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n        consoleError('assert: staticList should not be called if slots are used');\n      }\n\n      return this.$createElement(VSelectList, this.listData);\n    },\n\n    virtualizedItems() {\n      return this.$_menuProps.auto ? this.computedItems : this.computedItems.slice(0, this.lastItem);\n    },\n\n    menuCanShow: () => true,\n\n    $_menuProps() {\n      let normalisedProps = typeof this.menuProps === 'string' ? this.menuProps.split(',') : this.menuProps;\n\n      if (Array.isArray(normalisedProps)) {\n        normalisedProps = normalisedProps.reduce((acc, p) => {\n          acc[p.trim()] = true;\n          return acc;\n        }, {});\n      }\n\n      return { ...defaultMenuProps,\n        eager: this.eager,\n        value: this.menuCanShow && this.isMenuActive,\n        nudgeBottom: normalisedProps.offsetY ? 1 : 0,\n        ...normalisedProps\n      };\n    }\n\n  },\n  watch: {\n    internalValue(val) {\n      this.initialValue = val;\n      this.setSelectedItems();\n    },\n\n    isBooted() {\n      this.$nextTick(() => {\n        if (this.content && this.content.addEventListener) {\n          this.content.addEventListener('scroll', this.onScroll, false);\n        }\n      });\n    },\n\n    isMenuActive(val) {\n      this.$nextTick(() => this.onMenuActiveChange(val));\n      if (!val) return;\n      this.isBooted = true;\n    },\n\n    items: {\n      immediate: true,\n\n      handler(val) {\n        if (this.cacheItems) {\n          // Breaks vue-test-utils if\n          // this isn't calculated\n          // on the next tick\n          this.$nextTick(() => {\n            this.cachedItems = this.filterDuplicates(this.cachedItems.concat(val));\n          });\n        }\n\n        this.setSelectedItems();\n      }\n\n    }\n  },\n\n  mounted() {\n    this.content = this.$refs.menu && this.$refs.menu.$refs.content;\n  },\n\n  methods: {\n    /** @public */\n    blur(e) {\n      VTextField.options.methods.blur.call(this, e);\n      this.isMenuActive = false;\n      this.isFocused = false;\n      this.selectedIndex = -1;\n    },\n\n    /** @public */\n    activateMenu() {\n      if (this.disabled || this.readonly || this.isMenuActive) return;\n      this.isMenuActive = true;\n    },\n\n    clearableCallback() {\n      this.setValue(this.multiple ? [] : undefined);\n      this.$nextTick(() => this.$refs.input && this.$refs.input.focus());\n      if (this.openOnClear) this.isMenuActive = true;\n    },\n\n    closeConditional(e) {\n      return !this._isDestroyed && // Click originates from outside the menu content\n      this.content && !this.content.contains(e.target) && // Click originates from outside the element\n      this.$el && !this.$el.contains(e.target) && e.target !== this.$el;\n    },\n\n    filterDuplicates(arr) {\n      const uniqueValues = new Map();\n\n      for (let index = 0; index < arr.length; ++index) {\n        const item = arr[index];\n        const val = this.getValue(item); // TODO: comparator\n\n        !uniqueValues.has(val) && uniqueValues.set(val, item);\n      }\n\n      return Array.from(uniqueValues.values());\n    },\n\n    findExistingIndex(item) {\n      const itemValue = this.getValue(item);\n      return (this.internalValue || []).findIndex(i => this.valueComparator(this.getValue(i), itemValue));\n    },\n\n    genChipSelection(item, index) {\n      const isDisabled = this.disabled || this.readonly || this.getDisabled(item);\n      return this.$createElement(VChip, {\n        staticClass: 'v-chip--select',\n        attrs: {\n          tabindex: -1\n        },\n        props: {\n          close: this.deletableChips && !isDisabled,\n          disabled: isDisabled,\n          inputValue: index === this.selectedIndex,\n          small: this.smallChips\n        },\n        on: {\n          click: e => {\n            if (isDisabled) return;\n            e.stopPropagation();\n            this.selectedIndex = index;\n          },\n          'click:close': () => this.onChipInput(item)\n        },\n        key: JSON.stringify(this.getValue(item))\n      }, this.getText(item));\n    },\n\n    genCommaSelection(item, index, last) {\n      const color = index === this.selectedIndex && this.computedColor;\n      const isDisabled = this.disabled || this.getDisabled(item);\n      return this.$createElement('div', this.setTextColor(color, {\n        staticClass: 'v-select__selection v-select__selection--comma',\n        class: {\n          'v-select__selection--disabled': isDisabled\n        },\n        key: JSON.stringify(this.getValue(item))\n      }), `${this.getText(item)}${last ? '' : ', '}`);\n    },\n\n    genDefaultSlot() {\n      const selections = this.genSelections();\n      const input = this.genInput(); // If the return is an empty array\n      // push the input\n\n      if (Array.isArray(selections)) {\n        selections.push(input); // Otherwise push it into children\n      } else {\n        selections.children = selections.children || [];\n        selections.children.push(input);\n      }\n\n      return [this.genFieldset(), this.$createElement('div', {\n        staticClass: 'v-select__slot',\n        directives: this.directives\n      }, [this.genLabel(), this.prefix ? this.genAffix('prefix') : null, selections, this.suffix ? this.genAffix('suffix') : null, this.genClearIcon(), this.genIconSlot()]), this.genMenu(), this.genProgress()];\n    },\n\n    genInput() {\n      const input = VTextField.options.methods.genInput.call(this);\n      input.data.domProps.value = null;\n      input.data.attrs.readonly = true;\n      input.data.attrs.type = 'text';\n      input.data.attrs['aria-readonly'] = true;\n      input.data.on.keypress = this.onKeyPress;\n      return input;\n    },\n\n    genInputSlot() {\n      const render = VTextField.options.methods.genInputSlot.call(this);\n      render.data.attrs = { ...render.data.attrs,\n        role: 'button',\n        'aria-haspopup': 'listbox',\n        'aria-expanded': String(this.isMenuActive),\n        'aria-owns': this.computedOwns\n      };\n      return render;\n    },\n\n    genList() {\n      // If there's no slots, we can use a cached VNode to improve performance\n      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n        return this.genListWithSlot();\n      } else {\n        return this.staticList;\n      }\n    },\n\n    genListWithSlot() {\n      const slots = ['prepend-item', 'no-data', 'append-item'].filter(slotName => this.$slots[slotName]).map(slotName => this.$createElement('template', {\n        slot: slotName\n      }, this.$slots[slotName])); // Requires destructuring due to Vue\n      // modifying the `on` property when passed\n      // as a referenced object\n\n      return this.$createElement(VSelectList, { ...this.listData\n      }, slots);\n    },\n\n    genMenu() {\n      const props = this.$_menuProps;\n      props.activator = this.$refs['input-slot']; // Attach to root el so that\n      // menu covers prepend/append icons\n\n      if ( // TODO: make this a computed property or helper or something\n      this.attach === '' || // If used as a boolean prop (<v-menu attach>)\n      this.attach === true || // If bound to a boolean (<v-menu :attach=\"true\">)\n      this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))\n      ) {\n          props.attach = this.$el;\n        } else {\n        props.attach = this.attach;\n      }\n\n      return this.$createElement(VMenu, {\n        attrs: {\n          role: undefined\n        },\n        props,\n        on: {\n          input: val => {\n            this.isMenuActive = val;\n            this.isFocused = val;\n          }\n        },\n        ref: 'menu'\n      }, [this.genList()]);\n    },\n\n    genSelections() {\n      let length = this.selectedItems.length;\n      const children = new Array(length);\n      let genSelection;\n\n      if (this.$scopedSlots.selection) {\n        genSelection = this.genSlotSelection;\n      } else if (this.hasChips) {\n        genSelection = this.genChipSelection;\n      } else {\n        genSelection = this.genCommaSelection;\n      }\n\n      while (length--) {\n        children[length] = genSelection(this.selectedItems[length], length, length === children.length - 1);\n      }\n\n      return this.$createElement('div', {\n        staticClass: 'v-select__selections'\n      }, children);\n    },\n\n    genSlotSelection(item, index) {\n      return this.$scopedSlots.selection({\n        attrs: {\n          class: 'v-chip--select'\n        },\n        parent: this,\n        item,\n        index,\n        select: e => {\n          e.stopPropagation();\n          this.selectedIndex = index;\n        },\n        selected: index === this.selectedIndex,\n        disabled: this.disabled || this.readonly\n      });\n    },\n\n    getMenuIndex() {\n      return this.$refs.menu ? this.$refs.menu.listIndex : -1;\n    },\n\n    getDisabled(item) {\n      return getPropertyFromItem(item, this.itemDisabled, false);\n    },\n\n    getText(item) {\n      return getPropertyFromItem(item, this.itemText, item);\n    },\n\n    getValue(item) {\n      return getPropertyFromItem(item, this.itemValue, this.getText(item));\n    },\n\n    onBlur(e) {\n      e && this.$emit('blur', e);\n    },\n\n    onChipInput(item) {\n      if (this.multiple) this.selectItem(item);else this.setValue(null); // If all items have been deleted,\n      // open `v-menu`\n\n      if (this.selectedItems.length === 0) {\n        this.isMenuActive = true;\n      } else {\n        this.isMenuActive = false;\n      }\n\n      this.selectedIndex = -1;\n    },\n\n    onClick() {\n      if (this.isDisabled) return;\n      this.isMenuActive = true;\n\n      if (!this.isFocused) {\n        this.isFocused = true;\n        this.$emit('focus');\n      }\n    },\n\n    onEscDown(e) {\n      e.preventDefault();\n\n      if (this.isMenuActive) {\n        e.stopPropagation();\n        this.isMenuActive = false;\n      }\n    },\n\n    onKeyPress(e) {\n      if (this.multiple || this.readonly) return;\n      const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds\n\n      const now = performance.now();\n\n      if (now - this.keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {\n        this.keyboardLookupPrefix = '';\n      }\n\n      this.keyboardLookupPrefix += e.key.toLowerCase();\n      this.keyboardLookupLastTime = now;\n      const index = this.allItems.findIndex(item => {\n        const text = (this.getText(item) || '').toString();\n        return text.toLowerCase().startsWith(this.keyboardLookupPrefix);\n      });\n      const item = this.allItems[index];\n\n      if (index !== -1) {\n        this.setValue(this.returnObject ? item : this.getValue(item));\n        setTimeout(() => this.setMenuIndex(index));\n      }\n    },\n\n    onKeyDown(e) {\n      const keyCode = e.keyCode;\n      const menu = this.$refs.menu; // If enter, space, open menu\n\n      if ([keyCodes.enter, keyCodes.space].includes(keyCode)) this.activateMenu();\n      if (!menu) return; // If menu is active, allow default\n      // listIndex change from menu\n\n      if (this.isMenuActive && keyCode !== keyCodes.tab) {\n        this.$nextTick(() => {\n          menu.changeListIndex(e);\n          this.$emit('update:list-index', menu.listIndex);\n        });\n      } // If menu is not active, up and down can do\n      // one of 2 things. If multiple, opens the\n      // menu, if not, will cycle through all\n      // available options\n\n\n      if (!this.isMenuActive && [keyCodes.up, keyCodes.down].includes(keyCode)) return this.onUpDown(e); // If escape deactivate the menu\n\n      if (keyCode === keyCodes.esc) return this.onEscDown(e); // If tab - select item or close menu\n\n      if (keyCode === keyCodes.tab) return this.onTabDown(e); // If space preventDefault\n\n      if (keyCode === keyCodes.space) return this.onSpaceDown(e);\n    },\n\n    onMenuActiveChange(val) {\n      // If menu is closing and mulitple\n      // or menuIndex is already set\n      // skip menu index recalculation\n      if (this.multiple && !val || this.getMenuIndex() > -1) return;\n      const menu = this.$refs.menu;\n      if (!menu || !this.isDirty) return; // When menu opens, set index of first active item\n\n      for (let i = 0; i < menu.tiles.length; i++) {\n        if (menu.tiles[i].getAttribute('aria-selected') === 'true') {\n          this.setMenuIndex(i);\n          break;\n        }\n      }\n    },\n\n    onMouseUp(e) {\n      if (this.hasMouseDown && e.which !== 3) {\n        const appendInner = this.$refs['append-inner']; // If append inner is present\n        // and the target is itself\n        // or inside, toggle menu\n\n        if (this.isMenuActive && appendInner && (appendInner === e.target || appendInner.contains(e.target))) {\n          this.$nextTick(() => this.isMenuActive = !this.isMenuActive); // If user is clicking in the container\n          // and field is enclosed, activate it\n        } else if (this.isEnclosed && !this.isDisabled) {\n          this.isMenuActive = true;\n        }\n      }\n\n      VTextField.options.methods.onMouseUp.call(this, e);\n    },\n\n    onScroll() {\n      if (!this.isMenuActive) {\n        requestAnimationFrame(() => this.content.scrollTop = 0);\n      } else {\n        if (this.lastItem >= this.computedItems.length) return;\n        const showMoreItems = this.content.scrollHeight - (this.content.scrollTop + this.content.clientHeight) < 200;\n\n        if (showMoreItems) {\n          this.lastItem += 20;\n        }\n      }\n    },\n\n    onSpaceDown(e) {\n      e.preventDefault();\n    },\n\n    onTabDown(e) {\n      const menu = this.$refs.menu;\n      if (!menu) return;\n      const activeTile = menu.activeTile; // An item that is selected by\n      // menu-index should toggled\n\n      if (!this.multiple && activeTile && this.isMenuActive) {\n        e.preventDefault();\n        e.stopPropagation();\n        activeTile.click();\n      } else {\n        // If we make it here,\n        // the user has no selected indexes\n        // and is probably tabbing out\n        this.blur(e);\n      }\n    },\n\n    onUpDown(e) {\n      const menu = this.$refs.menu;\n      if (!menu) return;\n      e.preventDefault(); // Multiple selects do not cycle their value\n      // when pressing up or down, instead activate\n      // the menu\n\n      if (this.multiple) return this.activateMenu();\n      const keyCode = e.keyCode; // Cycle through available values to achieve\n      // select native behavior\n\n      menu.getTiles();\n      keyCodes.up === keyCode ? menu.prevTile() : menu.nextTile();\n      menu.activeTile && menu.activeTile.click();\n    },\n\n    selectItem(item) {\n      if (!this.multiple) {\n        this.setValue(this.returnObject ? item : this.getValue(item));\n        this.isMenuActive = false;\n      } else {\n        const internalValue = (this.internalValue || []).slice();\n        const i = this.findExistingIndex(item);\n        i !== -1 ? internalValue.splice(i, 1) : internalValue.push(item);\n        this.setValue(internalValue.map(i => {\n          return this.returnObject ? i : this.getValue(i);\n        })); // When selecting multiple\n        // adjust menu after each\n        // selection\n\n        this.$nextTick(() => {\n          this.$refs.menu && this.$refs.menu.updateDimensions();\n        }); // We only need to reset list index for multiple\n        // to keep highlight when an item is toggled\n        // on and off\n\n        if (!this.multiple) return;\n        const listIndex = this.getMenuIndex();\n        this.setMenuIndex(-1); // There is no item to re-highlight\n        // when selections are hidden\n\n        if (this.hideSelected) return;\n        this.$nextTick(() => this.setMenuIndex(listIndex));\n      }\n    },\n\n    setMenuIndex(index) {\n      this.$refs.menu && (this.$refs.menu.listIndex = index);\n    },\n\n    setSelectedItems() {\n      const selectedItems = [];\n      const values = !this.multiple || !Array.isArray(this.internalValue) ? [this.internalValue] : this.internalValue;\n\n      for (const value of values) {\n        const index = this.allItems.findIndex(v => this.valueComparator(this.getValue(v), this.getValue(value)));\n\n        if (index > -1) {\n          selectedItems.push(this.allItems[index]);\n        }\n      }\n\n      this.selectedItems = selectedItems;\n    },\n\n    setValue(value) {\n      const oldValue = this.internalValue;\n      this.internalValue = value;\n      value !== oldValue && this.$emit('change', value);\n    }\n\n  }\n});\n//# sourceMappingURL=VSelect.js.map","// Directives\nimport ripple from '../../directives/ripple'; // Types\n\nimport Vue from 'vue';\nexport default Vue.extend({\n  name: 'rippleable',\n  directives: {\n    ripple\n  },\n  props: {\n    ripple: {\n      type: [Boolean, Object],\n      default: true\n    }\n  },\n  methods: {\n    genRipple(data = {}) {\n      if (!this.ripple) return null;\n      data.staticClass = 'v-input--selection-controls__ripple';\n      data.directives = data.directives || [];\n      data.directives.push({\n        name: 'ripple',\n        value: {\n          center: true\n        }\n      });\n      data.on = Object.assign({\n        click: this.onChange\n      }, this.$listeners);\n      return this.$createElement('div', data);\n    },\n\n    onChange() {}\n\n  }\n});\n//# sourceMappingURL=index.js.map","// Components\nimport VInput from '../../components/VInput'; // Mixins\n\nimport Rippleable from '../rippleable';\nimport Comparable from '../comparable'; // Utilities\n\nimport mixins from '../../util/mixins';\n/* @vue/component */\n\nexport default mixins(VInput, Rippleable, Comparable).extend({\n  name: 'selectable',\n  model: {\n    prop: 'inputValue',\n    event: 'change'\n  },\n  props: {\n    id: String,\n    inputValue: null,\n    falseValue: null,\n    trueValue: null,\n    multiple: {\n      type: Boolean,\n      default: null\n    },\n    label: String\n  },\n\n  data() {\n    return {\n      hasColor: this.inputValue,\n      lazyValue: this.inputValue\n    };\n  },\n\n  computed: {\n    computedColor() {\n      if (!this.isActive) return undefined;\n      if (this.color) return this.color;\n      if (this.isDark && !this.appIsDark) return 'white';\n      return 'accent';\n    },\n\n    isMultiple() {\n      return this.multiple === true || this.multiple === null && Array.isArray(this.internalValue);\n    },\n\n    isActive() {\n      const value = this.value;\n      const input = this.internalValue;\n\n      if (this.isMultiple) {\n        if (!Array.isArray(input)) return false;\n        return input.some(item => this.valueComparator(item, value));\n      }\n\n      if (this.trueValue === undefined || this.falseValue === undefined) {\n        return value ? this.valueComparator(value, input) : Boolean(input);\n      }\n\n      return this.valueComparator(input, this.trueValue);\n    },\n\n    isDirty() {\n      return this.isActive;\n    }\n\n  },\n  watch: {\n    inputValue(val) {\n      this.lazyValue = val;\n      this.hasColor = val;\n    }\n\n  },\n  methods: {\n    genLabel() {\n      const label = VInput.options.methods.genLabel.call(this);\n      if (!label) return label;\n      label.data.on = {\n        click: e => {\n          // Prevent label from\n          // causing the input\n          // to focus\n          e.preventDefault();\n          this.onChange();\n        }\n      };\n      return label;\n    },\n\n    genInput(type, attrs) {\n      return this.$createElement('input', {\n        attrs: Object.assign({\n          'aria-checked': this.isActive.toString(),\n          disabled: this.isDisabled,\n          id: this.computedId,\n          role: type,\n          type\n        }, attrs),\n        domProps: {\n          value: this.value,\n          checked: this.isActive\n        },\n        on: {\n          blur: this.onBlur,\n          change: this.onChange,\n          focus: this.onFocus,\n          keydown: this.onKeydown\n        },\n        ref: 'input'\n      });\n    },\n\n    onBlur() {\n      this.isFocused = false;\n    },\n\n    onChange() {\n      if (this.isDisabled) return;\n      const value = this.value;\n      let input = this.internalValue;\n\n      if (this.isMultiple) {\n        if (!Array.isArray(input)) {\n          input = [];\n        }\n\n        const length = input.length;\n        input = input.filter(item => !this.valueComparator(item, value));\n\n        if (input.length === length) {\n          input.push(value);\n        }\n      } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n        input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue;\n      } else if (value) {\n        input = this.valueComparator(input, value) ? null : value;\n      } else {\n        input = !input;\n      }\n\n      this.validate(true, input);\n      this.internalValue = input;\n      this.hasColor = input;\n    },\n\n    onFocus() {\n      this.isFocused = true;\n    },\n\n    /** @abstract */\n    onKeydown(e) {}\n\n  }\n});\n//# sourceMappingURL=index.js.map","// Styles\nimport \"../../../src/styles/components/_selection-controls.sass\";\nimport \"../../../src/components/VSwitch/VSwitch.sass\"; // Mixins\n\nimport Selectable from '../../mixins/selectable';\nimport VInput from '../VInput'; // Directives\n\nimport Touch from '../../directives/touch'; // Components\n\nimport { VFabTransition } from '../transitions';\nimport VProgressCircular from '../VProgressCircular/VProgressCircular'; // Helpers\n\nimport { keyCodes } from '../../util/helpers';\n/* @vue/component */\n\nexport default Selectable.extend({\n  name: 'v-switch',\n  directives: {\n    Touch\n  },\n  props: {\n    inset: Boolean,\n    loading: {\n      type: [Boolean, String],\n      default: false\n    },\n    flat: {\n      type: Boolean,\n      default: false\n    }\n  },\n  computed: {\n    classes() {\n      return { ...VInput.options.computed.classes.call(this),\n        'v-input--selection-controls v-input--switch': true,\n        'v-input--switch--flat': this.flat,\n        'v-input--switch--inset': this.inset\n      };\n    },\n\n    attrs() {\n      return {\n        'aria-checked': String(this.isActive),\n        'aria-disabled': String(this.disabled),\n        role: 'switch'\n      };\n    },\n\n    // Do not return undefined if disabled,\n    // according to spec, should still show\n    // a color when disabled and active\n    validationState() {\n      if (this.hasError && this.shouldValidate) return 'error';\n      if (this.hasSuccess) return 'success';\n      if (this.hasColor !== null) return this.computedColor;\n      return undefined;\n    },\n\n    switchData() {\n      return this.setTextColor(this.loading ? undefined : this.validationState, {\n        class: this.themeClasses\n      });\n    }\n\n  },\n  methods: {\n    genDefaultSlot() {\n      return [this.genSwitch(), this.genLabel()];\n    },\n\n    genSwitch() {\n      return this.$createElement('div', {\n        staticClass: 'v-input--selection-controls__input'\n      }, [this.genInput('checkbox', { ...this.attrs,\n        ...this.attrs$\n      }), this.genRipple(this.setTextColor(this.validationState, {\n        directives: [{\n          name: 'touch',\n          value: {\n            left: this.onSwipeLeft,\n            right: this.onSwipeRight\n          }\n        }]\n      })), this.$createElement('div', {\n        staticClass: 'v-input--switch__track',\n        ...this.switchData\n      }), this.$createElement('div', {\n        staticClass: 'v-input--switch__thumb',\n        ...this.switchData\n      }, [this.genProgress()])]);\n    },\n\n    genProgress() {\n      return this.$createElement(VFabTransition, {}, [this.loading === false ? null : this.$slots.progress || this.$createElement(VProgressCircular, {\n        props: {\n          color: this.loading === true || this.loading === '' ? this.color || 'primary' : this.loading,\n          size: 16,\n          width: 2,\n          indeterminate: true\n        }\n      })]);\n    },\n\n    onSwipeLeft() {\n      if (this.isActive) this.onChange();\n    },\n\n    onSwipeRight() {\n      if (!this.isActive) this.onChange();\n    },\n\n    onKeydown(e) {\n      if (e.keyCode === keyCodes.left && this.isActive || e.keyCode === keyCodes.right && !this.isActive) this.onChange();\n    }\n\n  }\n});\n//# sourceMappingURL=VSwitch.js.map","import { render, staticRenderFns } from \"./Config.vue?vue&type=template&id=38d47d66&\"\nimport script from \"./Config.vue?vue&type=script&lang=js&\"\nexport * from \"./Config.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListGroup } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VAlert,VCard,VDivider,VList,VListGroup,VListItem,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VSelect,VSlider,VSwitch,VTextField})\n","import VSubheader from './VSubheader';\nexport { VSubheader };\nexport default VSubheader;\n//# sourceMappingURL=index.js.map","import VMenu from './VMenu';\nexport { VMenu };\nexport default VMenu;\n//# sourceMappingURL=index.js.map","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.github.io/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (get) {\n  return function Map() { return get(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong, true);\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, CONSTRUCTOR_NAME);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(C.prototype, IS_MAP ? {\n      // 23.1.3.6 Map.prototype.get(key)\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // 23.1.3.9 Map.prototype.set(key, value)\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // 23.2.3.1 Set.prototype.add(value)\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return C;\n  },\n  setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common, IS_MAP, IS_WEAK) {\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var nativeMethod = NativePrototype[KEY];\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        nativeMethod.call(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        nativeMethod.call(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  // eslint-disable-next-line max-len\n  if (isForced(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n    new NativeConstructor().entries().next();\n  })))) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.REQUIRED = true;\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n","import VBtn from './VBtn';\nexport { VBtn };\nexport default VBtn;\n//# sourceMappingURL=index.js.map","import VDivider from './VDivider';\nexport { VDivider };\nexport default VDivider;\n//# sourceMappingURL=index.js.map"],"sourceRoot":""}
\ No newline at end of file
diff --git a/music_assistant/web/js/config.3af84ca2.js b/music_assistant/web/js/config.3af84ca2.js
new file mode 100644 (file)
index 0000000..297ea34
--- /dev/null
@@ -0,0 +1,2 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["config"],{"0c18":function(t,e,i){},1071:function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",[n("v-alert",{attrs:{value:t.restart_message,type:"info"}},[t._v(" "+t._s(t.$t("reboot_required"))+" ")]),t.configKey?t._e():n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{tile:""}},t._l(t.conf,(function(e,i){return n("v-list-item",{key:i,attrs:{tile:""},on:{click:function(e){return t.$router.push("/config/"+i)}}},[n("v-list-item-content",[n("v-list-item-title",[t._v(" "+t._s(t.$t("conf."+i)))])],1)],1)})),1)],1),"player_settings"!=t.configKey?n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{"two-line":"",tile:""}},t._l(t.conf[t.configKey],(function(e,s){return n("v-list-group",{key:s,attrs:{"no-action":""},scopedSlots:t._u([{key:"activator",fn:function(){return[n("v-list-item",[n("v-list-item-avatar",{staticStyle:{"margin-left":"-15px"},attrs:{tile:""}},[n("img",{staticStyle:{"border-radius":"5px",border:"1px solid rgba(0,0,0,.85)"},attrs:{src:i("9e01")("./"+s+".png")}})]),n("v-list-item-content",[n("v-list-item-title",[t._v(t._s(t.$t("conf."+s)))])],1)],1)]},proxy:!0}],null,!0)},[t._l(t.conf[t.configKey][s].__desc__,(function(e,i){return n("div",{key:i},[n("v-list-item",["boolean"==typeof e[1]?n("v-switch",{attrs:{label:t.$t("conf."+e[2])},on:{change:function(e){return t.confChanged(t.configKey,s,t.conf[t.configKey][s])}},model:{value:t.conf[t.configKey][s][e[0]],callback:function(i){t.$set(t.conf[t.configKey][s],e[0],i)},expression:"conf[configKey][conf_subkey][conf_item_value[0]]"}}):"<password>"==e[1]?n("v-text-field",{attrs:{label:t.$t("conf."+e[2]),filled:"",type:"password"},on:{change:function(e){return t.confChanged(t.configKey,s,t.conf[t.configKey][s])}},model:{value:t.conf[t.configKey][s][e[0]],callback:function(i){t.$set(t.conf[t.configKey][s],e[0],i)},expression:"conf[configKey][conf_subkey][conf_item_value[0]]"}}):"<player>"==e[1]?n("v-select",{attrs:{label:t.$t("conf."+e[2]),filled:"",type:"password"},on:{change:function(e){return t.confChanged(t.configKey,s,t.conf[t.configKey][s])}},model:{value:t.conf[t.configKey][s][e[0]],callback:function(i){t.$set(t.conf[t.configKey][s],e[0],i)},expression:"conf[configKey][conf_subkey][conf_item_value[0]]"}}):n("v-text-field",{attrs:{label:t.$t("conf."+e[2]),filled:""},on:{change:function(e){return t.confChanged(t.configKey,s,t.conf[t.configKey][s])}},model:{value:t.conf[t.configKey][s][e[0]],callback:function(i){t.$set(t.conf[t.configKey][s],e[0],i)},expression:"conf[configKey][conf_subkey][conf_item_value[0]]"}})],1)],1)})),n("v-divider")],2)})),1)],1):t._e(),"player_settings"==t.configKey?n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{"two-line":""}},t._l(t.$server.players,(function(e,s){return n("v-list-group",{key:s,attrs:{"no-action":""},scopedSlots:t._u([{key:"activator",fn:function(){return[n("v-list-item",[n("v-list-item-avatar",{staticStyle:{"margin-left":"-20px","margin-right":"6px"},attrs:{tile:""}},[n("img",{staticStyle:{"border-radius":"5px",border:"1px solid rgba(0,0,0,.85)"},attrs:{src:i("9e01")("./"+e.player_provider+".png")}})]),n("v-list-item-content",[n("v-list-item-title",{staticClass:"title"},[t._v(t._s(e.name))]),n("v-list-item-subtitle",{staticClass:"caption"},[t._v(t._s(s))])],1)],1)]},proxy:!0}],null,!0)},[t.conf.player_settings[s].enabled?n("div",t._l(t.conf.player_settings[s].__desc__,(function(e,i){return n("div",{key:i},[n("v-list-item",["boolean"==typeof e[1]?n("v-switch",{attrs:{label:t.$t("conf."+e[2])},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}}):"<password>"==e[1]?n("v-text-field",{attrs:{label:t.$t("conf."+e[2]),filled:"",type:"password"},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}}):"<player>"==e[1]?n("v-select",{attrs:{label:t.$t("conf."+e[2]),filled:""},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}},t._l(t.$server.players,(function(e,i){return n("option",{key:i,domProps:{value:t.item.id}},[t._v(t._s(t.item.name))])})),0):"max_sample_rate"==e[0]?n("v-select",{attrs:{label:t.$t("conf."+e[2]),items:t.sample_rates,filled:""},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}}):"crossfade_duration"==e[0]?n("v-slider",{attrs:{label:t.$t("conf."+e[2]),min:"0",max:"10",filled:"","thumb-label":""},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}}):n("v-text-field",{attrs:{label:t.$t("conf."+e[2]),filled:""},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s][e[0]],callback:function(i){t.$set(t.conf.player_settings[s],e[0],i)},expression:"conf.player_settings[key][conf_item_value[0]]"}})],1),t.conf.player_settings[s].enabled?t._e():n("v-list-item",[n("v-switch",{attrs:{label:t.$t("conf.enabled")},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s].enabled,callback:function(e){t.$set(t.conf.player_settings[s],"enabled",e)},expression:"conf.player_settings[key].enabled"}})],1)],1)})),0):n("div",[n("v-list-item",[n("v-switch",{attrs:{label:t.$t("conf.enabled")},on:{change:function(e){return t.confChanged("player_settings",s,t.conf.player_settings[s])}},model:{value:t.conf.player_settings[s].enabled,callback:function(e){t.$set(t.conf.player_settings[s],"enabled",e)},expression:"conf.player_settings[key].enabled"}})],1)],1),n("v-divider")],1)})),1)],1):t._e()],1)},s=[],r=(i("96cf"),i("89ba")),o={components:{},props:["configKey"],data:function(){return{conf:{},players:{},active:0,sample_rates:[44100,48e3,88200,96e3,192e3,384e3],restart_message:!1}},created:function(){this.$store.windowtitle=this.$t("settings"),this.configKey&&(this.$store.windowtitle+=" | "+this.$t("conf."+this.configKey)),this.getConfig()},methods:{getConfig:function(){var t=Object(r["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.$server.getData("config");case 2:this.conf=t.sent;case 3:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),confChanged:function(){var t=Object(r["a"])(regeneratorRuntime.mark((function t(e,i,n){var s,r;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return s="config/"+e+"/"+i,t.next=3,this.$server.postData(s,n);case 3:r=t.sent,r.restart_required&&(this.restart_message=!0);case 5:case"end":return t.stop()}}),t,this)})));function e(e,i,n){return t.apply(this,arguments)}return e}()}},a=o,l=i("2877"),c=i("6544"),u=i.n(c),h=(i("a4d3"),i("4de4"),i("4160"),i("caad"),i("e439"),i("dbb4"),i("b64b"),i("159b"),i("2fa7")),d=(i("0c18"),i("10d2")),p=i("afdd"),f=i("9d26"),v=i("f2e7"),g=i("7560"),m=i("2b0e"),b=m["a"].extend({name:"transitionable",props:{mode:String,origin:String,transition:String}}),y=i("58df"),x=i("d9bd");function _(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function $(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?_(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):_(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var C=Object(y["a"])(d["a"],v["a"],b).extend({name:"v-alert",props:{border:{type:String,validator:function(t){return["top","right","bottom","left"].includes(t)}},closeLabel:{type:String,default:"$vuetify.close"},coloredBorder:Boolean,dense:Boolean,dismissible:Boolean,icon:{default:"",type:[Boolean,String],validator:function(t){return"string"===typeof t||!1===t}},outlined:Boolean,prominent:Boolean,text:Boolean,type:{type:String,validator:function(t){return["info","error","success","warning"].includes(t)}},value:{type:Boolean,default:!0}},computed:{__cachedBorder:function(){if(!this.border)return null;var t={staticClass:"v-alert__border",class:Object(h["a"])({},"v-alert__border--".concat(this.border),!0)};return this.coloredBorder&&(t=this.setBackgroundColor(this.computedColor,t),t.class["v-alert__border--has-color"]=!0),this.$createElement("div",t)},__cachedDismissible:function(){var t=this;if(!this.dismissible)return null;var e=this.iconColor;return this.$createElement(p["a"],{staticClass:"v-alert__dismissible",props:{color:e,icon:!0,small:!0},attrs:{"aria-label":this.$vuetify.lang.t(this.closeLabel)},on:{click:function(){return t.isActive=!1}}},[this.$createElement(f["a"],{props:{color:e}},"$cancel")])},__cachedIcon:function(){return this.computedIcon?this.$createElement(f["a"],{staticClass:"v-alert__icon",props:{color:this.iconColor}},this.computedIcon):null},classes:function(){var t=$({},d["a"].options.computed.classes.call(this),{"v-alert--border":Boolean(this.border),"v-alert--dense":this.dense,"v-alert--outlined":this.outlined,"v-alert--prominent":this.prominent,"v-alert--text":this.text});return this.border&&(t["v-alert--border-".concat(this.border)]=!0),t},computedColor:function(){return this.color||this.type},computedIcon:function(){return!1!==this.icon&&("string"===typeof this.icon&&this.icon?this.icon:!!["error","info","success","warning"].includes(this.type)&&"$".concat(this.type))},hasColoredIcon:function(){return this.hasText||Boolean(this.border)&&this.coloredBorder},hasText:function(){return this.text||this.outlined},iconColor:function(){return this.hasColoredIcon?this.computedColor:void 0},isDark:function(){return!(!this.type||this.coloredBorder||this.outlined)||g["a"].options.computed.isDark.call(this)}},created:function(){this.$attrs.hasOwnProperty("outline")&&Object(x["a"])("outline","outlined",this)},methods:{genWrapper:function(){var t=[this.$slots.prepend||this.__cachedIcon,this.genContent(),this.__cachedBorder,this.$slots.append,this.$scopedSlots.close?this.$scopedSlots.close({toggle:this.toggle}):this.__cachedDismissible],e={staticClass:"v-alert__wrapper"};return this.$createElement("div",e,t)},genContent:function(){return this.$createElement("div",{staticClass:"v-alert__content"},this.$slots.default)},genAlert:function(){var t={staticClass:"v-alert",attrs:{role:"alert"},class:this.classes,style:this.styles,directives:[{name:"show",value:this.isActive}]};if(!this.coloredBorder){var e=this.hasText?this.setTextColor:this.setBackgroundColor;t=e(this.computedColor,t)}return this.$createElement("div",t,[this.genWrapper()])},toggle:function(){this.isActive=!this.isActive}},render:function(t){var e=this.genAlert();return this.transition?t("transition",{props:{name:this.transition,origin:this.origin,mode:this.mode}},[e]):e}}),O=i("b0af"),k=i("ce7e"),w=i("8860"),S=i("56b0"),I=i("da13"),j=i("8270"),D=i("5d23"),A=(i("e01a"),i("d28b"),i("99af"),i("c740"),i("a630"),i("d81d"),i("13d5"),i("fb6a"),i("a434"),i("0d03"),i("4ec9"),i("d3b7"),i("ac1f"),i("25f0"),i("2532"),i("3ca3"),i("1276"),i("2ca0"),i("498a"),i("ddb0"),i("4ff9"),i("68dd"),i("e587")),P=(i("8adc"),i("0789")),V=i("a9ad"),T=i("4e82"),B=i("1c87"),E=i("af2b");function M(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function L(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?M(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):M(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var K=Object(y["a"])(V["a"],E["a"],B["a"],g["a"],Object(T["a"])("chipGroup"),Object(v["b"])("inputValue")).extend({name:"v-chip",props:{active:{type:Boolean,default:!0},activeClass:{type:String,default:function(){return this.chipGroup?this.chipGroup.activeClass:""}},close:Boolean,closeIcon:{type:String,default:"$delete"},disabled:Boolean,draggable:Boolean,filter:Boolean,filterIcon:{type:String,default:"$complete"},label:Boolean,link:Boolean,outlined:Boolean,pill:Boolean,tag:{type:String,default:"span"},textColor:String,value:null},data:function(){return{proxyClass:"v-chip--active"}},computed:{classes:function(){return L({"v-chip":!0},B["a"].options.computed.classes.call(this),{"v-chip--clickable":this.isClickable,"v-chip--disabled":this.disabled,"v-chip--draggable":this.draggable,"v-chip--label":this.label,"v-chip--link":this.isLink,"v-chip--no-color":!this.color,"v-chip--outlined":this.outlined,"v-chip--pill":this.pill,"v-chip--removable":this.hasClose},this.themeClasses,{},this.sizeableClasses,{},this.groupClasses)},hasClose:function(){return Boolean(this.close)},isClickable:function(){return Boolean(B["a"].options.computed.isClickable.call(this)||this.chipGroup)}},created:function(){var t=this,e=[["outline","outlined"],["selected","input-value"],["value","active"],["@input","@active.sync"]];e.forEach((function(e){var i=Object(A["a"])(e,2),n=i[0],s=i[1];t.$attrs.hasOwnProperty(n)&&Object(x["a"])(n,s,t)}))},methods:{click:function(t){this.$emit("click",t),this.chipGroup&&this.toggle()},genFilter:function(){var t=[];return this.isActive&&t.push(this.$createElement(f["a"],{staticClass:"v-chip__filter",props:{left:!0}},this.filterIcon)),this.$createElement(P["b"],t)},genClose:function(){var t=this;return this.$createElement(f["a"],{staticClass:"v-chip__close",props:{right:!0},on:{click:function(e){e.stopPropagation(),t.$emit("click:close"),t.$emit("update:active",!1)}}},this.closeIcon)},genContent:function(){return this.$createElement("span",{staticClass:"v-chip__content"},[this.filter&&this.genFilter(),this.$slots.default,this.hasClose&&this.genClose()])}},render:function(t){var e=[this.genContent()],i=this.generateRouteLink(),n=i.tag,s=i.data;s.attrs=L({},s.attrs,{draggable:this.draggable?"true":void 0,tabindex:this.chipGroup&&!this.disabled?0:s.attrs.tabindex}),s.directives.push({name:"show",value:this.active}),s=this.setBackgroundColor(this.color,s);var r=this.textColor||this.outlined&&this.color;return t(n,this.setTextColor(r,s),e)}}),F=K,z=i("326d"),R=(i("c975"),i("a15b"),i("b0c0"),i("615b"),i("cf36"),i("5607")),H=i("132d"),G=i("80d2");function U(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function W(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?U(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):U(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var J=m["a"].extend({name:"v-simple-checkbox",functional:!0,directives:{ripple:R["a"]},props:W({},V["a"].options.props,{},g["a"].options.props,{disabled:Boolean,ripple:{type:Boolean,default:!0},value:Boolean,indeterminate:Boolean,indeterminateIcon:{type:String,default:"$checkboxIndeterminate"},onIcon:{type:String,default:"$checkboxOn"},offIcon:{type:String,default:"$checkboxOff"}}),render:function(t,e){var i=e.props,n=e.data,s=[];if(i.ripple&&!i.disabled){var r=t("div",V["a"].options.methods.setTextColor(i.color,{staticClass:"v-input--selection-controls__ripple",directives:[{name:"ripple",value:{center:!0}}]}));s.push(r)}var o=i.offIcon;i.indeterminate?o=i.indeterminateIcon:i.value&&(o=i.onIcon),s.push(t(H["a"],V["a"].options.methods.setTextColor(i.value&&i.color,{props:{disabled:i.disabled,dark:i.dark,light:i.light}}),o));var a={"v-simple-checkbox":!0,"v-simple-checkbox--disabled":i.disabled};return t("div",W({},n,{class:a,on:{click:function(t){t.stopPropagation(),n.on&&n.on.input&&!i.disabled&&Object(G["y"])(n.on.input).forEach((function(t){return t(!i.value)}))}}}),s)}}),N=i("b810"),q=i("24e2"),Q=i("1800");function Y(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function X(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?Y(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Y(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var Z=Object(y["a"])(V["a"],g["a"]).extend({name:"v-select-list",directives:{ripple:R["a"]},props:{action:Boolean,dense:Boolean,hideSelected:Boolean,items:{type:Array,default:function(){return[]}},itemDisabled:{type:[String,Array,Function],default:"disabled"},itemText:{type:[String,Array,Function],default:"text"},itemValue:{type:[String,Array,Function],default:"value"},noDataText:String,noFilter:Boolean,searchInput:{default:null},selectedItems:{type:Array,default:function(){return[]}}},computed:{parsedItems:function(){var t=this;return this.selectedItems.map((function(e){return t.getValue(e)}))},tileActiveClass:function(){return Object.keys(this.setTextColor(this.color).class||{}).join(" ")},staticNoDataTile:function(){var t={attrs:{role:void 0},on:{mousedown:function(t){return t.preventDefault()}}};return this.$createElement(I["a"],t,[this.genTileContent(this.noDataText)])}},methods:{genAction:function(t,e){var i=this;return this.$createElement(Q["a"],[this.$createElement(J,{props:{color:this.color,value:e},on:{input:function(){return i.$emit("select",t)}}})])},genDivider:function(t){return this.$createElement(N["a"],{props:t})},genFilteredText:function(t){if(t=t||"",!this.searchInput||this.noFilter)return Object(G["k"])(t);var e=this.getMaskedCharacters(t),i=e.start,n=e.middle,s=e.end;return"".concat(Object(G["k"])(i)).concat(this.genHighlight(n)).concat(Object(G["k"])(s))},genHeader:function(t){return this.$createElement(q["a"],{props:t},t.header)},genHighlight:function(t){return'<span class="v-list-item__mask">'.concat(Object(G["k"])(t),"</span>")},genLabelledBy:function(t){var e=Object(G["k"])(this.getText(t).split(" ").join("-").toLowerCase());return"".concat(e,"-list-item-").concat(this._uid)},getMaskedCharacters:function(t){var e=(this.searchInput||"").toString().toLocaleLowerCase(),i=t.toLocaleLowerCase().indexOf(e);if(i<0)return{start:"",middle:t,end:""};var n=t.slice(0,i),s=t.slice(i,i+e.length),r=t.slice(i+e.length);return{start:n,middle:s,end:r}},genTile:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n||(n=this.hasItem(t)),t===Object(t)&&(i=null!==i?i:this.getDisabled(t));var s={attrs:{"aria-selected":String(n),"aria-labelledby":this.genLabelledBy(t),role:"option"},on:{mousedown:function(t){t.preventDefault()},click:function(){return i||e.$emit("select",t)}},props:{activeClass:this.tileActiveClass,disabled:i,ripple:!0,inputValue:n}};if(!this.$scopedSlots.item)return this.$createElement(I["a"],s,[this.action&&!this.hideSelected&&this.items.length>0?this.genAction(t,n):null,this.genTileContent(t)]);var r=this,o=this.$scopedSlots.item({parent:r,item:t,attrs:X({},s.attrs,{},s.props),on:s.on});return this.needsTile(o)?this.$createElement(I["a"],s,o):o},genTileContent:function(t){var e=this.genFilteredText(this.getText(t));return this.$createElement(D["a"],[this.$createElement(D["c"],{attrs:{id:this.genLabelledBy(t)},domProps:{innerHTML:e}})])},hasItem:function(t){return this.parsedItems.indexOf(this.getValue(t))>-1},needsTile:function(t){return 1!==t.length||null==t[0].componentOptions||"v-list-item"!==t[0].componentOptions.Ctor.options.name},getDisabled:function(t){return Boolean(Object(G["n"])(t,this.itemDisabled,!1))},getText:function(t){return String(Object(G["n"])(t,this.itemText,t))},getValue:function(t){return Object(G["n"])(t,this.itemValue,this.getText(t))}},render:function(){var t=[],e=!0,i=!1,n=void 0;try{for(var s,r=this.items[Symbol.iterator]();!(e=(s=r.next()).done);e=!0){var o=s.value;this.hideSelected&&this.hasItem(o)||(null==o?t.push(this.genTile(o)):o.header?t.push(this.genHeader(o)):o.divider?t.push(this.genDivider(o)):t.push(this.genTile(o)))}}catch(a){i=!0,n=a}finally{try{e||null==r.return||r.return()}finally{if(i)throw n}}return t.length||t.push(this.$slots["no-data"]||this.staticNoDataTile),this.$slots["prepend-item"]&&t.unshift(this.$slots["prepend-item"]),this.$slots["append-item"]&&t.push(this.$slots["append-item"]),this.$createElement("div",{staticClass:"v-select-list v-card",class:this.themeClasses},[this.$createElement(w["a"],{attrs:{id:this.$attrs.id,role:"listbox",tabindex:-1},props:{dense:this.dense}},t)])}}),tt=i("8654"),et=m["a"].extend({name:"comparable",props:{valueComparator:{type:Function,default:G["j"]}}}),it=m["a"].extend({name:"filterable",props:{noDataText:{type:String,default:"$vuetify.noDataText"}}}),nt=i("a293");function st(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function rt(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?st(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):st(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var ot={closeOnClick:!1,closeOnContentClick:!1,disableKeys:!0,openOnClick:!1,maxHeight:304},at=Object(y["a"])(tt["a"],et,it),lt=at.extend().extend({name:"v-select",directives:{ClickOutside:nt["a"]},props:{appendIcon:{type:String,default:"$dropdown"},attach:{default:!1},cacheItems:Boolean,chips:Boolean,clearable:Boolean,deletableChips:Boolean,eager:Boolean,hideSelected:Boolean,items:{type:Array,default:function(){return[]}},itemColor:{type:String,default:"primary"},itemDisabled:{type:[String,Array,Function],default:"disabled"},itemText:{type:[String,Array,Function],default:"text"},itemValue:{type:[String,Array,Function],default:"value"},menuProps:{type:[String,Array,Object],default:function(){return ot}},multiple:Boolean,openOnClear:Boolean,returnObject:Boolean,smallChips:Boolean},data:function(){return{cachedItems:this.cacheItems?this.items:[],content:null,isBooted:!1,isMenuActive:!1,lastItem:20,lazyValue:void 0!==this.value?this.value:this.multiple?[]:void 0,selectedIndex:-1,selectedItems:[],keyboardLookupPrefix:"",keyboardLookupLastTime:0}},computed:{allItems:function(){return this.filterDuplicates(this.cachedItems.concat(this.items))},classes:function(){return rt({},tt["a"].options.computed.classes.call(this),{"v-select":!0,"v-select--chips":this.hasChips,"v-select--chips--small":this.smallChips,"v-select--is-menu-active":this.isMenuActive,"v-select--is-multi":this.multiple})},computedItems:function(){return this.allItems},computedOwns:function(){return"list-".concat(this._uid)},counterValue:function(){return this.multiple?this.selectedItems.length:(this.getText(this.selectedItems[0])||"").toString().length},directives:function(){return this.isFocused?[{name:"click-outside",value:this.blur,args:{closeConditional:this.closeConditional}}]:void 0},dynamicHeight:function(){return"auto"},hasChips:function(){return this.chips||this.smallChips},hasSlot:function(){return Boolean(this.hasChips||this.$scopedSlots.selection)},isDirty:function(){return this.selectedItems.length>0},listData:function(){var t=this.$vnode&&this.$vnode.context.$options._scopeId,e=t?Object(h["a"])({},t,!0):{};return{attrs:rt({},e,{id:this.computedOwns}),props:{action:this.multiple,color:this.itemColor,dense:this.dense,hideSelected:this.hideSelected,items:this.virtualizedItems,itemDisabled:this.itemDisabled,itemText:this.itemText,itemValue:this.itemValue,noDataText:this.$vuetify.lang.t(this.noDataText),selectedItems:this.selectedItems},on:{select:this.selectItem},scopedSlots:{item:this.$scopedSlots.item}}},staticList:function(){return(this.$slots["no-data"]||this.$slots["prepend-item"]||this.$slots["append-item"])&&Object(x["b"])("assert: staticList should not be called if slots are used"),this.$createElement(Z,this.listData)},virtualizedItems:function(){return this.$_menuProps.auto?this.computedItems:this.computedItems.slice(0,this.lastItem)},menuCanShow:function(){return!0},$_menuProps:function(){var t="string"===typeof this.menuProps?this.menuProps.split(","):this.menuProps;return Array.isArray(t)&&(t=t.reduce((function(t,e){return t[e.trim()]=!0,t}),{})),rt({},ot,{eager:this.eager,value:this.menuCanShow&&this.isMenuActive,nudgeBottom:t.offsetY?1:0},t)}},watch:{internalValue:function(t){this.initialValue=t,this.setSelectedItems()},isBooted:function(){var t=this;this.$nextTick((function(){t.content&&t.content.addEventListener&&t.content.addEventListener("scroll",t.onScroll,!1)}))},isMenuActive:function(t){var e=this;this.$nextTick((function(){return e.onMenuActiveChange(t)})),t&&(this.isBooted=!0)},items:{immediate:!0,handler:function(t){var e=this;this.cacheItems&&this.$nextTick((function(){e.cachedItems=e.filterDuplicates(e.cachedItems.concat(t))})),this.setSelectedItems()}}},mounted:function(){this.content=this.$refs.menu&&this.$refs.menu.$refs.content},methods:{blur:function(t){tt["a"].options.methods.blur.call(this,t),this.isMenuActive=!1,this.isFocused=!1,this.selectedIndex=-1},activateMenu:function(){this.disabled||this.readonly||this.isMenuActive||(this.isMenuActive=!0)},clearableCallback:function(){var t=this;this.setValue(this.multiple?[]:void 0),this.$nextTick((function(){return t.$refs.input&&t.$refs.input.focus()})),this.openOnClear&&(this.isMenuActive=!0)},closeConditional:function(t){return!this._isDestroyed&&this.content&&!this.content.contains(t.target)&&this.$el&&!this.$el.contains(t.target)&&t.target!==this.$el},filterDuplicates:function(t){for(var e=new Map,i=0;i<t.length;++i){var n=t[i],s=this.getValue(n);!e.has(s)&&e.set(s,n)}return Array.from(e.values())},findExistingIndex:function(t){var e=this,i=this.getValue(t);return(this.internalValue||[]).findIndex((function(t){return e.valueComparator(e.getValue(t),i)}))},genChipSelection:function(t,e){var i=this,n=this.disabled||this.readonly||this.getDisabled(t);return this.$createElement(F,{staticClass:"v-chip--select",attrs:{tabindex:-1},props:{close:this.deletableChips&&!n,disabled:n,inputValue:e===this.selectedIndex,small:this.smallChips},on:{click:function(t){n||(t.stopPropagation(),i.selectedIndex=e)},"click:close":function(){return i.onChipInput(t)}},key:JSON.stringify(this.getValue(t))},this.getText(t))},genCommaSelection:function(t,e,i){var n=e===this.selectedIndex&&this.computedColor,s=this.disabled||this.getDisabled(t);return this.$createElement("div",this.setTextColor(n,{staticClass:"v-select__selection v-select__selection--comma",class:{"v-select__selection--disabled":s},key:JSON.stringify(this.getValue(t))}),"".concat(this.getText(t)).concat(i?"":", "))},genDefaultSlot:function(){var t=this.genSelections(),e=this.genInput();return Array.isArray(t)?t.push(e):(t.children=t.children||[],t.children.push(e)),[this.genFieldset(),this.$createElement("div",{staticClass:"v-select__slot",directives:this.directives},[this.genLabel(),this.prefix?this.genAffix("prefix"):null,t,this.suffix?this.genAffix("suffix"):null,this.genClearIcon(),this.genIconSlot()]),this.genMenu(),this.genProgress()]},genInput:function(){var t=tt["a"].options.methods.genInput.call(this);return t.data.domProps.value=null,t.data.attrs.readonly=!0,t.data.attrs.type="text",t.data.attrs["aria-readonly"]=!0,t.data.on.keypress=this.onKeyPress,t},genInputSlot:function(){var t=tt["a"].options.methods.genInputSlot.call(this);return t.data.attrs=rt({},t.data.attrs,{role:"button","aria-haspopup":"listbox","aria-expanded":String(this.isMenuActive),"aria-owns":this.computedOwns}),t},genList:function(){return this.$slots["no-data"]||this.$slots["prepend-item"]||this.$slots["append-item"]?this.genListWithSlot():this.staticList},genListWithSlot:function(){var t=this,e=["prepend-item","no-data","append-item"].filter((function(e){return t.$slots[e]})).map((function(e){return t.$createElement("template",{slot:e},t.$slots[e])}));return this.$createElement(Z,rt({},this.listData),e)},genMenu:function(){var t=this,e=this.$_menuProps;return e.activator=this.$refs["input-slot"],""===this.attach||!0===this.attach||"attach"===this.attach?e.attach=this.$el:e.attach=this.attach,this.$createElement(z["a"],{attrs:{role:void 0},props:e,on:{input:function(e){t.isMenuActive=e,t.isFocused=e}},ref:"menu"},[this.genList()])},genSelections:function(){var t,e=this.selectedItems.length,i=new Array(e);t=this.$scopedSlots.selection?this.genSlotSelection:this.hasChips?this.genChipSelection:this.genCommaSelection;while(e--)i[e]=t(this.selectedItems[e],e,e===i.length-1);return this.$createElement("div",{staticClass:"v-select__selections"},i)},genSlotSelection:function(t,e){var i=this;return this.$scopedSlots.selection({attrs:{class:"v-chip--select"},parent:this,item:t,index:e,select:function(t){t.stopPropagation(),i.selectedIndex=e},selected:e===this.selectedIndex,disabled:this.disabled||this.readonly})},getMenuIndex:function(){return this.$refs.menu?this.$refs.menu.listIndex:-1},getDisabled:function(t){return Object(G["n"])(t,this.itemDisabled,!1)},getText:function(t){return Object(G["n"])(t,this.itemText,t)},getValue:function(t){return Object(G["n"])(t,this.itemValue,this.getText(t))},onBlur:function(t){t&&this.$emit("blur",t)},onChipInput:function(t){this.multiple?this.selectItem(t):this.setValue(null),0===this.selectedItems.length?this.isMenuActive=!0:this.isMenuActive=!1,this.selectedIndex=-1},onClick:function(){this.isDisabled||(this.isMenuActive=!0,this.isFocused||(this.isFocused=!0,this.$emit("focus")))},onEscDown:function(t){t.preventDefault(),this.isMenuActive&&(t.stopPropagation(),this.isMenuActive=!1)},onKeyPress:function(t){var e=this;if(!this.multiple&&!this.readonly){var i=1e3,n=performance.now();n-this.keyboardLookupLastTime>i&&(this.keyboardLookupPrefix=""),this.keyboardLookupPrefix+=t.key.toLowerCase(),this.keyboardLookupLastTime=n;var s=this.allItems.findIndex((function(t){var i=(e.getText(t)||"").toString();return i.toLowerCase().startsWith(e.keyboardLookupPrefix)})),r=this.allItems[s];-1!==s&&(this.setValue(this.returnObject?r:this.getValue(r)),setTimeout((function(){return e.setMenuIndex(s)})))}},onKeyDown:function(t){var e=this,i=t.keyCode,n=this.$refs.menu;if([G["s"].enter,G["s"].space].includes(i)&&this.activateMenu(),n)return this.isMenuActive&&i!==G["s"].tab&&this.$nextTick((function(){n.changeListIndex(t),e.$emit("update:list-index",n.listIndex)})),!this.isMenuActive&&[G["s"].up,G["s"].down].includes(i)?this.onUpDown(t):i===G["s"].esc?this.onEscDown(t):i===G["s"].tab?this.onTabDown(t):i===G["s"].space?this.onSpaceDown(t):void 0},onMenuActiveChange:function(t){if(!(this.multiple&&!t||this.getMenuIndex()>-1)){var e=this.$refs.menu;if(e&&this.isDirty)for(var i=0;i<e.tiles.length;i++)if("true"===e.tiles[i].getAttribute("aria-selected")){this.setMenuIndex(i);break}}},onMouseUp:function(t){var e=this;if(this.hasMouseDown&&3!==t.which){var i=this.$refs["append-inner"];this.isMenuActive&&i&&(i===t.target||i.contains(t.target))?this.$nextTick((function(){return e.isMenuActive=!e.isMenuActive})):this.isEnclosed&&!this.isDisabled&&(this.isMenuActive=!0)}tt["a"].options.methods.onMouseUp.call(this,t)},onScroll:function(){var t=this;if(this.isMenuActive){if(this.lastItem>=this.computedItems.length)return;var e=this.content.scrollHeight-(this.content.scrollTop+this.content.clientHeight)<200;e&&(this.lastItem+=20)}else requestAnimationFrame((function(){return t.content.scrollTop=0}))},onSpaceDown:function(t){t.preventDefault()},onTabDown:function(t){var e=this.$refs.menu;if(e){var i=e.activeTile;!this.multiple&&i&&this.isMenuActive?(t.preventDefault(),t.stopPropagation(),i.click()):this.blur(t)}},onUpDown:function(t){var e=this.$refs.menu;if(e){if(t.preventDefault(),this.multiple)return this.activateMenu();var i=t.keyCode;e.getTiles(),G["s"].up===i?e.prevTile():e.nextTile(),e.activeTile&&e.activeTile.click()}},selectItem:function(t){var e=this;if(this.multiple){var i=(this.internalValue||[]).slice(),n=this.findExistingIndex(t);if(-1!==n?i.splice(n,1):i.push(t),this.setValue(i.map((function(t){return e.returnObject?t:e.getValue(t)}))),this.$nextTick((function(){e.$refs.menu&&e.$refs.menu.updateDimensions()})),!this.multiple)return;var s=this.getMenuIndex();if(this.setMenuIndex(-1),this.hideSelected)return;this.$nextTick((function(){return e.setMenuIndex(s)}))}else this.setValue(this.returnObject?t:this.getValue(t)),this.isMenuActive=!1},setMenuIndex:function(t){this.$refs.menu&&(this.$refs.menu.listIndex=t)},setSelectedItems:function(){var t=this,e=[],i=this.multiple&&Array.isArray(this.internalValue)?this.internalValue:[this.internalValue],n=!0,s=!1,r=void 0;try{for(var o,a=function(){var i=o.value,n=t.allItems.findIndex((function(e){return t.valueComparator(t.getValue(e),t.getValue(i))}));n>-1&&e.push(t.allItems[n])},l=i[Symbol.iterator]();!(n=(o=l.next()).done);n=!0)a()}catch(c){s=!0,r=c}finally{try{n||null==l.return||l.return()}finally{if(s)throw r}}this.selectedItems=e},setValue:function(t){var e=this.internalValue;this.internalValue=t,t!==e&&this.$emit("change",t)}}}),ct=i("ba0d"),ut=(i("0481"),i("4069"),i("ec29"),i("9d01"),i("45fc"),i("c37a")),ht=m["a"].extend({name:"rippleable",directives:{ripple:R["a"]},props:{ripple:{type:[Boolean,Object],default:!0}},methods:{genRipple:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.ripple?(t.staticClass="v-input--selection-controls__ripple",t.directives=t.directives||[],t.directives.push({name:"ripple",value:{center:!0}}),t.on=Object.assign({click:this.onChange},this.$listeners),this.$createElement("div",t)):null},onChange:function(){}}}),dt=Object(y["a"])(ut["a"],ht,et).extend({name:"selectable",model:{prop:"inputValue",event:"change"},props:{id:String,inputValue:null,falseValue:null,trueValue:null,multiple:{type:Boolean,default:null},label:String},data:function(){return{hasColor:this.inputValue,lazyValue:this.inputValue}},computed:{computedColor:function(){if(this.isActive)return this.color?this.color:this.isDark&&!this.appIsDark?"white":"accent"},isMultiple:function(){return!0===this.multiple||null===this.multiple&&Array.isArray(this.internalValue)},isActive:function(){var t=this,e=this.value,i=this.internalValue;return this.isMultiple?!!Array.isArray(i)&&i.some((function(i){return t.valueComparator(i,e)})):void 0===this.trueValue||void 0===this.falseValue?e?this.valueComparator(e,i):Boolean(i):this.valueComparator(i,this.trueValue)},isDirty:function(){return this.isActive}},watch:{inputValue:function(t){this.lazyValue=t,this.hasColor=t}},methods:{genLabel:function(){var t=this,e=ut["a"].options.methods.genLabel.call(this);return e?(e.data.on={click:function(e){e.preventDefault(),t.onChange()}},e):e},genInput:function(t,e){return this.$createElement("input",{attrs:Object.assign({"aria-checked":this.isActive.toString(),disabled:this.isDisabled,id:this.computedId,role:t,type:t},e),domProps:{value:this.value,checked:this.isActive},on:{blur:this.onBlur,change:this.onChange,focus:this.onFocus,keydown:this.onKeydown},ref:"input"})},onBlur:function(){this.isFocused=!1},onChange:function(){var t=this;if(!this.isDisabled){var e=this.value,i=this.internalValue;if(this.isMultiple){Array.isArray(i)||(i=[]);var n=i.length;i=i.filter((function(i){return!t.valueComparator(i,e)})),i.length===n&&i.push(e)}else i=void 0!==this.trueValue&&void 0!==this.falseValue?this.valueComparator(i,this.trueValue)?this.falseValue:this.trueValue:e?this.valueComparator(i,e)?null:e:!i;this.validate(!0,i),this.internalValue=i,this.hasColor=i}},onFocus:function(){this.isFocused=!0},onKeydown:function(t){}}}),pt=i("c3f0"),ft=i("490a");function vt(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function gt(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?vt(i,!0).forEach((function(e){Object(h["a"])(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):vt(i).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}var mt=dt.extend({name:"v-switch",directives:{Touch:pt["a"]},props:{inset:Boolean,loading:{type:[Boolean,String],default:!1},flat:{type:Boolean,default:!1}},computed:{classes:function(){return gt({},ut["a"].options.computed.classes.call(this),{"v-input--selection-controls v-input--switch":!0,"v-input--switch--flat":this.flat,"v-input--switch--inset":this.inset})},attrs:function(){return{"aria-checked":String(this.isActive),"aria-disabled":String(this.disabled),role:"switch"}},validationState:function(){return this.hasError&&this.shouldValidate?"error":this.hasSuccess?"success":null!==this.hasColor?this.computedColor:void 0},switchData:function(){return this.setTextColor(this.loading?void 0:this.validationState,{class:this.themeClasses})}},methods:{genDefaultSlot:function(){return[this.genSwitch(),this.genLabel()]},genSwitch:function(){return this.$createElement("div",{staticClass:"v-input--selection-controls__input"},[this.genInput("checkbox",gt({},this.attrs,{},this.attrs$)),this.genRipple(this.setTextColor(this.validationState,{directives:[{name:"touch",value:{left:this.onSwipeLeft,right:this.onSwipeRight}}]})),this.$createElement("div",gt({staticClass:"v-input--switch__track"},this.switchData)),this.$createElement("div",gt({staticClass:"v-input--switch__thumb"},this.switchData),[this.genProgress()])])},genProgress:function(){return this.$createElement(P["c"],{},[!1===this.loading?null:this.$slots.progress||this.$createElement(ft["a"],{props:{color:!0===this.loading||""===this.loading?this.color||"primary":this.loading,size:16,width:2,indeterminate:!0}})])},onSwipeLeft:function(){this.isActive&&this.onChange()},onSwipeRight:function(){this.isActive||this.onChange()},onKeydown:function(t){(t.keyCode===G["s"].left&&this.isActive||t.keyCode===G["s"].right&&!this.isActive)&&this.onChange()}}}),bt=Object(l["a"])(a,n,s,!1,null,null,null);e["default"]=bt.exports;u()(bt,{VAlert:C,VCard:O["a"],VDivider:k["a"],VList:w["a"],VListGroup:S["a"],VListItem:I["a"],VListItemAvatar:j["a"],VListItemContent:D["a"],VListItemSubtitle:D["b"],VListItemTitle:D["c"],VSelect:lt,VSlider:ct["a"],VSwitch:mt,VTextField:tt["a"]})},"24e2":function(t,e,i){"use strict";var n=i("e0c7");e["a"]=n["a"]},"326d":function(t,e,i){"use strict";var n=i("e449");e["a"]=n["a"]},"4ec9":function(t,e,i){"use strict";var n=i("6d61"),s=i("6566");t.exports=n("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),s,!0)},6566:function(t,e,i){"use strict";var n=i("9bf2").f,s=i("7c73"),r=i("e2cc"),o=i("f8c2"),a=i("19aa"),l=i("2266"),c=i("7dd0"),u=i("2626"),h=i("83ab"),d=i("f183").fastKey,p=i("69f3"),f=p.set,v=p.getterFor;t.exports={getConstructor:function(t,e,i,c){var u=t((function(t,n){a(t,u,e),f(t,{type:e,index:s(null),first:void 0,last:void 0,size:0}),h||(t.size=0),void 0!=n&&l(n,t[c],t,i)})),p=v(e),g=function(t,e,i){var n,s,r=p(t),o=m(t,e);return o?o.value=i:(r.last=o={index:s=d(e,!0),key:e,value:i,previous:n=r.last,next:void 0,removed:!1},r.first||(r.first=o),n&&(n.next=o),h?r.size++:t.size++,"F"!==s&&(r.index[s]=o)),t},m=function(t,e){var i,n=p(t),s=d(e);if("F"!==s)return n.index[s];for(i=n.first;i;i=i.next)if(i.key==e)return i};return r(u.prototype,{clear:function(){var t=this,e=p(t),i=e.index,n=e.first;while(n)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete i[n.index],n=n.next;e.first=e.last=void 0,h?e.size=0:t.size=0},delete:function(t){var e=this,i=p(e),n=m(e,t);if(n){var s=n.next,r=n.previous;delete i.index[n.index],n.removed=!0,r&&(r.next=s),s&&(s.previous=r),i.first==n&&(i.first=s),i.last==n&&(i.last=r),h?i.size--:e.size--}return!!n},forEach:function(t){var e,i=p(this),n=o(t,arguments.length>1?arguments[1]:void 0,3);while(e=e?e.next:i.first){n(e.value,e.key,this);while(e&&e.removed)e=e.previous}},has:function(t){return!!m(this,t)}}),r(u.prototype,i?{get:function(t){var e=m(this,t);return e&&e.value},set:function(t,e){return g(this,0===t?0:t,e)}}:{add:function(t){return g(this,t=0===t?0:t,t)}}),h&&n(u.prototype,"size",{get:function(){return p(this).size}}),u},setStrong:function(t,e,i){var n=e+" Iterator",s=v(e),r=v(n);c(t,e,(function(t,e){f(this,{type:n,target:t,state:s(t),kind:e,last:void 0})}),(function(){var t=r(this),e=t.kind,i=t.last;while(i&&i.removed)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?"keys"==e?{value:i.key,done:!1}:"values"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?"entries":"values",!i,!0),u(e)}}},"68dd":function(t,e,i){},"6d61":function(t,e,i){"use strict";var n=i("23e7"),s=i("da84"),r=i("94ca"),o=i("6eeb"),a=i("f183"),l=i("2266"),c=i("19aa"),u=i("861d"),h=i("d039"),d=i("1c7e"),p=i("d44e"),f=i("7156");t.exports=function(t,e,i,v,g){var m=s[t],b=m&&m.prototype,y=m,x=v?"set":"add",_={},$=function(t){var e=b[t];o(b,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(g&&!u(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!u(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(g&&!u(t))&&e.call(this,0===t?0:t)}:function(t,i){return e.call(this,0===t?0:t,i),this})};if(r(t,"function"!=typeof m||!(g||b.forEach&&!h((function(){(new m).entries().next()})))))y=i.getConstructor(e,t,v,x),a.REQUIRED=!0;else if(r(t,!0)){var C=new y,O=C[x](g?{}:-0,1)!=C,k=h((function(){C.has(1)})),w=d((function(t){new m(t)})),S=!g&&h((function(){var t=new m,e=5;while(e--)t[x](e,e);return!t.has(-0)}));w||(y=e((function(e,i){c(e,y,t);var n=f(new m,e,y);return void 0!=i&&l(i,n[x],n,v),n})),y.prototype=b,b.constructor=y),(k||S)&&($("delete"),$("has"),v&&$("get")),(S||O)&&$(x),g&&b.clear&&delete b.clear}return _[t]=y,n({global:!0,forced:y!=m},_),p(y,t),g||i.setStrong(y,t,v),y}},"8adc":function(t,e,i){},"9d01":function(t,e,i){},afdd:function(t,e,i){"use strict";var n=i("8336");e["a"]=n["a"]},b810:function(t,e,i){"use strict";var n=i("ce7e");e["a"]=n["a"]},cf36:function(t,e,i){},ec29:function(t,e,i){}}]);
+//# sourceMappingURL=config.3af84ca2.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/config.3af84ca2.js.map b/music_assistant/web/js/config.3af84ca2.js.map
new file mode 100644 (file)
index 0000000..7fe1d8e
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///./src/views/Config.vue?becb","webpack:///src/views/Config.vue","webpack:///./src/views/Config.vue?194c","webpack:///./node_modules/vuetify/lib/mixins/transitionable/index.js","webpack:///./node_modules/vuetify/lib/components/VAlert/VAlert.js","webpack:///./node_modules/vuetify/lib/components/VChip/VChip.js","webpack:///./node_modules/vuetify/lib/components/VChip/index.js","webpack:///./node_modules/vuetify/lib/components/VCheckbox/VSimpleCheckbox.js","webpack:///./node_modules/vuetify/lib/components/VSelect/VSelectList.js","webpack:///./node_modules/vuetify/lib/mixins/comparable/index.js","webpack:///./node_modules/vuetify/lib/mixins/filterable/index.js","webpack:///./node_modules/vuetify/lib/components/VSelect/VSelect.js","webpack:///./node_modules/vuetify/lib/mixins/rippleable/index.js","webpack:///./node_modules/vuetify/lib/mixins/selectable/index.js","webpack:///./node_modules/vuetify/lib/components/VSwitch/VSwitch.js","webpack:///./src/views/Config.vue","webpack:///./node_modules/vuetify/lib/components/VSubheader/index.js","webpack:///./node_modules/vuetify/lib/components/VMenu/index.js","webpack:///./node_modules/core-js/modules/es.map.js","webpack:///./node_modules/core-js/internals/collection-strong.js","webpack:///./node_modules/core-js/internals/collection.js","webpack:///./node_modules/vuetify/lib/components/VBtn/index.js","webpack:///./node_modules/vuetify/lib/components/VDivider/index.js"],"names":["_vm","this","_h","$createElement","_c","_self","attrs","restart_message","_v","_s","$t","configKey","_e","_l","conf_value","conf_key","key","on","$event","$router","push","conf","conf_subvalue","conf_subkey","scopedSlots","_u","fn","staticStyle","proxy","conf_item_value","conf_item_key","confChanged","model","value","callback","$$v","$set","expression","$server","player","player_provider","staticClass","name","player_settings","domProps","item","id","sample_rates","enabled","staticRenderFns","components","props","data","players","active","created","$store","windowtitle","getConfig","methods","Vue","extend","mode","String","origin","transition","mixins","VSheet","Toggleable","Transitionable","border","type","validator","val","includes","closeLabel","default","coloredBorder","Boolean","dense","dismissible","icon","outlined","prominent","text","computed","__cachedBorder","class","setBackgroundColor","computedColor","__cachedDismissible","color","iconColor","VBtn","small","$vuetify","lang","t","click","isActive","VIcon","__cachedIcon","computedIcon","classes","options","call","hasColoredIcon","hasText","undefined","isDark","Themeable","$attrs","hasOwnProperty","breaking","genWrapper","children","$slots","prepend","genContent","append","$scopedSlots","close","toggle","genAlert","role","style","styles","directives","setColor","setTextColor","render","h","Colorable","Sizeable","Routable","GroupableFactory","ToggleableFactory","activeClass","chipGroup","closeIcon","disabled","draggable","filter","filterIcon","label","link","pill","tag","textColor","proxyClass","isClickable","isLink","hasClose","themeClasses","sizeableClasses","groupClasses","breakingProps","forEach","original","replacement","e","$emit","genFilter","left","VExpandXTransition","genClose","right","stopPropagation","generateRouteLink","tabindex","VChip","functional","ripple","indeterminate","indeterminateIcon","onIcon","offIcon","center","dark","light","input","wrapInArray","f","action","hideSelected","items","Array","itemDisabled","Function","itemText","itemValue","noDataText","noFilter","searchInput","selectedItems","parsedItems","map","getValue","tileActiveClass","Object","keys","join","staticNoDataTile","tile","mousedown","preventDefault","VListItem","genTileContent","genAction","inputValue","VListItemAction","VSimpleCheckbox","genDivider","VDivider","genFilteredText","escapeHTML","getMaskedCharacters","start","middle","end","genHighlight","genHeader","VSubheader","header","genLabelledBy","getText","split","toLowerCase","_uid","toString","toLocaleLowerCase","index","indexOf","slice","length","genTile","hasItem","getDisabled","parent","scopedSlot","needsTile","innerHTML","VListItemContent","VListItemTitle","slot","componentOptions","Ctor","getPropertyFromItem","divider","unshift","VList","valueComparator","deepEqual","defaultMenuProps","closeOnClick","closeOnContentClick","disableKeys","openOnClick","maxHeight","baseMixins","VTextField","Comparable","Filterable","ClickOutside","appendIcon","attach","cacheItems","chips","clearable","deletableChips","eager","itemColor","menuProps","multiple","openOnClear","returnObject","smallChips","cachedItems","content","isBooted","isMenuActive","lastItem","lazyValue","selectedIndex","keyboardLookupPrefix","keyboardLookupLastTime","allItems","filterDuplicates","concat","hasChips","computedItems","computedOwns","counterValue","isFocused","blur","args","closeConditional","dynamicHeight","hasSlot","selection","isDirty","listData","scopeId","$vnode","context","$options","_scopeId","virtualizedItems","select","selectItem","staticList","consoleError","VSelectList","$_menuProps","auto","menuCanShow","normalisedProps","isArray","reduce","acc","p","trim","nudgeBottom","offsetY","watch","internalValue","initialValue","setSelectedItems","$nextTick","addEventListener","onScroll","onMenuActiveChange","immediate","handler","mounted","$refs","menu","activateMenu","readonly","clearableCallback","setValue","focus","_isDestroyed","contains","target","$el","arr","uniqueValues","Map","has","set","from","values","findExistingIndex","findIndex","i","genChipSelection","isDisabled","onChipInput","JSON","stringify","genCommaSelection","last","genDefaultSlot","selections","genSelections","genInput","genFieldset","genLabel","prefix","genAffix","suffix","genClearIcon","genIconSlot","genMenu","genProgress","keypress","onKeyPress","genInputSlot","genList","genListWithSlot","slots","slotName","activator","VMenu","ref","genSelection","genSlotSelection","selected","getMenuIndex","listIndex","onBlur","onClick","onEscDown","KEYBOARD_LOOKUP_THRESHOLD","now","performance","startsWith","setTimeout","setMenuIndex","onKeyDown","keyCode","keyCodes","enter","space","tab","changeListIndex","up","down","onUpDown","esc","onTabDown","onSpaceDown","tiles","getAttribute","onMouseUp","hasMouseDown","which","appendInner","isEnclosed","showMoreItems","scrollHeight","scrollTop","clientHeight","requestAnimationFrame","activeTile","getTiles","prevTile","nextTile","splice","updateDimensions","v","oldValue","genRipple","assign","onChange","$listeners","VInput","Rippleable","prop","event","falseValue","trueValue","hasColor","appIsDark","isMultiple","some","computedId","checked","change","onFocus","keydown","onKeydown","validate","Selectable","Touch","inset","loading","flat","validationState","hasError","shouldValidate","hasSuccess","switchData","genSwitch","attrs$","onSwipeLeft","onSwipeRight","VFabTransition","progress","VProgressCircular","size","width","component","VAlert","VCard","VListGroup","VListItemAvatar","VListItemSubtitle","VSelect","VSlider","VSwitch","collection","collectionStrong","module","exports","get","arguments","defineProperty","create","redefineAll","bind","anInstance","iterate","defineIterator","setSpecies","DESCRIPTORS","fastKey","InternalStateModule","setInternalState","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","IS_MAP","ADDER","C","that","iterable","first","getInternalState","define","previous","state","entry","getEntry","next","removed","prototype","clear","prev","callbackfn","boundFunction","add","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","done","$","global","isForced","redefine","InternalMetadataModule","isObject","fails","checkCorrectnessOfIteration","setToStringTag","inheritIfRequired","common","IS_WEAK","NativeConstructor","NativePrototype","Constructor","exported","fixMethod","KEY","nativeMethod","entries","REQUIRED","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","constructor","forced"],"mappings":"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","file":"js/config.3af84ca2.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-alert',{attrs:{\"value\":_vm.restart_message,\"type\":\"info\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"reboot_required\"))+\" \")]),(!_vm.configKey)?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.conf),function(conf_value,conf_key){return _c('v-list-item',{key:conf_key,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/config/' + conf_key)}}},[_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.$t(\"conf.\" + conf_key)))])],1)],1)}),1)],1):_vm._e(),(_vm.configKey != 'player_settings')?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\",\"tile\":\"\"}},_vm._l((_vm.conf[_vm.configKey]),function(conf_subvalue,conf_subkey){return _c('v-list-group',{key:conf_subkey,attrs:{\"no-action\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c('v-list-item',[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-15px\"},attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border-radius\":\"5px\",\"border\":\"1px solid rgba(0,0,0,.85)\"},attrs:{\"src\":require('../assets/' + conf_subkey + '.png')}})]),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"conf.\" + conf_subkey)))])],1)],1)]},proxy:true}],null,true)},[_vm._l((_vm.conf[_vm.configKey][\n                conf_subkey\n              ].__desc__),function(conf_item_value,conf_item_key){return _c('div',{key:conf_item_key},[_c('v-list-item',[(typeof conf_item_value[1] == 'boolean')?_c('v-switch',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2])},on:{\"change\":function($event){return _vm.confChanged(\n                      _vm.configKey,\n                      conf_subkey,\n                      _vm.conf[_vm.configKey][conf_subkey]\n                    )}},model:{value:(_vm.conf[_vm.configKey][conf_subkey][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf[_vm.configKey][conf_subkey], conf_item_value[0], $$v)},expression:\"conf[configKey][conf_subkey][conf_item_value[0]]\"}}):(conf_item_value[1] == '<password>')?_c('v-text-field',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\",\"type\":\"password\"},on:{\"change\":function($event){return _vm.confChanged(\n                      _vm.configKey,\n                      conf_subkey,\n                      _vm.conf[_vm.configKey][conf_subkey]\n                    )}},model:{value:(_vm.conf[_vm.configKey][conf_subkey][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf[_vm.configKey][conf_subkey], conf_item_value[0], $$v)},expression:\"conf[configKey][conf_subkey][conf_item_value[0]]\"}}):(conf_item_value[1] == '<player>')?_c('v-select',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\",\"type\":\"password\"},on:{\"change\":function($event){return _vm.confChanged(\n                      _vm.configKey,\n                      conf_subkey,\n                      _vm.conf[_vm.configKey][conf_subkey]\n                    )}},model:{value:(_vm.conf[_vm.configKey][conf_subkey][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf[_vm.configKey][conf_subkey], conf_item_value[0], $$v)},expression:\"conf[configKey][conf_subkey][conf_item_value[0]]\"}}):_c('v-text-field',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                      _vm.configKey,\n                      conf_subkey,\n                      _vm.conf[_vm.configKey][conf_subkey]\n                    )}},model:{value:(_vm.conf[_vm.configKey][conf_subkey][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf[_vm.configKey][conf_subkey], conf_item_value[0], $$v)},expression:\"conf[configKey][conf_subkey][conf_item_value[0]]\"}})],1)],1)}),_c('v-divider')],2)}),1)],1):_vm._e(),(_vm.configKey == 'player_settings')?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},_vm._l((_vm.$server.players),function(player,key){return _c('v-list-group',{key:key,attrs:{\"no-action\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [_c('v-list-item',[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-20px\",\"margin-right\":\"6px\"},attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border-radius\":\"5px\",\"border\":\"1px solid rgba(0,0,0,.85)\"},attrs:{\"src\":require('../assets/' + player.player_provider + '.png')}})]),_c('v-list-item-content',[_c('v-list-item-title',{staticClass:\"title\"},[_vm._v(_vm._s(player.name))]),_c('v-list-item-subtitle',{staticClass:\"caption\"},[_vm._v(_vm._s(key))])],1)],1)]},proxy:true}],null,true)},[(_vm.conf.player_settings[key].enabled)?_c('div',_vm._l((_vm.conf\n                  .player_settings[key].__desc__),function(conf_item_value,conf_item_key){return _c('div',{key:conf_item_key},[_c('v-list-item',[(typeof conf_item_value[1] == 'boolean')?_c('v-switch',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2])},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}}):(conf_item_value[1] == '<password>')?_c('v-text-field',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\",\"type\":\"password\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}}):(conf_item_value[1] == '<player>')?_c('v-select',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}},_vm._l((_vm.$server.players),function(player,key){return _c('option',{key:key,domProps:{\"value\":_vm.item.id}},[_vm._v(_vm._s(_vm.item.name))])}),0):(conf_item_value[0] == 'max_sample_rate')?_c('v-select',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"items\":_vm.sample_rates,\"filled\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}}):(conf_item_value[0] == 'crossfade_duration')?_c('v-slider',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"min\":\"0\",\"max\":\"10\",\"filled\":\"\",\"thumb-label\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}}):_c('v-text-field',{attrs:{\"label\":_vm.$t('conf.' + conf_item_value[2]),\"filled\":\"\"},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key][conf_item_value[0]]),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], conf_item_value[0], $$v)},expression:\"conf.player_settings[key][conf_item_value[0]]\"}})],1),(!_vm.conf.player_settings[key].enabled)?_c('v-list-item',[_c('v-switch',{attrs:{\"label\":_vm.$t('conf.' + 'enabled')},on:{\"change\":function($event){return _vm.confChanged(\n                        'player_settings',\n                        key,\n                        _vm.conf.player_settings[key]\n                      )}},model:{value:(_vm.conf.player_settings[key].enabled),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], \"enabled\", $$v)},expression:\"conf.player_settings[key].enabled\"}})],1):_vm._e()],1)}),0):_c('div',[_c('v-list-item',[_c('v-switch',{attrs:{\"label\":_vm.$t('conf.' + 'enabled')},on:{\"change\":function($event){return _vm.confChanged(\n                      'player_settings',\n                      key,\n                      _vm.conf.player_settings[key]\n                    )}},model:{value:(_vm.conf.player_settings[key].enabled),callback:function ($$v) {_vm.$set(_vm.conf.player_settings[key], \"enabled\", $$v)},expression:\"conf.player_settings[key].enabled\"}})],1)],1),_c('v-divider')],1)}),1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-alert :value=\"restart_message\" type=\"info\">\n      {{ $t(\"reboot_required\") }}\n    </v-alert>\n\n        <!-- config main menu -->\n        <v-card flat v-if=\"!configKey\">\n          <v-list tile>\n            <v-list-item tile\n              v-for=\"(conf_value, conf_key) in conf\" :key=\"conf_key\" @click=\"$router.push('/config/' + conf_key)\">\n                <!-- <v-list-item-icon style=\"margin-left:15px\">\n                  <v-icon>{{ item.icon }}</v-icon>\n                </v-list-item-icon> -->\n                <v-list-item-content>\n                  <v-list-item-title> {{ $t(\"conf.\" + conf_key) }}</v-list-item-title>\n                </v-list-item-content>\n            </v-list-item>\n          </v-list>\n        </v-card>\n        <!-- generic and module settings -->\n        <v-card flat v-if=\"configKey != 'player_settings'\">\n          <v-list two-line tile>\n            <v-list-group\n              no-action\n              v-for=\"(conf_subvalue, conf_subkey) in conf[configKey]\"\n              :key=\"conf_subkey\"\n            >\n              <template v-slot:activator>\n                <v-list-item>\n                  <v-list-item-avatar tile style=\"margin-left:-15px\">\n                    <img :src=\"require('../assets/' + conf_subkey + '.png')\" style=\"border-radius:5px;border: 1px solid rgba(0,0,0,.85);\" />\n                  </v-list-item-avatar>\n                  <v-list-item-content>\n                    <v-list-item-title>{{\n                      $t(\"conf.\" + conf_subkey)\n                    }}</v-list-item-title>\n                  </v-list-item-content>\n                </v-list-item>\n              </template>\n              <div\n                v-for=\"(conf_item_value, conf_item_key) in conf[configKey][\n                  conf_subkey\n                ].__desc__\"\n                :key=\"conf_item_key\"\n              >\n                <v-list-item>\n                  <v-switch\n                    v-if=\"typeof conf_item_value[1] == 'boolean'\"\n                    v-model=\"conf[configKey][conf_subkey][conf_item_value[0]]\"\n                    :label=\"$t('conf.' + conf_item_value[2])\"\n                    @change=\"\n                      confChanged(\n                        configKey,\n                        conf_subkey,\n                        conf[configKey][conf_subkey]\n                      )\n                    \"\n                  ></v-switch>\n                  <v-text-field\n                    v-else-if=\"conf_item_value[1] == '<password>'\"\n                    v-model=\"conf[configKey][conf_subkey][conf_item_value[0]]\"\n                    :label=\"$t('conf.' + conf_item_value[2])\"\n                    filled\n                    type=\"password\"\n                    @change=\"\n                      confChanged(\n                        configKey,\n                        conf_subkey,\n                        conf[configKey][conf_subkey]\n                      )\n                    \"\n                  ></v-text-field>\n                  <v-select\n                    v-else-if=\"conf_item_value[1] == '<player>'\"\n                    v-model=\"conf[configKey][conf_subkey][conf_item_value[0]]\"\n                    :label=\"$t('conf.' + conf_item_value[2])\"\n                    filled\n                    type=\"password\"\n                    @change=\"\n                      confChanged(\n                        configKey,\n                        conf_subkey,\n                        conf[configKey][conf_subkey]\n                      )\n                    \"\n                  ></v-select>\n                  <v-text-field\n                    v-else\n                    v-model=\"conf[configKey][conf_subkey][conf_item_value[0]]\"\n                    :label=\"$t('conf.' + conf_item_value[2])\"\n                    @change=\"\n                      confChanged(\n                        configKey,\n                        conf_subkey,\n                        conf[configKey][conf_subkey]\n                      )\n                    \"\n                    filled\n                  ></v-text-field>\n                </v-list-item>\n              </div>\n              <v-divider></v-divider>\n            </v-list-group>\n          </v-list>\n        </v-card>\n        <!-- player settings -->\n        <v-card flat v-if=\"configKey == 'player_settings'\">\n          <v-list two-line>\n            <v-list-group\n              no-action\n              v-for=\"(player, key) in $server.players\"\n              :key=\"key\"\n            >\n              <template v-slot:activator>\n                <v-list-item>\n                  <v-list-item-avatar tile style=\"margin-left:-20px;margin-right:6px;\">\n                    <img\n                      :src=\"\n                        require('../assets/' + player.player_provider + '.png')\n                      \"\n                      style=\"border-radius:5px;border: 1px solid rgba(0,0,0,.85);\"\n                    />\n                  </v-list-item-avatar>\n                  <v-list-item-content>\n                    <v-list-item-title class=\"title\">{{\n                      player.name\n                    }}</v-list-item-title>\n                    <v-list-item-subtitle class=\"caption\">{{\n                      key\n                    }}</v-list-item-subtitle>\n                  </v-list-item-content>\n                </v-list-item>\n              </template>\n              <div v-if=\"conf.player_settings[key].enabled\">\n                <!-- enabled player -->\n                <div\n                  v-for=\"(conf_item_value, conf_item_key) in conf\n                    .player_settings[key].__desc__\"\n                  :key=\"conf_item_key\"\n                >\n                  <v-list-item>\n                    <v-switch\n                      v-if=\"typeof conf_item_value[1] == 'boolean'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                    ></v-switch>\n                    <v-text-field\n                      v-else-if=\"conf_item_value[1] == '<password>'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      filled\n                      type=\"password\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                    ></v-text-field>\n                    <v-select\n                      v-else-if=\"conf_item_value[1] == '<player>'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                      filled\n                    >\n                      <option\n                        v-for=\"(player, key) in $server.players\"\n                        :value=\"item.id\"\n                        :key=\"key\"\n                        >{{ item.name }}</option\n                      >\n                    </v-select>\n                    <v-select\n                      v-else-if=\"conf_item_value[0] == 'max_sample_rate'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      :items=\"sample_rates\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                      filled\n                    ></v-select>\n                    <v-slider\n                      v-else-if=\"conf_item_value[0] == 'crossfade_duration'\"\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                      min=\"0\"\n                      max=\"10\"\n                      filled\n                      thumb-label\n                    ></v-slider>\n                    <v-text-field\n                      v-else\n                      v-model=\"conf.player_settings[key][conf_item_value[0]]\"\n                      :label=\"$t('conf.' + conf_item_value[2])\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                      filled\n                    ></v-text-field>\n                  </v-list-item>\n                  <v-list-item v-if=\"!conf.player_settings[key].enabled\">\n                    <v-switch\n                      v-model=\"conf.player_settings[key].enabled\"\n                      :label=\"$t('conf.' + 'enabled')\"\n                      @change=\"\n                        confChanged(\n                          'player_settings',\n                          key,\n                          conf.player_settings[key]\n                        )\n                      \"\n                    ></v-switch>\n                  </v-list-item>\n                </div>\n              </div>\n              <div v-else>\n                <!-- disabled player -->\n                <v-list-item>\n                  <v-switch\n                    v-model=\"conf.player_settings[key].enabled\"\n                    :label=\"$t('conf.' + 'enabled')\"\n                    @change=\"\n                      confChanged(\n                        'player_settings',\n                        key,\n                        conf.player_settings[key]\n                      )\n                    \"\n                  ></v-switch>\n                </v-list-item>\n              </div>\n              <v-divider></v-divider>\n            </v-list-group>\n          </v-list>\n        </v-card>\n\n  </section>\n</template>\n\n<script>\n\nexport default {\n  components: {\n  },\n  props: ['configKey'],\n  data () {\n    return {\n      conf: {},\n      players: {},\n      active: 0,\n      sample_rates: [44100, 48000, 88200, 96000, 192000, 384000],\n      restart_message: false\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t('settings')\n    if (this.configKey) {\n      this.$store.windowtitle += ' | ' + this.$t('conf.' + this.configKey)\n    }\n    this.getConfig()\n  },\n  methods: {\n    async getConfig () {\n      this.conf = await this.$server.getData('config')\n    },\n    async confChanged (key, subkey, newvalue) {\n      let endpoint = 'config/' + key + '/' + subkey\n      let result = await this.$server.postData(endpoint, newvalue)\n      if (result.restart_required) {\n        this.restart_message = true\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Config.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Config.vue?vue&type=script&lang=js&\"","import Vue from 'vue';\nexport default Vue.extend({\n  name: 'transitionable',\n  props: {\n    mode: String,\n    origin: String,\n    transition: String\n  }\n});\n//# sourceMappingURL=index.js.map","// Styles\nimport \"../../../src/components/VAlert/VAlert.sass\"; // Extensions\n\nimport VSheet from '../VSheet'; // Components\n\nimport VBtn from '../VBtn';\nimport VIcon from '../VIcon'; // Mixins\n\nimport Toggleable from '../../mixins/toggleable';\nimport Themeable from '../../mixins/themeable';\nimport Transitionable from '../../mixins/transitionable'; // Utilities\n\nimport mixins from '../../util/mixins';\nimport { breaking } from '../../util/console';\n/* @vue/component */\n\nexport default mixins(VSheet, Toggleable, Transitionable).extend({\n  name: 'v-alert',\n  props: {\n    border: {\n      type: String,\n\n      validator(val) {\n        return ['top', 'right', 'bottom', 'left'].includes(val);\n      }\n\n    },\n    closeLabel: {\n      type: String,\n      default: '$vuetify.close'\n    },\n    coloredBorder: Boolean,\n    dense: Boolean,\n    dismissible: Boolean,\n    icon: {\n      default: '',\n      type: [Boolean, String],\n\n      validator(val) {\n        return typeof val === 'string' || val === false;\n      }\n\n    },\n    outlined: Boolean,\n    prominent: Boolean,\n    text: Boolean,\n    type: {\n      type: String,\n\n      validator(val) {\n        return ['info', 'error', 'success', 'warning'].includes(val);\n      }\n\n    },\n    value: {\n      type: Boolean,\n      default: true\n    }\n  },\n  computed: {\n    __cachedBorder() {\n      if (!this.border) return null;\n      let data = {\n        staticClass: 'v-alert__border',\n        class: {\n          [`v-alert__border--${this.border}`]: true\n        }\n      };\n\n      if (this.coloredBorder) {\n        data = this.setBackgroundColor(this.computedColor, data);\n        data.class['v-alert__border--has-color'] = true;\n      }\n\n      return this.$createElement('div', data);\n    },\n\n    __cachedDismissible() {\n      if (!this.dismissible) return null;\n      const color = this.iconColor;\n      return this.$createElement(VBtn, {\n        staticClass: 'v-alert__dismissible',\n        props: {\n          color,\n          icon: true,\n          small: true\n        },\n        attrs: {\n          'aria-label': this.$vuetify.lang.t(this.closeLabel)\n        },\n        on: {\n          click: () => this.isActive = false\n        }\n      }, [this.$createElement(VIcon, {\n        props: {\n          color\n        }\n      }, '$cancel')]);\n    },\n\n    __cachedIcon() {\n      if (!this.computedIcon) return null;\n      return this.$createElement(VIcon, {\n        staticClass: 'v-alert__icon',\n        props: {\n          color: this.iconColor\n        }\n      }, this.computedIcon);\n    },\n\n    classes() {\n      const classes = { ...VSheet.options.computed.classes.call(this),\n        'v-alert--border': Boolean(this.border),\n        'v-alert--dense': this.dense,\n        'v-alert--outlined': this.outlined,\n        'v-alert--prominent': this.prominent,\n        'v-alert--text': this.text\n      };\n\n      if (this.border) {\n        classes[`v-alert--border-${this.border}`] = true;\n      }\n\n      return classes;\n    },\n\n    computedColor() {\n      return this.color || this.type;\n    },\n\n    computedIcon() {\n      if (this.icon === false) return false;\n      if (typeof this.icon === 'string' && this.icon) return this.icon;\n      if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false;\n      return `$${this.type}`;\n    },\n\n    hasColoredIcon() {\n      return this.hasText || Boolean(this.border) && this.coloredBorder;\n    },\n\n    hasText() {\n      return this.text || this.outlined;\n    },\n\n    iconColor() {\n      return this.hasColoredIcon ? this.computedColor : undefined;\n    },\n\n    isDark() {\n      if (this.type && !this.coloredBorder && !this.outlined) return true;\n      return Themeable.options.computed.isDark.call(this);\n    }\n\n  },\n\n  created() {\n    /* istanbul ignore next */\n    if (this.$attrs.hasOwnProperty('outline')) {\n      breaking('outline', 'outlined', this);\n    }\n  },\n\n  methods: {\n    genWrapper() {\n      const children = [this.$slots.prepend || this.__cachedIcon, this.genContent(), this.__cachedBorder, this.$slots.append, this.$scopedSlots.close ? this.$scopedSlots.close({\n        toggle: this.toggle\n      }) : this.__cachedDismissible];\n      const data = {\n        staticClass: 'v-alert__wrapper'\n      };\n      return this.$createElement('div', data, children);\n    },\n\n    genContent() {\n      return this.$createElement('div', {\n        staticClass: 'v-alert__content'\n      }, this.$slots.default);\n    },\n\n    genAlert() {\n      let data = {\n        staticClass: 'v-alert',\n        attrs: {\n          role: 'alert'\n        },\n        class: this.classes,\n        style: this.styles,\n        directives: [{\n          name: 'show',\n          value: this.isActive\n        }]\n      };\n\n      if (!this.coloredBorder) {\n        const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor;\n        data = setColor(this.computedColor, data);\n      }\n\n      return this.$createElement('div', data, [this.genWrapper()]);\n    },\n\n    /** @public */\n    toggle() {\n      this.isActive = !this.isActive;\n    }\n\n  },\n\n  render(h) {\n    const render = this.genAlert();\n    if (!this.transition) return render;\n    return h('transition', {\n      props: {\n        name: this.transition,\n        origin: this.origin,\n        mode: this.mode\n      }\n    }, [render]);\n  }\n\n});\n//# sourceMappingURL=VAlert.js.map","// Styles\nimport \"../../../src/components/VChip/VChip.sass\";\nimport mixins from '../../util/mixins'; // Components\n\nimport { VExpandXTransition } from '../transitions';\nimport VIcon from '../VIcon'; // Mixins\n\nimport Colorable from '../../mixins/colorable';\nimport { factory as GroupableFactory } from '../../mixins/groupable';\nimport Themeable from '../../mixins/themeable';\nimport { factory as ToggleableFactory } from '../../mixins/toggleable';\nimport Routable from '../../mixins/routable';\nimport Sizeable from '../../mixins/sizeable'; // Utilities\n\nimport { breaking } from '../../util/console';\n/* @vue/component */\n\nexport default mixins(Colorable, Sizeable, Routable, Themeable, GroupableFactory('chipGroup'), ToggleableFactory('inputValue')).extend({\n  name: 'v-chip',\n  props: {\n    active: {\n      type: Boolean,\n      default: true\n    },\n    activeClass: {\n      type: String,\n\n      default() {\n        if (!this.chipGroup) return '';\n        return this.chipGroup.activeClass;\n      }\n\n    },\n    close: Boolean,\n    closeIcon: {\n      type: String,\n      default: '$delete'\n    },\n    disabled: Boolean,\n    draggable: Boolean,\n    filter: Boolean,\n    filterIcon: {\n      type: String,\n      default: '$complete'\n    },\n    label: Boolean,\n    link: Boolean,\n    outlined: Boolean,\n    pill: Boolean,\n    tag: {\n      type: String,\n      default: 'span'\n    },\n    textColor: String,\n    value: null\n  },\n  data: () => ({\n    proxyClass: 'v-chip--active'\n  }),\n  computed: {\n    classes() {\n      return {\n        'v-chip': true,\n        ...Routable.options.computed.classes.call(this),\n        'v-chip--clickable': this.isClickable,\n        'v-chip--disabled': this.disabled,\n        'v-chip--draggable': this.draggable,\n        'v-chip--label': this.label,\n        'v-chip--link': this.isLink,\n        'v-chip--no-color': !this.color,\n        'v-chip--outlined': this.outlined,\n        'v-chip--pill': this.pill,\n        'v-chip--removable': this.hasClose,\n        ...this.themeClasses,\n        ...this.sizeableClasses,\n        ...this.groupClasses\n      };\n    },\n\n    hasClose() {\n      return Boolean(this.close);\n    },\n\n    isClickable() {\n      return Boolean(Routable.options.computed.isClickable.call(this) || this.chipGroup);\n    }\n\n  },\n\n  created() {\n    const breakingProps = [['outline', 'outlined'], ['selected', 'input-value'], ['value', 'active'], ['@input', '@active.sync']];\n    /* istanbul ignore next */\n\n    breakingProps.forEach(([original, replacement]) => {\n      if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this);\n    });\n  },\n\n  methods: {\n    click(e) {\n      this.$emit('click', e);\n      this.chipGroup && this.toggle();\n    },\n\n    genFilter() {\n      const children = [];\n\n      if (this.isActive) {\n        children.push(this.$createElement(VIcon, {\n          staticClass: 'v-chip__filter',\n          props: {\n            left: true\n          }\n        }, this.filterIcon));\n      }\n\n      return this.$createElement(VExpandXTransition, children);\n    },\n\n    genClose() {\n      return this.$createElement(VIcon, {\n        staticClass: 'v-chip__close',\n        props: {\n          right: true\n        },\n        on: {\n          click: e => {\n            e.stopPropagation();\n            this.$emit('click:close');\n            this.$emit('update:active', false);\n          }\n        }\n      }, this.closeIcon);\n    },\n\n    genContent() {\n      return this.$createElement('span', {\n        staticClass: 'v-chip__content'\n      }, [this.filter && this.genFilter(), this.$slots.default, this.hasClose && this.genClose()]);\n    }\n\n  },\n\n  render(h) {\n    const children = [this.genContent()];\n    let {\n      tag,\n      data\n    } = this.generateRouteLink();\n    data.attrs = { ...data.attrs,\n      draggable: this.draggable ? 'true' : undefined,\n      tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs.tabindex\n    };\n    data.directives.push({\n      name: 'show',\n      value: this.active\n    });\n    data = this.setBackgroundColor(this.color, data);\n    const color = this.textColor || this.outlined && this.color;\n    return h(tag, this.setTextColor(color, data), children);\n  }\n\n});\n//# sourceMappingURL=VChip.js.map","import VChip from './VChip';\nexport { VChip };\nexport default VChip;\n//# sourceMappingURL=index.js.map","import \"../../../src/components/VCheckbox/VSimpleCheckbox.sass\";\nimport ripple from '../../directives/ripple';\nimport Vue from 'vue';\nimport { VIcon } from '../VIcon';\nimport Colorable from '../../mixins/colorable';\nimport Themeable from '../../mixins/themeable';\nimport { wrapInArray } from '../../util/helpers';\nexport default Vue.extend({\n  name: 'v-simple-checkbox',\n  functional: true,\n  directives: {\n    ripple\n  },\n  props: { ...Colorable.options.props,\n    ...Themeable.options.props,\n    disabled: Boolean,\n    ripple: {\n      type: Boolean,\n      default: true\n    },\n    value: Boolean,\n    indeterminate: Boolean,\n    indeterminateIcon: {\n      type: String,\n      default: '$checkboxIndeterminate'\n    },\n    onIcon: {\n      type: String,\n      default: '$checkboxOn'\n    },\n    offIcon: {\n      type: String,\n      default: '$checkboxOff'\n    }\n  },\n\n  render(h, {\n    props,\n    data\n  }) {\n    const children = [];\n\n    if (props.ripple && !props.disabled) {\n      const ripple = h('div', Colorable.options.methods.setTextColor(props.color, {\n        staticClass: 'v-input--selection-controls__ripple',\n        directives: [{\n          name: 'ripple',\n          value: {\n            center: true\n          }\n        }]\n      }));\n      children.push(ripple);\n    }\n\n    let icon = props.offIcon;\n    if (props.indeterminate) icon = props.indeterminateIcon;else if (props.value) icon = props.onIcon;\n    children.push(h(VIcon, Colorable.options.methods.setTextColor(props.value && props.color, {\n      props: {\n        disabled: props.disabled,\n        dark: props.dark,\n        light: props.light\n      }\n    }), icon));\n    const classes = {\n      'v-simple-checkbox': true,\n      'v-simple-checkbox--disabled': props.disabled\n    };\n    return h('div', { ...data,\n      class: classes,\n      on: {\n        click: e => {\n          e.stopPropagation();\n\n          if (data.on && data.on.input && !props.disabled) {\n            wrapInArray(data.on.input).forEach(f => f(!props.value));\n          }\n        }\n      }\n    }, children);\n  }\n\n});\n//# sourceMappingURL=VSimpleCheckbox.js.map","// Styles\nimport \"../../../src/components/VCard/VCard.sass\"; // Components\n\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox';\nimport VDivider from '../VDivider';\nimport VSubheader from '../VSubheader';\nimport { VList, VListItem, VListItemAction, VListItemContent, VListItemTitle } from '../VList'; // Directives\n\nimport ripple from '../../directives/ripple'; // Mixins\n\nimport Colorable from '../../mixins/colorable';\nimport Themeable from '../../mixins/themeable'; // Helpers\n\nimport { escapeHTML, getPropertyFromItem } from '../../util/helpers'; // Types\n\nimport mixins from '../../util/mixins';\n/* @vue/component */\n\nexport default mixins(Colorable, Themeable).extend({\n  name: 'v-select-list',\n  // https://github.com/vuejs/vue/issues/6872\n  directives: {\n    ripple\n  },\n  props: {\n    action: Boolean,\n    dense: Boolean,\n    hideSelected: Boolean,\n    items: {\n      type: Array,\n      default: () => []\n    },\n    itemDisabled: {\n      type: [String, Array, Function],\n      default: 'disabled'\n    },\n    itemText: {\n      type: [String, Array, Function],\n      default: 'text'\n    },\n    itemValue: {\n      type: [String, Array, Function],\n      default: 'value'\n    },\n    noDataText: String,\n    noFilter: Boolean,\n    searchInput: {\n      default: null\n    },\n    selectedItems: {\n      type: Array,\n      default: () => []\n    }\n  },\n  computed: {\n    parsedItems() {\n      return this.selectedItems.map(item => this.getValue(item));\n    },\n\n    tileActiveClass() {\n      return Object.keys(this.setTextColor(this.color).class || {}).join(' ');\n    },\n\n    staticNoDataTile() {\n      const tile = {\n        attrs: {\n          role: undefined\n        },\n        on: {\n          mousedown: e => e.preventDefault()\n        }\n      };\n      return this.$createElement(VListItem, tile, [this.genTileContent(this.noDataText)]);\n    }\n\n  },\n  methods: {\n    genAction(item, inputValue) {\n      return this.$createElement(VListItemAction, [this.$createElement(VSimpleCheckbox, {\n        props: {\n          color: this.color,\n          value: inputValue\n        },\n        on: {\n          input: () => this.$emit('select', item)\n        }\n      })]);\n    },\n\n    genDivider(props) {\n      return this.$createElement(VDivider, {\n        props\n      });\n    },\n\n    genFilteredText(text) {\n      text = text || '';\n      if (!this.searchInput || this.noFilter) return escapeHTML(text);\n      const {\n        start,\n        middle,\n        end\n      } = this.getMaskedCharacters(text);\n      return `${escapeHTML(start)}${this.genHighlight(middle)}${escapeHTML(end)}`;\n    },\n\n    genHeader(props) {\n      return this.$createElement(VSubheader, {\n        props\n      }, props.header);\n    },\n\n    genHighlight(text) {\n      return `<span class=\"v-list-item__mask\">${escapeHTML(text)}</span>`;\n    },\n\n    genLabelledBy(item) {\n      const text = escapeHTML(this.getText(item).split(' ').join('-').toLowerCase());\n      return `${text}-list-item-${this._uid}`;\n    },\n\n    getMaskedCharacters(text) {\n      const searchInput = (this.searchInput || '').toString().toLocaleLowerCase();\n      const index = text.toLocaleLowerCase().indexOf(searchInput);\n      if (index < 0) return {\n        start: '',\n        middle: text,\n        end: ''\n      };\n      const start = text.slice(0, index);\n      const middle = text.slice(index, index + searchInput.length);\n      const end = text.slice(index + searchInput.length);\n      return {\n        start,\n        middle,\n        end\n      };\n    },\n\n    genTile(item, disabled = null, value = false) {\n      if (!value) value = this.hasItem(item);\n\n      if (item === Object(item)) {\n        disabled = disabled !== null ? disabled : this.getDisabled(item);\n      }\n\n      const tile = {\n        attrs: {\n          // Default behavior in list does not\n          // contain aria-selected by default\n          'aria-selected': String(value),\n          'aria-labelledby': this.genLabelledBy(item),\n          role: 'option'\n        },\n        on: {\n          mousedown: e => {\n            // Prevent onBlur from being called\n            e.preventDefault();\n          },\n          click: () => disabled || this.$emit('select', item)\n        },\n        props: {\n          activeClass: this.tileActiveClass,\n          disabled,\n          ripple: true,\n          inputValue: value\n        }\n      };\n\n      if (!this.$scopedSlots.item) {\n        return this.$createElement(VListItem, tile, [this.action && !this.hideSelected && this.items.length > 0 ? this.genAction(item, value) : null, this.genTileContent(item)]);\n      }\n\n      const parent = this;\n      const scopedSlot = this.$scopedSlots.item({\n        parent,\n        item,\n        attrs: { ...tile.attrs,\n          ...tile.props\n        },\n        on: tile.on\n      });\n      return this.needsTile(scopedSlot) ? this.$createElement(VListItem, tile, scopedSlot) : scopedSlot;\n    },\n\n    genTileContent(item) {\n      const innerHTML = this.genFilteredText(this.getText(item));\n      return this.$createElement(VListItemContent, [this.$createElement(VListItemTitle, {\n        attrs: {\n          id: this.genLabelledBy(item)\n        },\n        domProps: {\n          innerHTML\n        }\n      })]);\n    },\n\n    hasItem(item) {\n      return this.parsedItems.indexOf(this.getValue(item)) > -1;\n    },\n\n    needsTile(slot) {\n      return slot.length !== 1 || slot[0].componentOptions == null || slot[0].componentOptions.Ctor.options.name !== 'v-list-item';\n    },\n\n    getDisabled(item) {\n      return Boolean(getPropertyFromItem(item, this.itemDisabled, false));\n    },\n\n    getText(item) {\n      return String(getPropertyFromItem(item, this.itemText, item));\n    },\n\n    getValue(item) {\n      return getPropertyFromItem(item, this.itemValue, this.getText(item));\n    }\n\n  },\n\n  render() {\n    const children = [];\n\n    for (const item of this.items) {\n      if (this.hideSelected && this.hasItem(item)) continue;\n      if (item == null) children.push(this.genTile(item));else if (item.header) children.push(this.genHeader(item));else if (item.divider) children.push(this.genDivider(item));else children.push(this.genTile(item));\n    }\n\n    children.length || children.push(this.$slots['no-data'] || this.staticNoDataTile);\n    this.$slots['prepend-item'] && children.unshift(this.$slots['prepend-item']);\n    this.$slots['append-item'] && children.push(this.$slots['append-item']);\n    return this.$createElement('div', {\n      staticClass: 'v-select-list v-card',\n      class: this.themeClasses\n    }, [this.$createElement(VList, {\n      attrs: {\n        id: this.$attrs.id,\n        role: 'listbox',\n        tabindex: -1\n      },\n      props: {\n        dense: this.dense\n      }\n    }, children)]);\n  }\n\n});\n//# sourceMappingURL=VSelectList.js.map","import Vue from 'vue';\nimport { deepEqual } from '../../util/helpers';\nexport default Vue.extend({\n  name: 'comparable',\n  props: {\n    valueComparator: {\n      type: Function,\n      default: deepEqual\n    }\n  }\n});\n//# sourceMappingURL=index.js.map","import Vue from 'vue';\n/* @vue/component */\n\nexport default Vue.extend({\n  name: 'filterable',\n  props: {\n    noDataText: {\n      type: String,\n      default: '$vuetify.noDataText'\n    }\n  }\n});\n//# sourceMappingURL=index.js.map","// Styles\nimport \"../../../src/components/VTextField/VTextField.sass\";\nimport \"../../../src/components/VSelect/VSelect.sass\"; // Components\n\nimport VChip from '../VChip';\nimport VMenu from '../VMenu';\nimport VSelectList from './VSelectList'; // Extensions\n\nimport VTextField from '../VTextField/VTextField'; // Mixins\n\nimport Comparable from '../../mixins/comparable';\nimport Filterable from '../../mixins/filterable'; // Directives\n\nimport ClickOutside from '../../directives/click-outside'; // Utilities\n\nimport { getPropertyFromItem, keyCodes } from '../../util/helpers';\nimport { consoleError } from '../../util/console'; // Types\n\nimport mixins from '../../util/mixins';\nexport const defaultMenuProps = {\n  closeOnClick: false,\n  closeOnContentClick: false,\n  disableKeys: true,\n  openOnClick: false,\n  maxHeight: 304\n};\nconst baseMixins = mixins(VTextField, Comparable, Filterable);\n/* @vue/component */\n\nexport default baseMixins.extend().extend({\n  name: 'v-select',\n  directives: {\n    ClickOutside\n  },\n  props: {\n    appendIcon: {\n      type: String,\n      default: '$dropdown'\n    },\n    attach: {\n      default: false\n    },\n    cacheItems: Boolean,\n    chips: Boolean,\n    clearable: Boolean,\n    deletableChips: Boolean,\n    eager: Boolean,\n    hideSelected: Boolean,\n    items: {\n      type: Array,\n      default: () => []\n    },\n    itemColor: {\n      type: String,\n      default: 'primary'\n    },\n    itemDisabled: {\n      type: [String, Array, Function],\n      default: 'disabled'\n    },\n    itemText: {\n      type: [String, Array, Function],\n      default: 'text'\n    },\n    itemValue: {\n      type: [String, Array, Function],\n      default: 'value'\n    },\n    menuProps: {\n      type: [String, Array, Object],\n      default: () => defaultMenuProps\n    },\n    multiple: Boolean,\n    openOnClear: Boolean,\n    returnObject: Boolean,\n    smallChips: Boolean\n  },\n\n  data() {\n    return {\n      cachedItems: this.cacheItems ? this.items : [],\n      content: null,\n      isBooted: false,\n      isMenuActive: false,\n      lastItem: 20,\n      // As long as a value is defined, show it\n      // Otherwise, check if multiple\n      // to determine which default to provide\n      lazyValue: this.value !== undefined ? this.value : this.multiple ? [] : undefined,\n      selectedIndex: -1,\n      selectedItems: [],\n      keyboardLookupPrefix: '',\n      keyboardLookupLastTime: 0\n    };\n  },\n\n  computed: {\n    /* All items that the select has */\n    allItems() {\n      return this.filterDuplicates(this.cachedItems.concat(this.items));\n    },\n\n    classes() {\n      return { ...VTextField.options.computed.classes.call(this),\n        'v-select': true,\n        'v-select--chips': this.hasChips,\n        'v-select--chips--small': this.smallChips,\n        'v-select--is-menu-active': this.isMenuActive,\n        'v-select--is-multi': this.multiple\n      };\n    },\n\n    /* Used by other components to overwrite */\n    computedItems() {\n      return this.allItems;\n    },\n\n    computedOwns() {\n      return `list-${this._uid}`;\n    },\n\n    counterValue() {\n      return this.multiple ? this.selectedItems.length : (this.getText(this.selectedItems[0]) || '').toString().length;\n    },\n\n    directives() {\n      return this.isFocused ? [{\n        name: 'click-outside',\n        value: this.blur,\n        args: {\n          closeConditional: this.closeConditional\n        }\n      }] : undefined;\n    },\n\n    dynamicHeight() {\n      return 'auto';\n    },\n\n    hasChips() {\n      return this.chips || this.smallChips;\n    },\n\n    hasSlot() {\n      return Boolean(this.hasChips || this.$scopedSlots.selection);\n    },\n\n    isDirty() {\n      return this.selectedItems.length > 0;\n    },\n\n    listData() {\n      const scopeId = this.$vnode && this.$vnode.context.$options._scopeId;\n      const attrs = scopeId ? {\n        [scopeId]: true\n      } : {};\n      return {\n        attrs: { ...attrs,\n          id: this.computedOwns\n        },\n        props: {\n          action: this.multiple,\n          color: this.itemColor,\n          dense: this.dense,\n          hideSelected: this.hideSelected,\n          items: this.virtualizedItems,\n          itemDisabled: this.itemDisabled,\n          itemText: this.itemText,\n          itemValue: this.itemValue,\n          noDataText: this.$vuetify.lang.t(this.noDataText),\n          selectedItems: this.selectedItems\n        },\n        on: {\n          select: this.selectItem\n        },\n        scopedSlots: {\n          item: this.$scopedSlots.item\n        }\n      };\n    },\n\n    staticList() {\n      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n        consoleError('assert: staticList should not be called if slots are used');\n      }\n\n      return this.$createElement(VSelectList, this.listData);\n    },\n\n    virtualizedItems() {\n      return this.$_menuProps.auto ? this.computedItems : this.computedItems.slice(0, this.lastItem);\n    },\n\n    menuCanShow: () => true,\n\n    $_menuProps() {\n      let normalisedProps = typeof this.menuProps === 'string' ? this.menuProps.split(',') : this.menuProps;\n\n      if (Array.isArray(normalisedProps)) {\n        normalisedProps = normalisedProps.reduce((acc, p) => {\n          acc[p.trim()] = true;\n          return acc;\n        }, {});\n      }\n\n      return { ...defaultMenuProps,\n        eager: this.eager,\n        value: this.menuCanShow && this.isMenuActive,\n        nudgeBottom: normalisedProps.offsetY ? 1 : 0,\n        ...normalisedProps\n      };\n    }\n\n  },\n  watch: {\n    internalValue(val) {\n      this.initialValue = val;\n      this.setSelectedItems();\n    },\n\n    isBooted() {\n      this.$nextTick(() => {\n        if (this.content && this.content.addEventListener) {\n          this.content.addEventListener('scroll', this.onScroll, false);\n        }\n      });\n    },\n\n    isMenuActive(val) {\n      this.$nextTick(() => this.onMenuActiveChange(val));\n      if (!val) return;\n      this.isBooted = true;\n    },\n\n    items: {\n      immediate: true,\n\n      handler(val) {\n        if (this.cacheItems) {\n          // Breaks vue-test-utils if\n          // this isn't calculated\n          // on the next tick\n          this.$nextTick(() => {\n            this.cachedItems = this.filterDuplicates(this.cachedItems.concat(val));\n          });\n        }\n\n        this.setSelectedItems();\n      }\n\n    }\n  },\n\n  mounted() {\n    this.content = this.$refs.menu && this.$refs.menu.$refs.content;\n  },\n\n  methods: {\n    /** @public */\n    blur(e) {\n      VTextField.options.methods.blur.call(this, e);\n      this.isMenuActive = false;\n      this.isFocused = false;\n      this.selectedIndex = -1;\n    },\n\n    /** @public */\n    activateMenu() {\n      if (this.disabled || this.readonly || this.isMenuActive) return;\n      this.isMenuActive = true;\n    },\n\n    clearableCallback() {\n      this.setValue(this.multiple ? [] : undefined);\n      this.$nextTick(() => this.$refs.input && this.$refs.input.focus());\n      if (this.openOnClear) this.isMenuActive = true;\n    },\n\n    closeConditional(e) {\n      return !this._isDestroyed && // Click originates from outside the menu content\n      this.content && !this.content.contains(e.target) && // Click originates from outside the element\n      this.$el && !this.$el.contains(e.target) && e.target !== this.$el;\n    },\n\n    filterDuplicates(arr) {\n      const uniqueValues = new Map();\n\n      for (let index = 0; index < arr.length; ++index) {\n        const item = arr[index];\n        const val = this.getValue(item); // TODO: comparator\n\n        !uniqueValues.has(val) && uniqueValues.set(val, item);\n      }\n\n      return Array.from(uniqueValues.values());\n    },\n\n    findExistingIndex(item) {\n      const itemValue = this.getValue(item);\n      return (this.internalValue || []).findIndex(i => this.valueComparator(this.getValue(i), itemValue));\n    },\n\n    genChipSelection(item, index) {\n      const isDisabled = this.disabled || this.readonly || this.getDisabled(item);\n      return this.$createElement(VChip, {\n        staticClass: 'v-chip--select',\n        attrs: {\n          tabindex: -1\n        },\n        props: {\n          close: this.deletableChips && !isDisabled,\n          disabled: isDisabled,\n          inputValue: index === this.selectedIndex,\n          small: this.smallChips\n        },\n        on: {\n          click: e => {\n            if (isDisabled) return;\n            e.stopPropagation();\n            this.selectedIndex = index;\n          },\n          'click:close': () => this.onChipInput(item)\n        },\n        key: JSON.stringify(this.getValue(item))\n      }, this.getText(item));\n    },\n\n    genCommaSelection(item, index, last) {\n      const color = index === this.selectedIndex && this.computedColor;\n      const isDisabled = this.disabled || this.getDisabled(item);\n      return this.$createElement('div', this.setTextColor(color, {\n        staticClass: 'v-select__selection v-select__selection--comma',\n        class: {\n          'v-select__selection--disabled': isDisabled\n        },\n        key: JSON.stringify(this.getValue(item))\n      }), `${this.getText(item)}${last ? '' : ', '}`);\n    },\n\n    genDefaultSlot() {\n      const selections = this.genSelections();\n      const input = this.genInput(); // If the return is an empty array\n      // push the input\n\n      if (Array.isArray(selections)) {\n        selections.push(input); // Otherwise push it into children\n      } else {\n        selections.children = selections.children || [];\n        selections.children.push(input);\n      }\n\n      return [this.genFieldset(), this.$createElement('div', {\n        staticClass: 'v-select__slot',\n        directives: this.directives\n      }, [this.genLabel(), this.prefix ? this.genAffix('prefix') : null, selections, this.suffix ? this.genAffix('suffix') : null, this.genClearIcon(), this.genIconSlot()]), this.genMenu(), this.genProgress()];\n    },\n\n    genInput() {\n      const input = VTextField.options.methods.genInput.call(this);\n      input.data.domProps.value = null;\n      input.data.attrs.readonly = true;\n      input.data.attrs.type = 'text';\n      input.data.attrs['aria-readonly'] = true;\n      input.data.on.keypress = this.onKeyPress;\n      return input;\n    },\n\n    genInputSlot() {\n      const render = VTextField.options.methods.genInputSlot.call(this);\n      render.data.attrs = { ...render.data.attrs,\n        role: 'button',\n        'aria-haspopup': 'listbox',\n        'aria-expanded': String(this.isMenuActive),\n        'aria-owns': this.computedOwns\n      };\n      return render;\n    },\n\n    genList() {\n      // If there's no slots, we can use a cached VNode to improve performance\n      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n        return this.genListWithSlot();\n      } else {\n        return this.staticList;\n      }\n    },\n\n    genListWithSlot() {\n      const slots = ['prepend-item', 'no-data', 'append-item'].filter(slotName => this.$slots[slotName]).map(slotName => this.$createElement('template', {\n        slot: slotName\n      }, this.$slots[slotName])); // Requires destructuring due to Vue\n      // modifying the `on` property when passed\n      // as a referenced object\n\n      return this.$createElement(VSelectList, { ...this.listData\n      }, slots);\n    },\n\n    genMenu() {\n      const props = this.$_menuProps;\n      props.activator = this.$refs['input-slot']; // Attach to root el so that\n      // menu covers prepend/append icons\n\n      if ( // TODO: make this a computed property or helper or something\n      this.attach === '' || // If used as a boolean prop (<v-menu attach>)\n      this.attach === true || // If bound to a boolean (<v-menu :attach=\"true\">)\n      this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))\n      ) {\n          props.attach = this.$el;\n        } else {\n        props.attach = this.attach;\n      }\n\n      return this.$createElement(VMenu, {\n        attrs: {\n          role: undefined\n        },\n        props,\n        on: {\n          input: val => {\n            this.isMenuActive = val;\n            this.isFocused = val;\n          }\n        },\n        ref: 'menu'\n      }, [this.genList()]);\n    },\n\n    genSelections() {\n      let length = this.selectedItems.length;\n      const children = new Array(length);\n      let genSelection;\n\n      if (this.$scopedSlots.selection) {\n        genSelection = this.genSlotSelection;\n      } else if (this.hasChips) {\n        genSelection = this.genChipSelection;\n      } else {\n        genSelection = this.genCommaSelection;\n      }\n\n      while (length--) {\n        children[length] = genSelection(this.selectedItems[length], length, length === children.length - 1);\n      }\n\n      return this.$createElement('div', {\n        staticClass: 'v-select__selections'\n      }, children);\n    },\n\n    genSlotSelection(item, index) {\n      return this.$scopedSlots.selection({\n        attrs: {\n          class: 'v-chip--select'\n        },\n        parent: this,\n        item,\n        index,\n        select: e => {\n          e.stopPropagation();\n          this.selectedIndex = index;\n        },\n        selected: index === this.selectedIndex,\n        disabled: this.disabled || this.readonly\n      });\n    },\n\n    getMenuIndex() {\n      return this.$refs.menu ? this.$refs.menu.listIndex : -1;\n    },\n\n    getDisabled(item) {\n      return getPropertyFromItem(item, this.itemDisabled, false);\n    },\n\n    getText(item) {\n      return getPropertyFromItem(item, this.itemText, item);\n    },\n\n    getValue(item) {\n      return getPropertyFromItem(item, this.itemValue, this.getText(item));\n    },\n\n    onBlur(e) {\n      e && this.$emit('blur', e);\n    },\n\n    onChipInput(item) {\n      if (this.multiple) this.selectItem(item);else this.setValue(null); // If all items have been deleted,\n      // open `v-menu`\n\n      if (this.selectedItems.length === 0) {\n        this.isMenuActive = true;\n      } else {\n        this.isMenuActive = false;\n      }\n\n      this.selectedIndex = -1;\n    },\n\n    onClick() {\n      if (this.isDisabled) return;\n      this.isMenuActive = true;\n\n      if (!this.isFocused) {\n        this.isFocused = true;\n        this.$emit('focus');\n      }\n    },\n\n    onEscDown(e) {\n      e.preventDefault();\n\n      if (this.isMenuActive) {\n        e.stopPropagation();\n        this.isMenuActive = false;\n      }\n    },\n\n    onKeyPress(e) {\n      if (this.multiple || this.readonly) return;\n      const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds\n\n      const now = performance.now();\n\n      if (now - this.keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {\n        this.keyboardLookupPrefix = '';\n      }\n\n      this.keyboardLookupPrefix += e.key.toLowerCase();\n      this.keyboardLookupLastTime = now;\n      const index = this.allItems.findIndex(item => {\n        const text = (this.getText(item) || '').toString();\n        return text.toLowerCase().startsWith(this.keyboardLookupPrefix);\n      });\n      const item = this.allItems[index];\n\n      if (index !== -1) {\n        this.setValue(this.returnObject ? item : this.getValue(item));\n        setTimeout(() => this.setMenuIndex(index));\n      }\n    },\n\n    onKeyDown(e) {\n      const keyCode = e.keyCode;\n      const menu = this.$refs.menu; // If enter, space, open menu\n\n      if ([keyCodes.enter, keyCodes.space].includes(keyCode)) this.activateMenu();\n      if (!menu) return; // If menu is active, allow default\n      // listIndex change from menu\n\n      if (this.isMenuActive && keyCode !== keyCodes.tab) {\n        this.$nextTick(() => {\n          menu.changeListIndex(e);\n          this.$emit('update:list-index', menu.listIndex);\n        });\n      } // If menu is not active, up and down can do\n      // one of 2 things. If multiple, opens the\n      // menu, if not, will cycle through all\n      // available options\n\n\n      if (!this.isMenuActive && [keyCodes.up, keyCodes.down].includes(keyCode)) return this.onUpDown(e); // If escape deactivate the menu\n\n      if (keyCode === keyCodes.esc) return this.onEscDown(e); // If tab - select item or close menu\n\n      if (keyCode === keyCodes.tab) return this.onTabDown(e); // If space preventDefault\n\n      if (keyCode === keyCodes.space) return this.onSpaceDown(e);\n    },\n\n    onMenuActiveChange(val) {\n      // If menu is closing and mulitple\n      // or menuIndex is already set\n      // skip menu index recalculation\n      if (this.multiple && !val || this.getMenuIndex() > -1) return;\n      const menu = this.$refs.menu;\n      if (!menu || !this.isDirty) return; // When menu opens, set index of first active item\n\n      for (let i = 0; i < menu.tiles.length; i++) {\n        if (menu.tiles[i].getAttribute('aria-selected') === 'true') {\n          this.setMenuIndex(i);\n          break;\n        }\n      }\n    },\n\n    onMouseUp(e) {\n      if (this.hasMouseDown && e.which !== 3) {\n        const appendInner = this.$refs['append-inner']; // If append inner is present\n        // and the target is itself\n        // or inside, toggle menu\n\n        if (this.isMenuActive && appendInner && (appendInner === e.target || appendInner.contains(e.target))) {\n          this.$nextTick(() => this.isMenuActive = !this.isMenuActive); // If user is clicking in the container\n          // and field is enclosed, activate it\n        } else if (this.isEnclosed && !this.isDisabled) {\n          this.isMenuActive = true;\n        }\n      }\n\n      VTextField.options.methods.onMouseUp.call(this, e);\n    },\n\n    onScroll() {\n      if (!this.isMenuActive) {\n        requestAnimationFrame(() => this.content.scrollTop = 0);\n      } else {\n        if (this.lastItem >= this.computedItems.length) return;\n        const showMoreItems = this.content.scrollHeight - (this.content.scrollTop + this.content.clientHeight) < 200;\n\n        if (showMoreItems) {\n          this.lastItem += 20;\n        }\n      }\n    },\n\n    onSpaceDown(e) {\n      e.preventDefault();\n    },\n\n    onTabDown(e) {\n      const menu = this.$refs.menu;\n      if (!menu) return;\n      const activeTile = menu.activeTile; // An item that is selected by\n      // menu-index should toggled\n\n      if (!this.multiple && activeTile && this.isMenuActive) {\n        e.preventDefault();\n        e.stopPropagation();\n        activeTile.click();\n      } else {\n        // If we make it here,\n        // the user has no selected indexes\n        // and is probably tabbing out\n        this.blur(e);\n      }\n    },\n\n    onUpDown(e) {\n      const menu = this.$refs.menu;\n      if (!menu) return;\n      e.preventDefault(); // Multiple selects do not cycle their value\n      // when pressing up or down, instead activate\n      // the menu\n\n      if (this.multiple) return this.activateMenu();\n      const keyCode = e.keyCode; // Cycle through available values to achieve\n      // select native behavior\n\n      menu.getTiles();\n      keyCodes.up === keyCode ? menu.prevTile() : menu.nextTile();\n      menu.activeTile && menu.activeTile.click();\n    },\n\n    selectItem(item) {\n      if (!this.multiple) {\n        this.setValue(this.returnObject ? item : this.getValue(item));\n        this.isMenuActive = false;\n      } else {\n        const internalValue = (this.internalValue || []).slice();\n        const i = this.findExistingIndex(item);\n        i !== -1 ? internalValue.splice(i, 1) : internalValue.push(item);\n        this.setValue(internalValue.map(i => {\n          return this.returnObject ? i : this.getValue(i);\n        })); // When selecting multiple\n        // adjust menu after each\n        // selection\n\n        this.$nextTick(() => {\n          this.$refs.menu && this.$refs.menu.updateDimensions();\n        }); // We only need to reset list index for multiple\n        // to keep highlight when an item is toggled\n        // on and off\n\n        if (!this.multiple) return;\n        const listIndex = this.getMenuIndex();\n        this.setMenuIndex(-1); // There is no item to re-highlight\n        // when selections are hidden\n\n        if (this.hideSelected) return;\n        this.$nextTick(() => this.setMenuIndex(listIndex));\n      }\n    },\n\n    setMenuIndex(index) {\n      this.$refs.menu && (this.$refs.menu.listIndex = index);\n    },\n\n    setSelectedItems() {\n      const selectedItems = [];\n      const values = !this.multiple || !Array.isArray(this.internalValue) ? [this.internalValue] : this.internalValue;\n\n      for (const value of values) {\n        const index = this.allItems.findIndex(v => this.valueComparator(this.getValue(v), this.getValue(value)));\n\n        if (index > -1) {\n          selectedItems.push(this.allItems[index]);\n        }\n      }\n\n      this.selectedItems = selectedItems;\n    },\n\n    setValue(value) {\n      const oldValue = this.internalValue;\n      this.internalValue = value;\n      value !== oldValue && this.$emit('change', value);\n    }\n\n  }\n});\n//# sourceMappingURL=VSelect.js.map","// Directives\nimport ripple from '../../directives/ripple'; // Types\n\nimport Vue from 'vue';\nexport default Vue.extend({\n  name: 'rippleable',\n  directives: {\n    ripple\n  },\n  props: {\n    ripple: {\n      type: [Boolean, Object],\n      default: true\n    }\n  },\n  methods: {\n    genRipple(data = {}) {\n      if (!this.ripple) return null;\n      data.staticClass = 'v-input--selection-controls__ripple';\n      data.directives = data.directives || [];\n      data.directives.push({\n        name: 'ripple',\n        value: {\n          center: true\n        }\n      });\n      data.on = Object.assign({\n        click: this.onChange\n      }, this.$listeners);\n      return this.$createElement('div', data);\n    },\n\n    onChange() {}\n\n  }\n});\n//# sourceMappingURL=index.js.map","// Components\nimport VInput from '../../components/VInput'; // Mixins\n\nimport Rippleable from '../rippleable';\nimport Comparable from '../comparable'; // Utilities\n\nimport mixins from '../../util/mixins';\n/* @vue/component */\n\nexport default mixins(VInput, Rippleable, Comparable).extend({\n  name: 'selectable',\n  model: {\n    prop: 'inputValue',\n    event: 'change'\n  },\n  props: {\n    id: String,\n    inputValue: null,\n    falseValue: null,\n    trueValue: null,\n    multiple: {\n      type: Boolean,\n      default: null\n    },\n    label: String\n  },\n\n  data() {\n    return {\n      hasColor: this.inputValue,\n      lazyValue: this.inputValue\n    };\n  },\n\n  computed: {\n    computedColor() {\n      if (!this.isActive) return undefined;\n      if (this.color) return this.color;\n      if (this.isDark && !this.appIsDark) return 'white';\n      return 'accent';\n    },\n\n    isMultiple() {\n      return this.multiple === true || this.multiple === null && Array.isArray(this.internalValue);\n    },\n\n    isActive() {\n      const value = this.value;\n      const input = this.internalValue;\n\n      if (this.isMultiple) {\n        if (!Array.isArray(input)) return false;\n        return input.some(item => this.valueComparator(item, value));\n      }\n\n      if (this.trueValue === undefined || this.falseValue === undefined) {\n        return value ? this.valueComparator(value, input) : Boolean(input);\n      }\n\n      return this.valueComparator(input, this.trueValue);\n    },\n\n    isDirty() {\n      return this.isActive;\n    }\n\n  },\n  watch: {\n    inputValue(val) {\n      this.lazyValue = val;\n      this.hasColor = val;\n    }\n\n  },\n  methods: {\n    genLabel() {\n      const label = VInput.options.methods.genLabel.call(this);\n      if (!label) return label;\n      label.data.on = {\n        click: e => {\n          // Prevent label from\n          // causing the input\n          // to focus\n          e.preventDefault();\n          this.onChange();\n        }\n      };\n      return label;\n    },\n\n    genInput(type, attrs) {\n      return this.$createElement('input', {\n        attrs: Object.assign({\n          'aria-checked': this.isActive.toString(),\n          disabled: this.isDisabled,\n          id: this.computedId,\n          role: type,\n          type\n        }, attrs),\n        domProps: {\n          value: this.value,\n          checked: this.isActive\n        },\n        on: {\n          blur: this.onBlur,\n          change: this.onChange,\n          focus: this.onFocus,\n          keydown: this.onKeydown\n        },\n        ref: 'input'\n      });\n    },\n\n    onBlur() {\n      this.isFocused = false;\n    },\n\n    onChange() {\n      if (this.isDisabled) return;\n      const value = this.value;\n      let input = this.internalValue;\n\n      if (this.isMultiple) {\n        if (!Array.isArray(input)) {\n          input = [];\n        }\n\n        const length = input.length;\n        input = input.filter(item => !this.valueComparator(item, value));\n\n        if (input.length === length) {\n          input.push(value);\n        }\n      } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n        input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue;\n      } else if (value) {\n        input = this.valueComparator(input, value) ? null : value;\n      } else {\n        input = !input;\n      }\n\n      this.validate(true, input);\n      this.internalValue = input;\n      this.hasColor = input;\n    },\n\n    onFocus() {\n      this.isFocused = true;\n    },\n\n    /** @abstract */\n    onKeydown(e) {}\n\n  }\n});\n//# sourceMappingURL=index.js.map","// Styles\nimport \"../../../src/styles/components/_selection-controls.sass\";\nimport \"../../../src/components/VSwitch/VSwitch.sass\"; // Mixins\n\nimport Selectable from '../../mixins/selectable';\nimport VInput from '../VInput'; // Directives\n\nimport Touch from '../../directives/touch'; // Components\n\nimport { VFabTransition } from '../transitions';\nimport VProgressCircular from '../VProgressCircular/VProgressCircular'; // Helpers\n\nimport { keyCodes } from '../../util/helpers';\n/* @vue/component */\n\nexport default Selectable.extend({\n  name: 'v-switch',\n  directives: {\n    Touch\n  },\n  props: {\n    inset: Boolean,\n    loading: {\n      type: [Boolean, String],\n      default: false\n    },\n    flat: {\n      type: Boolean,\n      default: false\n    }\n  },\n  computed: {\n    classes() {\n      return { ...VInput.options.computed.classes.call(this),\n        'v-input--selection-controls v-input--switch': true,\n        'v-input--switch--flat': this.flat,\n        'v-input--switch--inset': this.inset\n      };\n    },\n\n    attrs() {\n      return {\n        'aria-checked': String(this.isActive),\n        'aria-disabled': String(this.disabled),\n        role: 'switch'\n      };\n    },\n\n    // Do not return undefined if disabled,\n    // according to spec, should still show\n    // a color when disabled and active\n    validationState() {\n      if (this.hasError && this.shouldValidate) return 'error';\n      if (this.hasSuccess) return 'success';\n      if (this.hasColor !== null) return this.computedColor;\n      return undefined;\n    },\n\n    switchData() {\n      return this.setTextColor(this.loading ? undefined : this.validationState, {\n        class: this.themeClasses\n      });\n    }\n\n  },\n  methods: {\n    genDefaultSlot() {\n      return [this.genSwitch(), this.genLabel()];\n    },\n\n    genSwitch() {\n      return this.$createElement('div', {\n        staticClass: 'v-input--selection-controls__input'\n      }, [this.genInput('checkbox', { ...this.attrs,\n        ...this.attrs$\n      }), this.genRipple(this.setTextColor(this.validationState, {\n        directives: [{\n          name: 'touch',\n          value: {\n            left: this.onSwipeLeft,\n            right: this.onSwipeRight\n          }\n        }]\n      })), this.$createElement('div', {\n        staticClass: 'v-input--switch__track',\n        ...this.switchData\n      }), this.$createElement('div', {\n        staticClass: 'v-input--switch__thumb',\n        ...this.switchData\n      }, [this.genProgress()])]);\n    },\n\n    genProgress() {\n      return this.$createElement(VFabTransition, {}, [this.loading === false ? null : this.$slots.progress || this.$createElement(VProgressCircular, {\n        props: {\n          color: this.loading === true || this.loading === '' ? this.color || 'primary' : this.loading,\n          size: 16,\n          width: 2,\n          indeterminate: true\n        }\n      })]);\n    },\n\n    onSwipeLeft() {\n      if (this.isActive) this.onChange();\n    },\n\n    onSwipeRight() {\n      if (!this.isActive) this.onChange();\n    },\n\n    onKeydown(e) {\n      if (e.keyCode === keyCodes.left && this.isActive || e.keyCode === keyCodes.right && !this.isActive) this.onChange();\n    }\n\n  }\n});\n//# sourceMappingURL=VSwitch.js.map","import { render, staticRenderFns } from \"./Config.vue?vue&type=template&id=38d47d66&\"\nimport script from \"./Config.vue?vue&type=script&lang=js&\"\nexport * from \"./Config.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListGroup } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VAlert,VCard,VDivider,VList,VListGroup,VListItem,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VSelect,VSlider,VSwitch,VTextField})\n","import VSubheader from './VSubheader';\nexport { VSubheader };\nexport default VSubheader;\n//# sourceMappingURL=index.js.map","import VMenu from './VMenu';\nexport { VMenu };\nexport default VMenu;\n//# sourceMappingURL=index.js.map","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.github.io/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (get) {\n  return function Map() { return get(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong, true);\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, CONSTRUCTOR_NAME);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(C.prototype, IS_MAP ? {\n      // 23.1.3.6 Map.prototype.get(key)\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // 23.1.3.9 Map.prototype.set(key, value)\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // 23.2.3.1 Set.prototype.add(value)\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return C;\n  },\n  setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common, IS_MAP, IS_WEAK) {\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var nativeMethod = NativePrototype[KEY];\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        nativeMethod.call(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        nativeMethod.call(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  // eslint-disable-next-line max-len\n  if (isForced(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n    new NativeConstructor().entries().next();\n  })))) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.REQUIRED = true;\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n","import VBtn from './VBtn';\nexport { VBtn };\nexport default VBtn;\n//# sourceMappingURL=index.js.map","import VDivider from './VDivider';\nexport { VDivider };\nexport default VDivider;\n//# sourceMappingURL=index.js.map"],"sourceRoot":""}
\ No newline at end of file
diff --git a/music_assistant/web/js/itemdetails.5c314dae.js b/music_assistant/web/js/itemdetails.5c314dae.js
new file mode 100644 (file)
index 0000000..5484e30
--- /dev/null
@@ -0,0 +1,2 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["itemdetails"],{"2c4d":function(t,e,i){},"32a2":function(t,e,i){"use strict";i.r(e);var r=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("section",[i("InfoHeader",{attrs:{itemDetails:t.itemDetails}}),i("v-tabs",{attrs:{grow:"","show-arrows":""},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[t._l(t.tabs,(function(e){return i("v-tab",{key:e.label},[t._v(" "+t._s(t.$t(e.label)+" ("+e.items.length+")"))])})),t._l(t.tabs,(function(e){return i("v-tab-item",{key:e.label},[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:t._u([{key:"default",fn:function(r){var a=r.item;return[i("ListviewItem",{attrs:{item:a,hideavatar:t.$store.isMobile||"album_tracks"===e.label,hidetracknum:"album_tracks"!==e.label,hideproviders:t.$store.isMobile,hidelibrary:t.$store.isMobile,hidemenu:3==a.media_type&&t.$store.isMobile},on:{click:t.itemClicked,menuClick:t.menuClick}})]}}],null,!0)})],1)],1)],1)}))],2)],1)},a=[],s=(i("a4d3"),i("e01a"),i("d28b"),i("b0c0"),i("d3b7"),i("3ca3"),i("ddb0"),i("284c")),n=(i("96cf"),i("89ba")),o=i("d3cc"),l=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("v-flex",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:t.visibilityChanged,expression:"visibilityChanged"}]},[r("v-card",{staticClass:"white--text",staticStyle:{"margin-top":"-60px"},attrs:{tile:"",color:"cyan darken-2",img:i("abd2")}},[r("v-img",{staticClass:"white--text",attrs:{width:"100%",height:"300",position:"center top",src:t.$server.getImageUrl(t.itemDetails,"fanart"),gradient:"to bottom, rgba(66,66,66,.95), rgba(0,0,0,.75)"}},[r("div",{staticClass:"text-xs-center",staticStyle:{height:"40px"},attrs:{id:"whitespace_top"}}),t.itemDetails?r("v-layout",{staticStyle:{"margin-left":"5pxmargin-right:5px"}},[t.$store.isMobile?t._e():r("v-flex",{attrs:{xs5:"","pa-5":""}},[r("v-img",{staticStyle:{border:"4px solid rgba(0,0,0,.33)","border-radius":"6px"},attrs:{src:t.$server.getImageUrl(t.itemDetails),"lazy-src":i("4bfb"),width:"220px",height:"220px"}}),r("div",{staticStyle:{position:"fixed","margin-top":"-45px","margin-left":"10px"}},[r("ProviderIcons",{attrs:{providerIds:t.itemDetails.provider_ids,height:30}})],1)],1),r("v-flex",[r("v-card-title",{staticClass:"headline",staticStyle:{"text-shadow":"1px 1px #000000"}},[t._v(" "+t._s(t.itemDetails.name)+" ")]),r("v-card-subtitle",[t.itemDetails.version?r("div",{staticClass:"caption",staticStyle:{color:"white"}},[t._v(t._s(t.itemDetails.version)+" ")]):t._e(),t.itemDetails.artists?r("div",{staticClass:"title",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),t._l(t.itemDetails.artists,(function(e,i){return r("span",{key:e.db_id},[r("a",{staticStyle:{color:"primary"},on:{click:function(i){return t.artistClick(e)}}},[t._v(t._s(e.name))]),i+1<t.itemDetails.artists.length?r("span",{key:i,staticStyle:{color:"#cccccc"}},[t._v(t._s(" / "))]):t._e()])}))],2):t._e(),t.itemDetails.artist?r("div",{staticClass:"title"},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),r("a",{staticStyle:{color:"primary"},on:{click:function(e){return t.artistClick(t.itemDetails.artist)}}},[t._v(t._s(t.itemDetails.artist.name))])],1):t._e(),t.itemDetails.owner?r("div",{staticClass:"title",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),r("a",{staticStyle:{color:"primary"}},[t._v(t._s(t.itemDetails.owner))])],1):t._e(),t.itemDetails.album?r("div",{staticStyle:{color:"#ffffff","text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("album")]),r("a",{staticStyle:{color:"#ffffff"},on:{click:function(e){return t.albumClick(t.itemDetails.album)}}},[t._v(t._s(t.itemDetails.album.name))])],1):t._e()]),r("div",{staticStyle:{"margin-left":"14px"}},[r("v-btn",{attrs:{color:"primary",tile:""},on:{click:function(e){return t.$server.$emit("showPlayMenu",t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("play_circle_filled")]),t._v(" "+t._s(t.$t("play"))+" ")],1),!t.$store.isMobile&&t.itemDetails.in_library&&0==t.itemDetails.in_library.length?r("v-btn",{staticStyle:{"margin-left":"10px"},attrs:{color:"primary",tile:""},on:{click:function(e){return t.toggleLibrary(t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("favorite_border")]),t._v(" "+t._s(t.$t("add_library"))+" ")],1):t._e(),!t.$store.isMobile&&t.itemDetails.in_library&&t.itemDetails.in_library.length>0?r("v-btn",{staticStyle:{"margin-left":"10px"},attrs:{color:"primary",tile:""},on:{click:function(e){return t.toggleLibrary(t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("favorite")]),t._v(" "+t._s(t.$t("remove_library"))+" ")],1):t._e()],1),r("v-card-subtitle",{staticClass:"body-2"},[r("div",{staticClass:"justify-left",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("ReadMore",{attrs:{text:t.getDescription(),"max-chars":t.$store.isMobile?100:300}})],1),t.$store.isMobile?r("ProviderIcons",{attrs:{providerIds:t.itemDetails.provider_ids,height:25,dark:!0}}):t._e()],1)],1)],1):t._e()],1)],1)],1)},c=[],u=(i("4160"),i("caad"),i("fb6a"),i("4e827"),i("159b"),i("2b0e")),d=i("e00a"),m=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("a",{staticStyle:{color:"white"},domProps:{innerHTML:t._s(t.formattedString)},on:{click:function(e){return t.triggerReadMore(e,!0)}}}),i("v-dialog",{attrs:{width:"80%"},model:{value:t.isReadMore,callback:function(e){t.isReadMore=e},expression:"isReadMore"}},[i("v-card",[i("v-card-text",{staticClass:"subheading",domProps:{innerHTML:t._s("<br>"+t.text)}})],1)],1)],1)},v=[],p=(i("a9e3"),i("9911"),u["a"].extend({props:{lessStr:{type:String,default:""},text:{type:String,required:!0},link:{type:String,default:"#"},maxChars:{type:Number,default:100}},data:function(){return{isReadMore:!1}},computed:{formattedString:function(){var t=this.text;return this.text.length>this.maxChars&&(t=t.substring(0,this.maxChars)+"..."),t}},mounted:function(){},methods:{triggerReadMore:function(t,e){"#"===this.link&&t.preventDefault(),null===this.lessStr&&""===this.lessStr||(this.isReadMore=e)}}})),f=p,h=i("2877"),b=i("6544"),y=i.n(b),g=i("b0af"),_=i("99d9"),x=i("169a"),k=Object(h["a"])(f,m,v,!1,null,null,null),w=k.exports;y()(k,{VCard:g["a"],VCardText:_["b"],VDialog:x["a"]});var D=i("85fe");u["a"].use(D["a"]);var S=u["a"].extend({components:{ProviderIcons:d["a"],ReadMore:w},props:["itemDetails"],data:function(){return{}},mounted:function(){},created:function(){this.$store.topBarColor="transparent"},beforeDestroy:function(){this.$store.topBarColor="#424242"},methods:{visibilityChanged:function(t,e){this.$store.topBarColor=t?"transparent":"#424242"},artistClick:function(t){var e="/artists/"+t.item_id;this.$router.push({path:e,query:{provider:t.provider}})},albumClick:function(t){var e="/albums/"+t.item_id;this.$router.push({path:e,query:{provider:t.provider}})},toggleLibrary:function(t){this.$server.toggleLibrary(t)},getDescription:function(){var t="";return this.itemDetails?this.itemDetails.metadata&&this.itemDetails.metadata.description?this.itemDetails.metadata.description:this.itemDetails.metadata&&this.itemDetails.metadata.biography?this.itemDetails.metadata.biography:this.itemDetails.metadata&&this.itemDetails.metadata.copyright?this.itemDetails.metadata.copyright:(this.itemDetails.artists&&this.itemDetails.artists.forEach((function(e){e.metadata&&e.metadata.biography&&(t=e.metadata.biography)})),t):""},getUniqueProviders:function(){var t=[],e=[];if(!this.providerIds)return[];var i=this.providerIds.slice();i.sort((function(t,e){return t.quality<e.quality?1:e.quality<t.quality?-1:0}));var r=!0,a=!1,s=void 0;try{for(var n,o=i[Symbol.iterator]();!(r=(n=o.next()).done);r=!0){var l=n.value;t.includes(l.provider)||(e.push(l),t.push(l.provider))}}catch(c){a=!0,s=c}finally{try{r||null==o.return||o.return()}finally{if(a)throw s}}return e},getFileFormatLogo:function(t){return 0===t.quality?"mp3.png":1===t.quality?"vorbis.png":2===t.quality?"aac.png":t.quality>2?"flac.png":void 0},getFileFormatDesc:function(t){var e="";return t.details&&(e+=" "+t.details),e}}}),C=S,$=i("8336"),I=i("0e8f"),M=i("132d"),O=i("adda"),R=i("a722"),T=Object(h["a"])(C,l,c,!1,null,null,null),V=T.exports;y()(T,{VBtn:$["a"],VCard:g["a"],VCardSubtitle:_["a"],VCardTitle:_["c"],VFlex:I["a"],VIcon:M["a"],VImg:O["a"],VLayout:R["a"]});var j={components:{ListviewItem:o["a"],InfoHeader:V},props:{media_id:String,provider:String,media_type:String},data:function(){return{itemDetails:{},items:[],activeTab:0,tabs:[]}},created:function(){var t=Object(n["a"])(regeneratorRuntime.mark((function t(){var e,i,r,a,s,n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.getItemDetails();case 2:for("artists"===this.media_type?this.tabs=[{label:"artist_toptracks",endpoint:"artists/"+this.media_id+"/toptracks",items:[]},{label:"artist_albums",endpoint:"artists/"+this.media_id+"/albums",items:[]}]:"albums"===this.media_type?this.tabs=[{label:"album_tracks",endpoint:"albums/"+this.media_id+"/tracks",items:[]},{label:"album_versions",endpoint:"albums/"+this.media_id+"/versions",items:[]}]:"tracks"===this.media_type?this.tabs=[{label:"track_versions",endpoint:"tracks/"+this.media_id+"/versions",items:[]}]:"playlists"===this.media_type&&(this.tabs=[{label:"playlist_tracks",endpoint:"playlists/"+this.media_id+"/tracks",paginated:!0,items:[]}]),e=!0,i=!1,r=void 0,t.prev=6,a=this.tabs[Symbol.iterator]();!(e=(s=a.next()).done);e=!0)n=s.value,this.getTabItems(n);t.next=14;break;case 10:t.prev=10,t.t0=t["catch"](6),i=!0,r=t.t0;case 14:t.prev=14,t.prev=15,e||null==a.return||a.return();case 17:if(t.prev=17,!i){t.next=20;break}throw r;case 20:return t.finish(17);case 21:return t.finish(14);case 22:case"end":return t.stop()}}),t,this,[[6,10,14,22],[15,,17,21]])})));function e(){return t.apply(this,arguments)}return e}(),methods:{itemClicked:function(t){var e="";if(1===t.media_type)e="/artists/"+t.item_id;else if(2===t.media_type)e="/albums/"+t.item_id;else{if(4!==t.media_type)return void this.$server.$emit("showContextMenu",t);e="/playlists/"+t.item_id}this.$router.push({path:e,query:{provider:t.provider}})},menuClick:function(t){this.$server.$emit("showContextMenu",t)},getItemDetails:function(){var t=Object(n["a"])(regeneratorRuntime.mark((function t(){var e,i;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return this.$store.loading=!0,e=this.media_type+"/"+this.media_id,t.next=4,this.$server.getData(e,{provider:this.provider});case 4:i=t.sent,this.itemDetails=i,this.$store.windowtitle=i.name,this.$store.loading=!1;case 8:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),getTabItems:function(){var t=Object(n["a"])(regeneratorRuntime.mark((function t(e){var i,r,a,n,o;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:i=0,r=50,a="paginated"in e&&e.paginated;case 3:return t.next=6,this.$server.getData(e.endpoint,{offset:i,limit:r,provider:this.provider});case 6:if(o=t.sent,o&&0!==o.length){t.next=9;break}return t.abrupt("break",15);case 9:if((n=e.items).push.apply(n,Object(s["a"])(o)),i+=r,!(o.length<r)&&a){t.next=13;break}return t.abrupt("break",15);case 13:t.next=3;break;case 15:case"end":return t.stop()}}),t,this)})));function e(e){return t.apply(this,arguments)}return e}()}},q=j,L=(i("b499"),i("8860")),P=i("71a3"),A=i("c671"),E=i("fe57"),z=Object(h["a"])(q,r,a,!1,null,"2c27af9b",null);e["default"]=z.exports;y()(z,{VCard:g["a"],VList:L["a"],VTab:P["a"],VTabItem:A["a"],VTabs:E["a"]})},"85fe":function(t,e,i){"use strict";(function(t){function i(t){return i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,i){return e&&a(t.prototype,e),i&&a(t,i),t}function n(t){return o(t)||l(t)||c()}function o(t){if(Array.isArray(t)){for(var e=0,i=new Array(t.length);e<t.length;e++)i[e]=t[e];return i}}function l(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}function c(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function u(t){var e;return e="function"===typeof t?{callback:t}:t,e}function d(t,e){var i,r,a,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=function(o){for(var l=arguments.length,c=new Array(l>1?l-1:0),u=1;u<l;u++)c[u-1]=arguments[u];if(a=c,!i||o!==r){var d=s.leading;"function"===typeof d&&(d=d(o,r)),i&&o===r||!d||t.apply(void 0,[o].concat(n(a))),r=o,clearTimeout(i),i=setTimeout((function(){t.apply(void 0,[o].concat(n(a))),i=0}),e)}};return o._clear=function(){clearTimeout(i),i=null},o}function m(t,e){if(t===e)return!0;if("object"===i(t)){for(var r in t)if(!m(t[r],e[r]))return!1;return!0}return!1}var v=function(){function t(e,i,a){r(this,t),this.el=e,this.observer=null,this.frozen=!1,this.createObserver(i,a)}return s(t,[{key:"createObserver",value:function(t,e){var i=this;if(this.observer&&this.destroyObserver(),!this.frozen){if(this.options=u(t),this.callback=function(t,e){i.options.callback(t,e),t&&i.options.once&&(i.frozen=!0,i.destroyObserver())},this.callback&&this.options.throttle){var r=this.options.throttleOptions||{},a=r.leading;this.callback=d(this.callback,this.options.throttle,{leading:function(t){return"both"===a||"visible"===a&&t||"hidden"===a&&!t}})}this.oldResult=void 0,this.observer=new IntersectionObserver((function(t){var e=t[0];if(t.length>1){var r=t.find((function(t){return t.isIntersecting}));r&&(e=r)}if(i.callback){var a=e.isIntersecting&&e.intersectionRatio>=i.threshold;if(a===i.oldResult)return;i.oldResult=a,i.callback(a,e)}}),this.options.intersection),e.context.$nextTick((function(){i.observer&&i.observer.observe(i.el)}))}}},{key:"destroyObserver",value:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.callback&&this.callback._clear&&(this.callback._clear(),this.callback=null)}},{key:"threshold",get:function(){return this.options.intersection&&this.options.intersection.threshold||0}}]),t}();function p(t,e,i){var r=e.value;if(r)if("undefined"===typeof IntersectionObserver);else{var a=new v(t,r,i);t._vue_visibilityState=a}}function f(t,e,i){var r=e.value,a=e.oldValue;if(!m(r,a)){var s=t._vue_visibilityState;r?s?s.createObserver(r,i):p(t,{value:r},i):h(t)}}function h(t){var e=t._vue_visibilityState;e&&(e.destroyObserver(),delete t._vue_visibilityState)}var b={bind:p,update:f,unbind:h};function y(t){t.directive("observe-visibility",b)}var g={version:"0.4.6",install:y},_=null;"undefined"!==typeof window?_=window.Vue:"undefined"!==typeof t&&(_=t.Vue),_&&_.use(g),e["a"]=g}).call(this,i("c8ba"))},abd2:function(t,e,i){t.exports=i.p+"img/info_gradient.4db55f47.jpg"},b499:function(t,e,i){"use strict";var r=i("2c4d"),a=i.n(r);a.a}}]);
+//# sourceMappingURL=itemdetails.5c314dae.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/itemdetails.5c314dae.js.map b/music_assistant/web/js/itemdetails.5c314dae.js.map
new file mode 100644 (file)
index 0000000..cf3ad34
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///./src/views/ItemDetails.vue?6698","webpack:///./src/components/InfoHeader.vue?61f9","webpack:///./src/components/ReadMore.vue?b797","webpack:///src/components/ReadMore.vue","webpack:///./src/components/ReadMore.vue?6444","webpack:///./src/components/ReadMore.vue","webpack:///src/components/InfoHeader.vue","webpack:///./src/components/InfoHeader.vue?296b","webpack:///./src/components/InfoHeader.vue","webpack:///src/views/ItemDetails.vue","webpack:///./src/views/ItemDetails.vue?f452","webpack:///./src/views/ItemDetails.vue?6249","webpack:///./node_modules/vue-observe-visibility/dist/vue-observe-visibility.esm.js","webpack:///./src/assets/info_gradient.jpg","webpack:///./src/views/ItemDetails.vue?99d6"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","itemDetails","model","value","callback","$$v","activeTab","expression","_l","tab","key","label","_v","_s","$t","items","length","staticClass","scopedSlots","_u","fn","ref","item","$store","isMobile","media_type","on","itemClicked","menuClick","staticRenderFns","directives","name","rawName","staticStyle","$server","getImageUrl","_e","provider_ids","version","artist","artistindex","db_id","$event","artistClick","artists","owner","albumClick","album","$emit","in_library","toggleLibrary","getDescription","domProps","formattedString","triggerReadMore","isReadMore","text","props","lessStr","type","String","default","required","link","maxChars","Number","data","computed","valContainer","substring","mounted","methods","e","preventDefault","b","component","VCard","VCardText","VDialog","components","ProviderIcons","ReadMore","created","topBarColor","beforeDestroy","visibilityChanged","isVisible","url","item_id","$router","push","desc","metadata","description","biography","copyright","forEach","getUniqueProviders","keys","qualities","providerIds","sortedItemIds","sort","getFileFormatLogo","provider","quality","getFileFormatDesc","details","VBtn","VCardSubtitle","VCardTitle","VFlex","VIcon","VImg","VLayout","ListviewItem","InfoHeader","media_id","tabs","VList","VTab","VTabItem","VTabs","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","i","descriptor","enumerable","configurable","writable","Object","defineProperty","_createClass","protoProps","staticProps","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","Array","isArray","arr2","iter","toString","call","from","processOptions","options","throttle","delay","timeout","lastState","currentArgs","arguments","undefined","throttled","state","_len","args","_key","leading","apply","concat","clearTimeout","setTimeout","_clear","deepEqual","val1","val2","VisibilityState","el","vnode","observer","frozen","createObserver","_this","destroyObserver","result","entry","once","_ref","throttleOptions","_leading","oldResult","IntersectionObserver","entries","intersectingEntry","find","isIntersecting","intersectionRatio","threshold","intersection","context","$nextTick","observe","disconnect","get","bind","_ref2","_vue_visibilityState","update","_ref3","oldValue","unbind","ObserveVisibility","install","Vue","directive","plugin","GlobalVue","window","global","use","module","exports"],"mappings":"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","file":"js/itemdetails.5c314dae.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('InfoHeader',{attrs:{\"itemDetails\":_vm.itemDetails}}),_c('v-tabs',{attrs:{\"grow\":\"\",\"show-arrows\":\"\"},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_vm._l((_vm.tabs),function(tab){return _c('v-tab',{key:tab.label},[_vm._v(\" \"+_vm._s(_vm.$t(tab.label) + ' (' + tab.items.length + ')'))])}),_vm._l((_vm.tabs),function(tab){return _c('v-tab-item',{key:tab.label},[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":tab.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":_vm.$store.isMobile || tab.label === 'album_tracks',\"hidetracknum\":tab.label !== 'album_tracks',\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})]}}],null,true)})],1)],1)],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-flex',{directives:[{name:\"observe-visibility\",rawName:\"v-observe-visibility\",value:(_vm.visibilityChanged),expression:\"visibilityChanged\"}]},[_c('v-card',{staticClass:\"white--text\",staticStyle:{\"margin-top\":\"-60px\"},attrs:{\"tile\":\"\",\"color\":\"cyan darken-2\",\"img\":require('../assets/info_gradient.jpg')}},[_c('v-img',{staticClass:\"white--text\",attrs:{\"width\":\"100%\",\"height\":\"300\",\"position\":\"center top\",\"src\":_vm.$server.getImageUrl(_vm.itemDetails, 'fanart'),\"gradient\":\"to bottom, rgba(66,66,66,.95), rgba(0,0,0,.75)\"}},[_c('div',{staticClass:\"text-xs-center\",staticStyle:{\"height\":\"40px\"},attrs:{\"id\":\"whitespace_top\"}}),(_vm.itemDetails)?_c('v-layout',{staticStyle:{\"margin-left\":\"5pxmargin-right:5px\"}},[(!_vm.$store.isMobile)?_c('v-flex',{attrs:{\"xs5\":\"\",\"pa-5\":\"\"}},[_c('v-img',{staticStyle:{\"border\":\"4px solid rgba(0,0,0,.33)\",\"border-radius\":\"6px\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.itemDetails),\"lazy-src\":require('../assets/default_artist.png'),\"width\":\"220px\",\"height\":\"220px\"}}),_c('div',{staticStyle:{\"position\":\"fixed\",\"margin-top\":\"-45px\",\"margin-left\":\"10px\"}},[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.itemDetails.provider_ids,\"height\":30}})],1)],1):_vm._e(),_c('v-flex',[_c('v-card-title',{staticClass:\"headline\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_vm._v(\" \"+_vm._s(_vm.itemDetails.name)+\" \")]),_c('v-card-subtitle',[(_vm.itemDetails.version)?_c('div',{staticClass:\"caption\",staticStyle:{\"color\":\"white\"}},[_vm._v(_vm._s(_vm.itemDetails.version)+\" \")]):_vm._e(),(_vm.itemDetails.artists)?_c('div',{staticClass:\"title\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_vm._l((_vm.itemDetails.artists),function(artist,artistindex){return _c('span',{key:artist.db_id},[_c('a',{staticStyle:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.artistClick(artist)}}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.itemDetails.artists.length)?_c('span',{key:artistindex,staticStyle:{\"color\":\"#cccccc\"}},[_vm._v(_vm._s(' / '))]):_vm._e()])})],2):_vm._e(),(_vm.itemDetails.artist)?_c('div',{staticClass:\"title\"},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_c('a',{staticStyle:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.artistClick(_vm.itemDetails.artist)}}},[_vm._v(_vm._s(_vm.itemDetails.artist.name))])],1):_vm._e(),(_vm.itemDetails.owner)?_c('div',{staticClass:\"title\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_c('a',{staticStyle:{\"color\":\"primary\"}},[_vm._v(_vm._s(_vm.itemDetails.owner))])],1):_vm._e(),(_vm.itemDetails.album)?_c('div',{staticStyle:{\"color\":\"#ffffff\",\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"album\")]),_c('a',{staticStyle:{\"color\":\"#ffffff\"},on:{\"click\":function($event){return _vm.albumClick(_vm.itemDetails.album)}}},[_vm._v(_vm._s(_vm.itemDetails.album.name))])],1):_vm._e()]),_c('div',{staticStyle:{\"margin-left\":\"14px\"}},[_c('v-btn',{attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayMenu', _vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"play_circle_filled\")]),_vm._v(\" \"+_vm._s(_vm.$t('play'))+\" \")],1),(!_vm.$store.isMobile && !!_vm.itemDetails.in_library && _vm.itemDetails.in_library.length == 0)?_c('v-btn',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.toggleLibrary(_vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"favorite_border\")]),_vm._v(\" \"+_vm._s(_vm.$t('add_library'))+\" \")],1):_vm._e(),(!_vm.$store.isMobile && !!_vm.itemDetails.in_library && _vm.itemDetails.in_library.length > 0)?_c('v-btn',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.toggleLibrary(_vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"favorite\")]),_vm._v(\" \"+_vm._s(_vm.$t('remove_library'))+\" \")],1):_vm._e()],1),_c('v-card-subtitle',{staticClass:\"body-2\"},[_c('div',{staticClass:\"justify-left\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('ReadMore',{attrs:{\"text\":_vm.getDescription(),\"max-chars\":_vm.$store.isMobile ? 100 : 300}})],1),(_vm.$store.isMobile)?_c('ProviderIcons',{attrs:{\"providerIds\":_vm.itemDetails.provider_ids,\"height\":25,\"dark\":true}}):_vm._e()],1)],1)],1):_vm._e()],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('a',{staticStyle:{\"color\":\"white\"},domProps:{\"innerHTML\":_vm._s(_vm.formattedString)},on:{\"click\":function($event){return _vm.triggerReadMore($event, true)}}}),_c('v-dialog',{attrs:{\"width\":\"80%\"},model:{value:(_vm.isReadMore),callback:function ($$v) {_vm.isReadMore=$$v},expression:\"isReadMore\"}},[_c('v-card',[_c('v-card-text',{staticClass:\"subheading\",domProps:{\"innerHTML\":_vm._s('<br>' + _vm.text)}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div>\r\n    <a style=\"color: white\" v-html=\"formattedString\" @click=\"triggerReadMore($event, true)\"/>\r\n    <v-dialog v-model=\"isReadMore\" width=\"80%\">\r\n      <v-card>\r\n        <v-card-text class=\"subheading\" v-html=\"'<br>' + text\">\r\n        </v-card-text>\r\n      </v-card>\r\n    </v-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n  props: {\r\n    lessStr: {\r\n      type: String,\r\n      default: ''\r\n    },\r\n    text: {\r\n      type: String,\r\n      required: true\r\n    },\r\n    link: {\r\n      type: String,\r\n      default: '#'\r\n    },\r\n    maxChars: {\r\n      type: Number,\r\n      default: 100\r\n    }\r\n  },\r\n  data () {\r\n    return {\r\n      isReadMore: false\r\n    }\r\n  },\r\n  computed: {\r\n    formattedString () {\r\n      var valContainer = this.text\r\n      if (this.text.length > this.maxChars) {\r\n        valContainer = valContainer.substring(0, this.maxChars) + '...'\r\n      }\r\n      return (valContainer)\r\n    }\r\n  },\r\n  mounted () { },\r\n  methods: {\r\n    triggerReadMore (e, b) {\r\n      if (this.link === '#') {\r\n        e.preventDefault()\r\n      }\r\n      if (this.lessStr !== null || this.lessStr !== '') {\r\n        this.isReadMore = b\r\n      }\r\n    }\r\n  }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadMore.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadMore.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReadMore.vue?vue&type=template&id=702b76f2&\"\nimport script from \"./ReadMore.vue?vue&type=script&lang=js&\"\nexport * from \"./ReadMore.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\ninstallComponents(component, {VCard,VCardText,VDialog})\n","<template>\r\n  <v-flex v-observe-visibility=\"visibilityChanged\">\r\n    <v-card\r\n      tile\r\n      color=\"cyan darken-2\"\r\n      class=\"white--text\"\r\n      :img=\"require('../assets/info_gradient.jpg')\"\r\n      style=\"margin-top:-60px;\"\r\n    >\r\n      <v-img\r\n        class=\"white--text\"\r\n        width=\"100%\"\r\n        height=\"300\"\r\n        position=\"center top\"\r\n        :src=\"$server.getImageUrl(itemDetails, 'fanart')\"\r\n        gradient=\"to bottom, rgba(66,66,66,.95), rgba(0,0,0,.75)\"\r\n      >\r\n        <div class=\"text-xs-center\" style=\"height:40px;\" id=\"whitespace_top\" />\r\n\r\n        <v-layout style=\"margin-left:5pxmargin-right:5px;\" v-if=\"itemDetails\">\r\n          <!-- left side: cover image -->\r\n          <v-flex xs5 pa-5 v-if=\"!$store.isMobile\">\r\n            <v-img\r\n              :src=\"$server.getImageUrl(itemDetails)\"\r\n              :lazy-src=\"require('../assets/default_artist.png')\"\r\n              width=\"220px\"\r\n              height=\"220px\"\r\n              style=\"border: 4px solid rgba(0,0,0,.33);border-radius: 6px;\"\r\n            ></v-img>\r\n\r\n            <!-- tech specs and provider icons -->\r\n            <div style=\"position:fixed;margin-top:-45px;margin-left:10px;\">\r\n              <ProviderIcons\r\n                v-bind:providerIds=\"itemDetails.provider_ids\"\r\n                :height=\"30\"\r\n              />\r\n            </div>\r\n          </v-flex>\r\n\r\n          <v-flex>\r\n            <!-- Main title -->\r\n            <v-card-title style=\"text-shadow: 1px 1px #000000;\" class=\"headline\">\r\n              {{ itemDetails.name }}\r\n            </v-card-title>\r\n\r\n            <!-- other details -->\r\n            <v-card-subtitle>\r\n\r\n              <!-- version -->\r\n              <div v-if=\"itemDetails.version\" class=\"caption\"\r\n              style=\"color: white;\"\r\n            >{{ itemDetails.version }}\r\n              </div>\r\n\r\n            <!-- item artists -->\r\n            <div class=\"title\" style=\"text-shadow: 1px 1px #000000;\" v-if=\"itemDetails.artists\">\r\n                <v-icon color=\"#cccccc\" style=\"margin-left: -3px;margin-right:3px\" small>person</v-icon>\r\n                <span\r\n                  v-for=\"(artist, artistindex) in itemDetails.artists\"\r\n                  :key=\"artist.db_id\"\r\n                >\r\n                  <a style=\"color: primary\" v-on:click=\"artistClick(artist)\">{{ artist.name }}</a>\r\n                  <span\r\n                    style=\"color: #cccccc\"\r\n                    v-if=\"artistindex + 1 < itemDetails.artists.length\"\r\n                    :key=\"artistindex\"\r\n                  >{{ ' / ' }}</span>\r\n                </span>\r\n            </div>\r\n\r\n            <!-- album artist -->\r\n            <div class=\"title\" v-if=\"itemDetails.artist\">\r\n                <v-icon color=\"#cccccc\" style=\"margin-left: -3px;margin-right:3px\" small>person</v-icon>\r\n                <a\r\n                  style=\"color: primary\"\r\n                  v-on:click=\"artistClick(itemDetails.artist)\"\r\n                >{{ itemDetails.artist.name }}</a>\r\n            </div>\r\n\r\n            <!-- playlist owner -->\r\n            <div class=\"title\" style=\"text-shadow: 1px 1px #000000;\" v-if=\"itemDetails.owner\">\r\n                <v-icon color=\"#cccccc\" style=\"margin-left: -3px;margin-right:3px\" small>person</v-icon>\r\n                <a style=\"color:primary\">{{ itemDetails.owner }}</a>\r\n            </div>\r\n\r\n            <div\r\n              v-if=\"itemDetails.album\"\r\n              style=\"color:#ffffff;text-shadow: 1px 1px #000000;\"\r\n            >\r\n              <v-icon color=\"#cccccc\" style=\"margin-left: -3px;margin-right:3px\" small>album</v-icon>\r\n              <a\r\n                style=\"color:#ffffff\"\r\n                v-on:click=\"albumClick(itemDetails.album)\"\r\n              >{{ itemDetails.album.name }}</a>\r\n            </div>\r\n            </v-card-subtitle>\r\n\r\n            <!-- play/info buttons -->\r\n            <div style=\"margin-left:14px;\">\r\n              <v-btn color=\"primary\" tile\r\n                @click=\"$server.$emit('showPlayMenu', itemDetails)\"\r\n              >\r\n              <v-icon left dark>play_circle_filled</v-icon>\r\n                {{ $t('play') }}\r\n              </v-btn>\r\n              <v-btn style=\"margin-left:10px;\"\r\n                v-if=\"!$store.isMobile && !!itemDetails.in_library && itemDetails.in_library.length == 0\"\r\n                color=\"primary\" tile\r\n                @click=\"toggleLibrary(itemDetails)\"\r\n              >\r\n                <v-icon left dark>favorite_border</v-icon>\r\n                  {{ $t('add_library') }}\r\n              </v-btn>\r\n              <v-btn style=\"margin-left:10px;\"\r\n                v-if=\"!$store.isMobile && !!itemDetails.in_library && itemDetails.in_library.length > 0\"\r\n                color=\"primary\" tile\r\n                @click=\"toggleLibrary(itemDetails)\"\r\n              >\r\n                <v-icon left dark>favorite</v-icon>\r\n                  {{ $t('remove_library') }}\r\n              </v-btn>\r\n            </div>\r\n\r\n            <!-- Description/metadata -->\r\n            <v-card-subtitle class=\"body-2\">\r\n              <div class=\"justify-left\" style=\"text-shadow: 1px 1px #000000;\">\r\n                <ReadMore :text=\"getDescription()\" :max-chars=\"$store.isMobile ? 100 : 300\" />\r\n              </div>\r\n              <!-- tech specs and provider icons -->\r\n            <ProviderIcons\r\n              v-bind:providerIds=\"itemDetails.provider_ids\"\r\n              :height=\"25\"\r\n              :dark=\"true\"\r\n              v-if=\"$store.isMobile\"\r\n            />\r\n            </v-card-subtitle>\r\n          </v-flex>\r\n        </v-layout>\r\n      </v-img>\r\n      <!-- <div class=\"text-xs-center\" v-if=\"itemDetails.tags\" style=\"height:30px;margin-top:-8px;margin-left:15px;margin-right:15px;\">\r\n        <v-chip small color=\"white\" outlined v-for=\"tag of itemDetails.tags\" :key=\"tag\">{{ tag }}</v-chip>\r\n      </div> -->\r\n    </v-card>\r\n  </v-flex>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ProviderIcons from '@/components/ProviderIcons.vue'\r\nimport ReadMore from '@/components/ReadMore.vue'\r\nimport VueObserveVisibility from 'vue-observe-visibility'\r\nVue.use(VueObserveVisibility)\r\n\r\nexport default Vue.extend({\r\n  components: {\r\n    ProviderIcons,\r\n    ReadMore\r\n  },\r\n  props: ['itemDetails'],\r\n  data () {\r\n    return {}\r\n  },\r\n  mounted () { },\r\n  created () {\r\n    this.$store.topBarColor = 'transparent'\r\n  },\r\n  beforeDestroy () {\r\n    this.$store.topBarColor = '#424242'\r\n  },\r\n  methods: {\r\n    visibilityChanged (isVisible, entry) {\r\n      if (isVisible) this.$store.topBarColor = 'transparent'\r\n      else this.$store.topBarColor = '#424242'\r\n    },\r\n    artistClick (item) {\r\n      // artist entry clicked\r\n      var url = '/artists/' + item.item_id\r\n      this.$router.push({ path: url, query: { provider: item.provider } })\r\n    },\r\n    albumClick (item) {\r\n      // album entry clicked\r\n      var url = '/albums/' + item.item_id\r\n      this.$router.push({ path: url, query: { provider: item.provider } })\r\n    },\r\n    toggleLibrary (item) {\r\n      // library button clicked on item\r\n      this.$server.toggleLibrary(item)\r\n    },\r\n    getDescription () {\r\n      var desc = ''\r\n      if (!this.itemDetails) return ''\r\n      if (this.itemDetails.metadata && this.itemDetails.metadata.description) {\r\n        return this.itemDetails.metadata.description\r\n      } else if (this.itemDetails.metadata && this.itemDetails.metadata.biography) {\r\n        return this.itemDetails.metadata.biography\r\n      } else if (this.itemDetails.metadata && this.itemDetails.metadata.copyright) {\r\n        return this.itemDetails.metadata.copyright\r\n      } else if (this.itemDetails.artists) {\r\n        this.itemDetails.artists.forEach(function (artist) {\r\n          if (artist.metadata && artist.metadata.biography) {\r\n            desc = artist.metadata.biography\r\n          }\r\n        })\r\n      }\r\n      return desc\r\n    },\r\n    getUniqueProviders () {\r\n      var keys = []\r\n      var qualities = []\r\n      if (!this.providerIds) return []\r\n      let sortedItemIds = this.providerIds.slice()\r\n      sortedItemIds.sort((a, b) =>\r\n        a.quality < b.quality ? 1 : b.quality < a.quality ? -1 : 0\r\n      )\r\n      for (var item of sortedItemIds) {\r\n        if (!keys.includes(item.provider)) {\r\n          qualities.push(item)\r\n          keys.push(item.provider)\r\n        }\r\n      }\r\n      return qualities\r\n    },\r\n    getFileFormatLogo (provider) {\r\n      if (provider.quality === 0) return 'mp3.png'\r\n      else if (provider.quality === 1) return 'vorbis.png'\r\n      else if (provider.quality === 2) return 'aac.png'\r\n      else if (provider.quality > 2) return 'flac.png'\r\n    },\r\n    getFileFormatDesc (provider) {\r\n      var desc = ''\r\n      if (provider.details) desc += ' ' + provider.details\r\n      return desc\r\n    }\r\n  }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfoHeader.vue?vue&type=template&id=f79834de&\"\nimport script from \"./InfoHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./InfoHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardSubtitle } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardSubtitle,VCardTitle,VFlex,VIcon,VImg,VLayout})\n","<template>\n  <section>\n    <InfoHeader v-bind:itemDetails=\"itemDetails\" />\n    <v-tabs grow show-arrows v-model=\"activeTab\">\n      <v-tab\n        v-for=\"tab in tabs\"\n        :key=\"tab.label\"\n      > {{ $t(tab.label) + ' (' + tab.items.length + ')' }}</v-tab>\n      <v-tab-item\n        v-for=\"tab in tabs\"\n        :key=\"tab.label\"\n      >\n        <v-card flat>\n          <v-list two-line>\n            <RecycleScroller\n              class=\"scroller\"\n              :items=\"tab.items\"\n              :item-size=\"72\"\n              key-field=\"item_id\"\n              v-slot=\"{ item }\"\n              page-mode\n            >\n              <ListviewItem\n                v-bind:item=\"item\"\n                :hideavatar=\"$store.isMobile || tab.label === 'album_tracks'\"\n                :hidetracknum=\"tab.label !== 'album_tracks'\"\n                :hideproviders=\"$store.isMobile\"\n                :hidelibrary=\"$store.isMobile\"\n                :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n                v-on:click=\"itemClicked\"\n                v-on:menuClick=\"menuClick\"\n              ></ListviewItem>\n            </RecycleScroller>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n    </v-tabs>\n  </section>\n</template>\n\n<style scoped>\n.scroller {\n  height: 100%;\n}\n</style>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\nimport InfoHeader from '@/components/InfoHeader.vue'\n\nexport default {\n  components: {\n    ListviewItem,\n    InfoHeader\n  },\n  props: {\n    media_id: String,\n    provider: String,\n    media_type: String\n  },\n  data () {\n    return {\n      itemDetails: {},\n      items: [],\n      activeTab: 0,\n      tabs: []\n    }\n  },\n  async created () {\n    // retrieve the item details\n    await this.getItemDetails()\n    if (this.media_type === 'artists') {\n      // artist details\n      this.tabs = [\n        {\n          label: 'artist_toptracks',\n          endpoint: 'artists/' + this.media_id + '/toptracks',\n          items: []\n        },\n        {\n          label: 'artist_albums',\n          endpoint: 'artists/' + this.media_id + '/albums',\n          items: []\n        }\n      ]\n    } else if (this.media_type === 'albums') {\n      // album details\n      this.tabs = [\n        {\n          label: 'album_tracks',\n          endpoint: 'albums/' + this.media_id + '/tracks',\n          items: []\n        },\n        {\n          label: 'album_versions',\n          endpoint: 'albums/' + this.media_id + '/versions',\n          items: []\n        }\n      ]\n    } else if (this.media_type === 'tracks') {\n      // track details\n      this.tabs = [\n        {\n          label: 'track_versions',\n          endpoint: 'tracks/' + this.media_id + '/versions',\n          items: []\n        }\n      ]\n    } else if (this.media_type === 'playlists') {\n      // playlist details\n      this.tabs = [\n        {\n          label: 'playlist_tracks',\n          endpoint: 'playlists/' + this.media_id + '/tracks',\n          paginated: true,\n          items: []\n        }\n      ]\n    }\n    // retrieve the tabs with additional details\n    for (var tab of this.tabs) {\n      this.getTabItems(tab)\n    }\n  },\n  methods: {\n    itemClicked (item) {\n      // listitem was clicked\n      // item in the list is clicked\n      let url = ''\n      if (item.media_type === 1) {\n        url = '/artists/' + item.item_id\n      } else if (item.media_type === 2) {\n        url = '/albums/' + item.item_id\n      } else if (item.media_type === 4) {\n        url = '/playlists/' + item.item_id\n      } else {\n        // assume track (or radio) item\n        this.$server.$emit('showContextMenu', item)\n        return\n      }\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    menuClick (item) {\n      // contextmenu button (within listitem) clicked\n      this.$server.$emit('showContextMenu', item)\n    },\n    async getItemDetails () {\n      // get the full details for the mediaitem\n      this.$store.loading = true\n      const endpoint = this.media_type + '/' + this.media_id\n      let result = await this.$server.getData(endpoint, { provider: this.provider })\n      this.itemDetails = result\n      this.$store.windowtitle = result.name\n      this.$store.loading = false\n    },\n    async getTabItems (tab) {\n      // retrieve the lists of items for each tab\n      let offset = 0\n      let limit = 50\n      let paginated = 'paginated' in tab ? tab.paginated : false\n      while (true) {\n        let items = await this.$server.getData(tab.endpoint, { offset: offset, limit: limit, provider: this.provider })\n        if (!items || items.length === 0) break\n        tab.items.push(...items)\n        offset += limit\n        if (items.length < limit || !paginated) break\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ItemDetails.vue?vue&type=template&id=2c27af9b&scoped=true&\"\nimport script from \"./ItemDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ItemDetails.vue?vue&type=style&index=0&id=2c27af9b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2c27af9b\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VCard,VList,VTab,VTabItem,VTabs})\n","function _typeof(obj) {\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n}\n\nfunction _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction processOptions(value) {\n  var options;\n\n  if (typeof value === 'function') {\n    // Simple options (callback-only)\n    options = {\n      callback: value\n    };\n  } else {\n    // Options object\n    options = value;\n  }\n\n  return options;\n}\nfunction throttle(callback, delay) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var timeout;\n  var lastState;\n  var currentArgs;\n\n  var throttled = function throttled(state) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    currentArgs = args;\n    if (timeout && state === lastState) return;\n    var leading = options.leading;\n\n    if (typeof leading === 'function') {\n      leading = leading(state, lastState);\n    }\n\n    if ((!timeout || state !== lastState) && leading) {\n      callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n    }\n\n    lastState = state;\n    clearTimeout(timeout);\n    timeout = setTimeout(function () {\n      callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n      timeout = 0;\n    }, delay);\n  };\n\n  throttled._clear = function () {\n    clearTimeout(timeout);\n    timeout = null;\n  };\n\n  return throttled;\n}\nfunction deepEqual(val1, val2) {\n  if (val1 === val2) return true;\n\n  if (_typeof(val1) === 'object') {\n    for (var key in val1) {\n      if (!deepEqual(val1[key], val2[key])) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  return false;\n}\n\nvar VisibilityState =\n/*#__PURE__*/\nfunction () {\n  function VisibilityState(el, options, vnode) {\n    _classCallCheck(this, VisibilityState);\n\n    this.el = el;\n    this.observer = null;\n    this.frozen = false;\n    this.createObserver(options, vnode);\n  }\n\n  _createClass(VisibilityState, [{\n    key: \"createObserver\",\n    value: function createObserver(options, vnode) {\n      var _this = this;\n\n      if (this.observer) {\n        this.destroyObserver();\n      }\n\n      if (this.frozen) return;\n      this.options = processOptions(options);\n\n      this.callback = function (result, entry) {\n        _this.options.callback(result, entry);\n\n        if (result && _this.options.once) {\n          _this.frozen = true;\n\n          _this.destroyObserver();\n        }\n      }; // Throttle\n\n\n      if (this.callback && this.options.throttle) {\n        var _ref = this.options.throttleOptions || {},\n            _leading = _ref.leading;\n\n        this.callback = throttle(this.callback, this.options.throttle, {\n          leading: function leading(state) {\n            return _leading === 'both' || _leading === 'visible' && state || _leading === 'hidden' && !state;\n          }\n        });\n      }\n\n      this.oldResult = undefined;\n      this.observer = new IntersectionObserver(function (entries) {\n        var entry = entries[0];\n\n        if (entries.length > 1) {\n          var intersectingEntry = entries.find(function (e) {\n            return e.isIntersecting;\n          });\n\n          if (intersectingEntry) {\n            entry = intersectingEntry;\n          }\n        }\n\n        if (_this.callback) {\n          // Use isIntersecting if possible because browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport.\n          var result = entry.isIntersecting && entry.intersectionRatio >= _this.threshold;\n          if (result === _this.oldResult) return;\n          _this.oldResult = result;\n\n          _this.callback(result, entry);\n        }\n      }, this.options.intersection); // Wait for the element to be in document\n\n      vnode.context.$nextTick(function () {\n        if (_this.observer) {\n          _this.observer.observe(_this.el);\n        }\n      });\n    }\n  }, {\n    key: \"destroyObserver\",\n    value: function destroyObserver() {\n      if (this.observer) {\n        this.observer.disconnect();\n        this.observer = null;\n      } // Cancel throttled call\n\n\n      if (this.callback && this.callback._clear) {\n        this.callback._clear();\n\n        this.callback = null;\n      }\n    }\n  }, {\n    key: \"threshold\",\n    get: function get() {\n      return this.options.intersection && this.options.intersection.threshold || 0;\n    }\n  }]);\n\n  return VisibilityState;\n}();\n\nfunction bind(el, _ref2, vnode) {\n  var value = _ref2.value;\n  if (!value) return;\n\n  if (typeof IntersectionObserver === 'undefined') {\n    console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');\n  } else {\n    var state = new VisibilityState(el, value, vnode);\n    el._vue_visibilityState = state;\n  }\n}\n\nfunction update(el, _ref3, vnode) {\n  var value = _ref3.value,\n      oldValue = _ref3.oldValue;\n  if (deepEqual(value, oldValue)) return;\n  var state = el._vue_visibilityState;\n\n  if (!value) {\n    unbind(el);\n    return;\n  }\n\n  if (state) {\n    state.createObserver(value, vnode);\n  } else {\n    bind(el, {\n      value: value\n    }, vnode);\n  }\n}\n\nfunction unbind(el) {\n  var state = el._vue_visibilityState;\n\n  if (state) {\n    state.destroyObserver();\n    delete el._vue_visibilityState;\n  }\n}\n\nvar ObserveVisibility = {\n  bind: bind,\n  update: update,\n  unbind: unbind\n};\n\nfunction install(Vue) {\n  Vue.directive('observe-visibility', ObserveVisibility);\n  /* -- Add more components here -- */\n}\n/* -- Plugin definition & Auto-install -- */\n\n/* You shouldn't have to modify the code below */\n// Plugin\n\nvar plugin = {\n  // eslint-disable-next-line no-undef\n  version: \"0.4.6\",\n  install: install\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n  GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n  GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n  GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { ObserveVisibility, install };\n","module.exports = __webpack_public_path__ + \"img/info_gradient.4db55f47.jpg\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=style&index=0&id=2c27af9b&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=style&index=0&id=2c27af9b&scoped=true&lang=css&\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/music_assistant/web/js/itemdetails.b7fcbe37.js b/music_assistant/web/js/itemdetails.b7fcbe37.js
deleted file mode 100644 (file)
index bbbbf42..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["itemdetails"],{"2c4d":function(t,e,i){},"32a2":function(t,e,i){"use strict";i.r(e);var r=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("section",[i("InfoHeader",{attrs:{itemDetails:t.itemDetails}}),i("v-tabs",{attrs:{grow:"","show-arrows":""},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[t._l(t.tabs,(function(e){return i("v-tab",{key:e.label},[t._v(" "+t._s(t.$t(e.label)+" ("+e.items.length+")"))])})),t._l(t.tabs,(function(e){return i("v-tab-item",{key:e.label},[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:t._u([{key:"default",fn:function(r){var a=r.item;return[i("ListviewItem",{attrs:{item:a,hideavatar:t.$store.isMobile||"album_tracks"===e.label,hidetracknum:"album_tracks"!==e.label,hideproviders:t.$store.isMobile,hidelibrary:t.$store.isMobile,hidemenu:3==a.media_type&&t.$store.isMobile},on:{click:t.itemClicked,menuClick:t.menuClick}})]}}],null,!0)})],1)],1)],1)}))],2)],1)},a=[],s=(i("a4d3"),i("e01a"),i("d28b"),i("b0c0"),i("d3b7"),i("3ca3"),i("ddb0"),i("284c")),n=(i("96cf"),i("89ba")),o=i("d3cc"),l=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("v-flex",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:t.visibilityChanged,expression:"visibilityChanged"}]},[r("v-card",{staticClass:"white--text",staticStyle:{"margin-top":"-60px"},attrs:{tile:"",color:"cyan darken-2",img:i("abd2")}},[r("v-img",{staticClass:"white--text",attrs:{width:"100%",height:"300",position:"center top",src:t.$server.getImageUrl(t.itemDetails,"fanart"),gradient:"to bottom, rgba(0,0,0,.85), rgba(66,66,66,.85)"}},[r("div",{staticClass:"text-xs-center",staticStyle:{height:"40px"},attrs:{id:"whitespace_top"}}),t.itemDetails?r("v-layout",{staticStyle:{"margin-left":"5pxmargin-right:5px"}},[t.$store.isMobile?t._e():r("v-flex",{attrs:{xs5:"","pa-5":""}},[r("v-img",{staticStyle:{border:"4px solid rgba(0,0,0,.33)","border-radius":"6px"},attrs:{src:t.$server.getImageUrl(t.itemDetails),"lazy-src":i("4bfb"),width:"220px",height:"220px"}}),r("div",{staticStyle:{position:"fixed","margin-top":"-45px","margin-left":"10px"}},[r("ProviderIcons",{attrs:{providerIds:t.itemDetails.provider_ids,height:30}})],1)],1),r("v-flex",[r("v-card-title",{staticClass:"headline",staticStyle:{"text-shadow":"1px 1px #000000"}},[t._v(" "+t._s(t.itemDetails.name)+" ")]),r("v-card-subtitle",[t.itemDetails.version?r("div",{staticClass:"caption",staticStyle:{color:"white"}},[t._v(t._s(t.itemDetails.version)+" ")]):t._e(),t.itemDetails.artists?r("div",{staticClass:"title",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),t._l(t.itemDetails.artists,(function(e,i){return r("span",{key:e.db_id},[r("a",{staticStyle:{color:"primary"},on:{click:function(i){return t.artistClick(e)}}},[t._v(t._s(e.name))]),i+1<t.itemDetails.artists.length?r("span",{key:i,staticStyle:{color:"#cccccc"}},[t._v(t._s(" / "))]):t._e()])}))],2):t._e(),t.itemDetails.artist?r("div",{staticClass:"title"},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),r("a",{staticStyle:{color:"primary"},on:{click:function(e){return t.artistClick(t.itemDetails.artist)}}},[t._v(t._s(t.itemDetails.artist.name))])],1):t._e(),t.itemDetails.owner?r("div",{staticClass:"title",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("person")]),r("a",{staticStyle:{color:"primary"}},[t._v(t._s(t.itemDetails.owner))])],1):t._e(),t.itemDetails.album?r("div",{staticStyle:{color:"#ffffff","text-shadow":"1px 1px #000000"}},[r("v-icon",{staticStyle:{"margin-left":"-3px","margin-right":"3px"},attrs:{color:"#cccccc",small:""}},[t._v("album")]),r("a",{staticStyle:{color:"#ffffff"},on:{click:function(e){return t.albumClick(t.itemDetails.album)}}},[t._v(t._s(t.itemDetails.album.name))])],1):t._e()]),r("div",{staticStyle:{"margin-left":"14px"}},[r("v-btn",{attrs:{color:"primary",tile:""},on:{click:function(e){return t.$server.$emit("showPlayMenu",t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("play_circle_filled")]),t._v(" "+t._s(t.$t("play"))+" ")],1),!t.$store.isMobile&&t.itemDetails.in_library&&0==t.itemDetails.in_library.length?r("v-btn",{staticStyle:{"margin-left":"10px"},attrs:{color:"primary",tile:""},on:{click:function(e){return t.toggleLibrary(t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("favorite_border")]),t._v(" "+t._s(t.$t("add_library"))+" ")],1):t._e(),!t.$store.isMobile&&t.itemDetails.in_library&&t.itemDetails.in_library.length>0?r("v-btn",{staticStyle:{"margin-left":"10px"},attrs:{color:"primary",tile:""},on:{click:function(e){return t.toggleLibrary(t.itemDetails)}}},[r("v-icon",{attrs:{left:"",dark:""}},[t._v("favorite")]),t._v(" "+t._s(t.$t("remove_library"))+" ")],1):t._e()],1),r("v-card-subtitle",{staticClass:"body-2"},[r("div",{staticClass:"justify-left",staticStyle:{"text-shadow":"1px 1px #000000"}},[r("ReadMore",{attrs:{text:t.getDescription(),"max-chars":t.$store.isMobile?100:300}})],1),t.$store.isMobile?r("ProviderIcons",{attrs:{providerIds:t.itemDetails.provider_ids,height:25,dark:!0}}):t._e()],1)],1)],1):t._e()],1)],1)],1)},c=[],u=(i("4160"),i("caad"),i("fb6a"),i("4e827"),i("159b"),i("2b0e")),d=i("e00a"),m=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("a",{staticStyle:{color:"white"},domProps:{innerHTML:t._s(t.formattedString)},on:{click:function(e){return t.triggerReadMore(e,!0)}}}),i("v-dialog",{attrs:{width:"80%"},model:{value:t.isReadMore,callback:function(e){t.isReadMore=e},expression:"isReadMore"}},[i("v-card",[i("v-card-text",{staticClass:"subheading",domProps:{innerHTML:t._s("<br>"+t.text)}})],1)],1)],1)},v=[],p=(i("a9e3"),i("9911"),u["a"].extend({props:{lessStr:{type:String,default:""},text:{type:String,required:!0},link:{type:String,default:"#"},maxChars:{type:Number,default:100}},data:function(){return{isReadMore:!1}},computed:{formattedString:function(){var t=this.text;return this.text.length>this.maxChars&&(t=t.substring(0,this.maxChars)+"..."),t}},mounted:function(){},methods:{triggerReadMore:function(t,e){"#"===this.link&&t.preventDefault(),null===this.lessStr&&""===this.lessStr||(this.isReadMore=e)}}})),f=p,h=i("2877"),b=i("6544"),y=i.n(b),g=i("b0af"),_=i("99d9"),x=i("169a"),k=Object(h["a"])(f,m,v,!1,null,null,null),w=k.exports;y()(k,{VCard:g["a"],VCardText:_["b"],VDialog:x["a"]});var D=i("85fe");u["a"].use(D["a"]);var S=u["a"].extend({components:{ProviderIcons:d["a"],ReadMore:w},props:["itemDetails"],data:function(){return{}},mounted:function(){},created:function(){this.$store.topBarColor="transparent"},beforeDestroy:function(){this.$store.topBarColor="#424242"},methods:{visibilityChanged:function(t,e){this.$store.topBarColor=t?"transparent":"#424242"},artistClick:function(t){var e="/artists/"+t.item_id;this.$router.push({path:e,query:{provider:t.provider}})},albumClick:function(t){var e="/albums/"+t.item_id;this.$router.push({path:e,query:{provider:t.provider}})},toggleLibrary:function(t){this.$server.toggleLibrary(t)},getDescription:function(){var t="";return this.itemDetails?this.itemDetails.metadata&&this.itemDetails.metadata.description?this.itemDetails.metadata.description:this.itemDetails.metadata&&this.itemDetails.metadata.biography?this.itemDetails.metadata.biography:this.itemDetails.metadata&&this.itemDetails.metadata.copyright?this.itemDetails.metadata.copyright:(this.itemDetails.artists&&this.itemDetails.artists.forEach((function(e){e.metadata&&e.metadata.biography&&(t=e.metadata.biography)})),t):""},getUniqueProviders:function(){var t=[],e=[];if(!this.providerIds)return[];var i=this.providerIds.slice();i.sort((function(t,e){return t.quality<e.quality?1:e.quality<t.quality?-1:0}));var r=!0,a=!1,s=void 0;try{for(var n,o=i[Symbol.iterator]();!(r=(n=o.next()).done);r=!0){var l=n.value;t.includes(l.provider)||(e.push(l),t.push(l.provider))}}catch(c){a=!0,s=c}finally{try{r||null==o.return||o.return()}finally{if(a)throw s}}return e},getFileFormatLogo:function(t){return 0===t.quality?"mp3.png":1===t.quality?"vorbis.png":2===t.quality?"aac.png":t.quality>2?"flac.png":void 0},getFileFormatDesc:function(t){var e="";return t.details&&(e+=" "+t.details),e}}}),C=S,$=i("8336"),I=i("0e8f"),M=i("132d"),O=i("adda"),R=i("a722"),T=Object(h["a"])(C,l,c,!1,null,null,null),V=T.exports;y()(T,{VBtn:$["a"],VCard:g["a"],VCardSubtitle:_["a"],VCardTitle:_["c"],VFlex:I["a"],VIcon:M["a"],VImg:O["a"],VLayout:R["a"]});var j={components:{ListviewItem:o["a"],InfoHeader:V},props:{media_id:String,provider:String,media_type:String},data:function(){return{itemDetails:{},items:[],activeTab:0,tabs:[]}},created:function(){var t=Object(n["a"])(regeneratorRuntime.mark((function t(){var e,i,r,a,s,n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.getItemDetails();case 2:for("artists"===this.media_type?this.tabs=[{label:"artist_toptracks",endpoint:"artists/"+this.media_id+"/toptracks",items:[]},{label:"artist_albums",endpoint:"artists/"+this.media_id+"/albums",items:[]}]:"albums"===this.media_type?this.tabs=[{label:"album_tracks",endpoint:"albums/"+this.media_id+"/tracks",items:[]},{label:"album_versions",endpoint:"albums/"+this.media_id+"/versions",items:[]}]:"tracks"===this.media_type?this.tabs=[{label:"track_versions",endpoint:"tracks/"+this.media_id+"/versions",items:[]}]:"playlists"===this.media_type&&(this.tabs=[{label:"playlist_tracks",endpoint:"playlists/"+this.media_id+"/tracks",paginated:!0,items:[]}]),e=!0,i=!1,r=void 0,t.prev=6,a=this.tabs[Symbol.iterator]();!(e=(s=a.next()).done);e=!0)n=s.value,this.getTabItems(n);t.next=14;break;case 10:t.prev=10,t.t0=t["catch"](6),i=!0,r=t.t0;case 14:t.prev=14,t.prev=15,e||null==a.return||a.return();case 17:if(t.prev=17,!i){t.next=20;break}throw r;case 20:return t.finish(17);case 21:return t.finish(14);case 22:case"end":return t.stop()}}),t,this,[[6,10,14,22],[15,,17,21]])})));function e(){return t.apply(this,arguments)}return e}(),methods:{itemClicked:function(t){var e="";if(1===t.media_type)e="/artists/"+t.item_id;else if(2===t.media_type)e="/albums/"+t.item_id;else{if(4!==t.media_type)return void this.$server.$emit("showContextMenu",t);e="/playlists/"+t.item_id}this.$router.push({path:e,query:{provider:t.provider}})},menuClick:function(t){this.$server.$emit("showContextMenu",t)},getItemDetails:function(){var t=Object(n["a"])(regeneratorRuntime.mark((function t(){var e,i;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return this.$store.loading=!0,e=this.media_type+"/"+this.media_id,t.next=4,this.$server.getData(e,{provider:this.provider});case 4:i=t.sent,this.itemDetails=i,this.$store.windowtitle=i.name,this.$store.loading=!1;case 8:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),getTabItems:function(){var t=Object(n["a"])(regeneratorRuntime.mark((function t(e){var i,r,a,n,o;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:i=0,r=50,a="paginated"in e&&e.paginated;case 3:return t.next=6,this.$server.getData(e.endpoint,{offset:i,limit:r,provider:this.provider});case 6:if(o=t.sent,o&&0!==o.length){t.next=9;break}return t.abrupt("break",15);case 9:if((n=e.items).push.apply(n,Object(s["a"])(o)),i+=r,!(o.length<r)&&a){t.next=13;break}return t.abrupt("break",15);case 13:t.next=3;break;case 15:case"end":return t.stop()}}),t,this)})));function e(e){return t.apply(this,arguments)}return e}()}},q=j,L=(i("b499"),i("8860")),P=i("71a3"),A=i("c671"),E=i("fe57"),z=Object(h["a"])(q,r,a,!1,null,"2c27af9b",null);e["default"]=z.exports;y()(z,{VCard:g["a"],VList:L["a"],VTab:P["a"],VTabItem:A["a"],VTabs:E["a"]})},"85fe":function(t,e,i){"use strict";(function(t){function i(t){return i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,i){return e&&a(t.prototype,e),i&&a(t,i),t}function n(t){return o(t)||l(t)||c()}function o(t){if(Array.isArray(t)){for(var e=0,i=new Array(t.length);e<t.length;e++)i[e]=t[e];return i}}function l(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}function c(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function u(t){var e;return e="function"===typeof t?{callback:t}:t,e}function d(t,e){var i,r,a,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=function(o){for(var l=arguments.length,c=new Array(l>1?l-1:0),u=1;u<l;u++)c[u-1]=arguments[u];if(a=c,!i||o!==r){var d=s.leading;"function"===typeof d&&(d=d(o,r)),i&&o===r||!d||t.apply(void 0,[o].concat(n(a))),r=o,clearTimeout(i),i=setTimeout((function(){t.apply(void 0,[o].concat(n(a))),i=0}),e)}};return o._clear=function(){clearTimeout(i),i=null},o}function m(t,e){if(t===e)return!0;if("object"===i(t)){for(var r in t)if(!m(t[r],e[r]))return!1;return!0}return!1}var v=function(){function t(e,i,a){r(this,t),this.el=e,this.observer=null,this.frozen=!1,this.createObserver(i,a)}return s(t,[{key:"createObserver",value:function(t,e){var i=this;if(this.observer&&this.destroyObserver(),!this.frozen){if(this.options=u(t),this.callback=function(t,e){i.options.callback(t,e),t&&i.options.once&&(i.frozen=!0,i.destroyObserver())},this.callback&&this.options.throttle){var r=this.options.throttleOptions||{},a=r.leading;this.callback=d(this.callback,this.options.throttle,{leading:function(t){return"both"===a||"visible"===a&&t||"hidden"===a&&!t}})}this.oldResult=void 0,this.observer=new IntersectionObserver((function(t){var e=t[0];if(t.length>1){var r=t.find((function(t){return t.isIntersecting}));r&&(e=r)}if(i.callback){var a=e.isIntersecting&&e.intersectionRatio>=i.threshold;if(a===i.oldResult)return;i.oldResult=a,i.callback(a,e)}}),this.options.intersection),e.context.$nextTick((function(){i.observer&&i.observer.observe(i.el)}))}}},{key:"destroyObserver",value:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.callback&&this.callback._clear&&(this.callback._clear(),this.callback=null)}},{key:"threshold",get:function(){return this.options.intersection&&this.options.intersection.threshold||0}}]),t}();function p(t,e,i){var r=e.value;if(r)if("undefined"===typeof IntersectionObserver);else{var a=new v(t,r,i);t._vue_visibilityState=a}}function f(t,e,i){var r=e.value,a=e.oldValue;if(!m(r,a)){var s=t._vue_visibilityState;r?s?s.createObserver(r,i):p(t,{value:r},i):h(t)}}function h(t){var e=t._vue_visibilityState;e&&(e.destroyObserver(),delete t._vue_visibilityState)}var b={bind:p,update:f,unbind:h};function y(t){t.directive("observe-visibility",b)}var g={version:"0.4.6",install:y},_=null;"undefined"!==typeof window?_=window.Vue:"undefined"!==typeof t&&(_=t.Vue),_&&_.use(g),e["a"]=g}).call(this,i("c8ba"))},abd2:function(t,e,i){t.exports=i.p+"img/info_gradient.4db55f47.jpg"},b499:function(t,e,i){"use strict";var r=i("2c4d"),a=i.n(r);a.a}}]);
-//# sourceMappingURL=itemdetails.b7fcbe37.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/itemdetails.b7fcbe37.js.map b/music_assistant/web/js/itemdetails.b7fcbe37.js.map
deleted file mode 100644 (file)
index 603cd04..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./src/views/ItemDetails.vue?d195","webpack:///./src/components/InfoHeader.vue?0156","webpack:///./src/components/ReadMore.vue?6747","webpack:///src/components/ReadMore.vue","webpack:///./src/components/ReadMore.vue?6444","webpack:///./src/components/ReadMore.vue","webpack:///src/components/InfoHeader.vue","webpack:///./src/components/InfoHeader.vue?296b","webpack:///./src/components/InfoHeader.vue","webpack:///src/views/ItemDetails.vue","webpack:///./src/views/ItemDetails.vue?f452","webpack:///./src/views/ItemDetails.vue?6249","webpack:///./node_modules/vue-observe-visibility/dist/vue-observe-visibility.esm.js","webpack:///./src/assets/info_gradient.jpg","webpack:///./src/views/ItemDetails.vue?99d6"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","itemDetails","model","value","callback","$$v","activeTab","expression","_l","tab","key","label","_v","_s","$t","items","length","staticClass","scopedSlots","_u","fn","ref","item","$store","isMobile","media_type","on","itemClicked","menuClick","staticRenderFns","directives","name","rawName","staticStyle","$server","getImageUrl","_e","provider_ids","version","artist","artistindex","db_id","$event","artistClick","artists","owner","albumClick","album","$emit","in_library","toggleLibrary","getDescription","domProps","formattedString","triggerReadMore","isReadMore","text","props","lessStr","type","String","default","required","link","maxChars","Number","data","computed","valContainer","substring","mounted","methods","e","preventDefault","b","component","VCard","VCardText","VDialog","components","ProviderIcons","ReadMore","created","topBarColor","beforeDestroy","visibilityChanged","isVisible","url","item_id","$router","push","desc","metadata","description","biography","copyright","forEach","getUniqueProviders","keys","qualities","providerIds","sortedItemIds","sort","getFileFormatLogo","provider","quality","getFileFormatDesc","details","VBtn","VCardSubtitle","VCardTitle","VFlex","VIcon","VImg","VLayout","ListviewItem","InfoHeader","media_id","tabs","VList","VTab","VTabItem","VTabs","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","i","descriptor","enumerable","configurable","writable","Object","defineProperty","_createClass","protoProps","staticProps","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","Array","isArray","arr2","iter","toString","call","from","processOptions","options","throttle","delay","timeout","lastState","currentArgs","arguments","undefined","throttled","state","_len","args","_key","leading","apply","concat","clearTimeout","setTimeout","_clear","deepEqual","val1","val2","VisibilityState","el","vnode","observer","frozen","createObserver","_this","destroyObserver","result","entry","once","_ref","throttleOptions","_leading","oldResult","IntersectionObserver","entries","intersectingEntry","find","isIntersecting","intersectionRatio","threshold","intersection","context","$nextTick","observe","disconnect","get","bind","_ref2","_vue_visibilityState","update","_ref3","oldValue","unbind","ObserveVisibility","install","Vue","directive","plugin","GlobalVue","window","global","use","module","exports"],"mappings":"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","file":"js/itemdetails.b7fcbe37.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('InfoHeader',{attrs:{\"itemDetails\":_vm.itemDetails}}),_c('v-tabs',{attrs:{\"grow\":\"\",\"show-arrows\":\"\"},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_vm._l((_vm.tabs),function(tab){return _c('v-tab',{key:tab.label},[_vm._v(\" \"+_vm._s(_vm.$t(tab.label) + ' (' + tab.items.length + ')'))])}),_vm._l((_vm.tabs),function(tab){return _c('v-tab-item',{key:tab.label},[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":tab.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":_vm.$store.isMobile || tab.label === 'album_tracks',\"hidetracknum\":tab.label !== 'album_tracks',\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})]}}],null,true)})],1)],1)],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-flex',{directives:[{name:\"observe-visibility\",rawName:\"v-observe-visibility\",value:(_vm.visibilityChanged),expression:\"visibilityChanged\"}]},[_c('v-card',{staticClass:\"white--text\",staticStyle:{\"margin-top\":\"-60px\"},attrs:{\"tile\":\"\",\"color\":\"cyan darken-2\",\"img\":require('../assets/info_gradient.jpg')}},[_c('v-img',{staticClass:\"white--text\",attrs:{\"width\":\"100%\",\"height\":\"300\",\"position\":\"center top\",\"src\":_vm.$server.getImageUrl(_vm.itemDetails, 'fanart'),\"gradient\":\"to bottom, rgba(0,0,0,.85), rgba(66,66,66,.85)\"}},[_c('div',{staticClass:\"text-xs-center\",staticStyle:{\"height\":\"40px\"},attrs:{\"id\":\"whitespace_top\"}}),(_vm.itemDetails)?_c('v-layout',{staticStyle:{\"margin-left\":\"5pxmargin-right:5px\"}},[(!_vm.$store.isMobile)?_c('v-flex',{attrs:{\"xs5\":\"\",\"pa-5\":\"\"}},[_c('v-img',{staticStyle:{\"border\":\"4px solid rgba(0,0,0,.33)\",\"border-radius\":\"6px\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.itemDetails),\"lazy-src\":require('../assets/default_artist.png'),\"width\":\"220px\",\"height\":\"220px\"}}),_c('div',{staticStyle:{\"position\":\"fixed\",\"margin-top\":\"-45px\",\"margin-left\":\"10px\"}},[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.itemDetails.provider_ids,\"height\":30}})],1)],1):_vm._e(),_c('v-flex',[_c('v-card-title',{staticClass:\"headline\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_vm._v(\" \"+_vm._s(_vm.itemDetails.name)+\" \")]),_c('v-card-subtitle',[(_vm.itemDetails.version)?_c('div',{staticClass:\"caption\",staticStyle:{\"color\":\"white\"}},[_vm._v(_vm._s(_vm.itemDetails.version)+\" \")]):_vm._e(),(_vm.itemDetails.artists)?_c('div',{staticClass:\"title\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_vm._l((_vm.itemDetails.artists),function(artist,artistindex){return _c('span',{key:artist.db_id},[_c('a',{staticStyle:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.artistClick(artist)}}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.itemDetails.artists.length)?_c('span',{key:artistindex,staticStyle:{\"color\":\"#cccccc\"}},[_vm._v(_vm._s(' / '))]):_vm._e()])})],2):_vm._e(),(_vm.itemDetails.artist)?_c('div',{staticClass:\"title\"},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_c('a',{staticStyle:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.artistClick(_vm.itemDetails.artist)}}},[_vm._v(_vm._s(_vm.itemDetails.artist.name))])],1):_vm._e(),(_vm.itemDetails.owner)?_c('div',{staticClass:\"title\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"person\")]),_c('a',{staticStyle:{\"color\":\"primary\"}},[_vm._v(_vm._s(_vm.itemDetails.owner))])],1):_vm._e(),(_vm.itemDetails.album)?_c('div',{staticStyle:{\"color\":\"#ffffff\",\"text-shadow\":\"1px 1px #000000\"}},[_c('v-icon',{staticStyle:{\"margin-left\":\"-3px\",\"margin-right\":\"3px\"},attrs:{\"color\":\"#cccccc\",\"small\":\"\"}},[_vm._v(\"album\")]),_c('a',{staticStyle:{\"color\":\"#ffffff\"},on:{\"click\":function($event){return _vm.albumClick(_vm.itemDetails.album)}}},[_vm._v(_vm._s(_vm.itemDetails.album.name))])],1):_vm._e()]),_c('div',{staticStyle:{\"margin-left\":\"14px\"}},[_c('v-btn',{attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayMenu', _vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"play_circle_filled\")]),_vm._v(\" \"+_vm._s(_vm.$t('play'))+\" \")],1),(!_vm.$store.isMobile && !!_vm.itemDetails.in_library && _vm.itemDetails.in_library.length == 0)?_c('v-btn',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.toggleLibrary(_vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"favorite_border\")]),_vm._v(\" \"+_vm._s(_vm.$t('add_library'))+\" \")],1):_vm._e(),(!_vm.$store.isMobile && !!_vm.itemDetails.in_library && _vm.itemDetails.in_library.length > 0)?_c('v-btn',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"color\":\"primary\",\"tile\":\"\"},on:{\"click\":function($event){return _vm.toggleLibrary(_vm.itemDetails)}}},[_c('v-icon',{attrs:{\"left\":\"\",\"dark\":\"\"}},[_vm._v(\"favorite\")]),_vm._v(\" \"+_vm._s(_vm.$t('remove_library'))+\" \")],1):_vm._e()],1),_c('v-card-subtitle',{staticClass:\"body-2\"},[_c('div',{staticClass:\"justify-left\",staticStyle:{\"text-shadow\":\"1px 1px #000000\"}},[_c('ReadMore',{attrs:{\"text\":_vm.getDescription(),\"max-chars\":_vm.$store.isMobile ? 100 : 300}})],1),(_vm.$store.isMobile)?_c('ProviderIcons',{attrs:{\"providerIds\":_vm.itemDetails.provider_ids,\"height\":25,\"dark\":true}}):_vm._e()],1)],1)],1):_vm._e()],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('a',{staticStyle:{\"color\":\"white\"},domProps:{\"innerHTML\":_vm._s(_vm.formattedString)},on:{\"click\":function($event){return _vm.triggerReadMore($event, true)}}}),_c('v-dialog',{attrs:{\"width\":\"80%\"},model:{value:(_vm.isReadMore),callback:function ($$v) {_vm.isReadMore=$$v},expression:\"isReadMore\"}},[_c('v-card',[_c('v-card-text',{staticClass:\"subheading\",domProps:{\"innerHTML\":_vm._s('<br>' + _vm.text)}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div>\r\n    <a style=\"color: white\" v-html=\"formattedString\" @click=\"triggerReadMore($event, true)\"/>\r\n    <v-dialog v-model=\"isReadMore\" width=\"80%\">\r\n      <v-card>\r\n        <v-card-text class=\"subheading\" v-html=\"'<br>' + text\">\r\n        </v-card-text>\r\n      </v-card>\r\n    </v-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n  props: {\r\n    lessStr: {\r\n      type: String,\r\n      default: ''\r\n    },\r\n    text: {\r\n      type: String,\r\n      required: true\r\n    },\r\n    link: {\r\n      type: String,\r\n      default: '#'\r\n    },\r\n    maxChars: {\r\n      type: Number,\r\n      default: 100\r\n    }\r\n  },\r\n  data () {\r\n    return {\r\n      isReadMore: false\r\n    }\r\n  },\r\n  computed: {\r\n    formattedString () {\r\n      var valContainer = this.text\r\n      if (this.text.length > this.maxChars) {\r\n        valContainer = valContainer.substring(0, this.maxChars) + '...'\r\n      }\r\n      return (valContainer)\r\n    }\r\n  },\r\n  mounted () { },\r\n  methods: {\r\n    triggerReadMore (e, b) {\r\n      if (this.link === '#') {\r\n        e.preventDefault()\r\n      }\r\n      if (this.lessStr !== null || this.lessStr !== '') {\r\n        this.isReadMore = b\r\n      }\r\n    }\r\n  }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadMore.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadMore.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReadMore.vue?vue&type=template&id=702b76f2&\"\nimport script from \"./ReadMore.vue?vue&type=script&lang=js&\"\nexport * from \"./ReadMore.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\ninstallComponents(component, {VCard,VCardText,VDialog})\n","<template>\r\n  <v-flex v-observe-visibility=\"visibilityChanged\">\r\n    <v-card\r\n      tile\r\n      color=\"cyan darken-2\"\r\n      class=\"white--text\"\r\n      :img=\"require('../assets/info_gradient.jpg')\"\r\n      style=\"margin-top:-60px;\"\r\n    >\r\n      <v-img\r\n        class=\"white--text\"\r\n        width=\"100%\"\r\n        height=\"300\"\r\n        position=\"center top\"\r\n        :src=\"$server.getImageUrl(itemDetails, 'fanart')\"\r\n        gradient=\"to bottom, rgba(0,0,0,.85), rgba(66,66,66,.85)\"\r\n      >\r\n        <div class=\"text-xs-center\" style=\"height:40px;\" id=\"whitespace_top\" />\r\n\r\n        <v-layout style=\"margin-left:5pxmargin-right:5px;\" v-if=\"itemDetails\">\r\n          <!-- left side: cover image -->\r\n          <v-flex xs5 pa-5 v-if=\"!$store.isMobile\">\r\n            <v-img\r\n              :src=\"$server.getImageUrl(itemDetails)\"\r\n              :lazy-src=\"require('../assets/default_artist.png')\"\r\n              width=\"220px\"\r\n              height=\"220px\"\r\n              style=\"border: 4px solid rgba(0,0,0,.33);border-radius: 6px;\"\r\n            ></v-img>\r\n\r\n            <!-- tech specs and provider icons -->\r\n            <div style=\"position:fixed;margin-top:-45px;margin-left:10px;\">\r\n              <ProviderIcons\r\n                v-bind:providerIds=\"itemDetails.provider_ids\"\r\n                :height=\"30\"\r\n              />\r\n            </div>\r\n          </v-flex>\r\n\r\n          <v-flex>\r\n            <!-- Main title -->\r\n            <v-card-title style=\"text-shadow: 1px 1px #000000;\" class=\"headline\">\r\n              {{ itemDetails.name }}\r\n            </v-card-title>\r\n\r\n            <!-- other details -->\r\n            <v-card-subtitle>\r\n\r\n              <!-- version -->\r\n              <div v-if=\"itemDetails.version\" class=\"caption\"\r\n              style=\"color: white;\"\r\n            >{{ itemDetails.version }}\r\n              </div>\r\n\r\n            <!-- item artists -->\r\n            <div class=\"title\" style=\"text-shadow: 1px 1px #000000;\" v-if=\"itemDetails.artists\">\r\n                <v-icon color=\"#cccccc\" style=\"margin-left: -3px;margin-right:3px\" small>person</v-icon>\r\n                <span\r\n                  v-for=\"(artist, artistindex) in itemDetails.artists\"\r\n                  :key=\"artist.db_id\"\r\n                >\r\n                  <a style=\"color: primary\" v-on:click=\"artistClick(artist)\">{{ artist.name }}</a>\r\n                  <span\r\n                    style=\"color: #cccccc\"\r\n                    v-if=\"artistindex + 1 < itemDetails.artists.length\"\r\n                    :key=\"artistindex\"\r\n                  >{{ ' / ' }}</span>\r\n                </span>\r\n            </div>\r\n\r\n            <!-- album artist -->\r\n            <div class=\"title\" v-if=\"itemDetails.artist\">\r\n                <v-icon color=\"#cccccc\" style=\"margin-left: -3px;margin-right:3px\" small>person</v-icon>\r\n                <a\r\n                  style=\"color: primary\"\r\n                  v-on:click=\"artistClick(itemDetails.artist)\"\r\n                >{{ itemDetails.artist.name }}</a>\r\n            </div>\r\n\r\n            <!-- playlist owner -->\r\n            <div class=\"title\" style=\"text-shadow: 1px 1px #000000;\" v-if=\"itemDetails.owner\">\r\n                <v-icon color=\"#cccccc\" style=\"margin-left: -3px;margin-right:3px\" small>person</v-icon>\r\n                <a style=\"color:primary\">{{ itemDetails.owner }}</a>\r\n            </div>\r\n\r\n            <div\r\n              v-if=\"itemDetails.album\"\r\n              style=\"color:#ffffff;text-shadow: 1px 1px #000000;\"\r\n            >\r\n              <v-icon color=\"#cccccc\" style=\"margin-left: -3px;margin-right:3px\" small>album</v-icon>\r\n              <a\r\n                style=\"color:#ffffff\"\r\n                v-on:click=\"albumClick(itemDetails.album)\"\r\n              >{{ itemDetails.album.name }}</a>\r\n            </div>\r\n            </v-card-subtitle>\r\n\r\n            <!-- play/info buttons -->\r\n            <div style=\"margin-left:14px;\">\r\n              <v-btn color=\"primary\" tile\r\n                @click=\"$server.$emit('showPlayMenu', itemDetails)\"\r\n              >\r\n              <v-icon left dark>play_circle_filled</v-icon>\r\n                {{ $t('play') }}\r\n              </v-btn>\r\n              <v-btn style=\"margin-left:10px;\"\r\n                v-if=\"!$store.isMobile && !!itemDetails.in_library && itemDetails.in_library.length == 0\"\r\n                color=\"primary\" tile\r\n                @click=\"toggleLibrary(itemDetails)\"\r\n              >\r\n                <v-icon left dark>favorite_border</v-icon>\r\n                  {{ $t('add_library') }}\r\n              </v-btn>\r\n              <v-btn style=\"margin-left:10px;\"\r\n                v-if=\"!$store.isMobile && !!itemDetails.in_library && itemDetails.in_library.length > 0\"\r\n                color=\"primary\" tile\r\n                @click=\"toggleLibrary(itemDetails)\"\r\n              >\r\n                <v-icon left dark>favorite</v-icon>\r\n                  {{ $t('remove_library') }}\r\n              </v-btn>\r\n            </div>\r\n\r\n            <!-- Description/metadata -->\r\n            <v-card-subtitle class=\"body-2\">\r\n              <div class=\"justify-left\" style=\"text-shadow: 1px 1px #000000;\">\r\n                <ReadMore :text=\"getDescription()\" :max-chars=\"$store.isMobile ? 100 : 300\" />\r\n              </div>\r\n              <!-- tech specs and provider icons -->\r\n            <ProviderIcons\r\n              v-bind:providerIds=\"itemDetails.provider_ids\"\r\n              :height=\"25\"\r\n              :dark=\"true\"\r\n              v-if=\"$store.isMobile\"\r\n            />\r\n            </v-card-subtitle>\r\n          </v-flex>\r\n        </v-layout>\r\n      </v-img>\r\n      <!-- <div class=\"text-xs-center\" v-if=\"itemDetails.tags\" style=\"height:30px;margin-top:-8px;margin-left:15px;margin-right:15px;\">\r\n        <v-chip small color=\"white\" outlined v-for=\"tag of itemDetails.tags\" :key=\"tag\">{{ tag }}</v-chip>\r\n      </div> -->\r\n    </v-card>\r\n  </v-flex>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ProviderIcons from '@/components/ProviderIcons.vue'\r\nimport ReadMore from '@/components/ReadMore.vue'\r\nimport VueObserveVisibility from 'vue-observe-visibility'\r\nVue.use(VueObserveVisibility)\r\n\r\nexport default Vue.extend({\r\n  components: {\r\n    ProviderIcons,\r\n    ReadMore\r\n  },\r\n  props: ['itemDetails'],\r\n  data () {\r\n    return {}\r\n  },\r\n  mounted () { },\r\n  created () {\r\n    this.$store.topBarColor = 'transparent'\r\n  },\r\n  beforeDestroy () {\r\n    this.$store.topBarColor = '#424242'\r\n  },\r\n  methods: {\r\n    visibilityChanged (isVisible, entry) {\r\n      if (isVisible) this.$store.topBarColor = 'transparent'\r\n      else this.$store.topBarColor = '#424242'\r\n    },\r\n    artistClick (item) {\r\n      // artist entry clicked\r\n      var url = '/artists/' + item.item_id\r\n      this.$router.push({ path: url, query: { provider: item.provider } })\r\n    },\r\n    albumClick (item) {\r\n      // album entry clicked\r\n      var url = '/albums/' + item.item_id\r\n      this.$router.push({ path: url, query: { provider: item.provider } })\r\n    },\r\n    toggleLibrary (item) {\r\n      // library button clicked on item\r\n      this.$server.toggleLibrary(item)\r\n    },\r\n    getDescription () {\r\n      var desc = ''\r\n      if (!this.itemDetails) return ''\r\n      if (this.itemDetails.metadata && this.itemDetails.metadata.description) {\r\n        return this.itemDetails.metadata.description\r\n      } else if (this.itemDetails.metadata && this.itemDetails.metadata.biography) {\r\n        return this.itemDetails.metadata.biography\r\n      } else if (this.itemDetails.metadata && this.itemDetails.metadata.copyright) {\r\n        return this.itemDetails.metadata.copyright\r\n      } else if (this.itemDetails.artists) {\r\n        this.itemDetails.artists.forEach(function (artist) {\r\n          if (artist.metadata && artist.metadata.biography) {\r\n            desc = artist.metadata.biography\r\n          }\r\n        })\r\n      }\r\n      return desc\r\n    },\r\n    getUniqueProviders () {\r\n      var keys = []\r\n      var qualities = []\r\n      if (!this.providerIds) return []\r\n      let sortedItemIds = this.providerIds.slice()\r\n      sortedItemIds.sort((a, b) =>\r\n        a.quality < b.quality ? 1 : b.quality < a.quality ? -1 : 0\r\n      )\r\n      for (var item of sortedItemIds) {\r\n        if (!keys.includes(item.provider)) {\r\n          qualities.push(item)\r\n          keys.push(item.provider)\r\n        }\r\n      }\r\n      return qualities\r\n    },\r\n    getFileFormatLogo (provider) {\r\n      if (provider.quality === 0) return 'mp3.png'\r\n      else if (provider.quality === 1) return 'vorbis.png'\r\n      else if (provider.quality === 2) return 'aac.png'\r\n      else if (provider.quality > 2) return 'flac.png'\r\n    },\r\n    getFileFormatDesc (provider) {\r\n      var desc = ''\r\n      if (provider.details) desc += ' ' + provider.details\r\n      return desc\r\n    }\r\n  }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfoHeader.vue?vue&type=template&id=7830e19b&\"\nimport script from \"./InfoHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./InfoHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardSubtitle } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardSubtitle,VCardTitle,VFlex,VIcon,VImg,VLayout})\n","<template>\n  <section>\n    <InfoHeader v-bind:itemDetails=\"itemDetails\" />\n    <v-tabs grow show-arrows v-model=\"activeTab\">\n      <v-tab\n        v-for=\"tab in tabs\"\n        :key=\"tab.label\"\n      > {{ $t(tab.label) + ' (' + tab.items.length + ')' }}</v-tab>\n      <v-tab-item\n        v-for=\"tab in tabs\"\n        :key=\"tab.label\"\n      >\n        <v-card flat>\n          <v-list two-line>\n            <RecycleScroller\n              class=\"scroller\"\n              :items=\"tab.items\"\n              :item-size=\"72\"\n              key-field=\"item_id\"\n              v-slot=\"{ item }\"\n              page-mode\n            >\n              <ListviewItem\n                v-bind:item=\"item\"\n                :hideavatar=\"$store.isMobile || tab.label === 'album_tracks'\"\n                :hidetracknum=\"tab.label !== 'album_tracks'\"\n                :hideproviders=\"$store.isMobile\"\n                :hidelibrary=\"$store.isMobile\"\n                :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n                v-on:click=\"itemClicked\"\n                v-on:menuClick=\"menuClick\"\n              ></ListviewItem>\n            </RecycleScroller>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n    </v-tabs>\n  </section>\n</template>\n\n<style scoped>\n.scroller {\n  height: 100%;\n}\n</style>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\nimport InfoHeader from '@/components/InfoHeader.vue'\n\nexport default {\n  components: {\n    ListviewItem,\n    InfoHeader\n  },\n  props: {\n    media_id: String,\n    provider: String,\n    media_type: String\n  },\n  data () {\n    return {\n      itemDetails: {},\n      items: [],\n      activeTab: 0,\n      tabs: []\n    }\n  },\n  async created () {\n    // retrieve the item details\n    await this.getItemDetails()\n    if (this.media_type === 'artists') {\n      // artist details\n      this.tabs = [\n        {\n          label: 'artist_toptracks',\n          endpoint: 'artists/' + this.media_id + '/toptracks',\n          items: []\n        },\n        {\n          label: 'artist_albums',\n          endpoint: 'artists/' + this.media_id + '/albums',\n          items: []\n        }\n      ]\n    } else if (this.media_type === 'albums') {\n      // album details\n      this.tabs = [\n        {\n          label: 'album_tracks',\n          endpoint: 'albums/' + this.media_id + '/tracks',\n          items: []\n        },\n        {\n          label: 'album_versions',\n          endpoint: 'albums/' + this.media_id + '/versions',\n          items: []\n        }\n      ]\n    } else if (this.media_type === 'tracks') {\n      // track details\n      this.tabs = [\n        {\n          label: 'track_versions',\n          endpoint: 'tracks/' + this.media_id + '/versions',\n          items: []\n        }\n      ]\n    } else if (this.media_type === 'playlists') {\n      // playlist details\n      this.tabs = [\n        {\n          label: 'playlist_tracks',\n          endpoint: 'playlists/' + this.media_id + '/tracks',\n          paginated: true,\n          items: []\n        }\n      ]\n    }\n    // retrieve the tabs with additional details\n    for (var tab of this.tabs) {\n      this.getTabItems(tab)\n    }\n  },\n  methods: {\n    itemClicked (item) {\n      // listitem was clicked\n      // item in the list is clicked\n      let url = ''\n      if (item.media_type === 1) {\n        url = '/artists/' + item.item_id\n      } else if (item.media_type === 2) {\n        url = '/albums/' + item.item_id\n      } else if (item.media_type === 4) {\n        url = '/playlists/' + item.item_id\n      } else {\n        // assume track (or radio) item\n        this.$server.$emit('showContextMenu', item)\n        return\n      }\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    menuClick (item) {\n      // contextmenu button (within listitem) clicked\n      this.$server.$emit('showContextMenu', item)\n    },\n    async getItemDetails () {\n      // get the full details for the mediaitem\n      this.$store.loading = true\n      const endpoint = this.media_type + '/' + this.media_id\n      let result = await this.$server.getData(endpoint, { provider: this.provider })\n      this.itemDetails = result\n      this.$store.windowtitle = result.name\n      this.$store.loading = false\n    },\n    async getTabItems (tab) {\n      // retrieve the lists of items for each tab\n      let offset = 0\n      let limit = 50\n      let paginated = 'paginated' in tab ? tab.paginated : false\n      while (true) {\n        let items = await this.$server.getData(tab.endpoint, { offset: offset, limit: limit, provider: this.provider })\n        if (!items || items.length === 0) break\n        tab.items.push(...items)\n        offset += limit\n        if (items.length < limit || !paginated) break\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ItemDetails.vue?vue&type=template&id=2c27af9b&scoped=true&\"\nimport script from \"./ItemDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ItemDetails.vue?vue&type=style&index=0&id=2c27af9b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2c27af9b\",\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VCard,VList,VTab,VTabItem,VTabs})\n","function _typeof(obj) {\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n}\n\nfunction _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction processOptions(value) {\n  var options;\n\n  if (typeof value === 'function') {\n    // Simple options (callback-only)\n    options = {\n      callback: value\n    };\n  } else {\n    // Options object\n    options = value;\n  }\n\n  return options;\n}\nfunction throttle(callback, delay) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var timeout;\n  var lastState;\n  var currentArgs;\n\n  var throttled = function throttled(state) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    currentArgs = args;\n    if (timeout && state === lastState) return;\n    var leading = options.leading;\n\n    if (typeof leading === 'function') {\n      leading = leading(state, lastState);\n    }\n\n    if ((!timeout || state !== lastState) && leading) {\n      callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n    }\n\n    lastState = state;\n    clearTimeout(timeout);\n    timeout = setTimeout(function () {\n      callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n      timeout = 0;\n    }, delay);\n  };\n\n  throttled._clear = function () {\n    clearTimeout(timeout);\n    timeout = null;\n  };\n\n  return throttled;\n}\nfunction deepEqual(val1, val2) {\n  if (val1 === val2) return true;\n\n  if (_typeof(val1) === 'object') {\n    for (var key in val1) {\n      if (!deepEqual(val1[key], val2[key])) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  return false;\n}\n\nvar VisibilityState =\n/*#__PURE__*/\nfunction () {\n  function VisibilityState(el, options, vnode) {\n    _classCallCheck(this, VisibilityState);\n\n    this.el = el;\n    this.observer = null;\n    this.frozen = false;\n    this.createObserver(options, vnode);\n  }\n\n  _createClass(VisibilityState, [{\n    key: \"createObserver\",\n    value: function createObserver(options, vnode) {\n      var _this = this;\n\n      if (this.observer) {\n        this.destroyObserver();\n      }\n\n      if (this.frozen) return;\n      this.options = processOptions(options);\n\n      this.callback = function (result, entry) {\n        _this.options.callback(result, entry);\n\n        if (result && _this.options.once) {\n          _this.frozen = true;\n\n          _this.destroyObserver();\n        }\n      }; // Throttle\n\n\n      if (this.callback && this.options.throttle) {\n        var _ref = this.options.throttleOptions || {},\n            _leading = _ref.leading;\n\n        this.callback = throttle(this.callback, this.options.throttle, {\n          leading: function leading(state) {\n            return _leading === 'both' || _leading === 'visible' && state || _leading === 'hidden' && !state;\n          }\n        });\n      }\n\n      this.oldResult = undefined;\n      this.observer = new IntersectionObserver(function (entries) {\n        var entry = entries[0];\n\n        if (entries.length > 1) {\n          var intersectingEntry = entries.find(function (e) {\n            return e.isIntersecting;\n          });\n\n          if (intersectingEntry) {\n            entry = intersectingEntry;\n          }\n        }\n\n        if (_this.callback) {\n          // Use isIntersecting if possible because browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport.\n          var result = entry.isIntersecting && entry.intersectionRatio >= _this.threshold;\n          if (result === _this.oldResult) return;\n          _this.oldResult = result;\n\n          _this.callback(result, entry);\n        }\n      }, this.options.intersection); // Wait for the element to be in document\n\n      vnode.context.$nextTick(function () {\n        if (_this.observer) {\n          _this.observer.observe(_this.el);\n        }\n      });\n    }\n  }, {\n    key: \"destroyObserver\",\n    value: function destroyObserver() {\n      if (this.observer) {\n        this.observer.disconnect();\n        this.observer = null;\n      } // Cancel throttled call\n\n\n      if (this.callback && this.callback._clear) {\n        this.callback._clear();\n\n        this.callback = null;\n      }\n    }\n  }, {\n    key: \"threshold\",\n    get: function get() {\n      return this.options.intersection && this.options.intersection.threshold || 0;\n    }\n  }]);\n\n  return VisibilityState;\n}();\n\nfunction bind(el, _ref2, vnode) {\n  var value = _ref2.value;\n  if (!value) return;\n\n  if (typeof IntersectionObserver === 'undefined') {\n    console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');\n  } else {\n    var state = new VisibilityState(el, value, vnode);\n    el._vue_visibilityState = state;\n  }\n}\n\nfunction update(el, _ref3, vnode) {\n  var value = _ref3.value,\n      oldValue = _ref3.oldValue;\n  if (deepEqual(value, oldValue)) return;\n  var state = el._vue_visibilityState;\n\n  if (!value) {\n    unbind(el);\n    return;\n  }\n\n  if (state) {\n    state.createObserver(value, vnode);\n  } else {\n    bind(el, {\n      value: value\n    }, vnode);\n  }\n}\n\nfunction unbind(el) {\n  var state = el._vue_visibilityState;\n\n  if (state) {\n    state.destroyObserver();\n    delete el._vue_visibilityState;\n  }\n}\n\nvar ObserveVisibility = {\n  bind: bind,\n  update: update,\n  unbind: unbind\n};\n\nfunction install(Vue) {\n  Vue.directive('observe-visibility', ObserveVisibility);\n  /* -- Add more components here -- */\n}\n/* -- Plugin definition & Auto-install -- */\n\n/* You shouldn't have to modify the code below */\n// Plugin\n\nvar plugin = {\n  // eslint-disable-next-line no-undef\n  version: \"0.4.6\",\n  install: install\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n  GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n  GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n  GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { ObserveVisibility, install };\n","module.exports = __webpack_public_path__ + \"img/info_gradient.4db55f47.jpg\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=style&index=0&id=2c27af9b&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemDetails.vue?vue&type=style&index=0&id=2c27af9b&scoped=true&lang=css&\""],"sourceRoot":""}
\ No newline at end of file
diff --git a/music_assistant/web/js/playerqueue.39a08978.js b/music_assistant/web/js/playerqueue.39a08978.js
deleted file mode 100644 (file)
index 555a17c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["playerqueue"],{b097:function(e,t,i){"use strict";i.r(t);var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("section",[i("v-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[i("v-tab",[e._v(" "+e._s(e.$t("queue_next_tracks")+" ("+e.next_items.length+")"))]),i("v-tab-item",[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.next_items,"item-size":72,"key-field":"queue_item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var s=t.item;return[i("ListviewItem",{attrs:{item:s,hideavatar:3==s.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:e.$store.isMobile,hidelibrary:e.$store.isMobile,hidemenu:e.$store.isMobile},on:{click:e.itemClicked,menuClick:e.menuClick}})]}}])})],1)],1),i("v-tab",[e._v(" "+e._s(e.$t("queue_previous_tracks")+" ("+e.previous_items.length+")"))]),i("v-tab-item",[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.previous_items,"item-size":72,"key-field":"queue_item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var s=t.item;return[i("ListviewItem",{attrs:{item:s,hideavatar:3==s.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:e.$store.isMobile,hidelibrary:e.$store.isMobile,hidemenu:e.$store.isMobile},on:{click:e.itemClicked,menuClick:e.menuClick}})]}}])})],1)],1)],1)],1)},r=[],a=(i("a4d3"),i("e01a"),i("d28b"),i("fb6a"),i("d3b7"),i("3ca3"),i("ddb0"),i("96cf"),i("89ba")),n=i("2b0e"),u=i("d3cc"),c={components:{ListviewItem:u["a"]},props:{},data:function(){return{selected:[2],items:[]}},computed:{next_items:function(){return this.items&&this.$server.activePlayer?this.items.slice(this.$server.activePlayer.cur_queue_index):[]},previous_items:function(){return this.items&&this.$server.activePlayer?this.items.slice(0,this.$server.activePlayer.cur_queue_index):[]}},created:function(){this.$store.windowtitle=this.$t("queue"),this.$server.activePlayer&&this.getItems(),this.$server.$on("queue updated",this.queueUpdatedMsg),this.$server.$on("new player selected",this.queueUpdatedMsg)},beforeDestroy:function(){this.$server.$off("queue updated"),this.$server.$off("new player selected")},methods:{itemClicked:function(e){var t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showContextMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(e){this.$server.$emit("showContextMenu",e)},queueUpdatedMsg:function(e){e===this.$server.activePlayerId&&this.getItems()},getItems:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(){var t,i,s,r,a,u,c,o,l,d,m;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t=0,i=50,s=0,r="players/"+this.$server.activePlayerId+"/queue";case 4:return e.next=7,this.$server.getData(r,{offset:t,limit:i});case 7:if(a=e.sent,a&&0!==a.length){e.next=10;break}return e.abrupt("break",34);case 10:for(u=!0,c=!1,o=void 0,e.prev=13,l=a[Symbol.iterator]();!(u=(d=l.next()).done);u=!0)m=d.value,this.items.length>=s?n["a"].set(this.items,s,m):this.items.push(m),s+=1;e.next=21;break;case 17:e.prev=17,e.t0=e["catch"](13),c=!0,o=e.t0;case 21:e.prev=21,e.prev=22,u||null==l.return||l.return();case 24:if(e.prev=24,!c){e.next=27;break}throw o;case 27:return e.finish(24);case 28:return e.finish(21);case 29:if(t+=i,!(a.length<i)){e.next=32;break}return e.abrupt("break",34);case 32:e.next=4;break;case 34:this.items.length>s&&(this.items=this.items.slice(0,s+1));case 35:case"end":return e.stop()}}),e,this,[[13,17,21,29],[22,,24,28]])})));function t(){return e.apply(this,arguments)}return t}()}},o=c,l=i("2877"),d=i("6544"),m=i.n(d),h=i("8860"),v=i("71a3"),p=i("c671"),b=i("fe57"),f=Object(l["a"])(o,s,r,!1,null,null,null);t["default"]=f.exports;m()(f,{VList:h["a"],VTab:v["a"],VTabItem:p["a"],VTabs:b["a"]})}}]);
-//# sourceMappingURL=playerqueue.39a08978.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/playerqueue.39a08978.js.map b/music_assistant/web/js/playerqueue.39a08978.js.map
deleted file mode 100644 (file)
index d971357..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./src/views/PlayerQueue.vue?7c8a","webpack:///src/views/PlayerQueue.vue","webpack:///./src/views/PlayerQueue.vue?86d4","webpack:///./src/views/PlayerQueue.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","model","value","callback","$$v","activeTab","expression","_v","_s","$t","next_items","length","attrs","staticClass","scopedSlots","_u","key","fn","ref","item","media_type","$store","isMobile","on","itemClicked","menuClick","previous_items","staticRenderFns","components","ListviewItem","props","data","selected","items","computed","$server","activePlayer","slice","cur_queue_index","created","windowtitle","getItems","$on","queueUpdatedMsg","beforeDestroy","$off","methods","url","item_id","$emit","$router","push","msgDetails","activePlayerId","component","VList","VTab","VTabItem","VTabs"],"mappings":"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","file":"js/playerqueue.39a08978.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-tabs',{model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_c('v-tab',[_vm._v(\" \"+_vm._s(_vm.$t('queue_next_tracks') + ' (' + _vm.next_items.length + ')'))]),_c('v-tab-item',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.next_items,\"item-size\":72,\"key-field\":\"queue_item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":_vm.$store.isMobile},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})]}}])})],1)],1),_c('v-tab',[_vm._v(\" \"+_vm._s(_vm.$t('queue_previous_tracks') + ' (' + _vm.previous_items.length + ')'))]),_c('v-tab-item',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.previous_items,\"item-size\":72,\"key-field\":\"queue_item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":_vm.$store.isMobile},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})]}}])})],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-tabs v-model=\"activeTab\">\n      <v-tab> {{ $t('queue_next_tracks') + ' (' + next_items.length + ')' }}</v-tab>\n      <v-tab-item>\n      <v-list two-line>\n        <RecycleScroller\n          class=\"scroller\"\n          :items=\"next_items\"\n          :item-size=\"72\"\n          key-field=\"queue_item_id\"\n          v-slot=\"{ item }\"\n          page-mode\n        >\n          <ListviewItem\n            v-bind:item=\"item\"\n            :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n            :hidetracknum=\"true\"\n            :hideproviders=\"$store.isMobile\"\n            :hidelibrary=\"$store.isMobile\"\n            :hidemenu=\"$store.isMobile\"\n            v-on:click=\"itemClicked\"\n            v-on:menuClick=\"menuClick\"\n          ></ListviewItem>\n        </RecycleScroller>\n      </v-list>\n      </v-tab-item>\n      <v-tab> {{ $t('queue_previous_tracks') + ' (' + previous_items.length + ')' }}</v-tab>\n      <v-tab-item>\n      <v-list two-line>\n        <RecycleScroller\n          class=\"scroller\"\n          :items=\"previous_items\"\n          :item-size=\"72\"\n          key-field=\"queue_item_id\"\n          v-slot=\"{ item }\"\n          page-mode\n        >\n          <ListviewItem\n            v-bind:item=\"item\"\n            :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n            :hidetracknum=\"true\"\n            :hideproviders=\"$store.isMobile\"\n            :hidelibrary=\"$store.isMobile\"\n            :hidemenu=\"$store.isMobile\"\n            v-on:click=\"itemClicked\"\n            v-on:menuClick=\"menuClick\"\n          ></ListviewItem>\n        </RecycleScroller>\n      </v-list>\n      </v-tab-item>\n    </v-tabs>\n  </section>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n  components: {\n    ListviewItem\n  },\n  props: {},\n  data () {\n    return {\n      selected: [2],\n      items: []\n    }\n  },\n  computed: {\n    next_items () {\n      if (this.items && this.$server.activePlayer) {\n        return this.items.slice(this.$server.activePlayer.cur_queue_index)\n      } else return []\n    },\n    previous_items () {\n      if (this.items && this.$server.activePlayer) {\n        return this.items.slice(0, this.$server.activePlayer.cur_queue_index)\n      } else return []\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t('queue')\n    if (this.$server.activePlayer) {\n      this.getItems()\n    }\n    this.$server.$on('queue updated', this.queueUpdatedMsg)\n    this.$server.$on('new player selected', this.queueUpdatedMsg)\n  },\n  beforeDestroy () {\n    this.$server.$off('queue updated')\n    this.$server.$off('new player selected')\n  },\n  methods: {\n    itemClicked (item) {\n      // item in the list is clicked\n      let url = ''\n      if (item.media_type === 1) {\n        url = '/artists/' + item.item_id\n      } else if (item.media_type === 2) {\n        url = '/albums/' + item.item_id\n      } else if (item.media_type === 4) {\n        url = '/playlists/' + item.item_id\n      } else {\n        // assume track (or radio) item\n        this.$server.$emit('showContextMenu', item)\n        return\n      }\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    menuClick (item) {\n      // contextmenu button clicked\n      this.$server.$emit('showContextMenu', item)\n    },\n    queueUpdatedMsg (msgDetails) {\n      // got queue updated event\n      if (msgDetails === this.$server.activePlayerId) {\n        this.getItems()\n      }\n    },\n    async getItems () {\n      // retrieve the queue items\n      var offset = 0\n      var limit = 50\n      var index = 0\n      const endpoint = 'players/' + this.$server.activePlayerId + '/queue'\n      while (true) {\n        let items = await this.$server.getData(endpoint, { offset: offset, limit: limit })\n        if (!items || items.length === 0) break\n        for (var item of items) {\n          if (this.items.length >= index) {\n            Vue.set(this.items, index, item)\n          } else this.items.push(item)\n          index += 1\n        }\n        offset += limit\n        if (items.length < limit) break\n      }\n      // truncate list if needed\n      if (this.items.length > index) {\n        this.items = this.items.slice(0, index + 1)\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerQueue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerQueue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerQueue.vue?vue&type=template&id=76db21fc&\"\nimport script from \"./PlayerQueue.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerQueue.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VList,VTab,VTabItem,VTabs})\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/music_assistant/web/js/playerqueue.5fa460a7.js b/music_assistant/web/js/playerqueue.5fa460a7.js
new file mode 100644 (file)
index 0000000..c72230a
--- /dev/null
@@ -0,0 +1,2 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["playerqueue"],{b097:function(e,t,i){"use strict";i.r(t);var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("section",[i("v-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[i("v-tab",[e._v(" "+e._s(e.$t("queue_next_tracks")+" ("+e.next_items.length+")"))]),i("v-tab-item",[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.next_items,"item-size":72,"key-field":"queue_item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var s=t.item;return[i("ListviewItem",{attrs:{item:s,hideavatar:3==s.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:e.$store.isMobile,hidelibrary:e.$store.isMobile,hidemenu:e.$store.isMobile},on:{click:e.itemClicked,menuClick:e.menuClick}})]}}])})],1)],1),i("v-tab",[e._v(" "+e._s(e.$t("queue_previous_tracks")+" ("+e.previous_items.length+")"))]),i("v-tab-item",[i("v-list",{attrs:{"two-line":""}},[i("RecycleScroller",{staticClass:"scroller",attrs:{items:e.previous_items,"item-size":72,"key-field":"queue_item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var s=t.item;return[i("ListviewItem",{attrs:{item:s,hideavatar:3==s.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:e.$store.isMobile,hidelibrary:e.$store.isMobile,hidemenu:e.$store.isMobile},on:{click:e.itemClicked,menuClick:e.menuClick}})]}}])})],1)],1)],1)],1)},r=[],a=(i("a4d3"),i("e01a"),i("d28b"),i("fb6a"),i("d3b7"),i("3ca3"),i("ddb0"),i("96cf"),i("89ba")),n=i("2b0e"),u=i("d3cc"),c={components:{ListviewItem:u["a"]},props:{},data:function(){return{selected:[2],items:[]}},computed:{next_items:function(){return this.items&&this.$server.activePlayer?this.items.slice(this.$server.activePlayer.cur_queue_index):[]},previous_items:function(){return this.items&&this.$server.activePlayer?this.items.slice(0,this.$server.activePlayer.cur_queue_index):[]}},created:function(){this.$store.windowtitle=this.$t("queue"),this.$server.activePlayer&&this.getItems(),this.$server.$on("queue updated",this.queueUpdatedMsg),this.$server.$on("new player selected",this.queueUpdatedMsg)},beforeDestroy:function(){this.$server.$off("queue updated"),this.$server.$off("new player selected")},methods:{itemClicked:function(e){var t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showContextMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(e){this.$server.$emit("showContextMenu",e)},queueUpdatedMsg:function(e){e===this.$server.activePlayerId&&this.getItems()},getItems:function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(){var t,i,s,r,a,u,c,o,l,d,m;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t=0,i=50,s=0,r="players/"+this.$server.activePlayerId+"/queue";case 4:return e.next=7,this.$server.getData(r,{offset:t,limit:i});case 7:if(a=e.sent,a&&0!==a.length){e.next=10;break}return e.abrupt("break",34);case 10:for(u=!0,c=!1,o=void 0,e.prev=13,l=a[Symbol.iterator]();!(u=(d=l.next()).done);u=!0)m=d.value,this.items.length>=s?n["a"].set(this.items,s,m):this.items.push(m),s+=1;e.next=21;break;case 17:e.prev=17,e.t0=e["catch"](13),c=!0,o=e.t0;case 21:e.prev=21,e.prev=22,u||null==l.return||l.return();case 24:if(e.prev=24,!c){e.next=27;break}throw o;case 27:return e.finish(24);case 28:return e.finish(21);case 29:if(t+=i,!(a.length<i)){e.next=32;break}return e.abrupt("break",34);case 32:e.next=4;break;case 34:this.items.length>s&&(this.items=this.items.slice(0,s+1));case 35:case"end":return e.stop()}}),e,this,[[13,17,21,29],[22,,24,28]])})));function t(){return e.apply(this,arguments)}return t}()}},o=c,l=i("2877"),d=i("6544"),m=i.n(d),h=i("8860"),v=i("71a3"),p=i("c671"),b=i("fe57"),f=Object(l["a"])(o,s,r,!1,null,null,null);t["default"]=f.exports;m()(f,{VList:h["a"],VTab:v["a"],VTabItem:p["a"],VTabs:b["a"]})}}]);
+//# sourceMappingURL=playerqueue.5fa460a7.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/playerqueue.5fa460a7.js.map b/music_assistant/web/js/playerqueue.5fa460a7.js.map
new file mode 100644 (file)
index 0000000..4064445
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///./src/views/PlayerQueue.vue?a816","webpack:///src/views/PlayerQueue.vue","webpack:///./src/views/PlayerQueue.vue?86d4","webpack:///./src/views/PlayerQueue.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","model","value","callback","$$v","activeTab","expression","_v","_s","$t","next_items","length","attrs","staticClass","scopedSlots","_u","key","fn","ref","item","media_type","$store","isMobile","on","itemClicked","menuClick","previous_items","staticRenderFns","components","ListviewItem","props","data","selected","items","computed","$server","activePlayer","slice","cur_queue_index","created","windowtitle","getItems","$on","queueUpdatedMsg","beforeDestroy","$off","methods","url","item_id","$emit","$router","push","msgDetails","activePlayerId","component","VList","VTab","VTabItem","VTabs"],"mappings":"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","file":"js/playerqueue.5fa460a7.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-tabs',{model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_c('v-tab',[_vm._v(\" \"+_vm._s(_vm.$t('queue_next_tracks') + ' (' + _vm.next_items.length + ')'))]),_c('v-tab-item',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.next_items,\"item-size\":72,\"key-field\":\"queue_item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":_vm.$store.isMobile},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})]}}])})],1)],1),_c('v-tab',[_vm._v(\" \"+_vm._s(_vm.$t('queue_previous_tracks') + ' (' + _vm.previous_items.length + ')'))]),_c('v-tab-item',[_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":_vm.previous_items,\"item-size\":72,\"key-field\":\"queue_item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hidelibrary\":_vm.$store.isMobile,\"hidemenu\":_vm.$store.isMobile},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})]}}])})],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-tabs v-model=\"activeTab\">\n      <v-tab> {{ $t('queue_next_tracks') + ' (' + next_items.length + ')' }}</v-tab>\n      <v-tab-item>\n      <v-list two-line>\n        <RecycleScroller\n          class=\"scroller\"\n          :items=\"next_items\"\n          :item-size=\"72\"\n          key-field=\"queue_item_id\"\n          v-slot=\"{ item }\"\n          page-mode\n        >\n          <ListviewItem\n            v-bind:item=\"item\"\n            :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n            :hidetracknum=\"true\"\n            :hideproviders=\"$store.isMobile\"\n            :hidelibrary=\"$store.isMobile\"\n            :hidemenu=\"$store.isMobile\"\n            v-on:click=\"itemClicked\"\n            v-on:menuClick=\"menuClick\"\n          ></ListviewItem>\n        </RecycleScroller>\n      </v-list>\n      </v-tab-item>\n      <v-tab> {{ $t('queue_previous_tracks') + ' (' + previous_items.length + ')' }}</v-tab>\n      <v-tab-item>\n      <v-list two-line>\n        <RecycleScroller\n          class=\"scroller\"\n          :items=\"previous_items\"\n          :item-size=\"72\"\n          key-field=\"queue_item_id\"\n          v-slot=\"{ item }\"\n          page-mode\n        >\n          <ListviewItem\n            v-bind:item=\"item\"\n            :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n            :hidetracknum=\"true\"\n            :hideproviders=\"$store.isMobile\"\n            :hidelibrary=\"$store.isMobile\"\n            :hidemenu=\"$store.isMobile\"\n            v-on:click=\"itemClicked\"\n            v-on:menuClick=\"menuClick\"\n          ></ListviewItem>\n        </RecycleScroller>\n      </v-list>\n      </v-tab-item>\n    </v-tabs>\n  </section>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n  components: {\n    ListviewItem\n  },\n  props: {},\n  data () {\n    return {\n      selected: [2],\n      items: []\n    }\n  },\n  computed: {\n    next_items () {\n      if (this.items && this.$server.activePlayer) {\n        return this.items.slice(this.$server.activePlayer.cur_queue_index)\n      } else return []\n    },\n    previous_items () {\n      if (this.items && this.$server.activePlayer) {\n        return this.items.slice(0, this.$server.activePlayer.cur_queue_index)\n      } else return []\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t('queue')\n    if (this.$server.activePlayer) {\n      this.getItems()\n    }\n    this.$server.$on('queue updated', this.queueUpdatedMsg)\n    this.$server.$on('new player selected', this.queueUpdatedMsg)\n  },\n  beforeDestroy () {\n    this.$server.$off('queue updated')\n    this.$server.$off('new player selected')\n  },\n  methods: {\n    itemClicked (item) {\n      // item in the list is clicked\n      let url = ''\n      if (item.media_type === 1) {\n        url = '/artists/' + item.item_id\n      } else if (item.media_type === 2) {\n        url = '/albums/' + item.item_id\n      } else if (item.media_type === 4) {\n        url = '/playlists/' + item.item_id\n      } else {\n        // assume track (or radio) item\n        this.$server.$emit('showContextMenu', item)\n        return\n      }\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    menuClick (item) {\n      // contextmenu button clicked\n      this.$server.$emit('showContextMenu', item)\n    },\n    queueUpdatedMsg (msgDetails) {\n      // got queue updated event\n      if (msgDetails === this.$server.activePlayerId) {\n        this.getItems()\n      }\n    },\n    async getItems () {\n      // retrieve the queue items\n      var offset = 0\n      var limit = 50\n      var index = 0\n      const endpoint = 'players/' + this.$server.activePlayerId + '/queue'\n      while (true) {\n        let items = await this.$server.getData(endpoint, { offset: offset, limit: limit })\n        if (!items || items.length === 0) break\n        for (var item of items) {\n          if (this.items.length >= index) {\n            Vue.set(this.items, index, item)\n          } else this.items.push(item)\n          index += 1\n        }\n        offset += limit\n        if (items.length < limit) break\n      }\n      // truncate list if needed\n      if (this.items.length > index) {\n        this.items = this.items.slice(0, index + 1)\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerQueue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerQueue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerQueue.vue?vue&type=template&id=76db21fc&\"\nimport script from \"./PlayerQueue.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerQueue.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VList,VTab,VTabItem,VTabs})\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/music_assistant/web/js/search.56af5cc1.js b/music_assistant/web/js/search.56af5cc1.js
new file mode 100644 (file)
index 0000000..0c2e899
--- /dev/null
@@ -0,0 +1,2 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["search"],{"2d3b":function(t,e,i){"use strict";i.r(e);var s=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("section",[i("v-text-field",{staticStyle:{"margin-left":"30px","margin-right":"30px","margin-top":"10px"},attrs:{solo:"",clearable:"",label:t.$t("type_to_search"),"append-icon":"search"},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.Search(e)},"click:append":t.Search},model:{value:t.searchQuery,callback:function(e){t.searchQuery=e},expression:"searchQuery"}}),i("v-tabs",{attrs:{color:"transparent",light:"","slider-color":"black"},model:{value:t.active,callback:function(e){t.active=e},expression:"active"}},[t.tracks.length?i("v-tab",{attrs:{ripple:""}},[t._v(t._s(t.$t("tracks")))]):t._e(),t.tracks.length?i("v-tab-item",[i("v-card",{attrs:{flat:""}},[i("v-list",{staticStyle:{"margin-left":"15px","margin-right":"15px"},attrs:{"two-line":""}},t._l(t.tracks,(function(e,s){return i("listviewItem",{key:e.db_id,attrs:{item:e,totalitems:t.tracks.length,index:s,hideavatar:t.$store.isMobile,hidetracknum:!0,hideproviders:t.$store.isMobile,hideduration:t.$store.isMobile,showlibrary:!0},on:{click:t.itemClicked,menuClick:t.menuClick}})})),1)],1)],1):t._e(),t.artists.length?i("v-tab",{attrs:{ripple:""}},[t._v(t._s(t.$t("artists")))]):t._e(),t.artists.length?i("v-tab-item",[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},t._l(t.artists,(function(e,s){return i("listviewItem",{key:e.db_id,attrs:{item:e,totalitems:t.artists.length,index:s,hideproviders:t.$store.isMobile},on:{click:t.itemClicked,menuClick:t.menuClick}})})),1)],1)],1):t._e(),t.albums.length?i("v-tab",{attrs:{ripple:""}},[t._v(t._s(t.$t("albums")))]):t._e(),t.albums.length?i("v-tab-item",[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},t._l(t.albums,(function(e,s){return i("listviewItem",{key:e.db_id,attrs:{item:e,totalitems:t.albums.length,index:s,hideproviders:t.$store.isMobile},on:{click:t.itemClicked,menuClick:t.menuClick}})})),1)],1)],1):t._e(),t.playlists.length?i("v-tab",{attrs:{ripple:""}},[t._v(t._s(t.$t("playlists")))]):t._e(),t.playlists.length?i("v-tab-item",[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},t._l(t.playlists,(function(e,s){return i("listviewItem",{key:e.db_id,attrs:{item:e,totalitems:t.playlists.length,index:s,hidelibrary:!0},on:{click:t.itemClicked,menuClick:t.menuClick}})})),1)],1)],1):t._e()],1)],1)},a=[],r=(i("96cf"),i("89ba")),l=i("d3cc"),n={components:{ListviewItem:l["a"]},props:{},data:function(){return{selected:[2],artists:[],albums:[],tracks:[],playlists:[],timeout:null,active:0,searchQuery:""}},created:function(){this.$store.windowtitle=this.$t("search")},methods:{itemClicked:function(t){var e="";if(1===t.media_type)e="/artists/"+t.item_id;else if(2===t.media_type)e="/albums/"+t.item_id;else{if(4!==t.media_type)return void this.$server.$emit("showContextMenu",t);e="/playlists/"+t.item_id}this.$router.push({path:e,query:{provider:t.provider}})},menuClick:function(t){this.$server.$emit("showContextMenu",t)},Search:function(){var t=Object(r["a"])(regeneratorRuntime.mark((function t(){var e,i;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(this.artists=[],this.albums=[],this.tracks=[],this.playlists=[],!this.searchQuery){t.next=15;break}return this.$store.loading=!0,e={query:this.searchQuery,online:!0,limit:10},t.next=9,this.$server.getData("search",e);case 9:i=t.sent,this.artists=i.artists,this.albums=i.albums,this.tracks=i.tracks,this.playlists=i.playlists,this.$store.loading=!1;case 15:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()}},c=n,o=i("2877"),u=i("6544"),h=i.n(u),m=i("b0af"),d=i("8860"),p=i("71a3"),v=i("c671"),b=i("fe57"),k=i("8654"),y=Object(o["a"])(c,s,a,!1,null,null,null);e["default"]=y.exports;h()(y,{VCard:m["a"],VList:d["a"],VTab:p["a"],VTabItem:v["a"],VTabs:b["a"],VTextField:k["a"]})}}]);
+//# sourceMappingURL=search.56af5cc1.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/search.56af5cc1.js.map b/music_assistant/web/js/search.56af5cc1.js.map
new file mode 100644 (file)
index 0000000..e968150
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///./src/views/Search.vue?1d99","webpack:///src/views/Search.vue","webpack:///./src/views/Search.vue?836e","webpack:///./src/views/Search.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticStyle","attrs","$t","on","$event","type","indexOf","_k","keyCode","key","Search","model","value","callback","$$v","searchQuery","expression","active","tracks","_v","_s","_e","_l","item","index","db_id","length","$store","isMobile","itemClicked","menuClick","artists","albums","playlists","staticRenderFns","components","ListviewItem","props","data","selected","timeout","created","windowtitle","methods","media_type","url","item_id","$server","$emit","$router","push","component","VCard","VList","VTab","VTabItem","VTabs","VTextField"],"mappings":"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","file":"js/search.56af5cc1.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-text-field',{staticStyle:{\"margin-left\":\"30px\",\"margin-right\":\"30px\",\"margin-top\":\"10px\"},attrs:{\"solo\":\"\",\"clearable\":\"\",\"label\":_vm.$t('type_to_search'),\"append-icon\":\"search\"},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.Search($event)},\"click:append\":_vm.Search},model:{value:(_vm.searchQuery),callback:function ($$v) {_vm.searchQuery=$$v},expression:\"searchQuery\"}}),_c('v-tabs',{attrs:{\"color\":\"transparent\",\"light\":\"\",\"slider-color\":\"black\"},model:{value:(_vm.active),callback:function ($$v) {_vm.active=$$v},expression:\"active\"}},[(_vm.tracks.length)?_c('v-tab',{attrs:{\"ripple\":\"\"}},[_vm._v(_vm._s(_vm.$t(\"tracks\")))]):_vm._e(),(_vm.tracks.length)?_c('v-tab-item',[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{staticStyle:{\"margin-left\":\"15px\",\"margin-right\":\"15px\"},attrs:{\"two-line\":\"\"}},_vm._l((_vm.tracks),function(item,index){return _c('listviewItem',{key:item.db_id,attrs:{\"item\":item,\"totalitems\":_vm.tracks.length,\"index\":index,\"hideavatar\":_vm.$store.isMobile,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hideduration\":_vm.$store.isMobile,\"showlibrary\":true},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})}),1)],1)],1):_vm._e(),(_vm.artists.length)?_c('v-tab',{attrs:{\"ripple\":\"\"}},[_vm._v(_vm._s(_vm.$t(\"artists\")))]):_vm._e(),(_vm.artists.length)?_c('v-tab-item',[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},_vm._l((_vm.artists),function(item,index){return _c('listviewItem',{key:item.db_id,attrs:{\"item\":item,\"totalitems\":_vm.artists.length,\"index\":index,\"hideproviders\":_vm.$store.isMobile},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})}),1)],1)],1):_vm._e(),(_vm.albums.length)?_c('v-tab',{attrs:{\"ripple\":\"\"}},[_vm._v(_vm._s(_vm.$t(\"albums\")))]):_vm._e(),(_vm.albums.length)?_c('v-tab-item',[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},_vm._l((_vm.albums),function(item,index){return _c('listviewItem',{key:item.db_id,attrs:{\"item\":item,\"totalitems\":_vm.albums.length,\"index\":index,\"hideproviders\":_vm.$store.isMobile},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})}),1)],1)],1):_vm._e(),(_vm.playlists.length)?_c('v-tab',{attrs:{\"ripple\":\"\"}},[_vm._v(_vm._s(_vm.$t(\"playlists\")))]):_vm._e(),(_vm.playlists.length)?_c('v-tab-item',[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},_vm._l((_vm.playlists),function(item,index){return _c('listviewItem',{key:item.db_id,attrs:{\"item\":item,\"totalitems\":_vm.playlists.length,\"index\":index,\"hidelibrary\":true},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})}),1)],1)],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-text-field\n      solo\n      clearable\n      :label=\"$t('type_to_search')\"\n      append-icon=\"search\"\n      v-model=\"searchQuery\"\n      v-on:keyup.enter=\"Search\"\n      @click:append=\"Search\"\n      style=\"margin-left:30px; margin-right:30px; margin-top:10px\"\n    >\n    </v-text-field>\n\n    <v-tabs v-model=\"active\" color=\"transparent\" light slider-color=\"black\">\n      <v-tab ripple v-if=\"tracks.length\">{{ $t(\"tracks\") }}</v-tab>\n      <v-tab-item v-if=\"tracks.length\">\n        <v-card flat>\n          <v-list two-line style=\"margin-left:15px; margin-right:15px\">\n            <listviewItem\n              v-for=\"(item, index) in tracks\"\n              v-bind:item=\"item\"\n              :key=\"item.db_id\"\n              v-bind:totalitems=\"tracks.length\"\n              v-bind:index=\"index\"\n              :hideavatar=\"$store.isMobile\"\n              :hidetracknum=\"true\"\n              :hideproviders=\"$store.isMobile\"\n              :hideduration=\"$store.isMobile\"\n              :showlibrary=\"true\"\n              v-on:click=\"itemClicked\"\n              v-on:menuClick=\"menuClick\"\n            >\n            </listviewItem>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n\n      <v-tab ripple v-if=\"artists.length\">{{ $t(\"artists\") }}</v-tab>\n      <v-tab-item v-if=\"artists.length\">\n        <v-card flat>\n          <v-list two-line>\n            <listviewItem\n              v-for=\"(item, index) in artists\"\n              v-bind:item=\"item\"\n              :key=\"item.db_id\"\n              v-bind:totalitems=\"artists.length\"\n              v-bind:index=\"index\"\n              :hideproviders=\"$store.isMobile\"\n              v-on:click=\"itemClicked\"\n          v-on:menuClick=\"menuClick\"\n            >\n            </listviewItem>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n\n      <v-tab ripple v-if=\"albums.length\">{{ $t(\"albums\") }}</v-tab>\n      <v-tab-item v-if=\"albums.length\">\n        <v-card flat>\n          <v-list two-line>\n            <listviewItem\n              v-for=\"(item, index) in albums\"\n              v-bind:item=\"item\"\n              :key=\"item.db_id\"\n              v-bind:totalitems=\"albums.length\"\n              v-bind:index=\"index\"\n              :hideproviders=\"$store.isMobile\"\n              v-on:click=\"itemClicked\"\n              v-on:menuClick=\"menuClick\"\n            >\n            </listviewItem>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n\n      <v-tab ripple v-if=\"playlists.length\">{{ $t(\"playlists\") }}</v-tab>\n      <v-tab-item v-if=\"playlists.length\">\n        <v-card flat>\n          <v-list two-line>\n            <listviewItem\n              v-for=\"(item, index) in playlists\"\n              v-bind:item=\"item\"\n              :key=\"item.db_id\"\n              v-bind:totalitems=\"playlists.length\"\n              v-bind:index=\"index\"\n              :hidelibrary=\"true\"\n              v-on:click=\"itemClicked\"\n              v-on:menuClick=\"menuClick\"\n            >\n            </listviewItem>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n    </v-tabs>\n  </section>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n  components: {\n    ListviewItem\n  },\n  props: { },\n  data () {\n    return {\n      selected: [2],\n      artists: [],\n      albums: [],\n      tracks: [],\n      playlists: [],\n      timeout: null,\n      active: 0,\n      searchQuery: ''\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t('search')\n  },\n  methods: {\n    itemClicked (item) {\n      // item in the list is clicked\n      let url = ''\n      if (item.media_type === 1) {\n        url = '/artists/' + item.item_id\n      } else if (item.media_type === 2) {\n        url = '/albums/' + item.item_id\n      } else if (item.media_type === 4) {\n        url = '/playlists/' + item.item_id\n      } else {\n        // assume track (or radio) item\n        this.$server.$emit('showContextMenu', item)\n        return\n      }\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    menuClick (item) {\n      // contextmenu button clicked\n      this.$server.$emit('showContextMenu', item)\n    },\n    async Search () {\n      this.artists = []\n      this.albums = []\n      this.tracks = []\n      this.playlists = []\n      if (this.searchQuery) {\n        this.$store.loading = true\n        let params = { query: this.searchQuery, online: true, limit: 10 }\n        let result = await this.$server.getData('search', params)\n        this.artists = result.artists\n        this.albums = result.albums\n        this.tracks = result.tracks\n        this.playlists = result.playlists\n        this.$store.loading = false\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Search.vue?vue&type=template&id=962653e8&\"\nimport script from \"./Search.vue?vue&type=script&lang=js&\"\nexport * from \"./Search.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VCard,VList,VTab,VTabItem,VTabs,VTextField})\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/music_assistant/web/js/search.5fcda21d.js b/music_assistant/web/js/search.5fcda21d.js
deleted file mode 100644 (file)
index 16a44cf..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["search"],{"2d3b":function(t,e,i){"use strict";i.r(e);var s=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("section",[i("v-text-field",{staticStyle:{"margin-left":"30px","margin-right":"30px","margin-top":"10px"},attrs:{solo:"",clearable:"",label:t.$t("type_to_search"),"append-icon":"search"},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.Search(e)},"click:append":t.Search},model:{value:t.searchQuery,callback:function(e){t.searchQuery=e},expression:"searchQuery"}}),i("v-tabs",{attrs:{color:"transparent",light:"","slider-color":"black"},model:{value:t.active,callback:function(e){t.active=e},expression:"active"}},[t.tracks.length?i("v-tab",{attrs:{ripple:""}},[t._v(t._s(t.$t("tracks")))]):t._e(),t.tracks.length?i("v-tab-item",[i("v-card",{attrs:{flat:""}},[i("v-list",{staticStyle:{"margin-left":"15px","margin-right":"15px"},attrs:{"two-line":""}},t._l(t.tracks,(function(e,s){return i("listviewItem",{key:e.db_id,attrs:{item:e,totalitems:t.tracks.length,index:s,hideavatar:t.$store.isMobile,hidetracknum:!0,hideproviders:t.$store.isMobile,hideduration:t.$store.isMobile,showlibrary:!0},on:{click:t.itemClicked,menuClick:t.menuClick}})})),1)],1)],1):t._e(),t.artists.length?i("v-tab",{attrs:{ripple:""}},[t._v(t._s(t.$t("artists")))]):t._e(),t.artists.length?i("v-tab-item",[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},t._l(t.artists,(function(e,s){return i("listviewItem",{key:e.db_id,attrs:{item:e,totalitems:t.artists.length,index:s,hideproviders:t.$store.isMobile},on:{click:t.itemClicked,menuClick:t.menuClick}})})),1)],1)],1):t._e(),t.albums.length?i("v-tab",{attrs:{ripple:""}},[t._v(t._s(t.$t("albums")))]):t._e(),t.albums.length?i("v-tab-item",[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},t._l(t.albums,(function(e,s){return i("listviewItem",{key:e.db_id,attrs:{item:e,totalitems:t.albums.length,index:s,hideproviders:t.$store.isMobile},on:{click:t.itemClicked,menuClick:t.menuClick}})})),1)],1)],1):t._e(),t.playlists.length?i("v-tab",{attrs:{ripple:""}},[t._v(t._s(t.$t("playlists")))]):t._e(),t.playlists.length?i("v-tab-item",[i("v-card",{attrs:{flat:""}},[i("v-list",{attrs:{"two-line":""}},t._l(t.playlists,(function(e,s){return i("listviewItem",{key:e.db_id,attrs:{item:e,totalitems:t.playlists.length,index:s,hidelibrary:!0},on:{click:t.itemClicked,menuClick:t.menuClick}})})),1)],1)],1):t._e()],1)],1)},a=[],r=(i("96cf"),i("89ba")),l=i("d3cc"),n={components:{ListviewItem:l["a"]},props:{},data:function(){return{selected:[2],artists:[],albums:[],tracks:[],playlists:[],timeout:null,active:0,searchQuery:""}},created:function(){this.$store.windowtitle=this.$t("search")},methods:{itemClicked:function(t){var e="";if(1===t.media_type)e="/artists/"+t.item_id;else if(2===t.media_type)e="/albums/"+t.item_id;else{if(4!==t.media_type)return void this.$server.$emit("showContextMenu",t);e="/playlists/"+t.item_id}this.$router.push({path:e,query:{provider:t.provider}})},menuClick:function(t){this.$server.$emit("showContextMenu",t)},Search:function(){var t=Object(r["a"])(regeneratorRuntime.mark((function t(){var e,i;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(this.artists=[],this.albums=[],this.tracks=[],this.playlists=[],!this.searchQuery){t.next=15;break}return this.$store.loading=!0,e={query:this.searchQuery,online:!0,limit:10},t.next=9,this.$server.getData("search",e);case 9:i=t.sent,this.artists=i.artists,this.albums=i.albums,this.tracks=i.tracks,this.playlists=i.playlists,this.$store.loading=!1;case 15:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()}},c=n,o=i("2877"),u=i("6544"),h=i.n(u),m=i("b0af"),d=i("8860"),p=i("71a3"),v=i("c671"),b=i("fe57"),k=i("8654"),y=Object(o["a"])(c,s,a,!1,null,null,null);e["default"]=y.exports;h()(y,{VCard:m["a"],VList:d["a"],VTab:p["a"],VTabItem:v["a"],VTabs:b["a"],VTextField:k["a"]})}}]);
-//# sourceMappingURL=search.5fcda21d.js.map
\ No newline at end of file
diff --git a/music_assistant/web/js/search.5fcda21d.js.map b/music_assistant/web/js/search.5fcda21d.js.map
deleted file mode 100644 (file)
index b361315..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webpack:///./src/views/Search.vue?372c","webpack:///src/views/Search.vue","webpack:///./src/views/Search.vue?836e","webpack:///./src/views/Search.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticStyle","attrs","$t","on","$event","type","indexOf","_k","keyCode","key","Search","model","value","callback","$$v","searchQuery","expression","active","tracks","_v","_s","_e","_l","item","index","db_id","length","$store","isMobile","itemClicked","menuClick","artists","albums","playlists","staticRenderFns","components","ListviewItem","props","data","selected","timeout","created","windowtitle","methods","media_type","url","item_id","$server","$emit","$router","push","component","VCard","VList","VTab","VTabItem","VTabs","VTextField"],"mappings":"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","file":"js/search.5fcda21d.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-text-field',{staticStyle:{\"margin-left\":\"30px\",\"margin-right\":\"30px\",\"margin-top\":\"10px\"},attrs:{\"solo\":\"\",\"clearable\":\"\",\"label\":_vm.$t('type_to_search'),\"append-icon\":\"search\"},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.Search($event)},\"click:append\":_vm.Search},model:{value:(_vm.searchQuery),callback:function ($$v) {_vm.searchQuery=$$v},expression:\"searchQuery\"}}),_c('v-tabs',{attrs:{\"color\":\"transparent\",\"light\":\"\",\"slider-color\":\"black\"},model:{value:(_vm.active),callback:function ($$v) {_vm.active=$$v},expression:\"active\"}},[(_vm.tracks.length)?_c('v-tab',{attrs:{\"ripple\":\"\"}},[_vm._v(_vm._s(_vm.$t(\"tracks\")))]):_vm._e(),(_vm.tracks.length)?_c('v-tab-item',[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{staticStyle:{\"margin-left\":\"15px\",\"margin-right\":\"15px\"},attrs:{\"two-line\":\"\"}},_vm._l((_vm.tracks),function(item,index){return _c('listviewItem',{key:item.db_id,attrs:{\"item\":item,\"totalitems\":_vm.tracks.length,\"index\":index,\"hideavatar\":_vm.$store.isMobile,\"hidetracknum\":true,\"hideproviders\":_vm.$store.isMobile,\"hideduration\":_vm.$store.isMobile,\"showlibrary\":true},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})}),1)],1)],1):_vm._e(),(_vm.artists.length)?_c('v-tab',{attrs:{\"ripple\":\"\"}},[_vm._v(_vm._s(_vm.$t(\"artists\")))]):_vm._e(),(_vm.artists.length)?_c('v-tab-item',[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},_vm._l((_vm.artists),function(item,index){return _c('listviewItem',{key:item.db_id,attrs:{\"item\":item,\"totalitems\":_vm.artists.length,\"index\":index,\"hideproviders\":_vm.$store.isMobile},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})}),1)],1)],1):_vm._e(),(_vm.albums.length)?_c('v-tab',{attrs:{\"ripple\":\"\"}},[_vm._v(_vm._s(_vm.$t(\"albums\")))]):_vm._e(),(_vm.albums.length)?_c('v-tab-item',[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},_vm._l((_vm.albums),function(item,index){return _c('listviewItem',{key:item.db_id,attrs:{\"item\":item,\"totalitems\":_vm.albums.length,\"index\":index,\"hideproviders\":_vm.$store.isMobile},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})}),1)],1)],1):_vm._e(),(_vm.playlists.length)?_c('v-tab',{attrs:{\"ripple\":\"\"}},[_vm._v(_vm._s(_vm.$t(\"playlists\")))]):_vm._e(),(_vm.playlists.length)?_c('v-tab-item',[_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\"}},_vm._l((_vm.playlists),function(item,index){return _c('listviewItem',{key:item.db_id,attrs:{\"item\":item,\"totalitems\":_vm.playlists.length,\"index\":index,\"hidelibrary\":true},on:{\"click\":_vm.itemClicked,\"menuClick\":_vm.menuClick}})}),1)],1)],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <v-text-field\n      solo\n      clearable\n      :label=\"$t('type_to_search')\"\n      append-icon=\"search\"\n      v-model=\"searchQuery\"\n      v-on:keyup.enter=\"Search\"\n      @click:append=\"Search\"\n      style=\"margin-left:30px; margin-right:30px; margin-top:10px\"\n    >\n    </v-text-field>\n\n    <v-tabs v-model=\"active\" color=\"transparent\" light slider-color=\"black\">\n      <v-tab ripple v-if=\"tracks.length\">{{ $t(\"tracks\") }}</v-tab>\n      <v-tab-item v-if=\"tracks.length\">\n        <v-card flat>\n          <v-list two-line style=\"margin-left:15px; margin-right:15px\">\n            <listviewItem\n              v-for=\"(item, index) in tracks\"\n              v-bind:item=\"item\"\n              :key=\"item.db_id\"\n              v-bind:totalitems=\"tracks.length\"\n              v-bind:index=\"index\"\n              :hideavatar=\"$store.isMobile\"\n              :hidetracknum=\"true\"\n              :hideproviders=\"$store.isMobile\"\n              :hideduration=\"$store.isMobile\"\n              :showlibrary=\"true\"\n              v-on:click=\"itemClicked\"\n              v-on:menuClick=\"menuClick\"\n            >\n            </listviewItem>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n\n      <v-tab ripple v-if=\"artists.length\">{{ $t(\"artists\") }}</v-tab>\n      <v-tab-item v-if=\"artists.length\">\n        <v-card flat>\n          <v-list two-line>\n            <listviewItem\n              v-for=\"(item, index) in artists\"\n              v-bind:item=\"item\"\n              :key=\"item.db_id\"\n              v-bind:totalitems=\"artists.length\"\n              v-bind:index=\"index\"\n              :hideproviders=\"$store.isMobile\"\n              v-on:click=\"itemClicked\"\n          v-on:menuClick=\"menuClick\"\n            >\n            </listviewItem>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n\n      <v-tab ripple v-if=\"albums.length\">{{ $t(\"albums\") }}</v-tab>\n      <v-tab-item v-if=\"albums.length\">\n        <v-card flat>\n          <v-list two-line>\n            <listviewItem\n              v-for=\"(item, index) in albums\"\n              v-bind:item=\"item\"\n              :key=\"item.db_id\"\n              v-bind:totalitems=\"albums.length\"\n              v-bind:index=\"index\"\n              :hideproviders=\"$store.isMobile\"\n              v-on:click=\"itemClicked\"\n              v-on:menuClick=\"menuClick\"\n            >\n            </listviewItem>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n\n      <v-tab ripple v-if=\"playlists.length\">{{ $t(\"playlists\") }}</v-tab>\n      <v-tab-item v-if=\"playlists.length\">\n        <v-card flat>\n          <v-list two-line>\n            <listviewItem\n              v-for=\"(item, index) in playlists\"\n              v-bind:item=\"item\"\n              :key=\"item.db_id\"\n              v-bind:totalitems=\"playlists.length\"\n              v-bind:index=\"index\"\n              :hidelibrary=\"true\"\n              v-on:click=\"itemClicked\"\n              v-on:menuClick=\"menuClick\"\n            >\n            </listviewItem>\n          </v-list>\n        </v-card>\n      </v-tab-item>\n    </v-tabs>\n  </section>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\n\nexport default {\n  components: {\n    ListviewItem\n  },\n  props: { },\n  data () {\n    return {\n      selected: [2],\n      artists: [],\n      albums: [],\n      tracks: [],\n      playlists: [],\n      timeout: null,\n      active: 0,\n      searchQuery: ''\n    }\n  },\n  created () {\n    this.$store.windowtitle = this.$t('search')\n  },\n  methods: {\n    itemClicked (item) {\n      // item in the list is clicked\n      let url = ''\n      if (item.media_type === 1) {\n        url = '/artists/' + item.item_id\n      } else if (item.media_type === 2) {\n        url = '/albums/' + item.item_id\n      } else if (item.media_type === 4) {\n        url = '/playlists/' + item.item_id\n      } else {\n        // assume track (or radio) item\n        this.$server.$emit('showContextMenu', item)\n        return\n      }\n      this.$router.push({ path: url, query: { provider: item.provider } })\n    },\n    menuClick (item) {\n      // contextmenu button clicked\n      this.$server.$emit('showContextMenu', item)\n    },\n    async Search () {\n      this.artists = []\n      this.albums = []\n      this.tracks = []\n      this.playlists = []\n      if (this.searchQuery) {\n        this.$store.loading = true\n        let params = { query: this.searchQuery, online: true, limit: 10 }\n        let result = await this.$server.getData('search', params)\n        this.artists = result.artists\n        this.albums = result.albums\n        this.tracks = result.tracks\n        this.playlists = result.playlists\n        this.$store.loading = false\n      }\n    }\n  }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Search.vue?vue&type=template&id=962653e8&\"\nimport script from \"./Search.vue?vue&type=script&lang=js&\"\nexport * from \"./Search.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VCard,VList,VTab,VTabItem,VTabs,VTextField})\n"],"sourceRoot":""}
\ No newline at end of file
index c338bf74d46bbac83160236879430b344e7cb9b5..afb40d34ee40ff9f6e18d298a3bdc1bfdd2f4239 100644 (file)
@@ -1 +1 @@
-{"name":"musicassistant-frontend","short_name":"musicassistant-frontend","theme_color":"#4DBA87","icons":[{"src":"./img/icons/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"./img/icons/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}
\ No newline at end of file
+{"name":"Music Assistant","short_name":"Music Assistant","theme_color":"#424242","icons":[{"src":"./img/icons/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"./img/icons/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}
\ No newline at end of file
diff --git a/music_assistant/web/precache-manifest.b2f29b1e01a3ce8c6d1036fef5e00131.js b/music_assistant/web/precache-manifest.b2f29b1e01a3ce8c6d1036fef5e00131.js
new file mode 100644 (file)
index 0000000..2eebc62
--- /dev/null
@@ -0,0 +1,238 @@
+self.__precacheManifest = (self.__precacheManifest || []).concat([
+  {
+    "revision": "105c11112c457bcaca7a",
+    "url": "css/app.f7c6b061.css"
+  },
+  {
+    "revision": "1a83e8d3597e9275d477",
+    "url": "css/chunk-vendors.7d5374e7.css"
+  },
+  {
+    "revision": "243b64d77de6086d7c1c",
+    "url": "css/config.18def958.css"
+  },
+  {
+    "revision": "276e9bcee543fb0e0ca6",
+    "url": "css/config~search.af60f7e1.css"
+  },
+  {
+    "revision": "9d703042a11142ef7164",
+    "url": "css/itemdetails.bd2e4eb1.css"
+  },
+  {
+    "revision": "f99e5094257d36798190",
+    "url": "css/itemdetails~playerqueue~search.93e2919b.css"
+  },
+  {
+    "revision": "0509ab09c1b0d2200a4135803c91d6ce",
+    "url": "fonts/MaterialIcons-Regular.0509ab09.woff2"
+  },
+  {
+    "revision": "29b882f018fa6fe75fd338aaae6235b8",
+    "url": "fonts/MaterialIcons-Regular.29b882f0.woff"
+  },
+  {
+    "revision": "96c476804d7a788cc1c05351b287ee41",
+    "url": "fonts/MaterialIcons-Regular.96c47680.eot"
+  },
+  {
+    "revision": "da4ea5cdfca6b3baab285741f5ccb59f",
+    "url": "fonts/MaterialIcons-Regular.da4ea5cd.ttf"
+  },
+  {
+    "revision": "313a65630d341645c13e4f2a0364381d",
+    "url": "fonts/Roboto-Black.313a6563.woff"
+  },
+  {
+    "revision": "59eb3601394dd87f30f82433fb39dd94",
+    "url": "fonts/Roboto-Black.59eb3601.woff2"
+  },
+  {
+    "revision": "cc2fadc3928f2f223418887111947b40",
+    "url": "fonts/Roboto-BlackItalic.cc2fadc3.woff"
+  },
+  {
+    "revision": "f75569f8a5fab0893fa712d8c0d9c3fe",
+    "url": "fonts/Roboto-BlackItalic.f75569f8.woff2"
+  },
+  {
+    "revision": "50d75e48e0a3ddab1dd15d6bfb9d3700",
+    "url": "fonts/Roboto-Bold.50d75e48.woff"
+  },
+  {
+    "revision": "b52fac2bb93c5858f3f2675e4b52e1de",
+    "url": "fonts/Roboto-Bold.b52fac2b.woff2"
+  },
+  {
+    "revision": "4fe0f73cc919ba2b7a3c36e4540d725c",
+    "url": "fonts/Roboto-BoldItalic.4fe0f73c.woff"
+  },
+  {
+    "revision": "94008e69aaf05da75c0bbf8f8bb0db41",
+    "url": "fonts/Roboto-BoldItalic.94008e69.woff2"
+  },
+  {
+    "revision": "c73eb1ceba3321a80a0aff13ad373cb4",
+    "url": "fonts/Roboto-Light.c73eb1ce.woff"
+  },
+  {
+    "revision": "d26871e8149b5759f814fd3c7a4f784b",
+    "url": "fonts/Roboto-Light.d26871e8.woff2"
+  },
+  {
+    "revision": "13efe6cbc10b97144a28310ebdeda594",
+    "url": "fonts/Roboto-LightItalic.13efe6cb.woff"
+  },
+  {
+    "revision": "e8eaae902c3a4dacb9a5062667e10576",
+    "url": "fonts/Roboto-LightItalic.e8eaae90.woff2"
+  },
+  {
+    "revision": "1d6594826615607f6dc860bb49258acb",
+    "url": "fonts/Roboto-Medium.1d659482.woff"
+  },
+  {
+    "revision": "90d1676003d9c28c04994c18bfd8b558",
+    "url": "fonts/Roboto-Medium.90d16760.woff2"
+  },
+  {
+    "revision": "13ec0eb5bdb821ff4930237d7c9f943f",
+    "url": "fonts/Roboto-MediumItalic.13ec0eb5.woff2"
+  },
+  {
+    "revision": "83e114c316fcc3f23f524ec3e1c65984",
+    "url": "fonts/Roboto-MediumItalic.83e114c3.woff"
+  },
+  {
+    "revision": "35b07eb2f8711ae08d1f58c043880930",
+    "url": "fonts/Roboto-Regular.35b07eb2.woff"
+  },
+  {
+    "revision": "73f0a88bbca1bec19fb1303c689d04c6",
+    "url": "fonts/Roboto-Regular.73f0a88b.woff2"
+  },
+  {
+    "revision": "4357beb823a5f8d65c260f045d9e019a",
+    "url": "fonts/Roboto-RegularItalic.4357beb8.woff2"
+  },
+  {
+    "revision": "f5902d5ef961717ed263902fc429e6ae",
+    "url": "fonts/Roboto-RegularItalic.f5902d5e.woff"
+  },
+  {
+    "revision": "ad538a69b0e8615ed0419c4529344ffc",
+    "url": "fonts/Roboto-Thin.ad538a69.woff2"
+  },
+  {
+    "revision": "d3b47375afd904983d9be8d6e239a949",
+    "url": "fonts/Roboto-Thin.d3b47375.woff"
+  },
+  {
+    "revision": "5b4a33e176ff736a74f0ca2dd9e6b396",
+    "url": "fonts/Roboto-ThinItalic.5b4a33e1.woff2"
+  },
+  {
+    "revision": "8a96edbbcd9a6991d79371aed0b0288e",
+    "url": "fonts/Roboto-ThinItalic.8a96edbb.woff"
+  },
+  {
+    "revision": "7305b29c7526c212938516a0717e5ccd",
+    "url": "img/default_artist.7305b29c.png"
+  },
+  {
+    "revision": "813f9dad5c3f55bddb15abc0b68f847b",
+    "url": "img/file.813f9dad.png"
+  },
+  {
+    "revision": "e97b001ef85d818668c7c8c031283795",
+    "url": "img/hires.e97b001e.png"
+  },
+  {
+    "revision": "29fe3282407f51338f27ae7bc33d8513",
+    "url": "img/homeassistant.29fe3282.png"
+  },
+  {
+    "revision": "4c4e488018bcf5af49d08a8a1434dd9b",
+    "url": "img/http_streamer.4c4e4880.png"
+  },
+  {
+    "revision": "4db55f47d3079cd17637da3220b953e2",
+    "url": "img/info_gradient.4db55f47.jpg"
+  },
+  {
+    "revision": "c079bd979828319b9104eae3c39cc373",
+    "url": "img/logo.c079bd97.png"
+  },
+  {
+    "revision": "c7eb9a768cf919b7eae7f80ce7100f8f",
+    "url": "img/qobuz.c7eb9a76.png"
+  },
+  {
+    "revision": "72e2fecbb918cb44d850686550c9a335",
+    "url": "img/sonos.72e2fecb.png"
+  },
+  {
+    "revision": "1f3fb1afff253402ff14288344ef1adc",
+    "url": "img/spotify.1f3fb1af.png"
+  },
+  {
+    "revision": "6063122339ae24244df236a92769470d",
+    "url": "img/squeezebox.60631223.png"
+  },
+  {
+    "revision": "ca1c1bb082ed1b32e4a7563a85279149",
+    "url": "img/tunein.ca1c1bb0.png"
+  },
+  {
+    "revision": "798ba28fac7cd93ad48b7bf28cce3f52",
+    "url": "img/web.798ba28f.png"
+  },
+  {
+    "revision": "8e1a0da98ad9d90c423b2b03ccb13033",
+    "url": "img/webplayer.8e1a0da9.png"
+  },
+  {
+    "revision": "18f6743d054c603468166d5eb145346e",
+    "url": "index.html"
+  },
+  {
+    "revision": "105c11112c457bcaca7a",
+    "url": "js/app.164646f9.js"
+  },
+  {
+    "revision": "1a83e8d3597e9275d477",
+    "url": "js/chunk-vendors.b98bba01.js"
+  },
+  {
+    "revision": "243b64d77de6086d7c1c",
+    "url": "js/config.3af84ca2.js"
+  },
+  {
+    "revision": "276e9bcee543fb0e0ca6",
+    "url": "js/config~search.9f3e890b.js"
+  },
+  {
+    "revision": "9d703042a11142ef7164",
+    "url": "js/itemdetails.5c314dae.js"
+  },
+  {
+    "revision": "f99e5094257d36798190",
+    "url": "js/itemdetails~playerqueue~search.1e2b2bfd.js"
+  },
+  {
+    "revision": "e8c0708dab48c5678fe7",
+    "url": "js/playerqueue.5fa460a7.js"
+  },
+  {
+    "revision": "7191dbe3902034215a2e",
+    "url": "js/search.56af5cc1.js"
+  },
+  {
+    "revision": "a69fc7789e4488064e5e6c87b668ce90",
+    "url": "manifest.json"
+  },
+  {
+    "revision": "b6216d61c03e6ce0c9aea6ca7808f7ca",
+    "url": "robots.txt"
+  }
+]);
\ No newline at end of file
diff --git a/music_assistant/web/precache-manifest.e1bc4360d0bea6c59b9258440a2bb0cc.js b/music_assistant/web/precache-manifest.e1bc4360d0bea6c59b9258440a2bb0cc.js
deleted file mode 100644 (file)
index b397e79..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-self.__precacheManifest = (self.__precacheManifest || []).concat([
-  {
-    "revision": "094b4d662956c240c073",
-    "url": "css/app.ccd7be77.css"
-  },
-  {
-    "revision": "1a83e8d3597e9275d477",
-    "url": "css/chunk-vendors.7d5374e7.css"
-  },
-  {
-    "revision": "a64061b8603f1a3e6d46",
-    "url": "css/config.18def958.css"
-  },
-  {
-    "revision": "276e9bcee543fb0e0ca6",
-    "url": "css/config~search.af60f7e1.css"
-  },
-  {
-    "revision": "01a7285a48e96e4c5b9a",
-    "url": "css/itemdetails.bd2e4eb1.css"
-  },
-  {
-    "revision": "f99e5094257d36798190",
-    "url": "css/itemdetails~playerqueue~search.93e2919b.css"
-  },
-  {
-    "revision": "0509ab09c1b0d2200a4135803c91d6ce",
-    "url": "fonts/MaterialIcons-Regular.0509ab09.woff2"
-  },
-  {
-    "revision": "29b882f018fa6fe75fd338aaae6235b8",
-    "url": "fonts/MaterialIcons-Regular.29b882f0.woff"
-  },
-  {
-    "revision": "96c476804d7a788cc1c05351b287ee41",
-    "url": "fonts/MaterialIcons-Regular.96c47680.eot"
-  },
-  {
-    "revision": "da4ea5cdfca6b3baab285741f5ccb59f",
-    "url": "fonts/MaterialIcons-Regular.da4ea5cd.ttf"
-  },
-  {
-    "revision": "313a65630d341645c13e4f2a0364381d",
-    "url": "fonts/Roboto-Black.313a6563.woff"
-  },
-  {
-    "revision": "59eb3601394dd87f30f82433fb39dd94",
-    "url": "fonts/Roboto-Black.59eb3601.woff2"
-  },
-  {
-    "revision": "cc2fadc3928f2f223418887111947b40",
-    "url": "fonts/Roboto-BlackItalic.cc2fadc3.woff"
-  },
-  {
-    "revision": "f75569f8a5fab0893fa712d8c0d9c3fe",
-    "url": "fonts/Roboto-BlackItalic.f75569f8.woff2"
-  },
-  {
-    "revision": "50d75e48e0a3ddab1dd15d6bfb9d3700",
-    "url": "fonts/Roboto-Bold.50d75e48.woff"
-  },
-  {
-    "revision": "b52fac2bb93c5858f3f2675e4b52e1de",
-    "url": "fonts/Roboto-Bold.b52fac2b.woff2"
-  },
-  {
-    "revision": "4fe0f73cc919ba2b7a3c36e4540d725c",
-    "url": "fonts/Roboto-BoldItalic.4fe0f73c.woff"
-  },
-  {
-    "revision": "94008e69aaf05da75c0bbf8f8bb0db41",
-    "url": "fonts/Roboto-BoldItalic.94008e69.woff2"
-  },
-  {
-    "revision": "c73eb1ceba3321a80a0aff13ad373cb4",
-    "url": "fonts/Roboto-Light.c73eb1ce.woff"
-  },
-  {
-    "revision": "d26871e8149b5759f814fd3c7a4f784b",
-    "url": "fonts/Roboto-Light.d26871e8.woff2"
-  },
-  {
-    "revision": "13efe6cbc10b97144a28310ebdeda594",
-    "url": "fonts/Roboto-LightItalic.13efe6cb.woff"
-  },
-  {
-    "revision": "e8eaae902c3a4dacb9a5062667e10576",
-    "url": "fonts/Roboto-LightItalic.e8eaae90.woff2"
-  },
-  {
-    "revision": "1d6594826615607f6dc860bb49258acb",
-    "url": "fonts/Roboto-Medium.1d659482.woff"
-  },
-  {
-    "revision": "90d1676003d9c28c04994c18bfd8b558",
-    "url": "fonts/Roboto-Medium.90d16760.woff2"
-  },
-  {
-    "revision": "13ec0eb5bdb821ff4930237d7c9f943f",
-    "url": "fonts/Roboto-MediumItalic.13ec0eb5.woff2"
-  },
-  {
-    "revision": "83e114c316fcc3f23f524ec3e1c65984",
-    "url": "fonts/Roboto-MediumItalic.83e114c3.woff"
-  },
-  {
-    "revision": "35b07eb2f8711ae08d1f58c043880930",
-    "url": "fonts/Roboto-Regular.35b07eb2.woff"
-  },
-  {
-    "revision": "73f0a88bbca1bec19fb1303c689d04c6",
-    "url": "fonts/Roboto-Regular.73f0a88b.woff2"
-  },
-  {
-    "revision": "4357beb823a5f8d65c260f045d9e019a",
-    "url": "fonts/Roboto-RegularItalic.4357beb8.woff2"
-  },
-  {
-    "revision": "f5902d5ef961717ed263902fc429e6ae",
-    "url": "fonts/Roboto-RegularItalic.f5902d5e.woff"
-  },
-  {
-    "revision": "ad538a69b0e8615ed0419c4529344ffc",
-    "url": "fonts/Roboto-Thin.ad538a69.woff2"
-  },
-  {
-    "revision": "d3b47375afd904983d9be8d6e239a949",
-    "url": "fonts/Roboto-Thin.d3b47375.woff"
-  },
-  {
-    "revision": "5b4a33e176ff736a74f0ca2dd9e6b396",
-    "url": "fonts/Roboto-ThinItalic.5b4a33e1.woff2"
-  },
-  {
-    "revision": "8a96edbbcd9a6991d79371aed0b0288e",
-    "url": "fonts/Roboto-ThinItalic.8a96edbb.woff"
-  },
-  {
-    "revision": "7305b29c7526c212938516a0717e5ccd",
-    "url": "img/default_artist.7305b29c.png"
-  },
-  {
-    "revision": "813f9dad5c3f55bddb15abc0b68f847b",
-    "url": "img/file.813f9dad.png"
-  },
-  {
-    "revision": "e97b001ef85d818668c7c8c031283795",
-    "url": "img/hires.e97b001e.png"
-  },
-  {
-    "revision": "29fe3282407f51338f27ae7bc33d8513",
-    "url": "img/homeassistant.29fe3282.png"
-  },
-  {
-    "revision": "4c4e488018bcf5af49d08a8a1434dd9b",
-    "url": "img/http_streamer.4c4e4880.png"
-  },
-  {
-    "revision": "4db55f47d3079cd17637da3220b953e2",
-    "url": "img/info_gradient.4db55f47.jpg"
-  },
-  {
-    "revision": "c079bd979828319b9104eae3c39cc373",
-    "url": "img/logo.c079bd97.png"
-  },
-  {
-    "revision": "c7eb9a768cf919b7eae7f80ce7100f8f",
-    "url": "img/qobuz.c7eb9a76.png"
-  },
-  {
-    "revision": "72e2fecbb918cb44d850686550c9a335",
-    "url": "img/sonos.72e2fecb.png"
-  },
-  {
-    "revision": "1f3fb1afff253402ff14288344ef1adc",
-    "url": "img/spotify.1f3fb1af.png"
-  },
-  {
-    "revision": "6063122339ae24244df236a92769470d",
-    "url": "img/squeezebox.60631223.png"
-  },
-  {
-    "revision": "ca1c1bb082ed1b32e4a7563a85279149",
-    "url": "img/tunein.ca1c1bb0.png"
-  },
-  {
-    "revision": "798ba28fac7cd93ad48b7bf28cce3f52",
-    "url": "img/web.798ba28f.png"
-  },
-  {
-    "revision": "8e1a0da98ad9d90c423b2b03ccb13033",
-    "url": "img/webplayer.8e1a0da9.png"
-  },
-  {
-    "revision": "ab75ff1241d25e7b428cb95242325da5",
-    "url": "index.html"
-  },
-  {
-    "revision": "094b4d662956c240c073",
-    "url": "js/app.df1cf09c.js"
-  },
-  {
-    "revision": "1a83e8d3597e9275d477",
-    "url": "js/chunk-vendors.b98bba01.js"
-  },
-  {
-    "revision": "a64061b8603f1a3e6d46",
-    "url": "js/config.328c2668.js"
-  },
-  {
-    "revision": "276e9bcee543fb0e0ca6",
-    "url": "js/config~search.9f3e890b.js"
-  },
-  {
-    "revision": "01a7285a48e96e4c5b9a",
-    "url": "js/itemdetails.b7fcbe37.js"
-  },
-  {
-    "revision": "f99e5094257d36798190",
-    "url": "js/itemdetails~playerqueue~search.1e2b2bfd.js"
-  },
-  {
-    "revision": "18eb47f2f2f9addc2da3",
-    "url": "js/playerqueue.39a08978.js"
-  },
-  {
-    "revision": "f86728ca50beba0b14eb",
-    "url": "js/search.5fcda21d.js"
-  },
-  {
-    "revision": "0895c4ca94f1d637bb13f84373f6cfff",
-    "url": "manifest.json"
-  },
-  {
-    "revision": "b6216d61c03e6ce0c9aea6ca7808f7ca",
-    "url": "robots.txt"
-  }
-]);
\ No newline at end of file
index 0563a66918a06ec4eb4a417020ff0df2b97d8842..1d7f9d9c871f210dab13d623bfdb453d3bef1562 100644 (file)
@@ -14,7 +14,7 @@
 importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
 
 importScripts(
-  "precache-manifest.e1bc4360d0bea6c59b9258440a2bb0cc.js"
+  "precache-manifest.b2f29b1e01a3ce8c6d1036fef5e00131.js"
 );
 
 workbox.core.setCacheNameDetails({prefix: "musicassistant-frontend"});