// React stuff
import * as React from 'react';
export {React};

import * as ReactDomImport from 'react-dom';
export const ReactDOM: typeof ReactDomImport;

import * as ReactRouterImport from './typings/react-router';
export type ReactRouter = typeof ReactRouterImport
export const ReactRouter: ReactRouter;

import * as ReactRouterBootstrapImport from 'react-router-bootstrap';
export const ReactRouterBootstrap: typeof ReactRouterBootstrapImport;

import * as ReactUpdateImport from 'immutability-helper';
export const ReactUpdate: typeof ReactUpdateImport.default;

import * as HistoryImport from 'history';
export const History: typeof HistoryImport;

import * as md5Import from 'md5';
export const md5: typeof md5Import;

import * as ReduxImport from 'redux';
export const Redux: typeof ReduxImport;

import * as ReduxThunkImport from 'redux-thunk';
export const ReduxThunk: typeof ReduxThunkImport;

import * as ReactReduxImport from 'react-redux';
export const ReactRedux: typeof ReactReduxImport;

import * as ReselectImport from 'reselect';
export const Reselect: typeof ReselectImport;


// Functions
export {localize} from './ui/functions';

// Utils
import * as FormatMessageImport from 'format-message';
export const formatMessage: typeof FormatMessageImport;

import * as ValidatorImport from 'validator';
export const validator: typeof ValidatorImport;

import * as _ from 'lodash';
export {_};

import Moment = require("moment");
export const moment: typeof Moment;

import EventEmitter = require('tiny-emitter');
export let TinyEmitter: EventEmitter;

import * as classnamesImport from 'classnames';
export const classnames: typeof classnamesImport.default;

// React Bootstrap Non-Wrapped
import ButtonToolbar = require("react-bootstrap/lib/ButtonToolbar");
import ButtonGroup = require('react-bootstrap/lib/ButtonGroup');
import OverlayTrigger = require('react-bootstrap/lib/OverlayTrigger');
import Overlay = require('react-bootstrap/lib/Overlay');
import Popover = require('react-bootstrap/lib/Popover');
import Navbar = require('react-bootstrap/lib/Navbar');
import NavItem = require('react-bootstrap/lib/NavItem');
import Nav = require('react-bootstrap/lib/Nav');
import Table = require('react-bootstrap/lib/Table');
import Collapse = require('react-bootstrap/lib/Collapse');
import StaticControl = require('react-bootstrap/lib/FormControlStatic');
import BootstrapAlert = require('react-bootstrap/lib/Alert');
import ControlLabel = require('react-bootstrap/lib/ControlLabel');
import HelpBlock = require('react-bootstrap/lib/HelpBlock');
import InputGroup = require('react-bootstrap/lib/InputGroup');
import InputGroupAddon = require('react-bootstrap/lib/InputGroupAddon');
import InputGroupButton = require('react-bootstrap/lib/InputGroupButton');
import Media = require('react-bootstrap/lib/Media');
import ProgressBar = require('react-bootstrap/lib/ProgressBar');
import FormControlFeedback = require('react-bootstrap/lib/FormControlFeedback');

export {
    ButtonToolbar,
    ButtonGroup,
    OverlayTrigger,
    Overlay,
    Popover,
    Navbar,
    NavItem,
    Nav,
    Table,
    Collapse,
    StaticControl,
    BootstrapAlert,
    ControlLabel,
    HelpBlock,
    InputGroup,
    InputGroupAddon,
    InputGroupButton,
    Media,
    ProgressBar,
    FormControlFeedback
};

// Data
export const Transport: any;
export {Store} from './data/Store';
export const ColumnsStore: any;
export const TreeItemHelpers: any;
export {TreeStore} from './data/TreeStore';

// Utils
import EventBus from './utils/EventBus';
export {EventBus};
export const BrandedFileLoader: any;

export {
    getSilentRouterHistory,
    setDocumentTitle,
    isReactComponent,
    isReactElement,
    mountComponent,
    isAutomationTestActive,
    isSafeStringValue,
    OS,
    fillBrandName,
    extendFormState,
    cleanFormState,
    wait
} from './utils/functions';

