/// <reference types="@nativescript/objc-node-api" />
/// <reference path="./Runtime.d.ts" />
/// <reference path="./AppKit.d.ts" />

declare const kEventParamABPickerRef: number;

declare const kEventABPeoplePickerGroupDoubleClicked: number;

declare const kEventABPeoplePickerValueSelectionChanged: number;

declare const kEventABPeoplePickerNameSelectionChanged: number;

declare const kEventABPeoplePickerGroupSelectionChanged: number;

declare const kEventClassABPeoplePicker: number;

declare const kABPickerAllowGroupSelection: number;

declare const ABPeoplePickerDisplayedPropertyDidChangeNotification: string;

declare const ABPeoplePickerGroupSelectionDidChangeNotification: string;

declare const ABAddressBookErrorDomain: string;

declare const ABPropertyReadOnlyError: number;

declare const ABPropertyValueValidationError: number;

declare const ABAddRecordsError: number;

declare const kABDeletedRecords: string;

declare const kABDatabaseChangedExternallyNotification: string;

declare const kABOtherLabel: string;

declare const kABGroupNameProperty: string;

declare const kABSuffixProperty: string;

declare const kABTitleProperty: string;

declare const kABSocialProfileServiceMySpace: string;

declare const kABSocialProfileServiceFlickr: string;

declare const kABSocialProfileServiceLinkedIn: string;

declare const kABSocialProfileServiceFacebook: string;

declare const kABSocialProfileServiceTwitter: string;

declare const kABSocialProfileServiceKey: string;

declare const kABInstantMessageServiceJabber: string;

declare const kABInstantMessageServiceICQ: string;

declare const kABInstantMessageServiceGoogleTalk: string;

declare const kABInstantMessageServiceGaduGadu: string;

declare const kABInstantMessageServiceFacebook: string;

declare const kABInstantMessageServiceKey: string;

declare const kABYahooHomeLabel: string;

declare const kABYahooWorkLabel: string;

declare const kABMSNWorkLabel: string;

declare const kABMSNInstantProperty: string;

declare const kABJabberHomeLabel: string;

declare const kABJabberWorkLabel: string;

declare const kABAIMMobileMeLabel: string;

declare const kABPhonePagerLabel: string;

declare const kABPhoneMainLabel: string;

declare const kABPhoneProperty: string;

declare const kABPersonFlags: string;

declare const kABPartnerLabel: string;

declare const kABSpouseLabel: string;

declare const kABChildLabel: string;

declare const kABBrotherLabel: string;

declare const kABFatherLabel: string;

declare const kABRelatedNamesProperty: string;

declare const kABAddressHomeLabel: string;

declare const kABAddressZIPKey: string;

declare const kABAddressStateKey: string;

declare const kABAddressCityKey: string;

declare const kABAddressStreetKey: string;

declare const kABEmailHomeLabel: string;

declare const kABURLsProperty: string;

declare const kABJobTitleProperty: string;

declare const kABOrganizationPhoneticProperty: string;

declare const kABAlternateBirthdayComponentsProperty: string;

declare const kABMaidenNameProperty: string;

declare const kABNicknameProperty: string;

declare const kABLastNamePhoneticProperty: string;

declare const kABFirstNameProperty: string;

declare const kABCreationDateProperty: string;

declare const kABAnniversaryLabel: string;

declare const kABMiddleNameProperty: string;

declare const kABDatabaseChangedNotification: string;

declare const kABSocialProfileUsernameKey: string;

declare const kABUpdatedRecords: string;

declare const kABAIMInstantProperty: string;

declare const kABPhoneHomeLabel: string;

declare const kABInstantMessageProperty: string;

declare const kABInstantMessageServiceMSN: string;

declare const kABUIDProperty: string;

declare const kABICQWorkLabel: string;

declare const kABPickerAllowMultipleSelection: number;

declare const kABLastNameProperty: string;

