🚀 Big News:Socket Has Acquired Secure Annex.Learn More →
Socket
Book a DemoSign in
Socket

@yandex/ymaps3-context-menu

Package Overview
Dependencies
Maintainers
2
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@yandex/ymaps3-context-menu

Yandex Maps JS API 3.0 example ymaps3-context-menu

latest
npmnpm
Version
0.0.2
Version published
Maintainers
2
Created
Source

ymaps3-context-menu package

Yandex JS API package

npm version npm

Props

The package is located in the dist folder:

  • dist/types TypeScript types
  • dist/esm es6 modules for direct connection in your project
  • dist/index.js Yandex JS Module

Recommended use ymaps3-context-menu as usual npm package:

npm install @yandex/ymaps3-context-menu

You also need to import css styles into your project:

/* index.css */
@import '@yandex/ymaps3-context-menu/dist/esm/index.css';

and dynamic import

main();
async function main() {
  await ymaps3.ready;
  const {YMapContextMenu, YMapContextMenuItem} = await import('@yandex/ymaps3-context-menu');
  map = new ymaps3.YMap(document.getElementById('app'), {location: LOCATION});

  map.addChild(new ymaps3.YMapDefaultSchemeLayer({}));
  map.addChild(new ymaps3.YMapDefaultFeaturesLayer({}));

  const contextMenu = new YMapContextMenu({
    visible: false,
    screenCoordinates: [0, 0]
  });
  contextMenu.addChild(
    new YMapContextMenuItem({
      text: 'Click',
      visible: true,
      onClick: () => {
        contextMenu.update({visible: false});
      }
    })
  );
  map.addChild(contextMenu);

  const listener = new ymaps3.YMapListener({
    onContextMenu: (object, event) => {
      contextMenu.update({
        visible: true,
        screenCoordinates: event.screenCoordinates
      });
    },
    onActionStart: () => {
      contextMenu.update({visible: false});
    }
  });
  map.addChild(listener);
}
main();
async function main() {
  const [ymaps3React] = await Promise.all([ymaps3.import('@yandex/ymaps3-reactify'), ymaps3.ready]);
  const reactify = ymaps3React.reactify.bindTo(React, ReactDOM);

  const {YMap, YMapDefaultSchemeLayer, YMapDefaultFeaturesLayer, YMapListener} = reactify.module(ymaps3);

  const {useState} = React;

  const {YMapContextMenu, YMapContextMenuItem} = reactify.module(await import('@yandex/ymaps3-context-menu'));

  const App = () => {
    const [location, setLocation] = useState(LOCATION);
    const [visibleContextMenu, setVisibleContextMenu] = useState(false);
    const [screenCoordinates, setScreenCoordinates] = useState<[number, number]>();
    const [contextMenuLngLat, setContextMenuLngLat] = useState<LngLat>();

    const onContextMenu: DomEventHandler = (object, event) => {
      setContextMenuLngLat(event.coordinates);
      setVisibleContextMenu(true);
      setScreenCoordinates(event.screenCoordinates);
    };

    const onActionStart: BehaviorMapEventHandler = () => {
      setVisibleContextMenu(false);
    };

    const zoomIn = () => {
      setLocation({zoom: (location as YMapZoomLocation).zoom + 1, duration: 600, easing: 'ease-in-out'});
      setVisibleContextMenu(false);
    };

    const zoomOut = () => {
      setLocation({zoom: (location as YMapZoomLocation).zoom - 1, duration: 400, easing: 'ease-in-out'});
      setVisibleContextMenu(false);
    };

    const centerByIt = () => {
      setLocation({center: contextMenuLngLat, duration: 500, easing: 'ease-in-out'});
      setVisibleContextMenu(false);
    };

    return (
      <YMap location={location}>
        <YMapDefaultSchemeLayer />

        <YMapDefaultFeaturesLayer />

        <YMapContextMenu visible={visibleContextMenu} screenCoordinates={screenCoordinates}>
          <YMapContextMenuItem text="Zoom in" visible={true} onClick={zoomIn} />
          <YMapContextMenuItem text="Zoom out" visible={true} onClick={zoomOut} />
          <YMapContextMenuItem text="Center by it" visible={true} onClick={centerByIt} />
        </YMapContextMenu>

        <YMapListener onContextMenu={onContextMenu} onActionStart={onActionStart} />
      </YMap>
    );
  };

  ReactDOM.render(
    <React.StrictMode>
      <App />
    </React.StrictMode>,
    document.getElementById('app')
  );
}

Usage without npm

You can use CDN with module loading handler in JS API on your page.

By default ymaps3.import can load self modules. If you want also load your package, should register cdn:

ymaps3.import.registerCdn('https://cdn.jsdelivr.net/npm/{package}', '@yandex/ymaps3-context-menu@latest');

Just use ymaps3.import:

const {YMapContextMenu, YMapContextMenuItem} = await ymaps3.import('@yandex/ymaps3-context-menu');

YMapContextMenu props description

NameTypeDefaultDescription
visiblebooleanShows or hides the context menu.
screenCoordinates[number, number]Screen coordinates where the context menu should appear.
widthnumber240Width of the context menu in pixels.
positionPositionbottom rightPosition of the context menu relative to the pointer.

YMapContextMenuItem props description

NameTypeDefaultDescription
visiblebooleanShows or hides the context menu item.
textstringText of the menu item.
iconstring or HTMLElementReference to an icon or an HTML element with an icon for the menu item (optional).
iconPosition'start' or 'end'startPosition of the icon.
onClickfunctionCallback function to handle a click on the menu item.
disabledbooleanfalseFlag indicating whether the menu item is disabled.
ordernumber0Sets the order of the menu item in the list.

FAQs

Package last updated on 18 Aug 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts