+
+
+
diff --git a/client/src/ui/components/contextmenu/Button.vue b/client/src/ui/components/contextmenu/Button.vue
new file mode 100644
index 00000000..995e950a
--- /dev/null
+++ b/client/src/ui/components/contextmenu/Button.vue
@@ -0,0 +1,23 @@
+/**
+ * BetterDiscord Context Menu Button Component
+ * Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
+ * All rights reserved.
+ * https://betterdiscord.net
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+*/
+
+
+
+ {{item.text}}
+
{{item.hint}}
+
+
+
+
+
diff --git a/client/src/ui/components/contextmenu/Group.vue b/client/src/ui/components/contextmenu/Group.vue
new file mode 100644
index 00000000..0cfc3486
--- /dev/null
+++ b/client/src/ui/components/contextmenu/Group.vue
@@ -0,0 +1,59 @@
+/**
+ * BetterDiscord Context Menu Group Component
+ * Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
+ * All rights reserved.
+ * https://betterdiscord.net
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+*/
+
+
+
+
+
+
diff --git a/client/src/ui/components/contextmenu/Toggle.vue b/client/src/ui/components/contextmenu/Toggle.vue
new file mode 100644
index 00000000..25e4f7ae
--- /dev/null
+++ b/client/src/ui/components/contextmenu/Toggle.vue
@@ -0,0 +1,27 @@
+/**
+ * BetterDiscord Context Menu Toggle Component
+ * Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
+ * All rights reserved.
+ * https://betterdiscord.net
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+*/
+
+
+
+
{{item.text}}
+
+
+
+
+
+
+
+
+
+
diff --git a/client/src/ui/components/index.js b/client/src/ui/components/index.js
index 60616b7a..f4b8d7ab 100644
--- a/client/src/ui/components/index.js
+++ b/client/src/ui/components/index.js
@@ -3,3 +3,4 @@ export { default as BdSettings } from './BdSettings.vue';
export { default as BdModals } from './BdModals.vue';
export { default as BdToasts } from './BdToasts.vue';
export { default as BdNotifications } from './BdNotifications.vue';
+export { default as BdContextMenu } from './BdContextMenu.vue';
diff --git a/client/src/ui/contextmenus.js b/client/src/ui/contextmenus.js
new file mode 100644
index 00000000..cd95b070
--- /dev/null
+++ b/client/src/ui/contextmenus.js
@@ -0,0 +1,25 @@
+/*
+ * BetterDiscord Context Menus
+ * Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
+ * All rights reserved.
+ * https://betterdiscord.net
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+*/
+
+export class BdContextMenu {
+
+ /**
+ * Show a context menu
+ * @param {Object[]} grops Groups of items to show in context menu
+ */
+ static show(groups) {
+ this.activeMenu.menu = { groups };
+ }
+
+ static get activeMenu() {
+ return this._activeMenu || (this._activeMenu = { menu: null });
+ }
+
+}
diff --git a/client/src/ui/dom.js b/client/src/ui/dom.js
index 91d311f1..e7b0ae43 100644
--- a/client/src/ui/dom.js
+++ b/client/src/ui/dom.js
@@ -186,6 +186,7 @@ export default class DOM {
static get bdModals() { return this.getElement('bd-modals') || this.createElement('bd-modals').appendTo(this.bdBody) }
static get bdToasts() { return this.getElement('bd-toasts') || this.createElement('bd-toasts').appendTo(this.bdBody) }
static get bdNotifications() { return this.getElement('bd-notifications') || this.createElement('bd-notifications').appendTo(this.bdBody) }
+ static get bdContextMenu() { return this.getElement('bd-contextmenu') || this.createElement('bd-contextmenu').appendTo(this.bdBody) }
static getElement(e) {
if (e instanceof BdNode) return e.element;
diff --git a/client/src/ui/ui.js b/client/src/ui/ui.js
index 8b29f2f6..11c54468 100644
--- a/client/src/ui/ui.js
+++ b/client/src/ui/ui.js
@@ -4,6 +4,7 @@ export { default as BdMenu, BdMenuItems } from './bdmenu';
export { default as Modals } from './modals';
export { default as Toasts } from './toasts';
export { default as Notifications } from './notifications';
+export * from './contextmenus';
export { default as VueInjector } from './vueinjector';
export { default as Reflection } from './reflection';