declare const kABDepartmentProperty: string;

declare const kABHomePageLabel: string;

declare const kABICQHomeLabel: string;

declare const kABAddressProperty: string;

declare const kABSocialProfileURLKey: string;

declare const kABSocialProfileServiceSinaWeibo: string;

declare const kABICQInstantProperty: string;

declare const kABPhoneHomeFAXLabel: string;

declare const kEventABPeoplePickerNameDoubleClicked: number;

declare const kABSocialProfileUserIdentifierKey: string;

declare const kABHomeLabel: string;

declare const kABAssistantLabel: string;

declare const kABBirthdayComponentsProperty: string;

declare const ABMultiValueIdentifiersErrorKey: string;

declare const ABRemoveRecordsError: number;

declare const kABSocialProfileProperty: string;

declare const kABPickerSingleValueSelection: number;

declare const kABPhoneWorkLabel: string;

declare const kABYahooInstantProperty: string;

declare const kABWorkLabel: string;

declare const kABInstantMessageServiceYahoo: string;

declare const kABFriendLabel: string;

declare const ABPropertyUnsupportedBySourceError: number;

declare const kABOrganizationProperty: string;

declare const kABPhoneiPhoneLabel: string;

declare const kABFirstNamePhoneticProperty: string;

declare const kABParentLabel: string;

declare const kABModificationDateProperty: string;

declare const kABEmailMobileMeLabel: string;

declare const kABInstantMessageServiceAIM: string;

declare const kABNoteProperty: string;

declare const kABAIMHomeLabel: string;

declare const kABAIMWorkLabel: string;

declare const kABAddressCountryCodeKey: string;

declare const kABInstantMessageServiceQQ: string;

declare const kABInstantMessageUsernameKey: string;

declare const kABCalendarURIsProperty: string;

declare const kABOtherDateComponentsProperty: string;

declare const kABMotherLabel: string;

declare const ABPeoplePickerNameSelectionDidChangeNotification: string;

declare const kABAddressCountryKey: string;

declare const kABSisterLabel: string;

declare const kABPhoneMobileLabel: string;

declare const kABMSNHomeLabel: string;

declare const kABMiddleNamePhoneticProperty: string;

declare const kABOtherDatesProperty: string;

declare const ABPeoplePickerValueSelectionDidChangeNotification: string;

declare const kABAddressWorkLabel: string;

declare const kABPhoneWorkFAXLabel: string;

declare const kABHomePageProperty: string;

declare const kABSocialProfileServiceYelp: string;

declare const kABBirthdayProperty: string;

declare const kABSocialProfileServiceTencentWeibo: string;

declare const kABManagerLabel: string;

declare const kABPickerMultipleValueSelection: number;

declare const kABJabberInstantProperty: string;

declare const kABInsertedRecords: string;

declare const kABEmailWorkLabel: string;

declare const kABMobileMeLabel: string;

declare const kABEmailProperty: string;

declare const kEventABPeoplePickerDisplayedPropertyChanged: number;

declare const kABInstantMessageServiceSkype: string;

declare const _ABSearchComparison: {
  Equal: 0,
  NotEqual: 1,
  LessThan: 2,
  LessThanOrEqual: 3,
  GreaterThan: 4,
  GreaterThanOrEqual: 5,
  EqualCaseInsensitive: 6,
  ContainsSubString: 7,
  ContainsSubStringCaseInsensitive: 8,
  PrefixMatch: 9,
  PrefixMatchCaseInsensitive: 10,
  BitsInBitFieldMatch: 11,
  DoesNotContainSubString: 12,
  DoesNotContainSubStringCaseInsensitive: 13,
  NotEqualCaseInsensitive: 14,
  SuffixMatch: 15,
  SuffixMatchCaseInsensitive: 16,
  WithinIntervalAroundToday: 17,
  WithinIntervalAroundTodayYearless: 18,
  NotWithinIntervalAroundToday: 19,
  NotWithinIntervalAroundTodayYearless: 20,
  WithinIntervalFromToday: 21,
  WithinIntervalFromTodayYearless: 22,
  NotWithinIntervalFromToday: 23,
  NotWithinIntervalFromTodayYearless: 24,
};

