diff --git a/Cargo.lock b/Cargo.lock index a3b034d..dd21e77 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3903,9 +3903,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.3+spec-1.1.0" +version = "1.1.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" dependencies = [ "indexmap", "serde_core", @@ -3939,9 +3939,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] @@ -4228,12 +4228,11 @@ dependencies = [ [[package]] name = "validator" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43fb22e1a008ece370ce08a3e9e4447a910e92621bb49b85d6e48a45397e7cfa" +checksum = "c3d68c6633c483df6780cc5277a417c7c2d1bceee2649d06c8ab6b0fd2dd3c81" dependencies = [ "idna", - "once_cell", "regex", "serde", "serde_derive", diff --git a/Cargo.toml b/Cargo.toml index 892fa87..dd856ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ event_bus = { path = "event_bus" } parking_lot = "0.12.5" serde = "1.0.229" serde_json = "1.0.151" -toml = "1.1.3" +toml = "1.1.4" uuid = { version = "1.24.0", features = ["v4", "v7", "fast-rng", "serde"] } tracing = "0.1.44" tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "time"] } @@ -35,7 +35,7 @@ jsonwebtoken = { version = "11.0.0", features = ["aws_lc_rs"] } tower = { version = "0.5", features = ["util"] } tower-http = { version = "0.7.0", features = ["catch-panic", "cors", "trace"] } chrono = "0.4.45" -validator = { version = "0.20.0", features = ["derive"] } +validator = { version = "0.21.0", features = ["derive"] } async-trait = "0.1.91" anyhow = "1.0.104" futures-util = "0.3" diff --git a/frontend/src/components/ContextMenu.vue b/frontend/src/components/ContextMenu.vue new file mode 100644 index 0000000..630006e --- /dev/null +++ b/frontend/src/components/ContextMenu.vue @@ -0,0 +1,33 @@ + + + \ No newline at end of file diff --git a/frontend/src/composables/useContextMenu.ts b/frontend/src/composables/useContextMenu.ts new file mode 100644 index 0000000..dd32b79 --- /dev/null +++ b/frontend/src/composables/useContextMenu.ts @@ -0,0 +1,36 @@ +import {ref} from 'vue' + +export interface MenuItem { + label: string + icon?: string + color?: string + disabled?: boolean + action: () => void +} + +const isOpen = ref(false) +const position = ref({x: 0, y: 0}) +const items = ref([]) + +export function useContextMenu() { + function openContextMenu(event: MouseEvent, menuItems: MenuItem[]) { + event.preventDefault() + event.stopPropagation() + + position.value = {x: event.clientX, y: event.clientY} + items.value = menuItems + isOpen.value = true + } + + function closeContextMenu() { + isOpen.value = false + } + + return { + isOpen, + position, + items, + openContextMenu, + closeContextMenu, + } +} \ No newline at end of file diff --git a/frontend/src/layouts/AppLayout.vue b/frontend/src/layouts/AppLayout.vue index 97ebf63..c7cf0aa 100644 --- a/frontend/src/layouts/AppLayout.vue +++ b/frontend/src/layouts/AppLayout.vue @@ -3,6 +3,7 @@ import {storeToRefs} from 'pinia' import {useServerStore} from '@/stores/server' import {ref} from 'vue' import {useRouter} from 'vue-router' +import ContextMenu from "@/components/ContextMenu.vue"; const serverStore = useServerStore() const router = useRouter() @@ -74,7 +75,7 @@ const getServerColor = (str: string): string => {