diff --git a/.docs/build_checklist.md b/.docs/build_checklist.md index 972a75b..08e3dbd 100644 --- a/.docs/build_checklist.md +++ b/.docs/build_checklist.md @@ -15,5 +15,9 @@ - [ ] Correct tag version - [ ] Target correct branch (master) - [ ] Correct version in title -- [ ] Changelog pasted into body +- [ ] Release body is +``` +## What's Changed +* See PR # for a full list +``` - [ ] CSS files are uploaded diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 89ca4bc..60455d0 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,45 +1,56 @@ -# Contributing - -## Issues & Feature Requests -* Disable plugins and addon themes before opening an issue -* Use the relevant template -* Don't 'bulk report' unrelated issues in the same issue -* Don't report a new issue in the comments of an existing issue -* Check previous feature requests using the *Feature request* tag before making a new one - -## Pull Requests -* Major changes: Open an issue using the *Change proposal* template to discuss your changes -* Small changes and tweaks can get away without an issue -* Clone/rebase the repo -* Make sure your editor is obeying `.editorconfig` (VS Code needs the plugin!) -* Make changes in a new branch (not master) -* Submit your PR - -## Development -### Environment -This assumes a Windows OS. You will need to modify the output paths in `package.json` for Mac and Linux. -* Visual Studio Code -* [Editorconfig Plugin](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) for VS Code -* Git -* Node.js - -### Setup -* `npm i sass -g` to install Dart Sass. This should be all you need to get started. - -NPM Commands -* `npm run dev` watches files for changes and automatically builds and emits the theme to your BetterDiscord themes folder. BD will reload the theme with the changes each time. -* `npm run build` builds and emits the theme to the dist directory. Generally just used for building a release. -* `npm run build-translate` builds *all* the translation add-on files and emits them to the dist directory. -* `npm run dev-translate` builds *all* the translation add-on files and emits them to the BetterDiscord themes folder. You should almost never have to use this. Use the below command instead. -* `npm run dev-translate-only --lang=` Substitute `` with the language you want to emit to your BetterDiscord themes folder. Example: `npm run dev-translate-only --lang=de`. This is most useful for fixing spelling and grammar issues. - -### Comments & Debugging -* Where required a code comment should start with `TODO, NOTE, DEV, DEBUG or HACK` and the date in YYYY-MM-DD format, followed by the comment: -```CSS -// TODO: 2021-07-01 - Find better icon -``` -* Including a Fluent Icon from the icon font should always inlude the description in a comment at the end of the line: -```CSS -content: "\F159"; // DialShape4 -``` -* Use `red` or `#F00` for debugging +# Contributing + +## Issues & Feature Requests +* Disable plugins and addon themes before opening an issue +* Use the relevant template +* Don't 'bulk report' unrelated issues in the same issue +* Don't report a new issue in the comments of an existing issue +* Check previous feature requests using the *Feature request* tag before making a new one + +## Plugin Support Requests +* You may request theme support for any plugin published on [betterdiscord.app](https://betterdiscord.app/plugins). +* Open an issue using the [template](https://github.com/TakosThings/Fluent-Discord/issues/new?assignees=&labels=better+discord%2Cplugin+support&template=plugin_support.yml&title=Plugin+name+here). + +## Pull Requests +* Major changes: Open an issue using the *Change proposal* template to discuss your changes +* Small changes and tweaks can get away without an issue +* Clone/rebase the repo +* Make sure your editor is obeying `.editorconfig` (VS Code needs the plugin!) +* Make changes in a new branch (not master) +* Submit your PR + +## Development +### Environment +* Visual Studio Code +* [Editorconfig Plugin](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) for VS Code +* Git +* Node.js + +### Setup +* `npm i` to install Dart Sass. This should be all you need to get started. + +#### NPM Commands +* `npm run dev` watches files for changes and automatically builds and emits the theme to your BetterDiscord themes folder. BD will reload the theme with the changes each time. +* `npm run build` builds and emits the theme to the dist directory. Generally just used for building a release. + +### Comments & Debugging +* Where required a code comment should start with `TODO, NOTE, DEV, DEBUG or HACK` and the date in YYYY-MM-DD format, followed by the comment: +```SCSS +// TODO: 2021-07-01 - Find better icon +``` +* Including a Fluent Icon from the icon font should always inlude the description in a comment at the end of the line: +```SCSS +content: "\F159"; // DialShape4 +``` +* Use `red`, `$red` or `#F00` for debugging + +### Plugin Support +Use the [Plugin Support Request](https://github.com/TakosThings/Fluent-Discord/issues/new?assignees=&labels=better+discord%2Cplugin+support&template=plugin_support.yml&title=Plugin+name+here) issue template to request support for a plugin. The plugin __must__ be approved on [betterdiscord.app](https://betterdiscord.app) + +If you are interested in creating a PR for a plugin use the following formatting: +* Create a new file in `src/modules/betterdiscord/plugins` with the following formatting: `_GitHubUsername.PluginName.scss`. Note the underscore at the start of the filename. Capitalisation should also match the username and plugin name. Example: `_TakosThings.FluentDiscord.scss` +* Add an import to `src/modules/betterdiscord/_plugin_support.scss` with the following formatting: +```SCSS +// https://betterdiscord.app/plugin/PluginName +@import "_GitHubUsername.PluginName.scss"; +``` diff --git a/package-lock.json b/package-lock.json index 7012533..6baea58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,156 +1,397 @@ -{ - "name": "fluent-discord", - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "sass": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.47.0.tgz", - "integrity": "sha512-GtXwvwgD7/6MLUZPnlA5/8cdRgC9SzT5kAnnJMRmEZQFRE3J56Foswig4NyyyQGsnmNvg6EUM/FP0Pe9Y2zywQ==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "source-map-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } -} +{ + "name": "fluent-discord", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "fluent-discord", + "license": "MIT", + "os": [ + "win32", + "linux" + ], + "devDependencies": { + "cross-os": "^1.4.0", + "sass": "^1.49.7" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cross-os": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cross-os/-/cross-os-1.4.0.tgz", + "integrity": "sha512-nuARAXqbsizhsqo3qo1bpYW2S6ohxJICjo/5Q/mq5xQ9dn1uWoRQ855DZrBAWgVfg7liPLdatnY2KMZwZYuxsQ==", + "dev": true, + "bin": { + "cross-os": "source/index.js" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/sass": { + "version": "1.49.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", + "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + } + }, + "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cross-os": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cross-os/-/cross-os-1.4.0.tgz", + "integrity": "sha512-nuARAXqbsizhsqo3qo1bpYW2S6ohxJICjo/5Q/mq5xQ9dn1uWoRQ855DZrBAWgVfg7liPLdatnY2KMZwZYuxsQ==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "sass": { + "version": "1.49.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", + "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "source-map-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } +} diff --git a/package.json b/package.json index 08963f6..7b8f051 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,26 @@ -{ - "private": true, - "name": "fluent-discord", - "license": "MIT", - "author": { - "name": "TakosThings", - "url": "https://github.com/TakosThings/Fluent-Discord" - }, - "repository": "git:TakosThings/Fluent-Discord", - "os": [ - "win32" - ], - "scripts": { - "build": "sass src/fluent.scss:dist/fluent.theme.css --no-charset --no-source-map", - "dev": "sass src/fluent.scss:%APPDATA%/BetterDiscord/themes/fluent.theme.css --no-charset --no-source-map --watch", - "build-translate": "sass src/extra:dist --no-charset --no-source-map", - "dev-translate": "sass src/extra:%APPDATA%/BetterDiscord/themes --no-charset --no-source-map", - "dev-translate-only": "sass src/extra/fluent.%npm_config_lang%.theme.scss:%APPDATA%/BetterDiscord/themes/fluent.%npm_config_lang%.theme.css --no-charset --no-source-map" - }, - "devDependencies": { - "sass": "^1.47.0" - } -} +{ + "private": true, + "name": "fluent-discord", + "license": "MIT", + "author": { + "name": "TakosThings", + "url": "https://github.com/TakosThings/Fluent-Discord" + }, + "repository": "git:TakosThings/Fluent-Discord", + "os": [ + "win32", + "linux" + ], + "scripts": { + "build": "sass src/fluent.scss:dist/fluent.theme.css --no-charset --no-source-map", + "dev": "cross-os xdev", + "xdev": { + "win32": "sass src/fluent.scss:%APPDATA%/BetterDiscord/themes/fluent.theme.css --no-charset --no-source-map --watch", + "linux": "sass src/fluent.scss:$HOME/.config/BetterDiscord/themes/fluent.theme.css --no-charset --no-source-map --watch" + } + }, + "devDependencies": { + "cross-os": "^1.4.0", + "sass": "^1.49.7" + } +} diff --git a/src/fluent.scss b/src/fluent.scss index f6e2d0b..d92ba46 100644 --- a/src/fluent.scss +++ b/src/fluent.scss @@ -65,6 +65,7 @@ @import 'modules/popouts/inbox'; @import 'modules/popouts/noise_cancellation'; @import 'modules/popouts/pinned_messages'; +@import 'modules/popouts/roles'; @import 'modules/popouts/rtc'; @import 'modules/popouts/search'; @import 'modules/popouts/threads'; @@ -91,3 +92,4 @@ // BetterDiscord @import 'modules/betterdiscord/public'; +@import 'modules/betterdiscord/plugin_support'; diff --git a/src/modules/betterdiscord/_meta.scss b/src/modules/betterdiscord/_meta.scss index efcf2fe..acef3d8 100644 --- a/src/modules/betterdiscord/_meta.scss +++ b/src/modules/betterdiscord/_meta.scss @@ -3,5 +3,6 @@ * @author TakosThings * @version #{$version} * @description Fluent theme for Discord + * @invite ZYrCacRuez * @source https://github.com/TakosThings/Fluent-Discord */ diff --git a/src/modules/betterdiscord/_plugin_support.scss b/src/modules/betterdiscord/_plugin_support.scss new file mode 100644 index 0000000..e073617 --- /dev/null +++ b/src/modules/betterdiscord/_plugin_support.scss @@ -0,0 +1,18 @@ +// Formatting +// URL to BetterDiscord.app page +// @import "plugins/plugin" + +// https://betterdiscord.app/plugin/MemberCount +@import "plugins/Arashiryuu.MemberCount"; + +// https://betterdiscord.app/plugin/GameActivityToggle +@import "plugins/DevilBro.GameActivityToggle"; + +// https://betterdiscord.app/plugin/SpotifyControls +@import "plugins/DevilBro.SpotifyControls"; + +// https://betterdiscord.app/plugin/ThemeRepo +@import "plugins/DevilBro.ThemeRepo"; + +// https://betterdiscord.app/plugin/PluginRepo +@import "plugins/DevilBro.PluginRepo"; diff --git a/src/modules/betterdiscord/plugins/_Arashiryuu.MemberCount.scss b/src/modules/betterdiscord/plugins/_Arashiryuu.MemberCount.scss new file mode 100644 index 0000000..f7c7609 --- /dev/null +++ b/src/modules/betterdiscord/plugins/_Arashiryuu.MemberCount.scss @@ -0,0 +1,10 @@ +#MemberCount{ + margin-top: 0 !important; + background: transparent !important; + border: 0 !important; + h2{ + margin-bottom: 0; + border-bottom: 0; + text-align: left; + } +} diff --git a/src/modules/betterdiscord/plugins/_DevilBro.GameActivityToggle.scss b/src/modules/betterdiscord/plugins/_DevilBro.GameActivityToggle.scss new file mode 100644 index 0000000..4b7acc6 --- /dev/null +++ b/src/modules/betterdiscord/plugins/_DevilBro.GameActivityToggle.scss @@ -0,0 +1,12 @@ +html[lang^="en-"].theme-dark .panels-3wFtMD .button-12Fmur{ + &[aria-label="Disable Game Activity"]::before{ + content: "\E7FC"; // Game + } + &[aria-label="Enable Game Activity"]{ + color: $SystemFillColorCritical; + border-color: $SystemFillColorCritical; + &::before{ + content: "\E7FC"; // Game + } + } +} diff --git a/src/modules/betterdiscord/plugins/_DevilBro.PluginRepo.scss b/src/modules/betterdiscord/plugins/_DevilBro.PluginRepo.scss new file mode 100644 index 0000000..4e8f95b --- /dev/null +++ b/src/modules/betterdiscord/plugins/_DevilBro.PluginRepo.scss @@ -0,0 +1,7 @@ +.theme-dark .layer-86YKbF[aria-label="USER_SETTINGS"]{ + .sidebar-nqHbhN{ + .item-3XjbnG[aria-controls="pluginrepo-tab"]::after{ // Plugin Repo + content: "\E8F1"; // Library + } + } +} diff --git a/src/modules/betterdiscord/plugins/_DevilBro.SpotifyControls.scss b/src/modules/betterdiscord/plugins/_DevilBro.SpotifyControls.scss new file mode 100644 index 0000000..5721623 --- /dev/null +++ b/src/modules/betterdiscord/plugins/_DevilBro.SpotifyControls.scss @@ -0,0 +1,27 @@ +.container-6sXIoE.withTimeline-824fT_{ + border-bottom: 0; + .song-tIdBpF{ + @include TypeBody; + color: $TextFillColorPrimary; + } + .interpret-F93iqP{ + @include TypeCaption; + color: $TextFillColorSecondary; + } + // Can't detect if Spotify is playing or not, so just use default icons by plugin + .contents-3ca1mk{ + display: block !important; + } +} + +.container-6sXIoE.maximized-vv2Wr0.withTimeline-824fT_{ + .button-12Fmur{ + margin-left: 2px; + &[style="margin-right: 4px;"]{ + margin-right: 0 !important; + } + &[style="margin-left: 4px;"]{ + margin-left: 2px !important; + } + } +} diff --git a/src/modules/betterdiscord/plugins/_DevilBro.ThemeRepo.scss b/src/modules/betterdiscord/plugins/_DevilBro.ThemeRepo.scss new file mode 100644 index 0000000..f4fab81 --- /dev/null +++ b/src/modules/betterdiscord/plugins/_DevilBro.ThemeRepo.scss @@ -0,0 +1,7 @@ +.theme-dark .layer-86YKbF[aria-label="USER_SETTINGS"]{ + .sidebar-nqHbhN{ + .item-3XjbnG[aria-controls="themerepo-tab"]::after{ // Theme Repo + content: "\E8F1"; // Library + } + } +} diff --git a/src/modules/core/_metadata.scss b/src/modules/core/_metadata.scss index 04cbab2..c51d919 100644 --- a/src/modules/core/_metadata.scss +++ b/src/modules/core/_metadata.scss @@ -1 +1 @@ -$version: "0.0.6"; +$version: "0.0.7"; diff --git a/src/modules/core/_options.scss b/src/modules/core/_options.scss index 27dea1b..4f4d138 100644 --- a/src/modules/core/_options.scss +++ b/src/modules/core/_options.scss @@ -36,7 +36,7 @@ background: url(https://cdn.discordapp.com/attachments/862716886067445820/873634258118397972/blue_teal_purple_gradient.jpg); } .bg-1QIAus::before{ - /* backdrop-filter: blur(240px); */ + /* backdrop-filter: blur(32px); */ } /** diff --git a/src/modules/core/_reset.scss b/src/modules/core/_reset.scss index 6f286e0..1ce07a6 100644 --- a/src/modules/core/_reset.scss +++ b/src/modules/core/_reset.scss @@ -1,12 +1,12 @@ -// Override Discord brand fronts -// DEV: 2021-07-02 - Comic Sans for testing with the new Segoe font -:root{ - --font-primary: "Segoe UI Variable Text", "Segoe UI", "Comic Sans MS", Helvetica, Arial, sans-serif; - --font-display: "Segoe UI Variable Display", "Segoe UI", "Comic Sans MS", Helvetica, Arial, sans-serif; -} - -*, -::before, -::after{ - letter-spacing: normal; -} +// Override Discord brand fronts +// DEV: 2021-07-02 - Comic Sans for testing with the new Segoe font +:root{ + --font-primary: "Segoe UI Variable Text", "Segoe UI Variable Static Text", "Segoe UI", "Comic Sans MS", Helvetica, Arial, sans-serif; + --font-display: "Segoe UI Variable Display", "Segoe UI Variable Static Display", "Segoe UI", "Comic Sans MS", Helvetica, Arial, sans-serif; +} + +*, +::before, +::after{ + letter-spacing: normal; +} diff --git a/src/modules/main/chat/_chat.scss b/src/modules/main/chat/_chat.scss index 3a370ca..cc0baa6 100644 --- a/src/modules/main/chat/_chat.scss +++ b/src/modules/main/chat/_chat.scss @@ -38,7 +38,7 @@ .theme-dark .jumpToPresentBar-1cEnH0{ bottom: 8px; padding-bottom: 0; - background-color: $SystemFillColorAttentionBackground; + background-color: $CardStrokeColorDefaultSolid; } @@ -132,6 +132,34 @@ } } +// Blocked message +.theme-dark .compact-2Nkcau .blockedSystemMessage-3FmE9n{ + margin-left: -5ch; + .iconContainer-2rPbqG{ + margin-right: 1ch; + padding-top: 2px; + &::before{ + content: "\ECE4"; + @include FontIconFluent + } + svg{ + display: none; + } + } +} +.theme-dark .cozy-VmLDNB .blockedSystemMessage-3FmE9n{ + .iconContainer-2rPbqG{ + padding-top: 2px; + &::before{ + content: "\ECE4"; + @include FontIconFluent + } + svg{ + display: none; + } + } +} + // Loading chat messages .wrapper-3HVHpV{ background-color: transparent; diff --git a/src/modules/mixins/_font.scss b/src/modules/mixins/_font.scss index f38e7aa..c5c37e7 100644 --- a/src/modules/mixins/_font.scss +++ b/src/modules/mixins/_font.scss @@ -1,16 +1,16 @@ -// DEBUG: 2021-07-30 - Comic sans used as fall back font for debugging -@mixin FontNormal{ - font-family: "Segoe UI Variable Text", "Segoe UI", "Comic Sans MS", Helvetica, Arial, sans-serif; -} - -@mixin FontMonospace{ - font-family: Consolas, Menlo, Monaco, "Courier New", monospace; -} - -@mixin FontIconFluent{ - font-family: "Segoe Fluent Icons", "Segoe MDL2 Assets"; -} - -@mixin FontIconHoloLens{ - font-family: "HoloLens MDL2 Assets"; -} +// DEBUG: 2021-07-30 - Comic sans used as fall back font for debugging +@mixin FontNormal{ + font-family: var(--font-primary); +} + +@mixin FontMonospace{ + font-family: Consolas, Menlo, Monaco, "Courier New", monospace; +} + +@mixin FontIconFluent{ + font-family: "Segoe Fluent Icons", "Segoe MDL2 Assets"; +} + +@mixin FontIconHoloLens{ + font-family: "HoloLens MDL2 Assets"; +} diff --git a/src/modules/modals/_link_gate.scss b/src/modules/modals/_link_gate.scss index 3cf3dd1..ddfed06 100644 --- a/src/modules/modals/_link_gate.scss +++ b/src/modules/modals/_link_gate.scss @@ -3,6 +3,7 @@ h2{ @include TypeSubtitle; text-align: left; + text-transform: none; } .body-_jWL8l{ @include TypeBody; diff --git a/src/modules/modals/_user.scss b/src/modules/modals/_user.scss new file mode 100644 index 0000000..65ed845 --- /dev/null +++ b/src/modules/modals/_user.scss @@ -0,0 +1,47 @@ +.theme-dark{ + .tabBarContainer-sCZC4w{ + border: 0; + .tabBar-2hXqzU{ + height: 32px + } + .tabBarItem-30Te4-{ + margin-right: 16px; + @include TypeBodyStrong; + &.selected-g-kMVV{ + color: $AccentTextFillColorPrimary; + border-bottom-color: $AccentTextFillColorPrimary; + } + } + } + + .body-1Ukv50{ + // Connected accounts + .connectedAccount-1xKpli{ + .connectedAccountName-j0meX4{ + @include TypeBody; + } + a{ + &::before{ + content: "\E8A7"; + @include FontIconFluent; + } + svg{ + display: none; + } + } + } + + // Server/friend list + .listRow-2nO1T6{ + border: 1px solid transparent; + &:hover{ + background-color: $ControlFillColorDefault; + border-color: $ControlStrokeColorDefault; + border-radius: 4px; + } + .iconActiveMedium-27_R5B{ + border-radius: 50%; + } + } + } +} diff --git a/src/modules/popouts/_roles.scss b/src/modules/popouts/_roles.scss new file mode 100644 index 0000000..a082853 --- /dev/null +++ b/src/modules/popouts/_roles.scss @@ -0,0 +1,55 @@ +.theme-dark .container-2O1UgZ{ + background-color: $SolidBackgroundFillColorBase; + border: 1px solid $SurfaceStrokeColorDefault; + border-radius: 8px; + + // Search + .container-2oNtJn{ + background-color: transparent; + border-radius: 0; + .input-2m5SfJ{ + height: 32px; + background-color: transparent; + border: 1px solid; + border-bottom-width: 2px; + border-radius: 4px; + @include TypeBody; + background-color: $ControlFillColorDefault; + color: $TextFillColorSecondary; + border-color: $ControlElevationBorder; + &:hover{ + border-color: $ControlStrokeColorSecondary; + } + &:focus{ + background-color: $ControlFillColorInputActiveBrush; + color: $TextFillColorPrimary; + border-color: $ControlElevationBorder; + border-bottom-color: $AccentBase; + } + &::placeholder{ + color: $TextFillColorSecondary; + } + } + } + + // Items + .item-1BCeuB{ + &:hover{ + background-color: $SubtleFillColorSecondary; + box-shadow: inset 0 0 0 1px $SubtleFillColorSecondary; + } + } + + // No results + .empty-1RfdnO{ + &::before{ + content: "\E25B"; + @include FontIconFluent; + font-size: 32px; + color: $TextFillColorDisabled; + } + h4,div{ + display: none; + } + } +}