//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
use objc2_foundation::*;

use crate::*;

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nscollectionelementcategory?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSCollectionElementCategory(pub NSInteger);
impl NSCollectionElementCategory {
    #[doc(alias = "NSCollectionElementCategoryItem")]
    pub const Item: Self = Self(0);
    #[doc(alias = "NSCollectionElementCategorySupplementaryView")]
    pub const SupplementaryView: Self = Self(1);
    #[doc(alias = "NSCollectionElementCategoryDecorationView")]
    pub const DecorationView: Self = Self(2);
    #[doc(alias = "NSCollectionElementCategoryInterItemGap")]
    pub const InterItemGap: Self = Self(3);
}

unsafe impl Encode for NSCollectionElementCategory {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for NSCollectionElementCategory {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nscollectionviewdecorationelementkind?language=objc)
pub type NSCollectionViewDecorationElementKind = NSString;

extern "C" {
    /// [Apple's documentation](https://developer.apple.com/documentation/appkit/nscollectionelementkindinteritemgapindicator?language=objc)
    #[cfg(feature = "NSCollectionView")]
    pub static NSCollectionElementKindInterItemGapIndicator:
        &'static NSCollectionViewSupplementaryElementKind;
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/appkit/nscollectionviewlayoutattributes?language=objc)
    #[unsafe(super(NSObject))]
    #[thread_kind = MainThreadOnly]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSCollectionViewLayoutAttributes;
);

unsafe impl NSCopying for NSCollectionViewLayoutAttributes {}

unsafe impl CopyingHelper for NSCollectionViewLayoutAttributes {
    type Result = Self;
}

unsafe impl NSObjectProtocol for NSCollectionViewLayoutAttributes {}

impl NSCollectionViewLayoutAttributes {
    extern_methods!(
        #[unsafe(method(frame))]
        #[unsafe(method_family = none)]
        pub unsafe fn frame(&self) -> NSRect;

        /// Setter for [`frame`][Self::frame].
        #[unsafe(method(setFrame:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setFrame(&self, frame: NSRect);

        #[unsafe(method(size))]
        #[unsafe(method_family = none)]
        pub unsafe fn size(&self) -> NSSize;

        /// Setter for [`size`][Self::size].
        #[unsafe(method(setSize:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setSize(&self, size: NSSize);

        #[cfg(feature = "objc2-core-foundation")]
        #[unsafe(method(alpha))]
        #[unsafe(method_family = none)]
        pub unsafe fn alpha(&self) -> CGFloat;

        #[cfg(feature = "objc2-core-foundation")]
        /// Setter for [`alpha`][Self::alpha].
        #[unsafe(method(setAlpha:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setAlpha(&self, alpha: CGFloat);

        #[unsafe(method(zIndex))]
        #[unsafe(method_family = none)]
        pub unsafe fn zIndex(&self) -> NSInteger;

        /// Setter for [`zIndex`][Self::zIndex].
        #[unsafe(method(setZIndex:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setZIndex(&self, z_index: NSInteger);

        #[unsafe(method(isHidden))]
        #[unsafe(method_family = none)]
        pub unsafe fn isHidden(&self) -> bool;

        /// Setter for [`isHidden`][Self::isHidden].
        #[unsafe(method(setHidden:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setHidden(&self, hidden: bool);

        #[unsafe(method(indexPath))]
        #[unsafe(method_family = none)]
        pub unsafe fn indexPath(&self) -> Option<Retained<NSIndexPath>>;

        /// Setter for [`indexPath`][Self::indexPath].
        #[unsafe(method(setIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setIndexPath(&self, index_path: Option<&NSIndexPath>);

        #[unsafe(method(representedElementCategory))]
        #[unsafe(method_family = none)]
        pub unsafe fn representedElementCategory(&self) -> NSCollectionElementCategory;

        #[unsafe(method(representedElementKind))]
        #[unsafe(method_family = none)]
        pub unsafe fn representedElementKind(&self) -> Option<Retained<NSString>>;

        #[unsafe(method(layoutAttributesForItemWithIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForItemWithIndexPath(
            index_path: &NSIndexPath,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;

        #[unsafe(method(layoutAttributesForInterItemGapBeforeIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForInterItemGapBeforeIndexPath(
            index_path: &NSIndexPath,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;

        #[cfg(feature = "NSCollectionView")]
        #[unsafe(method(layoutAttributesForSupplementaryViewOfKind:withIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForSupplementaryViewOfKind_withIndexPath(
            element_kind: &NSCollectionViewSupplementaryElementKind,
            index_path: &NSIndexPath,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;

        #[unsafe(method(layoutAttributesForDecorationViewOfKind:withIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForDecorationViewOfKind_withIndexPath(
            decoration_view_kind: &NSCollectionViewDecorationElementKind,
            index_path: &NSIndexPath,
            mtm: MainThreadMarker,
        ) -> Retained<Self>;
    );
}

