UNPKG

@asadi/angular-date-components

Version:

`Angular Date Components` is a comprehensive angular library of date-related components designed to meet the needs of applications that require localization based on various calendar systems. While the package currently includes two powerful components (S

113 lines 17.9 kB
import { Directive, EventEmitter, HostListener, Output } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { ADCTableCell } from '../utils/table-cell.tools'; import { ADCTableRowTools } from '../utils/table-view-row.tools'; import * as i0 from "@angular/core"; export class TableViewControllerDirective { onZoomChange(event) { if (event.key == 'Shift' && !this.isZoomed) { this.isZoomed = true; this.focusIn(); } else if (event.key == 'Shift' && this.isZoomed) { this.isZoomed = false; this.focusOut(); } } ngOnInit() { this.childrenChangesObserver = new MutationObserver((changes) => { if (this.scrollListener) this.scrollListener(); const tableCells = []; changes.filter(c => c.addedNodes[0] instanceof HTMLElement && c.addedNodes[0].classList.contains('row')).forEach(row => { const children = Array().slice.call(row.addedNodes[0].children); const cells = Array().slice.call(children[0].children); cells.filter(item => item.getAttribute('selectable') == 'true').forEach(item => tableCells.push(new ADCTableCell(item))); }); this.applyScrollingBehavior(); this.childrenChangesSubject.next(tableCells); if (this.isZoomed) { this.isZoomed = false; this.focusOut(); } this.viewReadyEvent.emit(); }); this.childrenChangesObserver.observe(this.container, { childList: true }); } get container() { return this.elRef.nativeElement; } get scrollableContainer() { return this.container.parentElement; } constructor(renderer, elRef) { this.renderer = renderer; this.elRef = elRef; this.isZoomed = false; this.childrenChangesSubject = new BehaviorSubject([]); this.viewReadyEvent = new EventEmitter(); this.scrollListener = null; } applyScrollingBehavior() { this.scrollListener = this.renderer.listen(this.scrollableContainer, 'scroll', () => { if (this.isZoomed) { this.scrollableContainer.scrollLeft = 0; this.scrollableContainer.scrollTop = 0; return; } const stickyItems = this.container.querySelectorAll('.row'); Array().slice.call(stickyItems).forEach(item => { Array().slice.call(item.children).filter(child => child.getAttribute('sticky') == 'true').forEach(stickyChild => { stickyChild.style.transform = `translateX(-${this.scrollableContainer.scrollLeft}px)`; }); }); }); } focusIn() { const childWidth = this.container.scrollWidth; const parentWidth = this.scrollableContainer.clientWidth; const childHeight = this.container.scrollHeight; const parentHeight = this.scrollableContainer.clientHeight; const scaleX = parentWidth / childWidth * 100; const scaleY = parentHeight / childHeight * 100; this.renderer.setStyle(this.container, 'transform', `scaleX(${scaleX}%) scaleY(${scaleY}%)`); requestAnimationFrame(() => { this.scrollableContainer.scrollLeft = 0; this.scrollableContainer.scrollTop = 0; }); } focusOut() { this.renderer.setStyle(this.container, 'transform', `scaleX(${100}%) scaleY(${100}%)`); } row(rowIndex) { const allRows = [].slice.call(this.container.getElementsByClassName("row")); const row = allRows.filter((r) => r.getAttribute('row-index') == rowIndex.toString())[0]; return new ADCTableRowTools(this.renderer, row); } cellChanges() { return this.childrenChangesSubject.asObservable(); } rowsCount() { return [].slice.call(this.elRef.nativeElement.getElementsByClassName("row")).length; } ngOnDestroy() { if (this.scrollListener) this.scrollListener(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: TableViewControllerDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.7", type: TableViewControllerDirective, isStandalone: true, selector: "[tableViewController]", outputs: { viewReadyEvent: "viewReady" }, host: { listeners: { "window:keydown": "onZoomChange($event)" } }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: TableViewControllerDirective, decorators: [{ type: Directive, args: [{ selector: '[tableViewController]', standalone: true, }] }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { viewReadyEvent: [{ type: Output, args: ['viewReady'] }], onZoomChange: [{ type: HostListener, args: ['window:keydown', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdmlldy1jb250cm9sbGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL2NvcmUvc3JjL2RpcmVjdGl2ZXMvdGFibGUtdmlldy1jb250cm9sbGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQXFCLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFNakUsTUFBTSxPQUFPLDRCQUE0QjtJQVl2QyxZQUFZLENBQUMsS0FBb0I7UUFFL0IsSUFBRyxLQUFLLENBQUMsR0FBRyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQ3pDO1lBQ0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO2FBQ0ksSUFBRyxLQUFLLENBQUMsR0FBRyxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUM3QztZQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUU5RCxJQUFHLElBQUksQ0FBQyxjQUFjO2dCQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFeEIsTUFBTSxVQUFV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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQURDSVRhYmxlVmlld0NUUkwgfSBmcm9tICcuLi9pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBRENUYWJsZUNlbGwgfSBmcm9tICcuLi91dGlscy90YWJsZS1jZWxsLnRvb2xzJztcclxuaW1wb3J0IHsgQURDVGFibGVSb3dUb29scyB9IGZyb20gJy4uL3V0aWxzL3RhYmxlLXZpZXctcm93LnRvb2xzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3RhYmxlVmlld0NvbnRyb2xsZXJdJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVWaWV3Q29udHJvbGxlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQURDSVRhYmxlVmlld0NUUkwsIE9uRGVzdHJveXtcclxuXHJcbiAgcHJpdmF0ZSBpc1pvb21lZCA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGNoaWxkcmVuQ2hhbmdlc09ic2VydmVyITogTXV0YXRpb25PYnNlcnZlcjtcclxuICBwcml2YXRlIGNoaWxkcmVuQ2hhbmdlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFEQ1RhYmxlQ2VsbFtdPihbXSk7XHJcblxyXG4gIEBPdXRwdXQoJ3ZpZXdSZWFkeScpXHJcbiAgdmlld1JlYWR5RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25ab29tQ2hhbmdlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZFxyXG4gIHtcclxuICAgIGlmKGV2ZW50LmtleSA9PSAnU2hpZnQnICYmICF0aGlzLmlzWm9vbWVkKVxyXG4gICAge1xyXG4gICAgICB0aGlzLmlzWm9vbWVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5mb2N1c0luKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGV2ZW50LmtleSA9PSAnU2hpZnQnICYmIHRoaXMuaXNab29tZWQpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuaXNab29tZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb2N1c091dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCBcclxuICB7XHJcbiAgICB0aGlzLmNoaWxkcmVuQ2hhbmdlc09ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGNoYW5nZXMpID0+IHtcclxuXHJcbiAgICAgIGlmKHRoaXMuc2Nyb2xsTGlzdGVuZXIpXHJcbiAgICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lcigpO1xyXG5cclxuICAgICAgY29uc3QgdGFibGVDZWxsczogQURDVGFibGVDZWxsW10gPSBbXTtcclxuXHJcbiAgICAgIGNoYW5nZXMuZmlsdGVyKGMgPT4gYy5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgYy5hZGRlZE5vZGVzWzBdLmNsYXNzTGlzdC5jb250YWlucygncm93JykpLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IEFycmF5KCkuc2xpY2UuY2FsbCgocm93LmFkZGVkTm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQpLmNoaWxkcmVuKSBhcyBIVE1MRWxlbWVudFtdO1xyXG5cclxuICAgICAgICBjb25zdCBjZWxscyA9IEFycmF5KCkuc2xpY2UuY2FsbChjaGlsZHJlblswXS5jaGlsZHJlbikgYXMgSFRNTEVsZW1lbnRbXTtcclxuXHJcbiAgICAgICAgY2VsbHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5nZXRBdHRyaWJ1dGUoJ3NlbGVjdGFibGUnKSA9PSAndHJ1ZScpLmZvckVhY2goaXRlbSA9PiB0YWJsZUNlbGxzLnB1c2gobmV3IEFEQ1RhYmxlQ2VsbChpdGVtKSkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlTY3JvbGxpbmdCZWhhdmlvcigpO1xyXG5cclxuICAgICAgdGhpcy5jaGlsZHJlbkNoYW5nZXNTdWJqZWN0Lm5leHQodGFibGVDZWxscyk7XHJcblxyXG4gICAgICBpZih0aGlzLmlzWm9vbWVkKVxyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy5pc1pvb21lZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9jdXNPdXQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy52aWV3UmVhZHlFdmVudC5lbWl0KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNoaWxkcmVuQ2hhbmdlc09ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIsIHtjaGlsZExpc3Q6IHRydWV9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGNvbnRhaW5lcigpOiBIVE1MRWxlbWVudFxyXG4gIHtcclxuICAgIHJldHVybiB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Nyb2xsYWJsZUNvbnRhaW5lcigpOiBIVE1MRWxlbWVudFxyXG4gIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50ITtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsTGlzdGVuZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWZcclxuICApIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlTY3JvbGxpbmdCZWhhdmlvcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5zY3JvbGxMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuc2Nyb2xsYWJsZUNvbnRhaW5lciwgJ3Njcm9sbCcsICgpID0+IHtcclxuXHJcbiAgICAgIGlmKHRoaXMuaXNab29tZWQpXHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLnNjcm9sbGFibGVDb250YWluZXIuc2Nyb2xsTGVmdCA9IDA7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxhYmxlQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc3RpY2t5SXRlbXMgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcucm93Jyk7XHJcblxyXG4gICAgICAoQXJyYXkoKS5zbGljZS5jYWxsKHN0aWNreUl0ZW1zKSBhcyBIVE1MRWxlbWVudFtdKS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cclxuICAgICAgICAoQXJyYXkoKS5zbGljZS5jYWxsKGl0ZW0uY2hpbGRyZW4pIGFzIEhUTUxFbGVtZW50W10pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5nZXRBdHRyaWJ1dGUoJ3N0aWNreScpID09ICd0cnVlJykuZm9yRWFjaChzdGlja3lDaGlsZCA9PiB7XHJcbiAgICAgICAgICBzdGlja3lDaGlsZC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgtJHt0aGlzLnNjcm9sbGFibGVDb250YWluZXIuc2Nyb2xsTGVmdH1weClgXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzSW4oKTogdm9pZFxyXG4gIHtcclxuICAgIGNvbnN0IGNoaWxkV2lkdGggPSB0aGlzLmNvbnRhaW5lci5zY3JvbGxXaWR0aDtcclxuICAgIGNvbnN0IHBhcmVudFdpZHRoID0gdGhpcy5zY3JvbGxhYmxlQ29udGFpbmVyLmNsaWVudFdpZHRoO1xyXG5cclxuICAgIGNvbnN0IGNoaWxkSGVpZ2h0ID0gdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgY29uc3QgcGFyZW50SGVpZ2h0ID0gdGhpcy5zY3JvbGxhYmxlQ29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICBjb25zdCBzY2FsZVggPSBwYXJlbnRXaWR0aCAvIGNoaWxkV2lkdGggKiAxMDA7XHJcbiAgICBjb25zdCBzY2FsZVkgPSBwYXJlbnRIZWlnaHQgLyBjaGlsZEhlaWdodCAqIDEwMDtcclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY29udGFpbmVyLCAndHJhbnNmb3JtJywgYHNjYWxlWCgke3NjYWxlWH0lKSBzY2FsZVkoJHtzY2FsZVl9JSlgKTtcclxuXHJcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNjcm9sbGFibGVDb250YWluZXIuc2Nyb2xsTGVmdCA9IDA7XHJcbiAgICAgIHRoaXMuc2Nyb2xsYWJsZUNvbnRhaW5lci5zY3JvbGxUb3AgPSAwO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNPdXQoKTogdm9pZFxyXG4gIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb250YWluZXIsICd0cmFuc2Zvcm0nLCBgc2NhbGVYKCR7MTAwfSUpIHNjYWxlWSgkezEwMH0lKWApO1xyXG4gIH1cclxuXHJcblxyXG4gIHJvdyhyb3dJbmRleDogbnVtYmVyKTogQURDVGFibGVSb3dUb29scyBcclxuICB7XHJcbiAgICBjb25zdCBhbGxSb3dzID0gW10uc2xpY2UuY2FsbCh0aGlzLmNvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicm93XCIpKSBhcyBIVE1MRWxlbWVudFtdO1xyXG4gICAgY29uc3Qgcm93ID0gYWxsUm93cy5maWx0ZXIoKHIpID0+IHIuZ2V0QXR0cmlidXRlKCdyb3ctaW5kZXgnKSA9PSByb3dJbmRleC50b1N0cmluZygpKVswXTtcclxuXHJcbiAgICByZXR1cm4gbmV3IEFEQ1RhYmxlUm93VG9vbHModGhpcy5yZW5kZXJlciwgcm93KTtcclxuICB9XHJcblxyXG4gIGNlbGxDaGFuZ2VzKCk6IE9ic2VydmFibGU8QURDVGFibGVDZWxsW10+XHJcbiAge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5DaGFuZ2VzU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHJvd3NDb3VudCgpOiBudW1iZXIgXHJcbiAge1xyXG4gICAgcmV0dXJuIFtdLnNsaWNlLmNhbGwodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJyb3dcIikpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5zY3JvbGxMaXN0ZW5lcikgdGhpcy5zY3JvbGxMaXN0ZW5lcigpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19