Ir al contenido

Menú contextual ​

Las opciones del menú contextual configuran menús contextuales para nodos, bordes y el lienzo.

Por defecto:

  • Los menús contextuales están habilitados.
  • Cada menú (nodo, borde, lienzo) tiene acciones independientes.
  • Cualquier acción personalizada adicional se agrega después de las acciones predeterminadas, encima de la eliminación.

Deshabilitar información sobre herramientas ​

Bastante sencillo estableciendo la propiedad enabled en false.

ts
const options = {
    UI: {
        contextMenu: {
            enabled: false
        }
    }
}

Acciones adicionales ​

Puede personalizar las acciones que aparecen al hacer clic derecho en un nodo, un borde o el lienzo.

Cada menú contextual se divide en dos secciones:

Puede configurar estos menús para estos ámbitos:

  • menuNode
  • menuEdge
  • menuNote
  • menuSelection
  • menuCanvas

Acciones predeterminadas ​

AlcanceEntradas predeterminadas
menuNodeFijar / Desanclar / Enfocar / Ocultar (barra superior) · Pivotar · Salir del grupo · Volver a colocar en el grupo · Ver imagen · Seleccionar vecinos · Ocultar niños · Conectar a… · Inspeccionar propiedades · Eliminar nodo
menuEdgeEditar borde · Eliminar borde
menuNoteOcultar nota (barra superior) · Eliminar nota
menuSelectionFijar / Desanclar / Ocultar seleccionados (barra superior) · Pivotar · Agrupar nodos seleccionados · Sacar del grupo · Volver a colocar en el grupo · Desagrupar · Seleccionar vecinos · Eliminar seleccionados
menuCanvasFijar todo / Desanclar todo (barra superior) · Agregar nodo aquí · Agregar nota · Liberar nodos fijados (mientras cualquier nodo esté fijado)

Los menús de nodo, selección y grupo se leen en el mismo orden: Pivote ▸ primero, luego el grupo entradas que aplican, luego las otras entradas con el tuyo después de ellos, y el de eliminación al final. El menú de un grupo (Pivotar · Abrir grupo · Seleccionar miembros · Ver miembros en la tabla · Cambiar nombre del grupo · Desagrupar · Seleccionar vecinos · Eliminar miembros) es el propia de la biblioteca y no acepta entradas suyas. Una entrada que no aplica se omite sin moviendo a los demás.

Las entradas de la ruta de escritura (eliminar, editar, crear) pasan por sus ganchos anteriores; consulte Enganches del ciclo de vida de la ruta de escritura, y cada uno desaparece cuando su bandera editors.<editor>.enabled es false: Eliminar con deletion, Editar borde con edgeEditor, Agregar nodo aquí con nodeCreator, Conectar a… con edgeCreator. Lo mismo ocurre con las entradas que son una puerta a una función conmutable: Agregar nota y el menuNote completo sigue UI.notes, Inspeccionar propiedades sigue a UI.inspector. Sus propias entradas nunca están cerradas. Ambas entradas "...aquí" colocan su elemento donde se abrió el menú, cualquiera que sea el ampliar o desplazar.

Actuando sobre una selección ​

Al hacer clic con el botón derecho en un nodo que forma parte de una selección de varios nodos, se abre menuSelection, dirigido con cuántos nodos actúa. Cada entrada actúa sobre toda la selección, como Las acciones masivas de la barra lateral sí lo hacen, y las entradas que solo tienen sentido para un nodo (Inspeccionar, Conectarse a…, Ver imagen) se omiten. Al hacer clic con el botón derecho en un nodo fuera de la selección, se abre propio menú de ese nodo y deja la selección como está, y el lienzo mantiene su propio menú. Las entradas de menuSelection reciben los nodos seleccionados como Node[], en visible como en onclick.

Una fila de la tabla de datos abre el mismo menú que su elemento en la lienzo.

Del oculta los nodos seleccionados. Oculta en lugar de eliminar porque ocultar cuesta nada que deshacer; Eliminar seleccionados está en el menú.

js
const options = {
    UI: {
        contextMenu: {
            menuNode: {
                topbar: [
                    {
                        text: 'Delete Node',
                        variant: 'danger',
                        onclick: (evt, node) => console.log('Delete', node)
                    }
                ],
                menu: [
                    {
                        text: 'Edit Node',
                        variant: 'success',
                        onclick: (evt, node) => console.log('Edit', node)
                    }
                ]
            },
            menuEdge: {
                menu: [
                    {
                        text: 'Delete Edge',
                        variant: 'danger',
                        onclick: (evt, edge) =>
                            console.log('Delete edge', edge)
                    }
                ]
            },
            menuCanvas: {
                topbar: [
                    {
                        text: 'Add Node',
                        variant: 'primary',
                        onclick: (evt) => console.log('Add Node')
                    }
                ]
            }
        },
        tooltip: {
            enabled: false,
        },
    }
}

Opciones o elementos de acción ​

La interfaz para los elementos de acción se define aquí.

OpciónTipoPredeterminadoDescripción
iconClassIconClassundefinedCSS clase utilizada como icono. Normalmente se utiliza en bibliotecas de iconos como fontawesome. Ejemplo: fa-solid fa-edit
iconUnicodeIconUnicodeundefinedCarácter Unicode utilizado como icono. Unicode sin formato para ser utilizado en bibliotecas de iconos como fontawesome. Ejemplo: \uf007
imagePathImagePathundefinedRuta a una imagen utilizada como icono.
svgIconSVGIconundefinedObjeto SVG en línea utilizado como icono. Ejemplo: <svg>...</svg>
textstringrequeridoLa etiqueta de la acción que se muestra en menús y barras de herramientas.
titlestringundefinedEtiqueta de texto opcional que se muestra junto al artículo.
variantUIVariantoutline-primaryVariante visual (estilo) del elemento del menú.
visibleboolean | (element: Node | Node[] | Edge | null) => booleantrueControla si el elemento es visible. Puede ser dinámico.
onclick(evt: PointerEvent | MouseEvent, element?: Node | Node[] | Edge | Edge[] | null) => voidrequeridoSe activa cuando el usuario activa el elemento del menú.