diff --git a/.gitignore b/.gitignore
index 4b322f31b1..70a23d76bc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -75,4 +75,6 @@ link-plugins.sh
test.sh
.docker/**
-!**/.gitkeep
\ No newline at end of file
+!**/.gitkeep
+# stryker temp files
+.stryker-tmp
diff --git a/node_modules/nodebb-plugin-composer-default/.eslintrc b/node_modules/nodebb-plugin-composer-default/.eslintrc
deleted file mode 100644
index 74e8dc064a..0000000000
--- a/node_modules/nodebb-plugin-composer-default/.eslintrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "nodebb/lib"
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/.gitattributes b/node_modules/nodebb-plugin-composer-default/.gitattributes
deleted file mode 100644
index 412eeda78d..0000000000
--- a/node_modules/nodebb-plugin-composer-default/.gitattributes
+++ /dev/null
@@ -1,22 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto
-
-# Custom for Visual Studio
-*.cs diff=csharp
-*.sln merge=union
-*.csproj merge=union
-*.vbproj merge=union
-*.fsproj merge=union
-*.dbproj merge=union
-
-# Standard to msysgit
-*.doc diff=astextplain
-*.DOC diff=astextplain
-*.docx diff=astextplain
-*.DOCX diff=astextplain
-*.dot diff=astextplain
-*.DOT diff=astextplain
-*.pdf diff=astextplain
-*.PDF diff=astextplain
-*.rtf diff=astextplain
-*.RTF diff=astextplain
diff --git a/node_modules/nodebb-plugin-composer-default/.jshintrc b/node_modules/nodebb-plugin-composer-default/.jshintrc
deleted file mode 100644
index 1981c254c5..0000000000
--- a/node_modules/nodebb-plugin-composer-default/.jshintrc
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- // JSHint Default Configuration File (as on JSHint website)
- // See http://jshint.com/docs/ for more details
-
- "maxerr" : 50, // {int} Maximum error before stopping
-
- // Enforcing
- "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
- "camelcase" : false, // true: Identifiers must be in camelCase
- "curly" : true, // true: Require {} for every new block or scope
- "eqeqeq" : true, // true: Require triple equals (===) for comparison
- "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty()
- "immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
- "indent" : 4, // {int} Number of spaces to use for indentation
- "latedef" : false, // true: Require variables/functions to be defined before being used
- "newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()`
- "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
- "noempty" : true, // true: Prohibit use of empty blocks
- "nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment)
- "plusplus" : false, // true: Prohibit use of `++` & `--`
- "quotmark" : false, // Quotation mark consistency:
- // false : do nothing (default)
- // true : ensure whatever is used is consistent
- // "single" : require single quotes
- // "double" : require double quotes
- "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
- "unused" : true, // true: Require all defined variables be used
- "strict" : true, // true: Requires all functions run in ES5 Strict Mode
- "trailing" : false, // true: Prohibit trailing whitespaces
- "maxparams" : false, // {int} Max number of formal params allowed per function
- "maxdepth" : false, // {int} Max depth of nested blocks (within functions)
- "maxstatements" : false, // {int} Max number statements per function
- "maxcomplexity" : false, // {int} Max cyclomatic complexity per function
- "maxlen" : false, // {int} Max number of characters per line
-
- // Relaxing
- "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
- "boss" : false, // true: Tolerate assignments where comparisons would be expected
- "debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
- "eqnull" : false, // true: Tolerate use of `== null`
- "es5" : false, // true: Allow ES5 syntax (ex: getters and setters)
- "esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`)
- "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
- // (ex: `for each`, multiple try/catch, function expression…)
- "evil" : false, // true: Tolerate use of `eval` and `new Function()`
- "expr" : false, // true: Tolerate `ExpressionStatement` as Programs
- "funcscope" : false, // true: Tolerate defining variables inside control statements"
- "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict')
- "iterator" : false, // true: Tolerate using the `__iterator__` property
- "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
- "laxbreak" : false, // true: Tolerate possibly unsafe line breakings
- "laxcomma" : false, // true: Tolerate comma-first style coding
- "loopfunc" : false, // true: Tolerate functions being defined in loops
- "multistr" : false, // true: Tolerate multi-line strings
- "proto" : false, // true: Tolerate using the `__proto__` property
- "scripturl" : false, // true: Tolerate script-targeted URLs
- "smarttabs" : false, // true: Tolerate mixed tabs/spaces when used for alignment
- "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
- "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
- "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
- "validthis" : false, // true: Tolerate using this in a non-constructor function
-
- // Environments
- "browser" : true, // Web Browser (window, document, etc)
- "couch" : false, // CouchDB
- "devel" : true, // Development/debugging (alert, confirm, etc)
- "dojo" : false, // Dojo Toolkit
- "jquery" : true, // jQuery
- "mootools" : false, // MooTools
- "node" : true, // Node.js
- "nonstandard" : false, // Widely adopted globals (escape, unescape, etc)
- "prototypejs" : false, // Prototype and Scriptaculous
- "rhino" : false, // Rhino
- "worker" : false, // Web Workers
- "wsh" : false, // Windows Scripting Host
- "yui" : false, // Yahoo User Interface
-
- // Legacy
- "nomen" : false, // true: Prohibit dangling `_` in variables
- "onevar" : false, // true: Allow only one `var` statement per function
- "passfail" : false, // true: Stop on first error
- "white" : false, // true: Check against strict whitespace and indentation rules
-
- // Custom Globals
- "globals" : {} // additional predefined global variables
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/LICENSE b/node_modules/nodebb-plugin-composer-default/LICENSE
deleted file mode 100644
index b8658d3aa1..0000000000
--- a/node_modules/nodebb-plugin-composer-default/LICENSE
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright (c) 2016 NodeBB Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/README.md b/node_modules/nodebb-plugin-composer-default/README.md
deleted file mode 100644
index 7bcfff9aff..0000000000
--- a/node_modules/nodebb-plugin-composer-default/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Default Composer for NodeBB
-
-This plugin activates the default composer for NodeBB. It is activated by default, but can be swapped out as necessary.
-
-## Screenshots
-
-### Desktop
-![Desktop Composer](screenshots/desktop.png?raw=true)
-
-### Mobile Devices
-![Mobile Composer](screenshots/mobile.png?raw=true)
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/controllers.js b/node_modules/nodebb-plugin-composer-default/controllers.js
deleted file mode 100644
index cef271849f..0000000000
--- a/node_modules/nodebb-plugin-composer-default/controllers.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict';
-
-const Controllers = {};
-
-Controllers.renderAdminPage = function (req, res) {
- res.render('admin/plugins/composer-default', {
- title: 'Composer (Default)',
- });
-};
-
-module.exports = Controllers;
diff --git a/node_modules/nodebb-plugin-composer-default/library.js b/node_modules/nodebb-plugin-composer-default/library.js
deleted file mode 100644
index c80eef1f5e..0000000000
--- a/node_modules/nodebb-plugin-composer-default/library.js
+++ /dev/null
@@ -1,310 +0,0 @@
-'use strict';
-
-const url = require('url');
-
-const nconf = require.main.require('nconf');
-const validator = require('validator');
-
-const plugins = require.main.require('./src/plugins');
-const topics = require.main.require('./src/topics');
-const categories = require.main.require('./src/categories');
-const posts = require.main.require('./src/posts');
-const user = require.main.require('./src/user');
-const meta = require.main.require('./src/meta');
-const privileges = require.main.require('./src/privileges');
-const translator = require.main.require('./src/translator');
-const utils = require.main.require('./src/utils');
-const helpers = require.main.require('./src/controllers/helpers');
-const SocketPlugins = require.main.require('./src/socket.io/plugins');
-const socketMethods = require('./websockets');
-
-const plugin = module.exports;
-
-plugin.socketMethods = socketMethods;
-
-plugin.init = async function (data) {
- const { router } = data;
- const routeHelpers = require.main.require('./src/routes/helpers');
- const controllers = require('./controllers');
- SocketPlugins.composer = socketMethods;
- routeHelpers.setupAdminPageRoute(router, '/admin/plugins/composer-default', controllers.renderAdminPage);
-};
-
-plugin.appendConfig = async function (config) {
- config['composer-default'] = await meta.settings.get('composer-default');
- return config;
-};
-
-plugin.addAdminNavigation = async function (header) {
- header.plugins.push({
- route: '/plugins/composer-default',
- icon: 'fa-edit',
- name: 'Composer (Default)',
- });
- return header;
-};
-
-plugin.addPrefetchTags = async function (hookData) {
- const prefetch = [
- '/assets/src/modules/composer.js', '/assets/src/modules/composer/uploads.js', '/assets/src/modules/composer/drafts.js',
- '/assets/src/modules/composer/tags.js', '/assets/src/modules/composer/categoryList.js', '/assets/src/modules/composer/resize.js',
- '/assets/src/modules/composer/autocomplete.js', '/assets/templates/composer.tpl',
- `/assets/language/${meta.config.defaultLang || 'en-GB'}/topic.json`,
- `/assets/language/${meta.config.defaultLang || 'en-GB'}/modules.json`,
- `/assets/language/${meta.config.defaultLang || 'en-GB'}/tags.json`,
- ];
-
- hookData.links = hookData.links.concat(prefetch.map(path => ({
- rel: 'prefetch',
- href: `${nconf.get('relative_path') + path}?${meta.config['cache-buster']}`,
- })));
-
- return hookData;
-};
-
-plugin.getFormattingOptions = async function () {
- const defaultVisibility = {
- mobile: true,
- desktop: true,
-
- // op or reply
- main: true,
- reply: true,
- };
- let payload = {
- defaultVisibility,
- options: [
- {
- name: 'tags',
- title: '[[global:tags.tags]]',
- className: 'fa fa-tags',
- visibility: {
- ...defaultVisibility,
- desktop: false,
- },
- },
- {
- name: 'zen',
- title: '[[modules:composer.zen-mode]]',
- className: 'fa fa-arrows-alt',
- visibility: defaultVisibility,
- },
- ],
- };
- if (parseInt(meta.config.allowTopicsThumbnail, 10) === 1) {
- payload.options.push({
- name: 'thumbs',
- title: '[[topic:composer.thumb-title]]',
- className: 'fa fa-address-card-o',
- badge: true,
- visibility: {
- ...defaultVisibility,
- reply: false,
- },
- });
- }
-
- payload = await plugins.hooks.fire('filter:composer.formatting', payload);
-
- payload.options.forEach((option) => {
- option.visibility = {
- ...defaultVisibility,
- ...option.visibility || {},
- };
- });
-
- return payload ? payload.options : null;
-};
-
-plugin.filterComposerBuild = async function (hookData) {
- const { req } = hookData;
- const { res } = hookData;
-
- if (req.query.p) {
- try {
- const a = url.parse(req.query.p, true, true);
- return helpers.redirect(res, `/${(a.path || '').replace(/^\/*/, '')}`);
- } catch (e) {
- return helpers.redirect(res, '/');
- }
- } else if (!req.query.pid && !req.query.tid && !req.query.cid) {
- return helpers.redirect(res, '/');
- }
- const [
- isMainPost,
- postData,
- topicData,
- categoryData,
- isAdmin,
- isMod,
- formatting,
- tagWhitelist,
- globalPrivileges,
- canTagTopics,
- canScheduleTopics,
- ] = await Promise.all([
- posts.isMain(req.query.pid),
- getPostData(req),
- getTopicData(req),
- categories.getCategoryFields(req.query.cid, [
- 'name', 'icon', 'color', 'bgColor', 'backgroundImage', 'imageClass', 'minTags', 'maxTags',
- ]),
- user.isAdministrator(req.uid),
- isModerator(req),
- plugin.getFormattingOptions(),
- getTagWhitelist(req.query, req.uid),
- privileges.global.get(req.uid),
- canTag(req),
- canSchedule(req),
- ]);
-
- const isEditing = !!req.query.pid;
- const isGuestPost = postData && parseInt(postData.uid, 10) === 0;
- const save_id = utils.generateSaveId(req.uid);
- const discardRoute = generateDiscardRoute(req, topicData);
- const body = await generateBody(req, postData);
-
- let action = 'topics.post';
- let isMain = isMainPost;
- if (req.query.tid) {
- action = 'posts.reply';
- } else if (req.query.pid) {
- action = 'posts.edit';
- } else {
- isMain = true;
- }
- globalPrivileges['topics:tag'] = canTagTopics;
- const cid = parseInt(req.query.cid, 10);
- const topicTitle = topicData && topicData.title ? topicData.title.replace(/%/g, '%').replace(/,/g, ',') : validator.escape(String(req.query.title || ''));
- return {
- req: req,
- res: res,
- templateData: {
- disabled: !req.query.pid && !req.query.tid && !req.query.cid,
- pid: parseInt(req.query.pid, 10),
- tid: parseInt(req.query.tid, 10),
- cid: cid || (topicData ? topicData.cid : null),
- action: action,
- toPid: parseInt(req.query.toPid, 10),
- discardRoute: discardRoute,
-
- resizable: false,
- allowTopicsThumbnail: parseInt(meta.config.allowTopicsThumbnail, 10) === 1 && isMain,
-
- // can't use title property as that is used for page title
- topicTitle: topicTitle,
- titleLength: topicTitle ? topicTitle.length : 0,
- topic: topicData,
- thumb: topicData ? topicData.thumb : '',
- body: body,
-
- isMain: isMain,
- isTopicOrMain: !!req.query.cid || isMain,
- maximumTitleLength: meta.config.maximumTitleLength,
- maximumPostLength: meta.config.maximumPostLength,
- minimumTagLength: meta.config.minimumTagLength || 3,
- maximumTagLength: meta.config.maximumTagLength || 15,
- tagWhitelist: tagWhitelist,
- selectedCategory: cid ? categoryData : null,
- minTags: categoryData.minTags,
- maxTags: categoryData.maxTags,
-
- isTopic: !!req.query.cid,
- isEditing: isEditing,
- canSchedule: canScheduleTopics,
- showHandleInput: meta.config.allowGuestHandles === 1 &&
- (req.uid === 0 || (isEditing && isGuestPost && (isAdmin || isMod))),
- handle: postData ? postData.handle || '' : undefined,
- formatting: formatting,
- isAdminOrMod: isAdmin || isMod,
- save_id: save_id,
- privileges: globalPrivileges,
- 'composer:showHelpTab': meta.config['composer:showHelpTab'] === 1,
- },
- };
-};
-
-function generateDiscardRoute(req, topicData) {
- if (req.query.cid) {
- return `${nconf.get('relative_path')}/category/${validator.escape(String(req.query.cid))}`;
- } else if ((req.query.tid || req.query.pid)) {
- if (topicData) {
- return `${nconf.get('relative_path')}/topic/${topicData.slug}`;
- }
- return `${nconf.get('relative_path')}/`;
- }
-}
-
-async function generateBody(req, postData) {
- let body = '';
- // Quoted reply
- if (req.query.toPid && parseInt(req.query.quoted, 10) === 1 && postData) {
- const username = await user.getUserField(postData.uid, 'username');
- const translated = await translator.translate(`[[modules:composer.user-said, ${username}]]`);
- body = `${translated}\n` +
- `> ${postData ? `${postData.content.replace(/\n/g, '\n> ')}\n\n` : ''}`;
- } else if (req.query.body || req.query.content) {
- body = validator.escape(String(req.query.body || req.query.content));
- }
- body = postData ? postData.content : '';
- return translator.escape(body);
-}
-
-async function getPostData(req) {
- if (!req.query.pid && !req.query.toPid) {
- return null;
- }
-
- return await posts.getPostData(req.query.pid || req.query.toPid);
-}
-
-async function getTopicData(req) {
- if (req.query.tid) {
- return await topics.getTopicData(req.query.tid);
- } else if (req.query.pid) {
- return await topics.getTopicDataByPid(req.query.pid);
- }
- return null;
-}
-
-async function isModerator(req) {
- if (!req.loggedIn) {
- return false;
- }
- const cid = cidFromQuery(req.query);
- return await user.isModerator(req.uid, cid);
-}
-
-async function canTag(req) {
- if (parseInt(req.query.cid, 10)) {
- return await privileges.categories.can('topics:tag', req.query.cid, req.uid);
- }
- return true;
-}
-
-async function canSchedule(req) {
- if (parseInt(req.query.cid, 10)) {
- return await privileges.categories.can('topics:schedule', req.query.cid, req.uid);
- }
- return false;
-}
-
-async function getTagWhitelist(query, uid) {
- const cid = await cidFromQuery(query);
- const [tagWhitelist, isAdminOrMod] = await Promise.all([
- categories.getTagWhitelist([cid]),
- privileges.categories.isAdminOrMod(cid, uid),
- ]);
- return categories.filterTagWhitelist(tagWhitelist[0], isAdminOrMod);
-}
-
-async function cidFromQuery(query) {
- if (query.cid) {
- return query.cid;
- } else if (query.tid) {
- return await topics.getTopicField(query.tid, 'cid');
- } else if (query.pid) {
- return await posts.getCidByPid(query.pid);
- }
- return null;
-}
diff --git a/node_modules/nodebb-plugin-composer-default/package.json b/node_modules/nodebb-plugin-composer-default/package.json
deleted file mode 100644
index 625184980c..0000000000
--- a/node_modules/nodebb-plugin-composer-default/package.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "name": "nodebb-plugin-composer-default",
- "version": "10.2.36",
- "description": "Default composer for NodeBB",
- "main": "library.js",
- "repository": {
- "type": "git",
- "url": "https://github.com/NodeBB/nodebb-plugin-composer-default"
- },
- "scripts": {
- "lint": "eslint ."
- },
- "keywords": [
- "nodebb",
- "plugin",
- "composer",
- "markdown"
- ],
- "author": {
- "name": "NodeBB Team",
- "email": "sales@nodebb.org"
- },
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/NodeBB/nodebb-plugin-composer-default/issues"
- },
- "readmeFilename": "README.md",
- "nbbpm": {
- "compatibility": "^3.0.0"
- },
- "dependencies": {
- "@textcomplete/contenteditable": "^0.1.12",
- "@textcomplete/core": "^0.1.12",
- "@textcomplete/textarea": "^0.1.12",
- "screenfull": "^5.0.2",
- "validator": "^13.7.0"
- },
- "devDependencies": {
- "eslint": "^7.32.0",
- "eslint-config-nodebb": "^0.0.1",
- "eslint-plugin-import": "^2.23.4"
- }
-}
diff --git a/node_modules/nodebb-plugin-composer-default/plugin.json b/node_modules/nodebb-plugin-composer-default/plugin.json
deleted file mode 100644
index c75ef14259..0000000000
--- a/node_modules/nodebb-plugin-composer-default/plugin.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "id": "nodebb-plugin-composer-default",
- "url": "https://github.com/NodeBB/nodebb-plugin-composer-default",
- "library": "library.js",
- "hooks": [
- { "hook": "static:app.load", "method": "init" },
- { "hook": "filter:config.get", "method": "appendConfig" },
- { "hook": "filter:composer.build", "method": "filterComposerBuild" },
- { "hook": "filter:admin.header.build", "method": "addAdminNavigation" },
- { "hook": "filter:meta.getLinkTags", "method": "addPrefetchTags" }
- ],
- "scss": [
- "./static/scss/composer.scss"
- ],
- "scripts": [
- "./static/lib/client.js",
- "./node_modules/screenfull/dist/screenfull.js"
- ],
- "modules": {
- "composer.js": "./static/lib/composer.js",
- "composer/categoryList.js": "./static/lib/composer/categoryList.js",
- "composer/controls.js": "./static/lib/composer/controls.js",
- "composer/drafts.js": "./static/lib/composer/drafts.js",
- "composer/formatting.js": "./static/lib/composer/formatting.js",
- "composer/preview.js": "./static/lib/composer/preview.js",
- "composer/resize.js": "./static/lib/composer/resize.js",
- "composer/scheduler.js": "./static/lib/composer/scheduler.js",
- "composer/tags.js": "./static/lib/composer/tags.js",
- "composer/uploads.js": "./static/lib/composer/uploads.js",
- "composer/autocomplete.js": "./static/lib/composer/autocomplete.js",
- "composer/post-queue.js": "./static/lib/composer/post-queue.js",
- "../admin/plugins/composer-default.js": "./static/lib/admin.js"
- },
- "templates": "static/templates"
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/screenshots/desktop.png b/node_modules/nodebb-plugin-composer-default/screenshots/desktop.png
deleted file mode 100644
index a6d4631e4e..0000000000
Binary files a/node_modules/nodebb-plugin-composer-default/screenshots/desktop.png and /dev/null differ
diff --git a/node_modules/nodebb-plugin-composer-default/screenshots/mobile.png b/node_modules/nodebb-plugin-composer-default/screenshots/mobile.png
deleted file mode 100644
index a50a01ea93..0000000000
Binary files a/node_modules/nodebb-plugin-composer-default/screenshots/mobile.png and /dev/null differ
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/.eslintrc b/node_modules/nodebb-plugin-composer-default/static/lib/.eslintrc
deleted file mode 100644
index 9fc9d47e53..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/.eslintrc
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "extends": "nodebb/public",
- "rules": {
- "no-cond-assign": ["error", "except-parens"]
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/admin.js b/node_modules/nodebb-plugin-composer-default/static/lib/admin.js
deleted file mode 100644
index cc693300ea..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/admin.js
+++ /dev/null
@@ -1,15 +0,0 @@
-'use strict';
-
-define('admin/plugins/composer-default', ['settings'], function (Settings) {
- const ACP = {};
-
- ACP.init = function () {
- Settings.load('composer-default', $('.composer-default-settings'));
-
- $('#save').on('click', function () {
- Settings.save('composer-default', $('.composer-default-settings'));
- });
- };
-
- return ACP;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/client.js b/node_modules/nodebb-plugin-composer-default/static/lib/client.js
deleted file mode 100644
index 2b46e406b8..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/client.js
+++ /dev/null
@@ -1,89 +0,0 @@
-'use strict';
-
-$(document).ready(function () {
- $(window).on('action:app.load', function () {
- require(['composer/drafts'], function (drafts) {
- drafts.migrateGuest();
- drafts.loadOpen();
- });
- });
-
- $(window).on('action:composer.topic.new', function (ev, data) {
- if (config['composer-default'].composeRouteEnabled !== 'on') {
- require(['composer'], function (composer) {
- composer.newTopic({
- cid: data.cid,
- title: data.title || '',
- body: data.body || '',
- tags: data.tags || [],
- });
- });
- } else {
- ajaxify.go(
- 'compose?cid=' + data.cid +
- (data.title ? '&title=' + encodeURIComponent(data.title) : '') +
- (data.body ? '&body=' + encodeURIComponent(data.body) : '')
- );
- }
- });
-
- $(window).on('action:composer.post.edit', function (ev, data) {
- if (config['composer-default'].composeRouteEnabled !== 'on') {
- require(['composer'], function (composer) {
- composer.editPost({ pid: data.pid });
- });
- } else {
- ajaxify.go('compose?pid=' + data.pid);
- }
- });
-
- $(window).on('action:composer.post.new', function (ev, data) {
- // backwards compatibility
- data.body = data.body || data.text;
- data.title = data.title || data.topicName;
- if (config['composer-default'].composeRouteEnabled !== 'on') {
- require(['composer'], function (composer) {
- composer.newReply({
- tid: data.tid,
- toPid: data.pid,
- title: data.title,
- body: data.body,
- });
- });
- } else {
- ajaxify.go(
- 'compose?tid=' + data.tid +
- (data.pid ? '&toPid=' + data.pid : '') +
- (data.title ? '&title=' + encodeURIComponent(data.title) : '') +
- (data.body ? '&body=' + encodeURIComponent(data.body) : '')
- );
- }
- });
-
- $(window).on('action:composer.addQuote', function (ev, data) {
- data.body = data.body || data.text;
- data.title = data.title || data.topicName;
- if (config['composer-default'].composeRouteEnabled !== 'on') {
- require(['composer'], function (composer) {
- var topicUUID = composer.findByTid(data.tid);
- composer.addQuote({
- tid: data.tid,
- toPid: data.pid,
- selectedPid: data.selectedPid,
- title: data.title,
- username: data.username,
- body: data.body,
- uuid: topicUUID,
- });
- });
- } else {
- ajaxify.go('compose?tid=' + data.tid + '&toPid=' + data.pid + '"ed=1&username=' + data.username);
- }
- });
-
- $(window).on('action:composer.enhance', function (ev, data) {
- require(['composer'], function (composer) {
- composer.enhance(data.container);
- });
- });
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer.js
deleted file mode 100644
index 5d789eb6a4..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer.js
+++ /dev/null
@@ -1,899 +0,0 @@
-'use strict';
-
-define('composer', [
- 'taskbar',
- 'translator',
- 'composer/uploads',
- 'composer/formatting',
- 'composer/drafts',
- 'composer/tags',
- 'composer/categoryList',
- 'composer/preview',
- 'composer/resize',
- 'composer/autocomplete',
- 'composer/scheduler',
- 'composer/post-queue',
- 'scrollStop',
- 'topicThumbs',
- 'api',
- 'bootbox',
- 'alerts',
- 'hooks',
- 'messages',
- 'search',
- 'screenfull',
-
-], function (taskbar, translator, uploads, formatting, drafts, tags,
- categoryList, preview, resize, autocomplete, scheduler, postQueue, scrollStop,
- topicThumbs, api, bootbox, alerts, hooks, messagesModule, search, screenfull) {
- var composer = {
- active: undefined,
- posts: {},
- bsEnvironment: undefined,
- formatting: undefined,
- };
- // Added:
- var isAnonymous = false;
-
- $(window).off('resize', onWindowResize).on('resize', onWindowResize);
- onWindowResize();
-
- $(window).on('action:composer.topics.post', function (ev, data) {
- localStorage.removeItem('category:' + data.data.cid + ':bookmark');
- localStorage.removeItem('category:' + data.data.cid + ':bookmark:clicked');
- });
-
- $(window).on('popstate', function () {
- var env = utils.findBootstrapEnvironment();
- if (composer.active && (env === 'xs' || env === 'sm')) {
- if (!composer.posts[composer.active].modified) {
- composer.discard(composer.active);
- if (composer.discardConfirm && composer.discardConfirm.length) {
- composer.discardConfirm.modal('hide');
- delete composer.discardConfirm;
- }
- return;
- }
-
- translator.translate('[[modules:composer.discard]]', function (translated) {
- composer.discardConfirm = bootbox.confirm(translated, function (confirm) {
- if (confirm) {
- composer.discard(composer.active);
- } else {
- composer.posts[composer.active].modified = true;
- }
- });
- composer.posts[composer.active].modified = false;
- });
- }
- });
-
- function removeComposerHistory() {
- var env = composer.bsEnvironment;
- if (ajaxify.data.template.compose === true || env === 'xs' || env === 'sm') {
- history.back();
- }
- }
-
- function onWindowResize() {
- var env = utils.findBootstrapEnvironment();
- var isMobile = env === 'xs' || env === 'sm';
-
- if (preview.toggle) {
- if (preview.env !== env && isMobile) {
- preview.env = env;
- preview.toggle(false);
- }
- preview.env = env;
- }
-
- if (composer.active !== undefined) {
- resize.reposition($('.composer[data-uuid="' + composer.active + '"]'));
-
- if (!isMobile && window.location.pathname.startsWith(config.relative_path + '/compose')) {
- /*
- * If this conditional is met, we're no longer in mobile/tablet
- * resolution but we've somehow managed to have a mobile
- * composer load, so let's go back to the topic
- */
- history.back();
- } else if (isMobile && !window.location.pathname.startsWith(config.relative_path + '/compose')) {
- /*
- * In this case, we're in mobile/tablet resolution but the composer
- * that loaded was a regular composer, so let's fix the address bar
- */
- mobileHistoryAppend();
- }
- }
- composer.bsEnvironment = env;
- }
-
- function alreadyOpen(post) {
- // If a composer for the same cid/tid/pid is already open, return the uuid, else return bool false
- var type;
- var id;
-
- if (post.hasOwnProperty('cid')) {
- type = 'cid';
- } else if (post.hasOwnProperty('tid')) {
- type = 'tid';
- } else if (post.hasOwnProperty('pid')) {
- type = 'pid';
- }
-
- id = post[type];
-
- // Find a match
- for (var uuid in composer.posts) {
- if (composer.posts[uuid].hasOwnProperty(type) && id === composer.posts[uuid][type]) {
- return uuid;
- }
- }
-
- // No matches...
- return false;
- }
-
- function push(post) {
- if (!post) {
- return;
- }
-
- var uuid = utils.generateUUID();
- var existingUUID = alreadyOpen(post);
-
- if (existingUUID) {
- taskbar.updateActive(existingUUID);
- return composer.load(existingUUID);
- }
-
- var actionText = '[[topic:composer.new-topic]]';
- if (post.action === 'posts.reply') {
- actionText = '[[topic:composer.replying-to]]';
- } else if (post.action === 'posts.edit') {
- actionText = '[[topic:composer.editing-in]]';
- }
-
- translator.translate(actionText, function (translatedAction) {
- taskbar.push('composer', uuid, {
- title: translatedAction.replace('%1', '"' + post.title + '"'),
- });
- });
-
- composer.posts[uuid] = post;
- composer.load(uuid);
- }
-
- async function composerAlert(post_uuid, message) {
- $('.composer[data-uuid="' + post_uuid + '"]').find('.composer-submit').removeAttr('disabled');
-
- const { showAlert } = await hooks.fire('filter:composer.error', { post_uuid, message, showAlert: true });
-
- if (showAlert) {
- alerts.alert({
- type: 'danger',
- timeout: 10000,
- title: '',
- message: message,
- alert_id: 'post_error',
- });
- }
- }
-
- composer.findByTid = function (tid) {
- // Iterates through the initialised composers and returns the uuid of the matching composer
- for (var uuid in composer.posts) {
- if (composer.posts.hasOwnProperty(uuid) && composer.posts[uuid].hasOwnProperty('tid') && parseInt(composer.posts[uuid].tid, 10) === parseInt(tid, 10)) {
- return uuid;
- }
- }
-
- return null;
- };
-
- composer.addButton = function (iconClass, onClick, title) {
- formatting.addButton(iconClass, onClick, title);
- };
-
- composer.newTopic = async (data) => {
- let pushData = {
- save_id: data.save_id,
- action: 'topics.post',
- cid: data.cid,
- handle: data.handle,
- title: data.title || '',
- body: data.body || '',
- tags: data.tags || [],
- modified: !!((data.title && data.title.length) || (data.body && data.body.length)),
- isMain: true,
- isAnonymous: isAnonymous,
- };
-
- ({ pushData } = await hooks.fire('filter:composer.topic.push', {
- data: data,
- pushData: pushData,
- }));
-
- push(pushData);
- };
-
- composer.addQuote = function (data) {
- // tid, toPid, selectedPid, title, username, text, uuid
- data.uuid = data.uuid || composer.active;
-
- var escapedTitle = (data.title || '')
- .replace(/([\\`*_{}[\]()#+\-.!])/g, '\\$1')
- .replace(/\[/g, '[')
- .replace(/\]/g, ']')
- .replace(/%/g, '%')
- .replace(/,/g, ',');
-
- if (data.body) {
- data.body = '> ' + data.body.replace(/\n/g, '\n> ') + '\n\n';
- }
- var link = '[' + escapedTitle + '](' + config.relative_path + '/post/' + encodeURIComponent(data.selectedPid || data.toPid) + ')';
- if (data.uuid === undefined) {
- if (data.title && (data.selectedPid || data.toPid)) {
- composer.newReply({
- tid: data.tid,
- toPid: data.toPid,
- title: data.title,
- body: '[[modules:composer.user-said-in, ' + data.username + ', ' + link + ']]\n' + data.body,
- });
- } else {
- composer.newReply({
- tid: data.tid,
- toPid: data.toPid,
- title: data.title,
- body: '[[modules:composer.user-said, ' + data.username + ']]\n' + data.body,
- });
- }
- return;
- } else if (data.uuid !== composer.active) {
- // If the composer is not currently active, activate it
- composer.load(data.uuid);
- }
-
- var postContainer = $('.composer[data-uuid="' + data.uuid + '"]');
- var bodyEl = postContainer.find('textarea');
- var prevText = bodyEl.val();
- if (data.title && (data.selectedPid || data.toPid)) {
- translator.translate('[[modules:composer.user-said-in, ' + data.username + ', ' + link + ']]\n', config.defaultLang, onTranslated);
- } else {
- translator.translate('[[modules:composer.user-said, ' + data.username + ']]\n', config.defaultLang, onTranslated);
- }
-
- function onTranslated(translated) {
- composer.posts[data.uuid].body = (prevText.length ? prevText + '\n\n' : '') + translated + data.body;
- bodyEl.val(composer.posts[data.uuid].body);
- focusElements(postContainer);
- preview.render(postContainer);
- }
- };
-
- composer.newReply = function (data) {
- translator.translate(data.body, config.defaultLang, function (translated) {
- push({
- save_id: data.save_id,
- action: 'posts.reply',
- tid: data.tid,
- toPid: data.toPid,
- title: data.title,
- body: translated,
- modified: !!(translated && translated.length),
- isMain: false,
- });
- });
- };
-
- composer.editPost = function (data) {
- // pid, text
- socket.emit('plugins.composer.push', data.pid, function (err, postData) {
- if (err) {
- return alerts.error(err);
- }
- postData.save_id = data.save_id;
- postData.action = 'posts.edit';
- postData.pid = data.pid;
- postData.modified = false;
- if (data.body) {
- postData.body = data.body;
- postData.modified = true;
- }
- if (data.title) {
- postData.title = data.title;
- postData.modified = true;
- }
- postData.isAnonymous = isAnonymous;
- push(postData);
- });
- };
-
- composer.load = function (post_uuid) {
- var postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
- if (postContainer.length) {
- activate(post_uuid);
- resize.reposition(postContainer);
- focusElements(postContainer);
- onShow();
- } else if (composer.formatting) {
- createNewComposer(post_uuid);
- } else {
- socket.emit('plugins.composer.getFormattingOptions', function (err, options) {
- if (err) {
- return alerts.error(err);
- }
- composer.formatting = options;
- createNewComposer(post_uuid);
- });
- }
- };
-
- composer.enhance = function (postContainer, post_uuid, postData) {
- /*
- This method enhances a composer container with client-side sugar (preview, etc)
- Everything in here also applies to the /compose route
- */
-
- if (!post_uuid && !postData) {
- post_uuid = utils.generateUUID();
- composer.posts[post_uuid] = ajaxify.data;
- postData = ajaxify.data;
- postContainer.attr('data-uuid', post_uuid);
- }
-
- categoryList.init(postContainer, composer.posts[post_uuid]);
- scheduler.init(postContainer, composer.posts);
-
- formatting.addHandler(postContainer);
- formatting.addComposerButtons();
- preview.handleToggler(postContainer);
- postQueue.showAlert(postContainer, postData);
- uploads.initialize(post_uuid);
- tags.init(postContainer, composer.posts[post_uuid]);
- autocomplete.init(postContainer, post_uuid);
-
- postContainer.on('change', 'input, textarea', function () {
- composer.posts[post_uuid].modified = true;
- });
-
- postContainer.on('click', '.composer-submit', function (e) {
- e.preventDefault();
- e.stopPropagation(); // Other click events bring composer back to active state which is undesired on submit
-
- $(this).attr('disabled', true);
- post(post_uuid);
- });
-
- require(['mousetrap'], function (mousetrap) {
- mousetrap(postContainer.get(0)).bind('mod+enter', function () {
- postContainer.find('.composer-submit').attr('disabled', true);
- post(post_uuid);
- });
- });
-
- postContainer.find('.composer-discard').on('click', function (e) {
- e.preventDefault();
-
- if (!composer.posts[post_uuid].modified) {
- composer.discard(post_uuid);
- return removeComposerHistory();
- }
-
- formatting.exitFullscreen();
-
- var btn = $(this).prop('disabled', true);
- translator.translate('[[modules:composer.discard]]', function (translated) {
- bootbox.confirm(translated, function (confirm) {
- if (confirm) {
- composer.discard(post_uuid);
- removeComposerHistory();
- }
- btn.prop('disabled', false);
- });
- });
- });
-
- postContainer.find('.composer-minimize, .minimize .trigger').on('click', function (e) {
- e.preventDefault();
- e.stopPropagation();
- composer.minimize(post_uuid);
- });
-
- const textareaEl = postContainer.find('textarea');
- textareaEl.on('input propertychange', utils.debounce(function () {
- preview.render(postContainer);
- }, 250));
-
- textareaEl.on('scroll', function () {
- preview.matchScroll(postContainer);
- });
-
- drafts.init(postContainer, postData);
- const draft = drafts.get(postData.save_id);
-
- preview.render(postContainer, function () {
- preview.matchScroll(postContainer);
- });
-
- handleHelp(postContainer);
- handleSearch(postContainer);
- focusElements(postContainer);
- if (postData.action === 'posts.edit') {
- composer.updateThumbCount(post_uuid, postContainer);
- }
-
- // Hide "zen mode" if fullscreen API is not enabled/available (ahem, iOS...)
- if (!screenfull.isEnabled) {
- $('[data-format="zen"]').parent().addClass('hidden');
- }
-
- hooks.fire('action:composer.enhanced', { postContainer, postData, draft });
- };
-
- async function getSelectedCategory(postData) {
- if (ajaxify.data.template.category && parseInt(postData.cid, 10) === parseInt(ajaxify.data.cid, 10)) {
- // no need to load data if we are already on the category page
- return ajaxify.data;
- } else if (parseInt(postData.cid, 10)) {
- return await api.get(`/api/category/${postData.cid}`, {});
- }
- return null;
- }
-
- async function createNewComposer(post_uuid) {
- var postData = composer.posts[post_uuid];
-
- var isTopic = postData ? postData.hasOwnProperty('cid') : false;
- var isMain = postData ? !!postData.isMain : false;
- var isEditing = postData ? !!postData.pid : false;
- var isGuestPost = postData ? parseInt(postData.uid, 10) === 0 : false;
- const isScheduled = postData.timestamp > Date.now();
-
- // see
- // https://github.com/NodeBB/NodeBB/issues/2994 and
- // https://github.com/NodeBB/NodeBB/issues/1951
- // remove when 1951 is resolved
-
- var title = postData.title.replace(/%/g, '%').replace(/,/g, ',');
- postData.category = await getSelectedCategory(postData);
- const privileges = postData.category ? postData.category.privileges : ajaxify.data.privileges;
- var data = {
- topicTitle: title,
- titleLength: title.length,
- body: translator.escape(utils.escapeHTML(postData.body)),
- mobile: composer.bsEnvironment === 'xs' || composer.bsEnvironment === 'sm',
- resizable: true,
- thumb: postData.thumb,
- isTopicOrMain: isTopic || isMain,
- maximumTitleLength: config.maximumTitleLength,
- maximumPostLength: config.maximumPostLength,
- minimumTagLength: config.minimumTagLength,
- maximumTagLength: config.maximumTagLength,
- 'composer:showHelpTab': config['composer:showHelpTab'],
- isTopic: isTopic,
- isEditing: isEditing,
- canSchedule: !!(isMain && privileges &&
- ((privileges['topics:schedule'] && !isEditing) || (isScheduled && privileges.view_scheduled))),
- showHandleInput: config.allowGuestHandles &&
- (app.user.uid === 0 || (isEditing && isGuestPost && app.user.isAdmin)),
- handle: postData ? postData.handle || '' : undefined,
- formatting: composer.formatting,
- tagWhitelist: postData.category ? postData.category.tagWhitelist : ajaxify.data.tagWhitelist,
- privileges: app.user.privileges,
- selectedCategory: postData.category,
- submitOptions: [
- // Add items using `filter:composer.create`, or just add them to the
in DOM
- // {
- // action: 'foobar',
- // text: 'Text Label',
- // }
- ],
- };
-
- if (data.mobile) {
- mobileHistoryAppend();
-
- app.toggleNavbar(false);
- }
-
- postData.mobile = composer.bsEnvironment === 'xs' || composer.bsEnvironment === 'sm';
-
- ({ postData, createData: data } = await hooks.fire('filter:composer.create', {
- postData: postData,
- createData: data,
- }));
-
- app.parseAndTranslate('composer', data, function (composerTemplate) {
- if ($('.composer.composer[data-uuid="' + post_uuid + '"]').length) {
- return;
- }
- composerTemplate = $(composerTemplate);
-
- composerTemplate.find('.title').each(function () {
- $(this).text(translator.unescape($(this).text()));
- });
-
- composerTemplate.attr('data-uuid', post_uuid);
-
- $(document.body).append(composerTemplate);
-
- var postContainer = $(composerTemplate[0]);
-
- resize.reposition(postContainer);
- composer.enhance(postContainer, post_uuid, postData);
- /*
- Everything after this line is applied to the resizable composer only
- Want something done to both resizable composer and the one in /compose?
- Put it in composer.enhance().
-
- Eventually, stuff after this line should be moved into composer.enhance().
- */
-
- activate(post_uuid);
-
- postContainer.on('click', function () {
- if (!taskbar.isActive(post_uuid)) {
- taskbar.updateActive(post_uuid);
- }
- });
-
- resize.handleResize(postContainer);
-
- if (composer.bsEnvironment === 'xs' || composer.bsEnvironment === 'sm') {
- var submitBtns = postContainer.find('.composer-submit');
- var mobileSubmitBtn = postContainer.find('.mobile-navbar .composer-submit');
- var textareaEl = postContainer.find('.write');
- var idx = textareaEl.attr('tabindex');
-
- submitBtns.removeAttr('tabindex');
- mobileSubmitBtn.attr('tabindex', parseInt(idx, 10) + 1);
- }
-
- $(window).trigger('action:composer.loaded', {
- postContainer: postContainer,
- post_uuid: post_uuid,
- composerData: composer.posts[post_uuid],
- formatting: composer.formatting,
- });
-
- scrollStop.apply(postContainer.find('.write'));
- focusElements(postContainer);
- onShow();
- });
- }
-
- function mobileHistoryAppend() {
- var path = 'compose?p=' + window.location.pathname;
- var returnPath = window.location.pathname.slice(1) + window.location.search;
-
- // Remove relative path from returnPath
- if (returnPath.startsWith(config.relative_path.slice(1))) {
- returnPath = returnPath.slice(config.relative_path.length);
- }
-
- // Add in return path to be caught by ajaxify when post is completed, or if back is pressed
- window.history.replaceState({
- url: null,
- returnPath: returnPath,
- }, returnPath, config.relative_path + '/' + returnPath);
-
- // Update address bar in case f5 is pressed
- window.history.pushState({
- url: path,
- }, path, `${config.relative_path}/${returnPath}`);
- }
-
- function handleHelp(postContainer) {
- const helpBtn = postContainer.find('[data-action="help"]');
- helpBtn.on('click', async function () {
- const html = await socket.emit('plugins.composer.renderHelp');
- if (html && html.length > 0) {
- bootbox.dialog({
- size: 'large',
- message: html,
- onEscape: true,
- backdrop: true,
- onHidden: function () {
- helpBtn.focus();
- },
- });
- }
- });
- }
-
- function handleSearch(postContainer) {
- var uuid = postContainer.attr('data-uuid');
- var isEditing = composer.posts[uuid] && composer.posts[uuid].action === 'posts.edit';
- var env = utils.findBootstrapEnvironment();
- var isMobile = env === 'xs' || env === 'sm';
- if (isEditing || isMobile) {
- return;
- }
-
- search.enableQuickSearch({
- searchElements: {
- inputEl: postContainer.find('input.title'),
- resultEl: postContainer.find('.quick-search-container'),
- },
- searchOptions: {
- composer: 1,
- },
- hideOnNoMatches: true,
- hideDuringSearch: true,
- });
- }
-
- function activate(post_uuid) {
- if (composer.active && composer.active !== post_uuid) {
- composer.minimize(composer.active);
- }
-
- composer.active = post_uuid;
- const postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
- postContainer.css('visibility', 'visible');
- $(window).trigger('action:composer.activate', {
- post_uuid: post_uuid,
- postContainer: postContainer,
- });
- }
-
- function focusElements(postContainer) {
- setTimeout(function () {
- var title = postContainer.find('input.title');
-
- if (title.length) {
- title.focus();
- } else {
- postContainer.find('textarea').focus().putCursorAtEnd();
- }
- }, 20);
- }
-
- async function post(post_uuid) {
- var postData = composer.posts[post_uuid];
- var postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
- var handleEl = postContainer.find('.handle');
- var titleEl = postContainer.find('.title');
- var bodyEl = postContainer.find('textarea');
- var thumbEl = postContainer.find('input#topic-thumb-url');
- var onComposeRoute = postData.hasOwnProperty('template') && postData.template.compose === true;
- const submitBtn = postContainer.find('.composer-submit');
- const isAnonymous = postContainer.find('#anonymousPostCheckbox').is(':checked');
- console.log("Anonymous Checkbox checked?", isAnonymous);
-
-
-
- titleEl.val(titleEl.val().trim());
- bodyEl.val(utils.rtrim(bodyEl.val()));
- if (thumbEl.length) {
- thumbEl.val(thumbEl.val().trim());
- }
-
- var action = postData.action;
-
- var checkTitle = (postData.hasOwnProperty('cid') || parseInt(postData.pid, 10)) && postContainer.find('input.title').length;
- var isCategorySelected = !checkTitle || (checkTitle && parseInt(postData.cid, 10));
-
- // Specifically for checking title/body length via plugins
- var payload = {
- post_uuid: post_uuid,
- postData: postData,
- postContainer: postContainer,
- titleEl: titleEl,
- titleLen: titleEl.val().length,
- bodyEl: bodyEl,
- bodyLen: bodyEl.val().length,
- };
-
- await hooks.fire('filter:composer.check', payload);
- $(window).trigger('action:composer.check', payload);
-
- if (payload.error) {
- return composerAlert(post_uuid, payload.error);
- }
-
- if (uploads.inProgress[post_uuid] && uploads.inProgress[post_uuid].length) {
- return composerAlert(post_uuid, '[[error:still-uploading]]');
- } else if (checkTitle && payload.titleLen < parseInt(config.minimumTitleLength, 10)) {
- return composerAlert(post_uuid, '[[error:title-too-short, ' + config.minimumTitleLength + ']]');
- } else if (checkTitle && payload.titleLen > parseInt(config.maximumTitleLength, 10)) {
- return composerAlert(post_uuid, '[[error:title-too-long, ' + config.maximumTitleLength + ']]');
- } else if (action === 'topics.post' && !isCategorySelected) {
- return composerAlert(post_uuid, '[[error:category-not-selected]]');
- } else if (payload.bodyLen < parseInt(config.minimumPostLength, 10)) {
- return composerAlert(post_uuid, '[[error:content-too-short, ' + config.minimumPostLength + ']]');
- } else if (payload.bodyLen > parseInt(config.maximumPostLength, 10)) {
- return composerAlert(post_uuid, '[[error:content-too-long, ' + config.maximumPostLength + ']]');
- } else if (checkTitle && !tags.isEnoughTags(post_uuid)) {
- return composerAlert(post_uuid, '[[error:not-enough-tags, ' + tags.minTagCount() + ']]');
- } else if (scheduler.isActive() && scheduler.getTimestamp() <= Date.now()) {
- return composerAlert(post_uuid, '[[error:scheduling-to-past]]');
- }
-
- let composerData = {
- uuid: post_uuid,
- isAnonymous: isAnonymous,
- };
- let method = 'post';
- let route = '';
-
- if (action === 'topics.post') {
- route = '/topics';
- composerData = {
- ...composerData,
- handle: handleEl ? handleEl.val() : undefined,
- title: titleEl.val(),
- content: bodyEl.val(),
- thumb: thumbEl.val() || '',
- cid: categoryList.getSelectedCid(),
- tags: tags.getTags(post_uuid),
- timestamp: scheduler.getTimestamp(),
- isAnonymous: isAnonymous,
- };
- } else if (action === 'posts.reply') {
- route = `/topics/${postData.tid}`;
- composerData = {
- ...composerData,
- tid: postData.tid,
- handle: handleEl ? handleEl.val() : undefined,
- content: bodyEl.val(),
- toPid: postData.toPid,
- isAnonymous: isAnonymous,
- };
- } else if (action === 'posts.edit') {
- method = 'put';
- route = `/posts/${postData.pid}`;
- composerData = {
- ...composerData,
- pid: postData.pid,
- handle: handleEl ? handleEl.val() : undefined,
- content: bodyEl.val(),
- title: titleEl.val(),
- thumb: thumbEl.val() || '',
- tags: tags.getTags(post_uuid),
- timestamp: scheduler.getTimestamp(),
- isAnonymous: isAnonymous,
- };
- }
- var submitHookData = {
- composerEl: postContainer,
- action: action,
- composerData: composerData,
- postData: postData,
- redirect: true,
- };
-
- await hooks.fire('filter:composer.submit', submitHookData);
- hooks.fire('action:composer.submit', Object.freeze(submitHookData));
-
- // Minimize composer (and set textarea as readonly) while submitting
- var taskbarIconEl = $('#taskbar .composer[data-uuid="' + post_uuid + '"] i');
- var textareaEl = postContainer.find('.write');
- taskbarIconEl.removeClass('fa-plus').addClass('fa-circle-o-notch fa-spin');
- composer.minimize(post_uuid);
- textareaEl.prop('readonly', true);
-
- api[method](route, composerData)
- .then((data) => {
- submitBtn.removeAttr('disabled');
- postData.submitted = true;
-
- composer.discard(post_uuid);
- drafts.removeDraft(postData.save_id);
-
- if (data.queued) {
- alerts.alert({
- type: 'success',
- title: '[[global:alert.success]]',
- message: data.message,
- timeout: 10000,
- clickfn: function () {
- ajaxify.go(`/post-queue/${data.id}`);
- },
- });
- } else if (action === 'topics.post') {
- if (submitHookData.redirect) {
- ajaxify.go('topic/' + data.slug, undefined, (onComposeRoute || composer.bsEnvironment === 'xs' || composer.bsEnvironment === 'sm'));
- }
- } else if (action === 'posts.reply') {
- if (onComposeRoute || composer.bsEnvironment === 'xs' || composer.bsEnvironment === 'sm') {
- window.history.back();
- } else if (submitHookData.redirect &&
- ((ajaxify.data.template.name !== 'topic') ||
- (ajaxify.data.template.topic && parseInt(postData.tid, 10) !== parseInt(ajaxify.data.tid, 10)))
- ) {
- ajaxify.go('post/' + data.pid);
- }
- } else {
- removeComposerHistory();
- }
-
- hooks.fire('action:composer.' + action, { composerData: composerData, data: data });
- })
- .catch((err) => {
- // Restore composer on error
- composer.load(post_uuid);
- textareaEl.prop('readonly', false);
- if (err.message === '[[error:email-not-confirmed]]') {
- return messagesModule.showEmailConfirmWarning(err.message);
- }
- composerAlert(post_uuid, err.message);
- });
- }
-
- function onShow() {
- $('html').addClass('composing');
- }
-
- function onHide() {
- $('#content').css({ paddingBottom: 0 });
- $('html').removeClass('composing');
- app.toggleNavbar(true);
- formatting.exitFullscreen();
- }
-
- composer.discard = function (post_uuid) {
- if (composer.posts[post_uuid]) {
- var postData = composer.posts[post_uuid];
- var postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
- postContainer.remove();
- drafts.removeDraft(postData.save_id);
- topicThumbs.deleteAll(post_uuid);
-
- taskbar.discard('composer', post_uuid);
- $('[data-action="post"]').removeAttr('disabled');
-
- hooks.fire('action:composer.discard', {
- post_uuid: post_uuid,
- postData: postData,
- });
- delete composer.posts[post_uuid];
- composer.active = undefined;
- }
- scheduler.reset();
- onHide();
- };
-
- // Alias to .discard();
- composer.close = composer.discard;
-
- composer.minimize = function (post_uuid) {
- var postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
- postContainer.css('visibility', 'hidden');
- composer.active = undefined;
- taskbar.minimize('composer', post_uuid);
- $(window).trigger('action:composer.minimize', {
- post_uuid: post_uuid,
- });
-
- onHide();
- };
-
- composer.minimizeActive = function () {
- if (composer.active) {
- composer.miminize(composer.active);
- }
- };
-
- composer.updateThumbCount = function (uuid, postContainer) {
- const composerObj = composer.posts[uuid];
- if (composerObj.action === 'topics.post' || (composerObj.action === 'posts.edit' && composerObj.isMain)) {
- const calls = [
- topicThumbs.get(uuid),
- ];
- if (composerObj.pid) {
- calls.push(topicThumbs.getByPid(composerObj.pid));
- }
- Promise.all(calls).then((thumbs) => {
- const thumbCount = thumbs.flat().length;
- const formatEl = postContainer.find('[data-format="thumbs"]');
- formatEl.find('.badge')
- .text(thumbCount)
- .toggleClass('hidden', !thumbCount);
- });
- }
- };
-
- return composer;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/autocomplete.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/autocomplete.js
deleted file mode 100644
index ec2ce15d33..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/autocomplete.js
+++ /dev/null
@@ -1,99 +0,0 @@
-'use strict';
-
-define('composer/autocomplete', [
- 'composer/preview', '@textcomplete/core', '@textcomplete/textarea', '@textcomplete/contenteditable',
-], function (preview, { Textcomplete }, { TextareaEditor }, { ContenteditableEditor }) {
- var autocomplete = {
- _active: {},
- };
-
- $(window).on('action:composer.discard', function (evt, data) {
- if (autocomplete._active.hasOwnProperty(data.post_uuid)) {
- autocomplete._active[data.post_uuid].destroy();
- delete autocomplete._active[data.post_uuid];
- }
- });
-
- autocomplete.init = function (postContainer, post_uuid) {
- var element = postContainer.find('.write');
- var dropdownClass = 'composer-autocomplete-dropdown-' + post_uuid;
- var timer;
-
- if (!element.length) {
- /**
- * Some composers do their own thing before calling autocomplete.init() again.
- * One reason is because they want to override the textarea with their own element.
- * In those scenarios, they don't specify the "write" class, and this conditional
- * looks for that and stops the autocomplete init process.
- */
- return;
- }
-
- var data = {
- element: element,
- strategies: [],
- options: {
- style: {
- 'z-index': 20000,
- },
- className: dropdownClass + ' dropdown-menu textcomplete-dropdown',
- },
- };
-
- element.on('keyup', function () {
- clearTimeout(timer);
- timer = setTimeout(function () {
- var dropdown = document.querySelector('.' + dropdownClass);
- if (dropdown) {
- var pos = dropdown.getBoundingClientRect();
-
- var margin = parseFloat(dropdown.style.marginTop, 10) || 0;
-
- var offset = window.innerHeight + margin - 10 - pos.bottom;
- dropdown.style.marginTop = Math.min(offset, 0) + 'px';
- }
- }, 0);
- });
-
- $(window).trigger('composer:autocomplete:init', data);
-
- autocomplete._active[post_uuid] = autocomplete.setup(data);
-
- data.element.on('textComplete:select', function () {
- preview.render(postContainer);
- });
- };
-
- // This is a generic method that is also used by the chat
- autocomplete.setup = function ({ element, strategies, options }) {
- const targetEl = element.get(0);
- if (!targetEl) {
- return;
- }
- var editor;
- if (targetEl.nodeName === 'TEXTAREA' || targetEl.nodeName === 'INPUT') {
- editor = new TextareaEditor(targetEl);
- } else if (targetEl.nodeName === 'DIV' && targetEl.getAttribute('contenteditable') === 'true') {
- editor = new ContenteditableEditor(targetEl);
- }
- if (!editor) {
- throw new Error('unknown target element type');
- }
- // yuku-t/textcomplete inherits directionality from target element itself
- targetEl.setAttribute('dir', document.querySelector('html').getAttribute('data-dir'));
-
- var textcomplete = new Textcomplete(editor, strategies, {
- dropdown: options,
- });
- textcomplete.on('rendered', function () {
- if (textcomplete.dropdown.items.length) {
- // Activate the first item by default.
- textcomplete.dropdown.items[0].activate();
- }
- });
-
- return textcomplete;
- };
-
- return autocomplete;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/categoryList.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/categoryList.js
deleted file mode 100644
index 79f5b7a46b..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/categoryList.js
+++ /dev/null
@@ -1,115 +0,0 @@
-'use strict';
-
-define('composer/categoryList', [
- 'categorySelector', 'taskbar', 'api',
-], function (categorySelector, taskbar, api) {
- var categoryList = {};
-
- var selector;
-
- categoryList.init = function (postContainer, postData) {
- var listContainer = postContainer.find('.category-list-container');
- if (!listContainer.length) {
- return;
- }
-
- postContainer.on('action:composer.resize', function () {
- toggleDropDirection(postContainer);
- });
-
- categoryList.updateTaskbar(postContainer, postData);
-
- selector = categorySelector.init(listContainer.find('[component="category-selector"]'), {
- privilege: 'topics:create',
- states: ['watching', 'tracking', 'notwatching', 'ignoring'],
- onSelect: function (selectedCategory) {
- if (postData.hasOwnProperty('cid')) {
- changeCategory(postContainer, postData, selectedCategory);
- }
- },
- });
- if (!selector) {
- return;
- }
- if (postData.cid && postData.category) {
- selector.selectedCategory = { cid: postData.cid, name: postData.category.name };
- } else if (ajaxify.data.template.compose && ajaxify.data.selectedCategory) {
- // separate composer route
- selector.selectedCategory = { cid: ajaxify.data.cid, name: ajaxify.data.selectedCategory };
- }
-
- // this is the mobile category selector
- postContainer.find('.category-name')
- .translateHtml(selector.selectedCategory ? selector.selectedCategory.name : '[[modules:composer.select-category]]')
- .on('click', function () {
- categorySelector.modal({
- privilege: 'topics:create',
- states: ['watching', 'tracking', 'notwatching', 'ignoring'],
- openOnLoad: true,
- showLinks: false,
- onSubmit: function (selectedCategory) {
- postContainer.find('.category-name').text(selectedCategory.name);
- selector.selectCategory(selectedCategory.cid);
- if (postData.hasOwnProperty('cid')) {
- changeCategory(postContainer, postData, selectedCategory);
- }
- },
- });
- });
-
- toggleDropDirection(postContainer);
- };
-
- function toggleDropDirection(postContainer) {
- postContainer.find('.category-list-container [component="category-selector"]').toggleClass('dropup', postContainer.outerHeight() < $(window).height() / 2);
- }
-
- categoryList.getSelectedCid = function () {
- var selectedCategory;
- if (selector) {
- selectedCategory = selector.getSelectedCategory();
- }
- return selectedCategory ? selectedCategory.cid : 0;
- };
-
- categoryList.updateTaskbar = function (postContainer, postData) {
- if (parseInt(postData.cid, 10)) {
- api.get(`/categories/${postData.cid}`, {}).then(function (category) {
- updateTaskbarByCategory(postContainer, category);
- });
- }
- };
-
- function updateTaskbarByCategory(postContainer, category) {
- if (category) {
- var uuid = postContainer.attr('data-uuid');
- taskbar.update('composer', uuid, {
- image: category.backgroundImage,
- color: category.color,
- 'background-color': category.bgColor,
- icon: category.icon && category.icon.slice(3),
- });
- }
- }
-
- async function changeCategory(postContainer, postData, selectedCategory) {
- postData.cid = selectedCategory.cid;
- const categoryData = await window.fetch(`${config.relative_path}/api/category/${selectedCategory.cid}`).then(r => r.json());
- postData.category = categoryData;
- updateTaskbarByCategory(postContainer, categoryData);
- require(['composer/scheduler', 'composer/tags', 'composer/post-queue'], function (scheduler, tags, postQueue) {
- scheduler.onChangeCategory(categoryData);
- tags.onChangeCategory(postContainer, postData, selectedCategory.cid, categoryData);
- postQueue.onChangeCategory(postContainer, postData);
-
- $(window).trigger('action:composer.changeCategory', {
- postContainer: postContainer,
- postData: postData,
- selectedCategory: selectedCategory,
- categoryData: categoryData,
- });
- });
- }
-
- return categoryList;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/controls.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/controls.js
deleted file mode 100644
index bf393fc21a..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/controls.js
+++ /dev/null
@@ -1,171 +0,0 @@
-'use strict';
-
-define('composer/controls', ['composer/preview'], function (preview) {
- var controls = {};
-
- /** ********************************************** */
- /* Rich Textarea Controls */
- /** ********************************************** */
- controls.insertIntoTextarea = function (textarea, value) {
- var payload = {
- context: this,
- textarea: textarea,
- value: value,
- preventDefault: false,
- };
- $(window).trigger('action:composer.insertIntoTextarea', payload);
-
- if (payload.preventDefault) {
- return;
- }
-
- var $textarea = $(payload.textarea);
- var currentVal = $textarea.val();
- var postContainer = $textarea.parents('[component="composer"]');
-
- $textarea.val(
- currentVal.slice(0, payload.textarea.selectionStart) +
- payload.value +
- currentVal.slice(payload.textarea.selectionStart)
- );
-
- preview.render(postContainer);
- };
-
- controls.replaceSelectionInTextareaWith = function (textarea, value) {
- var payload = {
- context: this,
- textarea: textarea,
- value: value,
- preventDefault: false,
- };
- $(window).trigger('action:composer.replaceSelectionInTextareaWith', payload);
-
- if (payload.preventDefault) {
- return;
- }
-
- var $textarea = $(payload.textarea);
- var currentVal = $textarea.val();
- var postContainer = $textarea.parents('[component="composer"]');
-
- $textarea.val(
- currentVal.slice(0, payload.textarea.selectionStart) +
- payload.value +
- currentVal.slice(payload.textarea.selectionEnd)
- );
-
- preview.render(postContainer);
- };
-
- controls.wrapSelectionInTextareaWith = function (textarea, leading, trailing) {
- var payload = {
- context: this,
- textarea: textarea,
- leading: leading,
- trailing: trailing,
- preventDefault: false,
- };
- $(window).trigger('action:composer.wrapSelectionInTextareaWith', payload);
-
- if (payload.preventDefault) {
- return;
- }
-
- if (trailing === undefined) {
- trailing = leading;
- }
-
- var $textarea = $(textarea);
- var currentVal = $textarea.val();
-
- var matches = /^(\s*)([\s\S]*?)(\s*)$/.exec(currentVal.slice(textarea.selectionStart, textarea.selectionEnd));
-
- if (!matches[2]) {
- // selection is entirely whitespace
- matches = [null, '', currentVal.slice(textarea.selectionStart, textarea.selectionEnd), ''];
- }
-
- $textarea.val(
- currentVal.slice(0, textarea.selectionStart) +
- matches[1] +
- leading +
- matches[2] +
- trailing +
- matches[3] +
- currentVal.slice(textarea.selectionEnd)
- );
-
- return [matches[1].length, matches[3].length];
- };
-
- controls.updateTextareaSelection = function (textarea, start, end) {
- var payload = {
- context: this,
- textarea: textarea,
- start: start,
- end: end,
- preventDefault: false,
- };
- $(window).trigger('action:composer.updateTextareaSelection', payload);
-
- if (payload.preventDefault) {
- return;
- }
-
- textarea.setSelectionRange(payload.start, payload.end);
- $(payload.textarea).focus();
- };
-
- controls.getBlockData = function (textareaEl, query, selectionStart) {
- // Determines whether the cursor is sitting inside a block-type element (bold, italic, etc.)
- var value = textareaEl.value;
- query = query.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&');
- var regex = new RegExp(query, 'g');
- var match;
- var matchIndices = [];
- var payload;
-
- // Isolate the line the cursor is on
- value = value.split('\n').reduce(function (memo, line) {
- if (memo !== null) {
- return memo;
- }
-
- memo = selectionStart <= line.length ? line : null;
-
- if (memo === null) {
- selectionStart -= (line.length + 1);
- }
-
- return memo;
- }, null);
-
- // Find query characters and determine return payload
- while ((match = regex.exec(value)) !== null) {
- matchIndices.push(match.index);
- }
-
- payload = {
- in: !!(matchIndices.reduce(function (memo, cur) {
- if (selectionStart >= cur + 2) {
- memo += 1;
- }
-
- return memo;
- }, 0) % 2),
- atEnd: matchIndices.reduce(function (memo, cur) {
- if (memo) {
- return memo;
- }
-
- return selectionStart === cur;
- }, false),
- };
-
- payload.atEnd = payload.in ? payload.atEnd : false;
- return payload;
- };
-
- return controls;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/drafts.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/drafts.js
deleted file mode 100644
index 5a23cd10dc..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/drafts.js
+++ /dev/null
@@ -1,341 +0,0 @@
-'use strict';
-
-define('composer/drafts', ['api', 'alerts'], function (api, alerts) {
- const drafts = {};
- const draftSaveDelay = 1000;
- drafts.init = function (postContainer, postData) {
- const draftIconEl = postContainer.find('.draft-icon');
- const uuid = postContainer.attr('data-uuid');
- function doSaveDraft() {
- // check if composer is still around,
- // it might have been gone by the time this timeout triggers
- if (!$(`[component="composer"][data-uuid="${uuid}"]`).length) {
- return;
- }
-
- if (!postData.save_id) {
- postData.save_id = utils.generateSaveId(app.user.uid);
- }
- // Post is modified, save to list of opened drafts
- drafts.addToDraftList('available', postData.save_id);
- drafts.addToDraftList('open', postData.save_id);
- saveDraft(postContainer, draftIconEl, postData);
- }
-
- postContainer.on('keyup', 'textarea, input.handle, input.title', utils.debounce(doSaveDraft, draftSaveDelay));
- postContainer.on('click', 'input[type="checkbox"]', utils.debounce(doSaveDraft, draftSaveDelay));
- postContainer.on('click', '[component="category/list"] [data-cid]', utils.debounce(doSaveDraft, draftSaveDelay));
- postContainer.on('itemAdded', '.tags', utils.debounce(doSaveDraft, draftSaveDelay));
- postContainer.on('thumb.uploaded', doSaveDraft);
-
- draftIconEl.on('animationend', function () {
- $(this).toggleClass('active', false);
- });
-
- $(window).on('unload', function () {
- // remove all drafts from the open list
- const open = drafts.getList('open');
- if (open.length) {
- open.forEach(save_id => drafts.removeFromDraftList('open', save_id));
- }
- });
-
- drafts.migrateGuest();
- drafts.migrateThumbs(...arguments);
- };
-
- function getStorage(uid) {
- return parseInt(uid, 10) > 0 ? localStorage : sessionStorage;
- }
-
- drafts.get = function (save_id) {
- if (!save_id) {
- return null;
- }
- const uid = save_id.split(':')[1];
- const storage = getStorage(uid);
- try {
- const draftJson = storage.getItem(save_id);
- const draft = JSON.parse(draftJson) || null;
- if (!draft) {
- throw new Error(`can't parse draft json for ${save_id}`);
- }
- draft.save_id = save_id;
- if (draft.timestamp) {
- draft.timestampISO = utils.toISOString(draft.timestamp);
- }
- $(window).trigger('action:composer.drafts.get', {
- save_id: save_id,
- draft: draft,
- storage: storage,
- });
- return draft;
- } catch (e) {
- console.warn(`[composer/drafts] Could not get draft ${save_id}, removing`);
- drafts.removeFromDraftList('available');
- drafts.removeFromDraftList('open');
- return null;
- }
- };
-
- function saveDraft(postContainer, draftIconEl, postData) {
- if (canSave(app.user.uid ? 'localStorage' : 'sessionStorage') && postData && postData.save_id && postContainer.length) {
- const titleEl = postContainer.find('input.title');
- const title = titleEl && titleEl.length && titleEl.val();
- const raw = postContainer.find('textarea').val();
- const storage = getStorage(app.user.uid);
-
- if (raw.length || (title && title.length)) {
- const draftData = {
- save_id: postData.save_id,
- action: postData.action,
- text: raw,
- uuid: postContainer.attr('data-uuid'),
- timestamp: Date.now(),
- };
-
- if (postData.action === 'topics.post') {
- // New topic only
- const tags = postContainer.find('input.tags').val();
- draftData.tags = tags;
- draftData.title = title;
- draftData.cid = postData.cid;
- } else if (postData.action === 'posts.reply') {
- // new reply only
- draftData.title = postData.title;
- draftData.tid = postData.tid;
- draftData.toPid = postData.toPid;
- } else if (postData.action === 'posts.edit') {
- draftData.pid = postData.pid;
- draftData.title = title || postData.title;
- }
- if (!app.user.uid) {
- draftData.handle = postContainer.find('input.handle').val();
- }
-
- // save all draft data into single item as json
- storage.setItem(postData.save_id, JSON.stringify(draftData));
-
- $(window).trigger('action:composer.drafts.save', {
- storage: storage,
- postData: postData,
- postContainer: postContainer,
- });
- draftIconEl.toggleClass('active', true);
- } else {
- drafts.removeDraft(postData.save_id);
- }
- }
- }
-
- drafts.removeDraft = function (save_id) {
- if (!save_id) {
- return;
- }
-
- // Remove save_id from list of open and available drafts
- drafts.removeFromDraftList('available', save_id);
- drafts.removeFromDraftList('open', save_id);
- const uid = save_id.split(':')[1];
- const storage = getStorage(uid);
- storage.removeItem(save_id);
-
- $(window).trigger('action:composer.drafts.remove', {
- storage: storage,
- save_id: save_id,
- });
- };
-
- drafts.getList = function (set) {
- try {
- const draftIds = localStorage.getItem(`drafts:${set}`);
- return JSON.parse(draftIds) || [];
- } catch (e) {
- console.warn('[composer/drafts] Could not read list of available drafts');
- return [];
- }
- };
-
- drafts.addToDraftList = function (set, save_id) {
- if (!canSave(app.user.uid ? 'localStorage' : 'sessionStorage') || !save_id) {
- return;
- }
- const list = drafts.getList(set);
- if (!list.includes(save_id)) {
- list.push(save_id);
- localStorage.setItem('drafts:' + set, JSON.stringify(list));
- }
- };
-
- drafts.removeFromDraftList = function (set, save_id) {
- if (!canSave(app.user.uid ? 'localStorage' : 'sessionStorage') || !save_id) {
- return;
- }
- const list = drafts.getList(set);
- if (list.includes(save_id)) {
- list.splice(list.indexOf(save_id), 1);
- localStorage.setItem('drafts:' + set, JSON.stringify(list));
- }
- };
-
- drafts.migrateGuest = function () {
- // If any drafts are made while as guest, and user then logs in, assume control of those drafts
- if (canSave('localStorage') && app.user.uid) {
- // composer::
- const test = /^composer:\d+:\d$/;
- const keys = Object.keys(sessionStorage).filter(function (key) {
- return test.test(key);
- });
- const migrated = new Set([]);
- const renamed = keys.map(function (key) {
- const parts = key.split(':');
- parts[1] = app.user.uid;
-
- migrated.add(parts.join(':'));
- return parts.join(':');
- });
-
- keys.forEach(function (key, idx) {
- localStorage.setItem(renamed[idx], sessionStorage.getItem(key));
- sessionStorage.removeItem(key);
- });
-
- migrated.forEach(function (save_id) {
- drafts.addToDraftList('available', save_id);
- });
-
- return migrated;
- }
- };
-
- drafts.migrateThumbs = function (postContainer, postData) {
- if (!app.uid) {
- return;
- }
-
- // If any thumbs were uploaded, migrate them to this new composer's uuid
- const newUUID = postContainer.attr('data-uuid');
- const draft = drafts.get(postData.save_id);
-
- if (draft && draft.uuid) {
- api.put(`/topics/${draft.uuid}/thumbs`, {
- tid: newUUID,
- }).then(() => {
- require(['composer'], function (composer) {
- composer.updateThumbCount(newUUID, postContainer);
- });
- });
- }
- };
-
- drafts.listAvailable = function () {
- const available = drafts.getList('available');
- return available.map(drafts.get).filter(Boolean);
- };
-
- drafts.getAvailableCount = function () {
- return drafts.listAvailable().length;
- };
-
- drafts.open = function (save_id) {
- if (!save_id) {
- return;
- }
- const draft = drafts.get(save_id);
- openComposer(save_id, draft);
- };
-
- drafts.loadOpen = function () {
- if (ajaxify.data.template.login || ajaxify.data.template.register || (config.hasOwnProperty('openDraftsOnPageLoad') && !config.openDraftsOnPageLoad)) {
- return;
- }
- // Load drafts if they were open
- const available = drafts.getList('available');
- const open = drafts.getList('open');
-
- if (available.length) {
- // Deconstruct each save_id and open up composer
- available.forEach(function (save_id) {
- if (!save_id || open.includes(save_id)) {
- return;
- }
- const draft = drafts.get(save_id);
- if (!draft || (!draft.text && !draft.title)) {
- drafts.removeFromDraftList('available', save_id);
- drafts.removeFromDraftList('open', save_id);
- return;
- }
- openComposer(save_id, draft);
- });
- }
- };
-
- function openComposer(save_id, draft) {
- const saveObj = save_id.split(':');
- const uid = saveObj[1];
- // Don't open other peoples' drafts
- if (parseInt(app.user.uid, 10) !== parseInt(uid, 10)) {
- return;
- }
- require(['composer'], function (composer) {
- if (draft.action === 'topics.post') {
- composer.newTopic({
- save_id: draft.save_id,
- cid: draft.cid,
- handle: app.user && app.user.uid ? undefined : utils.escapeHTML(draft.handle),
- title: utils.escapeHTML(draft.title),
- body: draft.text,
- tags: String(draft.tags || '').split(','),
- });
- } else if (draft.action === 'posts.reply') {
- api.get('/topics/' + draft.tid, {}, function (err, topicObj) {
- if (err) {
- return alerts.error(err);
- }
-
- composer.newReply({
- save_id: draft.save_id,
- tid: draft.tid,
- toPid: draft.toPid,
- title: topicObj.title,
- body: draft.text,
- });
- });
- } else if (draft.action === 'posts.edit') {
- composer.editPost({
- save_id: draft.save_id,
- pid: draft.pid,
- title: draft.title ? utils.escapeHTML(draft.title) : undefined,
- body: draft.text,
- });
- }
- });
- }
-
- // Feature detection courtesy of: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API
- function canSave(type) {
- var storage;
- try {
- storage = window[type];
- var x = '__storage_test__';
- storage.setItem(x, x);
- storage.removeItem(x);
- return true;
- } catch (e) {
- return e instanceof DOMException && (
- // everything except Firefox
- e.code === 22 ||
- // Firefox
- e.code === 1014 ||
- // test name field too, because code might not be present
- // everything except Firefox
- e.name === 'QuotaExceededError' ||
- // Firefox
- e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
- // acknowledge QuotaExceededError only if there's something already stored
- (storage && storage.length !== 0);
- }
- }
-
- return drafts;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/formatting.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/formatting.js
deleted file mode 100644
index dca150fdd4..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/formatting.js
+++ /dev/null
@@ -1,194 +0,0 @@
-'use strict';
-
-define('composer/formatting', [
- 'composer/preview', 'composer/resize', 'topicThumbs', 'screenfull',
-], function (preview, resize, topicThumbs, screenfull) {
- var formatting = {};
-
- var formattingDispatchTable = {
- picture: function () {
- var postContainer = this;
- postContainer.find('#files')
- .attr('accept', 'image/*')
- .click();
- },
-
- upload: function () {
- var postContainer = this;
- postContainer.find('#files')
- .attr('accept', '')
- .click();
- },
-
- thumbs: function () {
- formatting.exitFullscreen();
- var postContainer = this;
- require(['composer'], function (composer) {
- const uuid = postContainer.get(0).getAttribute('data-uuid');
- const composerObj = composer.posts[uuid];
-
- if (composerObj.action === 'topics.post' || (composerObj.action === 'posts.edit' && composerObj.isMain)) {
- topicThumbs.modal.open({ id: uuid, pid: composerObj.pid }).then(() => {
- postContainer.trigger('thumb.uploaded'); // toggle draft save
-
- // Update client-side with count
- composer.updateThumbCount(uuid, postContainer);
- });
- }
- });
- },
-
- tags: function () {
- var postContainer = this;
- postContainer.find('.tags-container').toggleClass('hidden');
- },
-
- zen: function () {
- var postContainer = this;
- $(window).one('resize', function () {
- function onResize() {
- if (!screenfull.isFullscreen) {
- app.toggleNavbar(true);
- $('html').removeClass('zen-mode');
- resize.reposition(postContainer);
- $(window).off('resize', onResize);
- }
- }
-
- if (screenfull.isFullscreen) {
- app.toggleNavbar(false);
- $('html').addClass('zen-mode');
- postContainer.find('.write').focus();
-
- $(window).on('resize', onResize);
- $(window).one('action:composer.topics.post action:composer.posts.reply action:composer.posts.edit action:composer.discard', screenfull.exit);
- }
- });
-
- screenfull.toggle(postContainer.get(0));
- $(window).trigger('action:composer.fullscreen', { postContainer: postContainer });
- },
- };
-
- var buttons = [];
-
- formatting.exitFullscreen = function () {
- if (screenfull.isEnabled && screenfull.isFullscreen) {
- screenfull.exit();
- }
- };
-
- formatting.addComposerButtons = function () {
- const formattingBarEl = $('.formatting-bar');
- const fileForm = formattingBarEl.find('.formatting-group #fileForm');
- buttons.forEach((btn) => {
- let markup = ``;
- if (Array.isArray(btn.dropdownItems) && btn.dropdownItems.length) {
- markup = generateFormattingDropdown(btn);
- } else {
- markup = `
- -
-
-
- `;
- }
- fileForm.before(markup);
- });
-
- const els = formattingBarEl.find('.formatting-group>li');
- els.tooltip({
- container: '#content',
- animation: false,
- trigger: 'manual',
- }).on('mouseenter', function (ev) {
- const target = $(ev.target);
- const isDropdown = target.hasClass('dropdown-menu') || !!target.parents('.dropdown-menu').length;
- if (!isDropdown) {
- $(this).tooltip('show');
- }
- }).on('click mouseleave', function () {
- $(this).tooltip('hide');
- });
- };
-
- function generateBadgetHtml(btn) {
- let badgeHtml = '';
- if (btn.badge) {
- badgeHtml = ``;
- }
- return badgeHtml;
- }
-
- function generateFormattingDropdown(btn) {
- const dropdownItemsHtml = btn.dropdownItems.map(function (btn) {
- return `
- -
-
- ${btn.text}
- ${generateBadgetHtml(btn)}
-
-
- `;
- });
- return `
- -
-
-
-
- `;
- }
-
- formatting.addButton = function (iconClass, onClick, title, name) {
- name = name || iconClass.replace('fa fa-', '');
- formattingDispatchTable[name] = onClick;
- buttons.push({
- name,
- iconClass,
- title,
- });
- };
-
- formatting.addDropdown = function (data) {
- buttons.push({
- iconClass: data.iconClass,
- title: data.title,
- dropdownItems: data.dropdownItems,
- });
- data.dropdownItems.forEach((btn) => {
- if (btn.name && btn.onClick) {
- formattingDispatchTable[btn.name] = btn.onClick;
- }
- });
- };
-
- formatting.getDispatchTable = function () {
- return formattingDispatchTable;
- };
-
- formatting.addButtonDispatch = function (name, onClick) {
- formattingDispatchTable[name] = onClick;
- };
-
- formatting.addHandler = function (postContainer) {
- postContainer.on('click', '.formatting-bar [data-format]', function (event) {
- var format = $(this).attr('data-format');
- var textarea = $(this).parents('[component="composer"]').find('textarea')[0];
-
- if (formattingDispatchTable.hasOwnProperty(format)) {
- formattingDispatchTable[format].call(
- postContainer, textarea, textarea.selectionStart, textarea.selectionEnd, event
- );
- preview.render(postContainer);
- }
- });
- };
-
- return formatting;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/post-queue.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/post-queue.js
deleted file mode 100644
index 2022430842..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/post-queue.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-define('composer/post-queue', [], function () {
- const postQueue = {};
-
- postQueue.showAlert = async function (postContainer, postData) {
- const alertEl = postContainer.find('[component="composer/post-queue/alert"]')
- if (!config.postQueue || app.user.isAdmin || app.user.isGlobalMod || app.user.isMod) {
- alertEl.remove();
- return;
- }
- const shouldQueue = await socket.emit('plugins.composer.shouldQueue', { postData: postData });
- alertEl.toggleClass('show', shouldQueue);
- alertEl.toggleClass('pe-none', !shouldQueue);
- };
-
- postQueue.onChangeCategory = async function (postContainer, postData) {
- if (!config.postQueue) {
- return;
- }
- postQueue.showAlert(postContainer, postData);
- };
-
- return postQueue;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/preview.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/preview.js
deleted file mode 100644
index 9074e6edc2..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/preview.js
+++ /dev/null
@@ -1,105 +0,0 @@
-'use strict';
-
-define('composer/preview', ['hooks'], function (hooks) {
- var preview = {};
-
- preview.render = function (postContainer, callback) {
- callback = callback || function () {};
- if (!postContainer.find('.preview-container').is(':visible')) {
- return callback();
- }
-
- var textarea = postContainer.find('textarea');
-
- socket.emit('plugins.composer.renderPreview', textarea.val(), function (err, preview) {
- if (err) {
- return;
- }
- preview = $('' + preview + '
');
- preview.find('img:not(.not-responsive)').addClass('img-fluid');
- postContainer.find('.preview').html(preview);
- hooks.fire('action:composer.preview', { postContainer, preview });
- callback();
- });
- };
-
- preview.matchScroll = function (postContainer) {
- if (!postContainer.find('.preview-container').is(':visible')) {
- return;
- }
- var textarea = postContainer.find('textarea');
- var preview = postContainer.find('.preview');
-
- if (textarea.length && preview.length) {
- var diff = textarea[0].scrollHeight - textarea.height();
-
- if (diff === 0) {
- return;
- }
-
- var scrollPercent = textarea.scrollTop() / diff;
-
- preview.scrollTop(Math.max(preview[0].scrollHeight - preview.height(), 0) * scrollPercent);
- }
- };
-
- preview.handleToggler = function ($postContainer) {
- const postContainer = $postContainer.get(0);
- preview.env = utils.findBootstrapEnvironment();
- const isMobile = ['xs', 'sm'].includes(preview.env);
- const toggler = postContainer.querySelector('.formatting-bar [data-action="preview"]');
- const showText = toggler.querySelector('.show-text');
- const hideText = toggler.querySelector('.hide-text');
- const previewToggled = localStorage.getItem('composer:previewToggled');
- const hidePreviewOnOpen = config['composer-default'].hidePreviewOnOpen === 'on';
- let show = !isMobile && (
- ((previewToggled === null && !hidePreviewOnOpen) || previewToggled === 'true')
- );
- const previewContainer = postContainer.querySelector('.preview-container');
- const writeContainer = postContainer.querySelector('.write-container');
-
- if (!toggler) {
- return;
- }
-
- function togglePreview(show) {
- if (isMobile) {
- previewContainer.classList.toggle('hide', false);
- writeContainer.classList.toggle('maximized', false);
-
- previewContainer.classList.toggle('d-none', !show);
- previewContainer.classList.toggle('d-flex', show);
- previewContainer.classList.toggle('w-100', show);
-
- writeContainer.classList.toggle('d-flex', !show);
- writeContainer.classList.toggle('d-none', show);
- writeContainer.classList.toggle('w-100', !show);
- } else {
- previewContainer.classList.toggle('hide', !show);
- writeContainer.classList.toggle('w-50', show);
- writeContainer.classList.toggle('w-100', !show);
- localStorage.setItem('composer:previewToggled', show);
- }
- showText.classList.toggle('hide', show);
- hideText.classList.toggle('hide', !show);
- if (show) {
- preview.render($postContainer);
- }
- preview.matchScroll($postContainer);
- }
- preview.toggle = togglePreview;
-
- toggler.addEventListener('click', (e) => {
- if (e.button !== 0) {
- return;
- }
-
- show = !show;
- togglePreview(show);
- });
-
- togglePreview(show);
- };
-
- return preview;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/resize.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/resize.js
deleted file mode 100644
index 5fa84f3a3f..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/resize.js
+++ /dev/null
@@ -1,197 +0,0 @@
-
-'use strict';
-
-define('composer/resize', ['taskbar'], function (taskbar) {
- var resize = {};
- var oldRatio = 0;
- var minimumRatio = 0.3;
- var snapMargin = 0.05;
- var smallMin = 768;
-
- var $body = $('body');
- var $window = $(window);
- var $headerMenu = $('[component="navbar"]');
- const content = document.getElementById('content');
-
- var header = $headerMenu[0];
-
- function getSavedRatio() {
- return localStorage.getItem('composer:resizeRatio') || 0.5;
- }
-
- function saveRatio(ratio) {
- localStorage.setItem('composer:resizeRatio', Math.min(ratio, 1));
- }
-
- function getBounds() {
- var headerRect;
- if (header) {
- headerRect = header.getBoundingClientRect();
- } else {
- // Mock data
- headerRect = { bottom: 0 };
- }
-
- var headerBottom = Math.max(headerRect.bottom, 0);
-
- var rect = {
- top: 0,
- left: 0,
- right: window.innerWidth,
- bottom: window.innerHeight,
- };
-
- rect.width = rect.right;
- rect.height = rect.bottom;
-
- rect.boundedTop = headerBottom;
- rect.boundedHeight = rect.bottom - headerBottom;
-
- return rect;
- }
-
- function doResize(postContainer, ratio) {
- var bounds = getBounds();
- var elem = postContainer[0];
- var style = window.getComputedStyle(elem);
-
- // Adjust minimumRatio for shorter viewports
- var minHeight = parseInt(style.getPropertyValue('min-height'), 10);
- var adjustedMinimum = Math.max(minHeight / window.innerHeight, minimumRatio);
-
- if (bounds.width >= smallMin) {
- const boundedDifference = (bounds.height - bounds.boundedHeight) / bounds.height;
- ratio = Math.min(Math.max(ratio, adjustedMinimum + boundedDifference), 1);
-
- var top = ratio * bounds.boundedHeight / bounds.height;
- elem.style.top = ((1 - top) * 100).toString() + '%';
-
- // Add some extra space at the bottom of the body so that
- // the user can still scroll to the last post w/ composer open
- var rect = elem.getBoundingClientRect();
- content.style.paddingBottom = (rect.bottom - rect.top).toString() + 'px';
- } else {
- elem.style.top = 0;
- content.style.paddingBottom = 0;
- }
-
- postContainer.ratio = ratio;
-
- taskbar.updateActive(postContainer.attr('data-uuid'));
- }
-
- var resizeIt = doResize;
- var raf = window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame;
-
- if (raf) {
- resizeIt = function (postContainer, ratio) {
- raf(function () {
- doResize(postContainer, ratio);
-
- setTimeout(function () {
- $window.trigger('action:composer.resize');
- postContainer.trigger('action:composer.resize');
- }, 0);
- });
- };
- }
-
- resize.reposition = function (postContainer) {
- var ratio = getSavedRatio();
-
- if (ratio >= 1 - snapMargin) {
- ratio = 1;
- postContainer.addClass('maximized');
- }
-
- resizeIt(postContainer, ratio);
- };
-
- resize.maximize = function (postContainer, state) {
- if (state) {
- resizeIt(postContainer, 1);
- } else {
- resize.reposition(postContainer);
- }
- };
-
- resize.handleResize = function (postContainer) {
- var resizeOffset = 0;
- var resizeBegin = 0;
- var resizeEnd = 0;
- var $resizer = postContainer.find('.resizer');
- var resizer = $resizer[0];
-
- function resizeStart(e) {
- var resizeRect = resizer.getBoundingClientRect();
- var resizeCenterY = (resizeRect.top + resizeRect.bottom) / 2;
-
- resizeOffset = (resizeCenterY - e.clientY) / 2;
- resizeBegin = e.clientY;
-
- $window.on('mousemove', resizeAction);
- $window.on('mouseup', resizeStop);
- $body.on('touchmove', resizeTouchAction);
- }
-
- function resizeAction(e) {
- var position = e.clientY - resizeOffset;
- var bounds = getBounds();
- var ratio = (bounds.height - position) / (bounds.boundedHeight);
-
- resizeIt(postContainer, ratio);
- }
-
- function resizeStop(e) {
- e.preventDefault();
- resizeEnd = e.clientY;
-
- postContainer.find('textarea').focus();
- $window.off('mousemove', resizeAction);
- $window.off('mouseup', resizeStop);
- $body.off('touchmove', resizeTouchAction);
-
- var position = resizeEnd - resizeOffset;
- var bounds = getBounds();
- var ratio = (bounds.height - position) / (bounds.boundedHeight);
-
- if (resizeEnd - resizeBegin === 0 && postContainer.hasClass('maximized')) {
- postContainer.removeClass('maximized');
- ratio = (!oldRatio || oldRatio >= 1 - snapMargin) ? 0.5 : oldRatio;
- resizeIt(postContainer, ratio);
- } else if (resizeEnd - resizeBegin === 0 || ratio >= 1 - snapMargin) {
- resizeIt(postContainer, 1);
- postContainer.addClass('maximized');
- oldRatio = ratio;
- } else {
- postContainer.removeClass('maximized');
- }
-
- saveRatio(ratio);
- }
-
- function resizeTouchAction(e) {
- e.preventDefault();
- resizeAction(e.touches[0]);
- }
-
- $resizer
- .on('mousedown', function (e) {
- if (e.button !== 0) {
- return;
- }
-
- e.preventDefault();
- resizeStart(e);
- })
- .on('touchstart', function (e) {
- e.preventDefault();
- resizeStart(e.touches[0]);
- })
- .on('touchend', resizeStop);
- };
-
- return resize;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/scheduler.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/scheduler.js
deleted file mode 100644
index e238c33bdc..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/scheduler.js
+++ /dev/null
@@ -1,201 +0,0 @@
-'use strict';
-
-define('composer/scheduler', ['benchpress', 'bootbox', 'alerts', 'translator'], function (
- Benchpress,
- bootbox,
- alerts,
- translator
-) {
- const scheduler = {};
- const state = {
- timestamp: 0,
- open: false,
- edit: false,
- posts: {},
- };
- let displayBtnCons = [];
- let displayBtns;
- let cancelBtn;
- let submitContainer;
- let submitOptionsCon;
-
- const dropdownDisplayBtn = {
- el: null,
- defaultText: '',
- activeText: '',
- };
-
- const submitBtn = {
- el: null,
- icon: null,
- defaultText: '',
- activeText: '',
- };
- let dateInput;
- let timeInput;
-
- $(window).on('action:composer.activate', handleOnActivate);
-
- scheduler.init = function ($postContainer, posts) {
- state.timestamp = 0;
- state.posts = posts;
-
- translator.translateKeys(['[[topic:composer.post-later]]', '[[modules:composer.change-schedule-date]]']).then((translated) => {
- dropdownDisplayBtn.defaultText = translated[0];
- dropdownDisplayBtn.activeText = translated[1];
- });
-
- displayBtnCons = $postContainer[0].querySelectorAll('.display-scheduler');
- displayBtns = $postContainer[0].querySelectorAll('.display-scheduler i');
- dropdownDisplayBtn.el = $postContainer[0].querySelector('.dropdown-item.display-scheduler');
- cancelBtn = $postContainer[0].querySelector('.dropdown-item.cancel-scheduling');
- submitContainer = $postContainer.find('[component="composer/submit/container"]');
- submitOptionsCon = $postContainer.find('[component="composer/submit/options/container"]');
-
- submitBtn.el = $postContainer[0].querySelector('.composer-submit:not(.btn-sm)');
- submitBtn.icon = submitBtn.el.querySelector('i');
- submitBtn.defaultText = submitBtn.el.lastChild.textContent;
- submitBtn.activeText = submitBtn.el.getAttribute('data-text-variant');
-
- cancelBtn.addEventListener('click', cancelScheduling);
- displayBtnCons.forEach(el => el.addEventListener('click', openModal));
- };
-
- scheduler.getTimestamp = function () {
- if (!scheduler.isActive() || isNaN(state.timestamp)) {
- return 0;
- }
- return state.timestamp;
- };
-
- scheduler.isActive = function () {
- return state.timestamp > 0;
- };
-
- scheduler.isOpen = function () {
- return state.open;
- };
-
- scheduler.reset = function () {
- state.timestamp = 0;
- };
-
- scheduler.onChangeCategory = function (categoryData) {
- toggleDisplayButtons(categoryData.privileges['topics:schedule']);
- toggleItems(false);
- const optionsVisible = categoryData.privileges['topics:schedule'] || submitOptionsCon.attr('data-submit-options') > 0;
- submitContainer.find('.composer-submit').toggleClass('rounded-1', !optionsVisible);
- submitOptionsCon.toggleClass('hidden', !optionsVisible);
- scheduler.reset();
- };
-
- async function openModal() {
- const html = await Benchpress.render('modals/topic-scheduler');
- bootbox.dialog({
- message: html,
- title: '[[modules:composer.schedule-for]]',
- className: 'topic-scheduler',
- onShown: initModal,
- onHidden: handleOnHidden,
- onEscape: true,
- buttons: {
- cancel: {
- label: state.timestamp ? '[[modules:composer.cancel-scheduling]]' : '[[modules:bootbox.cancel]]',
- className: (state.timestamp ? 'btn-warning' : 'btn-outline-secondary') + (state.edit ? ' hidden' : ''),
- callback: cancelScheduling,
- },
- set: {
- label: '[[modules:composer.set-schedule-date]]',
- className: 'btn-primary',
- callback: setTimestamp,
- },
- },
- });
- }
-
- function initModal(ev) {
- state.open = true;
- const schedulerContainer = ev.target.querySelector('.datetime-picker');
- dateInput = schedulerContainer.querySelector('input[type="date"]');
- timeInput = schedulerContainer.querySelector('input[type="time"]');
- initDateTimeInputs();
- }
-
- function handleOnHidden() {
- state.open = false;
- }
-
- function handleOnActivate(ev, { post_uuid }) {
- state.edit = false;
-
- const postData = state.posts[post_uuid];
- if (postData && postData.isMain && postData.timestamp > Date.now()) {
- state.timestamp = postData.timestamp;
- state.edit = true;
- toggleItems();
- }
- }
-
- function initDateTimeInputs() {
- const d = new Date();
- // Update min. selectable date and time
- const nowLocalISO = new Date(d.getTime() - (d.getTimezoneOffset() * 60000)).toJSON();
- dateInput.setAttribute('min', nowLocalISO.slice(0, 10));
- timeInput.setAttribute('min', nowLocalISO.slice(11, -8));
-
- if (scheduler.isActive()) {
- const scheduleDate = new Date(state.timestamp - (d.getTimezoneOffset() * 60000)).toJSON();
- dateInput.value = scheduleDate.slice(0, 10);
- timeInput.value = scheduleDate.slice(11, -8);
- }
- }
-
- function setTimestamp() {
- const bothFilled = dateInput.value && timeInput.value;
- const timestamp = new Date(`${dateInput.value} ${timeInput.value}`).getTime();
- if (!bothFilled || isNaN(timestamp) || timestamp < Date.now()) {
- state.timestamp = 0;
- const message = timestamp < Date.now() ? '[[error:scheduling-to-past]]' : '[[error:invalid-schedule-date]]';
- alerts.alert({
- type: 'danger',
- timeout: 3000,
- title: '',
- alert_id: 'post_error',
- message,
- });
- return false;
- }
- if (!state.timestamp) {
- toggleItems(true);
- }
- state.timestamp = timestamp;
- }
-
- function cancelScheduling() {
- if (!state.timestamp) {
- return;
- }
- toggleItems(false);
- state.timestamp = 0;
- }
-
- function toggleItems(active = true) {
- displayBtns.forEach(btn => btn.classList.toggle('active', active));
- if (submitBtn.icon) {
- submitBtn.icon.classList.toggle('fa-check', !active);
- submitBtn.icon.classList.toggle('fa-clock-o', active);
- }
- if (dropdownDisplayBtn.el) {
- dropdownDisplayBtn.el.textContent = active ? dropdownDisplayBtn.activeText : dropdownDisplayBtn.defaultText;
- cancelBtn.classList.toggle('hidden', !active);
- }
- // Toggle submit button text
- submitBtn.el.lastChild.textContent = active ? submitBtn.activeText : submitBtn.defaultText;
- }
-
- function toggleDisplayButtons(show) {
- displayBtnCons.forEach(btn => btn.classList.toggle('hidden', !show));
- }
-
- return scheduler;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/tags.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/tags.js
deleted file mode 100644
index 338e4546d2..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/tags.js
+++ /dev/null
@@ -1,227 +0,0 @@
-
-'use strict';
-
-define('composer/tags', ['alerts'], function (alerts) {
- var tags = {};
-
- var minTags;
- var maxTags;
-
- tags.init = function (postContainer, postData) {
- var tagEl = postContainer.find('.tags');
- if (!tagEl.length) {
- return;
- }
-
- minTags = ajaxify.data.hasOwnProperty('minTags') ? ajaxify.data.minTags : config.minimumTagsPerTopic;
- maxTags = ajaxify.data.hasOwnProperty('maxTags') ? ajaxify.data.maxTags : config.maximumTagsPerTopic;
-
- tagEl.tagsinput({
- tagClass: 'badge bg-info rounded-1',
- confirmKeys: [13, 44],
- trimValue: true,
- });
- var input = postContainer.find('.bootstrap-tagsinput input');
-
- toggleTagInput(postContainer, postData, ajaxify.data);
-
- app.loadJQueryUI(function () {
- input.autocomplete({
- delay: 100,
- position: { my: 'left bottom', at: 'left top', collision: 'flip' },
- appendTo: postContainer.find('.bootstrap-tagsinput'),
- open: function () {
- $(this).autocomplete('widget').css('z-index', 20000);
- },
- source: function (request, response) {
- socket.emit('topics.autocompleteTags', {
- query: request.term,
- cid: postData.cid,
- }, function (err, tags) {
- if (err) {
- return alerts.error(err);
- }
- if (tags) {
- response(tags);
- }
- $('.ui-autocomplete a').attr('data-ajaxify', 'false');
- });
- },
- select: function (/* event, ui */) {
- // when autocomplete is selected from the dropdown simulate a enter key down to turn it into a tag
- triggerEnter(input);
- },
- });
-
- addTags(postData.tags, tagEl);
-
- tagEl.on('beforeItemAdd', function (event) {
- var reachedMaxTags = maxTags && maxTags <= tags.getTags(postContainer.attr('data-uuid')).length;
- var cleanTag = utils.cleanUpTag(event.item, config.maximumTagLength);
- var different = cleanTag !== event.item;
- event.cancel = different ||
- event.item.length < config.minimumTagLength ||
- event.item.length > config.maximumTagLength ||
- reachedMaxTags;
-
- if (event.item.length < config.minimumTagLength) {
- return alerts.error('[[error:tag-too-short, ' + config.minimumTagLength + ']]');
- } else if (event.item.length > config.maximumTagLength) {
- return alerts.error('[[error:tag-too-long, ' + config.maximumTagLength + ']]');
- } else if (reachedMaxTags) {
- return alerts.error('[[error:too-many-tags, ' + maxTags + ']]');
- }
- if (different) {
- tagEl.tagsinput('add', cleanTag);
- }
- });
-
- var skipAddCheck = false;
- var skipRemoveCheck = false;
- tagEl.on('itemRemoved', function (event) {
- if (skipRemoveCheck) {
- skipRemoveCheck = false;
- return;
- }
-
- if (!event.item) {
- return;
- }
- socket.emit('topics.canRemoveTag', { tag: event.item }, function (err, allowed) {
- if (err) {
- return alerts.error(err);
- }
- if (!allowed) {
- alerts.error('[[error:cant-remove-system-tag]]');
- skipAddCheck = true;
- tagEl.tagsinput('add', event.item);
- }
- });
- });
-
- tagEl.on('itemAdded', function (event) {
- if (skipAddCheck) {
- skipAddCheck = false;
- return;
- }
- var cid = postData.hasOwnProperty('cid') ? postData.cid : ajaxify.data.cid;
- socket.emit('topics.isTagAllowed', { tag: event.item, cid: cid || 0 }, function (err, allowed) {
- if (err) {
- return alerts.error(err);
- }
- if (!allowed) {
- skipRemoveCheck = true;
- return tagEl.tagsinput('remove', event.item);
- }
- $(window).trigger('action:tag.added', { cid: cid, tagEl: tagEl, tag: event.item });
- if (input.length) {
- input.autocomplete('close');
- }
- });
- });
- });
-
- input.attr('tabIndex', tagEl.attr('tabIndex'));
- input.on('blur', function () {
- triggerEnter(input);
- });
-
- $('[component="composer/tag/dropdown"]').on('click', 'li', function () {
- var tag = $(this).attr('data-tag');
- if (tag) {
- addTags([tag], tagEl);
- }
- return false;
- });
- };
-
- tags.isEnoughTags = function (post_uuid) {
- return tags.getTags(post_uuid).length >= minTags;
- };
-
- tags.minTagCount = function () {
- return minTags;
- };
-
- tags.onChangeCategory = function (postContainer, postData, cid, categoryData) {
- var tagDropdown = postContainer.find('[component="composer/tag/dropdown"]');
- if (!tagDropdown.length) {
- return;
- }
-
- toggleTagInput(postContainer, postData, categoryData);
- tagDropdown.toggleClass('hidden', !categoryData.tagWhitelist || !categoryData.tagWhitelist.length);
- if (categoryData.tagWhitelist) {
- app.parseAndTranslate('composer', 'tagWhitelist', { tagWhitelist: categoryData.tagWhitelist }, function (html) {
- tagDropdown.find('.dropdown-menu').html(html);
- });
- }
- };
-
- function toggleTagInput(postContainer, postData, data) {
- var tagEl = postContainer.find('.tags');
- var input = postContainer.find('.bootstrap-tagsinput input');
- if (!input.length) {
- return;
- }
-
- if (data.hasOwnProperty('minTags')) {
- minTags = data.minTags;
- }
- if (data.hasOwnProperty('maxTags')) {
- maxTags = data.maxTags;
- }
-
- if (data.tagWhitelist && data.tagWhitelist.length) {
- input.attr('readonly', '');
- input.attr('placeholder', '');
-
- tagEl.tagsinput('items').slice().forEach(function (tag) {
- if (data.tagWhitelist.indexOf(tag) === -1) {
- tagEl.tagsinput('remove', tag);
- }
- });
- } else {
- input.removeAttr('readonly');
- input.attr('placeholder', postContainer.find('input.tags').attr('placeholder'));
- }
- postContainer.find('.tags-container').toggleClass('haswhitelist', !!(data.tagWhitelist && data.tagWhitelist.length));
- postContainer.find('.tags-container').toggleClass('hidden', (
- data.privileges && data.privileges.hasOwnProperty('topics:tag') && !data.privileges['topics:tag']) ||
- (maxTags === 0 && !postData && !postData.tags && !postData.tags.length));
-
- if (data.privileges && data.privileges.hasOwnProperty('topics:tag') && !data.privileges['topics:tag']) {
- tagEl.tagsinput('removeAll');
- }
-
- $(window).trigger('action:tag.toggleInput', {
- postContainer: postContainer,
- tagWhitelist: data.tagWhitelist,
- tagsInput: input,
- });
- }
-
- function triggerEnter(input) {
- // http://stackoverflow.com/a/3276819/583363
- var e = jQuery.Event('keypress');
- e.which = 13;
- e.keyCode = 13;
- setTimeout(function () {
- input.trigger(e);
- }, 100);
- }
-
- function addTags(tags, tagEl) {
- if (tags && tags.length) {
- for (var i = 0; i < tags.length; ++i) {
- tagEl.tagsinput('add', tags[i]);
- }
- }
- }
-
- tags.getTags = function (post_uuid) {
- return $('.composer[data-uuid="' + post_uuid + '"] .tags').tagsinput('items');
- };
-
- return tags;
-});
diff --git a/node_modules/nodebb-plugin-composer-default/static/lib/composer/uploads.js b/node_modules/nodebb-plugin-composer-default/static/lib/composer/uploads.js
deleted file mode 100644
index 6da01db605..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/lib/composer/uploads.js
+++ /dev/null
@@ -1,271 +0,0 @@
-'use strict';
-
-define('composer/uploads', [
- 'composer/preview',
- 'composer/categoryList',
- 'translator',
- 'alerts',
- 'uploadHelpers',
- 'jquery-form',
-], function (preview, categoryList, translator, alerts, uploadHelpers) {
- var uploads = {
- inProgress: {},
- };
-
- var uploadingText = '';
-
- uploads.initialize = function (post_uuid) {
- initializeDragAndDrop(post_uuid);
- initializePaste(post_uuid);
-
- addChangeHandlers(post_uuid);
- addTopicThumbHandlers(post_uuid);
- translator.translate('[[modules:composer.uploading, ' + 0 + '%]]', function (translated) {
- uploadingText = translated;
- });
- };
-
- function addChangeHandlers(post_uuid) {
- var postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
-
- postContainer.find('#files').on('change', function (e) {
- var files = (e.target || {}).files ||
- ($(this).val() ? [{ name: $(this).val(), type: utils.fileMimeType($(this).val()) }] : null);
- if (files) {
- uploadContentFiles({ files: files, post_uuid: post_uuid, route: '/api/post/upload' });
- }
- });
- }
-
- function addTopicThumbHandlers(post_uuid) {
- var postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
-
- postContainer.on('click', '.topic-thumb-clear-btn', function (e) {
- postContainer.find('input#topic-thumb-url').val('').trigger('change');
- resetInputFile(postContainer.find('input#topic-thumb-file'));
- $(this).addClass('hide');
- e.preventDefault();
- });
-
- postContainer.on('paste change keypress', 'input#topic-thumb-url', function () {
- var urlEl = $(this);
- setTimeout(function () {
- var url = urlEl.val();
- if (url) {
- postContainer.find('.topic-thumb-clear-btn').removeClass('hide');
- } else {
- resetInputFile(postContainer.find('input#topic-thumb-file'));
- postContainer.find('.topic-thumb-clear-btn').addClass('hide');
- }
- postContainer.find('img.topic-thumb-preview').attr('src', url);
- }, 100);
- });
- }
-
- function resetInputFile($el) {
- $el.wrap('').closest('form').get(0).reset();
- $el.unwrap();
- }
-
- function initializeDragAndDrop(post_uuid) {
- var postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
- uploadHelpers.handleDragDrop({
- container: postContainer,
- callback: function (upload) {
- uploadContentFiles({
- files: upload.files,
- post_uuid: post_uuid,
- route: '/api/post/upload',
- formData: upload.formData,
- });
- },
- });
- }
-
- function initializePaste(post_uuid) {
- var postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
- uploadHelpers.handlePaste({
- container: postContainer,
- callback: function (upload) {
- uploadContentFiles({
- files: upload.files,
- fileNames: upload.fileNames,
- post_uuid: post_uuid,
- route: '/api/post/upload',
- formData: upload.formData,
- });
- },
- });
- }
-
- function escapeRegExp(text) {
- return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
- }
-
- function insertText(str, index, insert) {
- return str.slice(0, index) + insert + str.slice(index);
- }
-
- function uploadContentFiles(params) {
- var files = [...params.files];
- var post_uuid = params.post_uuid;
- var postContainer = $('.composer[data-uuid="' + post_uuid + '"]');
- var textarea = postContainer.find('textarea');
- var text = textarea.val();
- var uploadForm = postContainer.find('#fileForm');
- var doneUploading = false;
- uploadForm.attr('action', config.relative_path + params.route);
-
- var cid = categoryList.getSelectedCid();
- if (!cid && ajaxify.data.cid) {
- cid = ajaxify.data.cid;
- }
- var i = 0;
- var isImage = false;
- for (i = 0; i < files.length; ++i) {
- isImage = files[i].type.match(/image./);
- if ((isImage && !app.user.privileges['upload:post:image']) || (!isImage && !app.user.privileges['upload:post:file'])) {
- return alerts.error('[[error:no-privileges]]');
- }
- }
-
- var filenameMapping = [];
- let filesText = '';
- for (i = 0; i < files.length; ++i) {
- // The filename map has datetime and iterator prepended so that they can be properly tracked even if the
- // filenames are identical.
- filenameMapping.push(i + '_' + Date.now() + '_' + (params.fileNames ? params.fileNames[i] : files[i].name));
- isImage = files[i].type.match(/image./);
-
- if (!app.user.isAdmin && files[i].size > parseInt(config.maximumFileSize, 10) * 1024) {
- uploadForm[0].reset();
- return alerts.error('[[error:file-too-big, ' + config.maximumFileSize + ']]');
- }
- filesText += (isImage ? '!' : '') + '[' + filenameMapping[i] + '](' + uploadingText + ') ';
- }
-
- const cursorPosition = textarea.getCursorPosition();
- const textLen = text.length;
- text = insertText(text, cursorPosition, filesText);
-
- if (uploadForm.length) {
- postContainer.find('[data-action="post"]').prop('disabled', true);
- }
- textarea.val(text);
-
- $(window).trigger('action:composer.uploadStart', {
- post_uuid: post_uuid,
- files: filenameMapping.map(function (filename, i) {
- return {
- filename: filename.replace(/^\d+_\d{13}_/, ''),
- isImage: /image./.test(files[i].type),
- };
- }),
- text: uploadingText,
- });
-
- uploadForm.off('submit').submit(function () {
- function updateTextArea(filename, text, trim) {
- var newFilename;
- if (trim) {
- newFilename = filename.replace(/^\d+_\d{13}_/, '');
- }
- var current = textarea.val();
- var re = new RegExp(escapeRegExp(filename) + ']\\([^)]+\\)', 'g');
- textarea.val(current.replace(re, (newFilename || filename) + '](' + text + ')'));
-
- $(window).trigger('action:composer.uploadUpdate', {
- post_uuid: post_uuid,
- filename: filename,
- text: text,
- });
- }
-
- uploads.inProgress[post_uuid] = uploads.inProgress[post_uuid] || [];
- uploads.inProgress[post_uuid].push(1);
-
- if (params.formData) {
- params.formData.append('cid', cid);
- }
-
- $(this).ajaxSubmit({
- headers: {
- 'x-csrf-token': config.csrf_token,
- },
- resetForm: true,
- clearForm: true,
- formData: params.formData,
- data: { cid: cid },
-
- error: function (xhr) {
- doneUploading = true;
- postContainer.find('[data-action="post"]').prop('disabled', false);
- const errorMsg = onUploadError(xhr, post_uuid);
- for (var i = 0; i < files.length; ++i) {
- updateTextArea(filenameMapping[i], errorMsg, true);
- }
- preview.render(postContainer);
- },
-
- uploadProgress: function (event, position, total, percent) {
- translator.translate('[[modules:composer.uploading, ' + percent + '%]]', function (translated) {
- if (doneUploading) {
- return;
- }
- for (var i = 0; i < files.length; ++i) {
- updateTextArea(filenameMapping[i], translated);
- }
- });
- },
-
- success: function (res) {
- const uploads = res.response.images;
- doneUploading = true;
- if (uploads && uploads.length) {
- for (var i = 0; i < uploads.length; ++i) {
- uploads[i].filename = filenameMapping[i].replace(/^\d+_\d{13}_/, '');
- uploads[i].isImage = /image./.test(files[i].type);
- updateTextArea(filenameMapping[i], uploads[i].url, true);
- }
- }
- preview.render(postContainer);
- textarea.prop('selectionEnd', cursorPosition + textarea.val().length - textLen);
- textarea.focus();
- postContainer.find('[data-action="post"]').prop('disabled', false);
- $(window).trigger('action:composer.upload', {
- post_uuid: post_uuid,
- files: uploads,
- });
- },
-
- complete: function () {
- uploadForm[0].reset();
- uploads.inProgress[post_uuid].pop();
- },
- });
-
- return false;
- });
-
- uploadForm.submit();
- }
-
- function onUploadError(xhr, post_uuid) {
- var msg = (xhr.responseJSON &&
- (xhr.responseJSON.error || (xhr.responseJSON.status && xhr.responseJSON.status.message))) ||
- '[[error:parse-error]]';
-
- if (xhr && xhr.status === 413) {
- msg = xhr.statusText || 'Request Entity Too Large';
- }
- alerts.error(msg);
- $(window).trigger('action:composer.uploadError', {
- post_uuid: post_uuid,
- message: msg,
- });
- return msg;
- }
-
- return uploads;
-});
-
diff --git a/node_modules/nodebb-plugin-composer-default/static/scss/composer.scss b/node_modules/nodebb-plugin-composer-default/static/scss/composer.scss
deleted file mode 100644
index e9157dc92d..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/scss/composer.scss
+++ /dev/null
@@ -1,385 +0,0 @@
-.composer {
- background-color: var(--bs-body-bg);
- color: var(--bs-body-color);
- z-index: $zindex-dropdown;
- visibility: hidden;
- padding: 0;
- position: fixed;
- bottom: 0;
- top: 0;
- right: 0;
- left: 0;
-
- .mobile-navbar {
- position: static;
- min-height: 40px;
- margin: 0;
-
- .btn-group {
- flex-shrink: 0;
- }
-
- button {
- font-size: 20px;
- }
-
- display: flex;
-
- .category-name-container, .title {
- text-align: center;
- text-overflow: ellipsis;
- overflow: hidden;
- white-space: nowrap;
- flex-grow: 2;
- font-size: 16px;
- line-height: inherit;
- padding: 9px 5px;
- margin: 0;
- }
- }
-
- .title-container {
- > div[data-component="composer/handle"] {
- flex: 0.33;
- }
-
- .category-list-container {
-
- [component="category-selector"] {
- .category-dropdown-menu {
- max-height: 300px;
- }
- }
- }
-
- .category-list {
- padding: 0 2rem;
- }
-
- .action-bar {
- .dropdown-menu:empty {
- & ~ .dropdown-toggle {
- display: none;
- }
- }
- }
- }
-
- .formatting-bar {
- .spacer {
- &:before {
- content: ' | ';
- color: $gray-200;
- }
- }
- }
-
- .tags-container {
- [component="composer/tag/dropdown"] {
- .dropdown-menu {
- max-height: 400px;
- overflow-y: auto;
- }
-
- > button {
- border: 0;
- }
- }
- // if picking tags from taglist dropdown hide the input
- &.haswhitelist .bootstrap-tagsinput {
- input {
- display: none;
- }
- }
- .bootstrap-tagsinput {
- background: transparent;
- flex-grow: 1;
- border: 0;
- padding: 0;
- box-shadow: none;
- max-height: 80px;
- overflow: auto;
-
- input {
- &::placeholder{
- color: $input-placeholder-color;
- }
- color: $body-color;
- font-size: 16px;
- width: 50%;
- @include media-breakpoint-down(md) {
- width: 100%;
- }
-
-
- height: 28px;
- padding: 4px 6px;
- }
-
- .ui-autocomplete {
- max-height: 350px;
- overflow-x: hidden;
- overflow-y: auto;
- }
- }
- }
-
- .resizer {
- background: linear-gradient(transparent, var(--bs-body-bg));
- margin-left: calc($spacer * -0.5);
- padding-left: $spacer;
-
- .trigger {
- cursor: ns-resize;
-
- .handle {
- border-top-left-radius: 50%;
- border-top-right-radius: 50%;
- border-bottom: 0 !important;
- }
- }
- }
-
- .minimize {
- display: none;
- position: absolute;
- top: 0px;
- right: 10px;
- height: 0;
-
- @include pointer;
-
- .trigger {
- position: relative;
- display: block;
- top: -20px;
- right: 0px;
- margin: 0 auto;
- margin-left: 20px;
- line-height: 26px;
- @include transition(filter .15s linear);
-
- &:hover {
- filter: invert(100%);
- }
-
- i {
- width: 32px;
- height: 32px;
- background: #333;
- border: 1px solid #333;
- border-radius: 50%;
-
- position: relative;
-
- color: #FFF;
- font-size: 16px;
-
- &:before {
- position: relative;
- top: 25%;
- }
- }
- }
- }
-
- &.reply {
- .title-container {
- display: none;
- }
- }
-
- &.resizable.maximized {
- .resizer {
- top: 0 !important;
- background: transparent;
-
- .trigger {
- height: $spacer * 0.5;
-
- .handle {
- border-top-left-radius: 0%;
- border-top-right-radius: 0%;
- border-bottom-left-radius: 50%;
- border-bottom-right-radius: 50%;
- border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
- }
-
- i {
- &:before {
- content: fa-content($fa-var-chevron-down);
- }
- }
- }
- }
- }
-
- .draft-icon {
- font-family: 'FontAwesome';
- color: $success;
- opacity: 0;
-
- &::before {
- content: fa-content($fa-var-save);
- }
-
- &.active {
- animation: draft-saved 3s ease;
- }
- }
-
- textarea {
- resize: none;
- }
-
- .preview {
- padding: $input-padding-y $input-padding-x;
- }
-}
-
-.datetime-picker {
- display: flex;
- justify-content: center;
- flex-direction: row;
- min-width: 310px;
- max-width: 310px;
- margin: 0 auto;
-
- input {
- flex: 3;
- line-height: inherit;
- }
-
- input + input {
- border-left: none;
- flex: 2;
- }
-}
-
-.modal.topic-scheduler {
- z-index: 1070;
- & + .modal-backdrop {
- z-index: 1060;
- }
-}
-
-@keyframes draft-saved {
- 0%, 100% {
- opacity: 0;
- }
-
- 15% {
- opacity: 1;
- }
-
- 30% {
- opacity: 0.5;
- }
-
- 45% {
- opacity: 1;
- }
-
- 85% {
- opacity: 1;
- }
-}
-
-@keyframes pulse {
- from {
- transform: scale(1);
- color: inherit;
- }
- 50% {
- transform: scale(.9);
- }
- to {
- transform: scale(1);
- color: #00adff;
- }
-}
-
-@include media-breakpoint-down(lg) {
- html.composing .composer { z-index: $zindex-modal; }
-}
-
-@include media-breakpoint-down(sm) {
- html.composing {
- .composer {
- height: 100%;
-
- .draft-icon {
- position: absolute;
- bottom: 1em;
- right: 0em;
-
- &::after {
- top: 7px;
- }
- }
-
- .preview-container {
- max-width: initial;
- }
- }
-
- body {
- padding-bottom: 0 !important;
- }
- }
-}
-
-@include media-breakpoint-up(lg) {
- html.composing {
- .composer {
- left: 15%;
- width: 70%;
- min-height: 400px;
-
- .resizer {
- display: block;
- }
-
- .minimize {
- display: block;
- }
- }
- }
-}
-
-@include media-breakpoint-up(md) {
- // without this formatting elements that are dropdowns are not visible on desktop.
- // on mobile dropdowns use bottom-sheet and overflow is auto
- .formatting-group {
- overflow: visible!important;
- }
-}
-
-@import './zen-mode';
-@import './page-compose';
-@import './textcomplete';
-
-
-.skin-noskin, .skin-cosmo, .skin-flatly,
-.skin-journal, .skin-litera, .skin-minty, .skin-pulse,
-.skin-sandstone, .skin-sketchy, .skin-spacelab, .skin-united {
- .composer {
- color: var(--bs-secondary) !important;
- background-color: var(--bs-light) !important;
- }
-}
-
-.skin-cerulean, .skin-lumen, .skin-lux, .skin-morph,
-.skin-simplex, .skin-yeti, .skin-zephyr {
- .composer {
- color: var(--bs-body) !important;
- background-color: var(--bs-light) !important;
- }
-}
-
-@include color-mode(dark) {
- .skin-noskin .composer {
- color: var(--bs-secondary)!important;
- background-color: var(--bs-body-bg)!important;
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/static/scss/page-compose.scss b/node_modules/nodebb-plugin-composer-default/static/scss/page-compose.scss
deleted file mode 100644
index 2b2756f426..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/scss/page-compose.scss
+++ /dev/null
@@ -1,35 +0,0 @@
-.page-compose .composer {
- z-index: initial;
- position: static;
- [data-action="hide"] {
- display: none;
- }
-
- @include media-breakpoint-down(md) {
- .title-container {
- flex-wrap: wrap;
- }
- .category-list-container {
- [component="category-selector-selected"] > span {
- display: inline!important;
- }
- width: 100%;
- }
- }
-}
-
-.zen-mode .page-compose .composer {
- position: absolute;
-}
-.page-compose {
- &.skin-noskin, &.skin-cosmo, &.skin-flatly,
- &.skin-journal, &.skin-litera, &.skin-minty, &.skin-pulse,
- &.skin-sandstone, &.skin-sketchy, &.skin-spacelab, &.skin-united,
- &.skin-cerulean, &.skin-lumen, &.skin-lux, &.skin-morph,
- &.skin-simplex, &.skin-yeti, &.skin-zephyr {
- .composer {
- color: var(--bs-body-color) !important;
- background-color: var(--bs-body-bg) !important;
- }
- }
-}
diff --git a/node_modules/nodebb-plugin-composer-default/static/scss/textcomplete.scss b/node_modules/nodebb-plugin-composer-default/static/scss/textcomplete.scss
deleted file mode 100644
index 7a4cad943a..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/scss/textcomplete.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-.textcomplete-dropdown {
- border: 1px solid $border-color;
- background-color: $body-bg;
- color: $body-color;
- list-style: none;
- padding: 0;
- margin: 0;
-
- li {
- margin: 0;
- }
-
- .textcomplete-footer, .textcomplete-item {
- border-top: 1px solid $border-color;
- }
-
- .textcomplete-item {
- padding: 2px 5px;
- cursor: pointer;
-
- &:hover, &.active {
- color: $dropdown-link-hover-color;
- background-color: $dropdown-link-hover-bg;
- }
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/static/scss/zen-mode.scss b/node_modules/nodebb-plugin-composer-default/static/scss/zen-mode.scss
deleted file mode 100644
index b29340e8d3..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/scss/zen-mode.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-html.zen-mode {
- overflow: hidden;
-}
-
-.zen-mode .composer {
- &.resizable {
- padding-top: 0;
- }
-
- .composer-container {
- padding-top: 5px;
- }
-
- .tag-row {
- display: none;
- }
-
- .title-container .category-list-container {
- margin-top: 3px;
- }
-
- .write, .preview {
- border: none;
- outline: none;
- }
-
- .resizer {
- display: none;
- }
-
- &.reply {
- .title-container {
- display: none;
- }
- }
-
- @include media-breakpoint-up(md) {
- & {
- padding-left: 15px;
- padding-right: 15px;
- }
- .write-preview-container {
- margin-bottom: 0;
-
- > div {
- padding: 0;
- margin: 0;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/static/templates/admin/plugins/composer-default.tpl b/node_modules/nodebb-plugin-composer-default/static/templates/admin/plugins/composer-default.tpl
deleted file mode 100644
index a7fa31ce59..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/templates/admin/plugins/composer-default.tpl
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
diff --git a/node_modules/nodebb-plugin-composer-default/static/templates/compose.tpl b/node_modules/nodebb-plugin-composer-default/static/templates/compose.tpl
deleted file mode 100644
index 9fb4300baf..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/templates/compose.tpl
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{{ if isTopicOrMain }}}
-
- {{{ end }}}
-
-
diff --git a/node_modules/nodebb-plugin-composer-default/static/templates/composer.tpl b/node_modules/nodebb-plugin-composer-default/static/templates/composer.tpl
deleted file mode 100644
index f4ee338c69..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/templates/composer.tpl
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{{ if isTopicOrMain }}}
-
- {{{ end }}}
-
-
[[topic:composer.drag-and-drop-images]]
-
-
-
-
-
diff --git a/node_modules/nodebb-plugin-composer-default/static/templates/modals/topic-scheduler.tpl b/node_modules/nodebb-plugin-composer-default/static/templates/modals/topic-scheduler.tpl
deleted file mode 100644
index 29736747c6..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/templates/modals/topic-scheduler.tpl
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-formatting.tpl b/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-formatting.tpl
deleted file mode 100644
index 941f06f2e4..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-formatting.tpl
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
-
- {{{ if composer:showHelpTab }}}
-
- {{{ end }}}
-
-
-
diff --git a/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-tags.tpl b/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-tags.tpl
deleted file mode 100644
index e247403419..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-tags.tpl
+++ /dev/null
@@ -1,17 +0,0 @@
-
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-title-container.tpl b/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-title-container.tpl
deleted file mode 100644
index 38072e5f36..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-title-container.tpl
+++ /dev/null
@@ -1,54 +0,0 @@
-
- {{{ if isTopic }}}
-
-
-
- {{{ end }}}
-
- {{{ if showHandleInput }}}
-
-
-
- {{{ end }}}
-
-
-
- {{{ if isTopicOrMain }}}
-
- {{{ else }}}
- {{{ if isEditing }}}[[topic:composer.editing-in, "{topicTitle}"]]{{{ else }}}[[topic:composer.replying-to, "{topicTitle}"]]{{{ end }}}
- {{{ end }}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-write-preview.tpl b/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-write-preview.tpl
deleted file mode 100644
index 37cefbd220..0000000000
--- a/node_modules/nodebb-plugin-composer-default/static/templates/partials/composer-write-preview.tpl
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
[[modules:composer.post-queue-alert]]
-
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-plugin-composer-default/websockets.js b/node_modules/nodebb-plugin-composer-default/websockets.js
deleted file mode 100644
index 882dbb2b0d..0000000000
--- a/node_modules/nodebb-plugin-composer-default/websockets.js
+++ /dev/null
@@ -1,94 +0,0 @@
-'use strict';
-
-const meta = require.main.require('./src/meta');
-const privileges = require.main.require('./src/privileges');
-const posts = require.main.require('./src/posts');
-const topics = require.main.require('./src/topics');
-const plugins = require.main.require('./src/plugins');
-
-const Sockets = module.exports;
-
-Sockets.push = async function (socket, pid) {
- const canRead = await privileges.posts.can('topics:read', pid, socket.uid);
- if (!canRead) {
- throw new Error('[[error:no-privileges]]');
- }
-
- const postData = await posts.getPostFields(pid, ['content', 'tid', 'uid', 'handle', 'timestamp']);
- if (!postData && !postData.content) {
- throw new Error('[[error:invalid-pid]]');
- }
-
- const [topic, tags, isMain] = await Promise.all([
- topics.getTopicDataByPid(pid),
- topics.getTopicTags(postData.tid),
- posts.isMain(pid),
- ]);
-
- if (!topic) {
- throw new Error('[[error:no-topic]]');
- }
-
- const result = await plugins.hooks.fire('filter:composer.push', {
- pid: pid,
- uid: postData.uid,
- handle: parseInt(meta.config.allowGuestHandles, 10) ? postData.handle : undefined,
- body: postData.content,
- title: topic.title,
- thumb: topic.thumb,
- tags: tags,
- isMain: isMain,
- timestamp: postData.timestamp,
- });
- return result;
-};
-
-Sockets.editCheck = async function (socket, pid) {
- const isMain = await posts.isMain(pid);
- return { titleEditable: isMain };
-};
-
-Sockets.renderPreview = async function (socket, content) {
- return await plugins.hooks.fire('filter:parse.raw', content);
-};
-
-Sockets.renderHelp = async function () {
- const helpText = meta.config['composer:customHelpText'] || '';
- if (!meta.config['composer:showHelpTab']) {
- throw new Error('help-hidden');
- }
-
- const parsed = await plugins.hooks.fire('filter:parse.raw', helpText);
- if (meta.config['composer:allowPluginHelp'] && plugins.hooks.hasListeners('filter:composer.help')) {
- return await plugins.hooks.fire('filter:composer.help', parsed) || helpText;
- }
- return helpText;
-};
-
-Sockets.getFormattingOptions = async function () {
- return await require('./library').getFormattingOptions();
-};
-
-Sockets.shouldQueue = async function (socket, data) {
- if (!data || !data.postData) {
- throw new Error('[[error:invalid-data]]');
- }
- if (socket.uid <= 0) {
- return false;
- }
-
- let shouldQueue = false;
- const { postData } = data;
- if (postData.action === 'posts.reply') {
- shouldQueue = await posts.shouldQueue(socket.uid, {
- tid: postData.tid,
- content: postData.content || '',
- });
- } else if (postData.action === 'topics.post') {
- shouldQueue = await posts.shouldQueue(socket.uid, {
- cid: postData.cid,
- content: postData.content || '',
- });
- }
- return shouldQueue;
-};
diff --git a/node_modules/nodebb-theme-harmony/.eslintrc b/node_modules/nodebb-theme-harmony/.eslintrc
deleted file mode 100644
index abd292af1b..0000000000
--- a/node_modules/nodebb-theme-harmony/.eslintrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "nodebb"
-}
diff --git a/node_modules/nodebb-theme-harmony/README.md b/node_modules/nodebb-theme-harmony/README.md
deleted file mode 100644
index 3b279f7f5e..0000000000
--- a/node_modules/nodebb-theme-harmony/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-Harmony theme for NodeBB
-====================
-
-The Harmony theme is the default theme for NodeBB for versions spanning v3.0.0 onwards.
-
-## Issues
-
-Issues are tracked in [the main project issue tracker](https://github.com/NodeBB/NodeBB/issues?q=is%3Aopen+is%3Aissue+label%3Athemes).
-
-## Screenshots
-
-### Categories
-
-
-### Recent
-
-
-### Topic
-
diff --git a/node_modules/nodebb-theme-harmony/languages/harmony.json b/node_modules/nodebb-theme-harmony/languages/harmony.json
deleted file mode 100644
index 9e26dfeeb6..0000000000
--- a/node_modules/nodebb-theme-harmony/languages/harmony.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/lib/controllers.js b/node_modules/nodebb-theme-harmony/lib/controllers.js
deleted file mode 100644
index 379ec06509..0000000000
--- a/node_modules/nodebb-theme-harmony/lib/controllers.js
+++ /dev/null
@@ -1,29 +0,0 @@
-'use strict';
-
-const Controllers = module.exports;
-
-const accountHelpers = require.main.require('./src/controllers/accounts/helpers');
-const helpers = require.main.require('./src/controllers/helpers');
-
-Controllers.renderAdminPage = (req, res) => {
- res.render('admin/plugins/harmony', {
- title: '[[themes/harmony:theme-name]]',
- });
-};
-
-Controllers.renderThemeSettings = async (req, res, next) => {
- const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
- if (!userData) {
- return next();
- }
- const lib = require('../library');
- userData.theme = await lib.loadThemeConfig(userData.uid);
-
- userData.title = '[[themes/harmony:settings.title]]';
- userData.breadcrumbs = helpers.buildBreadcrumbs([
- { text: userData.username, url: `/user/${userData.userslug}` },
- { text: '[[themes/harmony:settings.title]]' },
- ]);
-
- res.render('account/theme', userData);
-};
diff --git a/node_modules/nodebb-theme-harmony/library.js b/node_modules/nodebb-theme-harmony/library.js
deleted file mode 100644
index 6ab72cf4ce..0000000000
--- a/node_modules/nodebb-theme-harmony/library.js
+++ /dev/null
@@ -1,190 +0,0 @@
-'use strict';
-
-const nconf = require.main.require('nconf');
-const meta = require.main.require('./src/meta');
-const _ = require.main.require('lodash');
-const user = require.main.require('./src/user');
-
-const controllers = require('./lib/controllers');
-
-const library = module.exports;
-
-const defaults = {
- enableQuickReply: 'on',
- enableBreadcrumbs: 'on',
- centerHeaderElements: 'off',
- mobileTopicTeasers: 'off',
- stickyToolbar: 'on',
- autohideBottombar: 'on',
- openSidebars: 'off',
- chatModals: 'off',
-};
-
-library.init = async function (params) {
- const { router, middleware } = params;
- const routeHelpers = require.main.require('./src/routes/helpers');
-
- routeHelpers.setupAdminPageRoute(router, '/admin/plugins/harmony', [], controllers.renderAdminPage);
-
- routeHelpers.setupPageRoute(router, '/user/:userslug/theme', [
- middleware.exposeUid,
- middleware.ensureLoggedIn,
- middleware.canViewUsers,
- middleware.checkAccountPermissions,
- ], controllers.renderThemeSettings);
-
- if (nconf.get('isPrimary') && process.env.NODE_ENV === 'production') {
- setTimeout(buildSkins, 0);
- }
-};
-
-async function buildSkins() {
- try {
- const plugins = require.main.require('./src/plugins');
- await plugins.prepareForBuild(['client side styles']);
- for (const skin of meta.css.supportedSkins) {
- // eslint-disable-next-line no-await-in-loop
- await meta.css.buildBundle(`client-${skin}`, true);
- }
- require.main.require('./src/meta/minifier').killAll();
- } catch (err) {
- console.error(err.stack);
- }
-}
-
-library.addAdminNavigation = async function (header) {
- header.plugins.push({
- route: '/plugins/harmony',
- icon: 'fa-paint-brush',
- name: '[[themes/harmony:theme-name]]',
- });
- return header;
-};
-
-library.addProfileItem = async (data) => {
- data.links.push({
- id: 'theme',
- route: 'theme',
- icon: 'fa-paint-brush',
- name: '[[themes/harmony:settings.title]]',
- visibility: {
- self: true,
- other: false,
- moderator: false,
- globalMod: false,
- admin: false,
- },
- });
-
- return data;
-};
-
-library.defineWidgetAreas = async function (areas) {
- const locations = ['header', 'sidebar', 'footer'];
- const templates = [
- 'categories.tpl', 'category.tpl', 'topic.tpl', 'users.tpl',
- 'unread.tpl', 'recent.tpl', 'popular.tpl', 'top.tpl', 'tags.tpl', 'tag.tpl',
- 'login.tpl', 'register.tpl',
- ];
- function capitalizeFirst(str) {
- return str.charAt(0).toUpperCase() + str.slice(1);
- }
- templates.forEach((template) => {
- locations.forEach((location) => {
- areas.push({
- name: `${capitalizeFirst(template.split('.')[0])} ${capitalizeFirst(location)}`,
- template: template,
- location: location,
- });
- });
- });
-
- areas = areas.concat([
- {
- name: 'Main post header',
- template: 'topic.tpl',
- location: 'mainpost-header',
- },
- {
- name: 'Main post footer',
- template: 'topic.tpl',
- location: 'mainpost-footer',
- },
- {
- name: 'Sidebar Footer',
- template: 'global',
- location: 'sidebar-footer',
- },
- {
- name: 'Brand Header',
- template: 'global',
- location: 'brand-header',
- },
- {
- name: 'About me (before)',
- template: 'account/profile.tpl',
- location: 'profile-aboutme-before',
- },
- {
- name: 'About me (after)',
- template: 'account/profile.tpl',
- location: 'profile-aboutme-after',
- },
- ]);
-
- return areas;
-};
-
-library.loadThemeConfig = async function (uid) {
- const [themeConfig, userConfig] = await Promise.all([
- meta.settings.get('harmony'),
- user.getSettings(uid),
- ]);
-
- const config = { ...defaults, ...themeConfig, ...(_.pick(userConfig, Object.keys(defaults))) };
- config.enableQuickReply = config.enableQuickReply === 'on';
- config.enableBreadcrumbs = config.enableBreadcrumbs === 'on';
- config.centerHeaderElements = config.centerHeaderElements === 'on';
- config.mobileTopicTeasers = config.mobileTopicTeasers === 'on';
- config.stickyToolbar = config.stickyToolbar === 'on';
- config.autohideBottombar = config.autohideBottombar === 'on';
- config.openSidebars = config.openSidebars === 'on';
- config.chatModals = config.chatModals === 'on';
- return config;
-};
-
-library.getThemeConfig = async function (config) {
- config.theme = await library.loadThemeConfig(config.uid);
- config.openDraftsOnPageLoad = false;
- return config;
-};
-
-library.getAdminSettings = async function (hookData) {
- if (hookData.plugin === 'harmony') {
- hookData.values = {
- ...defaults,
- ...hookData.values,
- };
- }
- return hookData;
-};
-
-library.saveUserSettings = async function (hookData) {
- Object.keys(defaults).forEach((key) => {
- if (hookData.data.hasOwnProperty(key)) {
- hookData.settings[key] = hookData.data[key] || undefined;
- }
- });
- return hookData;
-};
-
-library.filterMiddlewareRenderHeader = async function (hookData) {
- hookData.templateData.bootswatchSkinOptions = await meta.css.getSkinSwitcherOptions(hookData.req.uid);
- return hookData;
-};
-
-library.filterTeasersConfigureStripTags = function (hookData) {
- // teasers have a stretched-link to go to last post, the anchors in them are not clickable
- hookData.tags.push('a');
- return hookData;
-};
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/100.css
deleted file mode 100644
index 6d30e822e4..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/100.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-cyrillic-ext-100-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-100-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-cyrillic-100-normal.woff2) format('woff2'), url(./files/inter-cyrillic-100-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-greek-ext-100-normal.woff2) format('woff2'), url(./files/inter-greek-ext-100-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-greek-100-normal.woff2) format('woff2'), url(./files/inter-greek-100-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-vietnamese-100-normal.woff2) format('woff2'), url(./files/inter-vietnamese-100-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-latin-ext-100-normal.woff2) format('woff2'), url(./files/inter-latin-ext-100-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-latin-100-normal.woff2) format('woff2'), url(./files/inter-latin-100-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/200.css
deleted file mode 100644
index 805d641a66..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/200.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-cyrillic-ext-200-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-200-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-cyrillic-200-normal.woff2) format('woff2'), url(./files/inter-cyrillic-200-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-greek-ext-200-normal.woff2) format('woff2'), url(./files/inter-greek-ext-200-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-greek-200-normal.woff2) format('woff2'), url(./files/inter-greek-200-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-vietnamese-200-normal.woff2) format('woff2'), url(./files/inter-vietnamese-200-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-latin-ext-200-normal.woff2) format('woff2'), url(./files/inter-latin-ext-200-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-latin-200-normal.woff2) format('woff2'), url(./files/inter-latin-200-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/300.css
deleted file mode 100644
index 4acb825bef..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/300.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-cyrillic-ext-300-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-300-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-cyrillic-300-normal.woff2) format('woff2'), url(./files/inter-cyrillic-300-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-greek-ext-300-normal.woff2) format('woff2'), url(./files/inter-greek-ext-300-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-greek-300-normal.woff2) format('woff2'), url(./files/inter-greek-300-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-vietnamese-300-normal.woff2) format('woff2'), url(./files/inter-vietnamese-300-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-latin-ext-300-normal.woff2) format('woff2'), url(./files/inter-latin-ext-300-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-latin-300-normal.woff2) format('woff2'), url(./files/inter-latin-300-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/400.css
deleted file mode 100644
index dbd4039954..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/400.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-cyrillic-ext-400-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-400-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-cyrillic-400-normal.woff2) format('woff2'), url(./files/inter-cyrillic-400-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-greek-ext-400-normal.woff2) format('woff2'), url(./files/inter-greek-ext-400-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-greek-400-normal.woff2) format('woff2'), url(./files/inter-greek-400-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-vietnamese-400-normal.woff2) format('woff2'), url(./files/inter-vietnamese-400-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-latin-ext-400-normal.woff2) format('woff2'), url(./files/inter-latin-ext-400-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-latin-400-normal.woff2) format('woff2'), url(./files/inter-latin-400-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/500.css
deleted file mode 100644
index daa67cbaf5..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/500.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-cyrillic-ext-500-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-500-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-cyrillic-500-normal.woff2) format('woff2'), url(./files/inter-cyrillic-500-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-greek-ext-500-normal.woff2) format('woff2'), url(./files/inter-greek-ext-500-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-greek-500-normal.woff2) format('woff2'), url(./files/inter-greek-500-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-vietnamese-500-normal.woff2) format('woff2'), url(./files/inter-vietnamese-500-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-latin-ext-500-normal.woff2) format('woff2'), url(./files/inter-latin-ext-500-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-latin-500-normal.woff2) format('woff2'), url(./files/inter-latin-500-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/600.css
deleted file mode 100644
index 4e08ba18e3..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/600.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-cyrillic-ext-600-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-600-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-cyrillic-600-normal.woff2) format('woff2'), url(./files/inter-cyrillic-600-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-greek-ext-600-normal.woff2) format('woff2'), url(./files/inter-greek-ext-600-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-greek-600-normal.woff2) format('woff2'), url(./files/inter-greek-600-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-vietnamese-600-normal.woff2) format('woff2'), url(./files/inter-vietnamese-600-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-latin-ext-600-normal.woff2) format('woff2'), url(./files/inter-latin-ext-600-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-latin-600-normal.woff2) format('woff2'), url(./files/inter-latin-600-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/700.css
deleted file mode 100644
index 9ae6ddc90e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/700.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-cyrillic-ext-700-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-700-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-cyrillic-700-normal.woff2) format('woff2'), url(./files/inter-cyrillic-700-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-greek-ext-700-normal.woff2) format('woff2'), url(./files/inter-greek-ext-700-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-greek-700-normal.woff2) format('woff2'), url(./files/inter-greek-700-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-vietnamese-700-normal.woff2) format('woff2'), url(./files/inter-vietnamese-700-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-latin-ext-700-normal.woff2) format('woff2'), url(./files/inter-latin-ext-700-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-latin-700-normal.woff2) format('woff2'), url(./files/inter-latin-700-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/800.css
deleted file mode 100644
index deba608629..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/800.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-cyrillic-ext-800-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-800-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-cyrillic-800-normal.woff2) format('woff2'), url(./files/inter-cyrillic-800-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-greek-ext-800-normal.woff2) format('woff2'), url(./files/inter-greek-ext-800-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-greek-800-normal.woff2) format('woff2'), url(./files/inter-greek-800-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-vietnamese-800-normal.woff2) format('woff2'), url(./files/inter-vietnamese-800-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-latin-ext-800-normal.woff2) format('woff2'), url(./files/inter-latin-ext-800-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-latin-800-normal.woff2) format('woff2'), url(./files/inter-latin-800-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/900.css
deleted file mode 100644
index 408ad8e403..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/900.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-cyrillic-ext-900-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-900-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-cyrillic-900-normal.woff2) format('woff2'), url(./files/inter-cyrillic-900-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-greek-ext-900-normal.woff2) format('woff2'), url(./files/inter-greek-ext-900-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-greek-900-normal.woff2) format('woff2'), url(./files/inter-greek-900-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-vietnamese-900-normal.woff2) format('woff2'), url(./files/inter-vietnamese-900-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-latin-ext-900-normal.woff2) format('woff2'), url(./files/inter-latin-ext-900-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-latin-900-normal.woff2) format('woff2'), url(./files/inter-latin-900-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/CHANGELOG.md b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/CHANGELOG.md
deleted file mode 100644
index e798685bbf..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/CHANGELOG.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# Changelog
-See the [Fontsource CHANGELOG.md](https://github.com/fontsource/fontsource/blob/main/CHANGELOG.md).
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/LICENSE b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/LICENSE
deleted file mode 100644
index 00287df15e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/LICENSE
+++ /dev/null
@@ -1,93 +0,0 @@
-Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/README.md b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/README.md
deleted file mode 100644
index 6fa8fc21ac..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/README.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# Fontsource Inter
-
-[![npm (scoped)](https://img.shields.io/npm/v/@fontsource/inter?color=brightgreen)](https://www.npmjs.com/package/@fontsource/inter) [![Generic badge](https://img.shields.io/badge/fontsource-passing-brightgreen)](https://github.com/fontsource/fontsource) [![Monthly downloads](https://badgen.net/npm/dm/@fontsource/inter)](https://github.com/fontsource/fontsource) [![Total downloads](https://badgen.net/npm/dt/@fontsource/inter)](https://github.com/fontsource/fontsource) [![GitHub stars](https://img.shields.io/github/stars/fontsource/fontsource.svg?style=social&label=Star)](https://github.com/fontsource/fontsource/stargazers)
-
-The CSS and web font files to easily self-host the “Inter” font. Please visit the main [Fontsource website](https://fontsource.org/fonts/inter) to view more details on this package.
-
-## Quick Installation
-
-Fontsource offers multiple methods to import the CSS, including using a bundler like Vite or using SASS. You can find full documentation [here](https://fontsource.org/docs/getting-started/introduction).
-
-```javascript
-npm install @fontsource/inter
-```
-
-Within your app entry file or site component, import it in.
-
-```javascript
-import "@fontsource/inter"; // Defaults to weight 400
-import "@fontsource/inter/400.css"; // Specify weight
-import "@fontsource/inter/400-italic.css"; // Specify weight and style
-```
-
-Supported variables:
-- Weights: `[100,200,300,400,500,600,700,800,900]`
-- Styles: `[normal]`
-- Subsets: `[cyrillic,cyrillic-ext,greek,greek-ext,latin,latin-ext,vietnamese]`
-
-> Note: `italic` may not be supported by all fonts. To learn more about what weights and styles are supported, please visit the [Fontsource website](https://fontsource.org/fonts/inter).
-
-Finally, you can reference the font name in a CSS stylesheet, CSS Module, or CSS-in-JS.
-
-```css
-body {
- font-family: "Inter";
-}
-```
-
-## Licensing
-Always make sure to read the license for each font you use. Most of the fonts in the collection use the SIL Open Font License, v1.1. Some fonts use the Apache 2 license. The Ubuntu fonts use the Ubuntu Font License v1.0.
-
-Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)
-[OFL-1.1](http://scripts.sil.org/OFL)
-
-## Other Notes
-Font version (provided by source): `v12`.
-
-If you have any suggestions or ideas to improve the performance of font loading or expand the existing library, feel free to star and contribute to this repository. You can share your suggestions or ideas by creating an [issue](https://github.com/fontsource/fontsource/issues).
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-100.css
deleted file mode 100644
index 0cc8f979db..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-cyrillic-100-normal.woff2) format('woff2'), url(./files/inter-cyrillic-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-200.css
deleted file mode 100644
index 4ab8f0f2a6..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-cyrillic-200-normal.woff2) format('woff2'), url(./files/inter-cyrillic-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-300.css
deleted file mode 100644
index 0320bb3d52..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-cyrillic-300-normal.woff2) format('woff2'), url(./files/inter-cyrillic-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-400.css
deleted file mode 100644
index 6a207eba3f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-cyrillic-400-normal.woff2) format('woff2'), url(./files/inter-cyrillic-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-500.css
deleted file mode 100644
index 69008c1f6c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-cyrillic-500-normal.woff2) format('woff2'), url(./files/inter-cyrillic-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-600.css
deleted file mode 100644
index b6d0b994ba..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-cyrillic-600-normal.woff2) format('woff2'), url(./files/inter-cyrillic-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-700.css
deleted file mode 100644
index 11ae23b6ee..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-cyrillic-700-normal.woff2) format('woff2'), url(./files/inter-cyrillic-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-800.css
deleted file mode 100644
index 4dd0491303..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-cyrillic-800-normal.woff2) format('woff2'), url(./files/inter-cyrillic-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-900.css
deleted file mode 100644
index dff50ac743..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-cyrillic-900-normal.woff2) format('woff2'), url(./files/inter-cyrillic-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-100.css
deleted file mode 100644
index 7db4f6a816..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-ext-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-cyrillic-ext-100-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-200.css
deleted file mode 100644
index 35200d3035..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-ext-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-cyrillic-ext-200-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-300.css
deleted file mode 100644
index 26ccf659c1..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-ext-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-cyrillic-ext-300-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-400.css
deleted file mode 100644
index 1d4f6dddc4..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-cyrillic-ext-400-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-500.css
deleted file mode 100644
index ce6420819d..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-ext-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-cyrillic-ext-500-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-600.css
deleted file mode 100644
index a42803b683..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-ext-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-cyrillic-ext-600-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-700.css
deleted file mode 100644
index cf21bba522..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-ext-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-cyrillic-ext-700-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-800.css
deleted file mode 100644
index 603acafa74..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-ext-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-cyrillic-ext-800-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-900.css
deleted file mode 100644
index 3866701e07..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-cyrillic-ext-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-cyrillic-ext-900-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext.css
deleted file mode 100644
index f64a5564d8..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic-ext.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* inter-cyrillic-ext-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-cyrillic-ext-100-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-100-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-ext-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-cyrillic-ext-200-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-200-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-ext-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-cyrillic-ext-300-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-300-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-cyrillic-ext-400-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-400-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-ext-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-cyrillic-ext-500-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-500-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-ext-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-cyrillic-ext-600-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-600-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-ext-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-cyrillic-ext-700-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-700-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-ext-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-cyrillic-ext-800-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-800-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-ext-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-cyrillic-ext-900-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic.css
deleted file mode 100644
index 4c41dc313c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/cyrillic.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* inter-cyrillic-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-cyrillic-100-normal.woff2) format('woff2'), url(./files/inter-cyrillic-100-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-cyrillic-200-normal.woff2) format('woff2'), url(./files/inter-cyrillic-200-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-cyrillic-300-normal.woff2) format('woff2'), url(./files/inter-cyrillic-300-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-cyrillic-400-normal.woff2) format('woff2'), url(./files/inter-cyrillic-400-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-cyrillic-500-normal.woff2) format('woff2'), url(./files/inter-cyrillic-500-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-cyrillic-600-normal.woff2) format('woff2'), url(./files/inter-cyrillic-600-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-cyrillic-700-normal.woff2) format('woff2'), url(./files/inter-cyrillic-700-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-cyrillic-800-normal.woff2) format('woff2'), url(./files/inter-cyrillic-800-normal.woff) format('woff');
-}
-
-/* inter-cyrillic-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-cyrillic-900-normal.woff2) format('woff2'), url(./files/inter-cyrillic-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-100-normal.woff
deleted file mode 100644
index 0b328f0ed0..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-100-normal.woff2
deleted file mode 100644
index 519ef27e60..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-200-normal.woff
deleted file mode 100644
index 4bd3fc3b1b..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-200-normal.woff2
deleted file mode 100644
index d94f792fb6..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-300-normal.woff
deleted file mode 100644
index cbfcc5d4ce..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-300-normal.woff2
deleted file mode 100644
index f98e5b2309..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-400-normal.woff
deleted file mode 100644
index 3dcb4ecc74..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-400-normal.woff2
deleted file mode 100644
index c1c57683d4..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-500-normal.woff
deleted file mode 100644
index 7803e79b1d..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-500-normal.woff2
deleted file mode 100644
index d1518426fa..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-600-normal.woff
deleted file mode 100644
index 0dbbbcf911..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-600-normal.woff2
deleted file mode 100644
index b0f0af58b5..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-700-normal.woff
deleted file mode 100644
index c2d977ffba..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-700-normal.woff2
deleted file mode 100644
index 22a09b0bb7..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-800-normal.woff
deleted file mode 100644
index 19f9d557e8..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-800-normal.woff2
deleted file mode 100644
index cad49b6327..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-900-normal.woff
deleted file mode 100644
index 730baf7b66..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-900-normal.woff2
deleted file mode 100644
index d1133f54c2..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-100-normal.woff
deleted file mode 100644
index 26d0051005..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-100-normal.woff2
deleted file mode 100644
index 878765a5f1..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-200-normal.woff
deleted file mode 100644
index 3940678e20..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-200-normal.woff2
deleted file mode 100644
index eb02003206..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-300-normal.woff
deleted file mode 100644
index 186e4977b9..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-300-normal.woff2
deleted file mode 100644
index 294c7ff844..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-400-normal.woff
deleted file mode 100644
index 4017466b88..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-400-normal.woff2
deleted file mode 100644
index da834bb837..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-500-normal.woff
deleted file mode 100644
index 1c047a5b50..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-500-normal.woff2
deleted file mode 100644
index 5a1646bce5..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-600-normal.woff
deleted file mode 100644
index 8d6489d770..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-600-normal.woff2
deleted file mode 100644
index 3b4d7f4bc4..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-700-normal.woff
deleted file mode 100644
index cb714dfaa6..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-700-normal.woff2
deleted file mode 100644
index 7e52d98cd9..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-800-normal.woff
deleted file mode 100644
index d8f99045bd..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-800-normal.woff2
deleted file mode 100644
index f9a1a8cd52..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-900-normal.woff
deleted file mode 100644
index 8919d091f9..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-900-normal.woff2
deleted file mode 100644
index 160f0fff85..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-cyrillic-ext-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-100-normal.woff
deleted file mode 100644
index 9d9fa7af61..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-100-normal.woff2
deleted file mode 100644
index bbff286cb1..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-200-normal.woff
deleted file mode 100644
index c7a5b0a80c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-200-normal.woff2
deleted file mode 100644
index 8041bcbff9..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-300-normal.woff
deleted file mode 100644
index cd730de5d0..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-300-normal.woff2
deleted file mode 100644
index e96490ff2f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-400-normal.woff
deleted file mode 100644
index d293f1fc37..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-400-normal.woff2
deleted file mode 100644
index 143a941b81..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-500-normal.woff
deleted file mode 100644
index a450fa7ac2..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-500-normal.woff2
deleted file mode 100644
index 5c9863829c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-600-normal.woff
deleted file mode 100644
index 39f5ccbfd6..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-600-normal.woff2
deleted file mode 100644
index f4f0a5eb8c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-700-normal.woff
deleted file mode 100644
index 5eac98ec99..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-700-normal.woff2
deleted file mode 100644
index 140147ef94..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-800-normal.woff
deleted file mode 100644
index 69c7296b0c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-800-normal.woff2
deleted file mode 100644
index 544d583571..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-900-normal.woff
deleted file mode 100644
index 747d9ef834..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-900-normal.woff2
deleted file mode 100644
index ab3f1c08dd..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-100-normal.woff
deleted file mode 100644
index 435f25c179..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-100-normal.woff2
deleted file mode 100644
index 4f023ac30e..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-200-normal.woff
deleted file mode 100644
index e6c8949dea..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-200-normal.woff2
deleted file mode 100644
index 8fa4e47281..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-300-normal.woff
deleted file mode 100644
index 57b76f714c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-300-normal.woff2
deleted file mode 100644
index 97e45aae32..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-400-normal.woff
deleted file mode 100644
index 1fe940892f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-400-normal.woff2
deleted file mode 100644
index 5f4ae9236e..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-500-normal.woff
deleted file mode 100644
index e61572c2c2..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-500-normal.woff2
deleted file mode 100644
index aec20f619f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-600-normal.woff
deleted file mode 100644
index b2e6a57337..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-600-normal.woff2
deleted file mode 100644
index 0fee707f37..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-700-normal.woff
deleted file mode 100644
index 0410e2267f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-700-normal.woff2
deleted file mode 100644
index 3a44ec3683..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-800-normal.woff
deleted file mode 100644
index 7e5cc6e976..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-800-normal.woff2
deleted file mode 100644
index 3d281d004b..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-900-normal.woff
deleted file mode 100644
index 7d81a8b3b1..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-900-normal.woff2
deleted file mode 100644
index c23b86f1d3..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-greek-ext-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-100-normal.woff
deleted file mode 100644
index f631780793..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-100-normal.woff2
deleted file mode 100644
index 1ef2357365..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-200-normal.woff
deleted file mode 100644
index e7f0153597..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-200-normal.woff2
deleted file mode 100644
index ca591ae703..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-300-normal.woff
deleted file mode 100644
index f9a5dd911c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-300-normal.woff2
deleted file mode 100644
index e085aa82c6..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-400-normal.woff
deleted file mode 100644
index b3db306379..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-400-normal.woff2
deleted file mode 100644
index c659f5e4a1..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-500-normal.woff
deleted file mode 100644
index ee274431c4..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-500-normal.woff2
deleted file mode 100644
index 6fc94ad0cc..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-600-normal.woff
deleted file mode 100644
index 8ce08d36df..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-600-normal.woff2
deleted file mode 100644
index bc76d107f6..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-700-normal.woff
deleted file mode 100644
index c2cd54d86a..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-700-normal.woff2
deleted file mode 100644
index 8fcc4321c7..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-800-normal.woff
deleted file mode 100644
index 5a05354c48..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-800-normal.woff2
deleted file mode 100644
index 27db0546cd..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-900-normal.woff
deleted file mode 100644
index 2da3cacd4d..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-900-normal.woff2
deleted file mode 100644
index b1c208a14c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-100-normal.woff
deleted file mode 100644
index cc721fa041..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-100-normal.woff2
deleted file mode 100644
index 9982f5f6e3..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-200-normal.woff
deleted file mode 100644
index cdf55aa05e..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-200-normal.woff2
deleted file mode 100644
index a822063f13..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-300-normal.woff
deleted file mode 100644
index 2ee09656df..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-300-normal.woff2
deleted file mode 100644
index 25be677ce2..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-400-normal.woff
deleted file mode 100644
index f71973145a..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-400-normal.woff2
deleted file mode 100644
index b0d08940ce..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-500-normal.woff
deleted file mode 100644
index cfbd116b6c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-500-normal.woff2
deleted file mode 100644
index e78729184b..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-600-normal.woff
deleted file mode 100644
index cedbd7f9b7..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-600-normal.woff2
deleted file mode 100644
index 8ff1de2f40..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-700-normal.woff
deleted file mode 100644
index de34917d80..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-700-normal.woff2
deleted file mode 100644
index d8c5665e3c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-800-normal.woff
deleted file mode 100644
index 0e99197046..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-800-normal.woff2
deleted file mode 100644
index 1a2cf49605..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-900-normal.woff
deleted file mode 100644
index e35faf7f92..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-900-normal.woff2
deleted file mode 100644
index 2d12b58373..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-latin-ext-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-100-normal.woff
deleted file mode 100644
index 75c85d80db..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-100-normal.woff2
deleted file mode 100644
index 1e01e43278..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-200-normal.woff
deleted file mode 100644
index 259d7a53f9..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-200-normal.woff2
deleted file mode 100644
index 49bf2d611a..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-300-normal.woff
deleted file mode 100644
index 7a07034685..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-300-normal.woff2
deleted file mode 100644
index c75e79a68d..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-400-normal.woff
deleted file mode 100644
index 4f2b3b5a77..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-400-normal.woff2
deleted file mode 100644
index b9cb104b41..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-500-normal.woff
deleted file mode 100644
index 6d8f9f2dbd..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-500-normal.woff2
deleted file mode 100644
index 73c7d0f34b..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-600-normal.woff
deleted file mode 100644
index b6e89fb400..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-600-normal.woff2
deleted file mode 100644
index 0f59ce62e5..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-700-normal.woff
deleted file mode 100644
index 4906979d08..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-700-normal.woff2
deleted file mode 100644
index a9a5314a24..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-800-normal.woff
deleted file mode 100644
index f08df88dce..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-800-normal.woff2
deleted file mode 100644
index 56b1f464bd..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-900-normal.woff
deleted file mode 100644
index bf4cad4d85..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-900-normal.woff2
deleted file mode 100644
index 27eadde359..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/files/inter-vietnamese-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-100.css
deleted file mode 100644
index 1c2ac29738..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-greek-100-normal.woff2) format('woff2'), url(./files/inter-greek-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-200.css
deleted file mode 100644
index 140d9eafbc..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-greek-200-normal.woff2) format('woff2'), url(./files/inter-greek-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-300.css
deleted file mode 100644
index 88a6a9c76a..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-greek-300-normal.woff2) format('woff2'), url(./files/inter-greek-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-400.css
deleted file mode 100644
index f739f45bd7..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-greek-400-normal.woff2) format('woff2'), url(./files/inter-greek-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-500.css
deleted file mode 100644
index 4b7edcc5cd..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-greek-500-normal.woff2) format('woff2'), url(./files/inter-greek-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-600.css
deleted file mode 100644
index e0542671a9..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-greek-600-normal.woff2) format('woff2'), url(./files/inter-greek-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-700.css
deleted file mode 100644
index c987276421..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-greek-700-normal.woff2) format('woff2'), url(./files/inter-greek-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-800.css
deleted file mode 100644
index 2952e1c18d..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-greek-800-normal.woff2) format('woff2'), url(./files/inter-greek-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-900.css
deleted file mode 100644
index 1f0c56be08..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-greek-900-normal.woff2) format('woff2'), url(./files/inter-greek-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-100.css
deleted file mode 100644
index 52e0a33552..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-ext-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-greek-ext-100-normal.woff2) format('woff2'), url(./files/inter-greek-ext-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-200.css
deleted file mode 100644
index aa162a971c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-ext-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-greek-ext-200-normal.woff2) format('woff2'), url(./files/inter-greek-ext-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-300.css
deleted file mode 100644
index 4c01e4ca39..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-ext-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-greek-ext-300-normal.woff2) format('woff2'), url(./files/inter-greek-ext-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-400.css
deleted file mode 100644
index dc9ef2ffc4..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-greek-ext-400-normal.woff2) format('woff2'), url(./files/inter-greek-ext-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-500.css
deleted file mode 100644
index c315e68857..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-ext-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-greek-ext-500-normal.woff2) format('woff2'), url(./files/inter-greek-ext-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-600.css
deleted file mode 100644
index f01c7406b0..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-ext-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-greek-ext-600-normal.woff2) format('woff2'), url(./files/inter-greek-ext-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-700.css
deleted file mode 100644
index 09d14da134..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-ext-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-greek-ext-700-normal.woff2) format('woff2'), url(./files/inter-greek-ext-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-800.css
deleted file mode 100644
index 695043bd0e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-ext-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-greek-ext-800-normal.woff2) format('woff2'), url(./files/inter-greek-ext-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-900.css
deleted file mode 100644
index aebe61a138..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-greek-ext-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-greek-ext-900-normal.woff2) format('woff2'), url(./files/inter-greek-ext-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext.css
deleted file mode 100644
index c539a087e4..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek-ext.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* inter-greek-ext-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-greek-ext-100-normal.woff2) format('woff2'), url(./files/inter-greek-ext-100-normal.woff) format('woff');
-}
-
-/* inter-greek-ext-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-greek-ext-200-normal.woff2) format('woff2'), url(./files/inter-greek-ext-200-normal.woff) format('woff');
-}
-
-/* inter-greek-ext-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-greek-ext-300-normal.woff2) format('woff2'), url(./files/inter-greek-ext-300-normal.woff) format('woff');
-}
-
-/* inter-greek-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-greek-ext-400-normal.woff2) format('woff2'), url(./files/inter-greek-ext-400-normal.woff) format('woff');
-}
-
-/* inter-greek-ext-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-greek-ext-500-normal.woff2) format('woff2'), url(./files/inter-greek-ext-500-normal.woff) format('woff');
-}
-
-/* inter-greek-ext-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-greek-ext-600-normal.woff2) format('woff2'), url(./files/inter-greek-ext-600-normal.woff) format('woff');
-}
-
-/* inter-greek-ext-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-greek-ext-700-normal.woff2) format('woff2'), url(./files/inter-greek-ext-700-normal.woff) format('woff');
-}
-
-/* inter-greek-ext-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-greek-ext-800-normal.woff2) format('woff2'), url(./files/inter-greek-ext-800-normal.woff) format('woff');
-}
-
-/* inter-greek-ext-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-greek-ext-900-normal.woff2) format('woff2'), url(./files/inter-greek-ext-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek.css
deleted file mode 100644
index 50710bcdd4..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/greek.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* inter-greek-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-greek-100-normal.woff2) format('woff2'), url(./files/inter-greek-100-normal.woff) format('woff');
-}
-
-/* inter-greek-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-greek-200-normal.woff2) format('woff2'), url(./files/inter-greek-200-normal.woff) format('woff');
-}
-
-/* inter-greek-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-greek-300-normal.woff2) format('woff2'), url(./files/inter-greek-300-normal.woff) format('woff');
-}
-
-/* inter-greek-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-greek-400-normal.woff2) format('woff2'), url(./files/inter-greek-400-normal.woff) format('woff');
-}
-
-/* inter-greek-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-greek-500-normal.woff2) format('woff2'), url(./files/inter-greek-500-normal.woff) format('woff');
-}
-
-/* inter-greek-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-greek-600-normal.woff2) format('woff2'), url(./files/inter-greek-600-normal.woff) format('woff');
-}
-
-/* inter-greek-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-greek-700-normal.woff2) format('woff2'), url(./files/inter-greek-700-normal.woff) format('woff');
-}
-
-/* inter-greek-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-greek-800-normal.woff2) format('woff2'), url(./files/inter-greek-800-normal.woff) format('woff');
-}
-
-/* inter-greek-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-greek-900-normal.woff2) format('woff2'), url(./files/inter-greek-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/index.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/index.css
deleted file mode 100644
index dbd4039954..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/index.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* inter-cyrillic-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-cyrillic-ext-400-normal.woff2) format('woff2'), url(./files/inter-cyrillic-ext-400-normal.woff) format('woff');
- unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
-}
-
-/* inter-cyrillic-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-cyrillic-400-normal.woff2) format('woff2'), url(./files/inter-cyrillic-400-normal.woff) format('woff');
- unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
-}
-
-/* inter-greek-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-greek-ext-400-normal.woff2) format('woff2'), url(./files/inter-greek-ext-400-normal.woff) format('woff');
- unicode-range: U+1F00-1FFF;
-}
-
-/* inter-greek-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-greek-400-normal.woff2) format('woff2'), url(./files/inter-greek-400-normal.woff) format('woff');
- unicode-range: U+0370-03FF;
-}
-
-/* inter-vietnamese-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-vietnamese-400-normal.woff2) format('woff2'), url(./files/inter-vietnamese-400-normal.woff) format('woff');
- unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
-}
-
-/* inter-latin-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-latin-ext-400-normal.woff2) format('woff2'), url(./files/inter-latin-ext-400-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* inter-latin-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-latin-400-normal.woff2) format('woff2'), url(./files/inter-latin-400-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-100.css
deleted file mode 100644
index 11c2158a62..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-latin-100-normal.woff2) format('woff2'), url(./files/inter-latin-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-200.css
deleted file mode 100644
index 91d4488512..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-latin-200-normal.woff2) format('woff2'), url(./files/inter-latin-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-300.css
deleted file mode 100644
index 7c4781d7aa..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-latin-300-normal.woff2) format('woff2'), url(./files/inter-latin-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-400.css
deleted file mode 100644
index 87f2d4b19a..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-latin-400-normal.woff2) format('woff2'), url(./files/inter-latin-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-500.css
deleted file mode 100644
index 25d81dd3f5..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-latin-500-normal.woff2) format('woff2'), url(./files/inter-latin-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-600.css
deleted file mode 100644
index 649a526404..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-latin-600-normal.woff2) format('woff2'), url(./files/inter-latin-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-700.css
deleted file mode 100644
index 753ddb2ee9..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-latin-700-normal.woff2) format('woff2'), url(./files/inter-latin-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-800.css
deleted file mode 100644
index 9216c225d6..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-latin-800-normal.woff2) format('woff2'), url(./files/inter-latin-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-900.css
deleted file mode 100644
index 824f349122..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-latin-900-normal.woff2) format('woff2'), url(./files/inter-latin-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-100.css
deleted file mode 100644
index bef0354c8d..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-ext-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-latin-ext-100-normal.woff2) format('woff2'), url(./files/inter-latin-ext-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-200.css
deleted file mode 100644
index fb707f46aa..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-ext-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-latin-ext-200-normal.woff2) format('woff2'), url(./files/inter-latin-ext-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-300.css
deleted file mode 100644
index 3e1195073b..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-ext-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-latin-ext-300-normal.woff2) format('woff2'), url(./files/inter-latin-ext-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-400.css
deleted file mode 100644
index 3bc308cb71..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-latin-ext-400-normal.woff2) format('woff2'), url(./files/inter-latin-ext-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-500.css
deleted file mode 100644
index 7c8f23a33f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-ext-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-latin-ext-500-normal.woff2) format('woff2'), url(./files/inter-latin-ext-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-600.css
deleted file mode 100644
index e53cba1c62..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-ext-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-latin-ext-600-normal.woff2) format('woff2'), url(./files/inter-latin-ext-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-700.css
deleted file mode 100644
index f13068c349..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-ext-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-latin-ext-700-normal.woff2) format('woff2'), url(./files/inter-latin-ext-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-800.css
deleted file mode 100644
index 2688e9aefa..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-ext-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-latin-ext-800-normal.woff2) format('woff2'), url(./files/inter-latin-ext-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-900.css
deleted file mode 100644
index 4a4e69aaff..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-latin-ext-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-latin-ext-900-normal.woff2) format('woff2'), url(./files/inter-latin-ext-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext.css
deleted file mode 100644
index 7253ba858a..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin-ext.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* inter-latin-ext-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-latin-ext-100-normal.woff2) format('woff2'), url(./files/inter-latin-ext-100-normal.woff) format('woff');
-}
-
-/* inter-latin-ext-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-latin-ext-200-normal.woff2) format('woff2'), url(./files/inter-latin-ext-200-normal.woff) format('woff');
-}
-
-/* inter-latin-ext-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-latin-ext-300-normal.woff2) format('woff2'), url(./files/inter-latin-ext-300-normal.woff) format('woff');
-}
-
-/* inter-latin-ext-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-latin-ext-400-normal.woff2) format('woff2'), url(./files/inter-latin-ext-400-normal.woff) format('woff');
-}
-
-/* inter-latin-ext-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-latin-ext-500-normal.woff2) format('woff2'), url(./files/inter-latin-ext-500-normal.woff) format('woff');
-}
-
-/* inter-latin-ext-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-latin-ext-600-normal.woff2) format('woff2'), url(./files/inter-latin-ext-600-normal.woff) format('woff');
-}
-
-/* inter-latin-ext-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-latin-ext-700-normal.woff2) format('woff2'), url(./files/inter-latin-ext-700-normal.woff) format('woff');
-}
-
-/* inter-latin-ext-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-latin-ext-800-normal.woff2) format('woff2'), url(./files/inter-latin-ext-800-normal.woff) format('woff');
-}
-
-/* inter-latin-ext-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-latin-ext-900-normal.woff2) format('woff2'), url(./files/inter-latin-ext-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin.css
deleted file mode 100644
index c5a92ac825..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/latin.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* inter-latin-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-latin-100-normal.woff2) format('woff2'), url(./files/inter-latin-100-normal.woff) format('woff');
-}
-
-/* inter-latin-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-latin-200-normal.woff2) format('woff2'), url(./files/inter-latin-200-normal.woff) format('woff');
-}
-
-/* inter-latin-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-latin-300-normal.woff2) format('woff2'), url(./files/inter-latin-300-normal.woff) format('woff');
-}
-
-/* inter-latin-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-latin-400-normal.woff2) format('woff2'), url(./files/inter-latin-400-normal.woff) format('woff');
-}
-
-/* inter-latin-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-latin-500-normal.woff2) format('woff2'), url(./files/inter-latin-500-normal.woff) format('woff');
-}
-
-/* inter-latin-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-latin-600-normal.woff2) format('woff2'), url(./files/inter-latin-600-normal.woff) format('woff');
-}
-
-/* inter-latin-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-latin-700-normal.woff2) format('woff2'), url(./files/inter-latin-700-normal.woff) format('woff');
-}
-
-/* inter-latin-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-latin-800-normal.woff2) format('woff2'), url(./files/inter-latin-800-normal.woff) format('woff');
-}
-
-/* inter-latin-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-latin-900-normal.woff2) format('woff2'), url(./files/inter-latin-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/metadata.json b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/metadata.json
deleted file mode 100644
index c3d6d0e6a1..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/metadata.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "id": "inter",
- "family": "Inter",
- "subsets": [
- "cyrillic",
- "cyrillic-ext",
- "greek",
- "greek-ext",
- "latin",
- "latin-ext",
- "vietnamese"
- ],
- "weights": [100, 200, 300, 400, 500, 600, 700, 800, 900],
- "styles": ["normal"],
- "defSubset": "latin",
- "variable": {
- "slnt": {"default": "0", "min": "-10", "max": "0", "step": "1"},
- "wght": {"default": "400", "min": "100", "max": "900", "step": "1"}
- },
- "lastModified": "2022-09-22",
- "version": "v12",
- "category": "sans-serif",
- "license": {
- "type": "OFL-1.1",
- "url": "http://scripts.sil.org/OFL",
- "attribution": "Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)"
- },
- "source": "https://github.com/google/fonts",
- "type": "google"
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/package.json b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/package.json
deleted file mode 100644
index d87c625d4e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/package.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "@fontsource/inter",
- "version": "5.0.15",
- "description": "Self-host the Inter font in a neatly bundled NPM package.",
- "main": "index.css",
- "publishConfig": {"access": "public"},
- "keywords": [
- "fontsource",
- "font",
- "font family",
- "google fonts",
- "inter",
- "Inter",
- "css",
- "sass",
- "front-end",
- "web",
- "typeface",
- "variable"
- ],
- "author": "Google Inc.",
- "license": "OFL-1.1",
- "homepage": "https://fontsource.org/fonts/inter",
- "repository": {
- "type": "git",
- "url": "https://github.com/fontsource/font-files.git",
- "directory": "fonts/google/inter"
- },
- "publishHash": "735212724ad407af"
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/scss/metadata.scss b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/scss/metadata.scss
deleted file mode 100644
index 24fe7b1c55..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/scss/metadata.scss
+++ /dev/null
@@ -1,22 +0,0 @@
-$id: 'inter' !default;
-$family: 'Inter' !default;
-$category: sans-serif !default;
-$subsets: (cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, vietnamese) !default;
-$weights: (100, 200, 300, 400, 500, 600, 700, 800, 900) !default;
-$styles: (normal) !default;
-$axes: null !default;
-$defaults: (
- subset: latin,
- weight: 400,
- style: normal,
- axis: null,
-) !default;
-$unicode: (
- cyrillic-ext: (U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F),
- cyrillic: (U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116),
- greek-ext: (U+1F00-1FFF),
- greek: (U+0370-03FF),
- vietnamese: (U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB),
- latin-ext: (U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF),
- latin: (U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD),
-) !default;
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/scss/mixins.scss b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/scss/mixins.scss
deleted file mode 100644
index 4d1c6c3aaf..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/scss/mixins.scss
+++ /dev/null
@@ -1,184 +0,0 @@
-@use 'sass:list';
-@use 'sass:map';
-@use 'sass:math';
-@use 'sass:meta';
-@use 'sass:string';
-
-@use 'metadata';
-
-$metadata: meta.module-variables(metadata) !default;
-$directory: null !default;
-
-$family: null !default;
-$display: null !default;
-$formats: null !default;
-$subsets: null !default;
-$weights: null !default;
-$styles: null !default;
-$axes: null !default;
-
-// Deprecated
-$displayVar: null !default;
-
-@mixin generator(
- $metadata: $metadata,
- $directory: $directory,
- $family: $family,
- $display: $display,
- $formats: $formats,
- $subsets: $subsets,
- $weights: $weights,
- $styles: $styles,
- $axes: $axes,
-
- // Deprecated
- $displayVar: $displayVar
-) {
- @if $displayVar != null {
- @warn "$displayVar is deprecated due to the limitation of using css variables in @font-face (https://github.com/fontsource/fontsource/issues/726).";
- }
-
- $isVariable: map.get($metadata, axes) != null;
-
- $directory: if(
- $directory,
- $directory,
- '~@fontsource#{if($isVariable, '-variable', '')}/#{map.get($metadata, id)}/files'
- );
-
- $family: if($family, $family, map.get($metadata, family) + if($isVariable, ' Variable', ''));
- $display: if($display, $display, swap);
- $formats: if(not $formats or $formats == all, if($isVariable, woff2, (woff2, woff)), $formats);
- $subsets: if(
- $subsets,
- if($subsets == all, map.get($metadata, subsets), $subsets),
- map.get($metadata, defaults, subset)
- );
- $weights: if(
- $weights,
- if($weights == all, map.get($metadata, weights), $weights),
- map.get($metadata, defaults, weight)
- );
- $styles: if(
- $styles,
- if($styles == all, map.get($metadata, styles), $styles),
- map.get($metadata, defaults, style)
- );
- $axes: if(
- $axes,
- if($axes == all, full, $axes),
- if($isVariable, if(map.has-key($metadata, axes, wght), wght, full), null)
- );
-
- @each $subset in $subsets {
- @each $unicodeSubset, $unicodeRange in map.get($metadata, unicode) {
- @if (
- ($subset == $unicodeSubset) or
- (
- // Is numeric subset
- ($subset == map.get($metadata, defaults, subset)) and not
- list.index(map.get($metadata, subsets), $unicodeSubset)
- )
- ) {
- @each $weight in if($axes, null, $weights) {
- @each $axis in $axes {
- @each $style in $styles {
- $variant: '#{map.get($metadata, id)}-#{if($unicodeSubset, $unicodeSubset, $subset)}-#{if($axis, $axis, $weight)}-#{$style}';
-
- $src: ();
- @each $format in $formats {
- $src: append(
- $src,
- url('#{$directory}/#{$variant}.#{$format}')
- format('#{$format}#{if($axis, '-variations', '')}'),
- comma
- );
- }
-
- @content ((
- metadata: $metadata,
- directory: $directory,
- family: $family,
- display: $display,
- formats: $formats,
- subsets: $subsets,
- weights: $weights,
- styles: $styles,
- axes: $axes,
-
- variant: $variant,
- subset: $subset,
- unicodeSubset: $unicodeSubset,
- unicodeRange: $unicodeRange,
- weight: $weight,
- axis: $axis,
- style: $style,
-
- font-family: string.quote($family),
- font-style: if(
- (($axis == full) or ($axis == slnt)) and map.has-key($metadata, axes, slnt),
- oblique map.get($metadata, axes, slnt, min) + deg map.get($metadata, axes, slnt, max) + deg,
- $style
- ),
- font-display: $display,
- font-weight: if(
- (($axis == full) or ($axis == wght)) and map.has-key($metadata, axes, wght),
- map.get($metadata, axes, wght, min) map.get($metadata, axes, wght, max),
- $weight
- ),
- font-stretch: if(
- (($axis == full) or ($axis == wdth)) and map.has-key($metadata, axes, wdth),
- '#{map.get($metadata, axes, wdth, min)}% #{map.get($metadata, axes, wdth, max)}%',
- null
- ),
- src: $src,
- unicode-range: $unicodeRange,
- ));
- }
- }
- }
- }
- }
- }
-}
-
-@mixin faces(
- $metadata: $metadata,
- $directory: $directory,
- $family: $family,
- $display: $display,
- $formats: $formats,
- $subsets: $subsets,
- $weights: $weights,
- $styles: $styles,
- $axes: $axes,
-
- // Deprecated
- $displayVar: $displayVar
-) {
- @include generator(
- $metadata: $metadata,
- $directory: $directory,
- $family: $family,
- $display: $display,
- $formats: $formats,
- $subsets: $subsets,
- $weights: $weights,
- $styles: $styles,
- $axes: $axes,
-
- $displayVar: $displayVar
- )
- using ($props) {
- /* #{map.get($props, variant)} */
- @font-face {
- font-family: map.get($props, font-family);
- font-style: map.get($props, font-style);
- font-display: map.get($props, font-display);
- font-weight: map.get($props, font-weight);
- font-stretch: map.get($props, font-stretch);
- unicode-range: map.get($props, unicode-range);
- src: map.get($props, src);
- }
- }
-}
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/unicode.json b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/unicode.json
deleted file mode 100644
index 0cd6dc4b0a..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/unicode.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "cyrillic-ext": "U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F",
- "cyrillic": "U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116",
- "greek-ext": "U+1F00-1FFF",
- "greek": "U+0370-03FF",
- "vietnamese": "U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB",
- "latin-ext": "U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF",
- "latin": "U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD"
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-100.css
deleted file mode 100644
index 3d1e9ab8bf..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-vietnamese-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-vietnamese-100-normal.woff2) format('woff2'), url(./files/inter-vietnamese-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-200.css
deleted file mode 100644
index d5bbaf8d8b..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-vietnamese-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-vietnamese-200-normal.woff2) format('woff2'), url(./files/inter-vietnamese-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-300.css
deleted file mode 100644
index dc5cbffe8c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-vietnamese-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-vietnamese-300-normal.woff2) format('woff2'), url(./files/inter-vietnamese-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-400.css
deleted file mode 100644
index 6e93417e1b..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-vietnamese-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-vietnamese-400-normal.woff2) format('woff2'), url(./files/inter-vietnamese-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-500.css
deleted file mode 100644
index 60a7ccae90..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-vietnamese-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-vietnamese-500-normal.woff2) format('woff2'), url(./files/inter-vietnamese-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-600.css
deleted file mode 100644
index c18acd043e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-vietnamese-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-vietnamese-600-normal.woff2) format('woff2'), url(./files/inter-vietnamese-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-700.css
deleted file mode 100644
index 23ba9123c1..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-vietnamese-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-vietnamese-700-normal.woff2) format('woff2'), url(./files/inter-vietnamese-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-800.css
deleted file mode 100644
index 6a844da34d..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-vietnamese-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-vietnamese-800-normal.woff2) format('woff2'), url(./files/inter-vietnamese-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-900.css
deleted file mode 100644
index e21d6a4da9..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* inter-vietnamese-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-vietnamese-900-normal.woff2) format('woff2'), url(./files/inter-vietnamese-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese.css
deleted file mode 100644
index 3f58350dd3..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/inter/vietnamese.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* inter-vietnamese-100-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/inter-vietnamese-100-normal.woff2) format('woff2'), url(./files/inter-vietnamese-100-normal.woff) format('woff');
-}
-
-/* inter-vietnamese-200-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/inter-vietnamese-200-normal.woff2) format('woff2'), url(./files/inter-vietnamese-200-normal.woff) format('woff');
-}
-
-/* inter-vietnamese-300-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/inter-vietnamese-300-normal.woff2) format('woff2'), url(./files/inter-vietnamese-300-normal.woff) format('woff');
-}
-
-/* inter-vietnamese-400-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/inter-vietnamese-400-normal.woff2) format('woff2'), url(./files/inter-vietnamese-400-normal.woff) format('woff');
-}
-
-/* inter-vietnamese-500-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/inter-vietnamese-500-normal.woff2) format('woff2'), url(./files/inter-vietnamese-500-normal.woff) format('woff');
-}
-
-/* inter-vietnamese-600-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/inter-vietnamese-600-normal.woff2) format('woff2'), url(./files/inter-vietnamese-600-normal.woff) format('woff');
-}
-
-/* inter-vietnamese-700-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/inter-vietnamese-700-normal.woff2) format('woff2'), url(./files/inter-vietnamese-700-normal.woff) format('woff');
-}
-
-/* inter-vietnamese-800-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/inter-vietnamese-800-normal.woff2) format('woff2'), url(./files/inter-vietnamese-800-normal.woff) format('woff');
-}
-
-/* inter-vietnamese-900-normal */
-@font-face {
- font-family: 'Inter';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/inter-vietnamese-900-normal.woff2) format('woff2'), url(./files/inter-vietnamese-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/100-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/100-italic.css
deleted file mode 100644
index 67d00ce770..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/100-italic.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-100-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-devanagari-100-italic.woff2) format('woff2'), url(./files/poppins-devanagari-100-italic.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-100-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-ext-100-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-100-italic.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-100-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-100-italic.woff2) format('woff2'), url(./files/poppins-latin-100-italic.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/100.css
deleted file mode 100644
index 14212f54f5..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/100.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-100-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-devanagari-100-normal.woff2) format('woff2'), url(./files/poppins-devanagari-100-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-100-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-ext-100-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-100-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-100-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-100-normal.woff2) format('woff2'), url(./files/poppins-latin-100-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/200-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/200-italic.css
deleted file mode 100644
index a192be93f5..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/200-italic.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-200-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-devanagari-200-italic.woff2) format('woff2'), url(./files/poppins-devanagari-200-italic.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-200-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-ext-200-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-200-italic.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-200-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-200-italic.woff2) format('woff2'), url(./files/poppins-latin-200-italic.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/200.css
deleted file mode 100644
index 3a6579c8ea..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/200.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-200-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-devanagari-200-normal.woff2) format('woff2'), url(./files/poppins-devanagari-200-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-200-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-ext-200-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-200-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-200-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-200-normal.woff2) format('woff2'), url(./files/poppins-latin-200-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/300-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/300-italic.css
deleted file mode 100644
index 05507df334..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/300-italic.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-300-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-devanagari-300-italic.woff2) format('woff2'), url(./files/poppins-devanagari-300-italic.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-300-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-ext-300-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-300-italic.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-300-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-300-italic.woff2) format('woff2'), url(./files/poppins-latin-300-italic.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/300.css
deleted file mode 100644
index 3a490903b6..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/300.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-300-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-devanagari-300-normal.woff2) format('woff2'), url(./files/poppins-devanagari-300-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-300-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-ext-300-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-300-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-300-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-300-normal.woff2) format('woff2'), url(./files/poppins-latin-300-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/400-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/400-italic.css
deleted file mode 100644
index d231e16d51..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/400-italic.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-400-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-devanagari-400-italic.woff2) format('woff2'), url(./files/poppins-devanagari-400-italic.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-400-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-ext-400-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-400-italic.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-400-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-400-italic.woff2) format('woff2'), url(./files/poppins-latin-400-italic.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/400.css
deleted file mode 100644
index 49de948030..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/400.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-devanagari-400-normal.woff2) format('woff2'), url(./files/poppins-devanagari-400-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-ext-400-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-400-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-400-normal.woff2) format('woff2'), url(./files/poppins-latin-400-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/500-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/500-italic.css
deleted file mode 100644
index cf29078bd1..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/500-italic.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-500-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-devanagari-500-italic.woff2) format('woff2'), url(./files/poppins-devanagari-500-italic.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-500-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-ext-500-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-500-italic.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-500-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-500-italic.woff2) format('woff2'), url(./files/poppins-latin-500-italic.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/500.css
deleted file mode 100644
index f716b6b8a2..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/500.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-500-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-devanagari-500-normal.woff2) format('woff2'), url(./files/poppins-devanagari-500-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-500-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-ext-500-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-500-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-500-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-500-normal.woff2) format('woff2'), url(./files/poppins-latin-500-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/600-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/600-italic.css
deleted file mode 100644
index 2ff161364c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/600-italic.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-600-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-devanagari-600-italic.woff2) format('woff2'), url(./files/poppins-devanagari-600-italic.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-600-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-ext-600-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-600-italic.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-600-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-600-italic.woff2) format('woff2'), url(./files/poppins-latin-600-italic.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/600.css
deleted file mode 100644
index 031c0d9e25..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/600.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-600-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-devanagari-600-normal.woff2) format('woff2'), url(./files/poppins-devanagari-600-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-600-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-ext-600-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-600-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-600-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-600-normal.woff2) format('woff2'), url(./files/poppins-latin-600-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/700-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/700-italic.css
deleted file mode 100644
index d226df4132..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/700-italic.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-700-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-devanagari-700-italic.woff2) format('woff2'), url(./files/poppins-devanagari-700-italic.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-700-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-ext-700-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-700-italic.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-700-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-700-italic.woff2) format('woff2'), url(./files/poppins-latin-700-italic.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/700.css
deleted file mode 100644
index 191acf52cb..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/700.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-700-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-devanagari-700-normal.woff2) format('woff2'), url(./files/poppins-devanagari-700-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-700-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-ext-700-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-700-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-700-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-700-normal.woff2) format('woff2'), url(./files/poppins-latin-700-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/800-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/800-italic.css
deleted file mode 100644
index 09017a4376..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/800-italic.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-800-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-devanagari-800-italic.woff2) format('woff2'), url(./files/poppins-devanagari-800-italic.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-800-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-ext-800-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-800-italic.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-800-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-800-italic.woff2) format('woff2'), url(./files/poppins-latin-800-italic.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/800.css
deleted file mode 100644
index 937462a621..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/800.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-800-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-devanagari-800-normal.woff2) format('woff2'), url(./files/poppins-devanagari-800-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-800-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-ext-800-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-800-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-800-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-800-normal.woff2) format('woff2'), url(./files/poppins-latin-800-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/900-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/900-italic.css
deleted file mode 100644
index cf899e9952..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/900-italic.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-900-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-devanagari-900-italic.woff2) format('woff2'), url(./files/poppins-devanagari-900-italic.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-900-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-ext-900-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-900-italic.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-900-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-900-italic.woff2) format('woff2'), url(./files/poppins-latin-900-italic.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/900.css
deleted file mode 100644
index d839ae15bf..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/900.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-900-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-devanagari-900-normal.woff2) format('woff2'), url(./files/poppins-devanagari-900-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-900-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-ext-900-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-900-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-900-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-900-normal.woff2) format('woff2'), url(./files/poppins-latin-900-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/CHANGELOG.md b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/CHANGELOG.md
deleted file mode 100644
index e798685bbf..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/CHANGELOG.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# Changelog
-See the [Fontsource CHANGELOG.md](https://github.com/fontsource/fontsource/blob/main/CHANGELOG.md).
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/LICENSE b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/LICENSE
deleted file mode 100644
index c2fef66637..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/LICENSE
+++ /dev/null
@@ -1,93 +0,0 @@
-Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/README.md b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/README.md
deleted file mode 100644
index c58f02aa4f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/README.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# Fontsource Poppins
-
-[![npm (scoped)](https://img.shields.io/npm/v/@fontsource/poppins?color=brightgreen)](https://www.npmjs.com/package/@fontsource/poppins) [![Generic badge](https://img.shields.io/badge/fontsource-passing-brightgreen)](https://github.com/fontsource/fontsource) [![Monthly downloads](https://badgen.net/npm/dm/@fontsource/poppins)](https://github.com/fontsource/fontsource) [![Total downloads](https://badgen.net/npm/dt/@fontsource/poppins)](https://github.com/fontsource/fontsource) [![GitHub stars](https://img.shields.io/github/stars/fontsource/fontsource.svg?style=social&label=Star)](https://github.com/fontsource/fontsource/stargazers)
-
-The CSS and web font files to easily self-host the “Poppins” font. Please visit the main [Fontsource website](https://fontsource.org/fonts/poppins) to view more details on this package.
-
-## Quick Installation
-
-Fontsource offers multiple methods to import the CSS, including using a bundler like Vite or using SASS. You can find full documentation [here](https://fontsource.org/docs/getting-started/introduction).
-
-```javascript
-npm install @fontsource/poppins
-```
-
-Within your app entry file or site component, import it in.
-
-```javascript
-import "@fontsource/poppins"; // Defaults to weight 400
-import "@fontsource/poppins/400.css"; // Specify weight
-import "@fontsource/poppins/400-italic.css"; // Specify weight and style
-```
-
-Supported variables:
-- Weights: `[100,200,300,400,500,600,700,800,900]`
-- Styles: `[italic,normal]`
-- Subsets: `[devanagari,latin,latin-ext]`
-
-> Note: `italic` may not be supported by all fonts. To learn more about what weights and styles are supported, please visit the [Fontsource website](https://fontsource.org/fonts/poppins).
-
-Finally, you can reference the font name in a CSS stylesheet, CSS Module, or CSS-in-JS.
-
-```css
-body {
- font-family: "Poppins";
-}
-```
-
-## Licensing
-Always make sure to read the license for each font you use. Most of the fonts in the collection use the SIL Open Font License, v1.1. Some fonts use the Apache 2 license. The Ubuntu fonts use the Ubuntu Font License v1.0.
-
-Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)
-[OFL-1.1](http://scripts.sil.org/OFL)
-
-## Other Notes
-Font version (provided by source): `v20`.
-
-If you have any suggestions or ideas to improve the performance of font loading or expand the existing library, feel free to star and contribute to this repository. You can share your suggestions or ideas by creating an [issue](https://github.com/fontsource/fontsource/issues).
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-100-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-100-italic.css
deleted file mode 100644
index 909001bffc..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-100-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-100-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-devanagari-100-italic.woff2) format('woff2'), url(./files/poppins-devanagari-100-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-100.css
deleted file mode 100644
index 01730e024a..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-100-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-devanagari-100-normal.woff2) format('woff2'), url(./files/poppins-devanagari-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-200-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-200-italic.css
deleted file mode 100644
index 06fdd754bc..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-200-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-200-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-devanagari-200-italic.woff2) format('woff2'), url(./files/poppins-devanagari-200-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-200.css
deleted file mode 100644
index 9ca33ea6cd..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-200-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-devanagari-200-normal.woff2) format('woff2'), url(./files/poppins-devanagari-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-300-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-300-italic.css
deleted file mode 100644
index d6feaaaa0e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-300-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-300-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-devanagari-300-italic.woff2) format('woff2'), url(./files/poppins-devanagari-300-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-300.css
deleted file mode 100644
index a5cb6534e2..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-300-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-devanagari-300-normal.woff2) format('woff2'), url(./files/poppins-devanagari-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-400-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-400-italic.css
deleted file mode 100644
index 51727be22e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-400-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-400-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-devanagari-400-italic.woff2) format('woff2'), url(./files/poppins-devanagari-400-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-400.css
deleted file mode 100644
index c9fe446cea..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-devanagari-400-normal.woff2) format('woff2'), url(./files/poppins-devanagari-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-500-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-500-italic.css
deleted file mode 100644
index 3db6ffad0b..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-500-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-500-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-devanagari-500-italic.woff2) format('woff2'), url(./files/poppins-devanagari-500-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-500.css
deleted file mode 100644
index 768b59f48c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-500-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-devanagari-500-normal.woff2) format('woff2'), url(./files/poppins-devanagari-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-600-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-600-italic.css
deleted file mode 100644
index 5040ae585a..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-600-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-600-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-devanagari-600-italic.woff2) format('woff2'), url(./files/poppins-devanagari-600-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-600.css
deleted file mode 100644
index 834b48e320..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-600-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-devanagari-600-normal.woff2) format('woff2'), url(./files/poppins-devanagari-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-700-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-700-italic.css
deleted file mode 100644
index ba707d74d7..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-700-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-700-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-devanagari-700-italic.woff2) format('woff2'), url(./files/poppins-devanagari-700-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-700.css
deleted file mode 100644
index dbe7e0811f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-700-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-devanagari-700-normal.woff2) format('woff2'), url(./files/poppins-devanagari-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-800-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-800-italic.css
deleted file mode 100644
index 6a05c13e49..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-800-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-800-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-devanagari-800-italic.woff2) format('woff2'), url(./files/poppins-devanagari-800-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-800.css
deleted file mode 100644
index 9bbf93a44c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-800-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-devanagari-800-normal.woff2) format('woff2'), url(./files/poppins-devanagari-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-900-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-900-italic.css
deleted file mode 100644
index c8831b4c1c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-900-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-900-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-devanagari-900-italic.woff2) format('woff2'), url(./files/poppins-devanagari-900-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-900.css
deleted file mode 100644
index d71032b0bf..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-devanagari-900-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-devanagari-900-normal.woff2) format('woff2'), url(./files/poppins-devanagari-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-italic.css
deleted file mode 100644
index aa9ff1fcc8..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari-italic.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* poppins-devanagari-100-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-devanagari-100-italic.woff2) format('woff2'), url(./files/poppins-devanagari-100-italic.woff) format('woff');
-}
-
-/* poppins-devanagari-200-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-devanagari-200-italic.woff2) format('woff2'), url(./files/poppins-devanagari-200-italic.woff) format('woff');
-}
-
-/* poppins-devanagari-300-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-devanagari-300-italic.woff2) format('woff2'), url(./files/poppins-devanagari-300-italic.woff) format('woff');
-}
-
-/* poppins-devanagari-400-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-devanagari-400-italic.woff2) format('woff2'), url(./files/poppins-devanagari-400-italic.woff) format('woff');
-}
-
-/* poppins-devanagari-500-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-devanagari-500-italic.woff2) format('woff2'), url(./files/poppins-devanagari-500-italic.woff) format('woff');
-}
-
-/* poppins-devanagari-600-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-devanagari-600-italic.woff2) format('woff2'), url(./files/poppins-devanagari-600-italic.woff) format('woff');
-}
-
-/* poppins-devanagari-700-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-devanagari-700-italic.woff2) format('woff2'), url(./files/poppins-devanagari-700-italic.woff) format('woff');
-}
-
-/* poppins-devanagari-800-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-devanagari-800-italic.woff2) format('woff2'), url(./files/poppins-devanagari-800-italic.woff) format('woff');
-}
-
-/* poppins-devanagari-900-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-devanagari-900-italic.woff2) format('woff2'), url(./files/poppins-devanagari-900-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari.css
deleted file mode 100644
index 571fe38b84..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/devanagari.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* poppins-devanagari-100-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-devanagari-100-normal.woff2) format('woff2'), url(./files/poppins-devanagari-100-normal.woff) format('woff');
-}
-
-/* poppins-devanagari-200-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-devanagari-200-normal.woff2) format('woff2'), url(./files/poppins-devanagari-200-normal.woff) format('woff');
-}
-
-/* poppins-devanagari-300-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-devanagari-300-normal.woff2) format('woff2'), url(./files/poppins-devanagari-300-normal.woff) format('woff');
-}
-
-/* poppins-devanagari-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-devanagari-400-normal.woff2) format('woff2'), url(./files/poppins-devanagari-400-normal.woff) format('woff');
-}
-
-/* poppins-devanagari-500-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-devanagari-500-normal.woff2) format('woff2'), url(./files/poppins-devanagari-500-normal.woff) format('woff');
-}
-
-/* poppins-devanagari-600-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-devanagari-600-normal.woff2) format('woff2'), url(./files/poppins-devanagari-600-normal.woff) format('woff');
-}
-
-/* poppins-devanagari-700-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-devanagari-700-normal.woff2) format('woff2'), url(./files/poppins-devanagari-700-normal.woff) format('woff');
-}
-
-/* poppins-devanagari-800-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-devanagari-800-normal.woff2) format('woff2'), url(./files/poppins-devanagari-800-normal.woff) format('woff');
-}
-
-/* poppins-devanagari-900-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-devanagari-900-normal.woff2) format('woff2'), url(./files/poppins-devanagari-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-italic.woff
deleted file mode 100644
index ca201df505..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-italic.woff2
deleted file mode 100644
index 4a1f80bb03..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-normal.woff
deleted file mode 100644
index 8f1ef815bf..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-normal.woff2
deleted file mode 100644
index 803d058ff3..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-italic.woff
deleted file mode 100644
index fd1e2856c7..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-italic.woff2
deleted file mode 100644
index 49cb7fd190..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-normal.woff
deleted file mode 100644
index 6d4da5df65..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-normal.woff2
deleted file mode 100644
index 4224410628..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-italic.woff
deleted file mode 100644
index e128381ccc..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-italic.woff2
deleted file mode 100644
index 6bcfd3a354..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-normal.woff
deleted file mode 100644
index 2bd921b874..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-normal.woff2
deleted file mode 100644
index ef13593674..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-italic.woff
deleted file mode 100644
index a6d711a237..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-italic.woff2
deleted file mode 100644
index ac23a319fc..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-normal.woff
deleted file mode 100644
index 4d7d066e9b..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-normal.woff2
deleted file mode 100644
index 3295a4cc9d..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-italic.woff
deleted file mode 100644
index 3539c25b14..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-italic.woff2
deleted file mode 100644
index a9d88cb56f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-normal.woff
deleted file mode 100644
index 225deab818..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-normal.woff2
deleted file mode 100644
index 7850aa30a0..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-italic.woff
deleted file mode 100644
index 5bb1c0eb9d..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-italic.woff2
deleted file mode 100644
index b4cc88cdc5..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-normal.woff
deleted file mode 100644
index 31daea9e86..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-normal.woff2
deleted file mode 100644
index 354d0a4d32..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-italic.woff
deleted file mode 100644
index 0fd75a5b69..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-italic.woff2
deleted file mode 100644
index 37a865fd16..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-normal.woff
deleted file mode 100644
index e66dea1c29..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-normal.woff2
deleted file mode 100644
index 742e144243..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-italic.woff
deleted file mode 100644
index cb4219c814..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-italic.woff2
deleted file mode 100644
index 62f1935c11..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-normal.woff
deleted file mode 100644
index ab4987a352..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-normal.woff2
deleted file mode 100644
index 57750c4cba..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-italic.woff
deleted file mode 100644
index a5bc05b4cc..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-italic.woff2
deleted file mode 100644
index 5c678d3809..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-normal.woff
deleted file mode 100644
index 7a3649970b..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-normal.woff2
deleted file mode 100644
index 151119ac9b..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-devanagari-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-italic.woff
deleted file mode 100644
index 68218e0a36..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-italic.woff2
deleted file mode 100644
index f43fd413a0..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-normal.woff
deleted file mode 100644
index f0105d9393..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-normal.woff2
deleted file mode 100644
index e59b153706..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-italic.woff
deleted file mode 100644
index ce22b40140..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-italic.woff2
deleted file mode 100644
index 33f40adbcd..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-normal.woff
deleted file mode 100644
index b4285645ad..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-normal.woff2
deleted file mode 100644
index eeacdfe44f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-italic.woff
deleted file mode 100644
index 56b1cd1b2e..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-italic.woff2
deleted file mode 100644
index 0e9e94d46c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-normal.woff
deleted file mode 100644
index 8fca442126..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-normal.woff2
deleted file mode 100644
index 962b734ef6..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-italic.woff
deleted file mode 100644
index bf1e22d9d2..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-italic.woff2
deleted file mode 100644
index 11123368e5..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-normal.woff
deleted file mode 100644
index 31c978ec57..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-normal.woff2
deleted file mode 100644
index b69e0091c2..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-italic.woff
deleted file mode 100644
index 1d56ffe140..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-italic.woff2
deleted file mode 100644
index b995ebb6e0..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-normal.woff
deleted file mode 100644
index 715e749c02..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-normal.woff2
deleted file mode 100644
index c6603368bf..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-italic.woff
deleted file mode 100644
index f7ed8caf1c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-italic.woff2
deleted file mode 100644
index 27331a9cb8..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-normal.woff
deleted file mode 100644
index 5dc9627f1a..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-normal.woff2
deleted file mode 100644
index 921e962b91..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-italic.woff
deleted file mode 100644
index 40f6b16c2b..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-italic.woff2
deleted file mode 100644
index 70974d82d2..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-normal.woff
deleted file mode 100644
index 069f9c2ee8..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-normal.woff2
deleted file mode 100644
index bf022fc77e..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-italic.woff
deleted file mode 100644
index 31bdc9783d..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-italic.woff2
deleted file mode 100644
index d956b75cfd..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-normal.woff
deleted file mode 100644
index 46b74ca10f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-normal.woff2
deleted file mode 100644
index f107b3699f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-italic.woff
deleted file mode 100644
index abfe392350..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-italic.woff2
deleted file mode 100644
index b00cf810c1..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-normal.woff
deleted file mode 100644
index 9cbc383e97..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-normal.woff2
deleted file mode 100644
index 71f96dedc3..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-italic.woff
deleted file mode 100644
index c95e057eb2..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-italic.woff2
deleted file mode 100644
index e05ab2872f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-normal.woff
deleted file mode 100644
index 3b283ccd45..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-normal.woff2
deleted file mode 100644
index 013dcfa373..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-100-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-italic.woff
deleted file mode 100644
index bf618d8979..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-italic.woff2
deleted file mode 100644
index 4737d6715d..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-normal.woff
deleted file mode 100644
index 5cf3cdba8e..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-normal.woff2
deleted file mode 100644
index 7f7277c866..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-200-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-italic.woff
deleted file mode 100644
index 35b2a682ba..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-italic.woff2
deleted file mode 100644
index 3936c46388..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-normal.woff
deleted file mode 100644
index fa1c9ede44..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-normal.woff2
deleted file mode 100644
index d4f44c60cd..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-300-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-italic.woff
deleted file mode 100644
index f04494001b..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-italic.woff2
deleted file mode 100644
index 580055c1e8..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-normal.woff
deleted file mode 100644
index 646c012ba7..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-normal.woff2
deleted file mode 100644
index c871a3e7fc..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-400-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-italic.woff
deleted file mode 100644
index 1ad1cd9f70..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-italic.woff2
deleted file mode 100644
index bcea2301a6..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-normal.woff
deleted file mode 100644
index 449d66db0a..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-normal.woff2
deleted file mode 100644
index ba96dfd0f8..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-500-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-italic.woff
deleted file mode 100644
index 413c6c6848..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-italic.woff2
deleted file mode 100644
index 4d78d07f3f..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-normal.woff
deleted file mode 100644
index 90e06aa5a0..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-normal.woff2
deleted file mode 100644
index 644e5150ea..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-600-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-italic.woff
deleted file mode 100644
index 28c570a5e1..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-italic.woff2
deleted file mode 100644
index 32a50fafd4..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-normal.woff
deleted file mode 100644
index 09abe53787..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-normal.woff2
deleted file mode 100644
index c1ee9a8c81..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-700-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-italic.woff
deleted file mode 100644
index c9b3810481..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-italic.woff2
deleted file mode 100644
index 54a56a92d9..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-normal.woff
deleted file mode 100644
index f3848df007..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-normal.woff2
deleted file mode 100644
index 9fee4bd1bd..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-800-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-italic.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-italic.woff
deleted file mode 100644
index fb8729ec7c..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-italic.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-italic.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-italic.woff2
deleted file mode 100644
index 3d499912d8..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-italic.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-normal.woff b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-normal.woff
deleted file mode 100644
index a00d70814e..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-normal.woff and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-normal.woff2 b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-normal.woff2
deleted file mode 100644
index 86e43dc70a..0000000000
Binary files a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/files/poppins-latin-ext-900-normal.woff2 and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/index.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/index.css
deleted file mode 100644
index 49de948030..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/index.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* poppins-devanagari-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-devanagari-400-normal.woff2) format('woff2'), url(./files/poppins-devanagari-400-normal.woff) format('woff');
- unicode-range: U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF;
-}
-
-/* poppins-latin-ext-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-ext-400-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-400-normal.woff) format('woff');
- unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;
-}
-
-/* poppins-latin-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-400-normal.woff2) format('woff2'), url(./files/poppins-latin-400-normal.woff) format('woff');
- unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-100-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-100-italic.css
deleted file mode 100644
index 308b87c55e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-100-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-100-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-100-italic.woff2) format('woff2'), url(./files/poppins-latin-100-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-100.css
deleted file mode 100644
index ef3f46fefb..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-100-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-100-normal.woff2) format('woff2'), url(./files/poppins-latin-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-200-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-200-italic.css
deleted file mode 100644
index 3dae4110c5..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-200-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-200-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-200-italic.woff2) format('woff2'), url(./files/poppins-latin-200-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-200.css
deleted file mode 100644
index 5613256db0..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-200-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-200-normal.woff2) format('woff2'), url(./files/poppins-latin-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-300-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-300-italic.css
deleted file mode 100644
index a7cd65715c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-300-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-300-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-300-italic.woff2) format('woff2'), url(./files/poppins-latin-300-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-300.css
deleted file mode 100644
index f12e52255f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-300-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-300-normal.woff2) format('woff2'), url(./files/poppins-latin-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-400-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-400-italic.css
deleted file mode 100644
index 97dc9f9cc0..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-400-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-400-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-400-italic.woff2) format('woff2'), url(./files/poppins-latin-400-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-400.css
deleted file mode 100644
index 9a244aa68c..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-400-normal.woff2) format('woff2'), url(./files/poppins-latin-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-500-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-500-italic.css
deleted file mode 100644
index 3bcb85624e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-500-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-500-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-500-italic.woff2) format('woff2'), url(./files/poppins-latin-500-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-500.css
deleted file mode 100644
index 6f4fc44eed..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-500-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-500-normal.woff2) format('woff2'), url(./files/poppins-latin-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-600-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-600-italic.css
deleted file mode 100644
index e37b7ab200..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-600-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-600-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-600-italic.woff2) format('woff2'), url(./files/poppins-latin-600-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-600.css
deleted file mode 100644
index 135ac0b1c4..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-600-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-600-normal.woff2) format('woff2'), url(./files/poppins-latin-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-700-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-700-italic.css
deleted file mode 100644
index 3c2be8bc52..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-700-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-700-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-700-italic.woff2) format('woff2'), url(./files/poppins-latin-700-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-700.css
deleted file mode 100644
index dca4abcef6..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-700-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-700-normal.woff2) format('woff2'), url(./files/poppins-latin-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-800-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-800-italic.css
deleted file mode 100644
index a3bcecf95a..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-800-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-800-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-800-italic.woff2) format('woff2'), url(./files/poppins-latin-800-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-800.css
deleted file mode 100644
index 8ae087b2fb..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-800-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-800-normal.woff2) format('woff2'), url(./files/poppins-latin-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-900-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-900-italic.css
deleted file mode 100644
index 9314239f88..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-900-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-900-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-900-italic.woff2) format('woff2'), url(./files/poppins-latin-900-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-900.css
deleted file mode 100644
index 7c132df8c0..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-900-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-900-normal.woff2) format('woff2'), url(./files/poppins-latin-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-100-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-100-italic.css
deleted file mode 100644
index b2f2ae0f6f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-100-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-100-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-ext-100-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-100-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-100.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-100.css
deleted file mode 100644
index c3b2ecf4d2..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-100.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-100-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-ext-100-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-100-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-200-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-200-italic.css
deleted file mode 100644
index 349aedbe98..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-200-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-200-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-ext-200-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-200-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-200.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-200.css
deleted file mode 100644
index b8fa09a732..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-200.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-200-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-ext-200-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-200-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-300-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-300-italic.css
deleted file mode 100644
index 1a1f9ffe9d..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-300-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-300-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-ext-300-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-300-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-300.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-300.css
deleted file mode 100644
index b4f915d3e2..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-300.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-300-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-ext-300-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-300-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-400-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-400-italic.css
deleted file mode 100644
index 50c494f9f7..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-400-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-400-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-ext-400-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-400-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-400.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-400.css
deleted file mode 100644
index 0d8bf5215a..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-400.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-ext-400-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-400-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-500-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-500-italic.css
deleted file mode 100644
index 590a1a4bd9..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-500-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-500-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-ext-500-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-500-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-500.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-500.css
deleted file mode 100644
index d9f13ad75a..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-500.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-500-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-ext-500-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-500-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-600-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-600-italic.css
deleted file mode 100644
index c3464acbe4..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-600-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-600-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-ext-600-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-600-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-600.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-600.css
deleted file mode 100644
index 238f34f470..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-600.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-600-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-ext-600-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-600-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-700-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-700-italic.css
deleted file mode 100644
index f246207dc8..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-700-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-700-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-ext-700-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-700-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-700.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-700.css
deleted file mode 100644
index c6c53b6ba1..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-700.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-700-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-ext-700-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-700-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-800-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-800-italic.css
deleted file mode 100644
index 0688b3b90e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-800-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-800-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-ext-800-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-800-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-800.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-800.css
deleted file mode 100644
index 9cd696a429..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-800.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-800-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-ext-800-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-800-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-900-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-900-italic.css
deleted file mode 100644
index e774c4cd3f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-900-italic.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-900-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-ext-900-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-900-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-900.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-900.css
deleted file mode 100644
index cf3284f8c1..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-900.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* poppins-latin-ext-900-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-ext-900-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-italic.css
deleted file mode 100644
index d0dacaac7e..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext-italic.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* poppins-latin-ext-100-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-ext-100-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-100-italic.woff) format('woff');
-}
-
-/* poppins-latin-ext-200-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-ext-200-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-200-italic.woff) format('woff');
-}
-
-/* poppins-latin-ext-300-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-ext-300-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-300-italic.woff) format('woff');
-}
-
-/* poppins-latin-ext-400-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-ext-400-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-400-italic.woff) format('woff');
-}
-
-/* poppins-latin-ext-500-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-ext-500-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-500-italic.woff) format('woff');
-}
-
-/* poppins-latin-ext-600-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-ext-600-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-600-italic.woff) format('woff');
-}
-
-/* poppins-latin-ext-700-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-ext-700-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-700-italic.woff) format('woff');
-}
-
-/* poppins-latin-ext-800-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-ext-800-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-800-italic.woff) format('woff');
-}
-
-/* poppins-latin-ext-900-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-ext-900-italic.woff2) format('woff2'), url(./files/poppins-latin-ext-900-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext.css
deleted file mode 100644
index a1fc2904e2..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-ext.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* poppins-latin-ext-100-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-ext-100-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-100-normal.woff) format('woff');
-}
-
-/* poppins-latin-ext-200-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-ext-200-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-200-normal.woff) format('woff');
-}
-
-/* poppins-latin-ext-300-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-ext-300-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-300-normal.woff) format('woff');
-}
-
-/* poppins-latin-ext-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-ext-400-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-400-normal.woff) format('woff');
-}
-
-/* poppins-latin-ext-500-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-ext-500-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-500-normal.woff) format('woff');
-}
-
-/* poppins-latin-ext-600-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-ext-600-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-600-normal.woff) format('woff');
-}
-
-/* poppins-latin-ext-700-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-ext-700-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-700-normal.woff) format('woff');
-}
-
-/* poppins-latin-ext-800-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-ext-800-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-800-normal.woff) format('woff');
-}
-
-/* poppins-latin-ext-900-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-ext-900-normal.woff2) format('woff2'), url(./files/poppins-latin-ext-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-italic.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-italic.css
deleted file mode 100644
index c1a427e36f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin-italic.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* poppins-latin-100-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-100-italic.woff2) format('woff2'), url(./files/poppins-latin-100-italic.woff) format('woff');
-}
-
-/* poppins-latin-200-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-200-italic.woff2) format('woff2'), url(./files/poppins-latin-200-italic.woff) format('woff');
-}
-
-/* poppins-latin-300-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-300-italic.woff2) format('woff2'), url(./files/poppins-latin-300-italic.woff) format('woff');
-}
-
-/* poppins-latin-400-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-400-italic.woff2) format('woff2'), url(./files/poppins-latin-400-italic.woff) format('woff');
-}
-
-/* poppins-latin-500-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-500-italic.woff2) format('woff2'), url(./files/poppins-latin-500-italic.woff) format('woff');
-}
-
-/* poppins-latin-600-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-600-italic.woff2) format('woff2'), url(./files/poppins-latin-600-italic.woff) format('woff');
-}
-
-/* poppins-latin-700-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-700-italic.woff2) format('woff2'), url(./files/poppins-latin-700-italic.woff) format('woff');
-}
-
-/* poppins-latin-800-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-800-italic.woff2) format('woff2'), url(./files/poppins-latin-800-italic.woff) format('woff');
-}
-
-/* poppins-latin-900-italic */
-@font-face {
- font-family: 'Poppins';
- font-style: italic;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-900-italic.woff2) format('woff2'), url(./files/poppins-latin-900-italic.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin.css b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin.css
deleted file mode 100644
index 71ec627b75..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/latin.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* poppins-latin-100-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 100;
- src: url(./files/poppins-latin-100-normal.woff2) format('woff2'), url(./files/poppins-latin-100-normal.woff) format('woff');
-}
-
-/* poppins-latin-200-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 200;
- src: url(./files/poppins-latin-200-normal.woff2) format('woff2'), url(./files/poppins-latin-200-normal.woff) format('woff');
-}
-
-/* poppins-latin-300-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 300;
- src: url(./files/poppins-latin-300-normal.woff2) format('woff2'), url(./files/poppins-latin-300-normal.woff) format('woff');
-}
-
-/* poppins-latin-400-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 400;
- src: url(./files/poppins-latin-400-normal.woff2) format('woff2'), url(./files/poppins-latin-400-normal.woff) format('woff');
-}
-
-/* poppins-latin-500-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 500;
- src: url(./files/poppins-latin-500-normal.woff2) format('woff2'), url(./files/poppins-latin-500-normal.woff) format('woff');
-}
-
-/* poppins-latin-600-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 600;
- src: url(./files/poppins-latin-600-normal.woff2) format('woff2'), url(./files/poppins-latin-600-normal.woff) format('woff');
-}
-
-/* poppins-latin-700-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 700;
- src: url(./files/poppins-latin-700-normal.woff2) format('woff2'), url(./files/poppins-latin-700-normal.woff) format('woff');
-}
-
-/* poppins-latin-800-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 800;
- src: url(./files/poppins-latin-800-normal.woff2) format('woff2'), url(./files/poppins-latin-800-normal.woff) format('woff');
-}
-
-/* poppins-latin-900-normal */
-@font-face {
- font-family: 'Poppins';
- font-style: normal;
- font-display: swap;
- font-weight: 900;
- src: url(./files/poppins-latin-900-normal.woff2) format('woff2'), url(./files/poppins-latin-900-normal.woff) format('woff');
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/metadata.json b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/metadata.json
deleted file mode 100644
index 71f860a6f9..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/metadata.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "id": "poppins",
- "family": "Poppins",
- "subsets": ["devanagari", "latin", "latin-ext"],
- "weights": [100, 200, 300, 400, 500, 600, 700, 800, 900],
- "styles": ["italic", "normal"],
- "defSubset": "latin",
- "variable": false,
- "lastModified": "2022-09-22",
- "version": "v20",
- "category": "sans-serif",
- "license": {
- "type": "OFL-1.1",
- "url": "http://scripts.sil.org/OFL",
- "attribution": "Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)"
- },
- "source": "https://github.com/google/fonts",
- "type": "google"
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/package.json b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/package.json
deleted file mode 100644
index e6ce292e1f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/package.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "@fontsource/poppins",
- "version": "5.0.8",
- "description": "Self-host the Poppins font in a neatly bundled NPM package.",
- "main": "index.css",
- "publishConfig": {"access": "public"},
- "keywords": [
- "fontsource",
- "font",
- "font family",
- "google fonts",
- "poppins",
- "Poppins",
- "css",
- "sass",
- "front-end",
- "web",
- "typeface",
- "variable"
- ],
- "author": "Google Inc.",
- "license": "OFL-1.1",
- "homepage": "https://fontsource.org/fonts/poppins",
- "repository": {
- "type": "git",
- "url": "https://github.com/fontsource/font-files.git",
- "directory": "fonts/google/poppins"
- },
- "publishHash": "237451c862138dbd"
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/scss/metadata.scss b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/scss/metadata.scss
deleted file mode 100644
index 142eec9402..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/scss/metadata.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-$id: 'poppins' !default;
-$family: 'Poppins' !default;
-$category: sans-serif !default;
-$subsets: (devanagari, latin, latin-ext) !default;
-$weights: (100, 200, 300, 400, 500, 600, 700, 800, 900) !default;
-$styles: (italic, normal) !default;
-$axes: null !default;
-$defaults: (
- subset: latin,
- weight: 400,
- style: normal,
- axis: null,
-) !default;
-$unicode: (
- devanagari: (U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF),
- latin-ext: (U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF),
- latin: (U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD),
-) !default;
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/scss/mixins.scss b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/scss/mixins.scss
deleted file mode 100644
index 4d1c6c3aaf..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/scss/mixins.scss
+++ /dev/null
@@ -1,184 +0,0 @@
-@use 'sass:list';
-@use 'sass:map';
-@use 'sass:math';
-@use 'sass:meta';
-@use 'sass:string';
-
-@use 'metadata';
-
-$metadata: meta.module-variables(metadata) !default;
-$directory: null !default;
-
-$family: null !default;
-$display: null !default;
-$formats: null !default;
-$subsets: null !default;
-$weights: null !default;
-$styles: null !default;
-$axes: null !default;
-
-// Deprecated
-$displayVar: null !default;
-
-@mixin generator(
- $metadata: $metadata,
- $directory: $directory,
- $family: $family,
- $display: $display,
- $formats: $formats,
- $subsets: $subsets,
- $weights: $weights,
- $styles: $styles,
- $axes: $axes,
-
- // Deprecated
- $displayVar: $displayVar
-) {
- @if $displayVar != null {
- @warn "$displayVar is deprecated due to the limitation of using css variables in @font-face (https://github.com/fontsource/fontsource/issues/726).";
- }
-
- $isVariable: map.get($metadata, axes) != null;
-
- $directory: if(
- $directory,
- $directory,
- '~@fontsource#{if($isVariable, '-variable', '')}/#{map.get($metadata, id)}/files'
- );
-
- $family: if($family, $family, map.get($metadata, family) + if($isVariable, ' Variable', ''));
- $display: if($display, $display, swap);
- $formats: if(not $formats or $formats == all, if($isVariable, woff2, (woff2, woff)), $formats);
- $subsets: if(
- $subsets,
- if($subsets == all, map.get($metadata, subsets), $subsets),
- map.get($metadata, defaults, subset)
- );
- $weights: if(
- $weights,
- if($weights == all, map.get($metadata, weights), $weights),
- map.get($metadata, defaults, weight)
- );
- $styles: if(
- $styles,
- if($styles == all, map.get($metadata, styles), $styles),
- map.get($metadata, defaults, style)
- );
- $axes: if(
- $axes,
- if($axes == all, full, $axes),
- if($isVariable, if(map.has-key($metadata, axes, wght), wght, full), null)
- );
-
- @each $subset in $subsets {
- @each $unicodeSubset, $unicodeRange in map.get($metadata, unicode) {
- @if (
- ($subset == $unicodeSubset) or
- (
- // Is numeric subset
- ($subset == map.get($metadata, defaults, subset)) and not
- list.index(map.get($metadata, subsets), $unicodeSubset)
- )
- ) {
- @each $weight in if($axes, null, $weights) {
- @each $axis in $axes {
- @each $style in $styles {
- $variant: '#{map.get($metadata, id)}-#{if($unicodeSubset, $unicodeSubset, $subset)}-#{if($axis, $axis, $weight)}-#{$style}';
-
- $src: ();
- @each $format in $formats {
- $src: append(
- $src,
- url('#{$directory}/#{$variant}.#{$format}')
- format('#{$format}#{if($axis, '-variations', '')}'),
- comma
- );
- }
-
- @content ((
- metadata: $metadata,
- directory: $directory,
- family: $family,
- display: $display,
- formats: $formats,
- subsets: $subsets,
- weights: $weights,
- styles: $styles,
- axes: $axes,
-
- variant: $variant,
- subset: $subset,
- unicodeSubset: $unicodeSubset,
- unicodeRange: $unicodeRange,
- weight: $weight,
- axis: $axis,
- style: $style,
-
- font-family: string.quote($family),
- font-style: if(
- (($axis == full) or ($axis == slnt)) and map.has-key($metadata, axes, slnt),
- oblique map.get($metadata, axes, slnt, min) + deg map.get($metadata, axes, slnt, max) + deg,
- $style
- ),
- font-display: $display,
- font-weight: if(
- (($axis == full) or ($axis == wght)) and map.has-key($metadata, axes, wght),
- map.get($metadata, axes, wght, min) map.get($metadata, axes, wght, max),
- $weight
- ),
- font-stretch: if(
- (($axis == full) or ($axis == wdth)) and map.has-key($metadata, axes, wdth),
- '#{map.get($metadata, axes, wdth, min)}% #{map.get($metadata, axes, wdth, max)}%',
- null
- ),
- src: $src,
- unicode-range: $unicodeRange,
- ));
- }
- }
- }
- }
- }
- }
-}
-
-@mixin faces(
- $metadata: $metadata,
- $directory: $directory,
- $family: $family,
- $display: $display,
- $formats: $formats,
- $subsets: $subsets,
- $weights: $weights,
- $styles: $styles,
- $axes: $axes,
-
- // Deprecated
- $displayVar: $displayVar
-) {
- @include generator(
- $metadata: $metadata,
- $directory: $directory,
- $family: $family,
- $display: $display,
- $formats: $formats,
- $subsets: $subsets,
- $weights: $weights,
- $styles: $styles,
- $axes: $axes,
-
- $displayVar: $displayVar
- )
- using ($props) {
- /* #{map.get($props, variant)} */
- @font-face {
- font-family: map.get($props, font-family);
- font-style: map.get($props, font-style);
- font-display: map.get($props, font-display);
- font-weight: map.get($props, font-weight);
- font-stretch: map.get($props, font-stretch);
- unicode-range: map.get($props, unicode-range);
- src: map.get($props, src);
- }
- }
-}
diff --git a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/unicode.json b/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/unicode.json
deleted file mode 100644
index 610c96673f..0000000000
--- a/node_modules/nodebb-theme-harmony/node_modules/@fontsource/poppins/unicode.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "devanagari": "U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FF",
- "latin-ext": "U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF",
- "latin": "U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD"
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/package.json b/node_modules/nodebb-theme-harmony/package.json
deleted file mode 100644
index 37f18b5ea0..0000000000
--- a/node_modules/nodebb-theme-harmony/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "nodebb-theme-harmony",
- "version": "1.2.63",
- "nbbpm": {
- "compatibility": "^3.7.0"
- },
- "description": "Harmony theme for NodeBB",
- "main": "library.js",
- "repository": {
- "type": "git",
- "url": "https://github.com/NodeBB/nodebb-theme-harmony"
- },
- "scripts": {
- "lint": "eslint ."
- },
- "keywords": [
- "nodebb",
- "theme",
- "forum",
- "bootstrap",
- "responsive"
- ],
- "contributors": [
- {
- "name": "Julian Lam",
- "email": "julian@nodebb.org",
- "url": "https://github.com/julianlam"
- },
- {
- "name": "Barış Soner Uşaklı",
- "email": "baris@nodebb.org",
- "url": "https://github.com/barisusakli"
- }
- ],
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/NodeBB/nodebb-theme-harmony/issues"
- },
- "dependencies": {
- "@fontsource/inter": "5.0.15",
- "@fontsource/poppins": "5.0.8"
- },
- "devDependencies": {
- "eslint": "^9.0.0",
- "eslint-config-nodebb": "^0.2.0",
- "eslint-plugin-import": "^2.24.2"
- }
-}
diff --git a/node_modules/nodebb-theme-harmony/plugin.json b/node_modules/nodebb-theme-harmony/plugin.json
deleted file mode 100644
index 9a5bb19183..0000000000
--- a/node_modules/nodebb-theme-harmony/plugin.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "id": "nodebb-theme-harmony",
- "hooks": [
- { "hook": "static:app.load", "method": "init" },
- { "hook": "filter:admin.header.build", "method": "addAdminNavigation" },
- { "hook": "filter:widgets.getAreas", "method": "defineWidgetAreas" },
- { "hook": "filter:config.get", "method": "getThemeConfig" },
- { "hook": "filter:settings.get", "method": "getAdminSettings"},
- { "hook": "filter:user.saveSettings", "method": "saveUserSettings" },
- { "hook": "filter:user.profileMenu", "method": "addProfileItem" },
- { "hook": "filter:middleware.renderHeader", "method": "filterMiddlewareRenderHeader" },
- { "hook": "filter:teasers.configureStripTags", "method": "filterTeasersConfigureStripTags"}
- ],
- "scripts": [
- "public/harmony.js"
- ],
- "modules": {
- "../admin/plugins/harmony.js": "public/admin.js",
- "../client/account/theme.js": "public/settings.js"
- },
- "staticDirs": {
- "inter": "node_modules/@fontsource/inter/files",
- "poppins": "node_modules/@fontsource/poppins/files"
- },
- "languages": "languages"
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/public/.eslintrc b/node_modules/nodebb-theme-harmony/public/.eslintrc
deleted file mode 100644
index a3ce8297a6..0000000000
--- a/node_modules/nodebb-theme-harmony/public/.eslintrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "nodebb/public"
-}
diff --git a/node_modules/nodebb-theme-harmony/public/admin.js b/node_modules/nodebb-theme-harmony/public/admin.js
deleted file mode 100644
index 6df37a7156..0000000000
--- a/node_modules/nodebb-theme-harmony/public/admin.js
+++ /dev/null
@@ -1,15 +0,0 @@
-'use strict';
-
-define('admin/plugins/harmony', ['settings'], function (Settings) {
- var ACP = {};
-
- ACP.init = function () {
- Settings.load('harmony', $('.harmony-settings'));
-
- $('#save').on('click', function () {
- Settings.save('harmony', $('.harmony-settings'));
- });
- };
-
- return ACP;
-});
diff --git a/node_modules/nodebb-theme-harmony/public/harmony.js b/node_modules/nodebb-theme-harmony/public/harmony.js
deleted file mode 100644
index 63870554f3..0000000000
--- a/node_modules/nodebb-theme-harmony/public/harmony.js
+++ /dev/null
@@ -1,287 +0,0 @@
-'use strict';
-
-$(document).ready(function () {
- setupSkinSwitcher();
- setupNProgress();
- setupMobileMenu();
- setupSearch();
- setupDrafts();
- handleMobileNavigator();
- setupNavTooltips();
- fixPlaceholders();
- fixSidebarOverflow();
-
- function setupSkinSwitcher() {
- $('[component="skinSwitcher"]').on('click', '.dropdown-item', function () {
- const skin = $(this).attr('data-value');
- $('[component="skinSwitcher"] .dropdown-item .fa-check').addClass('invisible');
- $(this).find('.fa-check').removeClass('invisible');
- require(['forum/account/settings', 'hooks'], function (accountSettings, hooks) {
- hooks.one('action:skin.change', function () {
- $('[component="skinSwitcher"] [component="skinSwitcher/icon"]').removeClass('fa-fade');
- });
- $('[component="skinSwitcher"] [component="skinSwitcher/icon"]').addClass('fa-fade');
- accountSettings.changeSkin(skin);
- });
- });
- }
-
- require(['hooks'], function (hooks) {
- $(window).on('action:composer.resize action:sidebar.toggle', function () {
- const isRtl = $('html').attr('data-dir') === 'rtl';
- const css = {
- width: $('#panel').width(),
- };
- const sidebarEl = $('.sidebar-left');
- css[isRtl ? 'right' : 'left'] = sidebarEl.is(':visible') ? sidebarEl.outerWidth(true) : 0;
- $('[component="composer"]').css(css);
- });
-
- hooks.on('filter:chat.openChat', function (hookData) {
- // disables chat modals & goes straight to chat page based on user setting
- hookData.modal = config.theme.chatModals && !utils.isMobile();
- return hookData;
- });
- });
-
- function setupMobileMenu() {
- require(['hooks', 'api', 'navigator'], function (hooks, api, navigator) {
- $('[component="sidebar/toggle"]').on('click', async function () {
- const sidebarEl = $('.sidebar');
- sidebarEl.toggleClass('open');
- if (app.user.uid) {
- await api.put(`/users/${app.user.uid}/settings`, {
- settings: {
- openSidebars: sidebarEl.hasClass('open') ? 'on' : 'off',
- },
- });
- }
- $(window).trigger('action:sidebar.toggle');
- if (ajaxify.data.template.topic) {
- hooks.fire('action:navigator.update', { newIndex: navigator.getIndex() });
- }
- });
-
- const bottomBar = $('[component="bottombar"]');
- const $body = $('body');
- const $window = $(window);
- $body.on('shown.bs.dropdown hidden.bs.dropdown', '.sticky-tools', function () {
- bottomBar.toggleClass('hidden', $(this).find('.dropdown-menu.show').length);
- });
- function isSearchVisible() {
- return !!$('[component="bottombar"] [component="sidebar/search"] .search-dropdown.show').length;
- }
-
- let lastScrollTop = 0;
- let newPostsLoaded = false;
-
- function onWindowScroll() {
- const st = $window.scrollTop();
- if (newPostsLoaded) {
- newPostsLoaded = false;
- lastScrollTop = st;
- return;
- }
- if (st !== lastScrollTop && !navigator.scrollActive && !isSearchVisible()) {
- const diff = Math.abs(st - lastScrollTop);
- const scrolledDown = st > lastScrollTop;
- const scrolledUp = st < lastScrollTop;
- if (diff > 5) {
- bottomBar.css({
- bottom: !scrolledUp && scrolledDown ?
- -bottomBar.find('.bottombar-nav').outerHeight(true) :
- 0,
- });
- }
- }
- lastScrollTop = st;
- }
-
- const delayedScroll = utils.throttle(onWindowScroll, 250);
- function enableAutohide() {
- $window.off('scroll', delayedScroll);
- if (config.theme.autohideBottombar) {
- lastScrollTop = $window.scrollTop();
- $window.on('scroll', delayedScroll);
- }
- }
-
- hooks.on('action:posts.loading', function () {
- $window.off('scroll', delayedScroll);
- });
- hooks.on('action:posts.loaded', function () {
- newPostsLoaded = true;
- setTimeout(enableAutohide, 250);
- });
- hooks.on('action:ajaxify.end', function () {
- $window.off('scroll', delayedScroll);
- bottomBar.css({ bottom: 0 });
- setTimeout(enableAutohide, 250);
- });
- });
- }
-
- function setupSearch() {
- $('[component="sidebar/search"]').on('shown.bs.dropdown', function () {
- $(this).find('[component="search/fields"] input[name="query"]').trigger('focus');
- });
- }
-
- function setupDrafts() {
- require(['composer/drafts', 'bootbox'], function (drafts, bootbox) {
- const draftsEl = $('[component="sidebar/drafts"]');
-
- function updateBadgeCount() {
- const count = drafts.getAvailableCount();
- if (count > 0) {
- draftsEl.removeClass('hidden');
- }
- $('[component="drafts/count"]').toggleClass('hidden', count <= 0).text(count);
- }
-
- async function renderDraftList() {
- const draftListEl = $('[component="drafts/list"]');
- const draftItems = drafts.listAvailable();
- if (!draftItems.length) {
- draftListEl.find('.no-drafts').removeClass('hidden');
- draftListEl.find('.placeholder-wave').addClass('hidden');
- draftListEl.find('.draft-item-container').html('');
- return;
- }
- draftItems.reverse().forEach((draft) => {
- if (draft) {
- if (draft.title) {
- draft.title = utils.escapeHTML(String(draft.title));
- }
- draft.text = utils.escapeHTML(
- draft.text
- ).replace(/(?:\r\n|\r|\n)/g, '
');
- }
- });
-
- const html = await app.parseAndTranslate('partials/sidebar/drafts', 'drafts', { drafts: draftItems });
- draftListEl.find('.no-drafts').addClass('hidden');
- draftListEl.find('.placeholder-wave').addClass('hidden');
- draftListEl.find('.draft-item-container').html(html).find('.timeago').timeago();
- }
-
-
- draftsEl.on('shown.bs.dropdown', renderDraftList);
-
- draftsEl.on('click', '[component="drafts/open"]', function () {
- drafts.open($(this).attr('data-save-id'));
- });
-
- draftsEl.on('click', '[component="drafts/delete"]', function () {
- const save_id = $(this).attr('data-save-id');
- bootbox.confirm('[[modules:composer.discard-draft-confirm]]', function (ok) {
- if (ok) {
- drafts.removeDraft(save_id);
- renderDraftList();
- }
- });
- return false;
- });
-
- $(window).on('action:composer.drafts.save', updateBadgeCount);
- $(window).on('action:composer.drafts.remove', updateBadgeCount);
- updateBadgeCount();
- });
- }
-
- function setupNProgress() {
- require(['nprogress'], function (NProgress) {
- window.nprogress = NProgress;
- if (NProgress) {
- $(window).on('action:ajaxify.start', function () {
- NProgress.set(0.7);
- });
-
- $(window).on('action:ajaxify.end', function () {
- NProgress.done(true);
- });
- }
- });
- }
-
- function handleMobileNavigator() {
- const paginationBlockEl = $('.pagination-block');
- require(['hooks'], function (hooks) {
- hooks.on('action:ajaxify.end', function () {
- paginationBlockEl.find('.dropdown-menu.show').removeClass('show');
- });
- hooks.on('filter:navigator.scroll', function (hookData) {
- paginationBlockEl.find('.dropdown-menu.show').removeClass('show');
- return hookData;
- });
- });
- }
-
- function setupNavTooltips() {
- // remove title from user icon in sidebar to prevent double tooltip
- $('.sidebar [component="header/avatar"] .avatar').removeAttr('title');
- const tooltipEls = $('.sidebar [title]');
- const lefttooltipEls = $('.sidebar-left [title]');
- const rightooltipEls = $('.sidebar-right [title]');
- const isRtl = $('html').attr('data-dir') === 'rtl';
- lefttooltipEls.tooltip({
- trigger: 'manual',
- animation: false,
- placement: isRtl ? 'left' : 'right',
- });
- rightooltipEls.tooltip({
- trigger: 'manual',
- animation: false,
- placement: isRtl ? 'right' : 'left',
- });
-
- tooltipEls.on('mouseenter', function (ev) {
- const target = $(ev.target);
- const isDropdown = target.hasClass('dropdown-menu') || !!target.parents('.dropdown-menu').length;
- if (!$('.sidebar').hasClass('open') && !isDropdown) {
- $(this).tooltip('show');
- }
- });
- tooltipEls.on('click mouseleave', function () {
- $(this).tooltip('hide');
- });
- }
-
- function fixPlaceholders() {
- if (!config.loggedIn) {
- return;
- }
- ['notifications', 'chat'].forEach((type) => {
- const countEl = document.querySelector(`[component="${type}/count"]`);
- if (!countEl) {
- return;
- }
- const count = parseInt(countEl.innerText, 10);
- if (count > 1) {
- const listEls = document.querySelectorAll(`[component="${type}/list"]`);
- listEls.forEach((listEl) => {
- const placeholder = listEl.querySelector('*');
- if (placeholder) {
- for (let x = 0; x < count - 1; x++) {
- const cloneEl = placeholder.cloneNode(true);
- listEl.insertBefore(cloneEl, placeholder);
- }
- }
- });
- }
- });
- }
-
- function fixSidebarOverflow() {
- // overflow-y-auto needs to be removed on main-nav when dropdowns are opened
- const mainNavEl = $('#main-nav');
- function toggleOverflow() {
- mainNavEl.toggleClass(
- 'overflow-y-auto',
- !mainNavEl.find('.dropdown-menu.show').length
- );
- }
- mainNavEl.on('shown.bs.dropdown', toggleOverflow)
- .on('hidden.bs.dropdown', toggleOverflow);
- }
-});
diff --git a/node_modules/nodebb-theme-harmony/public/settings.js b/node_modules/nodebb-theme-harmony/public/settings.js
deleted file mode 100644
index e677db7fe0..0000000000
--- a/node_modules/nodebb-theme-harmony/public/settings.js
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-
-define('forum/account/theme', ['forum/account/header', 'api', 'settings', 'alerts'], function (header, api, settings, alerts) {
- const Theme = {};
-
- Theme.init = () => {
- header.init();
- Theme.setupForm();
- };
-
- Theme.setupForm = () => {
- const saveEl = document.getElementById('save');
- if (saveEl) {
- const formEl = document.getElementById('theme-settings');
- saveEl.addEventListener('click', async () => {
- const themeSettings = settings.helper.serializeForm($(formEl));
- await api.put(`/users/${ajaxify.data.uid}/settings`, {
- settings: {
- ...themeSettings,
- },
- });
- if (ajaxify.data.isSelf) {
- config.theme = (await api.get('/api/config')).theme;
- }
- alerts.success('[[success:settings-saved]]');
- });
- }
- };
-
- return Theme;
-});
diff --git a/node_modules/nodebb-theme-harmony/renovate.json b/node_modules/nodebb-theme-harmony/renovate.json
deleted file mode 100644
index 39a2b6e9a5..0000000000
--- a/node_modules/nodebb-theme-harmony/renovate.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "$schema": "https://docs.renovatebot.com/renovate-schema.json",
- "extends": [
- "config:base"
- ]
-}
diff --git a/node_modules/nodebb-theme-harmony/screenshot.png b/node_modules/nodebb-theme-harmony/screenshot.png
deleted file mode 100644
index 1f8908da19..0000000000
Binary files a/node_modules/nodebb-theme-harmony/screenshot.png and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/screenshots/categories.png b/node_modules/nodebb-theme-harmony/screenshots/categories.png
deleted file mode 100644
index 7cae6309a1..0000000000
Binary files a/node_modules/nodebb-theme-harmony/screenshots/categories.png and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/screenshots/recent.png b/node_modules/nodebb-theme-harmony/screenshots/recent.png
deleted file mode 100644
index 9551a27575..0000000000
Binary files a/node_modules/nodebb-theme-harmony/screenshots/recent.png and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/screenshots/topic.png b/node_modules/nodebb-theme-harmony/screenshots/topic.png
deleted file mode 100644
index 3e5c92cf55..0000000000
Binary files a/node_modules/nodebb-theme-harmony/screenshots/topic.png and /dev/null differ
diff --git a/node_modules/nodebb-theme-harmony/scss/account.scss b/node_modules/nodebb-theme-harmony/scss/account.scss
deleted file mode 100644
index 0a318b3e1e..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/account.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-.page-user.page-status-200 #panel {
- margin-top: 0px!important;
-}
-.account {
- margin-top: 200px;
-
- @include media-breakpoint-up(md) {
- margin-top: 300px;
- }
-
- .categories {
- [component="categories/category"] {
- $category-pad: 50;
- @for $i from 1 through 6 {
- .depth-#{$i} {
- padding-left: #{$category-pad * $i}px;
- }
- }
- }
- }
-}
-
-[component="group/badge/item"]:first-child [component="group/order/up"],
-[component="group/badge/item"]:last-child [component="group/order/down"] {
- opacity: 0.65;
- pointer-events: none;
-}
diff --git a/node_modules/nodebb-theme-harmony/scss/category.scss b/node_modules/nodebb-theme-harmony/scss/category.scss
deleted file mode 100644
index 41bff4d4eb..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/category.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-.category-header .description p { margin: 0; }
-.page-category .breadcrumb .breadcrumb-item:last-child {
- display: none;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/chats.scss b/node_modules/nodebb-theme-harmony/scss/chats.scss
deleted file mode 100644
index e0c5f49a96..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/chats.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-// themes have a different layout so each one needs this block to set height to 100%
-body.page-user-chats {
- > .layout-container {
- height: 100%;
- > #panel {
- height: 100%;
- > .container {
- height: 100%;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/common.scss b/node_modules/nodebb-theme-harmony/scss/common.scss
deleted file mode 100644
index b78ceea634..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/common.scss
+++ /dev/null
@@ -1,130 +0,0 @@
-
-html {
- height: 100%;
-}
-
-body {
- overflow-y: scroll;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- text-rendering: optimizeLegibility;
-}
-
-// fixes chrome font boosting :/ https://stackoverflow.com/questions/13430897/how-to-override-font-boosting-in-mobile-chrome
-body * {
- max-height:1000000px;
- text-size-adjust: none;
- -webkit-text-size-adjust: none;
- -moz-text-size-adjust: none;
-}
-
-hr {
- border-top-color: var(--bs-border-color);
- opacity: 1;
-}
-
-.ff-base { font-family: $font-family-base !important; }
-.ff-sans { font-family: $font-family-sans-serif !important; }
-.ff-secondary { font-family: $font-family-secondary; }
-.tracking-tight { letter-spacing: -0.02em; }
-
-.caret {
- &::after {
- border: none;
- font-family: "FontAwesome";
- content: "\f078";
- }
-}
-
-.placeholder-wave {
- opacity: 0.5;
-}
-
-.bg-card-cap {
- --bs-bg-opacity: 1;
- background-color: $card-cap-bg!important;
-}
-
-blockquote {
- $bq-border-color: mix($light, $dark, 75%);
- @extend .text-bg-light;
- font-style: normal;
- border-left: 2px solid $bq-border-color;
- padding: 1rem;
- p:last-child {
- margin-bottom: 0;
- }
- .toggle {
- border-color: $bq-border-color!important;
- }
-}
-
-body:not(.page-user) {
- #content {
- transition: opacity 150ms linear;
- &.ajaxifying {
- -moz-opacity: 0;
- opacity: 0;
- }
- }
-}
-.page-user {
- #content {
- transition: opacity 150ms linear;
- &.ajaxifying .account-content {
- transition: opacity 150ms linear;
- -moz-opacity: 0;
- opacity: 0;
- }
- }
-}
-
-.sticky-tools {
- position: sticky;
- z-index: 3;
- top: 0;
- padding: 0.25rem 0;
-}
-// quartz doesn't need body-bg for tool background
-.skin-quartz .sticky-tools {
- background-color: initial;
-}
-
-.btn-link {
- &:hover, &.active {
- background-color: var(--btn-ghost-hover-color);
- text-decoration: none;
- }
-}
-
-.flex-basis-md-200 {
- @include media-breakpoint-up(md) {
- flex-basis: 200px!important;
- }
-}
-
-.markdown-highlight {
- @extend .shadow-sm;
- @extend .border;
-}
-
-[component="chat/message/body"], [component="post/content"] {
- .img-fluid {
- @extend .shadow-sm;
- padding: $spacer * 0.5;
- margin: $spacer * 0.5 0;
- border: 1px solid $border-color;
- background-color: $light;
- border-radius: $border-radius-sm;
- max-height: 500px;
- width: auto;
- }
-}
-
-[component="chat/message/body"],
-[component="post/content"],
-[component="topic/teaser"] .post-content,
-[component="category/posts"] .post-content,
-.post-queue.posts-list .post-content {
- a { text-decoration: underline;}
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/fonts.scss b/node_modules/nodebb-theme-harmony/scss/fonts.scss
deleted file mode 100644
index 5d3ae65fa9..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/fonts.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-@use "@fontsource/inter/scss/mixins" as Inter;
-@use "@fontsource/poppins/scss/mixins" as Poppins;
-
-$weights: $font-weight-light, $font-weight-normal, $font-weight-semibold, $font-weight-bold;
-$subsets: (latin, latin-ext);
-$font-path: "./plugins/nodebb-theme-harmony" !default;
-
-@include Inter.faces(
- $weights: $weights,
- $subsets: $subsets,
- $display: fallback,
- $directory: "#{$font-path}/inter"
-);
-@include Poppins.faces(
- $weights: $weights,
- $subsets: $subsets,
- $display: fallback,
- $directory: "#{$font-path}/poppins"
-);
diff --git a/node_modules/nodebb-theme-harmony/scss/groups.scss b/node_modules/nodebb-theme-harmony/scss/groups.scss
deleted file mode 100644
index 914e3fce90..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/groups.scss
+++ /dev/null
@@ -1,22 +0,0 @@
-.template-groups-details #panel {
- margin-top: 0px!important;
-}
-
-.group-hover-bg {
- $hover-color: mix($light, $dark, 97%);
- $border-color: mix($light, $dark, 90%);
- .card-body {
- border-color: $border-color!important;
- }
- &:hover {
- background-color: $hover-color;
- }
-}
-
-.groups.details {
- margin-top: 200px;
-
- @include media-breakpoint-up(md) {
- margin-top: 300px;
- }
-}
diff --git a/node_modules/nodebb-theme-harmony/scss/harmony.scss b/node_modules/nodebb-theme-harmony/scss/harmony.scss
deleted file mode 100644
index f209a54f5e..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/harmony.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-@import "fonts";
-@import "mixins";
-@import "common";
-
-@import "header";
-@import "topic";
-@import "category";
-@import "chats";
-@import "sidebar";
-@import "status";
-@import "account";
-@import "groups";
-@import "modals";
-
-@import "modules/breadcrumbs";
-@import "modules/tags";
-@import "modules/user-menu";
-@import "modules/bottom-sheet";
-@import "modules/topic-navigator";
-@import "modules/topics-list";
-@import "modules/cover";
-@import "modules/nprogress";
-@import "modules/paginator";
-@import "modules/filters";
-
-@import "skins";
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/header.scss b/node_modules/nodebb-theme-harmony/scss/header.scss
deleted file mode 100644
index a64d632c11..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/header.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-// hide brand/title on user and group details pages so it doesnt break covers
-body[class*="template-account-"], .template-chats, .template-groups-details {
- .brand-container {
- display: none;
- }
-}
-[component="brand/wrapper"] {
- &:hover {
- background-color: $card-cap-bg;
- }
-}
-
-[component="brand/logo"] {
- max-height: 48px;
- width: auto;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/mixins.scss b/node_modules/nodebb-theme-harmony/scss/mixins.scss
deleted file mode 100644
index 641b38bb7b..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/mixins.scss
+++ /dev/null
@@ -1,177 +0,0 @@
-@mixin topic-avatars() {
- .icon .avatar, .timeline-badge {
- z-index: 1;
-
- line-height: calc(var(--avatar-size) - 4px);
- }
-
- [component="user/status"] {
- top: 20px;
- left: 12px;
-
- z-index: 2;
- }
-
- @include media-breakpoint-up(sm) {
- [component="user/status"] {
- padding: 5px;
- top: 36px;
- left: 36px;
- }
- }
-}
-
-@mixin timeline-style() {
- > [component="post"], .timeline-event, > [component="post/placeholder"] {
- position: relative; // for absolutely positioned pseudo-element, below
- border: 0;
- margin-left: 1.5rem;
- transition: border-color 1s ease-out;
-
- &:first-child {
- &:before {
- content: '';
- position: absolute;
- top: 0;
- height: 16px;
- width: 16px;
- background-color: $border-color;
- border-radius: 100%;
- transform: translate(calc(-50% - .5px), -100%);
- transition: background-color 1s ease-out;
- }
-
- &.highlight:before {
- background-color: $primary;
- }
- }
-
- &:last-child {
- padding-bottom: 2rem;
-
- &:after {
- content: '';
- position: absolute;
- bottom: 0;
- height: 16px;
- width: 16px;
- background-color: $border-color;
- border-radius: 100%;
- transform: translate(calc(-50% - .5px), 100%);
- transition: background-color 1s ease-out;
- }
-
- &.highlight:after {
- background-color: $primary;
- }
- }
-
- > div:first-of-type {
- margin-left: -1.5rem;
- }
-
- &.highlight {
- .bookmarked {
- opacity: 1 !important;
- }
- }
-
- @include topic-avatars();
- }
-
- [component="topic/event"], [component="topic/necro-post"] {
- &.timeline-event {
- text-align: left;
- justify-content: left;
- font-size: 1em;
-
- .timeline-badge {
- display: flex;
- align-items: center;
- justify-content: center;
- flex-shrink: 0;
-
- width: 20px;
- height: 20px;
- padding: 0;
- margin-right: 1rem;
- color: $gray-500;
- background-color: $body-bg;
- }
-
- .timeline-text {
- line-height: 32px;
- text-transform: initial;
- }
- }
- }
-
- @include media-breakpoint-down(sm) {
- > [component="post"], .timeline-event {
- &:first-child:before, &:last-child:after {
- display: none;
- }
- }
-
- [component="post"] {
- margin-left: initial;
- > div:not(.content) {
- margin-left: 0;
- }
- }
-
- [component="post"]:last-child:after {
- display: none;
- }
-
-
- [component="topic/event"], [component="topic/necro-post"] {
- &.timeline-event {
- .timeline-text {
- line-height: 16px;
- font-size: 0.75rem;
- }
- }
- }
- }
-
- @include media-breakpoint-up(sm) {
- > [component="post"], .timeline-event, > [component="post/placeholder"] {
- border-left: 2px solid $border-color;
-
- &.highlight {
- border-left: 2px solid $primary;
- }
- }
-
- .timeline-event {
- margin-left: 1.5rem;
-
- [component="topic/event/delete"] {
- visibility: hidden;
- }
-
- &:hover {
- [component="topic/event/delete"] {
- visibility: visible;
-
- &:hover {
- color: $danger;
- }
- }
- }
- }
-
- [component="topic/event"], [component="topic/necro-post"] {
- &.timeline-event .timeline-badge {
- width: 24px;
- height: 24px;
- padding: 0;
- margin-left: -0.75rem;
- margin-right: 1.25rem;
- border: 2px solid $border-color;
- border-radius: 50%;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/modals.scss b/node_modules/nodebb-theme-harmony/scss/modals.scss
deleted file mode 100644
index 201cfb5229..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modals.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-.tool-modal {
- @include media-breakpoint-up(md) {
- bottom: $spacer * 3;
- right: $spacer * 4;
- }
-}
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/bottom-sheet.scss b/node_modules/nodebb-theme-harmony/scss/modules/bottom-sheet.scss
deleted file mode 100644
index 339e000a8b..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/bottom-sheet.scss
+++ /dev/null
@@ -1,52 +0,0 @@
-.bottom-sheet {
- @include media-breakpoint-down(md) {
- .dropdown-menu {
- display: block;
- visibility: hidden;
-
- position: fixed!important;
- inset: auto 0 0 0!important;
-
- margin: 0 -1px -1px -1px;
- padding: $spacer * 0.25 !important;
- max-height: 60%;
-
- box-shadow: 0 2px 6px rgba(0,0,0,0.35);
- overflow: auto;
- -webkit-overflow-scrolling: touch;
- transform: translate3d(0, 350px, 0);
- transition: transform 0.3s, visibility 0s 0.3s;
- z-index: $zindex-popover;
- padding: 5px 0 10px;
-
- border-radius: 0;
- border: 0px;
- border-top: 1px solid $border-color;
-
- > li {
- > a, .dropdown-item {
- padding: 10px 20px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
-
- &.divider {
- padding: 0;
- }
- }
- }
-
- .dropdown-menu.show {
- transform: none!important;
- visibility: visible;
- transition-delay: 0s;
- top: auto;
- width: auto;
- }
-
- .dropdown-backdrop {
- background-color: rgba(0, 0, 0, .3);
- }
- }
-}
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/breadcrumbs.scss b/node_modules/nodebb-theme-harmony/scss/modules/breadcrumbs.scss
deleted file mode 100644
index 6f7d855138..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/breadcrumbs.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-.breadcrumb .breadcrumb-item {
- font-family: $font-family-secondary;
-
- &::before {
- font-family: $font-family-sans-serif;
- font-weight: $font-weight-semibold;
- font-size: $small-font-size;
- line-height: $h4-font-size;
- }
-
- a, span {
- color: $body-color;
- font-size: $small-font-size;
- line-height: 16px;
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/cover.scss b/node_modules/nodebb-theme-harmony/scss/modules/cover.scss
deleted file mode 100644
index acdd601c03..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/cover.scss
+++ /dev/null
@@ -1,105 +0,0 @@
-// used in group and account pages
-.cover {
- background-size: cover;
- background-repeat: no-repeat;
- height: 200px;
- position: absolute;
- background-origin: content-box;
- width: 100%;
- top: var(--panel-offset);
- left: auto;
- right: 0px;
-
- &:hover {
- .controls {
- opacity: 1;
- }
- }
-
- .controls {
- height: 200px;
- line-height: 200px;
- opacity: 0;
- @include transition(opacity .15s linear);
- cursor: pointer;
- pointer-events: none;
-
- > * {
- pointer-events: all;
- }
- }
-
- &.active {
- &:hover {
- cursor: move;
- }
-
- .controls {
- > * {
- display: none;
- }
- }
-
- .save {
- display: inline-block;
- }
- }
-
- &.saving {
- .save {
- display: none;
- }
-
- .indicator {
- display: inline-block;
- }
- }
-
- .save, .indicator {
- display: inline-block;
- position: absolute;
- top: 1em;
- right: 2em;
- opacity: 1;
- padding: 0.5em;
- font-weight: bold;
-
- &:hover {
- cursor: pointer;
- }
- }
-
- .save {
- display: none;
- }
-
- .indicator {
- display: none;
- }
-}
-
-.cover > .container {
- height: 200px;
- position: relative;
- pointer-events: none;
- .save {
- pointer-events: all;
- }
- .controls {
- pointer-events: none;
- > * {
- pointer-events: all;
- }
- }
-}
-
-@include media-breakpoint-up(md) {
- .cover, .cover > .container {
- height: 300px;
-
- .controls {
- height: 300px;
- line-height: 300px;
- }
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/filters.scss b/node_modules/nodebb-theme-harmony/scss/modules/filters.scss
deleted file mode 100644
index 1f70620d48..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/filters.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-[component="search/filters"], [component="flags/filters"] {
- .filter-btn {
- border-color: $gray-300!important;
- &.active-filter {
- border-color: $primary!important;
- }
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/nprogress.scss b/node_modules/nodebb-theme-harmony/scss/modules/nprogress.scss
deleted file mode 100644
index a576b32d44..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/nprogress.scss
+++ /dev/null
@@ -1,80 +0,0 @@
-#nprogress {
- pointer-events: none;
-}
-
-$nprogress-color: $primary;
-
-#nprogress .bar {
- background: $nprogress-color;
- position: fixed;
- z-index: 1031;
- top: 0;
- left: 0;
- width: 100%;
- height: 2px;
-}
-
-#nprogress .peg {
- display: block;
- position: absolute;
- right: 0px;
- width: 100px;
- height: 100%;
- box-shadow: 0 0 10px $nprogress-color, 0 0 5px $nprogress-color;
- opacity: 1.0;
-
- -webkit-transform: rotate(3deg) translate(0px, -4px);
- -ms-transform: rotate(3deg) translate(0px, -4px);
- transform: rotate(3deg) translate(0px, -4px);
-}
-
-#nprogress .spinner {
- display: none;
- position: fixed;
- z-index: 1031;
- top: 15px;
- right: 15px;
-}
-
-@include media-breakpoint-down(sm) {
- #nprogress .spinner {
- bottom: 15px;
- right: 15px;
- top: initial;
- }
-}
-
-
-#nprogress .spinner-icon {
- width: 18px;
- height: 18px;
- box-sizing: border-box;
-
- border: solid 2px transparent;
- border-top-color: $nprogress-color;
- border-left-color: $nprogress-color;
- border-radius: 50%;
-
- -webkit-animation: nprogress-spinner 400ms linear infinite;
- animation: nprogress-spinner 400ms linear infinite;
-}
-
-.nprogress-custom-parent {
- overflow: hidden;
- position: relative;
-}
-
-.nprogress-custom-parent #nprogress .spinner,
-.nprogress-custom-parent #nprogress .bar {
- position: absolute;
-}
-
-@-webkit-keyframes nprogress-spinner {
- 0% { -webkit-transform: rotate(0deg); }
- 100% { -webkit-transform: rotate(360deg); }
-}
-@keyframes nprogress-spinner {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/paginator.scss b/node_modules/nodebb-theme-harmony/scss/modules/paginator.scss
deleted file mode 100644
index 1689c8e49b..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/paginator.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-.skin-noskin [component="pagination"] {
- .page-item.active:not(.disabled) .page-link {
- color: $body-color;
- background-color: $gray-300;
- border-color: $gray-300;
- }
-
- .page-item:not(.disabled):hover .page-link {
- color: $body-color;
- }
-}
-
-[component="pagination"] {
- .page-item.active:not(.disabled) .page-link {
- color: $pagination-active-color;
- }
- .page-item:not(.disabled):hover .page-link {
- color: $pagination-hover-color;
- background-color: $pagination-hover-bg;
- }
- .page-item:not(.disabled) .page-link {
- color: $body-color;
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/tags.scss b/node_modules/nodebb-theme-harmony/scss/modules/tags.scss
deleted file mode 100644
index f1217aa621..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/tags.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-.tag-list {
- .tag {
- background-color: $gray-200!important;
- color: $gray-700!important;
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/topic-navigator.scss b/node_modules/nodebb-theme-harmony/scss/modules/topic-navigator.scss
deleted file mode 100644
index 35d6be6c1a..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/topic-navigator.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-.pagination-block { display: none; }
-
-body.template-topic {
- // used for both sidebar and bottom bar pagination-block
- .pagination-block {
- display: block;
- transition: opacity 250ms ease-in;
- opacity: 0;
- &.ready {
- opacity: 1;
- }
- &.noreplies {
- pointer-events: none;
- cursor: none;
- }
- }
-}
-
-.topic .pagination-block {
- .scroller-content {
- min-width: 170px;
- }
- .scroller-container {
- left: 10px;
- height: 300px;
- border-left: 2px solid $border-color;
-
- .scroller-thumb {
- left: -5px;
- &:not(.active) {
- transition: top 100ms linear;
- }
- cursor: grab;
- &.active {
- cursor: grabbing;
- }
- }
-
- .unread {
- width: 1px;
- height: 0; // initial
- bottom: 0;
- background: $primary;
- transition: $transition-base;
- left: -1px;
-
- .meta {
- left: 5px;
- font-size: 13px;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/topics-list.scss b/node_modules/nodebb-theme-harmony/scss/modules/topics-list.scss
deleted file mode 100644
index 6ce124bead..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/topics-list.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-ul.topics-list, ul.categories-list {
- li {
- &.deleted {
- .meta, .topic-thumbs { display: none!important; }
- opacity: 0.65;
- }
-
- &.selected {
- background-color: mix($body-bg, $body-color, 90%);
- [component="topic/select"] {
- color: $success!important;
- visibility: visible;
- }
- }
- p {
- margin: 0 !important;
- }
-
- // all other skins use link-color for unread titles
- &.unread .title {
- color: $link-color;
- }
-
- .ui-sortable-handle {
- cursor: move;
- }
-
- // if only one thumb don't display
- [data-numthumbs="1"] { display: none; }
- }
-}
-
-// on default skin use primary color for unread titles
-.skin-noskin {
- ul.topics-list, ul.categories-list {
- li.unread .title {
- color: $primary;
- }
- }
-}
diff --git a/node_modules/nodebb-theme-harmony/scss/modules/user-menu.scss b/node_modules/nodebb-theme-harmony/scss/modules/user-menu.scss
deleted file mode 100644
index cda2ac064b..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/modules/user-menu.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-[component="header/usercontrol"] {
- [component="header/profilelink"] > div, .user-status > div {
- min-width: 1.25em; // match fontawesome fixed width
- }
- .user-status i.fa-check {
- display: none;
- }
- .user-status.selected i.fa-check {
- display: block;
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/overrides.scss b/node_modules/nodebb-theme-harmony/scss/overrides.scss
deleted file mode 100644
index 49de2660b7..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/overrides.scss
+++ /dev/null
@@ -1,64 +0,0 @@
-// only overrides to bs5 variables here
-
-// Harmony colours
-$white: #fff !default;
-$gray-100: #f8f9fa !default;
-$gray-200: #e9ecef !default;
-$gray-300: #dee2e6 !default;
-$gray-400: #ced4da !default;
-$gray-500: #adb5bd !default;
-$gray-600: #6c757d !default;
-$gray-700: #495057 !default;
-$gray-800: #343a40 !default;
-$gray-900: #212529 !default;
-$black: #000 !default;
-
-$blue: #0d6efd !default;
-$red: #dc3545 !default;
-$yellow: #ffc107 !default;
-$green: #198754 !default;
-$cyan: #0dcaf0 !default;
-
-$primary: $blue !default;
-$secondary: $gray-600 !default;
-$success: $green !default;
-$info: $cyan !default;
-$warning: $yellow !default;
-$danger: $red !default;
-$light: $gray-100 !default;
-$dark: $gray-900 !default;
-
-$body-color: $gray-800 !default;
-$body-bg: $white !default;
-$body-tertiary-bg: $gray-200 !default;
-$text-muted: $gray-600 !default;
-$border-color: $gray-200 !default;
-$link-color: #0951be !default;
-
-$form-check-input-border: var(--bs-border-width) solid $gray-500 !default;
-
-// no caret on dropdown-toggle
-$enable-caret: false;
-
-// disable smooth scroll, this makes window.scrollTo(0,0) in ajaxify.js take x milliseconds
-$enable-smooth-scroll: false;
-
-$enable-shadows: true;
-
-$link-decoration: none;
-$link-hover-decoration: underline;
-
-// Custom fonts
-$font-family-sans-serif: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
-$font-family-secondary: "Poppins", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
-$font-weight-semibold: 500 !default;
-$small-font-size: 0.875rem !default;
-
-$breadcrumb-divider: quote("→");
-$breadcrumb-divider-color: $gray-500 !default;
-$breadcrumb-active-color: $body-color !default;
-$breadcrumb-item-padding-x: 12px !default;
-
-.form-control::placeholder, .bootstrap-tagsinput::placeholder {
- color: $gray-500 !important;
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/sidebar.scss b/node_modules/nodebb-theme-harmony/scss/sidebar.scss
deleted file mode 100644
index ca8df90d0c..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/sidebar.scss
+++ /dev/null
@@ -1,189 +0,0 @@
-.skin-noskin {
- // only using colors when there is no bootswatch skin applied
- nav.sidebar, .bottombar-nav {
- color: $secondary !important;
- background-color: $light !important;
- }
- .bottombar-nav {
- .dropdown-menu {
- color: $secondary !important;
- background-color: $light !important;
- }
- }
-}
-
-.sidebar {
- $hover-color: mix($light, $dark, 90%);
-
- @include media-breakpoint-up(lg) {
- &.open {
- min-width: 200px;
- max-width: 200px;
- width: 200px;
-
- .sidebar-toggle {
- .fa-angles-right { display: none; }
- .fa-angles-left { display: inline-block; }
- }
- .visible-open { display: initial; }
- .visible-closed { display: none; }
- hr.visible-open { display: block; }
- .truncate-open {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .sidebar-toggle-container {
- width: 100%
- }
- }
- }
- .visible-open { display: none; }
- .visible-closed {display: initial; }
-
- .truncate-open {
- overflow: initial;
- text-overflow: initial;
- white-space: initial;
- }
-
- .nav-link {
- @extend .ff-secondary;
- padding: ($spacer * 0.25) ($spacer * 0.5);
- border-radius: $border-radius-sm;
- cursor: pointer;
- &.active {
- background-color: $hover-color;
- }
- &:hover {
- background-color: $hover-color;
- }
- }
-
- .nav-item {
- .dropdown-menu .dropdown-item {
- @extend .rounded-1;
- }
- }
-
- #user_dropdown .avatar {
- margin: 2px 0; // fixes the avatar so its height is same as the icons on right sidebar
- }
-
- .sidebar-toggle {
- justify-content: start;
- .fa-angles-right { display: inline-block; }
- .fa-angles-left { display: none; }
- }
-
- .search-dropdown {
- width: 300px;
- }
-
- .chats-dropdown, .notifications-dropdown, .drafts-dropdown {
- min-width: 300px;
- width: 300px;
- .list-container {
- max-height: 400px;
- overflow-y: auto;
- }
- }
-
- .badge {
- font-size: 9px;
- line-height: 12px;
- &.visible-open {
- font-size:12px;
- line-height: 12px;
- font-weight: normal;
- }
- }
-
- [data-widget-area="sidebar-footer"] {
- font-size: $font-size-base * 0.75;
- }
-}
-
- /*rtl:begin:ignore*/
- html[data-dir="rtl"] {
- .sidebar {
- &.open {
- .sidebar-toggle {
- .fa-angles-right { display: none; }
- .fa-angles-left { display: inline-block; }
- }
- }
- .sidebar-toggle {
- .fa-angles-right { display: inline-block; }
- .fa-angles-left { display: none; }
- }
- }
-}
- /*rtl:end:ignore*/
-
-.bottombar {
- transition: bottom 150ms linear;
-
- .pagination-block {
- .scroller-container {
- border-right: 3px solid;
- margin-right: 5.5px;
- .scroller-thumb {
- right: -6px;
- padding-right: 15px;
- margin-right: -15px;
- }
- }
- }
-}
-
-.bottombar-nav {
- .nav-text {
- font-size: 1rem;
- color: $body-color;
- }
- .nav-link {
- padding: 8px;
- border-radius: $border-radius-sm;
- }
- .usermenu, .chats, .notifications, .drafts, .search, .logged-out-menu {
- .visible-open { display: none; }
- }
- .badge {
- font-size: 9px;
- line-height: 12px;
- }
-
- .navigation-dropdown, .user-dropdown {
- > li {
- > a, .dropdown-item {
- padding: 10px 20px!important;
- }
- }
- left: 0!important;
- right: 0!important;
- bottom: $spacer*0.5!important;
- box-shadow: none!important;
- max-height: 60vh!important;
- overflow: auto!important;
- }
- .search-dropdown .quick-search-results {
- max-height: 225px!important;
- overflow-y: auto!important;
- }
- .search-dropdown, .chats-dropdown, .notifications-dropdown, .drafts-dropdown {
- left: 0 !important;
- right: 0 !important;
- box-shadow: none!important;
-
- border-left: 0;
- border-right: 0;
- border-bottom: 0;
- border-radius: 0;
-
- .list-container {
- max-height: 60vh!important;
- overflow-y: auto!important;
- }
- }
-}
diff --git a/node_modules/nodebb-theme-harmony/scss/skins.scss b/node_modules/nodebb-theme-harmony/scss/skins.scss
deleted file mode 100644
index 322e3cb2f5..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/skins.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-.skin-quartz {
- // $body-bg-image is gradient in quartz
- [component="post"] .icon {
- background-color: transparent !important;
- }
-}
-
-.skin-quartz, .skin-lux, .skin-morph {
- // $spacer being modified looks bad on this element
- .topic-list-header .btn, .topic-main-buttons .btn {
- padding: 6px 12px;
- }
-}
-
-.skin-yeti {
- .badge {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- }
-}
-
-// table color fix, remove once https://github.com/thomaspark/bootswatch/issues/1276 is published
-.skin-darkly, .skin-superhero, .skin-solar, .skin-quartz {
- table > :not(caption) > * > * {
- color: white;
- }
-}
-
-.skin-superhero {
- // fix read button in dropdowns
- .mark-read .read {
- color: $primary!important;
- }
-}
-
-.skin-slate {
- // fix unread button colors in dropdowns
- .mark-read .unread {
- color: $secondary!important;
- }
-}
-
-:root {
- .skin-darkly, .skin-slate, .skin-cyborg {
- --bs-border-color: #929292;
- }
- .skin-zephyr {
- --bs-secondary-rgb: var(--bs-secondary-color);
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/status.scss b/node_modules/nodebb-theme-harmony/scss/status.scss
deleted file mode 100644
index 37c5f0a474..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/status.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-.status {
- padding: 3px;
-
- &.online {
- background-color: $success;
- }
-
- &.away {
- background-color: $warning;
- }
-
- &.dnd {
- background-color: $danger;
- }
-
- &.offline {
- background-color: $gray-600;
- }
-}
-
-@include media-breakpoint-up(sm) {
- .status {
- padding: 5px;
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/scss/topic.scss b/node_modules/nodebb-theme-harmony/scss/topic.scss
deleted file mode 100644
index 64de43136f..0000000000
--- a/node_modules/nodebb-theme-harmony/scss/topic.scss
+++ /dev/null
@@ -1,152 +0,0 @@
-body.template-topic {
- .breadcrumb .breadcrumb-item:last-child {
- display: none;
- }
- .topic {
- .posts-container {
- max-width: 960px;
- width: 960px;
- }
-
- #Resources {
- background-color: transparent;
- border: none;
- padding: 0.5rem 1rem; // Add padding to match other buttons
- color: #007bff; // Adjust color to match button text
-
- &:hover {
- background-color: #f1f3f5; // Match hover background with others
- border-radius: 5px;
- color: #0056b3; // Adjust hover text color if needed
- }
- }
-
- .posts {
- // fixes code blocks pushing content out on mobile
- @include media-breakpoint-down(md) {
- max-width: calc(100vw - $grid-gutter-width);
- }
-
- &.timeline {
- @include timeline-style;
- }
-
- .post-header {
- font-size: 0.8125rem;
- line-height: 1.25rem;
-
- .bookmarked {
- transition: $transition-fade;
- }
- }
-
- > [component="post"] > [component="post/footer"] {
- margin-left: calc($spacer * 2.5);
- }
-
- [component="post"] {
- &.selected .post-container {
- background-color: mix($body-bg, $body-color, 90%);
- }
- &.deleted .post-container .content { opacity: .65; }
-
- [component="post/content"] {
- @include fix-lists();
-
- > blockquote {
- > blockquote {
- > *:not(.blockquote) {
- display: none;
- }
- }
-
- > blockquote.uncollapsed {
- > *:not(.blockquote) {
- display: block;
- }
- }
- }
-
- @include media-breakpoint-up(lg) {
- table { // text-break breaks table formatting
- word-break:initial!important;
- }
- }
- }
- }
-
- [component="post/upvote"], [component="post/downvote"] {
- &.upvoted, &.downvoted {
- background-color: var(--btn-ghost-active-color);
-
- &:hover {
- background-color: var(--btn-ghost-hover-color);
- }
- }
- }
- }
- }
-
- .quick-reply {
- @include topic-avatars();
- }
-
- [component="post/replies/container"] {
- .icon {
- display: none !important;
- }
-
- .post-header .icon {
- display: initial !important;
-
- .status {
- display: none;
- }
- }
-
- .timeline-event {
- display: none !important;
- }
-
- [component="post"] {
- padding-top: 0 !important;
- padding-bottom: $spacer;
- &:last-of-type {
- padding-bottom: 0;
- .post-footer {
- border-bottom: none !important;
- }
- }
- }
- }
-
-
- [component="topic/thumb/list"] {
- height: calc($font-size-base * 4);
- }
-}
-
-@include media-breakpoint-up(sm) {
- body.template-topic {
- .topic .posts {
- [component="post"] {
- [component="post/actions"] {
- opacity: 0;
- transition: $transition-fade;
-
- &:has([aria-expanded="true"]) {
- opacity: 1;
- }
- }
- [component="post/actions"]:focus-within {
- opacity: 1;
- }
- &:hover {
- > .post-footer > [component="post/actions"] {
- opacity: 1;
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/best.tpl b/node_modules/nodebb-theme-harmony/templates/account/best.tpl
deleted file mode 100644
index 21b7d5b195..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/best.tpl
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/blocks.tpl b/node_modules/nodebb-theme-harmony/templates/account/blocks.tpl
deleted file mode 100644
index fb7a60aabb..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/blocks.tpl
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
[[pages:account/blocks, {username}]]
-
-
-
-
[[user:has-no-blocks]]
-
-
- {{{ each users }}}
-
-
-
-
- {{{ end }}}
-
-
-
-
-
diff --git a/node_modules/nodebb-theme-harmony/templates/account/bookmarks.tpl b/node_modules/nodebb-theme-harmony/templates/account/bookmarks.tpl
deleted file mode 100644
index 21b7d5b195..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/bookmarks.tpl
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/categories.tpl b/node_modules/nodebb-theme-harmony/templates/account/categories.tpl
deleted file mode 100644
index 289f1de7a3..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/categories.tpl
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
{title}
-
-
-
-
-
-
-
-
-
-
-
-
- {{{each categories}}}
-
- {{{end}}}
-
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/consent.tpl b/node_modules/nodebb-theme-harmony/templates/account/consent.tpl
deleted file mode 100644
index f472e9ee99..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/consent.tpl
+++ /dev/null
@@ -1,73 +0,0 @@
-
-[[user:consent.title]]
-
-[[user:consent.lead]]
-[[user:consent.intro]]
-
-
-
-
-
- {{{ if gdpr_consent }}}
-
- [[user:consent.received]]
-
-
- {{{ else }}}
-
- [[user:consent.not-received]]
-
-
-
-
-
- {{{ end }}}
-
-
-
[[user:consent.email-intro]]
- {{{ if digest.enabled }}}
-
[[user:consent.digest-frequency, {digest.frequency}]]
- {{{ else }}}
-
[[user:consent.digest-off]]
- {{{ end }}}
-
-
-
-
-
-
-
-
-
[[user:consent.right-of-access]]
-
[[user:consent.right-of-access-description]]
-
[[user:consent.right-to-rectification]]
-
[[user:consent.right-to-rectification-description]]
-
[[user:consent.right-to-erasure]]
-
[[user:consent.right-to-erasure-description]]
-
[[user:consent.right-to-data-portability]]
-
[[user:consent.right-to-data-portability-description]]
-
-
-
-
-
-
-
-
-
-
diff --git a/node_modules/nodebb-theme-harmony/templates/account/controversial.tpl b/node_modules/nodebb-theme-harmony/templates/account/controversial.tpl
deleted file mode 100644
index 21b7d5b195..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/controversial.tpl
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/downvoted.tpl b/node_modules/nodebb-theme-harmony/templates/account/downvoted.tpl
deleted file mode 100644
index 21b7d5b195..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/downvoted.tpl
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/edit.tpl b/node_modules/nodebb-theme-harmony/templates/account/edit.tpl
deleted file mode 100644
index 1eee58e176..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/edit.tpl
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
{{{ if isSelf }}}[[user:edit-profile]]{{{ else }}}[[pages:account/edit, {username}]]{{{ end }}}
-
-
-
-
-
-
-
-
- {{{ if allowProfilePicture }}}
- - [[user:change-picture]]
- {{{ end }}}
- {{{ if !username:disableEdit }}}
- - [[user:change-username]]
- {{{ end }}}
- {{{ if !email:disableEdit }}}
- - [[user:change-email]]
- {{{ end }}}
- {{{ if canChangePassword }}}
- - [[user:change-password]]
- {{{ end }}}
- {{{ each editButtons }}}
- - {./text}
- {{{ end }}}
-
-
- {{{ if config.requireEmailConfirmation }}}
- {{{ if (email && isSelf) }}}
-
[[user:confirm-email]]
- {{{ end }}}
- {{{ end }}}
-
-
- {{{ if sso.length }}}
-
-
- {{{ each sso }}}
-
- {{{ end }}}
-
- {{{ end }}}
-
-
- {{{ if (allowAccountDelete && isSelf) }}}
-
-
-
- {{{ end }}}
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/edit/password.tpl b/node_modules/nodebb-theme-harmony/templates/account/edit/password.tpl
deleted file mode 100644
index 4ab4fd252d..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/edit/password.tpl
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-{{{ if isSelf }}}[[user:change-password]]{{{ else }}}[[pages:{template.name}, {username}]]{{{ end }}}
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/edit/username.tpl b/node_modules/nodebb-theme-harmony/templates/account/edit/username.tpl
deleted file mode 100644
index cc225d1b4e..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/edit/username.tpl
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-{{{ if isSelf }}}[[user:change-username]]{{{ else }}}[[pages:{template.name}, {username}]]{{{ end }}}
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/followers.tpl b/node_modules/nodebb-theme-harmony/templates/account/followers.tpl
deleted file mode 100644
index 68fe6de65d..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/followers.tpl
+++ /dev/null
@@ -1,15 +0,0 @@
-
-[[pages:{template.name}, {username}]]
-
-{{{ if !users.length }}}
-[[user:has-no-follower]]
-{{{ end }}}
-
-
-{{{ each users }}}
-
-{{{end}}}
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/following.tpl b/node_modules/nodebb-theme-harmony/templates/account/following.tpl
deleted file mode 100644
index 73fd4913db..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/following.tpl
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-[[pages:{template.name}, {username}]]
-
-{{{ if !users.length }}}
-[[user:follows-no-one]]
-{{{ end }}}
-
-
-{{{ each users }}}
-
-{{{end}}}
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/groups.tpl b/node_modules/nodebb-theme-harmony/templates/account/groups.tpl
deleted file mode 100644
index c1faf80836..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/groups.tpl
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-[[pages:{template.name}, {username}]]
-
-
-
- {{{ if !groups.length }}}
-
[[groups:no-groups-found]]
- {{{ else }}}
-
- {{{ end }}}
-
-
-
-
diff --git a/node_modules/nodebb-theme-harmony/templates/account/ignored.tpl b/node_modules/nodebb-theme-harmony/templates/account/ignored.tpl
deleted file mode 100644
index 238b943cd5..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/ignored.tpl
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/info.tpl b/node_modules/nodebb-theme-harmony/templates/account/info.tpl
deleted file mode 100644
index fa0a215db0..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/info.tpl
+++ /dev/null
@@ -1,271 +0,0 @@
-
-
-{{{ if sessions.length }}}
-
-
[[global:sessions]]
-
-
-{{{ end }}}
-
-
-
-
-
-
-
- {{{each ips}}}
- - {@value}
- {{{end}}}
-
-
-
-
-
-
-
-
- {{{ each usernames }}}
- -
- {./value}
-
-
-
- {{{ end }}}
-
-
-
-
-
-
-
-
- {{{ each emails }}}
- -
- {./value}
-
-
- {{{ end }}}
-
-
-
-
- {{{ if isAdminOrGlobalModerator }}}
-
-
-
-
-
-
-
-
- {{{ each moderationNotes }}}
-
-
-
-
-
-
-
-
- {./note}
-
-
-
-
-
-
-
-
-
-
-
-
- {{{ end }}}
-
-
-
-
- {{{ end }}}
-
-
-
-
-
- {{{ if history.flags.length }}}
-
- {{{ else }}}
-
[[user:info.no-flags]]
- {{{ end }}}
-
-
-
-
-
-
- {{{ if history.bans.length }}}
-
- {{{ each history.bans }}}
- -
-
-
- {{{ if (./type != "unban") }}}
-
[[user:banned]]
- {{{ else }}}
-
[[user:unbanned]]
- {{{ end }}}
-
-
- [[user:info.banned-reason-label]]: {./reason}
-
-
- {{{ if ./until }}}
- [[user:info.banned-until, {isoTimeToLocaleString(./untilISO, config.userLang)}]]
- {{{ else }}}
- {{{ if (./type != "unban") }}}
- [[user:info.banned-permanently]]
- {{{ end }}}
- {{{ end }}}
-
-
- {{{ end }}}
-
- {{{ else }}}
-
[[user:info.no-ban-history]]
- {{{ end }}}
-
-
-
-
-
-
- {{{ if history.mutes.length }}}
-
- {{{ each history.mutes }}}
- -
-
-
- {{{ if (./type != "unmute") }}}
-
[[user:muted]]
- {{{ else }}}
-
[[user:unmuted]]
- {{{ end }}}
-
-
- [[user:info.banned-reason-label]]: {./reason}
-
-
- {{{ if ./until }}}
- [[user:info.muted-until, {isoTimeToLocaleString(./untilISO, config.userLang)}]]
- {{{ end }}}
-
-
- {{{ end }}}
-
- {{{ else }}}
-
[[user:info.no-mute-history]]
- {{{ end }}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/posts.tpl b/node_modules/nodebb-theme-harmony/templates/account/posts.tpl
deleted file mode 100644
index d8934a07b8..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/posts.tpl
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-{{{ if !posts.length }}}
-{noItemsFoundKey}
-{{{ end }}}
-
-
-
-
- {{{ if config.usePagination }}}
-
- {{{ end }}}
-
-
-
diff --git a/node_modules/nodebb-theme-harmony/templates/account/profile.tpl b/node_modules/nodebb-theme-harmony/templates/account/profile.tpl
deleted file mode 100644
index 7fa531c639..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/profile.tpl
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-{{{ if widgets.profile-aboutme-before.length }}}
-
-{{{each widgets.profile-aboutme-before}}}
-{./html}
-{{{end}}}
-
-{{{ end }}}
-
-{{{ if aboutme }}}
-
-{aboutmeParsed}
-
-{{{ end }}}
-
-{{{ if widgets.profile-aboutme-after.length }}}
-
-{{{each widgets.profile-aboutme-after}}}
-{./html}
-{{{end}}}
-
-{{{ end }}}
-
-
-
- {{{ if !reputation:disabled }}}
-
-
-
- {{{ end }}}
-
-
-
-
-
-
-
-
-
-
-
-
- {{{ if email }}}
-
-
-
- {{{ end }}}
-
- {{{ if websiteName }}}
-
-
-
- {{{ end }}}
-
- {{{ if location }}}
-
-
-
- {{{ end }}}
-
- {{{ if age }}}
-
-
-
- {{{ end }}}
-
-
-
-
diff --git a/node_modules/nodebb-theme-harmony/templates/account/sessions.tpl b/node_modules/nodebb-theme-harmony/templates/account/sessions.tpl
deleted file mode 100644
index 679d087729..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/sessions.tpl
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-[[user:sessions.description]]
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/settings.tpl b/node_modules/nodebb-theme-harmony/templates/account/settings.tpl
deleted file mode 100644
index c4c78a1650..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/settings.tpl
+++ /dev/null
@@ -1,236 +0,0 @@
-
-
-
-
{{{ if isSelf }}}[[pages:account/settings]]{{{ else }}}[[pages:account/settings-of, {username}]]{{{ end }}}
-
-
-
-
- {{{ if !disableCustomUserSkins }}}
-
-
-
-
- {{{ end }}}
-
- {{{ if allowUserHomePage }}}
-
-
-
-
-
[[user:homepage-description]]
-
-
-
-
-
[[user:custom-route-help]]
-
-
-
- {{{ end }}}
-
-
[[global:privacy]]
-
- {{{ if !hideEmail }}}
-
-
-
-
- {{{ end }}}
-
- {{{ if !hideFullname }}}
-
-
-
-
- {{{ end }}}
-
- {{{ if !config.disableChat }}}
-
-
-
-
- {{{ end }}}
-
-
-
-
[[user:browsing]]
-
-
-
-
-
-
- {{{ if inTopicSearchAvailable }}}
-
-
-
-
-
[[user:topic-search-help]]
- {{{ end }}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[[global:pagination]]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[[global:sort]]
-
-
-
-
-
-
-
-
-
-
-
- {{{ if !disableEmailSubscriptions }}}
-
-
[[global:email]]
-
-
-
-
-
[[user:digest-description]]
-
-
- {{{ end }}}
-
- {{{ each customSettings}}}
-
-
{./title}
-
- {./content}
-
- {{{end}}}
-
-
-
-
-
-
-
-
-
- {{{ if (isAdmin && isSelf) }}}
-
-
-
-
- {{{ end }}}
-
-
[[topic:watch]]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[[user:notifications]]
-
- {{{ each notificationSettings }}}
-
-
-
-
-
-
-
-
- {{{end}}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/node_modules/nodebb-theme-harmony/templates/account/tags.tpl b/node_modules/nodebb-theme-harmony/templates/account/tags.tpl
deleted file mode 100644
index c1007eb836..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/tags.tpl
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/theme.tpl b/node_modules/nodebb-theme-harmony/templates/account/theme.tpl
deleted file mode 100644
index 67fdbc717f..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/theme.tpl
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
[[themes/harmony:settings.title]]
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/topics.tpl b/node_modules/nodebb-theme-harmony/templates/account/topics.tpl
deleted file mode 100644
index b696098892..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/topics.tpl
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
[[global:topics]]
- {{{ if showSort }}}
-
-
-
-
- {{{ end }}}
-
-
-
-
-
-
-{{{ if !topics.length }}}
-{noItemsFoundKey}
-{{{ end }}}
-
-
-
- {{{ if config.usePagination }}}
-
- {{{ end }}}
-
-
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/uploads.tpl b/node_modules/nodebb-theme-harmony/templates/account/uploads.tpl
deleted file mode 100644
index dd5e79002e..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/uploads.tpl
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-{title}
-
-
- {{{ if privateUploads }}}[[uploads:private-uploads-info]]{{{ else }}}[[uploads:public-uploads-info]]{{{ end }}}
-
-
-{{{ if !uploads.length }}}
-[[uploads:no-uploads-found]]
-{{{ end }}}
-
-
-
-
- |
- |
-
-
-
- {{{ each uploads }}}
-
-
- {./url}
- |
-
-
-
-
- |
-
- {{{ end }}}
-
-
-
-
-
diff --git a/node_modules/nodebb-theme-harmony/templates/account/upvoted.tpl b/node_modules/nodebb-theme-harmony/templates/account/upvoted.tpl
deleted file mode 100644
index 21b7d5b195..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/upvoted.tpl
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/account/watched.tpl b/node_modules/nodebb-theme-harmony/templates/account/watched.tpl
deleted file mode 100644
index 238b943cd5..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/account/watched.tpl
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/admin/plugins/harmony.tpl b/node_modules/nodebb-theme-harmony/templates/admin/plugins/harmony.tpl
deleted file mode 100644
index 289011ad6d..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/admin/plugins/harmony.tpl
+++ /dev/null
@@ -1,56 +0,0 @@
-
diff --git a/node_modules/nodebb-theme-harmony/templates/categories.tpl b/node_modules/nodebb-theme-harmony/templates/categories.tpl
deleted file mode 100644
index 24d98b46a3..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/categories.tpl
+++ /dev/null
@@ -1,29 +0,0 @@
-
- {{{ each widgets.header }}}
- {{widgets.header.html}}
- {{{ end }}}
-
-
-
-
-
-
- {{{ each widgets.footer }}}
- {{widgets.footer.html}}
- {{{ end }}}
-
diff --git a/node_modules/nodebb-theme-harmony/templates/category.tpl b/node_modules/nodebb-theme-harmony/templates/category.tpl
deleted file mode 100644
index 9fb949e3bb..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/category.tpl
+++ /dev/null
@@ -1,83 +0,0 @@
-
-{{{ if config.theme.enableBreadcrumbs }}}
-
-{{{ end }}}
-
-
-
- {{{ if ./descriptionParsed }}}
-
- {{{ end }}}
-
-
-
-{{{ if widgets.header.length }}}
-
- {{{ each widgets.header }}}
- {{widgets.header.html}}
- {{{ end }}}
-
-{{{ end }}}
-
-
-
-
- {{{each widgets.footer}}}
- {{widgets.footer.html}}
- {{{end}}}
-
-
-{{{ if !config.usePagination }}}
-
-{{{ end }}}
\ No newline at end of file
diff --git a/node_modules/nodebb-theme-harmony/templates/flags/detail.tpl b/node_modules/nodebb-theme-harmony/templates/flags/detail.tpl
deleted file mode 100644
index 3a81a466f1..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/flags/detail.tpl
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
-
-
-
-
-
-
-
-
[[flags:history]]
- {{{ if !history.length }}}
-
[[flags:no-history]]
- {{{ end }}}
- {{{ each history }}}
-
-
-
-
- {{{ each ./fields }}}
- -
- [[flags:{@key}]]{{{ if @value }}} → {@value}{{{ end }}}
-
- {{{ end }}}
- {{{ each ./meta }}}
- -
- {{./key}}{{{ if ./value }}} → {./value}{{{ end }}}
-
- {{{ end }}}
-
-
-
- {{{ end }}}
-
-
-
-
-
- {target_readable}
-
-
- {{{ if type_bool.post }}}
-
-
{target.content}
- {{{ end }}}
-
- {{{ if type_bool.user }}}
-
-
{{{ if target.aboutme }}}{target.aboutme}{{{ else }}}[[flags:target-aboutme-empty]]{{{ end }}}
- {{{ end }}}
-
- {{{ if type_bool.empty }}}
-
[[flags:target-purged]]
- {{{ end }}}
-
-
-
[[flags:reports]]
-
- {{{ each reports }}}
- -
-
-
{./value}
-
- {{{ end }}}
-
-
-
-
-
[[flags:notes]]
-
-
-
- {{{ if !notes.length }}}
- [[flags:no-notes]]
- {{{ end }}}
- {{{ each notes }}}
- -
-
-
{./content}
-
- {{{ end }}}
-
-
-
-
-
diff --git a/node_modules/nodebb-theme-harmony/templates/flags/list.tpl b/node_modules/nodebb-theme-harmony/templates/flags/list.tpl
deleted file mode 100644
index 1e5aa05930..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/flags/list.tpl
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/node_modules/nodebb-theme-harmony/templates/footer.tpl b/node_modules/nodebb-theme-harmony/templates/footer.tpl
deleted file mode 100644
index 6bcfd58619..0000000000
--- a/node_modules/nodebb-theme-harmony/templates/footer.tpl
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
- {{{ if !isSpider }}}
-
- {{{ end }}}
-
-
-