# WARNING: Please don't edit this file. It was generated by Python/WinRT v2.1.0

import datetime
import sys
import types
import typing
import uuid as _uuid
from builtins import property as _property

import winrt._winrt
import winrt.system
import winrt.windows.foundation as windows_foundation

from winrt.windows.ui.xaml.interop import NotifyCollectionChangedAction, TypeKind
from winrt.windows.ui.xaml.interop import BindableVectorChangedEventHandler, NotifyCollectionChangedEventHandler

Self = typing.TypeVar('Self')

@typing.final
class TypeName:
    name: str
    kind: TypeKind
    def __init__(self, name: str, kind: TypeKind) -> None: ...
    def __eq__(self, other: object, /) -> bool: ...
    def __ne__(self, other: object, /) -> bool: ...

@typing.final
class NotifyCollectionChangedEventArgs(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> NotifyCollectionChangedEventArgs: ...
    def __new__(cls: typing.Type[NotifyCollectionChangedEventArgs], action: NotifyCollectionChangedAction, new_items: typing.Optional[IBindableVector], old_items: typing.Optional[IBindableVector], new_index: winrt.system.Int32, old_index: winrt.system.Int32) -> NotifyCollectionChangedEventArgs: ...
    @_property
    def action(self) -> NotifyCollectionChangedAction: ...
    @_property
    def new_items(self) -> typing.Optional[IBindableVector]: ...
    @_property
    def new_starting_index(self) -> winrt.system.Int32: ...
    @_property
    def old_items(self) -> typing.Optional[IBindableVector]: ...
    @_property
    def old_starting_index(self) -> winrt.system.Int32: ...

@typing.final
class IBindableIterable(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IBindableIterable: ...
    def first(self) -> typing.Optional[IBindableIterator]: ...

@typing.final
class IBindableIterator(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IBindableIterator: ...
    def move_next(self) -> bool: ...
    @_property
    def current(self) -> typing.Optional[winrt.system.Object]: ...
    @_property
    def has_current(self) -> bool: ...

@typing.final
class IBindableObservableVector(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IBindableObservableVector: ...
    def append(self, value: typing.Optional[winrt.system.Object], /) -> None: ...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[IBindableIterator]: ...
    def get_at(self, index: winrt.system.UInt32, /) -> typing.Optional[winrt.system.Object]: ...
    def get_view(self) -> typing.Optional[IBindableVectorView]: ...
    def index_of(self, value: typing.Optional[winrt.system.Object], /) -> typing.Tuple[bool, winrt.system.UInt32]: ...
    def insert_at(self, index: winrt.system.UInt32, value: typing.Optional[winrt.system.Object], /) -> None: ...
    def remove_at(self, index: winrt.system.UInt32, /) -> None: ...
    def remove_at_end(self) -> None: ...
    def set_at(self, index: winrt.system.UInt32, value: typing.Optional[winrt.system.Object], /) -> None: ...
    def add_vector_changed(self, handler: typing.Optional[BindableVectorChangedEventHandler], /) -> windows_foundation.EventRegistrationToken: ...
    def remove_vector_changed(self, token: windows_foundation.EventRegistrationToken, /) -> None: ...
    @_property
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class IBindableVector(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IBindableVector: ...
    def append(self, value: typing.Optional[winrt.system.Object], /) -> None: ...
    def clear(self) -> None: ...
    def first(self) -> typing.Optional[IBindableIterator]: ...
    def get_at(self, index: winrt.system.UInt32, /) -> typing.Optional[winrt.system.Object]: ...
    def get_view(self) -> typing.Optional[IBindableVectorView]: ...
    def index_of(self, value: typing.Optional[winrt.system.Object], /) -> typing.Tuple[bool, winrt.system.UInt32]: ...
    def insert_at(self, index: winrt.system.UInt32, value: typing.Optional[winrt.system.Object], /) -> None: ...
    def remove_at(self, index: winrt.system.UInt32, /) -> None: ...
    def remove_at_end(self) -> None: ...
    def set_at(self, index: winrt.system.UInt32, value: typing.Optional[winrt.system.Object], /) -> None: ...
    @_property
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class IBindableVectorView(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> IBindableVectorView: ...
    def first(self) -> typing.Optional[IBindableIterator]: ...
    def get_at(self, index: winrt.system.UInt32, /) -> typing.Optional[winrt.system.Object]: ...
    def index_of(self, value: typing.Optional[winrt.system.Object], /) -> typing.Tuple[bool, winrt.system.UInt32]: ...
    @_property
    def size(self) -> winrt.system.UInt32: ...

@typing.final
class INotifyCollectionChanged(winrt.system.Object):
    @staticmethod
    def _from(obj: winrt.system.Object, /) -> INotifyCollectionChanged: ...
    def add_collection_changed(self, handler: typing.Optional[NotifyCollectionChangedEventHandler], /) -> windows_foundation.EventRegistrationToken: ...
    def remove_collection_changed(self, token: windows_foundation.EventRegistrationToken, /) -> None: ...

