diff --git a/package-lock.json b/package-lock.json index f96b0da5..0660f6f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17807,8 +17807,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "resolved": "", "dev": true }, "schema-utils": { @@ -19349,9 +19348,9 @@ } }, "typescript": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz", - "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==", + "version": "3.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", + "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", "dev": true }, "underscore": { @@ -20409,8 +20408,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "resolved": "", "dev": true }, "string-width": { @@ -21175,9 +21173,9 @@ } }, "ytdl-core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-3.1.0.tgz", - "integrity": "sha512-3dDIugHLusJ5vXnII4bYrSWLwKPVxPL+nvVl2YS7Jgi0ui6I9RBODKXSu6Xttysvc0HN60QOcDeDFTKmUs92Bg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-3.1.1.tgz", + "integrity": "sha512-sHw8Vz56Bs7LRKhJARW8j2JREndHFBuEdnYKgjx4RHwh1t75TsdZ5/SRpz9TLkNm2M5S8gVwvWm7AD1blhjb0g==", "requires": { "html-entities": "^1.3.1", "m3u8stream": "^0.7.1", @@ -21194,9 +21192,9 @@ } }, "ytsr": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/ytsr/-/ytsr-0.1.14.tgz", - "integrity": "sha512-YlLIDRPVUBOXnBjW6RytxpzC8g5ieqwjzcdrmmgdvTmVD/iisvNBPO5LhqB7R0kbuNHjFW6FBYpCTvCF1gCrHA==", + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ytsr/-/ytsr-0.1.15.tgz", + "integrity": "sha512-oOzklBMlRn4SVODMPG/McgX78R5pVBio32TPAoZtP2LBGo/glIbf+QqH8FXbkzIc03Qzp4tsEtQAHOJzg1noFg==", "requires": { "html-entities": "^1.1.3" } diff --git a/package.json b/package.json index 52a30a87..eb925209 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,9 @@ "youtube-comments-task": "^1.3.15", "youtube-suggest": "^1.1.0", "yt-xml2vtt": "^1.0.1", - "ytdl-core": "^3.1.0", + "ytdl-core": "^3.1.1", "ytpl": "^0.1.21", - "ytsr": "^0.1.14" + "ytsr": "^0.1.15" }, "description": "A private YouTube client", "devDependencies": { @@ -84,7 +84,7 @@ "sass-loader": "^8.0.2", "style-loader": "^1.2.1", "tree-kill": "1.2.2", - "typescript": "^3.9.3", + "typescript": "^3.9.5", "url-loader": "^4.1.0", "vue-devtools": "^5.1.3", "vue-eslint-parser": "^7.1.0", diff --git a/src/renderer/components/ft-icon-button/ft-icon-button.css b/src/renderer/components/ft-icon-button/ft-icon-button.css new file mode 100644 index 00000000..1dd1eadf --- /dev/null +++ b/src/renderer/components/ft-icon-button/ft-icon-button.css @@ -0,0 +1,113 @@ +.ftIconButton { + display: flex; + flex-flow: row wrap; + justify-content: space-evenly; + position: relative; +} + +.iconButton { + width: 1em; + height: 1em; + padding: 10px; + font-size: 20px; + border-radius: 50%; + box-shadow: 0 1px 2px rgba(0,0,0,.5); + cursor: pointer; + -moz-transition: background 0.2s ease-out; + -o-transition: background 0.2s ease-out; + transition: background 0.2s ease-out; +} + +.iconButton:hover { + -moz-transition: background 0.2s ease-in; + -o-transition: background 0.2s ease-in; + transition: background 0.2s ease-in; +} + +.base { + background-color: var(--card-bg-color); + color: var(--primary-text-color); +} + +.base:hover { + background-color: var(--side-nav-hover-color); +} + +.base:active { + background-color: var(--side-nav-active-color); +} + +.primary { + background-color: var(--primary-color); + color: var(--text-with-main-color); +} + +.primary:hover { + background-color: var(--primary-color-hover); +} + +.primary:active { + background-color: var(--primary-color-active); +} + +.secondary { + background-color: var(--accent-color); + color: var(--text-with-accent-color); +} + +.secondary:hover { + background-color: var(--accent-color-hover); +} + +.secondary:active { + background-color: var(--accent-color-active); +} + +.iconDropdown { + position: absolute; + text-align: center; + list-style-type: none; + z-index: 100; + margin-top: 45px; + font-size: 12px; + box-shadow: 0 1px 2px rgba(0,0,0,.5); + background-color: var(--card-bg-color); + color: var(--secondary-text-color); +} + +.iconDropdown p { + padding: 10px; + margin: 0; + white-space: nowrap; + cursor: pointer; + -moz-transition: background 0.2s ease-out; + -o-transition: background 0.2s ease-out; + transition: background 0.2s ease-out; +} + +.iconDropdown p:hover { + background-color: var(--side-nav-hover-color); + -moz-transition: background 0.2s ease-in; + -o-transition: background 0.2s ease-in; + transition: background 0.2s ease-in; +} + +.iconDropdown p:active { + background-color: var(--side-nav-active-color); + -moz-transition: background 0.1s ease-in; + -o-transition: background 0.1s ease-in; + transition: background 0.1s ease-in; +} + +.iconDropdown p a { + text-decoration: none; + color: inherit; +} + +.left { + right: 100%; +} + +.right { + left: 100%; +} diff --git a/src/renderer/components/ft-icon-button/ft-icon-button.js b/src/renderer/components/ft-icon-button/ft-icon-button.js new file mode 100644 index 00000000..8fe06aca --- /dev/null +++ b/src/renderer/components/ft-icon-button/ft-icon-button.js @@ -0,0 +1,54 @@ +import Vue from 'vue' + +export default Vue.extend({ + name: 'FtIconButton', + props: { + title: { + type: String, + default: '' + }, + icon: { + type: String, + default: 'ellipsis-v' + }, + theme: { + type: String, + default: 'base' + }, + dropdownPosition: { + type: String, + default: 'center' + }, + dropdownNames: { + type: Array, + default: () => { return [] } + }, + dropdownValues: { + type: Array, + default: () => { return [] } + } + }, + data: function () { + return { + showDropdown: false + } + }, + methods: { + toggleDropdown: function () { + this.showDropdown = !this.showDropdown + }, + + handleIconClick: function () { + if (this.dropdownNames.length > 0 && this.dropdownValues.length > 0) { + this.toggleDropdown() + } else { + this.$emit('click') + } + }, + + handleDropdownClick: function (index) { + this.toggleDropdown() + this.$emit('click', this.dropdownValues[index]) + } + } +}) diff --git a/src/renderer/components/ft-icon-button/ft-icon-button.vue b/src/renderer/components/ft-icon-button/ft-icon-button.vue new file mode 100644 index 00000000..a0432bf4 --- /dev/null +++ b/src/renderer/components/ft-icon-button/ft-icon-button.vue @@ -0,0 +1,35 @@ + + +