/// Methods declared on superclass `NSObject`.
impl NSCollectionViewLayoutAttributes {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new(mtm: MainThreadMarker) -> Retained<Self>;
    );
}

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nscollectionupdateaction?language=objc)
// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSCollectionUpdateAction(pub NSInteger);
impl NSCollectionUpdateAction {
    #[doc(alias = "NSCollectionUpdateActionInsert")]
    pub const Insert: Self = Self(0);
    #[doc(alias = "NSCollectionUpdateActionDelete")]
    pub const Delete: Self = Self(1);
    #[doc(alias = "NSCollectionUpdateActionReload")]
    pub const Reload: Self = Self(2);
    #[doc(alias = "NSCollectionUpdateActionMove")]
    pub const Move: Self = Self(3);
    #[doc(alias = "NSCollectionUpdateActionNone")]
    pub const None: Self = Self(4);
}

unsafe impl Encode for NSCollectionUpdateAction {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for NSCollectionUpdateAction {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/appkit/nscollectionviewupdateitem?language=objc)
    #[unsafe(super(NSObject))]
    #[thread_kind = MainThreadOnly]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSCollectionViewUpdateItem;
);

unsafe impl NSObjectProtocol for NSCollectionViewUpdateItem {}

impl NSCollectionViewUpdateItem {
    extern_methods!(
        #[unsafe(method(indexPathBeforeUpdate))]
        #[unsafe(method_family = none)]
        pub unsafe fn indexPathBeforeUpdate(&self) -> Option<Retained<NSIndexPath>>;

        #[unsafe(method(indexPathAfterUpdate))]
        #[unsafe(method_family = none)]
        pub unsafe fn indexPathAfterUpdate(&self) -> Option<Retained<NSIndexPath>>;

        #[unsafe(method(updateAction))]
        #[unsafe(method_family = none)]
        pub unsafe fn updateAction(&self) -> NSCollectionUpdateAction;
    );
}

/// Methods declared on superclass `NSObject`.
impl NSCollectionViewUpdateItem {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new(mtm: MainThreadMarker) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/appkit/nscollectionviewlayoutinvalidationcontext?language=objc)
    #[unsafe(super(NSObject))]
    #[thread_kind = MainThreadOnly]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSCollectionViewLayoutInvalidationContext;
);

unsafe impl NSObjectProtocol for NSCollectionViewLayoutInvalidationContext {}

impl NSCollectionViewLayoutInvalidationContext {
    extern_methods!(
        #[unsafe(method(invalidateEverything))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidateEverything(&self) -> bool;

        #[unsafe(method(invalidateDataSourceCounts))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidateDataSourceCounts(&self) -> bool;

        #[unsafe(method(invalidateItemsAtIndexPaths:))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidateItemsAtIndexPaths(&self, index_paths: &NSSet<NSIndexPath>);

        #[cfg(feature = "NSCollectionView")]
        #[unsafe(method(invalidateSupplementaryElementsOfKind:atIndexPaths:))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidateSupplementaryElementsOfKind_atIndexPaths(
            &self,
            element_kind: &NSCollectionViewSupplementaryElementKind,
            index_paths: &NSSet<NSIndexPath>,
        );