declare const ABPeoplePickerSelectionBehavior: {
  No: 0,
  Single: 1,
  Multiple: 2,
};

declare const _ABSearchConjunction: {
  And: 0,
  Or: 1,
};

declare const _ABPropertyType: {
  ErrorIn: 0,
  String: 1,
  Integer: 2,
  Real: 3,
  Date: 4,
  Array: 5,
  Dictionary: 6,
  Data: 7,
  DateComponents: 8,
  MultiString: 257,
  MultiInteger: 258,
  MultiReal: 259,
  MultiDate: 260,
  MultiArray: 261,
  MultiDictionary: 262,
  MultiData: 263,
  MultiDateComponents: 264,
};

declare class OpaqueABPicker {
  constructor(init?: OpaqueABPicker);
}

declare class ABActionCallbacks {
  constructor(init?: ABActionCallbacks);
  version: number;
  property: () => interop.Pointer | null;
  title: (p1: interop.PointerConvertible, p2: interop.PointerConvertible) => interop.Pointer | null;
  enabled: (p1: interop.PointerConvertible, p2: interop.PointerConvertible) => number | null;
  selected: (p1: interop.PointerConvertible, p2: interop.PointerConvertible) => void | null;
}

declare class __ABMultiValue {
  constructor(init?: __ABMultiValue);
}

declare class __ABAddressBookRef {
  constructor(init?: __ABAddressBookRef);
}

declare class __ABPerson {
  constructor(init?: __ABPerson);
}

declare class __ABSearchElementRef {
  constructor(init?: __ABSearchElementRef);
}

declare class __ABGroup {
  constructor(init?: __ABGroup);
}

declare function ABLocalizedPropertyOrLabel(propertyOrLabel: string): string;

declare function ABGetSharedAddressBook(): interop.Object;

declare function ABCopyArrayOfMatchingRecords(addressBook: interop.Object, search: interop.Object): interop.Object;

declare function ABSave(addressBook: interop.Object): boolean;

declare function ABHasUnsavedChanges(addressBook: interop.Object): boolean;

declare function ABGetMe(addressBook: interop.Object): interop.Object;

declare function ABSetMe(addressBook: interop.Object, moi: interop.Object): void;

declare function ABCopyRecordTypeFromUniqueId(addressBook: interop.Object, uniqueId: interop.Object): interop.Object;

declare function ABAddPropertiesAndTypes(addressBook: interop.Object, recordType: interop.Object, propertiesAndTypes: interop.Object): number;

declare function ABRemoveProperties(addressBook: interop.Object, recordType: interop.Object, properties: interop.Object): number;

declare function ABCopyArrayOfPropertiesForRecordType(addressBook: interop.Object, recordType: interop.Object): interop.Object;

declare function ABTypeOfProperty(addressBook: interop.Object, recordType: interop.Object, property: interop.Object): number;

declare function ABCopyRecordForUniqueId(addressBook: interop.Object, uniqueId: interop.Object): interop.Object;

declare function ABAddRecord(addressBook: interop.Object, record: interop.Object): boolean;

declare function ABRemoveRecord(addressBook: interop.Object, record: interop.Object): boolean;

declare function ABCopyArrayOfAllPeople(addressBook: interop.Object): interop.Object;

declare function ABCopyArrayOfAllGroups(addressBook: interop.Object): interop.Object;

declare function ABRecordCreateCopy(record: interop.Object): interop.Object;

declare function ABRecordCopyRecordType(record: interop.Object): interop.Object;

declare function ABRecordCopyValue(record: interop.Object, property: interop.Object): interop.Object;

