pifi 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 53101b1cd36be140f6b4c4d412983f006e118f2dfaaa91c62f8864cda84c3d83
4
- data.tar.gz: f79ab2faee67efcf270c05f4b06d47129cb5592aa66e524dd27fd081b3a31fe6
3
+ metadata.gz: 8b4927d3d3e4b6a64a5ef191af0efa68d13d87ff1a4fdf595c7acd43763c836b
4
+ data.tar.gz: 13e47a9058abf35d191b3e6e2cfe977330a7d17695bfebca4ef87ea52ee37776
5
5
  SHA512:
6
- metadata.gz: b8a2b98042c71d0fe180c2113b829faff3d9c23896035ca25ce277bba72d58f5c7cac7859ca36fc142bf1eb68d8a431b004436d17e267bb6fb47a57c410263a1
7
- data.tar.gz: 4a45979fc25013bfb350003a091b42bbc66bf5a46c792b1acb4e1f4c7f4441626028d70b2ec43c29f4d00fb2ebb152aafd3fcf46df090360931c5ff2acdcecfe
6
+ metadata.gz: 32eb0e5eeebd9434721ccdffe41cd02e9930878d712e774c64a5097e358606cfe684a969a729d2d32b9c86d4f9a03d2fd3a42a397b510a45e2f4d0e1e4a2cbf6
7
+ data.tar.gz: 3ee8f3ebfa9067be16744ac9397e239d245a3a7e77ede9f6851d7bea9bf7c5fe409c7db659ab5da622fa30c2bc15b132870db0b7a9996dc7b749b277f6afc63f
data/README.md CHANGED
@@ -11,9 +11,12 @@
11
11
  - [Some features](#some-features)
12
12
  - [Demo](#demo)
13
13
  - [Installation](#installation)
14
+ - [Updating](#updating)
14
15
  - [Configuration](#configuration)
15
16
  - [List of streams](#list-of-streams)
16
17
  - [PiFi configuration](#pifi-configuration)
18
+ - [Usage](#usage)
19
+ - [Help me translate](#help-me-translate)
17
20
  - [Credits](#credits)
18
21
  - [License](#license)
19
22
 
@@ -143,10 +146,30 @@ PiFi can be run:
143
146
 
144
147
  On your mobile browser, I suggest you add PiFi Radio to your home screen, for easier access.
145
148
 
149
+ ## Help me translate
150
+
151
+ You can help me adding a new language to PiFi or improving an existing translation. [The translation files are placed here.](https://github.com/rccavalcanti/pifi-radio/tree/master/frontend/public/locales)
152
+
153
+ ### Improving an existing translation
154
+
155
+ The default language for PiFi is English, so you should use it as a reference.
156
+
157
+ 1. Open [the translation file](https://github.com/rccavalcanti/pifi-radio/tree/master/frontend/public/locales) and [the English file](https://github.com/rccavalcanti/pifi-radio/blob/master/frontend/public/locales/en/translation.json).
158
+ 2. Fill empty strings and fix any bad translations.
159
+ 3. Send a pull request.
160
+
161
+ ### Adding a new language
162
+
163
+ 1. Copy the `en` folder, renaming it to the new language code (e.g. `es-ES`).
164
+ 2. On `translation.json`, translate the strings. If you aren't sure of some, please make them empty.
165
+ 3. Send a pull request.
166
+
146
167
  ## Credits
147
168
 
148
- - Translation fr-fr: Francis Chavanon "rimeno"
149
- - Translation nl-nl: Heimen Stoffels "Vistaus"
169
+ - fr-fr: Francis Chavanon "rimeno"
170
+ - pl-pl: "Struart88"
171
+ - nl-nl: Heimen Stoffels "Vistaus"
172
+
150
173
  - Icon made by [iconixar](https://www.flaticon.com/authors/iconixar) from [www.flaticon.com](https://www.flaticon.com/), licensed by [Flaticon Basic License](docs/icon/license.pdf).
151
174
 
152
175
  ## License
@@ -154,3 +177,6 @@ On your mobile browser, I suggest you add PiFi Radio to your home screen, for ea
154
177
  Released under [GNU GPL v3](LICENSE).
155
178
 
156
179
  Copyright 2017-2020 Rafael Cavalcanti <hi@rafaelc.org>
180
+
181
+ If you find PiFi useful, please consider:
182
+ <a href="https://www.buymeacoffee.com/rafaelc" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" width="200" ></a>
@@ -5,10 +5,6 @@ require "sinatra/base"
5
5
  module PiFi
6
6
  class ApplicationController < Sinatra::Base
7
7
  set :static, false
8
- configure :development do
9
- before { response.headers["Access-Control-Allow-Origin"] = "*" }
10
- end
11
-
12
8
  set ConfigGetter.new.config
13
9
  set :streams, Streams.new(settings.streams_path, settings.streams_path_priv)
14
10
  end
@@ -1,26 +1,26 @@
1
1
  {
2
2
  "files": {
3
- "main.css": "/static/css/main.75888152.chunk.css",
4
- "main.js": "/static/js/main.7d7142ee.chunk.js",
5
- "main.js.map": "/static/js/main.7d7142ee.chunk.js.map",
3
+ "main.css": "/static/css/main.93c9cd50.chunk.css",
4
+ "main.js": "/static/js/main.f1b7c0d0.chunk.js",
5
+ "main.js.map": "/static/js/main.f1b7c0d0.chunk.js.map",
6
6
  "runtime-main.js": "/static/js/runtime-main.f04a0f25.js",
7
7
  "runtime-main.js.map": "/static/js/runtime-main.f04a0f25.js.map",
8
8
  "static/css/2.5dbdccff.chunk.css": "/static/css/2.5dbdccff.chunk.css",
9
- "static/js/2.9b0b7c5f.chunk.js": "/static/js/2.9b0b7c5f.chunk.js",
10
- "static/js/2.9b0b7c5f.chunk.js.map": "/static/js/2.9b0b7c5f.chunk.js.map",
9
+ "static/js/2.89cb5725.chunk.js": "/static/js/2.89cb5725.chunk.js",
10
+ "static/js/2.89cb5725.chunk.js.map": "/static/js/2.89cb5725.chunk.js.map",
11
11
  "index.html": "/index.html",
12
- "precache-manifest.91762315d3372889e680b8497d590c91.js": "/precache-manifest.91762315d3372889e680b8497d590c91.js",
12
+ "precache-manifest.5dbdf662d076c5f2d13288a700dab9d6.js": "/precache-manifest.5dbdf662d076c5f2d13288a700dab9d6.js",
13
13
  "service-worker.js": "/service-worker.js",
14
14
  "static/css/2.5dbdccff.chunk.css.map": "/static/css/2.5dbdccff.chunk.css.map",
15
- "static/css/main.75888152.chunk.css.map": "/static/css/main.75888152.chunk.css.map",
16
- "static/js/2.9b0b7c5f.chunk.js.LICENSE": "/static/js/2.9b0b7c5f.chunk.js.LICENSE",
17
- "static/media/player.scss": "/static/media/logo.91554ce9.svg"
15
+ "static/css/main.93c9cd50.chunk.css.map": "/static/css/main.93c9cd50.chunk.css.map",
16
+ "static/js/2.89cb5725.chunk.js.LICENSE": "/static/js/2.89cb5725.chunk.js.LICENSE",
17
+ "static/media/logo.svg": "/static/media/logo.91554ce9.svg"
18
18
  },
19
19
  "entrypoints": [
20
20
  "static/js/runtime-main.f04a0f25.js",
21
21
  "static/css/2.5dbdccff.chunk.css",
22
- "static/js/2.9b0b7c5f.chunk.js",
23
- "static/css/main.75888152.chunk.css",
24
- "static/js/main.7d7142ee.chunk.js"
22
+ "static/js/2.89cb5725.chunk.js",
23
+ "static/css/main.93c9cd50.chunk.css",
24
+ "static/js/main.f1b7c0d0.chunk.js"
25
25
  ]
26
26
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,user-scalable=no"/><meta name="description" content="MPD web client to listen to radio"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="manifest" href="/manifest.json"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"><meta name="apple-mobile-web-app-title" content="PiFi Radio"><meta name="application-name" content="PiFi Radio"><meta name="msapplication-TileColor" content="#2b5797"><meta name="theme-color" content="#375a7f"><title>PiFi Radio</title><link rel="preload" href="https://stackpath.bootstrapcdn.com/bootswatch/4.4.1/darkly/bootstrap.min.css" as="style"><link href="https://stackpath.bootstrapcdn.com/bootswatch/4.4.1/darkly/bootstrap.min.css" rel="stylesheet" title="theme"><link href="/static/css/2.5dbdccff.chunk.css" rel="stylesheet"><link href="/static/css/main.75888152.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>var isIE=window.document.documentMode,unsupportedMsg='<img src="/assets/logo80.png" class="mx-auto d-block my-5">';if(unsupportedMsg+='<h5 class="text-center my-5">This browser is not supported</h5>',isIE){var root=document.getElementById("root");root.innerHTML=unsupportedMsg,root.setAttribute("id","")}</script><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],Object.prototype.hasOwnProperty.call(a,t)&&a[t]&&i.push(a[t][0]),a[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),p()}function p(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==a[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},a={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var r=this.webpackJsonppifi_frontend=this.webpackJsonppifi_frontend||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;p()}([])</script><script src="/static/js/2.9b0b7c5f.chunk.js"></script><script src="/static/js/main.7d7142ee.chunk.js"></script></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,user-scalable=no"/><meta name="description" content="MPD web client to listen to radio"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="manifest" href="/manifest.json"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"><meta name="apple-mobile-web-app-title" content="PiFi Radio"><meta name="application-name" content="PiFi Radio"><meta name="msapplication-TileColor" content="#2b5797"><meta name="theme-color" content="#375a7f"><title>PiFi Radio</title><link rel="preload" href="https://stackpath.bootstrapcdn.com/bootswatch/4.4.1/darkly/bootstrap.min.css" as="style"><link href="https://stackpath.bootstrapcdn.com/bootswatch/4.4.1/darkly/bootstrap.min.css" rel="stylesheet" title="theme"><link href="/static/css/2.5dbdccff.chunk.css" rel="stylesheet"><link href="/static/css/main.93c9cd50.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>var isIE=window.document.documentMode,unsupportedMsg='<img src="/assets/logo80.png" class="mx-auto d-block my-5">';if(unsupportedMsg+='<h5 class="text-center my-5">This browser is not supported</h5>',isIE){var root=document.getElementById("root");root.innerHTML=unsupportedMsg,root.setAttribute("id","")}</script><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],Object.prototype.hasOwnProperty.call(a,t)&&a[t]&&i.push(a[t][0]),a[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),p()}function p(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==a[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},a={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var r=this.webpackJsonppifi_frontend=this.webpackJsonppifi_frontend||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;p()}([])</script><script src="/static/js/2.89cb5725.chunk.js"></script><script src="/static/js/main.f1b7c0d0.chunk.js"></script></body></html>
@@ -0,0 +1,26 @@
1
+ {
2
+ "about": "O projekcie",
3
+ "cancel": "Anuluj",
4
+ "close": "Zamknij",
5
+ "disconnectedMPD": "Nie połączono z MPD",
6
+ "environment": "Środowisko",
7
+ "errorForbidden": "Niedozwolone żądanie. Sprawdź hasło i uprawnienia MPD.",
8
+ "errorNetwork": "Nie połączono z serwerem PiFi",
9
+ "errorNotFound": "Strumień nie znaleziony.",
10
+ "errorUnexpected": "Nieoczekiwany błąd.",
11
+ "language": "Język",
12
+ "mpdHost": "MPD host",
13
+ "mpdPort": "MPD port",
14
+ "noStreams": "Brak dostępnych stacji.",
15
+ "ok": "OK",
16
+ "playing": "Odtwarzanie",
17
+ "playURL": "Odtwórz URL",
18
+ "search": "Szukaj...",
19
+ "settings": "Ustawienia",
20
+ "stopped": "Zatrzymano",
21
+ "theme": "Motyw",
22
+ "tryingURL": "Próba odtworzenia URL...",
23
+ "tunning": "Strojenie...",
24
+ "version": "Wersja",
25
+ "volume": "Głośność"
26
+ }
@@ -1,27 +1,27 @@
1
1
  self.__precacheManifest = (self.__precacheManifest || []).concat([
2
2
  {
3
- "revision": "4ed55bceb04cce9135a7239e06ec2a1a",
3
+ "revision": "b3377f9d3c31f7620f1f03f58238c435",
4
4
  "url": "/index.html"
5
5
  },
6
6
  {
7
- "revision": "887d3e62446047adb81e",
7
+ "revision": "ea331bc68a45987234e3",
8
8
  "url": "/static/css/2.5dbdccff.chunk.css"
9
9
  },
10
10
  {
11
- "revision": "168233bf8fac8d573179",
12
- "url": "/static/css/main.75888152.chunk.css"
11
+ "revision": "2efeeef7a345c7c307fc",
12
+ "url": "/static/css/main.93c9cd50.chunk.css"
13
13
  },
14
14
  {
15
- "revision": "887d3e62446047adb81e",
16
- "url": "/static/js/2.9b0b7c5f.chunk.js"
15
+ "revision": "ea331bc68a45987234e3",
16
+ "url": "/static/js/2.89cb5725.chunk.js"
17
17
  },
18
18
  {
19
19
  "revision": "19a6755ca1e5087f391e80db627b30f5",
20
- "url": "/static/js/2.9b0b7c5f.chunk.js.LICENSE"
20
+ "url": "/static/js/2.89cb5725.chunk.js.LICENSE"
21
21
  },
22
22
  {
23
- "revision": "168233bf8fac8d573179",
24
- "url": "/static/js/main.7d7142ee.chunk.js"
23
+ "revision": "2efeeef7a345c7c307fc",
24
+ "url": "/static/js/main.f1b7c0d0.chunk.js"
25
25
  },
26
26
  {
27
27
  "revision": "92793784c9eb98d269de",
@@ -14,7 +14,7 @@
14
14
  importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
15
15
 
16
16
  importScripts(
17
- "/precache-manifest.91762315d3372889e680b8497d590c91.js"
17
+ "/precache-manifest.5dbdf662d076c5f2d13288a700dab9d6.js"
18
18
  );
19
19
 
20
20
  self.addEventListener('message', (event) => {
@@ -0,0 +1,2 @@
1
+ .navbar{position:-webkit-sticky!important;position:sticky!important;top:0;z-index:5}.player{height:70vh;width:420px;min-width:250px;display:flex;flex-direction:column;justify-content:space-between;align-items:center}.player-logo{width:130px}.loader{z-index:10;display:flex;justify-content:center;align-items:center;height:100%}.streams{min-width:300px;width:450px}.streams__item{cursor:pointer}.streams__item.active{cursor:default}.streams__header{font-size:1.3rem;margin-top:1em;padding:.5rem 1.25rem}.list-group{margin-bottom:1rem!important}@media (max-width:750px){.list-group{margin-bottom:6rem!important}}.mini-player{width:100%;height:100%;max-width:600px;margin:auto;display:flex;align-items:center;justify-content:space-between}.mini-player button{padding:10px 20px}.drawer{z-index:5!important;height:5rem;display:flex;justify-content:flex-start;align-items:center;cursor:pointer;touch-action:none;-webkit-transition:height .25s ease-out;transition:height .25s ease-out}.drawer--open{height:100%;flex-direction:column;justify-content:space-between}@media (max-width:750px){.body--drawer{overflow:hidden}}.drawer .player{height:90vh;width:100%;margin-top:20px}.backdrop{z-index:10;position:fixed;width:100%;height:100%;background-color:#222;opacity:0;visibility:hidden;-webkit-transition:all .2s ease;transition:all .2s ease;cursor:default;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center}.backdrop--visible{opacity:.94;visibility:visible}.body--backdrop{overflow:hidden}.app-main{display:flex;justify-content:space-around}@supports not (-ms-ime-align:auto){.app-main{justify-content:space-evenly}}.app-main>.player{position:-webkit-sticky;position:sticky;top:4rem}.drawer{visibility:hidden}@media (max-width:750px){.drawer{visibility:visible}}@media (max-width:750px){.app-main>.player{display:none}}*{box-sizing:border-box}body{height:100vh;overflow-y:scroll}#root{height:100%}button[disabled]{cursor:default}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
2
+ /*# sourceMappingURL=main.93c9cd50.chunk.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["navBar.scss","player.scss","loader.scss","streams.scss","miniPlayer.scss","drawer.scss","../styles/_variables.scss","backdrop.scss","App.scss","index.scss"],"names":[],"mappings":"AAAA,QACE,iCAA2B,CAA3B,yBAA2B,CAC3B,KAAM,CACN,SAAU,CCHZ,QACE,WAAY,CACZ,WAAY,CACZ,eAAgB,CAChB,YAAa,CACb,qBAAsB,CACtB,6BAA8B,CAC9B,kBAAmB,CACpB,aAGC,WAAY,CCXd,QACE,UAAW,CACX,YAAa,CACb,sBAAuB,CACvB,kBAAmB,CACnB,WAAY,CCHd,SACE,eAAgB,CAChB,WAAY,CACb,eAGC,cAAe,CADjB,sBAII,cAAe,CAChB,iBAID,gBAAiB,CACjB,cAAe,CACf,qBAAuB,CACxB,YAGC,4BAA8B,CAE9B,yBAHF,YAII,4BAA+C,CAElD,CC3BD,aACE,UAAW,CACX,WAAY,CACZ,eAAgB,CAChB,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,6BAA8B,CAPhC,oBAUI,iBAAkB,CCRtB,QACE,mBAAqB,CACrB,WCHkB,CDIlB,YAAa,CACb,0BAA2B,CAC3B,kBAAmB,CACnB,cAAe,CACf,iBAAkB,CAClB,uCAAA,CAAA,+BAAiC,CAEjC,cACE,WAAY,CACZ,qBAAsB,CACtB,6BAA8B,CAC/B,yBAKH,cAEI,eAAgB,CAEnB,CAED,gBACE,WAAY,CACZ,UAAW,CACX,eAAgB,CE9BlB,UACE,UAAW,CACX,cAAe,CACf,UAAW,CACX,WAAY,CACZ,qBAAyB,CACzB,SAAU,CACV,iBAAkB,CAClB,+BAAyB,CAAzB,uBAAyB,CACzB,cAAe,CACf,YAAa,CACb,qBAAsB,CACtB,sBAAuB,CACvB,kBAAmB,CACnB,iBAAkB,CAElB,mBACE,WAAa,CACb,kBAAmB,CACpB,gBAID,eAAgB,CCrBlB,UACE,YAAa,CACb,4BAA6B,CAGM,mCALrC,UAMI,4BAA6B,CAEhC,CAED,kBACE,uBAAgB,CAAhB,eAAgB,CAChB,QAAS,CACV,QAGC,iBAAkB,CAElB,yBAHF,QAII,kBAAmB,CAEtB,CAGC,yBADF,kBAEI,YAAa,CAEhB,CC7BD,EACE,qBAAsB,CACvB,KAGC,YAAa,CACb,iBAAkB,CACnB,MAGC,WAAY,CACb,iBAGC,cAAe,CAChB,UAGC,kBAAmB,CACnB,eAAgB,CAChB,sBAAuB","file":"main.93c9cd50.chunk.css","sourcesContent":[".navbar {\n position: sticky !important;\n top: 0;\n z-index: 5;\n}\n",".player {\n height: 70vh;\n width: 420px;\n min-width: 250px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n}\n\n.player-logo {\n width: 130px;\n}\n",".loader {\n z-index: 10;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n}\n","@import '../styles/variables';\n\n.streams {\n min-width: 300px;\n width: 450px;\n}\n\n.streams__item {\n cursor: pointer;\n\n &.active {\n cursor: default;\n }\n}\n\n.streams__header {\n font-size: 1.3rem;\n margin-top: 1em;\n padding: 0.5rem 1.25rem;\n}\n\n.list-group {\n margin-bottom: 1rem !important;\n\n @media (max-width: $mobile-width) {\n margin-bottom: 1rem + $drawer-height !important; /* drawer */\n }\n}\n",".mini-player {\n width: 100%;\n height: 100%;\n max-width: 600px;\n margin: auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n button {\n padding: 10px 20px;\n }\n}\n","@import '../styles/variables';\n\n.drawer {\n z-index: 5 !important;\n height: $drawer-height;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n cursor: pointer;\n touch-action: none; // don't scroll on touch\n transition: height 0.25s ease-out;\n\n &--open {\n height: 100%;\n flex-direction: column;\n justify-content: space-between;\n }\n}\n\n// The media query is for the edge case of an open drawer and the\n// window resized past the breakpoint. This brings the scrollbar back.\n.body--drawer {\n @media (max-width: $mobile-width) {\n overflow: hidden;\n }\n}\n\n.drawer .player {\n height: 90vh;\n width: 100%;\n margin-top: 20px;\n}\n","$mobile-width: 750px;\n$drawer-height: 5rem;\n",".backdrop {\n z-index: 10;\n position: fixed;\n width: 100%;\n height: 100%;\n background-color: #222222;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s ease;\n cursor: default;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n\n &--visible {\n opacity: 0.94;\n visibility: visible;\n }\n}\n\n.body--backdrop {\n overflow: hidden;\n}\n","@import './styles/variables';\n\n.app-main {\n display: flex;\n justify-content: space-around;\n\n // Not Edge 18-. It partially supports space-evenly.\n @supports not (-ms-ime-align: auto) {\n justify-content: space-evenly;\n }\n}\n\n.app-main > .player {\n position: sticky;\n top: 4rem; // we set this dynamically\n}\n\n.drawer {\n visibility: hidden;\n\n @media (max-width: $mobile-width) {\n visibility: visible;\n }\n}\n\n.app-main > .player {\n @media (max-width: $mobile-width) {\n display: none;\n }\n}\n","* {\n box-sizing: border-box;\n}\n\nbody {\n height: 100vh;\n overflow-y: scroll; // so elements don't move if page fits view\n}\n\n#root {\n height: 100%;\n}\n\nbutton[disabled] {\n cursor: default;\n}\n\n.ellipsis {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n"]}