        #[unsafe(method(invalidateDecorationElementsOfKind:atIndexPaths:))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidateDecorationElementsOfKind_atIndexPaths(
            &self,
            element_kind: &NSCollectionViewDecorationElementKind,
            index_paths: &NSSet<NSIndexPath>,
        );

        #[unsafe(method(invalidatedItemIndexPaths))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidatedItemIndexPaths(&self) -> Option<Retained<NSSet<NSIndexPath>>>;

        #[cfg(feature = "NSCollectionView")]
        #[unsafe(method(invalidatedSupplementaryIndexPaths))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidatedSupplementaryIndexPaths(
            &self,
        ) -> Option<
            Retained<NSDictionary<NSCollectionViewSupplementaryElementKind, NSSet<NSIndexPath>>>,
        >;

        #[unsafe(method(invalidatedDecorationIndexPaths))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidatedDecorationIndexPaths(
            &self,
        ) -> Option<Retained<NSDictionary<NSCollectionViewDecorationElementKind, NSSet<NSIndexPath>>>>;

        #[unsafe(method(contentOffsetAdjustment))]
        #[unsafe(method_family = none)]
        pub unsafe fn contentOffsetAdjustment(&self) -> NSPoint;

        /// Setter for [`contentOffsetAdjustment`][Self::contentOffsetAdjustment].
        #[unsafe(method(setContentOffsetAdjustment:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setContentOffsetAdjustment(&self, content_offset_adjustment: NSPoint);

        #[unsafe(method(contentSizeAdjustment))]
        #[unsafe(method_family = none)]
        pub unsafe fn contentSizeAdjustment(&self) -> NSSize;

        /// Setter for [`contentSizeAdjustment`][Self::contentSizeAdjustment].
        #[unsafe(method(setContentSizeAdjustment:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setContentSizeAdjustment(&self, content_size_adjustment: NSSize);
    );
}

/// Methods declared on superclass `NSObject`.
impl NSCollectionViewLayoutInvalidationContext {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new(mtm: MainThreadMarker) -> Retained<Self>;
    );
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/appkit/nscollectionviewlayout?language=objc)
    #[unsafe(super(NSObject))]
    #[thread_kind = MainThreadOnly]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct NSCollectionViewLayout;
);

unsafe impl NSCoding for NSCollectionViewLayout {}

unsafe impl NSObjectProtocol for NSCollectionViewLayout {}

impl NSCollectionViewLayout {
    extern_methods!(
        #[cfg(all(
            feature = "NSCollectionView",
            feature = "NSResponder",
            feature = "NSView"
        ))]
        #[unsafe(method(collectionView))]
        #[unsafe(method_family = none)]
        pub unsafe fn collectionView(&self) -> Option<Retained<NSCollectionView>>;

        #[unsafe(method(invalidateLayout))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidateLayout(&self);

        #[unsafe(method(invalidateLayoutWithContext:))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidateLayoutWithContext(
            &self,
            context: &NSCollectionViewLayoutInvalidationContext,
        );

        #[unsafe(method(registerClass:forDecorationViewOfKind:))]
        #[unsafe(method_family = none)]
        pub unsafe fn registerClass_forDecorationViewOfKind(
            &self,
            view_class: Option<&AnyClass>,
            element_kind: &NSCollectionViewDecorationElementKind,
        );

        #[cfg(feature = "NSNib")]
        #[unsafe(method(registerNib:forDecorationViewOfKind:))]
        #[unsafe(method_family = none)]
        pub unsafe fn registerNib_forDecorationViewOfKind(
            &self,
            nib: Option<&NSNib>,
            element_kind: &NSCollectionViewDecorationElementKind,
        );
    );
}

/// Methods declared on superclass `NSObject`.
impl NSCollectionViewLayout {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new(mtm: MainThreadMarker) -> Retained<Self>;
    );
}

/// NSSubclassingHooks.
impl NSCollectionViewLayout {
    extern_methods!(
        #[unsafe(method(layoutAttributesClass))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesClass(mtm: MainThreadMarker) -> &'static AnyClass;

        #[unsafe(method(invalidationContextClass))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidationContextClass(mtm: MainThreadMarker) -> &'static AnyClass;

        #[unsafe(method(prepareLayout))]
        #[unsafe(method_family = none)]
        pub unsafe fn prepareLayout(&self);

        #[unsafe(method(layoutAttributesForElementsInRect:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForElementsInRect(
            &self,
            rect: NSRect,
        ) -> Retained<NSArray<NSCollectionViewLayoutAttributes>>;

