@ng-matero/extensions
Version:
Angular Material Extensions
134 lines (133 loc) • 7.72 kB
TypeScript
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy, Renderer2 } from '@angular/core';
import { ThemePalette } from '@angular/material/core';
import { Observable } from 'rxjs';
import { MtxSplitArea, MtxSplitDefaultOptions, MtxSplitOutputAreaSizes, MtxSplitOutputData } from './interfaces';
import { MtxSplitPane } from './split-pane';
import * as i0 from "@angular/core";
/** Injection token that can be used to specify default split options. */
export declare const MTX_SPLIT_DEFAULT_OPTIONS: InjectionToken<MtxSplitDefaultOptions>;
/**
* mtx-split
*
*
* PERCENT MODE ([unit]="'percent'")
* ___________________________________________________________________________________________
* | A [g1] B [g2] C [g3] D [g4] E |
* |-------------------------------------------------------------------------------------------|
* | 20 30 20 15 15 | <-- [size]="x"
* | 10px 10px 10px 10px | <-- [gutterSize]="10"
* |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)
* | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width
* |___________________________________________________________________________________________|
* 800px <-- el.getBoundingClientRect().width
* flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );
*
*
* PIXEL MODE ([unit]="'pixel'")
* ___________________________________________________________________________________________
* | A [g1] B [g2] C [g3] D [g4] E |
* |-------------------------------------------------------------------------------------------|
* | 100 250 * 150 100 | <-- [size]="y"
* | 10px 10px 10px 10px | <-- [gutterSize]="10"
* | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)
* | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width
* |___________________________________________________________________________________________|
* 800px <-- el.getBoundingClientRect().width
*
*/
export declare class MtxSplit implements AfterViewInit, OnDestroy {
private ngZone;
private elRef;
private cdRef;
private renderer;
protected _defaultOptions?: MtxSplitDefaultOptions | undefined;
color: ThemePalette;
/** The split direction. */
get direction(): 'horizontal' | 'vertical';
set direction(v: 'horizontal' | 'vertical');
private _direction;
/** The unit you want to specify area sizes. */
get unit(): 'percent' | 'pixel';
set unit(v: 'percent' | 'pixel');
private _unit;
/** Gutters's size (dragging elements) in pixels. */
get gutterSize(): number;
set gutterSize(v: number);
private _gutterSize;
/** Gutter step while moving in pixels. */
get gutterStep(): number;
set gutterStep(v: number);
private _gutterStep;
/** Set to true if you want to limit gutter move to adjacent areas only. */
restrictMove: boolean;
/** Add transition when toggling visibility using `visible` or `size` changes. */
get useTransition(): boolean;
set useTransition(v: boolean);
private _useTransition;
/**
* Disable the dragging feature (remove cursor/image on gutters).
* `gutterClick`/`gutterDblClick` still emits.
*/
get disabled(): boolean;
set disabled(v: boolean);
private _disabled;
/** Indicates the directionality of the areas. */
get dir(): 'ltr' | 'rtl';
set dir(v: 'ltr' | 'rtl');
private _dir;
/**
* Milliseconds to detect a double click on a gutter. Set it around 300-500ms if
* you want to use `gutterDblClick` event.
*/
get gutterDblClickDuration(): number;
set gutterDblClickDuration(v: number);
private _gutterDblClickDuration;
/** Event emitted when drag starts. */
dragStart: EventEmitter<MtxSplitOutputData>;
/** Event emitted when drag ends. */
dragEnd: EventEmitter<MtxSplitOutputData>;
/** Event emitted when user clicks on a gutter. */
gutterClick: EventEmitter<MtxSplitOutputData>;
/** Event emitted when user double clicks on a gutter. */
gutterDblClick: EventEmitter<MtxSplitOutputData>;
/**
* Event emitted when transition ends (could be triggered from `visible` or `size` changes).
* Only if `useTransition` equals true.
*/
get transitionEnd(): Observable<MtxSplitOutputAreaSizes>;
private transitionEndSubscriber;
private dragProgressSubject;
dragProgress$: Observable<MtxSplitOutputData>;
private isDragging;
private dragListeners;
private snapshot;
private startPoint;
private endPoint;
readonly displayedAreas: Array<MtxSplitArea>;
private readonly hidedAreas;
private gutterEls;
constructor(ngZone: NgZone, elRef: ElementRef, cdRef: ChangeDetectorRef, renderer: Renderer2, _defaultOptions?: MtxSplitDefaultOptions | undefined);
ngAfterViewInit(): void;
private getNbGutters;
addArea(component: MtxSplitPane): void;
removeArea(component: MtxSplitPane): void;
updateArea(component: MtxSplitPane, resetOrders: boolean, resetSizes: boolean): void;
showArea(component: MtxSplitPane): void;
hideArea(comp: MtxSplitPane): void;
getVisibleAreaSizes(): MtxSplitOutputAreaSizes;
setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean;
private build;
private refreshStyleSizes;
_clickTimeout: number | null;
clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void;
startDragging(event: MouseEvent | TouchEvent, gutterOrder: number, gutterNum: number): void;
private dragEvent;
private stopDragging;
notify(type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd', gutterNum: number): void;
ngOnDestroy(): void;
static ɵfac: i0.ɵɵFactoryDeclaration<MtxSplit, [null, null, null, null, { optional: true; }]>;
static ɵcmp: i0.ɵɵComponentDeclaration<MtxSplit, "mtx-split", ["mtxSplit"], { "color": { "alias": "color"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; "unit": { "alias": "unit"; "required": false; }; "gutterSize": { "alias": "gutterSize"; "required": false; }; "gutterStep": { "alias": "gutterStep"; "required": false; }; "restrictMove": { "alias": "restrictMove"; "required": false; }; "useTransition": { "alias": "useTransition"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "dir": { "alias": "dir"; "required": false; }; "gutterDblClickDuration": { "alias": "gutterDblClickDuration"; "required": false; }; }, { "dragStart": "dragStart"; "dragEnd": "dragEnd"; "gutterClick": "gutterClick"; "gutterDblClick": "gutterDblClick"; "transitionEnd": "transitionEnd"; }, never, ["*"], true, never>;
static ngAcceptInputType_restrictMove: unknown;
static ngAcceptInputType_useTransition: unknown;
static ngAcceptInputType_disabled: unknown;
}