
A browser-friendly implementation of substack's terminal-menu module:

The API is more or less equivalent to terminal-menu:
menu = createMenu(opts)Create a menu with opts:
opts.width - menu width in emopts.x - top-left corner x offset, default: 1opts.y - top-left corner y offset, default: 1opts.fg - foreground color, default: 'white'opts.bg - background color, default: 'blue'opts.padding.left - left padding in emopts.padding.right - right padding in emopts.padding.top - top padding in emopts.padding.bottom - bottom padding in emThe menu can be driven around with the arrow keys and j/k, vi-style. To quit out
of the menu, hit ^C or q.
menu.add(label)Create a new selectable menu item with the string label.
menu.write(msg)Write a message to the menu.
menu.reset()Adds the menu to the document. You can also do this yourself, as
menu.element points to the DOM node for the menu.
menu.close()Unregister all listeners and bring everything back to its original state.
MIT. See LICENSE.md for details.
$ claude mcp add browser-menu \
-- python -m otcore.mcp_server <graph>