declare function ABRecordSetValue(record: interop.Object, property: interop.Object, value: interop.Object): boolean;

declare function ABRecordRemoveValue(record: interop.Object, property: interop.Object): boolean;

declare function ABRecordIsReadOnly(record: interop.Object): boolean;

declare function ABRecordCopyUniqueId(record: interop.Object): interop.Object;

declare function ABPersonCreate(): interop.Object;

declare function ABPersonCreateWithVCardRepresentation(vCard: interop.Object): interop.Object;

declare function ABPersonCopyVCardRepresentation(person: interop.Object): interop.Object;

declare function ABPersonCopyParentGroups(person: interop.Object): interop.Object;

declare function ABPersonCreateSearchElement(property: interop.Object, label: interop.Object, key: interop.Object, value: interop.Object, comparison: number): interop.Object;

declare function ABGroupCreate(): interop.Object;

declare function ABGroupCopyArrayOfAllMembers(group: interop.Object): interop.Object;

declare function ABGroupAddMember(group: interop.Object, personToAdd: interop.Object): boolean;

declare function ABGroupRemoveMember(group: interop.Object, personToRemove: interop.Object): boolean;

declare function ABGroupCopyArrayOfAllSubgroups(group: interop.Object): interop.Object;

declare function ABGroupAddGroup(group: interop.Object, groupToAdd: interop.Object): boolean;

declare function ABGroupRemoveGroup(group: interop.Object, groupToRemove: interop.Object): boolean;

declare function ABGroupCopyParentGroups(group: interop.Object): interop.Object;

declare function ABGroupSetDistributionIdentifier(group: interop.Object, person: interop.Object, property: interop.Object, identifier: interop.Object): boolean;

declare function ABGroupCopyDistributionIdentifier(group: interop.Object, person: interop.Object, property: interop.Object): interop.Object;

declare function ABGroupCreateSearchElement(property: interop.Object, label: interop.Object, key: interop.Object, value: interop.Object, comparison: number): interop.Object;

declare function ABSearchElementCreateWithConjunction(conjunction: number, childrenSearchElement: interop.Object): interop.Object;

declare function ABSearchElementMatchesRecord(searchElement: interop.Object, record: interop.Object): boolean;

declare function ABMultiValueCreate(): interop.Object;

declare function ABMultiValueCount(multiValue: interop.Object): number;

declare function ABMultiValueCopyValueAtIndex(multiValue: interop.Object, index: number): interop.Object;

declare function ABMultiValueCopyLabelAtIndex(multiValue: interop.Object, index: number): interop.Object;

declare function ABMultiValueCopyPrimaryIdentifier(multiValue: interop.Object): interop.Object;

declare function ABMultiValueIndexForIdentifier(multiValue: interop.Object, identifier: interop.Object): number;

declare function ABMultiValueCopyIdentifierAtIndex(multiValue: interop.Object, index: number): interop.Object;

declare function ABMultiValuePropertyType(multiValue: interop.Object): number;

declare function ABMultiValueCreateCopy(multiValue: interop.Object): interop.Object;

declare function ABMultiValueCreateMutable(): interop.Object;

declare function ABMultiValueAdd(multiValue: interop.Object, value: interop.Object, label: interop.Object, outIdentifier: interop.PointerConvertible): boolean;

declare function ABMultiValueInsert(multiValue: interop.Object, value: interop.Object, label: interop.Object, index: number, outIdentifier: interop.PointerConvertible): boolean;

declare function ABMultiValueRemove(multiValue: interop.Object, index: number): boolean;

declare function ABMultiValueReplaceValue(multiValue: interop.Object, value: interop.Object, index: number): boolean;

declare function ABMultiValueReplaceLabel(multiValue: interop.Object, label: interop.Object, index: number): boolean;

declare function ABMultiValueSetPrimaryIdentifier(multiValue: interop.Object, identifier: interop.Object): boolean;

