Add import/export, graph UX improvements, and contact management fixes.

Support vCard import and multi-format export, bulk delete with reliable local persistence, Ctrl+link relation creation, cluster-colored graph visualization, and right-click context menus for node details.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-23 11:36:13 +03:00
co-authored by Cursor
parent 2a32c61934
commit 35ec4c81ec
27 changed files with 1819 additions and 110 deletions
@@ -0,0 +1,48 @@
import { ref } from 'vue'
export function useGraphNodeContextMenu() {
const contextMenuOpen = ref(false)
const contextMenuNode = ref(null)
const contextMenuX = ref(0)
const contextMenuY = ref(0)
function openContextMenu(node, event) {
if (!node || !event) return
contextMenuNode.value = node
contextMenuX.value = event.clientX
contextMenuY.value = event.clientY
contextMenuOpen.value = true
}
function closeContextMenu() {
contextMenuOpen.value = false
contextMenuNode.value = null
}
function attachNodeContextHandlers(network, getNodes) {
const onContext = (params) => {
const domEvent = params.event?.srcEvent || params.event
domEvent?.preventDefault?.()
if (params.nodes?.length > 0) {
const id = params.nodes[0]
const node = getNodes().find((n) => String(n.id) === String(id))
if (node) openContextMenu(node, domEvent)
return
}
closeContextMenu()
}
network.on('oncontext', onContext)
return () => network.off('oncontext', onContext)
}
return {
contextMenuOpen,
contextMenuNode,
contextMenuX,
contextMenuY,
openContextMenu,
closeContextMenu,
attachNodeContextHandlers,
}
}