@types/splitpanes
Version:
TypeScript definitions for splitpanes
188 lines (161 loc) • 4.95 kB
TypeScript
import { VueConstructor } from "vue";
// Misc
export interface ContainerType {
vnode: any;
offsetLeft: null | number;
offsetTop: null | number;
}
export interface TouchType {
mouseDown: boolean;
dragging: boolean;
activeSplitter: null | number;
}
export interface CoordinateType {
x: number;
y: number;
}
export interface SumsType {
prevPanesSize: number;
nextPanesSize: number;
prevReachedMinPanes: number;
nextReachedMinPanes: number;
}
export interface SumsPanesType {
sums: SumsType;
panesToResize: number[];
}
export interface RequestUpdateType {
target: Pane;
min?: number | undefined;
max?: number | undefined;
size?: number | undefined;
}
export interface RemovedPaneType {
[key: number]: Pane;
index: number;
}
export interface ChangedPaneType {
addedPane?: Pane | undefined;
removedPane?: RemovedPaneType | undefined;
}
// Splitpane
export interface SplitterTapsType {
splitter: null | number;
timeoutId: null | object;
}
export interface SplitpaneWatchPaneType {
deep: boolean;
immediate: boolean;
handler: () => void;
}
export interface SplitpaneIndexedElementType {
givenSize: number | null;
id: number;
index: number;
max: number;
min: number;
size: number;
}
// This is sort of a weird type, i might have misunderstood something regarding vue?
export interface SplitpaneIndexedType {
[key: number]: SplitpaneIndexedElementType;
}
export interface SplitpaneProps {
horizontal: boolean; // false
pushOtherPanes: boolean; // true
dblClickSplitter: boolean; // true
firstSplitter: boolean; // false
}
export interface SplitpaneData {
container: ContainerType;
ready: boolean;
panes: Pane[];
touch: TouchType;
splitterTaps: SplitterTapsType;
}
export interface SplitpaneComputed {
panesCount: () => number;
indexedPanes: () => SplitpaneIndexedType | null;
}
export interface SplitPaneMethods {
updatePaneComponents: () => void;
bindEvents: () => void;
unbindEvents: () => void;
onMouseDown: (event: Event, splitterIndex: number) => void;
onMouseMove: (event: Event) => void;
onMouseUp: () => void;
onSplitterClick: (event: Event, splitterIndex: number) => void;
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
onSplitterDblClick: (event: Event, splitterIndex: number) => Pane | void;
onPaneClick: (event: Event, splitterIndex: number) => void;
getCurrentMouseDrag: (event: Event) => CoordinateType;
getCurrentDragPercentage: (drag: CoordinateType) => number;
calculatePanesSize: (drag: CoordinateType) => void;
doPushOtherPanes: (sums: SumsType, dragPercent: number) => null | {};
sumPrevPanesSize: (splitterIndex: number) => number;
sumNextPanesSize: (splitterIndex: number) => number;
findPrevExpandedPane: (splitterIndex: number) => Pane | {};
checkSplitpanesNodes: () => void;
addSplitter: (paneIndex: number, nextPaneNode: Node, isVeryFirst: boolean) => void;
removeSplitter: (node: Node) => void;
redoSplitters: () => void;
requestUpdate: (arg0: RequestUpdateType) => void;
onPaneAdd: (pane: Pane) => void;
onPaneRemove: (pane: Pane) => void;
resetPaneSizes: (changedPanes: ChangedPaneType) => void;
equalize: () => void;
initialPanesSizing: () => void;
equalizeAfterAddOrRemove: (arg0: ChangedPaneType) => void;
readjustSizes: (leftToAllocate: number, ungrowable: number[], unshrinkable: number[]) => void;
}
export interface SplitpaneWatch {
panes: SplitpaneWatchPaneType;
horizontal: () => void;
firstSplitter: () => void;
dblClickSplitter: (enable: boolean) => void;
}
export interface Splitpanes extends VueConstructor {
props: SplitpaneProps;
data: () => SplitpaneData;
computed: SplitpaneComputed;
methods: SplitPaneMethods;
watch: SplitpaneWatch;
mounted: () => void;
beforeDestroy: () => void;
beforeUpdate: () => void;
render: (createEl: any) => any;
}
export interface PaneProps {
size: number | string;
minSize: number | string;
maxSize: number | string;
}
export interface PaneData {
style: any;
}
export interface PaneMethods {
update: (style: any) => void;
}
export interface PaneComputed {
sizeNumber: () => number | null;
maxSizeNumber: () => number;
minSizeNumber: () => number;
}
export interface PaneWatch {
sizeNumber: (size: number) => void;
minSizeNumber: (min: number) => void;
maxSizeNumber: (max: number) => void;
}
export interface Pane extends VueConstructor {
props: PaneProps;
data: () => PaneData;
methods: PaneMethods;
computed: PaneComputed;
watch: PaneWatch;
mounted: () => void;
beforeDestroy: () => void;
beforeUpdate: () => void;
render: (createEl: any) => any;
}
export const Pane: Pane;
export const Splitpanes: Splitpanes;