# THIS FILE IS AUTOGENERATED BY napari.utils.stubgen
# DO NOT EDIT

import pathlib
import typing
from typing import Any, Dict, List, Mapping, Sequence, Set, Tuple, Union

import napari.components.camera
import napari.components.cursor
import napari.components.dims
import napari.components.grid
import napari.components.layerlist
import napari.components.overlays.base
import napari.components.tooltip
import napari.layers.base.base
import napari.layers.image.image
import napari.layers.labels.labels
import napari.layers.points.points
import napari.layers.shapes.shapes
import napari.layers.surface.surface
import napari.layers.tracks.tracks
import napari.layers.vectors.vectors
import napari.utils.events.containers._evented_dict

class ViewerModel(
    napari.utils.key_bindings.KeymapProvider,
    napari.utils.mouse_bindings.MousemapProvider,
    napari.utils.events.evented_model.EventedModel,
):
    camera: napari.components.camera.Camera
    cursor: napari.components.cursor.Cursor
    dims: napari.components.dims.Dims
    grid: napari.components.grid.GridCanvas
    layers: napari.components.layerlist.LayerList
    help: str
    status: Union[str, Dict]
    tooltip: napari.components.tooltip.Tooltip
    theme: str
    title: str
    _overlays: napari.utils.events.containers._evented_dict.EventedDict
    _canvas_size: Tuple[int, int]
    _ctx: Mapping
    mouse_over_canvas: bool
    def _add_layer_from_data(
        self,
        data,
        meta: typing.Optional[Optional[Dict[str, Any]]] = None,
        layer_type: typing.Optional[Optional[str]] = None,
    ) -> List[napari.layers.base.base.Layer]: ...
    def _add_layers_with_plugins(
        self,
        paths: List[str],
        *,
        stack: bool,
        kwargs: typing.Optional[Optional[dict]] = None,
        plugin: typing.Optional[Optional[str]] = None,
        layer_type: typing.Optional[Optional[str]] = None,
    ) -> List[napari.layers.base.base.Layer]: ...
    def _layer_help_from_mode(layer: napari.layers.base.base.Layer): ...
    def _new_labels(self): ...
    def _on_active_layer(self, event):
        """Update viewer state for a new active layer."""
    def _on_add_layer(self, event): ...
    def _on_grid_change(self):
        """Arrange the current layers is a 2D grid."""
    def _on_layer_mode_change(self, event): ...
    def _on_layers_change(self): ...
    def _on_remove_layer(self, event): ...
    def _open_or_raise_error(
        self,
        paths: List[Union[pathlib.Path, str]],
        kwargs: typing.Optional[Optional[Dict[str, Any]]] = None,
        layer_type: typing.Optional[Optional[str]] = None,
        stack: Union[bool, List[List[str]]] = False,
    ): ...
    def _subplot(self, layer, position, extent): ...
    def _tooltip_visible_update(self, event): ...
    def _update_cursor(self, event): ...
    def _update_cursor_size(self, event): ...
    def _update_layers(self, *, layers=None): ...
    def _update_mouse_pan(self, event):
        """Set the viewer interactive mouse panning"""
    def _update_mouse_zoom(self, event):
        """Set the viewer interactive mouse zoom"""
    def _update_status_bar_from_cursor(self, event=None): ...
    def _update_viewer_grid(self): ...
    def _valid_theme(v): ...
    def add_image(
        self,
        data=None,
        *,
        channel_axis=None,
        rgb=None,
        colormap=None,
        contrast_limits=None,
        gamma=1,
        interpolation2d='nearest',
        interpolation3d='linear',
        rendering='mip',
        depiction='volume',
        iso_threshold=None,
        attenuation=0.05,
        name=None,
        metadata=None,
        scale=None,
        translate=None,
        rotate=None,
        shear=None,
        affine=None,
        opacity=1,
        blending=None,
        visible=True,
        multiscale=None,
        cache=True,
        plane=None,
        experimental_clipping_planes=None,
        custom_interpolation_kernel_2d=None,
    ) -> Union[
        napari.layers.image.image.Image, List[napari.layers.image.image.Image]
    ]: ...
    def add_labels(
        self,
        data,
        *,
        num_colors=50,
        features=None,
        properties=None,
        color=None,
        seed=0.5,
        name=None,
        metadata=None,
        scale=None,
        translate=None,
        rotate=None,
        shear=None,
        affine=None,
        opacity=0.7,
        blending='translucent',
        rendering='iso_categorical',
        depiction='volume',
        visible=True,
        multiscale=None,
        cache=True,
        plane=None,
        experimental_clipping_planes=None,
    ) -> napari.layers.labels.labels.Labels: ...
    def add_layer(
        self, layer: napari.layers.base.base.Layer
    ) -> napari.layers.base.base.Layer: ...
    def add_points(
        self,
        data=None,
        *,
        ndim=None,
        features=None,
        feature_defaults=None,
        properties=None,
        text=None,
        symbol='o',
        size=10,
        edge_width=0.05,
        edge_width_is_relative=True,
        edge_color='dimgray',
        edge_color_cycle=None,
        edge_colormap='viridis',
        edge_contrast_limits=None,
        face_color='white',
        face_color_cycle=None,
        face_colormap='viridis',
        face_contrast_limits=None,
        out_of_slice_display=False,
        n_dimensional=None,
        name=None,
        metadata=None,
        scale=None,
        translate=None,
        rotate=None,
        shear=None,
        affine=None,
        opacity=1,
        blending='translucent',
        visible=True,
        cache=True,
        property_choices=None,
        experimental_clipping_planes=None,
        shading='none',
        canvas_size_limits=(2, 10000),
        antialiasing=1,
        shown=True,
    ) -> napari.layers.points.points.Points: ...
    def add_shapes(
        self,
        data=None,
        *,
        ndim=None,
        features=None,
        feature_defaults=None,
        properties=None,
        property_choices=None,
        text=None,
        shape_type='rectangle',
        edge_width=1,
        edge_color='#777777',
        edge_color_cycle=None,
        edge_colormap='viridis',
        edge_contrast_limits=None,
        face_color='white',
        face_color_cycle=None,
        face_colormap='viridis',
        face_contrast_limits=None,
        z_index=0,
        name=None,
        metadata=None,
        scale=None,
        translate=None,
        rotate=None,
        shear=None,
        affine=None,
        opacity=0.7,
        blending='translucent',
        visible=True,
        cache=True,
        experimental_clipping_planes=None,
    ) -> napari.layers.shapes.shapes.Shapes: ...
    def add_surface(
        self,
        data,
        *,
        colormap='gray',
        contrast_limits=None,
        gamma=1,
        name=None,
        metadata=None,
        scale=None,
        translate=None,
        rotate=None,
        shear=None,
        affine=None,
        opacity=1,
        blending='translucent',
        shading='flat',
        visible=True,
        cache=True,
        experimental_clipping_planes=None,
        wireframe=None,
        normals=None,
        texture=None,
        texcoords=None,
        vertex_colors=None,
    ) -> napari.layers.surface.surface.Surface: ...
    def add_tracks(
        self,
        data,
        *,
        features=None,
        properties=None,
        graph=None,
        tail_width=2,
        tail_length=30,
        head_length=0,
        name=None,
        metadata=None,
        scale=None,
        translate=None,
        rotate=None,
        shear=None,
        affine=None,
        opacity=1,
        blending='additive',
        visible=True,
        colormap='turbo',
        color_by='track_id',
        colormaps_dict=None,
        cache=True,
        experimental_clipping_planes=None,
    ) -> napari.layers.tracks.tracks.Tracks: ...
    def add_vectors(
        self,
        data=None,
        *,
        ndim=None,
        features=None,
        feature_defaults=None,
        properties=None,
        property_choices=None,
        edge_width=1,
        edge_color='red',
        edge_color_cycle=None,
        edge_colormap='viridis',
        edge_contrast_limits=None,
        out_of_slice_display=False,
        length=1,
        name=None,
        metadata=None,
        scale=None,
        translate=None,
        rotate=None,
        shear=None,
        affine=None,
        opacity=0.7,
        blending='translucent',
        visible=True,
        cache=True,
        experimental_clipping_planes=None,
    ) -> napari.layers.vectors.vectors.Vectors: ...
    def open(
        self,
        path: Union[str, pathlib.Path, Sequence[Union[str, pathlib.Path]]],
        *,
        stack: Union[bool, List[List[str]]] = False,
        plugin: Optional[str] = 'napari',
        layer_type: typing.Optional[Optional[str]] = None,
        **kwargs,
    ) -> List[napari.layers.base.base.Layer]: ...
    def open_sample(
        self,
        plugin: str,
        sample: str,
        reader_plugin: typing.Optional[Optional[str]] = None,
        **kwargs,
    ) -> List[napari.layers.base.base.Layer]: ...
    def reset_view(self):
        """Reset the camera view."""
    def rounded_division(min_val, max_val, precision): ...

def valid_add_kwargs() -> Dict[str, Set[str]]: ...
