@katoid/angular-grid-layout
Version:
Grid Layout with draggable and resizable items for Angular
62 lines (61 loc) • 1.89 kB
TypeScript
import { InjectionToken } from '@angular/core';
import { CompactType } from './utils/react-grid-layout.utils';
import { KtdClientRect } from './utils/client-rect';
export interface KtdGridLayoutItem {
id: string;
x: number;
y: number;
w: number;
h: number;
minW?: number;
minH?: number;
maxW?: number;
maxH?: number;
}
export type KtdGridCompactType = CompactType;
export interface KtdGridBackgroundCfg {
show: 'never' | 'always' | 'whenDragging';
borderColor?: string;
gapColor?: string;
rowColor?: string;
columnColor?: string;
borderWidth?: number;
}
export interface KtdGridCfg {
cols: number;
rowHeight: number | 'fit';
height?: number | null;
layout: KtdGridLayoutItem[];
preventCollision: boolean;
gap: number;
}
export type KtdGridLayout = KtdGridLayoutItem[];
export interface KtdGridItemRect {
top: number;
left: number;
width: number;
height: number;
}
export interface KtdGridItemRenderData<T = number | string> {
id: string;
top: T;
left: T;
width: T;
height: T;
}
/**
* We inject a token because of the 'circular dependency issue warning'. In case we don't had this issue with the circular dependency, we could just
* import KtdGridComponent on KtdGridItem and execute the needed function to get the rendering data.
*/
export type KtdGridItemRenderDataTokenType = (id: string) => KtdGridItemRenderData<string>;
export declare const GRID_ITEM_GET_RENDER_DATA_TOKEN: InjectionToken<KtdGridItemRenderDataTokenType>;
export interface KtdDraggingData {
pointerDownEvent: MouseEvent | TouchEvent;
pointerDragEvent: MouseEvent | TouchEvent;
gridElemClientRect: KtdClientRect;
dragElemClientRect: KtdClientRect;
scrollDifference: {
top: number;
left: number;
};
}