import {
  MultiSelectTreeItemProps as KendoMultiSelectTreeItemProps,
  MultiSelectTreeBlurEvent as KendoMultiSelectTreeBlurEvent,
  MultiSelectTreeCancelEvent as KendoMultiSelectTreeCancelEvent,
  MultiSelectTreeChangeEvent as KendoMultiSelectTreeChangeEvent,
  MultiSelectTreeCloseEvent as KendoMultiSelectTreeCloseEvent,
  MultiSelectTreeFilterChangeEvent as KendoMultiSelectTreeFilterChangeEvent,
  MultiSelectTreeFocusEvent as KendoMultiSelectTreeFocusEvent,
  MultiSelectTreeOpenEvent as KendoMultiSelectTreeOpenEvent,
  MultiSelectTreeTagProps as KendoMultiSelectTreeTagProps,
} from "@progress/kendo-react-dropdowns";
import { DropDownsPopupSettings } from "../ComboBox/ComboBoxProps";
import { TagData } from "../MultiSelect/MultiSelectProps";

export interface MultiSelectTreeListNoDataProps {
  children?: React.ReactNode;
}

export interface MultiSelectTreeProps {
  dataTestId?: string;
  accessKey?: string;
  adaptive?: boolean;
  adaptiveTitle?: React.ReactNode;
  ariaDescribedBy?: string;
  ariaLabelledBy?: string;
  checkField?: string;
  checkIndeterminateField?: string;
  className?: string;
  data?: any[];
  dataItemKey: string;
  dir?: string;
  disabled?: boolean;
  expandField?: string;
  fillMode?: null | "flat" | "outline" | "solid";
  filter?: string;
  filterable?: boolean;
  id?: string;
  item?: React.ComponentType<KendoMultiSelectTreeItemProps>;
  label?: string;
  listNoData?: React.ComponentType<MultiSelectTreeListNoDataProps>;
  loading?: boolean;
  name?: string;
  opened?: boolean;
  placeholder?: string;
  popupSettings?: DropDownsPopupSettings;
  required?: boolean;
  rounded?: null | "small" | "medium" | "full" | "large";
  size?: null | "small" | "medium" | "large";
  style?: React.CSSProperties;
  subItemsField?: string;
  tabIndex?: number;
  tag?: React.ComponentType<KendoMultiSelectTreeTagProps>;
  tags?: TagData[];
  textField: string;
  valid?: boolean;
  validationMessage?: string;
  validityStyles?: boolean;
  value?: any[];
  onBlur?: (event: KendoMultiSelectTreeBlurEvent) => void;
  onCancel?: (event: KendoMultiSelectTreeCancelEvent) => void;
  onChange?: (event: KendoMultiSelectTreeChangeEvent) => void;
  onClose?: (event: KendoMultiSelectTreeCloseEvent) => void;
  onExpandChange?: (event: any) => void;
  onFilterChange?: (event: KendoMultiSelectTreeFilterChangeEvent) => void;
  onFocus?: (event: KendoMultiSelectTreeFocusEvent) => void;
  onOpen?: (event: KendoMultiSelectTreeOpenEvent) => void;
  valueMap?: (value: any[]) => any;
}
