@hug/ngx-splitter
Version:
HUG Angular - splitter component
1 lines • 17.3 kB
Source Map (JSON)
{"version":3,"file":"hug-ngx-splitter.mjs","sources":["../../../projects/splitter/src/split-area.directive.ts","../../../projects/splitter/src/splitter.component.ts","../../../projects/splitter/src/splitter.component.html","../../../projects/splitter/src/hug-ngx-splitter.ts"],"sourcesContent":["/**\n * Created by rtr on 22.12.2016.\n */\nimport { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, ElementRef, HostBinding, Input } from '@angular/core';\n\nimport { NgxSplitterDirection } from './splitter-direction-type';\n\n/**\n * Directive representing a panel in a Splitter Component\n */\n@Directive({\n selector: 'ngx-split-area',\n standalone: true\n})\nexport class NgxSplitAreaDirective {\n\n @HostBinding('style.order')\n public order?: number;\n\n @HostBinding('style.flex-basis.%')\n protected _size: number | null = null;\n\n public direction = 'horizontal' as NgxSplitterDirection;\n\n /**\n * Size in percent of the current area\n */\n @Input()\n public set size(value: NumberInput) {\n this._size = coerceNumberProperty(value);\n }\n\n public get size(): number | undefined {\n const parentElement = this.elementRef.nativeElement.parentElement;\n const parentSizeInPixels = parentElement && (this.direction === 'horizontal' ? parentElement.offsetWidth : parentElement.offsetHeight) || undefined;\n return parentSizeInPixels && (100 * this.sizeinPixels / parentSizeInPixels);\n }\n\n public get sizeinPixels(): number {\n return this.direction === 'horizontal' ? this.elementRef.nativeElement.offsetWidth : this.elementRef.nativeElement.offsetHeight;\n }\n\n /**\n * Min size in percent of the current area\n */\n @Input()\n public set minSizePixel(value: NumberInput) {\n this._minSizePixel = coerceNumberProperty(value);\n }\n\n public get minSizePixel(): number {\n return this._minSizePixel;\n }\n\n @HostBinding('style.min-width.px')\n protected get minWidth(): number | undefined {\n return this.direction === 'vertical' ? undefined : this._minSizePixel;\n }\n\n @HostBinding('style.min-height.px')\n protected get minHeight(): number | undefined {\n return this.direction === 'horizontal' ? undefined : this._minSizePixel;\n }\n\n private _minSizePixel = 0;\n\n public constructor(private elementRef: ElementRef<HTMLElement>) { }\n}\n","import { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostBinding, inject, Input, Output, QueryList, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, map, mergeWith, of, shareReplay, Subject, switchMap, take, takeUntil, tap } from 'rxjs';\n\nimport { NgxSplitAreaDirective } from './split-area.directive';\nimport { NgxSplitterDirection } from './splitter-direction-type';\n\ninterface DraggingEvent {\n event: MouseEvent | TouchEvent;\n index: number;\n}\n\n/**\n * Splitter Component for Angular\n *\n * The splitter component allows to split horizontally or vertically, a container in N resizable part.\n */\n@Component({\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ngx-splitter',\n styleUrls: ['./splitter.component.scss'],\n templateUrl: './splitter.component.html',\n standalone: true\n})\nexport class NgxSplitterComponent {\n /**\n * Event triggered when the user start to drag the cursor\n */\n @Output() public readonly dragStart = new EventEmitter(false);\n\n /**\n * Event triggered during the cursor's drag\n */\n @Output() public readonly dragProgress = new EventEmitter<number>(false);\n\n /**\n * Event triggered when the user stop to drag the cursor\n */\n @Output() public readonly dragEnd = new EventEmitter(false);\n\n /**\n * Direction of the split\n * Can be `horizontal` or `vertical`\n */\n @Input()\n public set direction(direction: NgxSplitterDirection) {\n this._direction = direction;\n this.ensureDirections();\n }\n\n public get direction(): NgxSplitterDirection {\n return this._direction;\n }\n\n /**\n * Size of the gutter in pixels\n * By default `10px`\n */\n @Input()\n public set gutterSize(gutterSize: NumberInput) {\n this._gutterSize = coerceNumberProperty(gutterSize);\n }\n\n public get gutterSize(): NumberInput {\n return this._gutterSize;\n }\n\n @HostBinding('style.flex-direction')\n protected get styleFlexDirection(): string {\n return this.direction === 'horizontal' ? 'row' : 'column';\n }\n\n @ContentChildren(NgxSplitAreaDirective)\n protected set spliterAreas(spliterAreas: QueryList<NgxSplitAreaDirective>) {\n this.areas = spliterAreas.toArray();\n this.areas.forEach((area, index) => area.order = 2 * index);\n this.ensureDirections();\n }\n\n @HostBinding('attr.direction')\n private _direction = 'horizontal' as NgxSplitterDirection;\n\n @HostBinding('attr.disabled')\n private _disabled: boolean | null = null;\n\n protected startDragging$ = new Subject<DraggingEvent>();\n\n protected areas = new Array<NgxSplitAreaDirective>() as readonly NgxSplitAreaDirective[];\n\n private _gutterSize = 10;\n\n /** Retourne ou definit si le selecteur est desactivé. */\n @Input()\n public set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value) || null;\n }\n\n public get disabled(): BooleanInput {\n return this._disabled;\n }\n\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private changeDetectorRef = inject(ChangeDetectorRef);\n private destroyRef = inject(DestroyRef);\n\n public constructor() {\n\n this.startDragging$.pipe(\n filter(() => !this.disabled),\n switchMap(draggingEvent => {\n const areaA = this.areas.find(a => a.order === draggingEvent.index - 1);\n const areaB = this.areas.find(a => a.order === draggingEvent.index + 1);\n const mouseEvent = draggingEvent.event as MouseEvent;\n if (!areaA || !areaB) {\n return of(mouseEvent);\n }\n\n const startPos = this.direction === 'horizontal' ? mouseEvent.pageX || mouseEvent.screenX : mouseEvent.pageY || mouseEvent.screenY;\n const containerSizeInPixels = this.direction === 'horizontal' ? this.elementRef.nativeElement.offsetWidth : this.elementRef.nativeElement.offsetHeight;\n const startSizeInPixelsA = areaA.sizeinPixels;\n const startSizeInPixelsB = areaB.sizeinPixels;\n\n this.dragStart.emit();\n\n const mouseMove$ = fromEvent<MouseEvent>(document, 'mousemove').pipe(\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n const stopDragging$ = mouseMove$.pipe(\n filter(event => event.buttons !== 1),\n mergeWith(fromEvent(document, 'mouseup'), fromEvent(document, 'touchend'), fromEvent(document, 'touchcancel')),\n map(event => {\n this.dragEnd.emit();\n return event as MouseEvent;\n }),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n const drag$ = mouseMove$.pipe(\n filter(event => event.buttons === 1),\n mergeWith(fromEvent<MouseEvent>(document, 'touchmove')),\n tap(event => {\n const pos = this.direction === 'horizontal' ? event.pageX || event.screenX : event.pageY || event.screenY;\n const diffInPixels = startPos - pos;\n const areaSizeInPixelsA = startSizeInPixelsA - diffInPixels;\n const areaSizeInPixelsB = startSizeInPixelsB + diffInPixels;\n const areaSizeInPercentA = areaA.size = Math.min(100, Math.max(0, 100 * areaSizeInPixelsA / containerSizeInPixels));\n areaB.size = Math.min(100, Math.max(0, 100 * areaSizeInPixelsB / containerSizeInPixels));\n const percentWithTwoDigits = Math.round(areaSizeInPercentA * 100) / 100;\n this.dragProgress.emit(percentWithTwoDigits);\n }),\n takeUntil(stopDragging$)\n );\n\n return stopDragging$.pipe(\n take(1),\n mergeWith(drag$)\n );\n }),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(event => {\n if (event.type !== 'mouseup' && event.type !== 'touchend' && event.type !== 'touchcancel') {\n this.elementRef.nativeElement.setAttribute('splitting', 'true');\n } else {\n this.elementRef.nativeElement.removeAttribute('splitting');\n }\n event.preventDefault();\n this.changeDetectorRef.markForCheck();\n return false;\n });\n }\n\n private ensureDirections(): void {\n this.areas.forEach(area => area.direction = this.direction);\n }\n}\n","<ng-content></ng-content>\n@for (area of areas; track $index; let index = $index, last = $last) {\n @if (last === false) {\n <div\n class=\"ngx-split-gutter\"\n [style.order]=\"index * 2 + 1\"\n [style.flex-basis.px]=\"gutterSize\"\n (mousedown)=\"startDragging$.next({ event: $event, index: index * 2 + 1 })\"\n (touchstart)=\"startDragging$.next({ event: $event, index: index * 2 + 1 })\"></div>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}