declare function ABMultiValueCreateMutableCopy(multiValue: interop.Object): interop.Object;

declare function ABCopyLocalizedPropertyOrLabel(labelOrProperty: interop.Object): interop.Object;

declare function ABCreateFormattedAddressFromDictionary(addressBook: interop.Object, address: interop.Object): interop.Object;

declare function ABCopyDefaultCountryCode(addressBook: interop.Object): interop.Object;

declare function ABPersonSetImageData(person: interop.Object, imageData: interop.Object): boolean;

declare function ABPersonCopyImageData(person: interop.Object): interop.Object;

declare function ABBeginLoadingImageDataForClient(person: interop.Object, callback: (p1: interop.PointerConvertible, p2: number, p3: interop.PointerConvertible) => void, refcon: interop.PointerConvertible): number;

declare function ABCancelLoadingImageDataForTag(tag: number): void;

declare function ABPickerCreate(): interop.Object;

declare function ABPickerSetFrame(inPicker: interop.Object, inFrame: interop.PointerConvertible): void;

declare function ABPickerGetFrame(inPicker: interop.Object, outFrame: interop.PointerConvertible): void;

declare function ABPickerSetVisibility(inPicker: interop.Object, visible: boolean): void;

declare function ABPickerIsVisible(inPicker: interop.Object): boolean;

declare function ABPickerGetAttributes(inPicker: interop.Object): number;

declare function ABPickerChangeAttributes(inPicker: interop.Object, inAttributesToSet: number, inAttributesToClear: number): void;

declare function ABPickerAddProperty(inPicker: interop.Object, inProperty: interop.Object): void;

declare function ABPickerRemoveProperty(inPicker: interop.Object, inProperty: interop.Object): void;

declare function ABPickerCopyProperties(inPicker: interop.Object): interop.Object;

declare function ABPickerSetColumnTitle(inPicker: interop.Object, inTitle: interop.Object, inProperty: interop.Object): void;

declare function ABPickerCopyColumnTitle(inPicker: interop.Object, inProperty: interop.Object): interop.Object;

declare function ABPickerSetDisplayedProperty(inPicker: interop.Object, inProperty: interop.Object): void;

declare function ABPickerCopyDisplayedProperty(inPicker: interop.Object): interop.Object;

declare function ABPickerCopySelectedGroups(inPicker: interop.Object): interop.Object;

declare function ABPickerCopySelectedRecords(inPicker: interop.Object): interop.Object;

declare function ABPickerCopySelectedIdentifiers(inPicker: interop.Object, inPerson: interop.Object): interop.Object;

declare function ABPickerCopySelectedValues(inPicker: interop.Object): interop.Object;

declare function ABPickerSelectGroup(inPicker: interop.Object, inGroup: interop.Object, inExtendSelection: boolean): void;

declare function ABPickerSelectRecord(inPicker: interop.Object, inRecord: interop.Object, inExtendSelection: boolean): void;

declare function ABPickerSelectIdentifier(inPicker: interop.Object, inPerson: interop.Object, inIdentifier: interop.Object, inExtendSelection: boolean): void;

declare function ABPickerDeselectGroup(inPicker: interop.Object, inGroup: interop.Object): void;

declare function ABPickerDeselectRecord(inPicker: interop.Object, inRecord: interop.Object): void;

declare function ABPickerDeselectIdentifier(inPicker: interop.Object, inPerson: interop.Object, inIdentifier: interop.Object): void;

declare function ABPickerDeselectAll(inPicker: interop.Object): void;

declare function ABPickerSetDelegate(inPicker: interop.Object, inDelegate: interop.PointerConvertible): void;

declare function ABPickerGetDelegate(inPicker: interop.Object): interop.Pointer;

declare function ABPickerClearSearchField(inPicker: interop.Object): void;

declare function ABPickerEditInAddressBook(inPicker: interop.Object): void;

