/**
 * Copyright (c) Adaptavist, Inc.
 */
import { GenericProps } from '../../utilities';
import { ComponentPropsWithoutRef } from 'react';
export type ITransfer = Omit<ComponentPropsWithoutRef<'div'>, 'placeholder' | 'onChange'> & GenericProps & {
    /**
     * Prop to set customized CSS class/es.
     *
     * Default is `an empty string`.
     */
    className?: string;
    /**
     * Prop to add transfer slots into the Transfer Organism.
     *
     * When provided, this will be displayed on the left column of the Transfer Organism.
     *
     * If the keys provided on the `selectedKeys` matches an of the data in the `dataSource`, they will be added to the right column.
     *
     * Default is `an empty object`.
     */
    dataSource?: ITransferItem[];
    /**
     * Prop to denote if the Transfer Organism should be disabled or not.
     *
     * If true, this will disable any action on both columns.
     * If false, the Transfer Organism will function as normal.
     *
     * Default is `false`.
     */
    disabled?: boolean;
    /**
     * Prop to add a title to the Transfer Organism.
     *
     * The first value will render on the left side of the Transfer Organism.
     * The second value will render on the right.
     *
     * Default is `an empty string`.
     */
    headerTitle?: [string, string];
    /**
     * Prop to control the height of the Transfer Organism.
     *
     * The height specified will be applied to both Transfer halves.
     *
     * To specify for each, provide the values in an array. e.g ['leftHeight', 'rightHeight'].
     *
     * Default is `an empty string`.
     */
    height?: string | [string, string];
    /**
     * An executed callback function when an item is transferred from either column.
     *
     * Default is `an empty object`.
     */
    onChange?: (props: IOnChange) => void;
    /**
     * A callback function which is executed when an item is elected on both columns.
     *
     * Default is `an empty object`.
     */
    onSelectChange?: (props: IOnSelectChange) => void;
    /**
     * Prop to add a placeholder value to the Transfer Organism.
     *
     * The placeholder specified will be applied to both Transfer halves.
     *
     * To specify for each, provide the values in an array. e.g ['leftPlaceholder', 'rightPlaceholder'].
     *
     * Default is `an empty string`.
     */
    placeholder?: string | [string, string];
    /**
     * Prop to provide keys to feed to the Transfer Organism.
     *
     * When provided, any item found in the `dataSource` will be displayed on the right column.
     *
     * Default is `an empty string array`.
     */
    rightColumnKeys?: string[];
    /**
     * Prop to control the visiblity of the search input field.
     *
     * If set to true, the search input field will be visible.
     * If set to false, the search input field will not be visible.
     *
     * Default is `true`
     */
    showSearch?: boolean;
    /**
     * Prop to control the visiblity of the select all checkbox on the header.
     *
     * If set to true, the select all checkbox will be visible.
     * If set to false, the select all checkbox will not be visible.
     *
     * Default is `true`
     */
    showSelectAll?: boolean;
    /**
     * Prop to control the visiblity of the count for selected items.
     *
     * If set to true, the count for selected items will be visible.
     * If set to false, the count for selected items will not be visible.
     *
     * Default is `true`
     */
    showSelectedCount?: boolean;
    /**
     * Prop to set customized inline style/s.
     *
     * Default is `an empty string`.
     */
    style?: React.CSSProperties;
    /**
     * Prop to control the width of the Transfer Organism.
     *
     * The width specified will be applied to both Transfer halves.
     *
     * To specify for each half, provide the values in an array. e.g ['leftWidth', 'rightWidth'].
     *
     * Default is `an empty string`.
     */
    width?: string | [string, string];
};
export interface IOnChange {
    direction: 'left' | 'right';
    rightColumnKeys: string[];
    selectedKeys: string[];
}
export interface IOnSelectChange {
    leftColumnKeys: string[];
    rightColumnKeys: string[];
}
export interface ITransferItem {
    description?: string;
    disabled?: boolean;
    key: string;
    title: string;
}
export type ITransferSection = Omit<ITransfer, 'headerTitle' | 'height' | 'width'> & GenericProps & {
    headerTitle: string;
    height?: string;
    onSelectAll: (event: React.ChangeEvent<HTMLInputElement>) => void;
    onTransferChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
    placeholder: string;
    selectedKeys: string[];
    testId: string;
    width?: string;
};
