WIP - putting lightswitch into the menu, cleaning up the code
This commit is contained in:
parent
7a94a42eb8
commit
7f52961317
29 changed files with 735 additions and 1192 deletions
|
|
@ -1,5 +0,0 @@
|
|||
import Ember from 'ember';
|
||||
import SplashscreenMixin from 'ember-cordova/mixins/device/splashscreen';
|
||||
|
||||
export default Ember.Route.extend(SplashscreenMixin, {
|
||||
});
|
||||
|
|
@ -16,11 +16,9 @@ export default Component.extend({
|
|||
lightsData: null,
|
||||
activeLights: A(),
|
||||
tabList: ["Lights", "Music"],
|
||||
selectedTab: 0,
|
||||
selectedTab: 1,
|
||||
pauseLightUpdates: false,
|
||||
|
||||
lightsTabSelected: computed.equal('selectedTab', 0),
|
||||
musicTabSelected: computed.equal('selectedTab', 1),
|
||||
dimmerOn: false,
|
||||
playing: false,
|
||||
|
||||
|
|
@ -206,15 +204,14 @@ export default Component.extend({
|
|||
position: 'left'
|
||||
},
|
||||
{
|
||||
intro: 'And that\'s it...Hope you enjoy the application. ;)<br><br>' +
|
||||
'<i><b>TIP</b>: click on the lightswitch to switch to a darker theme.</i>',
|
||||
intro: 'And that\'s it...Hope you enjoy the application. ;)'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// it's VERY ugly but it works... the jQuery massacre :'(
|
||||
intro.onchange((element) => {
|
||||
if(element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip'){
|
||||
if(element.id === '' || element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip'){
|
||||
$('.navigation-item').eq(1).click();
|
||||
} else {
|
||||
$('.navigation-item').eq(0).click();
|
||||
|
|
@ -245,7 +242,7 @@ export default Component.extend({
|
|||
}
|
||||
|
||||
run.later(this, function() {
|
||||
$('.introjs-tooltip').velocity('scroll');
|
||||
$('.introjs-tooltip').velocity('scroll', { offset: -100 });
|
||||
}, 500);
|
||||
}).start();
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,11 +1,5 @@
|
|||
{{#if ready}}
|
||||
<div id="navigation">
|
||||
<div id="dimmer-container" {{action "toggleDimmer"}}>
|
||||
<div id="dimmer" class={{dimmerOnClass}} >
|
||||
<div id="dimmer-switch"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#each tabData as |tab|}}
|
||||
<span class="navigation-item text-uppercase {{if tab.selected "active"}}" {{action "changeTab" tab.name}}>{{tab.name}}</span>
|
||||
{{/each}}
|
||||
|
|
@ -17,6 +11,10 @@
|
|||
{{/paper-button}}
|
||||
{{/menu.trigger}}
|
||||
{{#menu.content width=3 as |content|}}
|
||||
{{#content.menu-item onClick="toggleDimmer"}}
|
||||
{{paper-icon "lightbulb outline" class=dimmerOnClass}} Dark Mode: {{if dimmerOn "On" "Off"}}
|
||||
{{/content.menu-item}}
|
||||
|
||||
{{#content.menu-item onClick="clearBridge"}}
|
||||
{{paper-icon "compare arrows" class=dimmerOnClass}} Switch bridge
|
||||
{{/content.menu-item}}
|
||||
|
|
@ -34,9 +32,9 @@
|
|||
|
||||
{{light-group lightsData=lightsData activeLights=activeLights syncLight=syncLight apiURL=apiURL dimmerOn=dimmerOn storage=storage}}
|
||||
|
||||
{{lights-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights syncLight=syncLight trial=trial active=lightsTabSelected colorLoopOn=colorLoopOn dimmerOn=dimmerOn playing=playing pauseLightUpdates=pauseLightUpdates}}
|
||||
{{lights-tab active=(eq selectedTab 0) apiURL=apiURL lightsData=lightsData activeLights=activeLights syncLight=syncLight trial=trial colorLoopOn=colorLoopOn dimmerOn=dimmerOn playing=playing pauseLightUpdates=pauseLightUpdates}}
|
||||
|
||||
{{music-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights active=musicTabSelected pauseLightUpdates=pauseLightUpdates dimmerOn=dimmerOn playing=playing storage=storage colorLoopOn=colorLoopOn action="startIntro"}}
|
||||
{{music-tab active=(eq selectedTab 1) apiURL=apiURL lightsData=lightsData activeLights=activeLights pauseLightUpdates=pauseLightUpdates dimmerOn=dimmerOn playing=playing storage=storage colorLoopOn=colorLoopOn action="startIntro"}}
|
||||
{{else}}
|
||||
{{paper-progress-circular diameter=100}}
|
||||
{{/if}}
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
this.get('kick').set({threshold: value});
|
||||
}
|
||||
|
||||
if(saveBeatPrefs && this.get('usingLocalAudio') && this.get('playQueuePointer') !== -1){
|
||||
if(saveBeatPrefs && this.get('playQueuePointer') !== -1){
|
||||
this.saveSongBeatPreferences();
|
||||
}
|
||||
|
||||
|
|
@ -288,7 +288,7 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
});
|
||||
|
||||
|
||||
['shuffle', 'repeat', 'threshold', 'playerBottomDisplayed', 'audioMode', 'songBeatPreferences', 'firstVisit', 'currentVisName', 'playQueue', 'playQueuePointer', 'micBoost', 'flashingTransitions', 'colorloopMode', 'ambienceMode', 'hueRange'].forEach((item)=>{
|
||||
['shuffle', 'repeat', 'threshold', 'playerBottomDisplayed', 'audioMode', 'songBeatPreferences', 'firstVisit', 'currentVisName', 'playQueue', 'playQueuePointer', 'flashingTransitions', 'colorloopMode', 'ambienceMode', 'hueRange'].forEach((item)=>{
|
||||
if (!isNone(storage.get('huegasm.' + item))) {
|
||||
let itemVal = storage.get('huegasm.' + item);
|
||||
|
||||
|
|
@ -436,38 +436,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
toggleIsShowingAddSoundCloudModal() {
|
||||
this.toggleProperty('isShowingAddSoundCloudModal');
|
||||
},
|
||||
useLocalAudio(){
|
||||
let audioStream = this.get('audioStream');
|
||||
this.changePlayerControl('audioMode', 0);
|
||||
|
||||
if(!isNone(audioStream)){
|
||||
let tracks = audioStream.getVideoTracks();
|
||||
if (tracks && tracks[0] && tracks[0].stop) {
|
||||
tracks[0].stop();
|
||||
}
|
||||
|
||||
if (audioStream.stop) {
|
||||
// deprecated, may be removed in future
|
||||
audioStream.stop();
|
||||
}
|
||||
|
||||
this.setProperties({
|
||||
audioStream: null,
|
||||
playing: false
|
||||
});
|
||||
}
|
||||
|
||||
if(this.get('playQueuePointer') !== -1) {
|
||||
this.send('goToSong', this.get('playQueuePointer'));
|
||||
}
|
||||
|
||||
// restore the old beat preferences ( before the user went into mic mode )
|
||||
if(!isNone(this.get('oldThreshold'))){
|
||||
this.set('threshold', this.get('oldThreshold'));
|
||||
}
|
||||
|
||||
document.title = 'Huegasm';
|
||||
},
|
||||
slideTogglePlayerBottom(){
|
||||
let elem = this.$('#player-bottom');
|
||||
|
||||
|
|
@ -690,17 +658,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
hueRangeChanged(value) {
|
||||
this.changePlayerControl('hueRange', value);
|
||||
},
|
||||
micBoostChanged(value) {
|
||||
this.set('micBoost', value);
|
||||
this.get('storage').set('huegasm.micBoost', value);
|
||||
},
|
||||
audioModeChanged(value){
|
||||
if(value === 0) {
|
||||
this.send('useLocalAudio');
|
||||
} else {
|
||||
this.set('audioMode', value);
|
||||
}
|
||||
},
|
||||
playQueuePointerChanged(value){
|
||||
this.send('goToSong', value, false, true);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -66,26 +66,11 @@ export default Mixin.create({
|
|||
from: function ( value ) { return value; }
|
||||
}
|
||||
}
|
||||
},
|
||||
micBoost: {
|
||||
range: {min: 1, max: 11},
|
||||
step: 0.5,
|
||||
defaultValue: 5,
|
||||
pips: {
|
||||
mode: 'positions',
|
||||
values: [0,20,40,60,80,100],
|
||||
density: 10,
|
||||
format: {
|
||||
to: function ( value ) {return 'x'+value;},
|
||||
from: function ( value ) { return value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
threshold: 0.3,
|
||||
hueRange: [0, 65535],
|
||||
micBoost: 5,
|
||||
oldThreshold: null,
|
||||
|
||||
playQueuePointer: -1,
|
||||
|
|
@ -94,11 +79,6 @@ export default Mixin.create({
|
|||
timeTotal: 0,
|
||||
lastLightBopIndex: 0,
|
||||
|
||||
// 0 - local, 1 - mic, possibly more to come
|
||||
audioMode: 0,
|
||||
usingLocalAudio: computed.equal('audioMode', 0),
|
||||
usingMicAudio: computed.equal('audioMode', 1),
|
||||
|
||||
playerBottomDisplayed: true,
|
||||
dragging: false,
|
||||
draggingOverPlayListArea: false,
|
||||
|
|
@ -139,7 +119,6 @@ export default Mixin.create({
|
|||
hueRangeConnect: [false, true, false],
|
||||
|
||||
SC_CLIENT_ID: 'aeec0034f58ecd85c2bd1deaecc41594',
|
||||
notFoundHtml: '<div class="alert alert-danger" role="alert">A microphone was not found.</div>',
|
||||
scUserNotSupportedHtml: '<div class="alert alert-danger" role="alert">SoundCloud user URLs are not supported.</div>',
|
||||
tooManySoundCloudFuckUps: '<div class="alert alert-danger" role="alert">The SoundCloud API is not seving the audio properly. More details <a href="https://www.soundcloudcommunity.com/soundcloud/topics/some-soundcloud-cdn-hosted-tracks-dont-have-access-control-allow-origin-header" target="_blank" rel="noopener noreferrer">HERE</a>.</div>',
|
||||
notStreamableHtml(fileNames){
|
||||
|
|
@ -157,11 +136,11 @@ export default Mixin.create({
|
|||
return '<div class="alert alert-danger" role="alert">Failed to decode file ( ' + fileName + ' ).</div>';
|
||||
},
|
||||
|
||||
scUrl: computed('playQueuePointer', 'playQueue.[]', 'usingMicAudio', function(){
|
||||
scUrl: computed('playQueuePointer', 'playQueue.[]', function(){
|
||||
let rtn = null,
|
||||
currentSong = this.get('playQueue')[this.get('playQueuePointer')];
|
||||
|
||||
if(currentSong && currentSong.scUrl && !this.get('usingMicAudio')){
|
||||
if(currentSong && currentSong.scUrl){
|
||||
rtn = currentSong.scUrl;
|
||||
}
|
||||
|
||||
|
|
@ -185,14 +164,13 @@ export default Mixin.create({
|
|||
return timeElapsed/timeTotal*100;
|
||||
}),
|
||||
|
||||
largeArtworkPic: computed('playQueuePointer', 'usingMicAudio', 'currentVisName', function(){
|
||||
largeArtworkPic: computed('playQueuePointer', 'currentVisName', function(){
|
||||
let pic = '',
|
||||
currentVisName = this.get('currentVisName'),
|
||||
usingMicAudio = this.get('usingMicAudio'),
|
||||
playQueuePointer = this.get('playQueuePointer'),
|
||||
playQueue = this.get('playQueue');
|
||||
|
||||
if(playQueuePointer !== -1 && !usingMicAudio && currentVisName === 'None'){
|
||||
if(playQueuePointer !== -1 && currentVisName === 'None'){
|
||||
let song = playQueue[playQueuePointer];
|
||||
if(song.scUrl && !isNone(song.picture)){
|
||||
pic = song.picture.replace('67x67', '500x500');
|
||||
|
|
@ -202,14 +180,6 @@ export default Mixin.create({
|
|||
return pic;
|
||||
}),
|
||||
|
||||
micIcon: computed('usingMicAudio', function(){
|
||||
if(this.get('usingMicAudio')) {
|
||||
return 'mic';
|
||||
}
|
||||
|
||||
return 'mic-off';
|
||||
}),
|
||||
|
||||
repeatIcon: computed('repeat', function() {
|
||||
if(this.get('repeat') === 2) {
|
||||
return 'repeat-one';
|
||||
|
|
@ -258,14 +228,6 @@ export default Mixin.create({
|
|||
return this.get('dimmerOn') ? 'dimmerOn' : null;
|
||||
}),
|
||||
|
||||
usingLocalAudioClass: computed('usingLocalAudio', function(){
|
||||
return this.get('usingLocalAudio') ? 'player-control-icon active' : 'player-control-icon';
|
||||
}),
|
||||
|
||||
usingMicAudioClass: computed('usingMicAudio', function(){
|
||||
return this.get('usingMicAudio') ? 'player-control-icon active' : 'player-control-icon';
|
||||
}),
|
||||
|
||||
repeatClass: computed('repeat', function(){
|
||||
return this.get('repeat') !== 0 ? 'player-control-icon active' : 'player-control-icon';
|
||||
}),
|
||||
|
|
@ -290,10 +252,8 @@ export default Mixin.create({
|
|||
return this.formatTime(this.get('timeTotal'));
|
||||
}),
|
||||
|
||||
onColorloopModeChange: observer('colorloopMode', 'usingMicAudio', 'playing', function(){
|
||||
let colorLoop = ((this.get('playing') || this.get('usingMicAudio')) && this.get('colorloopMode')) ? true : false;
|
||||
|
||||
this.set('colorLoopOn', colorLoop);
|
||||
onColorloopModeChange: observer('colorloopMode', 'playing', function(){
|
||||
this.set('colorLoopOn', this.get('playing') && this.get('colorloopMode'));
|
||||
}),
|
||||
|
||||
onOptionChange: observer('flashingTransitions', 'playQueue.[]', 'playQueuePointer', 'colorloopMode', 'ambienceMode', function(self, option){
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
{{paper-icon playerAreaClickIcon id="play-notification"}}
|
||||
|
||||
<div id="player-controls">
|
||||
{{#if usingLocalAudio}}
|
||||
{{range-slider start=seekPosition min=0 max=100 connect=filledConnect id="seek-slider" on-slide="seekChanged"}}
|
||||
|
||||
{{#if playQueueNotEmpty}}
|
||||
|
|
@ -21,7 +20,6 @@
|
|||
-->{{/if}}
|
||||
|
||||
<div id="player-time-controls">{{timeElapsedTxt}} / {{timeTotalTxt}}</div>
|
||||
{{/if}}
|
||||
|
||||
{{#paper-menu as |menu|}}
|
||||
{{#menu.trigger}}
|
||||
|
|
@ -51,11 +49,10 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="playlist" class="col-xs-12">
|
||||
<input id="file-input" type="file" accept="audio/*" multiple="true"/>
|
||||
<div id="playlist" class="col-xs-12">
|
||||
<input id="file-input" type="file" accept="audio/*" multiple="true"/>
|
||||
|
||||
<div id="play-list-controls">
|
||||
{{#if usingLocalAudio}}
|
||||
<div id="play-list-controls">
|
||||
{{#paper-menu as |menu|}}
|
||||
{{#menu.trigger}}
|
||||
{{#paper-button iconButton=false}}
|
||||
|
|
@ -71,20 +68,11 @@
|
|||
{{/content.menu-item}}
|
||||
{{/menu.content}}
|
||||
{{/paper-menu}}
|
||||
{{/if}}
|
||||
|
||||
{{#if usingLocalAudio}}
|
||||
<span {{action "shuffleChanged"}}>{{paper-icon "shuffle" class=shuffleClass}}</span>
|
||||
<span {{action "repeatChanged"}}>{{paper-icon repeatIcon class=repeatClass}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if usingMicAudio}}
|
||||
<div id="play-area-mic" class="{{if dimmerOn "dimmerOn"}}">
|
||||
{{paper-icon "mic" class=dimmerOnClass}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{#if usingLocalAudio}}
|
||||
|
||||
<div id="play-list-area" class={{playListAreaClass}} {{action "addLocalAudio"}}>
|
||||
{{#if playQueueEmpty}}
|
||||
<div id="dragHere">
|
||||
|
|
@ -120,9 +108,8 @@
|
|||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="slide-toggle" class="text-center row" {{action "slideTogglePlayerBottom"}}>
|
||||
|
|
|
|||
|
|
@ -67,21 +67,3 @@ body.dimmerOn {
|
|||
position: relative;
|
||||
bottom: 5px;
|
||||
}
|
||||
|
||||
#dimmer {
|
||||
background: url(images/lightswitch.png) !important;
|
||||
width: 14px;
|
||||
height: 34px;
|
||||
&.dimmerOn #dimmer-switch {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#dimmer-switch {
|
||||
background: url(images/lightswitch.png) -14px 0px;
|
||||
width: 14px;
|
||||
height: 34px;
|
||||
transition: opacity 0.4s;
|
||||
float: left;
|
||||
opacity: 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
/* Variables */
|
||||
$centersize: 80px;
|
||||
$center1size: 205px;
|
||||
$bezelsize: 240px;
|
||||
|
||||
/* Extenders */
|
||||
%base {
|
||||
border-radius: 100%;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,15 @@
|
|||
#navigation {
|
||||
padding: 15px 0 20px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
.ember-basic-dropdown-trigger {
|
||||
z-index: 3;
|
||||
text-align: right;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 10px;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
}
|
||||
|
||||
.navigation-item {
|
||||
|
|
@ -75,12 +84,3 @@
|
|||
top: 15px;
|
||||
font-size: 16px !important;
|
||||
}
|
||||
|
||||
#navigation .ember-basic-dropdown-trigger {
|
||||
z-index: 3;
|
||||
text-align: right;
|
||||
float: right;
|
||||
position: relative;
|
||||
bottom: 10px;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,7 +134,9 @@
|
|||
margin: 0 5px 1px 3px;
|
||||
}
|
||||
.ember-basic-dropdown-trigger {
|
||||
float: right;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
color: $whitish;
|
||||
.paper-button {
|
||||
margin: 0;
|
||||
|
|
@ -142,7 +144,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
#play-list-area, #play-area-mic {
|
||||
#play-list-area {
|
||||
background-color: white;
|
||||
width: 100%;
|
||||
height: 350px;
|
||||
|
|
@ -158,7 +160,7 @@
|
|||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
[md-font-icon="library-music"], [md-font-icon="mic"] {
|
||||
[md-font-icon="library-music"] {
|
||||
position: absolute;
|
||||
top: 40%;
|
||||
font-size: 100px;
|
||||
|
|
|
|||
|
|
@ -20,6 +20,10 @@ md-checkbox .md-label {
|
|||
}
|
||||
}
|
||||
|
||||
.ember-basic-dropdown-trigger {
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
md-progress-circular {
|
||||
margin: 0 auto 20px auto !important;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
"bootstrap-sass": "^3.3.5",
|
||||
"ember": "^2.10.0",
|
||||
"ember-cli-shims": "^0.1.0",
|
||||
"ember-load-initializers": "0.5.1",
|
||||
"ember-load-initializers": "^0.5.1",
|
||||
"ember-qunit-notifications": "0.1.0",
|
||||
"hammer.js": "^2.0.8",
|
||||
"intro.js": "^2.1.0",
|
||||
|
|
|
|||
|
|
@ -36,12 +36,13 @@
|
|||
"ember-cli-test-loader": "^1.1.0",
|
||||
"ember-cli-uglify": "^1.2.0",
|
||||
"ember-cordova": "^0.3.5",
|
||||
"ember-cordova-keyboard": "0.0.1",
|
||||
"ember-cordova-events": "^0.1.0",
|
||||
"ember-cordova-keyboard": "^0.0.1",
|
||||
"ember-export-application-global": "^1.0.4",
|
||||
"ember-load-initializers": "^0.5.0",
|
||||
"ember-modal-dialog": "^0.9.0",
|
||||
"ember-notify": "^5.0.4",
|
||||
"ember-paper": "^1.0.0-alpha.7",
|
||||
"ember-paper": "^1.0.0-alpha.11",
|
||||
"ember-resolver": "^2.0.3",
|
||||
"ember-truth-helpers": "^1.2.0",
|
||||
"loader.js": "^4.0.7"
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 1.7 KiB |
1186
mobile/yarn.lock
1186
mobile/yarn.lock
File diff suppressed because it is too large
Load diff
|
|
@ -20,9 +20,6 @@ export default Component.extend({
|
|||
selectedTab: 1,
|
||||
pauseLightUpdates: false,
|
||||
|
||||
lightsTabSelected: computed.equal('selectedTab', 0),
|
||||
musicTabSelected: computed.equal('selectedTab', 1),
|
||||
|
||||
displayFailure: true,
|
||||
|
||||
notify: inject.service(),
|
||||
|
|
@ -190,14 +187,13 @@ export default Component.extend({
|
|||
position: 'bottom'
|
||||
},
|
||||
{
|
||||
intro: 'And that\'s it...Hope you enjoy the application. ;)<br><br>' +
|
||||
'<i><b>TIP</b>: click on the lightswitch to switch to a darker theme.</i>'
|
||||
intro: 'And that\'s it...Hope you enjoy the application. ;)'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
intro.onchange((element) => {
|
||||
if(element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip'){
|
||||
if(element.id === '' || element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip'){
|
||||
$('.navigation-item').eq(0).click();
|
||||
} else {
|
||||
$('.navigation-item').eq(1).click();
|
||||
|
|
@ -220,7 +216,7 @@ export default Component.extend({
|
|||
}
|
||||
|
||||
run.later(this, function() {
|
||||
$('.introjs-tooltip').velocity('scroll');
|
||||
$('.introjs-tooltip').velocity('scroll', { offset: -100 });
|
||||
}, 500);
|
||||
}).start();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,5 @@
|
|||
{{#if ready}}
|
||||
<div id="navigation">
|
||||
<div id="dimmer-container" {{action "toggleDimmer"}}>
|
||||
<div id="dimmer" class={{dimmerOnClass}} >
|
||||
<div id="dimmer-switch"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#each tabData as |tab|}}
|
||||
<span class="navigation-item pointer text-uppercase {{if tab.selected "active"}}" {{action "changeTab" tab.name}}>{{tab.name}}</span>
|
||||
{{/each}}
|
||||
|
|
@ -16,6 +10,10 @@
|
|||
{{/paper-button}}
|
||||
{{/menu.trigger}}
|
||||
{{#menu.content width=3 as |content|}}
|
||||
{{#content.menu-item onClick="toggleDimmer"}}
|
||||
{{paper-icon "lightbulb outline" class=dimmerOnClass}} Dark Mode: {{if dimmerOn "On" "Off"}}
|
||||
{{/content.menu-item}}
|
||||
|
||||
{{#content.menu-item onClick="clearBridge"}}
|
||||
{{paper-icon "compare arrows" class=dimmerOnClass}} Switch bridge
|
||||
{{/content.menu-item}}
|
||||
|
|
@ -34,9 +32,9 @@
|
|||
{{light-group lightsData=lightsData activeLights=activeLights syncLight=syncLight apiURL=apiURL dimmerOn=dimmerOn storage=storage}}
|
||||
|
||||
<div class="row">
|
||||
{{lights-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights syncLight=syncLight trial=trial active=lightsTabSelected colorLoopOn=colorLoopOn dimmerOn=dimmerOn playing=playing pauseLightUpdates=pauseLightUpdates}}
|
||||
{{lights-tab active=(eq selectedTab 0) apiURL=apiURL lightsData=lightsData activeLights=activeLights syncLight=syncLight trial=trial colorLoopOn=colorLoopOn dimmerOn=dimmerOn playing=playing pauseLightUpdates=pauseLightUpdates}}
|
||||
|
||||
{{music-tab apiURL=apiURL lightsData=lightsData activeLights=activeLights active=musicTabSelected pauseLightUpdates=pauseLightUpdates dimmerOn=dimmerOn storage=storage colorLoopOn=colorLoopOn playing=playing action="startIntro"}}
|
||||
{{music-tab active=(eq selectedTab 1) apiURL=apiURL lightsData=lightsData activeLights=activeLights pauseLightUpdates=pauseLightUpdates dimmerOn=dimmerOn storage=storage colorLoopOn=colorLoopOn playing=playing action="startIntro"}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{paper-progress-circular diameter=100}}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ import Ember from 'ember';
|
|||
|
||||
const {
|
||||
Component,
|
||||
isEmpty
|
||||
isEmpty,
|
||||
$
|
||||
} = Ember;
|
||||
|
||||
export default Component.extend({
|
||||
|
|
@ -32,6 +33,7 @@ export default Component.extend({
|
|||
|
||||
isReady(){
|
||||
this.set('ready', true);
|
||||
$('html, body').velocity('scroll');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
this.get('kick').set({threshold: value});
|
||||
}
|
||||
|
||||
if(saveBeatPrefs && this.get('usingLocalAudio') && this.get('playQueuePointer') !== -1){
|
||||
if(saveBeatPrefs && this.get('playQueuePointer') !== -1){
|
||||
this.saveSongBeatPreferences();
|
||||
}
|
||||
|
||||
|
|
@ -168,46 +168,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
});
|
||||
},
|
||||
|
||||
startUsingMic() {
|
||||
navigator.getUserMedia(
|
||||
{audio: true},
|
||||
(stream) => {
|
||||
this.changePlayerControl('audioMode', 1);
|
||||
let dancer = this.get('dancer');
|
||||
|
||||
if(dancer.audio && dancer.audio.pause) {
|
||||
dancer.pause();
|
||||
}
|
||||
|
||||
this.setProperties({
|
||||
volumeCache: this.get('volume'),
|
||||
playing: true,
|
||||
audioStream: stream
|
||||
});
|
||||
|
||||
document.title = 'Listening to Mic - Huegasm';
|
||||
|
||||
dancer.load(stream, this.get('micBoost'), true);
|
||||
this.set('usingBeatPreferences', false);
|
||||
|
||||
// much more sensitive beat preference settings are needed for mic mode
|
||||
this.setProperties({
|
||||
oldThreshold: this.get('threshold'),
|
||||
threshold: 0.1
|
||||
});
|
||||
|
||||
dancer.setVolume(0);
|
||||
},
|
||||
(err) => {
|
||||
if(err.name === 'DevicesNotFoundError'){
|
||||
this.get('notify').alert({html: this.get('notFoundHtml')});
|
||||
}
|
||||
|
||||
console.log('Error during navigator.getUserMedia: ' + err.name + ', ' + err.message + ', ' + err.constraintName);
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
clearCurrentAudio(resetPointer) {
|
||||
let dancer = this.get('dancer');
|
||||
|
||||
|
|
@ -341,11 +301,7 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
kick: kick
|
||||
});
|
||||
|
||||
if(navigator.getUserMedia === undefined){
|
||||
this.set('usingMicSupported', false);
|
||||
}
|
||||
|
||||
['volume', 'shuffle', 'repeat', 'volumeMuted', 'threshold', 'playerBottomDisplayed', 'audioMode', 'songBeatPreferences', 'firstVisit', 'currentVisName', 'playQueue', 'playQueuePointer', 'micBoost', 'flashingTransitions', 'colorloopMode', 'ambienceMode', 'hueRange'].forEach((item)=>{
|
||||
['volume', 'shuffle', 'repeat', 'volumeMuted', 'threshold', 'playerBottomDisplayed', 'songBeatPreferences', 'firstVisit', 'currentVisName', 'playQueue', 'playQueuePointer', 'flashingTransitions', 'colorloopMode', 'ambienceMode', 'hueRange'].forEach((item)=>{
|
||||
if (!isNone(storage.get('huegasm.' + item))) {
|
||||
let itemVal = storage.get('huegasm.' + item);
|
||||
|
||||
|
|
@ -395,7 +351,7 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
|
||||
// control the volume by scrolling up/down
|
||||
$('#player-area').on('mousewheel', (event)=>{
|
||||
if(this.get('playQueueNotEmpty') && !this.get('usingMicAudio')) {
|
||||
if(this.get('playQueueNotEmpty')) {
|
||||
let scrollSize = 5;
|
||||
|
||||
if(event.deltaY < 0) {
|
||||
|
|
@ -515,46 +471,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
toggleIsShowingAddSoundCloudModal() {
|
||||
this.toggleProperty('isShowingAddSoundCloudModal');
|
||||
},
|
||||
useLocalAudio(){
|
||||
let audioStream = this.get('audioStream');
|
||||
this.changePlayerControl('audioMode', 0);
|
||||
|
||||
if(!isNone(audioStream)){
|
||||
let tracks = audioStream.getVideoTracks();
|
||||
if (tracks && tracks[0] && tracks[0].stop) {
|
||||
tracks[0].stop();
|
||||
}
|
||||
|
||||
if (audioStream.stop) {
|
||||
// deprecated, may be removed in future
|
||||
audioStream.stop();
|
||||
}
|
||||
|
||||
this.setProperties({
|
||||
audioStream: null,
|
||||
playing: false
|
||||
});
|
||||
}
|
||||
|
||||
if(this.get('playQueuePointer') !== -1) {
|
||||
this.send('goToSong', this.get('playQueuePointer'));
|
||||
this.send('volumeChanged', this.get('volume'));
|
||||
}
|
||||
|
||||
// restore the old beat preferences ( before the user went into mic mode )
|
||||
if(!isNone(this.get('oldThreshold'))){
|
||||
this.set('threshold', this.get('oldThreshold'));
|
||||
}
|
||||
|
||||
document.title = 'Huegasm';
|
||||
},
|
||||
useMicAudio() {
|
||||
if(this.get('usingMicAudio')) {
|
||||
this.send('useLocalAudio');
|
||||
} else {
|
||||
this.startUsingMic();
|
||||
}
|
||||
},
|
||||
slideTogglePlayerBottom(){
|
||||
let elem = this.$('#player-bottom');
|
||||
|
||||
|
|
@ -810,23 +726,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
|
|||
hueRangeChanged(value) {
|
||||
this.changePlayerControl('hueRange', value);
|
||||
},
|
||||
micBoostChanged(value) {
|
||||
this.set('micBoost', value);
|
||||
this.get('storage').set('huegasm.micBoost', value);
|
||||
|
||||
if(this.get('usingMicAudio')) {
|
||||
this.get('dancer').setBoost(value);
|
||||
}
|
||||
},
|
||||
audioModeChanged(value){
|
||||
if(value === 1) {
|
||||
this.startUsingMic();
|
||||
} else if(value === 0) {
|
||||
this.send('useLocalAudio');
|
||||
} else {
|
||||
this.set('audioMode', value);
|
||||
}
|
||||
},
|
||||
playQueuePointerChanged(value){
|
||||
this.send('goToSong', value, false, true);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ const {
|
|||
} = Ember;
|
||||
|
||||
export default Mixin.create({
|
||||
classNames: ['col-sm-10', 'col-sm-offset-1', 'col-xs-12'],
|
||||
classNames: ['col-sm-8', 'col-sm-offset-2', 'col-xs-12'],
|
||||
classNameBindings: ['active::hidden'],
|
||||
elementId: 'music-tab',
|
||||
|
||||
|
|
@ -68,26 +68,11 @@ export default Mixin.create({
|
|||
from: function ( value ) { return value; }
|
||||
}
|
||||
}
|
||||
},
|
||||
micBoost: {
|
||||
range: {min: 1, max: 11},
|
||||
step: 0.5,
|
||||
defaultValue: 5,
|
||||
pips: {
|
||||
mode: 'positions',
|
||||
values: [0,20,40,60,80,100],
|
||||
density: 10,
|
||||
format: {
|
||||
to: function ( value ) {return 'x'+value;},
|
||||
from: function ( value ) { return value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
threshold: 0.3,
|
||||
hueRange: [0, 65535],
|
||||
micBoost: 5,
|
||||
oldThreshold: null,
|
||||
|
||||
playQueuePointer: -1,
|
||||
|
|
@ -95,12 +80,6 @@ export default Mixin.create({
|
|||
timeElapsed: 0,
|
||||
timeTotal: 0,
|
||||
lastLightBopIndex: 0,
|
||||
usingMicSupported: false,
|
||||
|
||||
// 0 - local, 1 - mic, possibly more to come
|
||||
audioMode: 0,
|
||||
usingLocalAudio: computed.equal('audioMode', 0),
|
||||
usingMicAudio: computed.equal('audioMode', 1),
|
||||
|
||||
playerBottomDisplayed: true,
|
||||
dragging: false,
|
||||
|
|
@ -143,7 +122,6 @@ export default Mixin.create({
|
|||
hueRangeConnect: [false, true, false],
|
||||
|
||||
SC_CLIENT_ID: 'aeec0034f58ecd85c2bd1deaecc41594',
|
||||
notFoundHtml: '<div class="alert alert-danger" role="alert">A microphone was not found.</div>',
|
||||
scUserNotSupportedHtml: '<div class="alert alert-danger" role="alert">SoundCloud user URLs are not supported.</div>',
|
||||
tooManySoundCloudFuckUps: '<div class="alert alert-danger" role="alert">The SoundCloud API is not seving the audio properly. More details <a href="https://www.soundcloudcommunity.com/soundcloud/topics/some-soundcloud-cdn-hosted-tracks-dont-have-access-control-allow-origin-header" target="_blank" rel="noopener noreferrer">HERE</a>.</div>',
|
||||
notStreamableHtml(fileNames){
|
||||
|
|
@ -161,11 +139,11 @@ export default Mixin.create({
|
|||
return '<div class="alert alert-danger" role="alert">Failed to decode file ( ' + fileName + ' ).</div>';
|
||||
},
|
||||
|
||||
scUrl: computed('playQueuePointer', 'playQueue.[]', 'usingMicAudio', function(){
|
||||
scUrl: computed('playQueuePointer', 'playQueue.[]', function(){
|
||||
let rtn = null,
|
||||
currentSong = this.get('playQueue')[this.get('playQueuePointer')];
|
||||
|
||||
if(currentSong && currentSong.scUrl && !this.get('usingMicAudio')){
|
||||
if(currentSong && currentSong.scUrl){
|
||||
rtn = currentSong.scUrl;
|
||||
}
|
||||
|
||||
|
|
@ -189,14 +167,13 @@ export default Mixin.create({
|
|||
return timeElapsed/timeTotal*100;
|
||||
}),
|
||||
|
||||
largeArtworkPic: computed('playQueuePointer', 'usingMicAudio', 'currentVisName', function(){
|
||||
largeArtworkPic: computed('playQueuePointer', 'currentVisName', function(){
|
||||
let pic = '',
|
||||
currentVisName = this.get('currentVisName'),
|
||||
usingMicAudio = this.get('usingMicAudio'),
|
||||
playQueuePointer = this.get('playQueuePointer'),
|
||||
playQueue = this.get('playQueue');
|
||||
|
||||
if(playQueuePointer !== -1 && !usingMicAudio && currentVisName === 'None'){
|
||||
if(playQueuePointer !== -1 && currentVisName === 'None'){
|
||||
let song = playQueue[playQueuePointer];
|
||||
if(song.scUrl && !isNone(song.picture)){
|
||||
pic = song.picture.replace('67x67', '500x500');
|
||||
|
|
@ -206,14 +183,6 @@ export default Mixin.create({
|
|||
return pic;
|
||||
}),
|
||||
|
||||
micIcon: computed('usingMicAudio', function(){
|
||||
if(this.get('usingMicAudio')) {
|
||||
return 'mic';
|
||||
}
|
||||
|
||||
return 'mic-off';
|
||||
}),
|
||||
|
||||
repeatIcon: computed('repeat', function() {
|
||||
if(this.get('repeat') === 2) {
|
||||
return 'repeat-one';
|
||||
|
|
@ -272,14 +241,6 @@ export default Mixin.create({
|
|||
return classes;
|
||||
}),
|
||||
|
||||
usingLocalAudioClass: computed('usingLocalAudio', function(){
|
||||
return this.get('usingLocalAudio') ? 'player-control-icon active' : 'player-control-icon';
|
||||
}),
|
||||
|
||||
usingMicAudioClass: computed('usingMicAudio', function(){
|
||||
return this.get('usingMicAudio') ? 'player-control-icon active' : 'player-control-icon';
|
||||
}),
|
||||
|
||||
repeatClass: computed('repeat', function(){
|
||||
return this.get('repeat') !== 0 ? 'player-control-icon active' : 'player-control-icon';
|
||||
}),
|
||||
|
|
@ -318,10 +279,8 @@ export default Mixin.create({
|
|||
return this.formatTime(this.get('timeTotal'));
|
||||
}),
|
||||
|
||||
onColorloopModeChange: observer('colorloopMode', 'usingMicAudio', 'playing', function(){
|
||||
let colorLoop = ((this.get('playing') || this.get('usingMicAudio')) && this.get('colorloopMode')) ? true : false;
|
||||
|
||||
this.set('colorLoopOn', colorLoop);
|
||||
onColorloopModeChange: observer('colorloopMode', 'playing', function(){
|
||||
this.set('colorLoopOn', this.get('playing') && this.get('colorloopMode'));
|
||||
}),
|
||||
|
||||
onOptionChange: observer('flashingTransitions', 'playQueue.[]', 'playQueuePointer', 'colorloopMode', 'ambienceMode', function(self, option){
|
||||
|
|
@ -341,16 +300,6 @@ export default Mixin.create({
|
|||
this.changeTooltipText(type, tooltipTxt);
|
||||
})),
|
||||
|
||||
onUsingMicAudioChange: on('init', observer('usingMicAudio', function(){
|
||||
let tooltipTxt = 'Listen to audio through mic', type = 'usingMicAudio';
|
||||
|
||||
if (this.get(type)) {
|
||||
tooltipTxt = 'Listen to audio files';
|
||||
}
|
||||
|
||||
this.changeTooltipText(type, tooltipTxt);
|
||||
})),
|
||||
|
||||
onShuffleChange: on('init', observer('shuffle', function () {
|
||||
let tooltipTxt = 'Shuffle', type = 'shuffle';
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
{{paper-icon playerAreaClickIcon id="play-notification"}}
|
||||
|
||||
<div id="player-controls">
|
||||
{{#if usingLocalAudio}}
|
||||
{{range-slider start=seekPosition min=0 max=100 connect=filledConnect id="seek-slider" on-slide="seekChanged"}}
|
||||
|
||||
{{#if playQueueNotEmpty}}
|
||||
|
|
@ -27,7 +26,6 @@
|
|||
-->{{range-slider start=volume min=0 max=100 connect=filledConnect on-slide="volumeChanged" id="volume-bar" class="hidden-xs"}}
|
||||
|
||||
<div id="player-time-controls">{{timeElapsedTxt}} / {{timeTotalTxt}}</div>
|
||||
{{/if}}
|
||||
|
||||
{{#paper-menu as |menu|}}
|
||||
{{#menu.trigger}}
|
||||
|
|
@ -61,7 +59,6 @@
|
|||
<input id="file-input" type="file" accept="audio/*" multiple="true"/>
|
||||
|
||||
<div id="play-list-controls">
|
||||
{{#if usingLocalAudio}}
|
||||
{{#paper-menu as |menu|}}
|
||||
{{#menu.trigger}}
|
||||
{{#paper-button iconButton=false}}
|
||||
|
|
@ -77,25 +74,12 @@
|
|||
{{/content.menu-item}}
|
||||
{{/menu.content}}
|
||||
{{/paper-menu}}
|
||||
{{/if}}
|
||||
|
||||
{{#if usingMicSupported}}
|
||||
<span data-toggle="tooltip" data-placement="top auto" class="bootstrap-tooltip" id="using-mic-audio-tooltip" data-title={{usingMicAudioTooltipTxt}} {{action "useMicAudio"}}>{{paper-icon icon=micIcon class=usingMicAudioClass}}</span>
|
||||
{{/if}}
|
||||
|
||||
{{#if usingLocalAudio}}
|
||||
<span data-toggle="tooltip" data-placement="top auto" class="bootstrap-tooltip" id="shuffleTooltip" data-title={{shuffleTooltipTxt}} {{action "shuffleChanged"}}>{{paper-icon "shuffle" class=shuffleClass}}</span>
|
||||
<span data-toggle="tooltip" data-placement="top auto" class="bootstrap-tooltip" id="repeatTooltip" data-title={{repeatTooltipTxt}} {{action "repeatChanged"}}>{{paper-icon repeatIcon class=repeatClass}}</span>
|
||||
<span data-toggle="tooltip" data-placement="top auto" class="bootstrap-tooltip hidden-xs" data-title="Clear playlist" {{action "clearPlaylist"}}>{{paper-icon "clear-all" class="player-control-icon"}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if usingMicAudio}}
|
||||
<div id="play-area-mic" class="{{if dimmerOn "dimmerOn"}}">
|
||||
{{paper-icon "mic" class=dimmerOnClass}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{#if usingLocalAudio}}
|
||||
<div id="play-list-area" class={{playListAreaClass}} {{action "addLocalAudio"}} {{action "playerListAreaDragOver" on="dragOver"}} {{action "playerListAreaDragLeave" on="dragLeave"}} {{action "dropFiles" on="drop"}}>
|
||||
{{#if (or playQueueEmpty dragging)}}
|
||||
<div id="dragHere">
|
||||
|
|
@ -135,8 +119,6 @@
|
|||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -171,16 +153,6 @@
|
|||
{{range-slider start=threshold orientation="vertical" step=beatOptions.threshold.step range=beatOptions.threshold.range on-slide="thresholdChanged" pips=beatOptions.threshold.pips}}
|
||||
</div>
|
||||
|
||||
{{#if usingMicAudio}}
|
||||
<div class="beat-option col-xs-4">
|
||||
<span data-toggle="tooltip" data-placement="top" data-title="The coefficient to boost the microphone signal by" class="option-description bootstrap-tooltip">
|
||||
Mic Boost
|
||||
</span>
|
||||
|
||||
{{range-slider start=micBoost orientation="vertical" step=beatOptions.micBoost.step range=beatOptions.micBoost.range on-slide="micBoostChanged" pips=beatOptions.micBoost.pips}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div id="light-option" class="beat-option col-sm-4 col-xs-12">
|
||||
<span data-toggle="tooltip" data-placement="top auto" data-title="Quickly flash the lights on beat" class="bootstrap-tooltip" {{action "hideTooltip" on="mouseLeave"}}>
|
||||
{{paper-checkbox value=flashingTransitions onChange=(action (mut flashingTransitions)) label="Flashing Transitions"}}
|
||||
|
|
|
|||
|
|
@ -74,29 +74,3 @@ body.dimmerOn {
|
|||
background: url(images/huegasm.png) center center no-repeat;
|
||||
background-size: 40px 40px;
|
||||
}
|
||||
|
||||
#dimmer-container {
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
padding: 5px 10px;
|
||||
position: relative;
|
||||
bottom: 5px;
|
||||
}
|
||||
|
||||
#dimmer {
|
||||
background: url(images/lightswitch.png) !important;
|
||||
width: 14px;
|
||||
height: 34px;
|
||||
&.dimmerOn #dimmer-switch {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#dimmer-switch {
|
||||
background: url(images/lightswitch.png) -14px 0px;
|
||||
width: 14px;
|
||||
height: 34px;
|
||||
transition: opacity 0.4s;
|
||||
float: left;
|
||||
opacity: 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
/* Variables */
|
||||
$centersize: 80px;
|
||||
$center1size: 205px;
|
||||
$bezelsize: 240px;
|
||||
|
||||
/* Extenders */
|
||||
%base {
|
||||
border-radius: 100%;
|
||||
}
|
||||
|
|
@ -34,6 +32,7 @@ $bezelsize: 240px;
|
|||
background: radial-gradient(ellipse at center, rgba(0,0,0,1) 0%,rgba(79,79,79,1) 0%,rgba(0,0,0,1) 100%);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 1);
|
||||
}
|
||||
|
||||
#beat-speaker-center-outer {
|
||||
@extend %base;
|
||||
position: absolute;
|
||||
|
|
@ -49,6 +48,7 @@ $bezelsize: 240px;
|
|||
background: -ms-linear-gradient(130deg, rgba(117, 117, 117, 1) 55%, rgba(220, 220, 220, 1) 100%);
|
||||
background: linear-gradient(130deg, rgba(117, 117, 117, 1) 55%, rgba(220, 220, 220, 1) 100%);
|
||||
}
|
||||
|
||||
.bezel {
|
||||
@extend %base;
|
||||
margin: 0 auto;
|
||||
|
|
@ -60,6 +60,7 @@ $bezelsize: 240px;
|
|||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
.rivet1 {
|
||||
@extend %rivet;
|
||||
top: 6px;
|
||||
|
|
|
|||
|
|
@ -42,6 +42,15 @@
|
|||
padding: 15px 0;
|
||||
text-align: center;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
.ember-basic-dropdown-trigger {
|
||||
z-index: 3;
|
||||
text-align: right;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 10px;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
}
|
||||
|
||||
.navigation-item {
|
||||
|
|
@ -61,10 +70,6 @@
|
|||
border: 1px solid rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.color-row .md-list-item-inner {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
#color-picker {
|
||||
padding: 5px;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
|
|
@ -96,15 +101,6 @@
|
|||
font-size: 16px !important;
|
||||
}
|
||||
|
||||
#navigation .ember-basic-dropdown-trigger {
|
||||
z-index: 3;
|
||||
text-align: right;
|
||||
float: right;
|
||||
position: relative;
|
||||
bottom: 10px;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
@media(min-width:767px) {
|
||||
#lights-tab {
|
||||
font-size: 20px;
|
||||
|
|
|
|||
|
|
@ -159,7 +159,9 @@
|
|||
margin: 0 5px 1px 3px;
|
||||
}
|
||||
.ember-basic-dropdown-trigger {
|
||||
float: right;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
color: $whitish;
|
||||
.paper-button {
|
||||
margin: 0;
|
||||
|
|
@ -167,7 +169,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
#play-list-area, #play-area-mic {
|
||||
#play-list-area {
|
||||
background-color: white;
|
||||
width: 100%;
|
||||
height: 350px;
|
||||
|
|
@ -183,7 +185,7 @@
|
|||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
[md-font-icon="library-music"], [md-font-icon="mic"] {
|
||||
[md-font-icon="library-music"] {
|
||||
position: absolute;
|
||||
top: 40%;
|
||||
font-size: 100px;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,10 @@ md-switch.md-default-theme.md-checked .md-thumb {
|
|||
background-color: $secondaryThemeColor;
|
||||
}
|
||||
|
||||
.ember-basic-dropdown-trigger {
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
@media(max-width:500px) {
|
||||
#save-beat-preferences-star {
|
||||
right: 5px;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "huegasm",
|
||||
"version": "1.1.0",
|
||||
"version": "1.2.0",
|
||||
"description": "Huegasm is a free web application for managing and synchronizing your Philips Hue lights with the beat of your music.",
|
||||
"private": true,
|
||||
"directories": {
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
"test": "ember test"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.10.0"
|
||||
"node": ">= 0.12.0"
|
||||
},
|
||||
"author": "Egor Philippov",
|
||||
"license": "MIT",
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
"ember-load-initializers": "^0.5.0",
|
||||
"ember-modal-dialog": "^0.9.0",
|
||||
"ember-notify": "^5.0.4",
|
||||
"ember-paper": "^1.0.0-alpha.7",
|
||||
"ember-paper": "^1.0.0-alpha.11",
|
||||
"ember-resolver": "^2.0.3",
|
||||
"ember-truth-helpers": "^1.2.0",
|
||||
"loader.js": "^4.0.7"
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 1.7 KiB |
|
|
@ -177,10 +177,6 @@ ast-types@0.8.12:
|
|||
version "0.8.12"
|
||||
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc"
|
||||
|
||||
ast-types@0.8.15:
|
||||
version "0.8.15"
|
||||
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52"
|
||||
|
||||
ast-types@0.9.2:
|
||||
version "0.9.2"
|
||||
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.2.tgz#2cc19979d15c655108bf565323b8e7ee38751f6b"
|
||||
|
|
@ -527,8 +523,8 @@ broccoli-brocfile-loader@^0.18.0:
|
|||
findup-sync "^0.4.2"
|
||||
|
||||
broccoli-builder@^0.18.0:
|
||||
version "0.18.1"
|
||||
resolved "https://registry.yarnpkg.com/broccoli-builder/-/broccoli-builder-0.18.1.tgz#a25ea2f53a5d1e7da8c38304db4b046cc23f66df"
|
||||
version "0.18.2"
|
||||
resolved "https://registry.yarnpkg.com/broccoli-builder/-/broccoli-builder-0.18.2.tgz#2093ca0b1ac793e30d0810913399da98fb2d0667"
|
||||
dependencies:
|
||||
heimdalljs "^0.2.0"
|
||||
promise-map-series "^0.2.1"
|
||||
|
|
@ -871,8 +867,8 @@ can-symlink@^1.0.0:
|
|||
tmp "0.0.28"
|
||||
|
||||
caniuse-db@^1.0.30000153, caniuse-db@^1.0.30000214:
|
||||
version "1.0.30000592"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000592.tgz#7b916023941df4063d9d946a1f9ad0d5edaf2bcd"
|
||||
version "1.0.30000597"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000597.tgz#b52e6cbe9dc83669affb98501629feaee1af6588"
|
||||
|
||||
capture-exit@^1.0.4:
|
||||
version "1.0.7"
|
||||
|
|
@ -956,8 +952,8 @@ clean-css-promise@^0.1.0:
|
|||
pinkie-promise "^2.0.0"
|
||||
|
||||
clean-css@^3.4.5:
|
||||
version "3.4.21"
|
||||
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.21.tgz#2101d5dbd19d63dbc16a75ebd570e7c33948f65b"
|
||||
version "3.4.22"
|
||||
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.22.tgz#db323064f752028778233b58c54cd8535f860892"
|
||||
dependencies:
|
||||
commander "2.8.x"
|
||||
source-map "0.4.x"
|
||||
|
|
@ -1415,8 +1411,8 @@ ee-first@1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
|
||||
ember-ajax@^2.0.1:
|
||||
version "2.5.2"
|
||||
resolved "https://registry.yarnpkg.com/ember-ajax/-/ember-ajax-2.5.2.tgz#aefd6f860b03ab75c97e73ed410aa9e371ea88c6"
|
||||
version "2.5.3"
|
||||
resolved "https://registry.yarnpkg.com/ember-ajax/-/ember-ajax-2.5.3.tgz#02dded6c132290edd47ee9862a7a8821c6919dad"
|
||||
dependencies:
|
||||
ember-cli-babel "^5.1.5"
|
||||
|
||||
|
|
@ -1457,8 +1453,8 @@ ember-cli-babel@^5.0.0, ember-cli-babel@^5.1.10, ember-cli-babel@^5.1.3, ember-c
|
|||
resolve "^1.1.2"
|
||||
|
||||
ember-cli-broccoli-sane-watcher@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/ember-cli-broccoli-sane-watcher/-/ember-cli-broccoli-sane-watcher-2.0.3.tgz#756163e08cdbb012a3421a1eb695497a834d351b"
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/ember-cli-broccoli-sane-watcher/-/ember-cli-broccoli-sane-watcher-2.0.4.tgz#f43f42f75b7509c212fb926cd9aea86ae19264c6"
|
||||
dependencies:
|
||||
broccoli-slow-trees "^3.0.1"
|
||||
heimdalljs "^0.2.1"
|
||||
|
|
@ -1510,8 +1506,8 @@ ember-cli-is-package-missing@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/ember-cli-is-package-missing/-/ember-cli-is-package-missing-1.0.0.tgz#6e6184cafb92635dd93ca6c946b104292d4e3390"
|
||||
|
||||
ember-cli-legacy-blueprints@^0.1.2:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/ember-cli-legacy-blueprints/-/ember-cli-legacy-blueprints-0.1.3.tgz#caf477a775229a0cd6a28b659304943db1367770"
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/ember-cli-legacy-blueprints/-/ember-cli-legacy-blueprints-0.1.4.tgz#83d6c005ac0e39750ff9dd45cd1b78cf697150c6"
|
||||
dependencies:
|
||||
chalk "^1.1.1"
|
||||
ember-cli-get-component-path-option "^1.0.0"
|
||||
|
|
@ -1792,7 +1788,7 @@ ember-notify@^5.0.4:
|
|||
ember-string-ishtmlsafe-polyfill "1.0.1"
|
||||
object-assign "^4.1.0"
|
||||
|
||||
ember-paper@^1.0.0-alpha.7:
|
||||
ember-paper@^1.0.0-alpha.11:
|
||||
version "1.0.0-alpha.11"
|
||||
resolved "https://registry.yarnpkg.com/ember-paper/-/ember-paper-1.0.0-alpha.11.tgz#200a729a8bb9e1cc0fe2788785e5b404d18fd291"
|
||||
dependencies:
|
||||
|
|
@ -2169,7 +2165,7 @@ faye-websocket@~0.10.0:
|
|||
|
||||
fb-watchman@^1.8.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.0.tgz#6f268f1f347a6b3c875d1e89da7e1ed79adfc0ec"
|
||||
resolved "http://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.0.tgz#6f268f1f347a6b3c875d1e89da7e1ed79adfc0ec"
|
||||
dependencies:
|
||||
bser "^1.0.2"
|
||||
|
||||
|
|
@ -2280,7 +2276,7 @@ fresh@0.3.0:
|
|||
|
||||
fs-exists-sync@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "http://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
|
||||
resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
|
||||
|
||||
fs-extra@0.30.0, fs-extra@^0.30.0:
|
||||
version "0.30.0"
|
||||
|
|
@ -2427,7 +2423,11 @@ getpass@^0.1.1:
|
|||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
|
||||
git-repo-info@^1.0.4, git-repo-info@~1.2.0:
|
||||
git-repo-info@^1.0.4:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.3.1.tgz#0c1a19ef1964b822a7230f087396af80481ce8ec"
|
||||
|
||||
git-repo-info@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.2.0.tgz#43d8513e04a24dd441330a2f7c6655a709fdbaf2"
|
||||
|
||||
|
|
@ -2862,7 +2862,7 @@ is-obj@^1.0.0:
|
|||
|
||||
is-posix-bracket@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "http://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
|
||||
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
|
||||
|
||||
is-primitive@^2.0.0:
|
||||
version "2.0.0"
|
||||
|
|
@ -3097,8 +3097,8 @@ load-json-file@^1.0.0:
|
|||
strip-bom "^2.0.0"
|
||||
|
||||
loader.js@^4.0.7:
|
||||
version "4.0.11"
|
||||
resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.0.11.tgz#457d7cdcff1badfc9837441a562957dae7eeecea"
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.1.0.tgz#1d0897a62f8b7375d3d9cd1ae6acf798c36c1ffe"
|
||||
|
||||
lockfile@~1.0.1:
|
||||
version "1.0.3"
|
||||
|
|
@ -3530,7 +3530,7 @@ minimatch@^2.0.3:
|
|||
dependencies:
|
||||
brace-expansion "^1.0.0"
|
||||
|
||||
minimist@0.0.8, minimist@~0.0.1:
|
||||
minimist@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||
|
||||
|
|
@ -3538,6 +3538,10 @@ minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3:
|
|||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||
|
||||
minimist@~0.0.1:
|
||||
version "0.0.10"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
|
||||
|
||||
mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||
|
|
@ -3659,8 +3663,8 @@ node-notifier@^4.3.1:
|
|||
which "^1.0.5"
|
||||
|
||||
node-sass@^3.8.0:
|
||||
version "3.13.0"
|
||||
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.13.0.tgz#d08b95bdebf40941571bd2c16a9334b980f8924f"
|
||||
version "3.13.1"
|
||||
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.13.1.tgz#7240fbbff2396304b4223527ed3020589c004fc2"
|
||||
dependencies:
|
||||
async-foreach "^0.1.3"
|
||||
chalk "^1.1.1"
|
||||
|
|
@ -3829,8 +3833,8 @@ npm@3.10.8:
|
|||
set-blocking "~2.0.0"
|
||||
|
||||
npmlog@^4.0.0, npmlog@~4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.1.tgz#d14f503b4cd79710375553004ba96e6662fbc0b8"
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
|
||||
dependencies:
|
||||
are-we-there-yet "~1.1.2"
|
||||
console-control-strings "~1.1.0"
|
||||
|
|
@ -3931,8 +3935,8 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
|
||||
osenv@0, osenv@^0.1.0, osenv@^0.1.3, osenv@~0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.3.tgz#83cf05c6d6458fc4d5ac6362ea325d92f2754217"
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
|
||||
dependencies:
|
||||
os-homedir "^1.0.0"
|
||||
os-tmpdir "^1.0.0"
|
||||
|
|
@ -4113,11 +4117,11 @@ q@^1.1.2:
|
|||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
|
||||
|
||||
qs@6.2.0, qs@~6.2.0:
|
||||
qs@6.2.0, qs@^6.2.0, qs@~6.2.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b"
|
||||
|
||||
qs@^6.2.0, qs@~6.3.0:
|
||||
qs@~6.3.0:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
|
||||
|
||||
|
|
@ -4280,7 +4284,7 @@ realize-package-specifier@~3.0.3:
|
|||
dezalgo "^1.0.1"
|
||||
npm-package-arg "^4.1.1"
|
||||
|
||||
recast@0.10.33:
|
||||
recast@0.10.33, recast@^0.10.10:
|
||||
version "0.10.33"
|
||||
resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697"
|
||||
dependencies:
|
||||
|
|
@ -4289,15 +4293,6 @@ recast@0.10.33:
|
|||
private "~0.1.5"
|
||||
source-map "~0.5.0"
|
||||
|
||||
recast@^0.10.10:
|
||||
version "0.10.43"
|
||||
resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f"
|
||||
dependencies:
|
||||
ast-types "0.8.15"
|
||||
esprima-fb "~15001.1001.0-dev-harmony-fb"
|
||||
private "~0.1.5"
|
||||
source-map "~0.5.0"
|
||||
|
||||
recast@^0.11.17, recast@^0.11.3:
|
||||
version "0.11.18"
|
||||
resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.18.tgz#07af6257ca769868815209401d4d60eef1b5b947"
|
||||
|
|
@ -4347,7 +4342,7 @@ regenerator@0.8.40:
|
|||
|
||||
regex-cache@^0.4.2:
|
||||
version "0.4.3"
|
||||
resolved "http://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
|
||||
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
|
||||
dependencies:
|
||||
is-equal-shallow "^0.1.3"
|
||||
is-primitive "^2.0.0"
|
||||
|
|
@ -4463,8 +4458,8 @@ resolve-dir@^0.1.0:
|
|||
global-modules "^0.2.3"
|
||||
|
||||
resolve@^1.1.2, resolve@^1.1.6, resolve@^1.1.7:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c"
|
||||
|
||||
restore-cursor@^1.0.1:
|
||||
version "1.0.1"
|
||||
|
|
@ -4474,8 +4469,8 @@ restore-cursor@^1.0.1:
|
|||
onetime "^1.0.0"
|
||||
|
||||
retry@^0.10.0, retry@~0.10.0:
|
||||
version "0.10.0"
|
||||
resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.0.tgz#649e15ca408422d98318161935e7f7d652d435dd"
|
||||
version "0.10.1"
|
||||
resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
|
||||
|
||||
right-align@^0.1.1:
|
||||
version "0.1.3"
|
||||
|
|
@ -4982,8 +4977,8 @@ tough-cookie@~2.3.0:
|
|||
punycode "^1.4.1"
|
||||
|
||||
tree-sync@^1.1.4:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.1.5.tgz#3ccb5c7c0bfaf1fab4dd89dd48206ab2b413be72"
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.2.1.tgz#35619b7c310f5dfb4091601c013e8a72da67937a"
|
||||
dependencies:
|
||||
debug "^2.2.0"
|
||||
fs-tree-diff "^0.5.2"
|
||||
|
|
@ -5012,8 +5007,8 @@ tunnel-agent@~0.4.1:
|
|||
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
|
||||
|
||||
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
||||
version "0.14.4"
|
||||
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.4.tgz#8c9dbfb52795686f166cd2023794bcf103d13c2b"
|
||||
version "0.14.5"
|
||||
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
||||
|
||||
type-is@~1.6.13:
|
||||
version "1.6.14"
|
||||
|
|
|
|||
Reference in a new issue