export const FocusHelper: any;
export const writeCookie: any;
export const readCookie: any;

export const ValidationUtils: {
    validate: any;
    stripErrors: any;
};

export {
    showPopup,
    showAlert,
    showConfirmation,
    showNotification,
    scrollToTop,
    playMessage
} from './ui/functions';

export {Popup} from './ui/popups/Popup';
export {Filter} from './ui/Filter';
// Menu,
export {MenuItem} from './ui/MenuItem';
export {TabPanel} from './ui/TabPanel';
export {TabItem} from './ui/TabItem';
export {Button} from './ui/Button';
// Spinner,
export {Loader} from './ui/Loader';
export {SplitButton} from './ui/SplitButton';
export {Form} from './ui/form/Form';
export {TextInput} from './ui/form/TextInput';
export {TextArea} from './ui/form/TextArea';
export {Checkbox} from './ui/form/Checkbox';
// CheckboxGroup,
export {DayRangePicker as DateRangePicker} from './ui/form/DateTimePicker/DayRangePicker';
// DatePicker,
// Toggle,
// Radio,
export {Select} from './ui/form/Select';
export {FormGroup, FormGroup as Input} from './ui/form/FormGroup';
export {FormControl, FormControl as FormInput} from './ui/form/FormControl';
export {FormErrorAutoFocusContainer} from './ui/form/FormErrorAutoFocusContainer';
// TextInputControl,
// TextAreaControl,
export {CheckboxControl} from './ui/form/CheckboxControl';
export {DateRangePickerControl} from './ui/form/DateRangePickerControl';
// DatePickerControl,
// RadioControl,
// SelectControl,
// FileUploadControl,
// FileUpload,
// ToggleControl,
export {MultiSelect} from './ui/form/MultiSelect';
// MultiSelect,
// InputCounter,
// Autosuggest,
// AutosuggestControl,
// Translate,
// DangerousHTML,
// ListControlCheckbox,
export {ListHighlight} from './ui/list/withStore/ListHighlight';
// ListSorter,
// ListRow,
export {GridSorter} from './ui/list/GridSorter';
// GridCell,
export {GridHeaderCell} from './ui/list/GridHeaderCell';
// GridRowActions,
// CollapsibleList,
// CollapsibleToolbar,
export {Icon} from './ui/Icon';
// HeaderIcon,
export {Panel} from './ui/Panel';
export {Block} from './ui/Block';
// Dropdown,
// DropdownButton,
export {Row} from './ui/Row';
export {Col} from './ui/Col';
// Message,
// Wizard,
export {Tooltip} from './ui/Tooltip';
// BorderedList,
// BorderedListItem,
// BrandedImage,
// MoreButton,
// Pagination,
// HeaderToolbar,
// Highlighter,
// Note,
// StoreCounterText,
// SelectedRecordsSwitcher,
// List,
export {ListLayout} from './ui/list/withStore/ListLayout';
// CTAContainer,
// CTAControl,
// WizardStep,
// Alert,
// Confirm,
// DismissibleAlert,
// TiledGrid,
// Banner,
// AudioPlayer,
// AudioRecorder,
// Static,
// PrintArea,
// NoPrint,
// Notification,
// ColumnTreeView,
// BreadCrumbs,
// Dropzone,
// KeyDownable,
export {NavDropdown} from './ui/NavDropdown';
// FlexBlock,
export {TestAutomationPanel} from './ui/TestAutomationPanel/TestAutomationPanel';
export {TreeList} from './ui/list/TreeList';
export {TreeFilterControl} from './ui/form/TreeFilterControl';
export {DateRangePickerWithPresets} from './ui/form/DateRangePickerWithPresets';

export {PureList} from './ui/list/PureList';
export {PurePagination} from './ui/list/PurePagination';
export {CounterText} from './ui/list/CounterText';
export {ListManager, passedListManagerPropsTypes} from './ui/list/ListManager';
export {PureListSorter} from './ui/list/PureListSorter';
export {PureListHighlight} from './ui/list/PureListHighlight';
export {PureListLayout} from './ui/list/PureListLayout';
// import {withSelectedIds, passedWithSelectedIdsPropsTypes} from './ui/HOCs/withSelectedIds';