        #[unsafe(method(layoutAttributesForItemAtIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForItemAtIndexPath(
            &self,
            index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[cfg(feature = "NSCollectionView")]
        #[unsafe(method(layoutAttributesForSupplementaryViewOfKind:atIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForSupplementaryViewOfKind_atIndexPath(
            &self,
            element_kind: &NSCollectionViewSupplementaryElementKind,
            index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[unsafe(method(layoutAttributesForDecorationViewOfKind:atIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForDecorationViewOfKind_atIndexPath(
            &self,
            element_kind: &NSCollectionViewDecorationElementKind,
            index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[unsafe(method(layoutAttributesForDropTargetAtPoint:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForDropTargetAtPoint(
            &self,
            point_in_collection_view: NSPoint,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[unsafe(method(layoutAttributesForInterItemGapBeforeIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn layoutAttributesForInterItemGapBeforeIndexPath(
            &self,
            index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[unsafe(method(shouldInvalidateLayoutForBoundsChange:))]
        #[unsafe(method_family = none)]
        pub unsafe fn shouldInvalidateLayoutForBoundsChange(&self, new_bounds: NSRect) -> bool;

        #[unsafe(method(invalidationContextForBoundsChange:))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidationContextForBoundsChange(
            &self,
            new_bounds: NSRect,
        ) -> Retained<NSCollectionViewLayoutInvalidationContext>;

        #[unsafe(method(shouldInvalidateLayoutForPreferredLayoutAttributes:withOriginalAttributes:))]
        #[unsafe(method_family = none)]
        pub unsafe fn shouldInvalidateLayoutForPreferredLayoutAttributes_withOriginalAttributes(
            &self,
            preferred_attributes: &NSCollectionViewLayoutAttributes,
            original_attributes: &NSCollectionViewLayoutAttributes,
        ) -> bool;

        #[unsafe(method(invalidationContextForPreferredLayoutAttributes:withOriginalAttributes:))]
        #[unsafe(method_family = none)]
        pub unsafe fn invalidationContextForPreferredLayoutAttributes_withOriginalAttributes(
            &self,
            preferred_attributes: &NSCollectionViewLayoutAttributes,
            original_attributes: &NSCollectionViewLayoutAttributes,
        ) -> Retained<NSCollectionViewLayoutInvalidationContext>;

        #[unsafe(method(targetContentOffsetForProposedContentOffset:withScrollingVelocity:))]
        #[unsafe(method_family = none)]
        pub unsafe fn targetContentOffsetForProposedContentOffset_withScrollingVelocity(
            &self,
            proposed_content_offset: NSPoint,
            velocity: NSPoint,
        ) -> NSPoint;

        #[unsafe(method(targetContentOffsetForProposedContentOffset:))]
        #[unsafe(method_family = none)]
        pub unsafe fn targetContentOffsetForProposedContentOffset(
            &self,
            proposed_content_offset: NSPoint,
        ) -> NSPoint;

        #[unsafe(method(collectionViewContentSize))]
        #[unsafe(method_family = none)]
        pub unsafe fn collectionViewContentSize(&self) -> NSSize;
    );
}

/// NSUpdateSupportHooks.
impl NSCollectionViewLayout {
    extern_methods!(
        #[unsafe(method(prepareForCollectionViewUpdates:))]
        #[unsafe(method_family = none)]
        pub unsafe fn prepareForCollectionViewUpdates(
            &self,
            update_items: &NSArray<NSCollectionViewUpdateItem>,
        );

        #[unsafe(method(finalizeCollectionViewUpdates))]
        #[unsafe(method_family = none)]
        pub unsafe fn finalizeCollectionViewUpdates(&self);

        #[unsafe(method(prepareForAnimatedBoundsChange:))]
        #[unsafe(method_family = none)]
        pub unsafe fn prepareForAnimatedBoundsChange(&self, old_bounds: NSRect);

        #[unsafe(method(finalizeAnimatedBoundsChange))]
        #[unsafe(method_family = none)]
        pub unsafe fn finalizeAnimatedBoundsChange(&self);

        #[unsafe(method(prepareForTransitionToLayout:))]
        #[unsafe(method_family = none)]
        pub unsafe fn prepareForTransitionToLayout(&self, new_layout: &NSCollectionViewLayout);

        #[unsafe(method(prepareForTransitionFromLayout:))]
        #[unsafe(method_family = none)]
        pub unsafe fn prepareForTransitionFromLayout(&self, old_layout: &NSCollectionViewLayout);

        #[unsafe(method(finalizeLayoutTransition))]
        #[unsafe(method_family = none)]
        pub unsafe fn finalizeLayoutTransition(&self);

        #[unsafe(method(initialLayoutAttributesForAppearingItemAtIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn initialLayoutAttributesForAppearingItemAtIndexPath(
            &self,
            item_index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[unsafe(method(finalLayoutAttributesForDisappearingItemAtIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn finalLayoutAttributesForDisappearingItemAtIndexPath(
            &self,
            item_index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[cfg(feature = "NSCollectionView")]
        #[unsafe(method(initialLayoutAttributesForAppearingSupplementaryElementOfKind:atIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn initialLayoutAttributesForAppearingSupplementaryElementOfKind_atIndexPath(
            &self,
            element_kind: &NSCollectionViewSupplementaryElementKind,
            element_index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[cfg(feature = "NSCollectionView")]
        #[unsafe(method(finalLayoutAttributesForDisappearingSupplementaryElementOfKind:atIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn finalLayoutAttributesForDisappearingSupplementaryElementOfKind_atIndexPath(
            &self,
            element_kind: &NSCollectionViewSupplementaryElementKind,
            element_index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[unsafe(method(initialLayoutAttributesForAppearingDecorationElementOfKind:atIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn initialLayoutAttributesForAppearingDecorationElementOfKind_atIndexPath(
            &self,
            element_kind: &NSCollectionViewDecorationElementKind,
            decoration_index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[unsafe(method(finalLayoutAttributesForDisappearingDecorationElementOfKind:atIndexPath:))]
        #[unsafe(method_family = none)]
        pub unsafe fn finalLayoutAttributesForDisappearingDecorationElementOfKind_atIndexPath(
            &self,
            element_kind: &NSCollectionViewDecorationElementKind,
            decoration_index_path: &NSIndexPath,
        ) -> Option<Retained<NSCollectionViewLayoutAttributes>>;

        #[cfg(feature = "NSCollectionView")]
        #[unsafe(method(indexPathsToDeleteForSupplementaryViewOfKind:))]
        #[unsafe(method_family = none)]
        pub unsafe fn indexPathsToDeleteForSupplementaryViewOfKind(
            &self,
            element_kind: &NSCollectionViewSupplementaryElementKind,
        ) -> Retained<NSSet<NSIndexPath>>;

        #[unsafe(method(indexPathsToDeleteForDecorationViewOfKind:))]
        #[unsafe(method_family = none)]
        pub unsafe fn indexPathsToDeleteForDecorationViewOfKind(
            &self,
            element_kind: &NSCollectionViewDecorationElementKind,
        ) -> Retained<NSSet<NSIndexPath>>;

        #[cfg(feature = "NSCollectionView")]
        #[unsafe(method(indexPathsToInsertForSupplementaryViewOfKind:))]
        #[unsafe(method_family = none)]
        pub unsafe fn indexPathsToInsertForSupplementaryViewOfKind(
            &self,
            element_kind: &NSCollectionViewSupplementaryElementKind,
        ) -> Retained<NSSet<NSIndexPath>>;

        #[unsafe(method(indexPathsToInsertForDecorationViewOfKind:))]
        #[unsafe(method_family = none)]
        pub unsafe fn indexPathsToInsertForDecorationViewOfKind(
            &self,
            element_kind: &NSCollectionViewDecorationElementKind,
        ) -> Retained<NSSet<NSIndexPath>>;
    );
}