declare function ABPickerSelectInAddressBook(inPicker: interop.Object): void;

declare interface ABImageClient extends NSObjectProtocol {
  consumeImageDataForTag(data: NSData, tag: number): void;
}

declare class ABImageClient extends NativeObject implements ABImageClient {
}

declare interface ABPersonPickerDelegate extends NSObjectProtocol {
  personPickerDidChoosePersonPropertyIdentifier(picker: ABPersonPicker, person: ABPerson, property: string, identifier: string): void;

  personPickerDidClose?(picker: ABPersonPicker): void;
}

declare class ABPersonPickerDelegate extends NativeObject implements ABPersonPickerDelegate {
}

declare class ABPersonPicker extends NSObject {
  get properties(): NSArray;
  set properties(value: NSArray<interop.Object> | Array<interop.Object>);

  delegate: ABPersonPickerDelegate;

  showRelativeToRectOfViewPreferredEdge(positioningRect: CGRect, positioningView: NSView, preferredEdge: interop.Enum<typeof NSRectEdge>): void;

  close(): void;
}

declare class ABPeoplePickerView extends NSView {
  accessoryView: NSView;

  valueSelectionBehavior: interop.Enum<typeof ABPeoplePickerSelectionBehavior>;

  allowsGroupSelection: boolean;

  allowsMultipleSelection: boolean;

  addProperty(property: string): void;

  removeProperty(property: string): void;

  properties(): NSArray;

  setColumnTitleForProperty(title: string, property: string): void;

  columnTitleForProperty(property: string): string;

  displayedProperty: string;

  autosaveName: string;

  readonly selectedGroups: NSArray;

  readonly selectedRecords: NSArray;

  selectedIdentifiersForPerson(person: ABPerson): NSArray;

  selectGroupByExtendingSelection(group: ABGroup, extend: boolean): void;

  selectRecordByExtendingSelection(record: ABRecord, extend: boolean): void;

  selectIdentifierForPersonByExtendingSelection(identifier: string, person: ABPerson, extend: boolean): void;

  deselectGroup(group: ABGroup): void;

  deselectRecord(record: ABRecord): void;

  deselectIdentifierForPerson(identifier: string, person: ABPerson): void;

  deselectAll(sender: interop.Object): void;

  clearSearchField(sender: interop.Object): void;

  target: interop.Object;

  groupDoubleAction: string;

  nameDoubleAction: string;

  selectedValues(): NSArray;

  editInAddressBook(sender: interop.Object): void;

  selectInAddressBook(sender: interop.Object): void;
}

declare class ABSearchElement extends NSObject {
  static searchElementForConjunctionChildren(conjuction: number, children: NSArray<interop.Object> | Array<interop.Object>): ABSearchElement;

  matchesRecord(record: ABRecord): boolean;
}

declare class ABMutableMultiValue extends ABMultiValue {
  addValueWithLabel(value: interop.Object, label: string): string;

  insertValueWithLabelAtIndex(value: interop.Object, label: string, index: number): string;

  removeValueAndLabelAtIndex(index: number): boolean;

  replaceValueAtIndexWithValue(index: number, value: interop.Object): boolean;

  replaceLabelAtIndexWithLabel(index: number, label: string): boolean;

  setPrimaryIdentifier(identifier: string): boolean;
}

declare class ABAddressBook extends NSObject {
  static sharedAddressBook(): ABAddressBook;

  static addressBook(): ABAddressBook;

  recordsMatchingSearchElement(search: ABSearchElement): NSArray;

  save(): boolean;

  saveAndReturnError(error: interop.PointerConvertible): boolean;

  hasUnsavedChanges(): boolean;

  me(): ABPerson;

  setMe(moi: ABPerson): void;

  recordForUniqueId(uniqueId: string): ABRecord;

  addRecordError(record: ABRecord, error: interop.PointerConvertible): boolean;

