Skip to content

Context Menu API

Methods

MethodSignatureDescription
bindContextMenu(options: SoContextMenuOptions)Bind context menu behavior to one or more targets.
configureContextMenu(defaults: Partial<SoContextMenuOptions>)Configure global defaults for context menu behavior.
openDialogFromContextMenu(handle, dialogOptions)Close menu first, then open dialog safely.

bindContextMenu Options (SoContextMenuOptions)

NameTypeRequiredDefaultDescription
targetstring | Element | Iterable<Element>Yes-Target region(s) for right-click binding.
itemsSoContextMenuItem[]Yes-Menu item definitions.
offsetX / offsetYnumberNo0Menu position offset.
minWidth / maxHeightnumberNo180 / 320Panel size limits.
closeOnEscbooleanNotrueClose menu when pressing Esc.
closeOnOutsideClickbooleanNotrueClose menu on outside click.
closeOnWindowBlurbooleanNotrueClose menu on window blur.
closeOnScrollbooleanNotrueClose menu when scroll event occurs.
closeOnResizebooleanNotrueClose menu on resize.
typeaheadEnabledbooleanNotrueEnable keyboard typeahead matching.
typeaheadResetMsnumberNo450Reset delay for typed query buffer.
onAction(event) => voidNo-Called when an item is selected.
onClose(reason) => voidNo-Called when menu is closed.

Item Contract (SoContextMenuItem)

NameTypeDescription
idstringStable action id.
labelstring | NodeDisplay label.
iconstring | NodeOptional icon class or element.
disabledbooleanDisable this menu item.
closeOnClickbooleanWhether click closes menu.
onClick(ctx) => void | boolean | PromiseItem-level callback; return false to prevent close.

Return Handle (SoContextMenuHandle)

FieldTypeDescription
isOpen() => booleanWhether menu is open.
openAt(x, y, trigger?) => voidOpen menu at coordinates manually.
close(reason?) => voidClose menu manually.
setItems(items) => voidReplace menu items.
updateItem(id, patch) => booleanPatch one item by id.
destroy() => voidUnbind listeners and remove menu.

Usage Example

ts
import { bindContextMenu } from 'sodialog'

bindContextMenu({
  target: '.row',
  items: [
    { id: 'copy', label: 'Copy' },
    { id: 'delete', label: 'Delete' },
  ],
  onAction: ({ itemId }) => {
    console.log('selected:', itemId)
  },
})

Released under the MIT License.