///
import { Disposable } from '@devexpress/analytics-core/analytics-utils';
import * as ko from 'knockout';
import { DashboardItem, DashboardLayoutGroupOrientation, DashboardLayoutNode, DashboardTabPage, IDisposable, LayoutItemInsertPosition } from '../../../model';
import { KnockoutEntry } from '../../../model/internal/_knockout-utils';
import { DashboardLayoutItemPlaceholder } from '../../../model/layout/_layout-item-placeholder';
import { DashboardItemJson } from '../../../model/layout/metadata/_dashboard-layout-node';
import { Constraints } from '../../../viewer-parts/layout/_utils.layout';
import { ISizeController } from '../../internal/_interfaces';
import { DashboardItemContext } from '../../viewer/_viewer-interfaces';
import { IResizableModel } from './_resizable';
export interface ILayoutItemViewModel extends IDisposable {
create: (modelItemJson: any, location: string, insertionBehavior?: LayoutItemInsertionBehavior) => any;
moveTo: (itemModel?: ILayoutItemViewModel, location?: LayoutItemInsertPosition, insertionBehavior?: LayoutItemInsertionBehavior) => any;
delete: () => void;
canAttach?: (something: ILayoutItemViewModel | DashboardItemJson) => boolean;
createTabPage: () => void;
model: DashboardLayoutNode;
item: ko.Subscribable;
dashboardItem: ko.Subscribable;
orientation: ko.Observable;
weight: ko.Observable;
visibleItems: ko.ObservableArray;
childItems: ko.ObservableArray;
activeTabPage: KnockoutEntry;
activeTabIndex: KnockoutEntry;
template: string;
hasItem: ko.Subscribable;
ignoreChildMaxHeight: boolean;
dragOverInnerElementController?: DragOverController;
getPlaceholder(): DashboardLayoutItemPlaceholder;
}
export interface ILayoutItemViewModelProvider {
_createViewModel(): ILayoutItemViewModel;
}
export interface DragOverController {
selector: string;
onDragOver(elementIndex: number): void;
}
export interface ObservableConstraints {
min: {
width: ko.Observable;
height: ko.Observable;
};
max: {
width: ko.Observable;
height: ko.Observable;
};
}
export interface LayoutDroppableItem {
node: LayoutItem;
dropBehavior: LayoutItemInsertionBehavior;
}
export type LayoutItemInsertionBehavior = 'InsertIntoGroup' | 'InsertBesideGroup';
export declare function _syncLayoutHelper(sourceArray: ko.ObservableArray, destArray: ko.ObservableArray, addHandler: (value: T) => U): ko.Subscription;
export declare function setHoverLocation(hoverLayoutItem: LayoutItem, location?: LayoutItemInsertPosition, dropBehavior?: LayoutItemInsertionBehavior): void;
export declare let SplitterSize: number;
export declare const MinWeight = 0.00001;
export type LayoutEvent = 'click' | 'mouseover' | 'resize-started' | 'resize-completed' | 'get-context' | 'get-local-context' | 'get-context-menu-service' | 'get-empty-item-templates-service' | 'get-layout-item-placeholder-service';
export declare class LayoutItem extends Disposable implements IResizableModel {
viewModel: ILayoutItemViewModel;
private _isUpdating;
static findLargestItem(layoutItem: LayoutItem): {
maxSquare: number;
item: LayoutItem;
};
private _constraints;
_parent: ko.Observable;
private _width;
private _height;
private _changeWeight;
private _changeWeightCore;
private _correntWeight;
private _safeSetWidth;
private _safeSetHeight;
private _updateChildrenSize;
private _updateChildrenResizeHandles;
constructor(viewModel: ILayoutItemViewModel, parent?: LayoutItem);
dispose(): void;
isValidWidth(val: number): boolean;
isValidHeight(val: number): boolean;
setConstraints: (constraints: Constraints) => void;
getSelectionParentsList(location: LayoutItemInsertPosition): LayoutDroppableItem[];
private _getRequiredOrientationByLocation;
private _inverseOrientation;
private _checkGroupWillBeUnwrapped;
findLayoutItem(criteria: (item: LayoutItem) => boolean): LayoutItem;
findLayoutItemByItemModel(itemModel: ILayoutItemViewModel): LayoutItem;
items: ko.ObservableArray;
minWidth: ko.Computed;
minHeight: ko.Computed;
maxWidth: ko.Computed;
maxHeight: ko.Computed;
width: ko.Computed;
height: ko.Computed;
contentWidth: ko.Computed;
contentHeight: ko.Computed;
containerWidth: ko.Computed;
containerHeight: ko.Computed;
resizeHandles: ko.Observable;
isSelected: ko.Observable;
areChildrenSelected: ko.Computed;
dragOverLocation: ko.Observable;
itemStyle: ko.Computed;
onEvent(item: LayoutItem, event: LayoutEvent): any;
coverClickHandler: (e: any) => void;
coverMouseOverHandler: (e: any) => void;
resizeStarted: () => void;
resizeCompleted: () => void;
getContext: () => any;
getLocalContext: () => DashboardItemContext;
getContextMenu: () => any;
getEmptyItemTemplates: () => any;
getLayoutItemPlaceholder: () => any;
verticalPaddings: ko.Observable;
horizontalPaddings: ko.Observable;
isDesignMode: ko.Observable;
isLayoutReady: ko.Observable;
updateSize(width: number, height: number): void;
visible: ko.Computed;
create(modelItemJson?: any, location?: string, insertBehavior?: LayoutItemInsertionBehavior): LayoutItem;
moveTo(layoutNode: LayoutItem, location: LayoutItemInsertPosition, insertBehavior?: LayoutItemInsertionBehavior): LayoutItem;
delete(): void;
getRoot(): LayoutItem;
canAttach(something: ILayoutItemViewModel | DashboardItemJson): boolean;
placeholderItem: LayoutItem;
getPlaceholder(): LayoutItem;
repaintCallbacks: JQuery.Callbacks;
sizeController: ISizeController;
}
export declare const _registerDxLayoutItem: () => void;