  addRecord(record: ABRecord): boolean;

  removeRecordError(record: ABRecord, error: interop.PointerConvertible): boolean;

  removeRecord(record: ABRecord): boolean;

  people(): NSArray;

  groups(): NSArray;

  recordClassFromUniqueId(uniqueId: string): string;

  formattedAddressFromDictionary(address: NSDictionary<interop.Object, interop.Object> | Record<interop.Object, interop.Object>): NSAttributedString;

  defaultCountryCode(): string;

  defaultNameOrdering(): number;
}

declare class ABPerson extends ABRecord {
  parentGroups(): NSArray;

  linkedPeople(): NSArray;

  static addPropertiesAndTypes(properties: NSDictionary<interop.Object, interop.Object> | Record<interop.Object, interop.Object>): number;

  static removeProperties(properties: NSArray<interop.Object> | Array<interop.Object>): number;

  static properties(): NSArray;

  static typeOfProperty(property: string): number;

  static searchElementForPropertyLabelKeyValueComparison(property: string, label: string, key: string, value: interop.Object, comparison: number): ABSearchElement;

  initWithVCardRepresentation(vCardData: NSData): this;

  vCardRepresentation(): NSData;

  setImageData(data: NSData): boolean;

  imageData(): NSData;

  beginLoadingImageDataForClient(client: ABImageClient): number;

  static cancelLoadingImageDataForTag(tag: number): void;
}

declare class ABMultiValue extends NSObject implements NSCopying, NSMutableCopying, NSFastEnumeration {
  count(): number;

  valueAtIndex(index: number): interop.Object;

  labelAtIndex(index: number): string;

  identifierAtIndex(index: number): string;

  indexForIdentifier(identifier: string): number;

  primaryIdentifier(): string;

  propertyType(): number;

  valueForIdentifier(identifier: string): interop.Object;

  labelForIdentifier(identifier: string): interop.Object;

  copyWithZone(zone: interop.PointerConvertible): interop.Object;

  mutableCopyWithZone(zone: interop.PointerConvertible): interop.Object;

  countByEnumeratingWithStateObjectsCount(state: interop.PointerConvertible, buffer: interop.PointerConvertible, len: number): number;

  readonly [Symbol.iterator]: () => Iterator<any>;

}

declare class ABGroup extends ABRecord {
  members(): NSArray;

  addMember(person: ABPerson): boolean;

  removeMember(person: ABPerson): boolean;

  subgroups(): NSArray;

  addSubgroup(group: ABGroup): boolean;

  removeSubgroup(group: ABGroup): boolean;

  parentGroups(): NSArray;

  setDistributionIdentifierForPropertyPerson(identifier: string, property: string, person: ABPerson): boolean;

  distributionIdentifierForPropertyPerson(property: string, person: ABPerson): string;

  static addPropertiesAndTypes(properties: NSDictionary<interop.Object, interop.Object> | Record<interop.Object, interop.Object>): number;

  static removeProperties(properties: NSArray<interop.Object> | Array<interop.Object>): number;

  static properties(): NSArray;

  static typeOfProperty(property: string): number;

  static searchElementForPropertyLabelKeyValueComparison(property: string, label: string, key: string, value: interop.Object, comparison: number): ABSearchElement;
}

declare class ABPersonView extends NSView {
  editing: boolean;

  person: ABPerson;

  shouldShowLinkedPeople: boolean;
}

declare class ABRecord extends NSObject {
  init(): this;

  initWithAddressBook(addressBook: ABAddressBook): this;

  valueForProperty(property: string): interop.Object;

  setValueForPropertyError(value: interop.Object, property: string, error: interop.PointerConvertible): boolean;

  setValueForProperty(value: interop.Object, property: string): boolean;

  removeValueForProperty(property: string): boolean;

  isReadOnly(): boolean;

  readonly uniqueId: string;

  readonly displayName: string;
}

