@dcsl/flex-ui 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -308,6 +308,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
308
308
  args: ['gridBody']
309
309
  }] } });
310
310
 
311
+ class FlexContainerComponent {
312
+ renderer;
313
+ contentHost;
314
+ resizeHandler;
315
+ // Allow consumer to provide templates
316
+ headerTpl;
317
+ footerTpl;
318
+ contentTpl;
319
+ constructor(renderer) {
320
+ this.renderer = renderer;
321
+ }
322
+ ngAfterViewInit() {
323
+ this.resizeContent();
324
+ this.resizeHandler = this.resizeContent.bind(this);
325
+ window.addEventListener('resize', this.resizeHandler);
326
+ }
327
+ ngOnDestroy() {
328
+ if (this.resizeHandler) {
329
+ window.removeEventListener('resize', this.resizeHandler);
330
+ }
331
+ }
332
+ resizeContent() {
333
+ const parent = this.contentHost.nativeElement.parentElement;
334
+ if (!parent)
335
+ return;
336
+ const parentHeight = parent.clientHeight;
337
+ const headerHeight = this.contentHost.nativeElement.previousElementSibling?.clientHeight || 0;
338
+ const footerHeight = this.contentHost.nativeElement.nextElementSibling?.clientHeight || 0;
339
+ const available = parentHeight - headerHeight - footerHeight;
340
+ this.renderer.setStyle(this.contentHost.nativeElement, 'height', `${available}px`);
341
+ }
342
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexContainerComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
343
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: FlexContainerComponent, isStandalone: true, selector: "flex-container", queries: [{ propertyName: "headerTpl", first: true, predicate: ["header"], descendants: true }, { propertyName: "footerTpl", first: true, predicate: ["footer"], descendants: true }, { propertyName: "contentTpl", first: true, predicate: ["content"], descendants: true }], viewQueries: [{ propertyName: "contentHost", first: true, predicate: ["contentHost"], descendants: true }], ngImport: i0, template: "<div class=\"flex-container\">\r\n @if(headerTpl){\r\n <div class=\"header\">\r\n <ng-container *ngTemplateOutlet=\"headerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n\r\n <div #contentHost class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </div>\r\n @if(footerTpl){\r\n <div class=\"footer\">\r\n <ng-container *ngTemplateOutlet=\"footerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n</div>", styles: [".flex-container{display:flex;flex-direction:column;height:100%}.header,.footer{flex:0 0 auto}.content{flex:1 1 auto;min-height:0;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
344
+ }
345
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexContainerComponent, decorators: [{
346
+ type: Component,
347
+ args: [{ selector: 'flex-container', imports: [CommonModule], template: "<div class=\"flex-container\">\r\n @if(headerTpl){\r\n <div class=\"header\">\r\n <ng-container *ngTemplateOutlet=\"headerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n\r\n <div #contentHost class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </div>\r\n @if(footerTpl){\r\n <div class=\"footer\">\r\n <ng-container *ngTemplateOutlet=\"footerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n</div>", styles: [".flex-container{display:flex;flex-direction:column;height:100%}.header,.footer{flex:0 0 auto}.content{flex:1 1 auto;min-height:0;overflow:hidden}\n"] }]
348
+ }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { contentHost: [{
349
+ type: ViewChild,
350
+ args: ['contentHost']
351
+ }], headerTpl: [{
352
+ type: ContentChild,
353
+ args: ['header']
354
+ }], footerTpl: [{
355
+ type: ContentChild,
356
+ args: ['footer']
357
+ }], contentTpl: [{
358
+ type: ContentChild,
359
+ args: ['content']
360
+ }] } });
361
+
311
362
  /*
312
363
  * Public API Surface of flex-ui-controls
313
364
  */
@@ -316,5 +367,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
316
367
  * Generated bundle index. Do not edit.
317
368
  */
318
369
 
