import type { NobjcObject } from "objc-js";
import type { _ABPerson } from "./ABPerson.js";
import type { _ABRecord } from "./ABRecord.js";
import type { _ABSearchElement } from "./ABSearchElement.js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSString } from "../Foundation/NSString.js";
export declare class _ABGroup extends _ABRecord {
    static alloc(): _ABGroup;
    static new(): _ABGroup;
    init(): _ABGroup;
    static addPropertiesAndTypes$(properties: _NSDictionary): number;
    /**
     * Add properties to all groups. The dictionary must be of the form: key: propety name value: property type Property name must be unique Returns the number of properties successfuly added (-1 if an error occured)
     */
    static removeProperties$(properties: _NSArray): number;
    /**
     * Removes properties from all groups Returns the number of properties successfuly removed (-1 if an error occured)
     */
    static properties(): _NSArray;
    /** Returns an array of property names */
    static typeOfProperty$(property: _NSString): number;
    static searchElementForProperty$label$key$value$comparison$(property: _NSString, label: _NSString, key: _NSString, value: NobjcObject, comparison: number): _ABSearchElement;
    members(): _NSArray;
    /**
     * Returns an array of ABPerson. Returns an empty array if this group doesn't contain any people
     */
    addMember$(person: _ABPerson): boolean;
    /**
     * Adds person to this group. Does nothing if person is already part of this group (returns NO) Raises if person is nil Returns YES if successful
     */
    removeMember$(person: _ABPerson): boolean;
    /**
     * Removes person from this group. Does nothing if person is not part of this group (returns NO) Raises if person is nil Returns YES if successful
     */
    subgroups(): _NSArray;
    /**
     * Returns an array of ABGroup Returns an empty array if this group doesn't contain any other groups
     */
    addSubgroup$(group: _ABGroup): boolean;
    /**
     * Add group to this group. Does nothing if group is already part of this group (returns NO) Recursions are not allowed (returns NO) Raises if group is nil Returns YES if successful
     */
    removeSubgroup$(group: _ABGroup): boolean;
    /**
     * Removes group from this group. Does nothing if group is not part of this group (returns NO) Raises if group is nil Returns YES if successful
     */
    parentGroups(): _NSArray;
    /**
     * Returns an array of ABGroup this group belongs to. Returns an empty array if this group doesn't belong to any groups.
     */
    setDistributionIdentifier$forProperty$person$(identifier: _NSString, property: _NSString, person: _ABPerson): boolean;
    /**
     * Allows groups to be used as distribution lists (mailing list in the case of the email property) Example: For group "Football team" I want to use John's home email and Paul's work email The default distribution identifier is the property's primary identifier Use nil for the identifer to reset the distribution identifier to the default (e.g. primary) Raises if property or person is nil Returns YES if successful
     */
    distributionIdentifierForProperty$person$(property: _NSString, person: _ABPerson): _NSString;
}
