pifi 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"]}