319
- export { FlexColumnComponent, FlexColumnsComponent, FlexGridComponent, FlexPaginationComponent, FlexPanelComponent };
370
+ export { FlexColumnComponent, FlexColumnsComponent, FlexContainerComponent, FlexGridComponent, FlexPaginationComponent, FlexPanelComponent };
320
371
  //# sourceMappingURL=dcsl-flex-ui.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dcsl-flex-ui.mjs","sources":["../../../projects/flex-ui-controls/src/lib/flex-panel/flex-panel.component.ts","../../../projects/flex-ui-controls/src/lib/flex-panel/flex-panel.component.html","../../../projects/flex-ui-controls/src/lib/flex-pagination/flex-pagination.component.ts","../../../projects/flex-ui-controls/src/lib/flex-pagination/flex-pagination.component.html","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid-column.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid-columns.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid.component.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid.component.html","../../../projects/flex-ui-controls/src/public-api.ts","../../../projects/flex-ui-controls/src/dcsl-flex-ui.ts"],"sourcesContent":["import { Component, ElementRef, HostListener, inject, Renderer2, ViewChild } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-panel',\r\n imports: [],\r\n templateUrl: './flex-panel.component.html',\r\n styleUrl: './flex-panel.component.css'\r\n})\r\n\r\nexport class FlexPanelComponent {\r\n private resizeObserver?: ResizeObserver;\r\n private mutationObserver?: MutationObserver;\r\n\r\n @ViewChild(\"abc\") comp?: ElementRef<HTMLDivElement>;\r\n\r\n private renderer = inject(Renderer2);\r\n\r\n constructor() { }\r\n\r\n ngAfterViewInit() {\r\n this.adjustHeight();\r\n\r\n // ✅ Recalculate on window resize\r\n if ('ResizeObserver' in window) {\r\n this.resizeObserver = new ResizeObserver(() => this.adjustHeight());\r\n this.resizeObserver.observe(document.body);\r\n }\r\n\r\n // ✅ Also observe DOM changes that may shift this element\r\n this.mutationObserver = new MutationObserver(() => this.adjustHeight());\r\n this.mutationObserver.observe(document.body, {\r\n attributes: true,\r\n childList: true,\r\n subtree: true\r\n });\r\n\r\n\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize() {\r\n this.adjustHeight();\r\n }\r\n\r\n private adjustHeight() {\r\n // const host: HTMLElement = this.el.nativeElement;\r\n const top = this.comp!.nativeElement.getBoundingClientRect().top;\r\n const viewportHeight = window.innerHeight;\r\n const newHeight = viewportHeight - top;\r\n\r\n this.renderer.setStyle(this.comp?.nativeElement, 'height', `${newHeight}px`);\r\n this.renderer.setStyle(this.comp?.nativeElement, 'width', '100%');\r\n\r\n // console.log(host);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n }\r\n if (this.mutationObserver) {\r\n this.mutationObserver.disconnect();\r\n }\r\n }\r\n}\r\n","<div class=\"stretch-container\" #abc>\r\n <ng-content></ng-content>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, HostListener, OnInit, input, effect } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexPaging } from './flex_page';\r\n\r\n@Component({\r\n selector: 'flex-pagination',\r\n templateUrl: './flex-pagination.component.html',\r\n styleUrls: ['./flex-pagination.component.css'],\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class FlexPaginationComponent implements OnInit {\r\n rowCount = input<number>(0);\r\n\r\n protected _totalItems: number = 0;\r\n pageSize = 50;\r\n currentPage = 1;\r\n @Output() pageChange = new EventEmitter<FlexPaging>();\r\n\r\n maxPagesToShow = 5;\r\n pageSizes = [50, 100, 200, 500];\r\n\r\n constructor() {\r\n effect(() => {\r\n this.currentPage = 1;\r\n this._totalItems = this.rowCount();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateMaxPages();\r\n }\r\n\r\n // Update maxPagesToShow based on screen size\r\n @HostListener('window:resize')\r\n updateMaxPages() {\r\n const width = window.innerWidth;\r\n if (width < 576) {\r\n this.maxPagesToShow = 1; // only current page\r\n } else if (width < 768) {\r\n this.maxPagesToShow = 3;\r\n } else {\r\n this.maxPagesToShow = 5;\r\n }\r\n }\r\n\r\n\r\n get totalPages(): number {\r\n return Math.ceil(this._totalItems / this.pageSize) || 1;\r\n }\r\n\r\n get pages(): (number | string)[] {\r\n const total = this.totalPages;\r\n const max = this.maxPagesToShow;\r\n\r\n if (max === 1) {\r\n return [this.currentPage]; // mobile: only current page\r\n }\r\n\r\n const pages: (number | string)[] = [];\r\n\r\n if (total <= max) {\r\n for (let i = 1; i <= total; i++) pages.push(i);\r\n } else {\r\n let start = Math.max(this.currentPage - Math.floor(max / 2), 1);\r\n let end = start + max - 1;\r\n\r\n if (end > total) {\r\n end = total;\r\n start = end - max + 1;\r\n }\r\n\r\n if (start > 1) pages.push(1, '...');\r\n for (let i = start; i <= end; i++) pages.push(i);\r\n if (end < total) pages.push('...', total);\r\n }\r\n\r\n return pages;\r\n }\r\n\r\n changePage(page: number | string) {\r\n if (typeof page !== 'number') return;\r\n if (page < 1) page = 1;\r\n if (page > this.totalPages) page = this.totalPages;\r\n if (page === this.currentPage) return;\r\n\r\n this.currentPage = page;\r\n this.pageChange.emit({\r\n skip: (this.currentPage - 1) * this.pageSize,\r\n take: this.pageSize,\r\n pageSize: this.pageSize,\r\n currentPage: this.currentPage,\r\n });\r\n }\r\n\r\n onPageSizeChange(pageSize: any) {\r\n var value = Number(pageSize.target.value);\r\n if (isNaN(value) || value <= 0) return;\r\n\r\n this.pageSize = value;\r\n this.pageChange.emit({\r\n skip: (this.currentPage - 1) * this.pageSize,\r\n take: this.pageSize,\r\n pageSize: this.pageSize,\r\n currentPage: this.currentPage\r\n });\r\n }\r\n\r\n firstPage() { this.changePage(1); }\r\n lastPage() { this.changePage(this.totalPages); }\r\n prevPage() { this.changePage(this.currentPage - 1); }\r\n nextPage() { this.changePage(this.currentPage + 1); }\r\n}\r\n","<div class=\"d-flex justify-content-start align-items-center\">\r\n <!-- Pagination -->\r\n <div class=\"overflow-auto\">\r\n <ul class=\"pagination justify-content-center flex-nowrap mb-0\">\r\n <!-- First / Prev (hide First on xs) -->\r\n <li class=\"page-item d-none d-sm-block\" [class.disabled]=\"currentPage === 1\">\r\n <button class=\"page-link\" (click)=\"firstPage()\"><i class=\"bi bi-chevron-double-left\"></i></button>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <button class=\"page-link\" (click)=\"prevPage()\"><i class=\"bi bi-chevron-left\"></i></button>\r\n </li>\r\n\r\n <!-- Page numbers -->\r\n <li class=\"page-item\" *ngFor=\"let page of pages\" [class.active]=\"page === currentPage\"\r\n [class.disabled]=\"page === '...'\">\r\n <button class=\"page-link\" [disabled]=\"page === '...'\" (click)=\"changePage(page)\">\r\n {{ page }}\r\n </button>\r\n </li>\r\n\r\n <!-- Next / Last (hide Last on xs) -->\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === totalPages\">\r\n <button class=\"page-link\" (click)=\"nextPage()\"><i class=\"bi bi-chevron-right\"></i></button>\r\n </li>\r\n <li class=\"page-item d-none d-sm-block\" [class.disabled]=\"currentPage === totalPages\">\r\n <button class=\"page-link\" (click)=\"lastPage()\"><i class=\"bi bi-chevron-double-right\"></i></button>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <!-- Page Size Dropdown -->\r\n <div class=\"ms-2\">\r\n <label class=\"me-2\">{{ \"page-size\" }}</label>\r\n <select class=\"form-select d-inline-block w-auto\" [(ngModel)]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\r\n <option *ngFor=\"let size of pageSizes\" [value]=\"size\">{{ size }}</option>\r\n </select>\r\n </div>\r\n <div class=\"total-count ms-2\">\r\n {{ \"total-count\" }}: {{ _totalItems }}\r\n </div>\r\n</div>","// grid-column.component.ts\r\nimport { Component, ContentChild, TemplateRef, Input, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-grid-column',\r\n template: ''\r\n})\r\n\r\nexport class FlexColumnComponent {\r\n headerText = input<string>('');\r\n\r\n @Input() field!: string;\r\n @Input() width: any = 120;\r\n\r\n @ContentChild('headerTemplate') headerTemplate!: TemplateRef<any>;\r\n @ContentChild('cellTemplate') cellTemplate!: TemplateRef<any>;\r\n\r\n\r\n}\r\n","// grid-columns.component.ts\r\nimport { Component, ContentChildren, QueryList } from '@angular/core';\r\nimport { FlexColumnComponent } from './flex-grid-column';\r\n\r\n@Component({\r\n selector: 'flex-grid-columns',\r\n template: ''\r\n})\r\nexport class FlexColumnsComponent {\r\n @ContentChildren(FlexColumnComponent) columns!: QueryList<FlexColumnComponent>;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ContentChild, effect, ElementRef, Input, input, output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexPaginationComponent } from \"../flex-pagination/flex-pagination.component\";\r\nimport { FlexColumnsComponent } from './flex-grid-columns';\r\nimport { FlexPaging } from '../flex-pagination/flex_page';\r\n\r\n@Component({\r\n selector: 'flex-grid',\r\n imports: [CommonModule, FormsModule, FlexPaginationComponent],\r\n templateUrl: './flex-grid.component.html',\r\n styleUrl: './flex-grid.component.css'\r\n})\r\n\r\nexport class FlexGridComponent implements AfterViewInit {\r\n\r\n\r\n enablePaging = input<boolean>(false);\r\n totalDataCount = input<number>(0);\r\n\r\n tableClass = input<string>('');\r\n\r\n @Input() dataSource: any[] = [];\r\n\r\n // @ContentChildren(GridColumnComponent) columns!: QueryList<GridColumnComponent>;\r\n @ContentChild(FlexColumnsComponent) gridColumns?: FlexColumnsComponent;\r\n\r\n rowClicked = output<{ index: number, data: any }>();\r\n rowDblClicked = output<{ index: number, data: any }>();\r\n\r\n // Optional: custom template when no data\r\n @Input() emptyRecordTemplate?: TemplateRef<any>;\r\n\r\n isPagingEnabled: boolean = false;\r\n\r\n @ViewChild('gridHeader') gridHeader!: ElementRef;\r\n\r\n @ViewChild('gridBody') gridBody!: ElementRef;\r\n\r\n selectedIndex: number = -1;\r\n protected _totalDataCount: number = 0;\r\n protected _tableClass: string = \"\";\r\n\r\n pageChange = output<{ skip: number, take: number }>();\r\n currentPage: number = 1;\r\n pageSize: number = 50;\r\n\r\n constructor() {\r\n effect(() => {\r\n this.isPagingEnabled = this.enablePaging();\r\n });\r\n\r\n effect(() => {\r\n this._totalDataCount = this.totalDataCount();\r\n });\r\n\r\n effect(() => {\r\n this._tableClass = this.tableClass();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.syncColumnWidths();\r\n }\r\n\r\n check() {\r\n console.log(this.gridColumns);\r\n console.log(this.dataSource);\r\n }\r\n\r\n syncScroll(e: Event) {\r\n const body = e.target as HTMLElement;\r\n const header = this.gridHeader?.nativeElement; //document.querySelector('.grid-header');\r\n if (header) (header as HTMLElement).scrollLeft = body.scrollLeft;\r\n }\r\n\r\n syncColumnWidths() {\r\n // const headerCols = this.gridHeader.nativeElement.querySelectorAll('th');\r\n // const bodyCols = this.gridBody.nativeElement.querySelectorAll('tr:first-child td');\r\n\r\n // bodyCols.forEach((td: HTMLElement, i: number) => {\r\n // const width = td.getBoundingClientRect().width;\r\n // (headerCols[i] as HTMLElement).style.width = width + 'px';\r\n // });\r\n }\r\n\r\n // syncColumnWidths() {\r\n // const headerCols = document.querySelectorAll('.grid-header th');\r\n // const bodyCols = this.gridBody.nativeElement.querySelectorAll('tbody tr:first-child td');\r\n\r\n // bodyCols.forEach((col: HTMLElement, i: number) => {\r\n // const width = col.getBoundingClientRect().width;\r\n // (headerCols[i] as HTMLElement).style.width = width + 'px';\r\n // });\r\n // }\r\n\r\n onRowDblClick(index: number, data: any) {\r\n this.selectedIndex = index;\r\n // console.log(index);\r\n\r\n this.rowDblClicked.emit({ index: index, data: data });\r\n }\r\n\r\n onRowClick(index: number, data: any) {\r\n this.selectedIndex = index;\r\n // console.log(index);\r\n\r\n this.rowClicked.emit({ index: index, data: data });\r\n }\r\n\r\n onPageChanged(event: FlexPaging) {\r\n console.log(event);\r\n this.currentPage = event.currentPage;\r\n this.pageSize = event.pageSize;\r\n\r\n this.pageChange.emit(event);\r\n\r\n\r\n }\r\n\r\n}\r\n","<div class=\"grid-container\">\r\n <!-- Header row in its own div -->\r\n <div class=\"grid-scroll\">\r\n <div class=\"grid-container-sub\">\r\n <div class=\"grid-header\" #gridHeader>\r\n <table class=\"grid-table table table-bordered table-sm mb-0 header-table\">\r\n <colgroup>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <col [style.width.px]=\"col.width\" [style.maxWidth.px]=\"col.width\">\r\n }\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n <!-- <ng-template #defaultHeader><span [textContent]=\"col.field\"></span></ng-template> -->\r\n <!-- <span [textContent]=\"col.field\"></span> -->\r\n {{ col.headerText() }}\r\n }\r\n </th>\r\n }\r\n\r\n <!-- <th style=\"width: 20px;\"></th> -->\r\n </tr>\r\n </thead>\r\n\r\n </table>\r\n </div>\r\n <!-- Scrollable body in another div -->\r\n <div #gridBody class=\"grid-body\" (scroll)=\"syncScroll($event)\">\r\n @if(dataSource.length > 0){\r\n <table class=\"grid-table table table-bordered table-sm table-hover mb-0\" [ngClass]=\"_tableClass\">\r\n\r\n <colgroup>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <col [style.width.px]=\"col.width\" [style.maxWidth.px]=\"col.width\">\r\n }\r\n </colgroup>\r\n <tbody>\r\n @for (row of dataSource; track $index; let i = $index) {\r\n <tr [class.table-active]=\"$index === selectedIndex\" (click)=\"onRowClick($index, row)\"\r\n (dblclick)=\"onRowDblClick($index, row)\">\r\n @for (col of gridColumns?.columns; track $index) {\r\n <td>\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row,\r\n rowIndex: (currentPage - 1) * pageSize + i,\r\n localIndex: i }\">\r\n </ng-container>\r\n } @else {\r\n <!-- {{ row[col.field] }} -->\r\n <span [textContent]=\"row[col.field]\"></span>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n @else {\r\n No records found\r\n }\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n @if(isPagingEnabled){\r\n <!-- Footer -->\r\n <div class=\"grid-footer\">\r\n <flex-pagination [rowCount]=\"_totalDataCount\" (pageChange)=\"onPageChanged($event)\"></flex-pagination>\r\n </div>\r\n }\r\n\r\n</div>","/*\r\n * Public API Surface of flex-ui-controls\r\n */\r\n\r\nexport * from './lib/flex-panel/flex-panel.component';\r\nexport * from './lib/flex-pagination/flex-pagination.component';\r\nexport * from './lib/flex-grid/flex-grid.component';\r\nexport * from './lib/flex-grid/flex-grid-columns';\r\nexport * from './lib/flex-grid/flex-grid-column';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dcsl-flex-ui.mjs","sources":["../../../projects/flex-ui-controls/src/lib/flex-panel/flex-panel.component.ts","../../../projects/flex-ui-controls/src/lib/flex-panel/flex-panel.component.html","../../../projects/flex-ui-controls/src/lib/flex-pagination/flex-pagination.component.ts","../../../projects/flex-ui-controls/src/lib/flex-pagination/flex-pagination.component.html","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid-column.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid-columns.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid.component.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid.component.html","../../../projects/flex-ui-controls/src/lib/flex-container/flex-container.component.ts","../../../projects/flex-ui-controls/src/lib/flex-container/flex-container.component.html","../../../projects/flex-ui-controls/src/public-api.ts","../../../projects/flex-ui-controls/src/dcsl-flex-ui.ts"],"sourcesContent":["import { Component, ElementRef, HostListener, inject, Renderer2, ViewChild } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-panel',\r\n imports: [],\r\n templateUrl: './flex-panel.component.html',\r\n styleUrl: './flex-panel.component.css'\r\n})\r\n\r\nexport class FlexPanelComponent {\r\n private resizeObserver?: ResizeObserver;\r\n private mutationObserver?: MutationObserver;\r\n\r\n @ViewChild(\"abc\") comp?: ElementRef<HTMLDivElement>;\r\n\r\n private renderer = inject(Renderer2);\r\n\r\n constructor() { }\r\n\r\n ngAfterViewInit() {\r\n this.adjustHeight();\r\n\r\n // ✅ Recalculate on window resize\r\n if ('ResizeObserver' in window) {\r\n this.resizeObserver = new ResizeObserver(() => this.adjustHeight());\r\n this.resizeObserver.observe(document.body);\r\n }\r\n\r\n // ✅ Also observe DOM changes that may shift this element\r\n this.mutationObserver = new MutationObserver(() => this.adjustHeight());\r\n this.mutationObserver.observe(document.body, {\r\n attributes: true,\r\n childList: true,\r\n subtree: true\r\n });\r\n\r\n\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize() {\r\n this.adjustHeight();\r\n }\r\n\r\n private adjustHeight() {\r\n // const host: HTMLElement = this.el.nativeElement;\r\n const top = this.comp!.nativeElement.getBoundingClientRect().top;\r\n const viewportHeight = window.innerHeight;\r\n const newHeight = viewportHeight - top;\r\n\r\n this.renderer.setStyle(this.comp?.nativeElement, 'height', `${newHeight}px`);\r\n this.renderer.setStyle(this.comp?.nativeElement, 'width', '100%');\r\n\r\n // console.log(host);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n }\r\n if (this.mutationObserver) {\r\n this.mutationObserver.disconnect();\r\n }\r\n }\r\n}\r\n","<div class=\"stretch-container\" #abc>\r\n <ng-content></ng-content>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, HostListener, OnInit, input, effect } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexPaging } from './flex_page';\r\n\r\n@Component({\r\n selector: 'flex-pagination',\r\n templateUrl: './flex-pagination.component.html',\r\n styleUrls: ['./flex-pagination.component.css'],\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class FlexPaginationComponent implements OnInit {\r\n rowCount = input<number>(0);\r\n\r\n protected _totalItems: number = 0;\r\n pageSize = 50;\r\n currentPage = 1;\r\n @Output() pageChange = new EventEmitter<FlexPaging>();\r\n\r\n maxPagesToShow = 5;\r\n pageSizes = [50, 100, 200, 500];\r\n\r\n constructor() {\r\n effect(() => {\r\n this.currentPage = 1;\r\n this._totalItems = this.rowCount();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateMaxPages();\r\n }\r\n\r\n // Update maxPagesToShow based on screen size\r\n @HostListener('window:resize')\r\n updateMaxPages() {\r\n const width = window.innerWidth;\r\n if (width < 576) {\r\n this.maxPagesToShow = 1; // only current page\r\n } else if (width < 768) {\r\n this.maxPagesToShow = 3;\r\n } else {\r\n this.maxPagesToShow = 5;\r\n }\r\n }\r\n\r\n\r\n get totalPages(): number {\r\n return Math.ceil(this._totalItems / this.pageSize) || 1;\r\n }\r\n\r\n get pages(): (number | string)[] {\r\n const total = this.totalPages;\r\n const max = this.maxPagesToShow;\r\n\r\n if (max === 1) {\r\n return [this.currentPage]; // mobile: only current page\r\n }\r\n\r\n const pages: (number | string)[] = [];\r\n\r\n if (total <= max) {\r\n for (let i = 1; i <= total; i++) pages.push(i);\r\n } else {\r\n let start = Math.max(this.currentPage - Math.floor(max / 2), 1);\r\n let end = start + max - 1;\r\n\r\n if (end > total) {\r\n end = total;\r\n start = end - max + 1;\r\n }\r\n\r\n if (start > 1) pages.push(1, '...');\r\n for (let i = start; i <= end; i++) pages.push(i);\r\n if (end < total) pages.push('...', total);\r\n }\r\n\r\n return pages;\r\n }\r\n\r\n changePage(page: number | string) {\r\n if (typeof page !== 'number') return;\r\n if (page < 1) page = 1;\r\n if (page > this.totalPages) page = this.totalPages;\r\n if (page === this.currentPage) return;\r\n\r\n this.currentPage = page;\r\n this.pageChange.emit({\r\n skip: (this.currentPage - 1) * this.pageSize,\r\n take: this.pageSize,\r\n pageSize: this.pageSize,\r\n currentPage: this.currentPage,\r\n });\r\n }\r\n\r\n onPageSizeChange(pageSize: any) {\r\n var value = Number(pageSize.target.value);\r\n if (isNaN(value) || value <= 0) return;\r\n\r\n this.pageSize = value;\r\n this.pageChange.emit({\r\n skip: (this.currentPage - 1) * this.pageSize,\r\n take: this.pageSize,\r\n pageSize: this.pageSize,\r\n currentPage: this.currentPage\r\n });\r\n }\r\n\r\n firstPage() { this.changePage(1); }\r\n lastPage() { this.changePage(this.totalPages); }\r\n prevPage() { this.changePage(this.currentPage - 1); }\r\n nextPage() { this.changePage(this.currentPage + 1); }\r\n}\r\n","<div class=\"d-flex justify-content-start align-items-center\">\r\n <!-- Pagination -->\r\n <div class=\"overflow-auto\">\r\n <ul class=\"pagination justify-content-center flex-nowrap mb-0\">\r\n <!-- First / Prev (hide First on xs) -->\r\n <li class=\"page-item d-none d-sm-block\" [class.disabled]=\"currentPage === 1\">\r\n <button class=\"page-link\" (click)=\"firstPage()\"><i class=\"bi bi-chevron-double-left\"></i></button>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <button class=\"page-link\" (click)=\"prevPage()\"><i class=\"bi bi-chevron-left\"></i></button>\r\n </li>\r\n\r\n <!-- Page numbers -->\r\n <li class=\"page-item\" *ngFor=\"let page of pages\" [class.active]=\"page === currentPage\"\r\n [class.disabled]=\"page === '...'\">\r\n <button class=\"page-link\" [disabled]=\"page === '...'\" (click)=\"changePage(page)\">\r\n {{ page }}\r\n </button>\r\n </li>\r\n\r\n <!-- Next / Last (hide Last on xs) -->\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === totalPages\">\r\n <button class=\"page-link\" (click)=\"nextPage()\"><i class=\"bi bi-chevron-right\"></i></button>\r\n </li>\r\n <li class=\"page-item d-none d-sm-block\" [class.disabled]=\"currentPage === totalPages\">\r\n <button class=\"page-link\" (click)=\"lastPage()\"><i class=\"bi bi-chevron-double-right\"></i></button>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <!-- Page Size Dropdown -->\r\n <div class=\"ms-2\">\r\n <label class=\"me-2\">{{ \"page-size\" }}</label>\r\n <select class=\"form-select d-inline-block w-auto\" [(ngModel)]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\r\n <option *ngFor=\"let size of pageSizes\" [value]=\"size\">{{ size }}</option>\r\n </select>\r\n </div>\r\n <div class=\"total-count ms-2\">\r\n {{ \"total-count\" }}: {{ _totalItems }}\r\n </div>\r\n</div>","// grid-column.component.ts\r\nimport { Component, ContentChild, TemplateRef, Input, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-grid-column',\r\n template: ''\r\n})\r\n\r\nexport class FlexColumnComponent {\r\n headerText = input<string>('');\r\n\r\n @Input() field!: string;\r\n @Input() width: any = 120;\r\n\r\n @ContentChild('headerTemplate') headerTemplate!: TemplateRef<any>;\r\n @ContentChild('cellTemplate') cellTemplate!: TemplateRef<any>;\r\n\r\n\r\n}\r\n","// grid-columns.component.ts\r\nimport { Component, ContentChildren, QueryList } from '@angular/core';\r\nimport { FlexColumnComponent } from './flex-grid-column';\r\n\r\n@Component({\r\n selector: 'flex-grid-columns',\r\n template: ''\r\n})\r\nexport class FlexColumnsComponent {\r\n @ContentChildren(FlexColumnComponent) columns!: QueryList<FlexColumnComponent>;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ContentChild, effect, ElementRef, Input, input, output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexPaginationComponent } from \"../flex-pagination/flex-pagination.component\";\r\nimport { FlexColumnsComponent } from './flex-grid-columns';\r\nimport { FlexPaging } from '../flex-pagination/flex_page';\r\n\r\n@Component({\r\n selector: 'flex-grid',\r\n imports: [CommonModule, FormsModule, FlexPaginationComponent],\r\n templateUrl: './flex-grid.component.html',\r\n styleUrl: './flex-grid.component.css'\r\n})\r\n\r\nexport class FlexGridComponent implements AfterViewInit {\r\n\r\n\r\n enablePaging = input<boolean>(false);\r\n totalDataCount = input<number>(0);\r\n\r\n tableClass = input<string>('');\r\n\r\n @Input() dataSource: any[] = [];\r\n\r\n // @ContentChildren(GridColumnComponent) columns!: QueryList<GridColumnComponent>;\r\n @ContentChild(FlexColumnsComponent) gridColumns?: FlexColumnsComponent;\r\n\r\n rowClicked = output<{ index: number, data: any }>();\r\n rowDblClicked = output<{ index: number, data: any }>();\r\n\r\n // Optional: custom template when no data\r\n @Input() emptyRecordTemplate?: TemplateRef<any>;\r\n\r\n isPagingEnabled: boolean = false;\r\n\r\n @ViewChild('gridHeader') gridHeader!: ElementRef;\r\n\r\n @ViewChild('gridBody') gridBody!: ElementRef;\r\n\r\n selectedIndex: number = -1;\r\n protected _totalDataCount: number = 0;\r\n protected _tableClass: string = \"\";\r\n\r\n pageChange = output<{ skip: number, take: number }>();\r\n currentPage: number = 1;\r\n pageSize: number = 50;\r\n\r\n constructor() {\r\n effect(() => {\r\n this.isPagingEnabled = this.enablePaging();\r\n });\r\n\r\n effect(() => {\r\n this._totalDataCount = this.totalDataCount();\r\n });\r\n\r\n effect(() => {\r\n this._tableClass = this.tableClass();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.syncColumnWidths();\r\n }\r\n\r\n check() {\r\n console.log(this.gridColumns);\r\n console.log(this.dataSource);\r\n }\r\n\r\n syncScroll(e: Event) {\r\n const body = e.target as HTMLElement;\r\n const header = this.gridHeader?.nativeElement; //document.querySelector('.grid-header');\r\n if (header) (header as HTMLElement).scrollLeft = body.scrollLeft;\r\n }\r\n\r\n syncColumnWidths() {\r\n // const headerCols = this.gridHeader.nativeElement.querySelectorAll('th');\r\n // const bodyCols = this.gridBody.nativeElement.querySelectorAll('tr:first-child td');\r\n\r\n // bodyCols.forEach((td: HTMLElement, i: number) => {\r\n // const width = td.getBoundingClientRect().width;\r\n // (headerCols[i] as HTMLElement).style.width = width + 'px';\r\n // });\r\n }\r\n\r\n // syncColumnWidths() {\r\n // const headerCols = document.querySelectorAll('.grid-header th');\r\n // const bodyCols = this.gridBody.nativeElement.querySelectorAll('tbody tr:first-child td');\r\n\r\n // bodyCols.forEach((col: HTMLElement, i: number) => {\r\n // const width = col.getBoundingClientRect().width;\r\n // (headerCols[i] as HTMLElement).style.width = width + 'px';\r\n // });\r\n // }\r\n\r\n onRowDblClick(index: number, data: any) {\r\n this.selectedIndex = index;\r\n // console.log(index);\r\n\r\n this.rowDblClicked.emit({ index: index, data: data });\r\n }\r\n\r\n onRowClick(index: number, data: any) {\r\n this.selectedIndex = index;\r\n // console.log(index);\r\n\r\n this.rowClicked.emit({ index: index, data: data });\r\n }\r\n\r\n onPageChanged(event: FlexPaging) {\r\n console.log(event);\r\n this.currentPage = event.currentPage;\r\n this.pageSize = event.pageSize;\r\n\r\n this.pageChange.emit(event);\r\n\r\n\r\n }\r\n\r\n}\r\n","<div class=\"grid-container\">\r\n <!-- Header row in its own div -->\r\n <div class=\"grid-scroll\">\r\n <div class=\"grid-container-sub\">\r\n <div class=\"grid-header\" #gridHeader>\r\n <table class=\"grid-table table table-bordered table-sm mb-0 header-table\">\r\n <colgroup>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <col [style.width.px]=\"col.width\" [style.maxWidth.px]=\"col.width\">\r\n }\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n <!-- <ng-template #defaultHeader><span [textContent]=\"col.field\"></span></ng-template> -->\r\n <!-- <span [textContent]=\"col.field\"></span> -->\r\n {{ col.headerText() }}\r\n }\r\n </th>\r\n }\r\n\r\n <!-- <th style=\"width: 20px;\"></th> -->\r\n </tr>\r\n </thead>\r\n\r\n </table>\r\n </div>\r\n <!-- Scrollable body in another div -->\r\n <div #gridBody class=\"grid-body\" (scroll)=\"syncScroll($event)\">\r\n @if(dataSource.length > 0){\r\n <table class=\"grid-table table table-bordered table-sm table-hover mb-0\" [ngClass]=\"_tableClass\">\r\n\r\n <colgroup>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <col [style.width.px]=\"col.width\" [style.maxWidth.px]=\"col.width\">\r\n }\r\n </colgroup>\r\n <tbody>\r\n @for (row of dataSource; track $index; let i = $index) {\r\n <tr [class.table-active]=\"$index === selectedIndex\" (click)=\"onRowClick($index, row)\"\r\n (dblclick)=\"onRowDblClick($index, row)\">\r\n @for (col of gridColumns?.columns; track $index) {\r\n <td>\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row,\r\n rowIndex: (currentPage - 1) * pageSize + i,\r\n localIndex: i }\">\r\n </ng-container>\r\n } @else {\r\n <!-- {{ row[col.field] }} -->\r\n <span [textContent]=\"row[col.field]\"></span>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n @else {\r\n No records found\r\n }\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n @if(isPagingEnabled){\r\n <!-- Footer -->\r\n <div class=\"grid-footer\">\r\n <flex-pagination [rowCount]=\"_totalDataCount\" (pageChange)=\"onPageChanged($event)\"></flex-pagination>\r\n </div>\r\n }\r\n\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n Renderer2,\r\n TemplateRef,\r\n ViewChild,\r\n OnDestroy\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-container',\r\n templateUrl: './flex-container.component.html',\r\n styleUrls: ['./flex-container.component.css'],\r\n imports: [CommonModule]\r\n})\r\n\r\nexport class FlexContainerComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild('contentHost') contentHost!: ElementRef<HTMLDivElement>;\r\n private resizeHandler!: () => void;\r\n\r\n // Allow consumer to provide templates\r\n @ContentChild('header') headerTpl!: TemplateRef<any>;\r\n @ContentChild('footer') footerTpl!: TemplateRef<any>;\r\n @ContentChild('content') contentTpl!: TemplateRef<any>;\r\n\r\n constructor(private renderer: Renderer2) { }\r\n\r\n ngAfterViewInit(): void {\r\n this.resizeContent();\r\n this.resizeHandler = this.resizeContent.bind(this);\r\n window.addEventListener('resize', this.resizeHandler);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.resizeHandler) {\r\n window.removeEventListener('resize', this.resizeHandler);\r\n }\r\n }\r\n\r\n private resizeContent() {\r\n const parent = this.contentHost.nativeElement.parentElement;\r\n if (!parent) return;\r\n\r\n const parentHeight = parent.clientHeight;\r\n const headerHeight = this.contentHost.nativeElement.previousElementSibling?.clientHeight || 0;\r\n const footerHeight = this.contentHost.nativeElement.nextElementSibling?.clientHeight || 0;\r\n\r\n const available = parentHeight - headerHeight - footerHeight;\r\n\r\n this.renderer.setStyle(this.contentHost.nativeElement, 'height', `${available}px`);\r\n }\r\n}\r\n","<div class=\"flex-container\">\r\n @if(headerTpl){\r\n <div class=\"header\">\r\n <ng-container *ngTemplateOutlet=\"headerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n\r\n <div #contentHost class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </div>\r\n @if(footerTpl){\r\n <div class=\"footer\">\r\n <ng-container *ngTemplateOutlet=\"footerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n</div>","/*\r\n * Public API Surface of flex-ui-controls\r\n */\r\n\r\nexport * from './lib/flex-panel/flex-panel.component';\r\nexport * from './lib/flex-pagination/flex-pagination.component';\r\nexport * from './lib/flex-grid/flex-grid.component';\r\nexport * from './lib/flex-grid/flex-grid-columns';\r\nexport * from './lib/flex-grid/flex-grid-column';\r\nexport * from './lib/flex-container/flex-container.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ElementRef, OnInit, EventEmitter, TemplateRef, QueryList, AfterViewInit } from '@angular/core';
