diff --git a/index.js b/index.js
index c9f150e0..14e1839b 100644
--- a/index.js
+++ b/index.js
@@ -22,6 +22,13 @@ const configDefaults = {
"followedArtists": [],
"favoriteItems": []
},
+ "libraryPrefs": {
+ "songs": {
+ "sort": "name",
+ "sortOrder": "asc",
+ "size": "normal"
+ }
+ },
"audio": {
"quality": "990",
"seamless_audio": true,
@@ -72,6 +79,7 @@ const configDefaults = {
},
"advanced": {
"AudioContext": false,
+ "experiments": []
}
}
diff --git a/src/main/lastfm.js b/src/main/lastfm.js
index 0c453797..92f47817 100644
--- a/src/main/lastfm.js
+++ b/src/main/lastfm.js
@@ -61,7 +61,6 @@ const lfm = {
},
scrobbleSong: async function (attributes) {
- console.log((app.cfg.get('lastfm.scrobble_after') / 100))
await new Promise(resolve => setTimeout(resolve, Math.round(attributes.durationInMillis * (app.cfg.get('lastfm.scrobble_after') / 100))));
const currentAttributes = app.media;
diff --git a/src/renderer/index.js b/src/renderer/index.js
index e7ca0999..bb67dc27 100644
--- a/src/renderer/index.js
+++ b/src/renderer/index.js
@@ -635,6 +635,11 @@ const app = new Vue({
this.$forceUpdate()
}, 500)
},
+ getAppClasses() {
+ if(this.cfg.advanced.experiments.includes('compactui')) {
+ return {compact: true}
+ }
+ },
invokeDrawer(panel) {
if (this.drawer.panel == panel && this.drawer.open) {
if (panel == "lyrics") {
@@ -1306,13 +1311,14 @@ const app = new Vue({
},
searchLibrarySongs() {
let self = this
+ let prefs = this.cfg.libraryPrefs.songs
function sortSongs() {
// sort this.library.songs.displayListing by song.attributes[self.library.songs.sorting] in descending or ascending order based on alphabetical order and numeric order
// check if song.attributes[self.library.songs.sorting] is a number and if so, sort by number if not, sort by alphabetical order ignoring case
self.library.songs.displayListing.sort((a, b) => {
- let aa = a.attributes[self.library.songs.sorting]
- let bb = b.attributes[self.library.songs.sorting]
+ let aa = a.attributes[prefs.sort]
+ let bb = b.attributes[prefs.sort]
if (self.library.songs.sorting == "genre") {
aa = a.attributes.genreNames[0]
bb = b.attributes.genreNames[0]
@@ -1323,13 +1329,13 @@ const app = new Vue({
if (bb == null) {
bb = ""
}
- if (self.library.songs.sortOrder == "asc") {
+ if (prefs.sortOrder == "asc") {
if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) {
return aa - bb
} else {
return aa.toString().toLowerCase().localeCompare(bb.toString().toLowerCase())
}
- } else if (self.library.songs.sortOrder == "desc") {
+ } else if (prefs.sortOrder == "desc") {
if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) {
return bb - aa
} else {
@@ -1551,7 +1557,6 @@ const app = new Vue({
this.library.songs.downloadState = 1
this.library.downloadNotification.show = true
this.library.downloadNotification.message = "Updating library songs..."
-
function downloadChunk() {
const params = {
"include[library-songs]": "catalog,artists,albums",
@@ -3077,6 +3082,41 @@ const app = new Vue({
}
})
+Vue.component('animated-number', {
+
+ template:"
{{ displayNumber }}
",
+ props: {'number': { default:0 }},
+
+ data () {
+ return {
+ displayNumber:0,
+ interval:false
+ }
+ },
+
+ ready () {
+ this.displayNumber = this.number ? this.number : 0;
+ },
+
+ watch: {
+ number () {
+ clearInterval(this.interval);
+
+ if(this.number == this.displayNumber) {
+ return;
+ }
+
+ this.interval = window.setInterval(() => {
+ if(this.displayNumber != this.number) {
+ var change = (this.number - this.displayNumber) / 10;
+ change = change >= 0 ? Math.ceil(change) : Math.floor(change);
+ this.displayNumber = this.displayNumber + change;
+ }
+ }, 20);
+ }
+ }
+})
+
Vue.component('sidebar-library-item', {
template: '#sidebar-library-item',
props: {
diff --git a/src/renderer/less/compact.less b/src/renderer/less/compact.less
new file mode 100644
index 00000000..23f5e47f
--- /dev/null
+++ b/src/renderer/less/compact.less
@@ -0,0 +1,59 @@
+#app.compact {
+ .content-inner {
+ zoom: 0.95;
+ }
+ .app-sidebar-content {
+ padding:0px;
+
+ .app-sidebar-header-text {
+ padding: 6px 10px;
+ margin: 0px;
+ }
+ .app-sidebar-item {
+ display: flex;
+ width: 100%;
+ padding: 8px 12px;
+ font-size: 13px;
+ margin: 0px;
+ border: 1px solid transparent;
+ border-radius: 0px;
+ transition: unset;
+ transform: unset;
+
+ &:active {
+ background: var(--selected-click);
+ }
+
+ &::after {
+ display: none;
+ }
+
+ &.active {
+ background: var(--keyColor-disabled);
+ }
+ }
+ .sidebar-icon {
+ width: 14px;
+ height: 16px;
+ margin-right: 8px;
+ }
+
+ .folder-body {
+ border-radius: 0px;
+ padding: 0px;
+ }
+ }
+
+ @media (max-width: 951px) {
+ .content-inner {
+ zoom: 0.8;
+ }
+ }
+}
+
+// if page width is less than 951px
+@media (max-width: 951px) {
+ .content-inner {
+ zoom: 0.8;
+ }
+}
\ No newline at end of file
diff --git a/src/renderer/style.less b/src/renderer/style.less
index 1a278f0c..e838b37f 100644
--- a/src/renderer/style.less
+++ b/src/renderer/style.less
@@ -332,637 +332,663 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
left: 0;
padding: 32px;
width: 100%;
+ transition: zoom 1s;
+ zoom: 1;
}
.content-inner.centered {
- height: 100%;
- display: flex;
- flex-flow: column;
- justify-content: center;
- align-items: center;
+height: 100%;
+display: flex;
+flex-flow: column;
+justify-content: center;
+align-items: center;
}
.app-drawer {
- width: 300px;
- flex: 0 0 auto;
+width: 300px;
+flex: 0 0 auto;
+position: absolute;
+right: 16px;
+top: 3%;
+background: #1c1c1c8f;
+border-radius: 12px;
+z-index: 9;
+height: 94%;
+backdrop-filter: blur(40px) saturate(180%);
+box-shadow: var(--ciderShadow-Generic);
+overflow: hidden;
+
+.bgArtworkMaterial {
+ display: none;
position: absolute;
- right: 16px;
- top: 3%;
- background: #1c1c1c8f;
- border-radius: 12px;
- z-index: 9;
- height: 94%;
- backdrop-filter: blur(40px) saturate(180%);
- box-shadow: var(--ciderShadow-Generic);
- overflow: hidden;
+ width: 100%;
+ height: 100%;
- .bgArtworkMaterial {
- display: none;
- position: absolute;
- width: 100%;
- height: 100%;
-
- .bg-artwork-container .bg-artwork {
- filter: brightness(80%) blur(180px) saturate(180%) contrast(1);
- }
+ .bg-artwork-container .bg-artwork {
+ filter: brightness(80%) blur(180px) saturate(180%) contrast(1);
}
}
+}
.search-input-container {
- position: relative;
+position: relative;
}
.search-input {
- width: 100%;
- padding: 6px;
- border-radius: 6px;
- border: 1px solid rgb(200 200 200 / 10%);
- font-family: inherit;
- font-size: 14px;
- background: rgb(100 100 100 / 25%);
- color: rgb(200 200 200);
- font-weight: 500;
- padding-left: 32px;
- position: relative;
- filter: contrast(0.1);
+width: 100%;
+padding: 6px;
+border-radius: 6px;
+border: 1px solid rgb(200 200 200 / 10%);
+font-family: inherit;
+font-size: 14px;
+background: rgb(100 100 100 / 25%);
+color: rgb(200 200 200);
+font-weight: 500;
+padding-left: 32px;
+position: relative;
+filter: contrast(0.1);
}
.search-input:focus {
- outline: none;
- border-bottom: 1px solid var(--keyColor);
+outline: none;
+border-bottom: 1px solid var(--keyColor);
}
.search-input--icon {
- content: '';
- width: 100%;
- height: 100%;
- display: block;
- position: absolute;
- top: 0px;
- left: 0px;
- background-image: url('assets/search.svg');
- background-position: 10px;
- background-repeat: no-repeat;
- background-size: 12px;
- pointer-events: none;
- opacity: 0.55;
+content: '';
+width: 100%;
+height: 100%;
+display: block;
+position: absolute;
+top: 0px;
+left: 0px;
+background-image: url('assets/search.svg');
+background-position: 10px;
+background-repeat: no-repeat;
+background-size: 12px;
+pointer-events: none;
+opacity: 0.55;
}
.app-sidebar-header {
- font-size: 14px;
- padding: 11px;
- font-weight: 600;
+font-size: 14px;
+padding: 11px;
+font-weight: 600;
}
.app-sidebar-header-text {
- font-size: 11px;
- margin: 6px 3px;
- font-weight: 600;
- opacity: 0.50;
+font-size: 11px;
+margin: 6px 3px;
+font-weight: 600;
+opacity: 0.50;
}
.app-sidebar-footer {
- padding: 11px;
+padding: 11px;
+
+ .app-playback-controls {
+ .control-buttons {
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ }
+ .volume {
+ display: flex;
+ }
+ }
}
.app-sidebar-button {
- width: 100%;
- padding: 0px;
- font-family: inherit;
- display: flex;
- border-radius: 6px;
- border: 1px solid rgb(200 200 200 / 5%);
- background: rgb(100 100 100 / 25%);
- color: #eee;
- font-weight: 500;
- align-items: center;
+width: 100%;
+padding: 0px;
+font-family: inherit;
+display: flex;
+border-radius: 6px;
+border: 1px solid rgb(200 200 200 / 5%);
+background: rgb(100 100 100 / 25%);
+color: #eee;
+font-weight: 500;
+align-items: center;
- &.active {
- background: rgb(200 200 200 / 15%);
- animation: usermenuBtnClick .30s cubic-bezier(0.36, 0, 0.66, -0.56);
- }
+&.active {
+ background: rgb(200 200 200 / 15%);
+ animation: usermenuBtnClick .30s cubic-bezier(0.36, 0, 0.66, -0.56);
+}
}
@keyframes usermenuBtnClick {
- 0% {
- transform: translateY(0px);
- }
+0% {
+ transform: translateY(0px);
+}
- 50% {
- transform: translateY(-6px);
- }
+50% {
+ transform: translateY(-6px);
+}
- 100% {
- transform: translateY(0px);
- }
+100% {
+ transform: translateY(0px);
+}
}
.app-sidebar-button > .sidebar-user-icon {
- width: 32px;
- height: 32px;
- border-radius: 100%;
- background-image: var(--artwork);
- margin: 10px;
- flex: 0 0 auto;
- box-shadow: var(--mediaItemShadow);
- background-size: contain;
+width: 32px;
+height: 32px;
+border-radius: 100%;
+background-image: var(--artwork);
+margin: 10px;
+flex: 0 0 auto;
+box-shadow: var(--mediaItemShadow);
+background-size: contain;
}
.app-sidebar-button > .sidebar-user-text {
- width: 100%;
- display: flex;
- font-size: 14px;
- flex-direction: column;
+width: 100%;
+display: flex;
+font-size: 14px;
+flex-direction: column;
}
.app-sidebar-button > .sidebar-user-text .fullname {
- text-align: left;
+text-align: left;
}
.app-sidebar-button > .sidebar-user-text .handle-text {
- font-size: 12px;
- opacity: 0.7;
- text-align: left;
+font-size: 12px;
+opacity: 0.7;
+text-align: left;
}
.app-sidebar-notification {
- text-align: center;
- font-size: 12px;
- min-height: 60px;
- display: flex;
- justify-content: center;
- align-items: center;
- border-top: 1px solid rgb(200 200 200 / 15%);
- background: rgb(0 0 0 / 15%);
- flex-direction: column;
- padding: 20px 0px;
+text-align: center;
+font-size: 12px;
+min-height: 60px;
+display: flex;
+justify-content: center;
+align-items: center;
+border-top: 1px solid rgb(200 200 200 / 15%);
+background: rgb(0 0 0 / 15%);
+flex-direction: column;
+padding: 20px 0px;
+
+&.libraryNotification {
+ flex-direction: row;
+ padding: 0px;
+ .message {
+ flex-grow: 1;
+ }
+ .spinner {
+ width: 46px;
+ height: 30px;
+ margin-left: 1em;
+ }
+}
}
.app-sidebar-content {
- padding: 8px;
- overflow-y: scroll;
- overflow-y: overlay;
- height: 100%;
+padding: 8px;
+overflow-y: scroll;
+overflow-y: overlay;
+height: 100%;
}
#cmenu() {
- .container {
- position: absolute;
- width: 100%;
- padding: 10px;
- z-index: 1;
- }
+.container {
+ position: absolute;
+ width: 100%;
+ padding: 10px;
+ z-index: 1;
+}
- .body {
- background: #242424;
- padding: 6px;
- border-radius: 6px;
- width: 100%;
- box-shadow: var(--ciderShadow-Generic);
- }
+.body {
+ background: #242424;
+ padding: 6px;
+ border-radius: 6px;
+ width: 100%;
+ box-shadow: var(--ciderShadow-Generic);
+}
- .item {
- background: transparent;
- display: block;
- width: 100%;
- text-align: left;
- color: #eee;
- font-family: inherit;
- font-size: 15px;
- padding: 8px 12px;
- border: 0px;
- appearance: none;
- border-radius: 6px;
- margin: 2px 0px;
+.item {
+ background: transparent;
+ display: block;
+ width: 100%;
+ text-align: left;
+ color: #eee;
+ font-family: inherit;
+ font-size: 15px;
+ padding: 8px 12px;
+ border: 0px;
+ appearance: none;
+ border-radius: 6px;
+ margin: 2px 0px;
- &:hover {
- background: var(--keyColor);
- }
+ &:hover {
+ background: var(--keyColor);
}
}
+}
.search-hints-container {
- top: 44px;
- #cmenu.container();
+top: 44px;
+#cmenu.container();
- .search-hints {
- #cmenu.body();
+.search-hints {
+ #cmenu.body();
- .search-hint {
- #cmenu.item();
- }
+ .search-hint {
+ #cmenu.item();
}
}
+}
.usermenu-container {
- bottom: 66px;
- #cmenu.container();
+bottom: 66px;
+#cmenu.container();
- .usermenu-body {
- #cmenu.body();
+.usermenu-body {
+ #cmenu.body();
- .usermenu-item {
- #cmenu.item();
- }
+ .usermenu-item {
+ #cmenu.item();
}
}
+}
.context-menu {
- position: absolute;
- top: 0;
- left: 0;
+position: absolute;
+top: 0;
+left: 0;
+width: 100%;
+height: 100%;
+background: rgba(0, 0, 0, 0.0);
+z-index: 100;
+
+.context-menu-item {
+ background: transparent;
+ display: flex;
width: 100%;
- height: 100%;
- background: rgba(0, 0, 0, 0.0);
- z-index: 100;
+ text-align: left;
+ color: #eee;
+ font-family: inherit;
+ font-size: 14px;
+ padding: 6px 12px;
+ border: 0px;
+ appearance: none;
+ border-radius: 6px;
+ margin: 2px 0px;
- .context-menu-item {
- background: transparent;
- display: flex;
- width: 100%;
- text-align: left;
- color: #eee;
- font-family: inherit;
- font-size: 14px;
- padding: 6px 12px;
- border: 0px;
- appearance: none;
- border-radius: 6px;
- margin: 2px 0px;
-
- &:hover {
- background: var(--selected);
- cursor: pointer;
- }
-
- &:active {
- background: var(--selected-click);
- }
+ &:hover {
+ background: var(--selected);
+ cursor: pointer;
}
- .context-menu-body {
- background: #242424;
- padding: 6px;
- border-radius: 6px;
- box-shadow: var(--ciderShadow-Generic);
-
- &.context-menu-open {
- animation-duration: .10s;
- animation-name: contextMenuIn;
- animation-iteration-count: 1;
- animation-easings: var(--appleEase);
- }
-
- &.context-menu-close {
- animation-duration: .10s;
- animation-name: contextMenuOut;
- animation-iteration-count: 1;
- animation-easings: var(--appleEase);
- }
+ &:active {
+ background: var(--selected-click);
}
}
+.context-menu-body {
+ background: #242424;
+ padding: 6px;
+ border-radius: 6px;
+ box-shadow: var(--ciderShadow-Generic);
+
+ &.context-menu-open {
+ animation-duration: .10s;
+ animation-name: contextMenuIn;
+ animation-iteration-count: 1;
+ animation-easings: var(--appleEase);
+ }
+
+ &.context-menu-close {
+ animation-duration: .10s;
+ animation-name: contextMenuOut;
+ animation-iteration-count: 1;
+ animation-easings: var(--appleEase);
+ }
+}
+}
+
@keyframes contextMenuIn {
- 0% {
- transform: scale(0.9);
- opacity: 0;
- }
+0% {
+ transform: scale(0.9);
+ opacity: 0;
+}
- 100% {
- transform: scale(1);
- opacity: 1;
- }
+100% {
+ transform: scale(1);
+ opacity: 1;
+}
}
@keyframes contextMenuOut {
- 0% {
- transform: scale(1);
- opacity: 1;
- }
+0% {
+ transform: scale(1);
+ opacity: 1;
+}
- 100% {
- transform: scale(0.9);
- opacity: 0;
- }
+100% {
+ transform: scale(0.9);
+ opacity: 0;
+}
}
.hidden-opacity {
- opacity: 0;
- height: 0px;
- width: 0px;
- margin: 0px;
+opacity: 0;
+height: 0px;
+width: 0px;
+margin: 0px;
}
.spinner {
- background-image: url("assets/spinner.svg");
- background-position: center;
- background-repeat: no-repeat;
- background-size: contain;
- width: 50px;
- height: 50px;
- display: inline-block;
+background-image: url("assets/spinner.svg");
+background-position: center;
+background-repeat: no-repeat;
+background-size: contain;
+width: 50px;
+height: 50px;
+display: inline-block;
}
.app-sidebar-content::-webkit-scrollbar {
- display: none;
+display: none;
}
.app-sidebar-content:hover::-webkit-scrollbar {
- display: initial;
+display: initial;
}
.app-sidebar-item {
- display: flex;
- width: 100%;
- padding: 8px 12px;
- font-weight: 400;
- font-family: inherit;
- font-size: 14px;
- margin: 6px 0px;
- border: 1px solid transparent;
- border-radius: 6px;
- background: transparent;
- color: #eee;
- transition: transform .1s;
- text-align: left;
+display: flex;
+width: 100%;
+padding: 8px 12px;
+font-weight: 400;
+font-family: inherit;
+font-size: 14px;
+margin: 6px 0px;
+border: 1px solid transparent;
+border-radius: 6px;
+background: transparent;
+color: #eee;
+transition: transform .1s;
+text-align: left;
- &.app-sidebar-item-playlist {
- -webkit-user-drag: element;
- overflow: hidden;
- text-overflow: ellipsis;
- }
+&.app-sidebar-item-playlist {
+ -webkit-user-drag: element;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
}
.app-sidebar-item:hover {
- border: 1px solid rgb(200 200 200 / 5%);
- background: rgb(200 200 200 / 15%);
+border: 1px solid rgb(200 200 200 / 5%);
+background: rgb(200 200 200 / 15%);
}
.app-sidebar-item:active {
- border: 1px solid rgb(200 200 200 / 5%);
- background: rgb(200 200 200 / 15%);
- transform: scale(0.98);
- transition: transform 0s;
+border: 1px solid rgb(200 200 200 / 5%);
+background: rgb(200 200 200 / 15%);
+transform: scale(0.98);
+transition: transform 0s;
}
.app-sidebar-item.active {
- border: 1px solid rgb(200 200 200 / 5%);
- background: rgb(200 200 200 / 15%);
- transform: scale(1);
- transition: transform 0s;
+border: 1px solid rgb(200 200 200 / 5%);
+background: rgb(200 200 200 / 15%);
+transform: scale(1);
+transition: transform 0s;
}
.app-sidebar-item.active::after {
- content: '';
- width: 4px;
- height: 16px;
- display: block;
- position: absolute;
- top: calc(100% - 72%);
- border-radius: 10px;
- left: 0px;
- background: var(--keyColor);
+content: '';
+width: 4px;
+height: 16px;
+display: block;
+position: absolute;
+top: calc(100% - 72%);
+border-radius: 10px;
+left: 0px;
+background: var(--keyColor);
}
.app-chrome {
- background: var(--color1);
- width: 100%;
- height: var(--chromeHeight);
- display: flex;
- flex-direction: row;
- -webkit-app-region: drag;
+background: var(--color1);
+width: 100%;
+height: var(--chromeHeight);
+display: flex;
+flex-direction: row;
+-webkit-app-region: drag;
}
.mv-chrome {
- position: absolute;
- top: 0;
- right: 0;
- width: 90%;
- height: 55px;
- -webkit-app-region: drag;
+position: absolute;
+top: 0;
+right: 0;
+width: 90%;
+height: 55px;
+-webkit-app-region: drag;
}
.app-chrome .app-chrome--left,
.app-chrome .app-chrome--center,
.app-chrome .app-chrome--right {
- height: 100%;
- width: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
+height: 100%;
+width: 100%;
+display: flex;
+justify-content: center;
+align-items: center;
}
.app-chrome .app-chrome--left {
- width: 30%;
- justify-content: left;
+width: 30%;
+justify-content: left;
}
.app-chrome .app-chrome--center {
- width: 100%;
+width: 100%;
}
.app-chrome .app-chrome--right {
- width: 30%;
- justify-content: right;
+width: 30%;
+justify-content: right;
}
.app-chrome .app-chrome-item {
- height: 100%;
- width: auto;
- display: flex;
- justify-content: center;
- align-items: center;
- -webkit-app-region: no-drag;
- height: auto;
+height: 100%;
+width: auto;
+display: flex;
+justify-content: center;
+align-items: center;
+-webkit-app-region: no-drag;
+height: auto;
}
.app-chrome .app-chrome-item.generic {
- width: 50px;
- opacity: 0.70;
+width: 50px;
+opacity: 0.70;
}
.app-chrome .app-chrome-item.volume {
- width: 100px;
- margin-right: 6px;
+width: 100px;
+margin-right: 6px;
}
.app-chrome-item.volume-icon {
- opacity: 0.7;
- background-image: url(http://localhost:9000/assets/volume-up.svg);
- height: 15px;
- width: 30px;
- background-repeat: no-repeat;
+opacity: 0.7;
+background-image: url(http://localhost:9000/assets/volume-up.svg);
+height: 15px;
+width: 30px;
+background-repeat: no-repeat;
}
.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb {
- transition: all var(--appleTransition);
+transition: all var(--appleTransition);
}
.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb:hover {
- background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px);
- transform: scale(1.2);
+background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px);
+transform: scale(1.2);
}
.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb:active {
- background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px);
- transform: scale(1);
+background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px);
+transform: scale(1);
}
.app-chrome .app-chrome-item.volume > input[type=range] {
- width: 100%;
+width: 100%;
}
.app-chrome .app-chrome-item.volume > input[type=range] {
- -webkit-appearance: none;
- height: 4px;
- background: rgba(255, 255, 255, 0.4);
- border-radius: 5px;
- background-size: 70% 100%;
- background-repeat: no-repeat;
+-webkit-appearance: none;
+height: 4px;
+background: rgba(255, 255, 255, 0.4);
+border-radius: 5px;
+background-size: 70% 100%;
+background-repeat: no-repeat;
}
.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-thumb {
- -webkit-appearance: none;
- height: 14px;
- width: 14px;
- border-radius: 50%;
- background: rgb(50 50 50);
- cursor: default;
- box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.4);
+-webkit-appearance: none;
+height: 14px;
+width: 14px;
+border-radius: 50%;
+background: rgb(50 50 50);
+cursor: default;
+box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.4);
}
.app-chrome .app-chrome-item.volume > input[type=range]::-webkit-slider-runnable-track {
- -webkit-appearance: none;
- box-shadow: none;
- border: none;
- background: transparent;
+-webkit-appearance: none;
+box-shadow: none;
+border: none;
+background: transparent;
}
.app-chrome .back-button {
- height: 100%;
- width: 60px;
+height: 100%;
+width: 60px;
}
.app-chrome .app-chrome-item.full-height {
- height: 100%;
+height: 100%;
}
.app-chrome .app-chrome-item > .app-title {
- width: 100px;
- font-size: 13px;
- background: url("./logotmp.svg");
- background-size: 90px;
- background-repeat: no-repeat;
- background-position: center;
- height: 100%;
- margin-right: 16px;
- margin-left: 16px;
- image-rendering: -webkit-optimize-contrast;
- -webkit-app-region: drag;
+width: 100px;
+font-size: 13px;
+background: url("./logotmp.svg");
+background-size: 90px;
+background-repeat: no-repeat;
+background-position: center;
+height: 100%;
+margin-right: 16px;
+margin-left: 16px;
+image-rendering: -webkit-optimize-contrast;
+-webkit-app-region: drag;
}
.app-chrome .app-chrome-item > .window-controls {
- width: 138px;
- font-size: 13px;
- height: 100%;
- display: flex;
+width: 138px;
+font-size: 13px;
+height: 100%;
+display: flex;
}
.app-chrome .app-chrome-item > .window-controls > div {
- height: 100%;
- width: 32px;
+height: 100%;
+width: 32px;
}
.app-chrome .app-chrome-item > .window-controls > div:hover {
- background: rgb(200 200 200 / 10%);
+background: rgb(200 200 200 / 10%);
}
.app-chrome .app-chrome-item > .window-controls > div.close {
- width: 100%;
- height: 100%;
- background-image: var(--gfx-closeBtn);
- background-position: center;
- background-repeat: no-repeat;
- -webkit-app-region: no-drag;
+width: 100%;
+height: 100%;
+background-image: var(--gfx-closeBtn);
+background-position: center;
+background-repeat: no-repeat;
+-webkit-app-region: no-drag;
- &:hover {
- background-color: rgb(196, 43, 28)
- }
+&:hover {
+ background-color: rgb(196, 43, 28)
+}
}
.app-chrome .app-chrome-item > .window-controls > div.minmax {
- background-image: var(--gfx-maxBtn);
- background-position: center;
- background-repeat: no-repeat;
- -webkit-app-region: no-drag;
- width: 100%;
- height: 100%;
+background-image: var(--gfx-maxBtn);
+background-position: center;
+background-repeat: no-repeat;
+-webkit-app-region: no-drag;
+width: 100%;
+height: 100%;
}
.app-chrome .app-chrome-item > .window-controls > div.minmax.restore {
- background-image: var(--gfx-restoreBtn);
+background-image: var(--gfx-restoreBtn);
}
.app-chrome .app-chrome-item > .window-controls > div.minimize {
- background-image: var(--gfx-minBtn);
- background-position: center;
- background-repeat: no-repeat;
- -webkit-app-region: no-drag;
- width: 100%;
- height: 100%;
+background-image: var(--gfx-minBtn);
+background-position: center;
+background-repeat: no-repeat;
+-webkit-app-region: no-drag;
+width: 100%;
+height: 100%;
}
.app-chrome .app-chrome-item.playback-controls {
- width: 80%;
- height: 90%;
- display: flex;
- max-width: 500px;
- border-left: 1px solid rgb(200 200 200 / 8%);
- border-right: 1px solid rgb(200 200 200 / 8%);
+width: 80%;
+height: 90%;
+display: flex;
+max-width: 500px;
+border-left: 1px solid rgb(200 200 200 / 8%);
+border-right: 1px solid rgb(200 200 200 / 8%);
}
.app-chrome .app-chrome-item > .app-playback-controls {
- display: flex;
- justify-content: center;
- align-content: center;
- width: 100%;
+display: flex;
+justify-content: center;
+align-content: center;
+width: 100%;
}
.app-chrome .app-chrome-item > .app-playback-controls .song-name {
- font-weight: 600;
- text-align: center;
- font-size: 13px;
- height: 1.3em;
- line-height: 1.3em;
- overflow: hidden;
- max-width: 360px;
+font-weight: 600;
+text-align: center;
+font-size: 13px;
+height: 1.3em;
+line-height: 1.3em;
+overflow: hidden;
+max-width: 360px;
- .song-name-normal {
- height: inherit;
- }
+.song-name-normal {
+ height: inherit;
+}
- &.song-artist-marquee {
- > marquee {
- //margin-bottom: -3px;
- }
+&.song-artist-marquee {
+ > marquee {
+ //margin-bottom: -3px;
}
}
+}
.app-chrome .app-chrome-item > .app-playback-controls .song-duration p {
- font-weight: 400;
- font-size: 10px;
- height: 1.2em;
- line-height: 1.3em;
- overflow: hidden;
- margin: 0 0 0.5em;
+font-weight: 400;
+font-size: 10px;
+height: 1.2em;
+line-height: 1.3em;
+overflow: hidden;
+margin: 0 0 0.5em;
}
.app-chrome .app-chrome-item > .app-playback-controls .song-artist {
- font-weight: 400;
- font-size: 12px;
- text-align: center;
- /*height: 1.2em;
- line-height: 1.2em;*/
+font-weight: 400;
+font-size: 12px;
+text-align: center;
+/*height: 1.2em;
+line-height: 1.2em;*/
overflow: hidden;
z-index: 1;
max-width: 360px;
@@ -1843,24 +1869,30 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
}
.md-select {
- padding: 5px 10px;
- font-size: 1em;
+ width: 100%;
+ padding: 6px;
+ border-radius: 6px;
+ border: 1px solid rgba(200, 200, 200, 0.1);
font-family: inherit;
- border-radius: 4px;
- border: 1px solid rgb(100 100 100 / 35%);
- box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.4);
- background: #363636;
- color: #eee;
-}
+ font-size: 14px;
+ background: rgba(100, 100, 100, 0.25);
+ color: #c8c8c8;
+ font-weight: 500;
-.md-select:focus {
- outline: none;
-}
+ option {
+ font-size: 1em;
+ font-family: inherit;
+ padding: 8px 16px;
+ background: #404040;
+ }
-.md-select > option {
- font-size: 1em;
- font-family: inherit;
- padding: 8px 16px;
+ optgroup {
+ background: #2c2c2c;
+ }
+
+ &:focus {
+ outline: solid 1px var(--selected);
+ }
}
.sidebar-playlist {
@@ -2238,6 +2270,27 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
}
}
+// Library - Songs page
+.library-page {
+ padding: 0px;
+ .library-header {
+ position: sticky;
+ top: 0;
+ left: 0;
+ border-bottom: 1px solid rgba(200, 200, 200, 0.05);
+ z-index: 6;
+ background: black;
+ padding: 0px 2em;
+ backdrop-filter: blur(32px);
+ background: rgba(24, 24, 24, 0.15);
+ top: var(--navigationBarHeight);
+ }
+
+ .well {
+ margin: 2em;
+ }
+}
+
/* Album / Playlist Page */
.playlist-page {
--bgColor: transparent;
@@ -2835,11 +2888,11 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
}
.info-rect {
- width: 100%;
height: 100%;
display: flex;
flex-flow: column;
justify-content: center;
+ flex-grow: 1;
}
.title {
@@ -2848,7 +2901,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
.subtitle {
width: 90%;
- font-size: 12px;
+ font-size: .8em;
opacity: 0.7;
}
@@ -2870,21 +2923,18 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
justify-content: center;
}
- .content-rating {
- text-transform: uppercase;
- font-size: 10px;
- border-radius: 3px;
- background: rgb(200 200 200 / 15%);
- width: 60px;
- text-align: center;
- padding: 5px;
- margin-right: 12px;
- flex: 0 0 auto;
- font-weight: 500;
- color: #ccc;
+ .explicit-icon {
+ background-image: url("./assets/explicit.svg");
+ height: 12px;
+ width: 36px;
+ filter: contrast(0);
+ background-repeat: no-repeat;
}
.isLibrary {
+ flex: 0 0 auto;
+ width: 40px;
+ text-align: center;
button {
appearance: none;
border: 0px;
@@ -2913,6 +2963,19 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
box-shadow: var(--mediaItemShadow);
color: #eee;
}
+
+// list item compact
+ &.compact {
+ height: 40px;
+ font-size: 13px;
+ .artwork {
+ display: none;
+ }
+
+ .info-rect {
+ padding-left: 1em;
+ }
+ }
}
/* mediaitem-hrect */
@@ -3648,7 +3711,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
}
.bg-artwork-container .bg-artwork {
- filter: brightness(80%) saturate(69%) blur(180px) contrast(0.8) opacity(0.8);
+ filter: brightness(85%) saturate(95%) blur(180px) contrast(0.9) opacity(0.9);
}
.no-animation{
@@ -4314,4 +4377,6 @@ body.no-gpu {
.drawertransition-leave-to {
right: -300px;
}
-}
\ No newline at end of file
+}
+
+@import url("less/compact.less");
diff --git a/src/renderer/views/components/mediaitem-list-item.ejs b/src/renderer/views/components/mediaitem-list-item.ejs
index bd6f27fb..c120bbfa 100644
--- a/src/renderer/views/components/mediaitem-list-item.ejs
+++ b/src/renderer/views/components/mediaitem-list-item.ejs
@@ -7,8 +7,9 @@
:data-index="index"
:data-guid="guid"
:data-islibrary="this.item.attributes.playParams.isLibrary ?? false"
+ :key="item.attributes.playParams.id ?? item.id"
class="cd-mediaitem-list-item"
- :class="{'mediaitem-selected': app.select_hasMediaItem(guid)}">
+ :class="[{'mediaitem-selected': app.select_hasMediaItem(guid)}, addClasses]">
-
- {{ item.attributes.contentRating }}
-
+