UNPKG

splitpanes-ts

Version:

TypeScript version of A Vue.js reliable, simple and touch-ready panes splitter / resizer

85 lines (73 loc) 1.8 kB
export interface PaneData { id: number el: HTMLElement | null index: number min: number max: number size: number givenSize: number | null } export interface TouchState { mouseDown: boolean dragging: boolean activeSplitter: number | null cursorOffset: number } export interface SplitterTaps { splitter: number | null timeoutId: ReturnType<typeof setTimeout> | null } export interface DragPosition { x: number y: number } export interface PaneSums { prevPanesSize: number nextPanesSize: number prevReachedMinPanes: number nextReachedMinPanes: number } export interface PaneResizeVariables { sums: PaneSums panesToResize: number[] } export interface SplitpanesProps { horizontal?: boolean pushOtherPanes?: boolean maximizePanes?: boolean rtl?: boolean firstSplitter?: boolean } export interface PaneProps { size?: number | string minSize?: number | string maxSize?: number | string } // Base event payload types export interface BaseEventPayload { event?: MouseEvent | TouchEvent } export interface EventWithIndex extends BaseEventPayload { event: MouseEvent | TouchEvent index: number } export interface EventWithPane extends EventWithIndex { pane: PaneData } export interface EventWithPanes extends BaseEventPayload { index?: number prevPane?: Pick<PaneData, 'min' | 'max' | 'size'> nextPane?: Pick<PaneData, 'min' | 'max' | 'size'> panes: Pick<PaneData, 'min' | 'max' | 'size'>[] } export interface SplitpanesEmits { ready: [EventWithPanes] resize: [EventWithPanes] resized: [EventWithPanes] 'pane-click': [EventWithPane] 'pane-maximize': [EventWithPane] 'pane-add': [{ pane: PaneData }] 'pane-remove': [{ pane: PaneData }] 'splitter-click': [EventWithIndex] 'splitter-dblclick': [EventWithIndex] }