2
+ import { ElementRef, OnInit, EventEmitter, TemplateRef, QueryList, AfterViewInit, OnDestroy, Renderer2 } from '@angular/core';
3
3
 
4
4
  declare class FlexPanelComponent {
5
5
  private resizeObserver?;
@@ -100,4 +100,19 @@ declare class FlexGridComponent implements AfterViewInit {
100
100
  static ɵcmp: i0.ɵɵComponentDeclaration<FlexGridComponent, "flex-grid", never, { "enablePaging": { "alias": "enablePaging"; "required": false; "isSignal": true; }; "totalDataCount": { "alias": "totalDataCount"; "required": false; "isSignal": true; }; "tableClass": { "alias": "tableClass"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; }; "emptyRecordTemplate": { "alias": "emptyRecordTemplate"; "required": false; }; }, { "rowClicked": "rowClicked"; "rowDblClicked": "rowDblClicked"; "pageChange": "pageChange"; }, ["gridColumns"], never, true, never>;
101
101
  }
102
102
 
103
- export { FlexColumnComponent, FlexColumnsComponent, FlexGridComponent, FlexPaginationComponent, FlexPanelComponent };
103
+ declare class FlexContainerComponent implements AfterViewInit, OnDestroy {
104
+ private renderer;
105
+ contentHost: ElementRef<HTMLDivElement>;
106
+ private resizeHandler;
107
+ headerTpl: TemplateRef<any>;
108
+ footerTpl: TemplateRef<any>;
109
+ contentTpl: TemplateRef<any>;
110
+ constructor(renderer: Renderer2);
111
+ ngAfterViewInit(): void;
112
+ ngOnDestroy(): void;
113
+ private resizeContent;
114
+ static ɵfac: i0.ɵɵFactoryDeclaration<FlexContainerComponent, never>;
115
+ static ɵcmp: i0.ɵɵComponentDeclaration<FlexContainerComponent, "flex-container", never, {}, {}, ["headerTpl", "footerTpl", "contentTpl"], never, true, never>;
116
+ }
117
+
118
+ export { FlexColumnComponent, FlexColumnsComponent, FlexContainerComponent, FlexGridComponent, FlexPaginationComponent, FlexPanelComponent };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcsl/flex-ui",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=02.0.0",
6
6
  "@angular/core": ">=20.0.0"