@dcsl/flex-ui 0.0.47 → 0.0.49
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.
- package/fesm2022/dcsl-flex-ui.mjs +49 -47
- package/fesm2022/dcsl-flex-ui.mjs.map +1 -1
- package/index.d.ts +10 -6
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Renderer2, HostListener, ViewChild, Component, input, EventEmitter, effect, Output,
|
|
2
|
+
import { inject, Renderer2, HostListener, ViewChild, Component, input, EventEmitter, effect, Output, Input, ContentChild, ContentChildren, output, model, signal, Injectable, createComponent } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import * as i1$1 from '@angular/forms';
|
|
@@ -161,12 +161,14 @@ class FlexPaginationComponent {
|
|
|
161
161
|
prevPage() { this.changePage(this.currentPage - 1); }
|
|
162
162
|
nextPage() { this.changePage(this.currentPage + 1); }
|
|
163
163
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
164
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: FlexPaginationComponent, isStandalone: true, selector: "flex-pagination", inputs: { rowCount: { classPropertyName: "rowCount", publicName: "rowCount", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageChange: "pageChange" }, host: { listeners: { "window:resize": "updateMaxPages()" } }, ngImport: i0, template: "<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>", styles: ["@media (max-width: 576px){.total-count{display:none!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
164
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: FlexPaginationComponent, isStandalone: true, selector: "flex-pagination", inputs: { rowCount: { classPropertyName: "rowCount", publicName: "rowCount", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { pageChange: "pageChange" }, host: { listeners: { "window:resize": "updateMaxPages()" } }, ngImport: i0, template: "<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>", styles: ["@media (max-width: 576px){.total-count{display:none!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
165
165
|
}
|
|
166
166
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexPaginationComponent, decorators: [{
|
|
167
167
|
type: Component,
|
|
168
168
|
args: [{ selector: 'flex-pagination', imports: [CommonModule, FormsModule], template: "<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>", styles: ["@media (max-width: 576px){.total-count{display:none!important}}\n"] }]
|
|
169
|
-
}], ctorParameters: () => [], propDecorators: {
|
|
169
|
+
}], ctorParameters: () => [], propDecorators: { pageSize: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], pageChange: [{
|
|
170
172
|
type: Output
|
|
171
173
|
}], updateMaxPages: [{
|
|
172
174
|
type: HostListener,
|
|
@@ -301,7 +303,7 @@ class FlexGridComponent {
|
|
|
301
303
|
this.pageChange.emit(event);
|
|
302
304
|
}
|
|
303
305
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
304
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: FlexGridComponent, isStandalone: true, selector: "flex-grid", inputs: { enablePaging: { classPropertyName: "enablePaging", publicName: "enablePaging", isSignal: true, isRequired: false, transformFunction: null }, totalDataCount: { classPropertyName: "totalDataCount", publicName: "totalDataCount", isSignal: true, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, emptyRecordTemplate: { classPropertyName: "emptyRecordTemplate", publicName: "emptyRecordTemplate", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { rowClicked: "rowClicked", rowDblClicked: "rowDblClicked", pageChange: "pageChange" }, queries: [{ propertyName: "gridColumns", first: true, predicate: FlexColumnsComponent, descendants: true }], viewQueries: [{ propertyName: "gridHeader", first: true, predicate: ["gridHeader"], descendants: true }, { propertyName: "gridBody", first: true, predicate: ["gridBody"], descendants: true }], ngImport: i0, template: "<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>", styles: [":host{display:block;height:100%}.grid-container{display:flex;flex-direction:column;height:100%}.grid-scroll{flex:1 1 auto;overflow:auto}.grid-footer{flex:0 0 auto;padding:.3rem;background:#f8f9fa;border-top:1px solid #dee2e6}.grid-container-sub{display:flex;flex-direction:column;height:100%}.grid-header{flex:0 0 auto;overflow-x:hidden;background-color:#f9f9f9;padding-right:15px;padding-left:0}.grid-body{flex:1 1 auto;overflow-y:scroll;overflow-x:auto}.grid-table{table-layout:fixed;width:100%}.grid-table th,.grid-table td{box-sizing:border-box}.selected{background-color:#dbeafe!important}:host-context([dir=\"rtl\"]) .grid-header{padding-left:15px;padding-right:0}.header-table{--bs-table-bg: #f9f9f9}.car-table{--bs-table-bg: #eefbe5}.contract-table{--bs-table-bg: #f9efe0}.table-active{--bs-table-active-bg: #87c8f7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FlexPaginationComponent, selector: "flex-pagination", inputs: ["rowCount"], outputs: ["pageChange"] }] });
|
|
306
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: FlexGridComponent, isStandalone: true, selector: "flex-grid", inputs: { enablePaging: { classPropertyName: "enablePaging", publicName: "enablePaging", isSignal: true, isRequired: false, transformFunction: null }, totalDataCount: { classPropertyName: "totalDataCount", publicName: "totalDataCount", isSignal: true, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, emptyRecordTemplate: { classPropertyName: "emptyRecordTemplate", publicName: "emptyRecordTemplate", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { rowClicked: "rowClicked", rowDblClicked: "rowDblClicked", pageChange: "pageChange" }, queries: [{ propertyName: "gridColumns", first: true, predicate: FlexColumnsComponent, descendants: true }], viewQueries: [{ propertyName: "gridHeader", first: true, predicate: ["gridHeader"], descendants: true }, { propertyName: "gridBody", first: true, predicate: ["gridBody"], descendants: true }], ngImport: i0, template: "<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>", styles: [":host{display:block;height:100%}.grid-container{display:flex;flex-direction:column;height:100%}.grid-scroll{flex:1 1 auto;overflow:auto}.grid-footer{flex:0 0 auto;padding:.3rem;background:#f8f9fa;border-top:1px solid #dee2e6}.grid-container-sub{display:flex;flex-direction:column;height:100%}.grid-header{flex:0 0 auto;overflow-x:hidden;background-color:#f9f9f9;padding-right:15px;padding-left:0}.grid-body{flex:1 1 auto;overflow-y:scroll;overflow-x:auto}.grid-table{table-layout:fixed;width:100%}.grid-table th,.grid-table td{box-sizing:border-box}.selected{background-color:#dbeafe!important}:host-context([dir=\"rtl\"]) .grid-header{padding-left:15px;padding-right:0}.header-table{--bs-table-bg: #f9f9f9}.car-table{--bs-table-bg: #eefbe5}.contract-table{--bs-table-bg: #f9efe0}.table-active{--bs-table-active-bg: #87c8f7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FlexPaginationComponent, selector: "flex-pagination", inputs: ["rowCount", "pageSize"], outputs: ["pageChange"] }] });
|
|
305
307
|
}
|
|
306
308
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexGridComponent, decorators: [{
|
|
307
309
|
type: Component,
|
|
@@ -1610,25 +1612,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
1610
1612
|
}] } });
|
|
1611
1613
|
|
|
1612
1614
|
class FlexTablePagingComponent {
|
|
1613
|
-
pageIndex = 1;
|
|
1614
|
-
|
|
1615
|
-
|
|
1615
|
+
pageIndex = 1;
|
|
1616
|
+
pageIndexChange = new EventEmitter();
|
|
1617
|
+
pageSize = 10;
|
|
1618
|
+
pageSizeChange = new EventEmitter();
|
|
1619
|
+
totalCount = 0;
|
|
1616
1620
|
pageSizes = [10, 50, 100, 200, 400, 800];
|
|
1617
1621
|
showTotalCount = input(false, ...(ngDevMode ? [{ debugName: "showTotalCount" }] : []));
|
|
1618
|
-
// @Output() pageIndexChange = new EventEmitter<number>();
|
|
1619
|
-
// @Output() pageSizeChange = new EventEmitter<number>();
|
|
1620
1622
|
pageChange = output();
|
|
1621
1623
|
// detect external changes
|
|
1622
1624
|
ngOnChanges(changes) {
|
|
1623
1625
|
if (changes['totalCount'] && !changes['totalCount'].firstChange) {
|
|
1624
1626
|
// Reset to page 1 if totalCount decreased or changed
|
|
1625
1627
|
this.pageIndex = 1;
|
|
1626
|
-
// var d = {
|
|
1627
|
-
// skip: (this.pageIndex - 1) * this.pageSize,
|
|
1628
|
-
// take: this.pageSize
|
|
1629
|
-
// };
|
|
1630
|
-
// this.pageChange.emit(d);
|
|
1631
|
-
//this.pageIndexChange.emit(1);
|
|
1632
1628
|
}
|
|
1633
1629
|
}
|
|
1634
1630
|
get totalPages() {
|
|
@@ -1638,42 +1634,35 @@ class FlexTablePagingComponent {
|
|
|
1638
1634
|
return Array.from({ length: this.totalPages }, (_, i) => i + 1);
|
|
1639
1635
|
}
|
|
1640
1636
|
onPageChange(e) {
|
|
1641
|
-
this.pageIndex = Number(e
|
|
1642
|
-
|
|
1643
|
-
console.log(this.pageIndex, this.pageSize);
|
|
1644
|
-
var d = {
|
|
1637
|
+
this.pageIndex = Number(e);
|
|
1638
|
+
this.pageChange.emit({
|
|
1645
1639
|
skip: (this.pageIndex - 1) * this.pageSize,
|
|
1646
1640
|
take: this.pageSize
|
|
1647
|
-
};
|
|
1648
|
-
console.log(d);
|
|
1649
|
-
this.pageChange.emit(d);
|
|
1641
|
+
});
|
|
1650
1642
|
}
|
|
1651
1643
|
onPageSizeChange(e) {
|
|
1652
|
-
console.log(e.target.value);
|
|
1653
1644
|
this.pageIndex = 1;
|
|
1654
|
-
this.pageSize = Number(e
|
|
1655
|
-
|
|
1656
|
-
|
|
1645
|
+
this.pageSize = Number(e);
|
|
1646
|
+
this.pageSizeChange.emit(Number(e));
|
|
1647
|
+
this.pageChange.emit({
|
|
1657
1648
|
skip: (this.pageIndex - 1) * this.pageSize,
|
|
1658
1649
|
take: this.pageSize
|
|
1659
|
-
};
|
|
1660
|
-
console.log(d);
|
|
1661
|
-
this.pageChange.emit(d);
|
|
1662
|
-
// this.pageSizeChange.emit(this.pageSize);
|
|
1663
|
-
// // reset to page 1 when size changes
|
|
1664
|
-
// this.pageIndex = 1;
|
|
1665
|
-
// this.pageIndexChange.emit(this.pageIndex);
|
|
1650
|
+
});
|
|
1666
1651
|
}
|
|
1667
1652
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexTablePagingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1668
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: FlexTablePagingComponent, isStandalone: true, selector: "flex-table-paging", inputs: { pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: false, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, totalCount: { classPropertyName: "totalCount", publicName: "totalCount", isSignal: false, isRequired: false, transformFunction: null }, pageSizes: { classPropertyName: "pageSizes", publicName: "pageSizes", isSignal: false, isRequired: false, transformFunction: null }, showTotalCount: { classPropertyName: "showTotalCount", publicName: "showTotalCount", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"border-top\">\r\n <div class=\"d-flex align-items-center gap-2 p-2 small\">\r\n <div>{{ \"page-no\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageIndex\" (
|
|
1653
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: FlexTablePagingComponent, isStandalone: true, selector: "flex-table-paging", inputs: { pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: false, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, totalCount: { classPropertyName: "totalCount", publicName: "totalCount", isSignal: false, isRequired: false, transformFunction: null }, pageSizes: { classPropertyName: "pageSizes", publicName: "pageSizes", isSignal: false, isRequired: false, transformFunction: null }, showTotalCount: { classPropertyName: "showTotalCount", publicName: "showTotalCount", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageIndexChange: "pageIndexChange", pageSizeChange: "pageSizeChange", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"border-top\">\r\n <div class=\"d-flex align-items-center gap-2 p-2 small\">\r\n <div>{{ \"page-no\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageIndex\" (ngModelChange)=\"onPageChange($event)\">\r\n @for (p of pages; track $index) {\r\n <option [value]=\"p\">{{ p }}</option>\r\n }\r\n </select>\r\n <div>{{ \"page-size\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageSize\" (ngModelChange)=\"onPageSizeChange($event)\">\r\n @for (size of pageSizes; track $index) {\r\n <option [value]=\"size\">{{ size }}</option>\r\n }\r\n </select>\r\n @if(showTotalCount()){\r\n <div class=\"ms-auto\">\r\n {{ \"total-count\" | translate }}: <strong>{{ totalCount }}</strong>\r\n </div>\r\n }\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
1669
1654
|
}
|
|
1670
1655
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexTablePagingComponent, decorators: [{
|
|
1671
1656
|
type: Component,
|
|
1672
|
-
args: [{ selector: 'flex-table-paging', imports: [CommonModule, FormsModule, TranslateModule], template: "<div class=\"border-top\">\r\n <div class=\"d-flex align-items-center gap-2 p-2 small\">\r\n <div>{{ \"page-no\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageIndex\" (
|
|
1657
|
+
args: [{ selector: 'flex-table-paging', imports: [CommonModule, FormsModule, TranslateModule], template: "<div class=\"border-top\">\r\n <div class=\"d-flex align-items-center gap-2 p-2 small\">\r\n <div>{{ \"page-no\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageIndex\" (ngModelChange)=\"onPageChange($event)\">\r\n @for (p of pages; track $index) {\r\n <option [value]=\"p\">{{ p }}</option>\r\n }\r\n </select>\r\n <div>{{ \"page-size\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageSize\" (ngModelChange)=\"onPageSizeChange($event)\">\r\n @for (size of pageSizes; track $index) {\r\n <option [value]=\"size\">{{ size }}</option>\r\n }\r\n </select>\r\n @if(showTotalCount()){\r\n <div class=\"ms-auto\">\r\n {{ \"total-count\" | translate }}: <strong>{{ totalCount }}</strong>\r\n </div>\r\n }\r\n </div>\r\n</div>" }]
|
|
1673
1658
|
}], propDecorators: { pageIndex: [{
|
|
1674
1659
|
type: Input
|
|
1660
|
+
}], pageIndexChange: [{
|
|
1661
|
+
type: Output
|
|
1675
1662
|
}], pageSize: [{
|
|
1676
1663
|
type: Input
|
|
1664
|
+
}], pageSizeChange: [{
|
|
1665
|
+
type: Output
|
|
1677
1666
|
}], totalCount: [{
|
|
1678
1667
|
type: Input
|
|
1679
1668
|
}], pageSizes: [{
|
|
@@ -1689,8 +1678,12 @@ class FlexTableComponent {
|
|
|
1689
1678
|
sorts = [];
|
|
1690
1679
|
changeRequest = output();
|
|
1691
1680
|
pageChange = output();
|
|
1692
|
-
|
|
1693
|
-
|
|
1681
|
+
/**
|
|
1682
|
+
* Paging
|
|
1683
|
+
*/
|
|
1684
|
+
pageIndex = 1; // current page
|
|
1685
|
+
pageSize = 10; // selected page size
|
|
1686
|
+
pageSizes = [10, 50, 100, 200, 400, 800];
|
|
1694
1687
|
selectedIndex = -1;
|
|
1695
1688
|
gridColumns;
|
|
1696
1689
|
tableHeader;
|
|
@@ -1714,21 +1707,23 @@ class FlexTableComponent {
|
|
|
1714
1707
|
// console.log(index);
|
|
1715
1708
|
this.rowClicked.emit({ index: index, data: data });
|
|
1716
1709
|
}
|
|
1717
|
-
skip = 0;
|
|
1718
|
-
take = 0;
|
|
1719
1710
|
onPageChange($event) {
|
|
1720
|
-
this.
|
|
1721
|
-
|
|
1711
|
+
if (this.changeRequest) {
|
|
1712
|
+
this.changeRequest.emit({
|
|
1713
|
+
skip: (this.pageIndex - 1) * this.pageSize, take: this.pageSize, sorts: [...this.sorts]
|
|
1714
|
+
});
|
|
1715
|
+
return;
|
|
1716
|
+
}
|
|
1722
1717
|
this.pageChange.emit({ skip: $event.skip, take: $event.take });
|
|
1723
1718
|
}
|
|
1724
1719
|
onSort(col, event) {
|
|
1725
1720
|
if (!col.enableSort)
|
|
1726
1721
|
return;
|
|
1727
|
-
const existingIndex = this.sorts.findIndex(s => s.field === col.
|
|
1722
|
+
const existingIndex = this.sorts.findIndex(s => s.field === col.sortField);
|
|
1728
1723
|
if (existingIndex === -1) {
|
|
1729
1724
|
// add ASC
|
|
1730
1725
|
this.sorts.push({
|
|
1731
|
-
field: col.
|
|
1726
|
+
field: col.sortField,
|
|
1732
1727
|
direction: 'asc',
|
|
1733
1728
|
});
|
|
1734
1729
|
}
|
|
@@ -1742,20 +1737,27 @@ class FlexTableComponent {
|
|
|
1742
1737
|
this.sorts.splice(existingIndex, 1);
|
|
1743
1738
|
}
|
|
1744
1739
|
}
|
|
1740
|
+
//console.log("ok");
|
|
1745
1741
|
this.changeRequest.emit({
|
|
1746
|
-
skip: this.
|
|
1742
|
+
skip: (this.pageIndex - 1) * this.pageSize, take: this.pageSize, sorts: [...this.sorts]
|
|
1747
1743
|
});
|
|
1748
1744
|
}
|
|
1749
1745
|
getSort(field) {
|
|
1750
1746
|
return this.sorts.find(s => s.field === field);
|
|
1751
1747
|
}
|
|
1752
1748
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1753
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: FlexTableComponent, isStandalone: true, selector: "flex-table", inputs: { enablePaging: { classPropertyName: "enablePaging", publicName: "enablePaging", isSignal: true, isRequired: false, transformFunction: null }, totalDataCount: { classPropertyName: "totalDataCount", publicName: "totalDataCount", isSignal: true, isRequired: false, transformFunction: null }, showTotalDataCount: { classPropertyName: "showTotalDataCount", publicName: "showTotalDataCount", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changeRequest: "changeRequest", pageChange: "pageChange", rowClicked: "rowClicked", rowDblClicked: "rowDblClicked" }, queries: [{ propertyName: "gridColumns", first: true, predicate: FlexColumnsComponent, descendants: true }], viewQueries: [{ propertyName: "tableHeader", first: true, predicate: ["tableHeader"], descendants: true }], ngImport: i0, template: "<div class=\"table-layout\">\r\n <div class=\" table-header\" #tableHeader>\r\n <table class=\"grid-table table table-bordered mb-0\">\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 }\r\n <col style=\"width: auto; min-width: 0;\">\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\" (click)=\"onSort(col, $event)\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n {{ col.headerText() }}\r\n }\r\n\r\n @if(col.enableSort && col.sortField){\r\n\r\n @if(getSort(col.sortField!); as sort){\r\n @if(sort.direction == \"asc\"){\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-down\"></i></span>\r\n }\r\n @else {\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-up\"></i></span>\r\n }\r\n\r\n }\r\n @else{\r\n <span><i class=\"bi bi-arrow-down-up\"></i></span>\r\n }\r\n\r\n\r\n }\r\n </th>\r\n }\r\n <td></td>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"content-area\" (scroll)=\"syncScroll($event)\">\r\n <table class=\"grid-table table table-bordered\" [ngClass]=\"tableClass()\">\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 <col style=\"width: auto; min-width: 0;\">\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 class=\"text-wrap text-break\">\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row,\r\n rowIndex: (
|
|
1749
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: FlexTableComponent, isStandalone: true, selector: "flex-table", inputs: { enablePaging: { classPropertyName: "enablePaging", publicName: "enablePaging", isSignal: true, isRequired: false, transformFunction: null }, totalDataCount: { classPropertyName: "totalDataCount", publicName: "totalDataCount", isSignal: true, isRequired: false, transformFunction: null }, showTotalDataCount: { classPropertyName: "showTotalDataCount", publicName: "showTotalDataCount", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: false, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, pageSizes: { classPropertyName: "pageSizes", publicName: "pageSizes", isSignal: false, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changeRequest: "changeRequest", pageChange: "pageChange", rowClicked: "rowClicked", rowDblClicked: "rowDblClicked" }, queries: [{ propertyName: "gridColumns", first: true, predicate: FlexColumnsComponent, descendants: true }], viewQueries: [{ propertyName: "tableHeader", first: true, predicate: ["tableHeader"], descendants: true }], ngImport: i0, template: "<div class=\"table-layout\">\r\n <div class=\" table-header\" #tableHeader>\r\n <table class=\"grid-table table table-bordered mb-0\">\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 }\r\n <col style=\"width: auto; min-width: 0;\">\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\" (click)=\"onSort(col, $event)\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n {{ col.headerText() }}\r\n }\r\n\r\n @if(col.enableSort && col.sortField){\r\n\r\n @if(getSort(col.sortField!); as sort){\r\n @if(sort.direction == \"asc\"){\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-down\"></i></span>\r\n }\r\n @else {\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-up\"></i></span>\r\n }\r\n\r\n }\r\n @else{\r\n <span><i class=\"bi bi-arrow-down-up\"></i></span>\r\n }\r\n\r\n\r\n }\r\n </th>\r\n }\r\n <td></td>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"content-area\" (scroll)=\"syncScroll($event)\">\r\n <table class=\"grid-table table table-bordered\" [ngClass]=\"tableClass()\">\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 <col style=\"width: auto; min-width: 0;\">\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 class=\"text-wrap text-break\">\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row,\r\n rowIndex: (pageIndex - 1) * pageSize + i,\r\n localIndex: i }\">\r\n </ng-container>\r\n } @else {\r\n {{ row[col.field] }}\r\n }\r\n </td>\r\n\r\n }<td></td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(enablePaging()){\r\n <flex-table-paging [totalCount]=\"totalDataCount()\" (pageChange)=\"onPageChange($event)\"\r\n [showTotalCount]=\"showTotalDataCount()\" [(pageIndex)]=\"pageIndex\" [(pageSize)]=\"pageSize\"\r\n [pageSizes]=\"pageSizes\"></flex-table-paging>\r\n }\r\n\r\n</div>", styles: [":host{display:block;height:100%;min-height:0;background:var(--bg);color:var(--text)}.table-layout{display:grid;grid-template-rows:auto 1fr auto;height:100%;min-height:0}.content-area{overflow-x:auto;overflow-y:scroll;min-height:0;background:var(--scroll-bg)}table{border-collapse:collapse;white-space:nowrap;min-width:max-content}.table-header{overflow-x:hidden;--bs-table-bg: #f9f9f9;padding-inline-end:15px;padding-inline-start:0}.grid-table{table-layout:fixed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FlexTablePagingComponent, selector: "flex-table-paging", inputs: ["pageIndex", "pageSize", "totalCount", "pageSizes", "showTotalCount"], outputs: ["pageIndexChange", "pageSizeChange", "pageChange"] }, { kind: "ngmodule", type: TranslateModule }] });
|
|
1754
1750
|
}
|
|
1755
1751
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexTableComponent, decorators: [{
|
|
1756
1752
|
type: Component,
|
|
1757
|
-
args: [{ selector: 'flex-table', imports: [CommonModule, FlexTablePagingComponent, TranslateModule], template: "<div class=\"table-layout\">\r\n <div class=\" table-header\" #tableHeader>\r\n <table class=\"grid-table table table-bordered mb-0\">\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 }\r\n <col style=\"width: auto; min-width: 0;\">\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\" (click)=\"onSort(col, $event)\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n {{ col.headerText() }}\r\n }\r\n\r\n @if(col.enableSort && col.sortField){\r\n\r\n @if(getSort(col.sortField!); as sort){\r\n @if(sort.direction == \"asc\"){\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-down\"></i></span>\r\n }\r\n @else {\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-up\"></i></span>\r\n }\r\n\r\n }\r\n @else{\r\n <span><i class=\"bi bi-arrow-down-up\"></i></span>\r\n }\r\n\r\n\r\n }\r\n </th>\r\n }\r\n <td></td>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"content-area\" (scroll)=\"syncScroll($event)\">\r\n <table class=\"grid-table table table-bordered\" [ngClass]=\"tableClass()\">\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 <col style=\"width: auto; min-width: 0;\">\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 class=\"text-wrap text-break\">\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row,\r\n rowIndex: (
|
|
1758
|
-
}], propDecorators: {
|
|
1753
|
+
args: [{ selector: 'flex-table', imports: [CommonModule, FlexTablePagingComponent, TranslateModule], template: "<div class=\"table-layout\">\r\n <div class=\" table-header\" #tableHeader>\r\n <table class=\"grid-table table table-bordered mb-0\">\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 }\r\n <col style=\"width: auto; min-width: 0;\">\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\" (click)=\"onSort(col, $event)\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n {{ col.headerText() }}\r\n }\r\n\r\n @if(col.enableSort && col.sortField){\r\n\r\n @if(getSort(col.sortField!); as sort){\r\n @if(sort.direction == \"asc\"){\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-down\"></i></span>\r\n }\r\n @else {\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-up\"></i></span>\r\n }\r\n\r\n }\r\n @else{\r\n <span><i class=\"bi bi-arrow-down-up\"></i></span>\r\n }\r\n\r\n\r\n }\r\n </th>\r\n }\r\n <td></td>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"content-area\" (scroll)=\"syncScroll($event)\">\r\n <table class=\"grid-table table table-bordered\" [ngClass]=\"tableClass()\">\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 <col style=\"width: auto; min-width: 0;\">\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 class=\"text-wrap text-break\">\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row,\r\n rowIndex: (pageIndex - 1) * pageSize + i,\r\n localIndex: i }\">\r\n </ng-container>\r\n } @else {\r\n {{ row[col.field] }}\r\n }\r\n </td>\r\n\r\n }<td></td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(enablePaging()){\r\n <flex-table-paging [totalCount]=\"totalDataCount()\" (pageChange)=\"onPageChange($event)\"\r\n [showTotalCount]=\"showTotalDataCount()\" [(pageIndex)]=\"pageIndex\" [(pageSize)]=\"pageSize\"\r\n [pageSizes]=\"pageSizes\"></flex-table-paging>\r\n }\r\n\r\n</div>", styles: [":host{display:block;height:100%;min-height:0;background:var(--bg);color:var(--text)}.table-layout{display:grid;grid-template-rows:auto 1fr auto;height:100%;min-height:0}.content-area{overflow-x:auto;overflow-y:scroll;min-height:0;background:var(--scroll-bg)}table{border-collapse:collapse;white-space:nowrap;min-width:max-content}.table-header{overflow-x:hidden;--bs-table-bg: #f9f9f9;padding-inline-end:15px;padding-inline-start:0}.grid-table{table-layout:fixed}\n"] }]
|
|
1754
|
+
}], propDecorators: { pageIndex: [{
|
|
1755
|
+
type: Input
|
|
1756
|
+
}], pageSize: [{
|
|
1757
|
+
type: Input
|
|
1758
|
+
}], pageSizes: [{
|
|
1759
|
+
type: Input
|
|
1760
|
+
}], gridColumns: [{
|
|
1759
1761
|
type: ContentChild,
|
|
1760
1762
|
args: [FlexColumnsComponent]
|
|
1761
1763
|
}], tableHeader: [{
|
|
@@ -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/lib/flex-combo-datepicker/flex-combo-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-combo-datepicker/flex-combo-datepicker.component.html","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-calendar/hijri-calendar.component.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-calendar/hijri-calendar.component.html","../../../projects/flex-ui-controls/src/lib/services/date-service.service.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.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/lib/flex-dual-calendar/flex-dual-calender-data.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-calendar/flex-dual-calendar.component.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-calendar/flex-dual-calendar.component.html","../../../projects/flex-ui-controls/src/lib/services/device-detector.service.ts","../../../projects/flex-ui-controls/src/lib/services/floating-ui.service.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-datepicker/flex-dual-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-datepicker/flex-dual-datepicker.component.html","../../../projects/flex-ui-controls/src/lib/flex-table-paging/flex-table-paging.component.ts","../../../projects/flex-ui-controls/src/lib/flex-table-paging/flex-table-paging.component.html","../../../projects/flex-ui-controls/src/lib/flex-table/flex-table.component.ts","../../../projects/flex-ui-controls/src/lib/flex-table/flex-table.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 @Input() enableSort = false;\r\n @Input() sortField: string | undefined;\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 { Component, Input, Output, EventEmitter, OnInit, model, effect, input, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\ninterface DateOption {\r\n value: number | '';\r\n name: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'flex-combo-datepicker',\r\n imports: [FormsModule, CommonModule],\r\n templateUrl: './flex-combo-datepicker.component.html',\r\n styleUrls: ['./flex-combo-datepicker.component.css']\r\n})\r\n\r\nexport class ComboDatePickerComponent implements OnInit {\r\n // @Input() value: any = null; // ISO string\r\n @Input() ngMinDate?: string; // ISO string\r\n @Input() ngMaxDate?: string;\r\n @Input() ngMonths?: string[]; // optional month names\r\n @Input() ngOrder: 'dmy' | 'mdy' | 'ymd' = 'dmy';\r\n @Input() ngDisabled: boolean = false;\r\n @Input() ngPlaceholder: string | string[] = 'Day,Month,Year';\r\n\r\n dateChanged = output<any>();\r\n\r\n disabled = input<boolean>(false);\r\n\r\n value = model<any>();\r\n _value: any;\r\n\r\n day: number | '' = '';\r\n month: number | '' = '';\r\n year: number | '' = '';\r\n\r\n dates: DateOption[] = [];\r\n months: DateOption[] = [];\r\n years: DateOption[] = [];\r\n\r\n placeHolders: DateOption[] = [];\r\n\r\n cssClass = input<string>();\r\n\r\n showHeader = input<boolean>(true);\r\n dateTitle = input<string>();\r\n monthTitle = input<string>();\r\n yearTitle = input<string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n this._value = this.value();\r\n this.initModel();\r\n this.updateDates();\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n this.initPlaceholders();\r\n this.initMonths();\r\n this.initYears();\r\n // this.initModel();\r\n // this.updateDates();\r\n }\r\n\r\n private initPlaceholders() {\r\n let holders = Array.isArray(this.ngPlaceholder) ? this.ngPlaceholder : this.ngPlaceholder.split(',');\r\n if (holders.length === 3) {\r\n this.placeHolders = holders.map(h => ({ value: '', name: h, disabled: false }));\r\n }\r\n }\r\n\r\n private initMonths() {\r\n const monthNames = this.ngMonths && this.ngMonths.length === 12 ? this.ngMonths : ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];\r\n this.months = monthNames.map((name, i) => ({ value: i + 1, name }));\r\n if (this.placeHolders.length) this.months.unshift(this.placeHolders[1]);\r\n }\r\n\r\n private initYears() {\r\n const currentYear = new Date().getFullYear();\r\n const minYear = this.ngMinDate ? new Date(this.ngMinDate).getFullYear() : currentYear - 100;\r\n const maxYear = this.ngMaxDate ? new Date(this.ngMaxDate).getFullYear() : currentYear;\r\n this.years = [];\r\n for (let y = minYear; y <= maxYear; y++) {\r\n this.years.push({ value: y, name: y.toString() });\r\n }\r\n if (this.placeHolders.length) this.years.unshift(this.placeHolders[2]);\r\n }\r\n\r\n private initModel() {\r\n if (this.value) {\r\n const date = new Date(this.value());\r\n this.day = date.getDate();\r\n this.month = date.getMonth() + 1;\r\n this.year = date.getFullYear();\r\n }\r\n }\r\n\r\n private updateDates() {\r\n const max = this.month && this.year ? this.getMaxDate(this.month, this.year) : 31;\r\n this.dates = [];\r\n if (this.placeHolders.length) this.dates.push(this.placeHolders[0]);\r\n for (let i = 1; i <= max; i++) {\r\n this.dates.push({ value: i, name: i.toString() });\r\n }\r\n }\r\n\r\n private getMaxDate(month: number, year: number) {\r\n if ([4, 6, 9, 11].includes(month)) return 30;\r\n if (month === 2) return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0) ? 29 : 28;\r\n return 31;\r\n }\r\n\r\n onChange() {\r\n this.updateDates();\r\n if (this.day && this.month && this.year) {\r\n const iso = this.toLocalISOString(new Date(this.year, this.month - 1, this.day));\r\n this.value.set(iso);\r\n this.dateChanged.emit(iso);\r\n }\r\n }\r\n\r\n toLocalISOString(date: Date): string {\r\n const pad = (n: number) => n.toString().padStart(2, '0');\r\n\r\n const year = date.getFullYear();\r\n const month = pad(date.getMonth() + 1);\r\n const day = pad(date.getDate());\r\n const hours = pad(date.getHours());\r\n const minutes = pad(date.getMinutes());\r\n const seconds = pad(date.getSeconds());\r\n //const ms = date.getMilliseconds().toString().padStart(3, '0');\r\n\r\n //return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${ms}`;\r\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\r\n }\r\n}\r\n","<div class=\"row g-1\">\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (dateTitle()) {\r\n {{ dateTitle() }}\r\n }\r\n @else {\r\n Date\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"day\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select ' + cssClass()\">\r\n <option *ngFor=\"let d of dates\" [value]=\"d.value\">{{ d.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (monthTitle()) {\r\n {{ monthTitle() }}\r\n }\r\n @else {\r\n Month\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"month\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select ' + cssClass()\">\r\n <option *ngFor=\"let m of months\" [value]=\"m.value\">{{ m.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (yearTitle()) {\r\n {{ yearTitle() }}\r\n }\r\n @else {\r\n Year\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"year\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select year ' + cssClass()\">\r\n <option *ngFor=\"let y of years\" [value]=\"y.value\">{{ y.name }}</option>\r\n </select>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport type HijriDate = { hy: number; hm: number; hd: number };\r\ntype DayCell = {\r\n g: Date;\r\n h: HijriDate;\r\n inCurrentMonth: boolean;\r\n disabled: boolean;\r\n};\r\n\r\n//\r\n// ✅ Umm al-Qura Hijri calendar with Latin digits\r\n//\r\nconst hijriFmt = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura-nu-latn', {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric'\r\n});\r\n\r\nconst hijriMonthNamesEn = [\r\n 'Muharram', 'Safar', 'Rabi I', 'Rabi II',\r\n 'Jumada I', 'Jumada II', 'Rajab', 'Sha’ban',\r\n 'Ramadan', 'Shawwal', 'Dhu al-Qi’dah', 'Dhu al-Hijjah'\r\n];\r\n\r\nconst hijriMonthNamesAr = [\r\n 'محرم', 'صفر', 'ربيع الأول', 'ربيع الآخر',\r\n 'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان',\r\n 'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة'\r\n];\r\n\r\nconst weekDaysEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\nconst weekDaysAr = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\r\n\r\nfunction hijriFromGregorian(g: Date): HijriDate {\r\n const parts = hijriFmt.formatToParts(g);\r\n //console.log(parts);\r\n const map: Record<string, string> = {};\r\n for (const p of parts) map[p.type] = p.value;\r\n const n = (k: string) => parseInt(map[k] ?? '0', 10);\r\n return { hy: n('year'), hm: n('month'), hd: n('day') };\r\n}\r\n\r\nfunction compareHijri(a: HijriDate, b: HijriDate) {\r\n if (a.hy !== b.hy) return a.hy - b.hy;\r\n if (a.hm !== b.hm) return a.hm - b.hm;\r\n return a.hd - b.hd;\r\n}\r\n\r\nfunction findGregorianForHijri(target: HijriDate): Date {\r\n let lo = new Date(1937, 0, 1).getTime();\r\n let hi = new Date(2076, 11, 31).getTime();\r\n const dayMs = 86400000;\r\n\r\n while (lo <= hi) {\r\n const mid = Math.floor((lo + hi) / 2);\r\n const h = hijriFromGregorian(new Date(mid));\r\n compareHijri(h, target) < 0 ? (lo = mid + dayMs) : (hi = mid - dayMs);\r\n }\r\n\r\n let d = new Date(lo);\r\n while (true) {\r\n const h = hijriFromGregorian(d);\r\n const cmp = compareHijri(h, target);\r\n if (cmp === 0) return d;\r\n if (cmp > 0) throw new Error('Hijri date out of supported range');\r\n d = new Date(d.getTime() + dayMs);\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'app-hijri-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: \"./hijri-calendar.component.html\",\r\n styleUrl: \"./hijri-calendar.component.css\"\r\n})\r\n\r\nexport class HijriCalendarComponent {\r\n /** Two-way bound selected date (Gregorian Date) */\r\n @Input() value: Date | null = null;\r\n @Output() valueChange = new EventEmitter<Date>();\r\n\r\n /** Optional min/max restrictions (Gregorian dates) */\r\n @Input() minDate: Date | null = null;\r\n @Input() maxDate: Date | null = null;\r\n\r\n /** Month + weekday language: 'en' or 'ar' */\r\n @Input() monthLang: 'en' | 'ar' = 'ar';\r\n\r\n hy = signal<number>(0);\r\n hm = signal<number>(0);\r\n\r\n selectedMonth = 1;\r\n selectedYear = 1447;\r\n yearRange: number[] = [];\r\n\r\n get hijriMonthsEn() {\r\n return hijriMonthNamesEn;\r\n }\r\n\r\n get hijriMonthsAr() {\r\n return hijriMonthNamesAr;\r\n }\r\n\r\n get hijriMonths() {\r\n return this.monthLang === 'ar' ? hijriMonthNamesAr : hijriMonthNamesEn;\r\n }\r\n\r\n get weekDays() {\r\n return this.monthLang === 'ar' ? weekDaysAr : weekDaysEn;\r\n }\r\n\r\n get weekDaysEn() {\r\n return weekDaysEn;\r\n }\r\n\r\n get weekDaysAr() {\r\n return weekDaysAr;\r\n }\r\n\r\n get currentMonthName() {\r\n return this.hijriMonths[this.selectedMonth - 1];\r\n }\r\n\r\n constructor() {\r\n const h = hijriFromGregorian(new Date());\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.selectedYear = h.hy;\r\n this.selectedMonth = h.hm;\r\n }\r\n\r\n ngOnInit() {\r\n this.buildYearRange();\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.value) {\r\n const h = hijriFromGregorian(this.value);\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.selectedYear = h.hy;\r\n this.selectedMonth = h.hm;\r\n }\r\n this.buildYearRange();\r\n }\r\n\r\n buildYearRange() {\r\n const minH = this.minDate ? hijriFromGregorian(this.minDate) : { hy: 1356, hm: 1, hd: 1 };\r\n const maxH = this.maxDate ? hijriFromGregorian(this.maxDate) : { hy: 1499, hm: 12, hd: 30 };\r\n this.yearRange = [];\r\n for (let y = minH.hy; y <= maxH.hy; y++) {\r\n this.yearRange.push(y);\r\n }\r\n }\r\n\r\n onMonthYearChange() {\r\n this.hy.set(this.selectedYear);\r\n this.hm.set(this.selectedMonth);\r\n }\r\n\r\n firstOfMonth() {\r\n return findGregorianForHijri({ hy: this.hy(), hm: this.hm(), hd: 1 });\r\n }\r\n\r\n cells(): DayCell[] {\r\n const firstG = this.firstOfMonth();\r\n const firstH = hijriFromGregorian(firstG);\r\n\r\n const start = new Date(firstG);\r\n start.setDate(firstG.getDate() - firstG.getDay());\r\n\r\n const result: DayCell[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const g = new Date(start);\r\n g.setDate(start.getDate() + i);\r\n const h = hijriFromGregorian(g);\r\n\r\n let disabled = false;\r\n if (this.minDate && g < this.stripTime(this.minDate)) disabled = true;\r\n if (this.maxDate && g > this.stripTime(this.maxDate)) disabled = true;\r\n\r\n result.push({\r\n g,\r\n h,\r\n inCurrentMonth: h.hy === firstH.hy && h.hm === firstH.hm,\r\n disabled\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n prevMonth() {\r\n if (!this.canPrev()) return;\r\n let m = this.hm(), y = this.hy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y;\r\n this.selectedMonth = m;\r\n }\r\n\r\n nextMonth() {\r\n if (!this.canNext()) return;\r\n let m = this.hm(), y = this.hy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y;\r\n this.selectedMonth = m;\r\n }\r\n\r\n canPrev(): boolean {\r\n if (!this.minDate) return true;\r\n const minH = hijriFromGregorian(this.stripTime(this.minDate));\r\n return this.hy() > minH.hy || (this.hy() === minH.hy && this.hm() > minH.hm);\r\n }\r\n\r\n canNext(): boolean {\r\n if (!this.maxDate) return true;\r\n const maxH = hijriFromGregorian(this.stripTime(this.maxDate));\r\n return this.hy() < maxH.hy || (this.hy() === maxH.hy && this.hm() < maxH.hm);\r\n }\r\n\r\n isToday(g: Date) {\r\n const t = new Date();\r\n return g.getFullYear() === t.getFullYear()\r\n && g.getMonth() === t.getMonth()\r\n && g.getDate() === t.getDate();\r\n }\r\n\r\n isSelected(g: Date) {\r\n return !!this.value &&\r\n g.getFullYear() === this.value.getFullYear() &&\r\n g.getMonth() === this.value.getMonth() &&\r\n g.getDate() === this.value.getDate();\r\n }\r\n\r\n select(c: DayCell) {\r\n if (c.disabled) return;\r\n\r\n //console.log(c);\r\n\r\n this.value = c.g;\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n private stripTime(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n }\r\n}\r\n","<div class=\"card border-0 p-0\">\r\n <div class=\"card-header p-1\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <button class=\"btn btn-sm\" (click)=\"prevMonth()\" [disabled]=\"!canPrev()\">«</button>\r\n <div class=\"d-flex justify-content-center gap-1\">\r\n <select class=\"form-select form-select-sm w-auto\" [(ngModel)]=\"selectedMonth\"\r\n (change)=\"onMonthYearChange()\">\r\n @for (m of hijriMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{ hijriMonthsAr[$index] }} ({{ hijriMonthsEn[$index] }})</option>\r\n }\r\n </select>\r\n <select class=\"form-select form-select-sm w-auto\" [(ngModel)]=\"selectedYear\"\r\n (change)=\"onMonthYearChange()\">\r\n @for (y of yearRange; track y) {\r\n <option [value]=\"y\">{{ y }}</option>\r\n }\r\n </select>\r\n </div>\r\n <button class=\"btn btn-sm\" (click)=\"nextMonth()\" [disabled]=\"!canNext()\">»</button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-1\">\r\n\r\n\r\n <!-- month/year pickers -->\r\n\r\n\r\n <!-- weekday labels -->\r\n <div class=\"grid\">\r\n @for (w of weekDays; track $index) {\r\n <div class=\"col fw-bold border pb-1\">{{ w }}</div>\r\n }\r\n\r\n </div>\r\n\r\n <!-- calendar cells -->\r\n <div class=\"grid\">\r\n <button *ngFor=\"let c of cells()\" class=\"cell btn rounded-0\" [class.muted]=\"!c.inCurrentMonth\"\r\n [class.today]=\"isToday(c.g)\" [class.selected]=\"isSelected(c.g)\" [disabled]=\"c.disabled\"\r\n (click)=\"select(c)\">\r\n {{ c.h.hd }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport dayjs from 'dayjs';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\nimport utc from \"dayjs/plugin/utc\";\r\nimport { hijriToGregorian, gregorianToHijri } from \"@tabby_ai/hijri-converter\";\r\nimport { FlexDateModel } from '../core/models/flex-date';\r\n\r\ndayjs.extend(utc);\r\ndayjs.extend(customParseFormat);\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class DateServiceService {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n //month will start from 1\r\n convertToGregorian(date: FlexDateModel): FlexDateModel {\r\n var grego = hijriToGregorian(\r\n {\r\n day: date.day,\r\n month: date.month,\r\n year: date.year\r\n }\r\n )\r\n\r\n return {\r\n day: grego.day,\r\n month: grego.month,\r\n year: grego.year\r\n }\r\n }\r\n\r\n //month will start from 1\r\n convertToHijri(date: FlexDateModel): FlexDateModel {\r\n var hijri = gregorianToHijri(\r\n {\r\n day: date.day,\r\n month: date.month,\r\n year: date.year\r\n }\r\n )\r\n\r\n return {\r\n day: hijri.day,\r\n month: hijri.month,\r\n year: hijri.year\r\n }\r\n }\r\n\r\n parse(dateString: string, calendar: FlexCalendarSystem, format: string): Date | null | undefined {\r\n //Step 1: User will input gregorian or islamic(hijri) date. for this we will use customParseFormat\r\n //in the control we will specify the format using binding.\r\n var parsedUtcDate = dayjs.utc(dateString, format, true);\r\n if (!parsedUtcDate.isValid()) {\r\n return null;\r\n }\r\n\r\n if (calendar == \"islamic\") {\r\n var grego = hijriToGregorian(\r\n {\r\n day: parsedUtcDate.date() as number,\r\n month: parsedUtcDate.month() + 1,\r\n year: parsedUtcDate.year()\r\n }\r\n )\r\n\r\n parsedUtcDate = dayjs.utc(`${grego.year}-${grego.month}-${grego.day}`);\r\n }\r\n\r\n return parsedUtcDate.toDate();\r\n }\r\n\r\n format(date: Date, calendar: FlexCalendarSystem, format: string): string {\r\n var day = dayjs.utc(`${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`);\r\n\r\n if (calendar == \"islamic\") {\r\n var hijri = gregorianToHijri(\r\n {\r\n day: date.getDate(),\r\n month: date.getMonth() + 1,\r\n year: date.getFullYear()\r\n }\r\n );\r\n\r\n day = dayjs.utc(`${hijri.year}-${hijri.month}-${hijri.day}`);\r\n }\r\n\r\n return day.format(format);\r\n }\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, HostListener, input, model, OnInit, output, ViewChild } from '@angular/core';\r\nimport { HijriCalendarComponent } from \"../flex-hijri-calendar/hijri-calendar.component\";\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport dayjs from \"dayjs\";\r\nimport { FlexCalendarSystem } from '../../core/types/flex-calendar-system.type';\r\nimport { DateServiceService } from '../../services/date-service.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-hijri-datepicker',\r\n imports: [CommonModule, FormsModule, HijriCalendarComponent],\r\n templateUrl: './hijri-datepicker.component.html',\r\n styleUrl: './hijri-datepicker.component.css'\r\n})\r\n\r\nexport class HijriDatepickerComponent {\r\n value = model<any>();\r\n\r\n selectedDate?: Date;\r\n showCalendar: boolean = false;\r\n\r\n calender = input<FlexCalendarSystem>(\"gregory\");\r\n enabled = input<boolean>(true);\r\n cssClass = input<string>();\r\n format = input<string>(\"DD/MM/YYYY\");\r\n\r\n inputDate: string = \"\";\r\n isMobile = false;\r\n\r\n\r\n constructor(private dateService: DateServiceService) {\r\n\r\n\r\n\r\n effect(() => {\r\n const iso = this.value();\r\n if (iso) {\r\n const date = dayjs(iso);\r\n if (date.isValid()) {\r\n this.selectedDate = date.toDate();\r\n this.inputDate = this.formatDate(this.selectedDate, this.calender(), this.format());\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.selectedDate = undefined;\r\n this.inputDate = \"\";\r\n });\r\n }\r\n\r\n toggleCalendar() {\r\n this.showCalendar = !this.showCalendar;\r\n }\r\n\r\n onDateSelectedFromCalender(e: Date) {\r\n // console.log(\"onDateSelectedFromCalender: \", e);\r\n // this.dateService.log(e);\r\n //var time = this.selectedDate ?? new Date();\r\n\r\n // e.setHours(time.getHours());\r\n // e.setMinutes(time.getMinutes());\r\n\r\n //this.updateDate(e);\r\n //this.showCalendar = false;\r\n\r\n // console.log(e);\r\n }\r\n\r\n /** Triggered on blur OR Enter key */\r\n onManualDateEntered() {\r\n if (!this.inputDate) return;\r\n\r\n const parsed = this.parseInputDate(this.inputDate);\r\n if (parsed) {\r\n this.updateDate(parsed);\r\n } else {\r\n console.warn(\"Invalid date entered:\", this.inputDate);\r\n }\r\n }\r\n\r\n /** Reusable update method */\r\n private updateDate(d: Date) {\r\n this.selectedDate = d;\r\n //this.inputDate = this.formatDateForInput(d);\r\n this.value.set(d);\r\n //this.valueChange.emit(d);\r\n }\r\n\r\n formatDate(date: Date, calender: FlexCalendarSystem, format: string): string {\r\n return this.dateService.format(date, calender, format);\r\n }\r\n\r\n // private formatDateForInput(date: Date): string {\r\n // const fmt = this.format()?.toUpperCase() ?? \"DD/MM/YYYY\";\r\n // //return dayjs(date).format(fmt);\r\n // return this.formatDate(date, fmt);\r\n // }\r\n\r\n private parseInputDate(str: string): Date | null {\r\n\r\n const fmt = this.format()?.toUpperCase() ?? \"DD/MM/YYYY\";\r\n\r\n console.log(str, \"-\", fmt);\r\n\r\n const d = dayjs(str, fmt); // strict parse\r\n\r\n console.log(d.toDate());\r\n\r\n if (!d.isValid()) return null;\r\n\r\n\r\n\r\n if (!this.selectedDate) {\r\n this.selectedDate = new Date();\r\n }\r\n\r\n // gd.set(\"hour\", this.selectedDate.getHours());\r\n // gd.set(\"minute\", this.selectedDate.getMinutes());\r\n // gd.set(\"second\", this.selectedDate.getSeconds());\r\n\r\n return null;\r\n }\r\n\r\n\r\n @ViewChild(\"inputDiv\") inputDiv?: ElementRef;\r\n @ViewChild(\"modalDiv\") modalDiv?: ElementRef;\r\n @ViewChild(\"popupDiv\") popupDiv?: ElementRef;\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.inputDiv?.nativeElement.contains(event.target)\r\n || this.modalDiv?.nativeElement.contains(event.target)\r\n || this.popupDiv?.nativeElement.contains(event.target)) {\r\n return\r\n }\r\n this.showCalendar = false;\r\n }\r\n}\r\n","<div class=\"input-group flex-nowrap\" #inputDiv>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n</div>\r\n\r\n@if(showCalendar){\r\n@if(isMobile){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"showCalendar = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@else{\r\n<div class=\"dropdown-menu show\" #popupDiv>\r\n <app-hijri-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"></app-hijri-calendar>\r\n</div>\r\n}\r\n}","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 HostListener\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\r\n @HostListener('window:resize')\r\n onWindowResize() {\r\n this.resizeContent();\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 this.renderer.setStyle(this.contentHost.nativeElement, 'width', `${parent.clientWidth}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>","import { hijriToGregorian, gregorianToHijri } from \"@tabby_ai/hijri-converter\";\r\n\r\nexport const MinGregorianDate = new Date(1937, 0, 1).getTime();\r\nexport const MaxGregorianDate = new Date(2076, 11, 31).getTime();\r\n\r\nexport type HijriDate = { hy: number; hm: number; hd: number };\r\n\r\nexport type DayCell = {\r\n g: Date; // always Gregorian Date\r\n h: HijriDate; // mapped Hijri for display\r\n inCurrentMonth: boolean;\r\n disabled: boolean;\r\n};\r\n\r\n// ✅ Intl formatters\r\nexport const hijriFmt = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura-nu-latn', {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric'\r\n});\r\n\r\nexport const hijriMonthNamesEn = [\r\n 'Muharram', 'Safar', 'Rabi I', 'Rabi II',\r\n 'Jumada I', 'Jumada II', 'Rajab', 'Sha’ban',\r\n 'Ramadan', 'Shawwal', 'Dhu al-Qi’dah', 'Dhu al-Hijjah'\r\n];\r\n\r\nexport const hijriMonthNamesAr = [\r\n 'محرم', 'صفر', 'ربيع الأول', 'ربيع الآخر',\r\n 'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان',\r\n 'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة'\r\n];\r\n\r\nexport const gregMonthNamesEn = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n];\r\n\r\nexport const gregMonthNamesAr = [\r\n 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',\r\n 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'\r\n];\r\n\r\nexport const weekDaysEn = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\nexport const weekDaysAr = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\r\n\r\n\r\n\r\nexport function hijriFromGregorian(g: Date): HijriDate {\r\n // const parts = hijriFmt.formatToParts(g);\r\n // const map: Record<string, string> = {};\r\n // for (const p of parts) map[p.type] = p.value;\r\n // const n = (k: string) => parseInt(map[k] ?? '0', 10);\r\n // return { hy: n('year'), hm: n('month'), hd: n('day') };\r\n\r\n var hijri = gregorianToHijri(\r\n {\r\n day: g.getDate(),\r\n month: g.getMonth() + 1,\r\n year: g.getFullYear()\r\n }\r\n )\r\n return { hy: hijri.year, hm: hijri.month, hd: hijri.day };\r\n}\r\n\r\nexport function compareHijri(a: HijriDate, b: HijriDate) {\r\n if (a.hy !== b.hy) return a.hy - b.hy;\r\n if (a.hm !== b.hm) return a.hm - b.hm;\r\n return a.hd - b.hd;\r\n}\r\n\r\nexport function findGregorianForHijri(target: HijriDate): Date {\r\n // console.log(target);\r\n // console.log(\"findGregorianForHijri => \", target.hm, \"M\");\r\n\r\n // console.log(typeof target.hm);\r\n // console.log(typeof target.hy);\r\n\r\n var month = parseInt(target.hm.toString());\r\n //var year = parseInt(target.hy.toString());\r\n // console.log(month);\r\n var grego = hijriToGregorian(\r\n {\r\n day: 1,\r\n month: month,\r\n year: target.hy\r\n }\r\n )\r\n //console.log(\"findGregorianForHijri Greg => \", grego.month, \"M\");\r\n return new Date(grego.year, grego.month - 1, grego.day);\r\n // let lo = new Date(1937, 0, 1).getTime();\r\n // let hi = new Date(2076, 11, 31).getTime();\r\n // const dayMs = 86400000;\r\n // while (lo <= hi) {\r\n // const mid = Math.floor((lo + hi) / 2);\r\n // const h = hijriFromGregorian(new Date(mid));\r\n // compareHijri(h, target) < 0 ? (lo = mid + dayMs) : (hi = mid - dayMs);\r\n // }\r\n // let d = new Date(lo);\r\n // while (true) {\r\n // const h = hijriFromGregorian(d);\r\n // const cmp = compareHijri(h, target);\r\n // if (cmp === 0) {\r\n // console.log(d);\r\n // return d;\r\n // }\r\n // if (cmp > 0) throw new Error('Hijri date out of supported range');\r\n // d = new Date(d.getTime() + dayMs);\r\n // }\r\n}\r\n\r\nexport function stripTime(d: Date): Date {\r\n //return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n return d;\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, Input, model, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\nimport {\r\n DayCell, findGregorianForHijri, gregMonthNamesAr,\r\n gregMonthNamesEn, hijriFromGregorian, hijriMonthNamesAr,\r\n hijriMonthNamesEn, stripTime, weekDaysAr, weekDaysEn\r\n} from './flex-dual-calender-data';\r\n\r\n@Component({\r\n selector: 'flex-dual-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './flex-dual-calendar.component.html',\r\n styleUrls: ['./flex-dual-calendar.component.css']\r\n})\r\n\r\nexport class FlexDualCalendarComponent {\r\n /** Two-way bound selected date (Gregorian) */\r\n value = model<Date>(new Date());\r\n // @Output() valueChange = new EventEmitter<Date>();\r\n\r\n /** Optional min/max (Gregorian) */\r\n @Input() minDate?: Date;\r\n @Input() maxDate?: Date;\r\n\r\n /** Month/weekday language */\r\n @Input() monthLang: 'en' | 'ar' = 'en';\r\n\r\n /** Start mode, default Hijri */\r\n //@Input() startMode: FlexCalendarSystem = 'gregory';\r\n\r\n // This will be injected by FloatingUiService\r\n close: ((result?: any) => void) | undefined;\r\n\r\n /** Current mode (hijri | gregory) */\r\n mode = model<FlexCalendarSystem>('gregory');\r\n\r\n /** Hijri view state */\r\n hy = signal<number>(0);\r\n hm = signal<number>(0);\r\n\r\n /** Gregorian view state */\r\n gy = signal<number>(0);\r\n gm = signal<number>(0); // 1..12\r\n\r\n /** selectors */\r\n selectedMonth = 1;\r\n selectedYear = 1447;\r\n yearRange: number[] = [];\r\n\r\n // ---- getters for UI ----\r\n get hijriMonths() {\r\n return this.monthLang === 'ar' ? hijriMonthNamesAr : hijriMonthNamesEn;\r\n }\r\n get gregMonths() {\r\n return this.monthLang === 'ar' ? gregMonthNamesAr : gregMonthNamesEn;\r\n }\r\n get weekDays() {\r\n return this.monthLang === 'ar' ? weekDaysAr : weekDaysEn;\r\n }\r\n get currentMonthName() {\r\n return this.mode() === 'islamic'\r\n ? this.hijriMonths[this.selectedMonth - 1]\r\n : this.gregMonths[this.selectedMonth - 1];\r\n }\r\n\r\n private ignoreDropdownSync = false;\r\n\r\n constructor() {\r\n const today = new Date();\r\n const h = hijriFromGregorian(today);\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.gy.set(today.getFullYear());\r\n this.gm.set(today.getMonth() + 1);\r\n\r\n // initialize selectors with start mode\r\n //this.mode.set(this.startMode);\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n }\r\n\r\n effect((() => {\r\n if (this.ignoreDropdownSync) return;\r\n\r\n const v = this.value();\r\n if (!v) return;\r\n\r\n\r\n const g = stripTime(this.value());\r\n const h = hijriFromGregorian(g);\r\n\r\n this.gy.set(g.getFullYear());\r\n this.gm.set(g.getMonth() + 1);\r\n\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n\r\n // Update dropdowns based on current mode\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n }\r\n }));\r\n }\r\n\r\n ngOnInit() {\r\n this.buildYearRange();\r\n }\r\n\r\n ngOnChanges(changes: any) {\r\n // If value changed from outside, update both calendars\r\n // if (changes['value'] && this.value() instanceof Date) {\r\n // const g = stripTime(this.value());\r\n // const h = hijriFromGregorian(g);\r\n\r\n // this.gy.set(g.getFullYear());\r\n // this.gm.set(g.getMonth() + 1);\r\n\r\n // this.hy.set(h.hy);\r\n // this.hm.set(h.hm);\r\n\r\n // // Update dropdowns based on current mode\r\n // if (this.mode() === 'islamic') {\r\n // this.selectedYear = this.hy();\r\n // this.selectedMonth = this.hm();\r\n // } else {\r\n // this.selectedYear = this.gy();\r\n // this.selectedMonth = this.gm();\r\n // }\r\n // }\r\n\r\n // Rebuild year range if min/max changed\r\n if (changes['minDate'] || changes['maxDate'] || changes['value']) {\r\n this.buildYearRange();\r\n }\r\n }\r\n\r\n\r\n // Build years based on min/max expressed in Hijri for Hijri mode, Gregorian for Gregorian mode\r\n buildYearRange() {\r\n if (this.mode() === 'islamic') {\r\n const minH = this.minDate ? hijriFromGregorian(stripTime(this.minDate)) : { hy: 1356, hm: 1, hd: 1 };\r\n const maxH = this.maxDate ? hijriFromGregorian(stripTime(this.maxDate)) : { hy: 1499, hm: 12, hd: 30 };\r\n this.yearRange = [];\r\n for (let y = minH.hy; y <= maxH.hy; y++) this.yearRange.push(y);\r\n } else {\r\n const minG = this.minDate ? stripTime(this.minDate) : new Date(1937, 0, 1);\r\n const maxG = this.maxDate ? stripTime(this.maxDate) : new Date(2076, 11, 31);\r\n this.yearRange = [];\r\n for (let y = minG.getFullYear(); y <= maxG.getFullYear(); y++) this.yearRange.push(y);\r\n }\r\n }\r\n\r\n // 🔁 Mode switch (SYNCED view — keep same instant)\r\n switchMode(value: FlexCalendarSystem) {\r\n const pivot = this.value(); // use selected date or current view start\r\n if (value === 'gregory') {\r\n // To Gregorian mode\r\n const g = stripTime(pivot);\r\n this.gy.set(g.getFullYear());\r\n this.gm.set(g.getMonth() + 1);\r\n this.mode.set('gregory');\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n } else {\r\n // To Hijri mode\r\n const h = hijriFromGregorian(stripTime(pivot));\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.mode.set('islamic');\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n }\r\n this.buildYearRange();\r\n }\r\n\r\n // called when dropdowns change\r\n onMonthYearChange() {\r\n this.ignoreDropdownSync = true;\r\n\r\n if (this.mode() === 'islamic') {\r\n this.hy.set(this.selectedYear);\r\n this.hm.set(this.selectedMonth);\r\n } else {\r\n this.gy.set(this.selectedYear);\r\n this.gm.set(this.selectedMonth);\r\n }\r\n\r\n setTimeout(() => (this.ignoreDropdownSync = false));\r\n }\r\n\r\n // Start of visible month (Gregorian date)\r\n firstOfMonth(): Date {\r\n if (this.mode() === 'islamic') {\r\n //console.log(\"firstOfMonth function: \", this.hm());\r\n return findGregorianForHijri({ hy: this.hy(), hm: this.hm(), hd: 1 });\r\n }\r\n return new Date(this.gy(), this.gm() - 1, 1);\r\n }\r\n\r\n // Calendar cells for current view\r\n cells(): DayCell[] {\r\n const firstG = this.firstOfMonth();\r\n const firstH = hijriFromGregorian(firstG);\r\n\r\n // grid start (Sunday-first; adjust if you want Saturday-first)\r\n const start = new Date(firstG);\r\n start.setDate(firstG.getDate() - firstG.getDay());\r\n\r\n const result: DayCell[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const g = new Date(start);\r\n g.setDate(start.getDate() + i);\r\n const h = hijriFromGregorian(g);\r\n\r\n //console.log(\"month:\", h.hm);\r\n\r\n let disabled = false;\r\n if (this.minDate && g < stripTime(this.minDate)) disabled = true;\r\n if (this.maxDate && g > stripTime(this.maxDate)) disabled = true;\r\n\r\n const inCurrentMonth =\r\n this.mode() === 'islamic'\r\n ? (h.hy === firstH.hy && h.hm === firstH.hm)\r\n : (g.getFullYear() === firstG.getFullYear() && g.getMonth() === firstG.getMonth());\r\n\r\n result.push({ g, h, inCurrentMonth, disabled });\r\n }\r\n return result;\r\n }\r\n\r\n prevMonth() {\r\n if (!this.canPrev()) return;\r\n\r\n this.ignoreDropdownSync = true;\r\n\r\n if (this.mode() === 'islamic') {\r\n let m = this.hm(), y = this.hy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n } else {\r\n let m = this.gm(), y = this.gy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.gm.set(m); this.gy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n }\r\n\r\n setTimeout(() => (this.ignoreDropdownSync = false));\r\n }\r\n\r\n nextMonth() {\r\n if (!this.canNext()) return;\r\n\r\n this.ignoreDropdownSync = true;\r\n if (this.mode() === 'islamic') {\r\n let m = this.hm(), y = this.hy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n } else {\r\n let m = this.gm(), y = this.gy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.gm.set(m); this.gy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n }\r\n\r\n setTimeout(() => (this.ignoreDropdownSync = false));\r\n }\r\n\r\n canPrev(): boolean {\r\n if (!this.minDate) return true;\r\n const minG = stripTime(this.minDate);\r\n const viewFirst = this.firstOfMonth();\r\n // Can go prev if the first day of previous month is >= minG\r\n const prev = new Date(viewFirst.getFullYear(), viewFirst.getMonth() - 1, 1);\r\n return prev >= new Date(minG.getFullYear(), minG.getMonth(), 1);\r\n }\r\n\r\n canNext(): boolean {\r\n if (!this.maxDate) return true;\r\n const maxG = stripTime(this.maxDate);\r\n const viewFirst = this.firstOfMonth();\r\n const next = new Date(viewFirst.getFullYear(), viewFirst.getMonth() + 1, 1);\r\n // move to the first of the month after max\r\n const maxMonthAfter = new Date(maxG.getFullYear(), maxG.getMonth() + 1, 1);\r\n return next < maxMonthAfter;\r\n }\r\n\r\n isToday(g: Date) {\r\n const t = new Date();\r\n return g.getFullYear() === t.getFullYear()\r\n && g.getMonth() === t.getMonth()\r\n && g.getDate() === t.getDate();\r\n }\r\n\r\n isSelected(g: Date) {\r\n const v = this.value();\r\n if (!v) return false;\r\n\r\n return !!this.value() &&\r\n g.getFullYear() === v.getFullYear() &&\r\n g.getMonth() === v.getMonth() &&\r\n g.getDate() === v.getDate();\r\n }\r\n\r\n select(c: DayCell) {\r\n if (c.disabled) return;\r\n var g = c.g;\r\n var st = stripTime(c.g);\r\n this.value.set(st);\r\n //this.valueChange.emit(this.value);\r\n // keep both views in sync after selection\r\n const h = hijriFromGregorian(this.value());\r\n this.hy.set(h.hy); this.hm.set(h.hm);\r\n this.gy.set(this.value().getFullYear()); this.gm.set(this.value().getMonth() + 1);\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy(); this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy(); this.selectedMonth = this.gm();\r\n }\r\n\r\n if (!this.close)\r\n return;\r\n\r\n this.close(this.value())\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header p-1\">\r\n <div class=\"d-flex gap-1\">\r\n\r\n <div>\r\n <button class=\"btn btn-sm w-100 \" (click)=\"prevMonth()\" [disabled]=\"!canPrev()\"><i\r\n class=\"bi bi-caret-left-fill\"></i></button>\r\n </div>\r\n <div class=\"flex-grow-1\">\r\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"selectedMonth\"\r\n (ngModelChange)=\"onMonthYearChange()\">\r\n @if (mode() === 'islamic') {\r\n @for (m of hijriMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{ hijriMonths[$index] }}-{{$index + 1}}</option>\r\n }\r\n } @else {\r\n @for (m of gregMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{$index + 1}}-{{ gregMonths[$index] }}</option>\r\n }\r\n }\r\n </select>\r\n </div>\r\n <div> <select class=\"form-select form-select-sm\" [(ngModel)]=\"selectedYear\"\r\n (ngModelChange)=\"onMonthYearChange()\">\r\n @for (y of yearRange; track y) {\r\n <option [value]=\"y\">{{ y }}</option>\r\n }\r\n </select></div>\r\n <div>\r\n <button class=\"btn btn-sm w-100 \" (click)=\"nextMonth()\" [disabled]=\"!canNext()\"><i\r\n class=\"bi bi-caret-right-fill\"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <!-- Weekday labels -->\r\n <div class=\"grid\">\r\n @for (w of weekDays; track $index) {\r\n <div class=\"col fw-bold border pb-1\">{{ w }}</div>\r\n }\r\n </div>\r\n\r\n <!-- Calendar cells -->\r\n <div class=\"grid\">\r\n @for (c of cells(); track $index) {\r\n <div class=\"cell\">\r\n <button class=\"btn w-100 rounded-0\" [class.muted]=\"!c.inCurrentMonth\" [class.fw-bold]=\"isToday(c.g)\"\r\n [class.btn-info]=\"isSelected(c.g)\" [disabled]=\"c.disabled\" (click)=\"select(c)\">\r\n <!-- show Hijri day in Hijri mode, otherwise Gregorian -->\r\n @if(mode() === 'islamic'){\r\n {{ c.h.hd }}\r\n }\r\n @else{\r\n {{ c.g.getDate() }}\r\n }\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-footer px-0 py-1\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Basic example\">\r\n <button class=\"btn btn-sm btn-outline-secondary\" [class.btn-info]=\"mode() == 'gregory'\" type=\"button\"\r\n (click)=\"switchMode('gregory')\">\r\n Gregorian\r\n </button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" [class.btn-info]=\"mode() == 'islamic'\" type=\"button\"\r\n (click)=\"switchMode('islamic')\">\r\n هجري\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\n\r\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop';\r\nexport type OS = 'iOS' | 'Android' | 'Windows' | 'MacOS' | 'Linux' | 'Other';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DeviceDetectorService {\r\n\r\n getDeviceType(): DeviceType {\r\n const ua = navigator.userAgent;\r\n if (/Mobi|Android/i.test(ua)) return 'mobile';\r\n if (/iPad|Tablet/i.test(ua)) return 'tablet';\r\n return 'desktop';\r\n }\r\n\r\n getOS(): OS {\r\n const ua = navigator.userAgent;\r\n if (/iPhone|iPad|iPod/i.test(ua)) return 'iOS';\r\n if (/Android/i.test(ua)) return 'Android';\r\n if (/Win/i.test(ua)) return 'Windows';\r\n if (/Mac/i.test(ua)) return 'MacOS';\r\n if (/Linux/i.test(ua)) return 'Linux';\r\n return 'Other';\r\n }\r\n\r\n isMobile(): boolean { return this.getDeviceType() === 'mobile'; }\r\n isTablet(): boolean { return this.getDeviceType() === 'tablet'; }\r\n isDesktop(): boolean { return this.getDeviceType() === 'desktop'; }\r\n}\r\n","import {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n Injectable,\r\n Type,\r\n} from '@angular/core';\r\nimport {\r\n computePosition,\r\n offset,\r\n flip,\r\n shift,\r\n autoUpdate,\r\n type Placement,\r\n} from '@floating-ui/dom';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FloatingUiService {\r\n private activePopup?: {\r\n compRef: ComponentRef<any>;\r\n cleanup: (result?: any) => void;\r\n reference: HTMLElement;\r\n };\r\n\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: EnvironmentInjector\r\n ) { }\r\n\r\n open<T, TResult = any>(\r\n reference: HTMLElement,\r\n component: Type<T>,\r\n options?: {\r\n inputs?: Record<string, any>;\r\n placement?: Placement;\r\n closeOnOutsideClick?: boolean;\r\n closeOnEscape?: boolean;\r\n }\r\n ): Promise<TResult | null> {\r\n // 1️⃣ If same reference clicked again → toggle close\r\n if (this.activePopup && this.activePopup.reference === reference) {\r\n this.activePopup.cleanup(null);\r\n return Promise.resolve(null);\r\n }\r\n\r\n // 2️⃣ If another popup is open → close it first\r\n if (this.activePopup) {\r\n this.activePopup.cleanup(null);\r\n }\r\n\r\n // 3️⃣ Create new popup\r\n return new Promise<TResult | null>((resolve) => {\r\n const compRef = createComponent(component, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n // Add close() callback to component\r\n (compRef.instance as any).close = (result?: TResult) => cleanup(result ?? null);\r\n\r\n // Apply @Input() bindings\r\n if (options?.inputs) {\r\n Object.entries(options.inputs).forEach(([k, v]) => {\r\n (compRef.instance as any)[k] = v;\r\n });\r\n }\r\n\r\n document.body.appendChild(compRef.location.nativeElement);\r\n this.appRef.attachView(compRef.hostView);\r\n\r\n // Position via Floating-UI\r\n const cleanupAutoUpdate = autoUpdate(reference, compRef.location.nativeElement, () => {\r\n computePosition(reference, compRef.location.nativeElement, {\r\n placement: options?.placement ?? 'bottom-start',\r\n middleware: [offset(6), flip(), shift()],\r\n }).then(({ x, y }) => {\r\n Object.assign(compRef.location.nativeElement.style, {\r\n position: 'absolute',\r\n left: `${x}px`,\r\n top: `${y}px`,\r\n zIndex: '1080',\r\n });\r\n });\r\n });\r\n\r\n // Outside click & ESC handlers\r\n const handleClickOutside = (e: MouseEvent) => {\r\n const el = compRef.location.nativeElement;\r\n const target = e.target as Node;\r\n if (!el.contains(target) && !reference.contains(target)) {\r\n cleanup(null);\r\n }\r\n };\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') cleanup(null);\r\n };\r\n\r\n if (options?.closeOnOutsideClick !== false) {\r\n setTimeout(() => document.addEventListener('mousedown', handleClickOutside));\r\n }\r\n if (options?.closeOnEscape !== false) {\r\n document.addEventListener('keydown', handleEscape);\r\n }\r\n\r\n // ✅ The one true cleanup — handles all detach, resolve, destroy safely\r\n const cleanup = (result?: TResult | null) => {\r\n // Guard: if already cleaned up, skip\r\n if (!this.activePopup || this.activePopup.compRef !== compRef) return;\r\n\r\n cleanupAutoUpdate();\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n document.removeEventListener('keydown', handleEscape);\r\n this.appRef.detachView(compRef.hostView);\r\n compRef.destroy();\r\n\r\n this.activePopup = undefined;\r\n resolve(result ?? null);\r\n };\r\n\r\n // track active popup\r\n this.activePopup = { compRef, cleanup, reference };\r\n });\r\n }\r\n\r\n closeActive(result?: any) {\r\n if (this.activePopup) {\r\n this.activePopup.cleanup(result ?? null);\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, HostListener, Input, input, model, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { computePosition, offset, flip, shift, autoPlacement, hide } from '@floating-ui/dom';\r\n\r\nimport dayjs from \"dayjs\";\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\nimport { DateServiceService } from '../services/date-service.service';\r\nimport { FlexDualCalendarComponent } from \"../flex-dual-calendar/flex-dual-calendar.component\";\r\nimport { FlexCalendarSystemSwitchPosition } from '../core/types/flex-calendar-system-switch-position.type';\r\nimport { DeviceDetectorService } from '../services/device-detector.service';\r\nimport { FloatingUiService } from '../services/floating-ui.service';\r\n\r\n@Component({\r\n selector: 'flex-dual-datepicker',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './flex-dual-datepicker.component.html',\r\n styleUrl: './flex-dual-datepicker.component.css'\r\n})\r\n\r\nexport class FlexDualDatepickerComponent {\r\n\r\n @ViewChild('calendarButton') calendarButton?: ElementRef;\r\n @ViewChild('calendarDropdown') calendarDropdown?: ElementRef;\r\n\r\n @ViewChild(\"inputDiv\") inputDiv?: ElementRef;\r\n @ViewChild(\"modalDiv\") modalDiv?: ElementRef;\r\n\r\n value = model<any>();\r\n enabled = input<boolean>(true);\r\n cssClass = input<string>();\r\n format = input<string>(\"DD/MM/YYYY\");\r\n\r\n title = input<string>();\r\n calendarSwitchPosition = input<FlexCalendarSystemSwitchPosition>(\"title\");\r\n\r\n //selectedDate is needed to keep the current data for process\r\n selectedDate?: Date;\r\n\r\n calendar = model<FlexCalendarSystem>(\"gregory\");\r\n // protected _calendar: FlexCalendarSystem = \"gregory\";\r\n\r\n inputDate: string = \"\";\r\n isMobile = false;\r\n\r\n\r\n constructor(private dateService: DateServiceService, private deviceDetector: DeviceDetectorService,\r\n private floating: FloatingUiService\r\n ) {\r\n this.isMobile = deviceDetector.isMobile();\r\n\r\n effect(() => {\r\n //this._calendar = this.calendar();\r\n if (!this.selectedDate)\r\n return;\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n });\r\n\r\n effect(() => {\r\n const iso = this.value();\r\n if (iso) {\r\n const date = dayjs.utc(iso);\r\n if (date.isValid()) {\r\n this.selectedDate = date.toDate();\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.selectedDate = undefined;\r\n this.inputDate = \"\";\r\n });\r\n }\r\n\r\n\r\n\r\n switchCalendar() {\r\n if (this.calendar() == \"gregory\") {\r\n // this._calendar = \"islamic\";\r\n this.calendar.set(\"islamic\");\r\n }\r\n else {\r\n //this._calendar = \"gregory\";\r\n this.calendar.set(\"gregory\");\r\n }\r\n\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n }\r\n\r\n onDateSelectedFromCalender(e: Date) {\r\n this.inputDate = this.formatDate(e);\r\n\r\n this.updateDate(e);\r\n this.isOpen = false;\r\n // this.updateCalendar();\r\n }\r\n\r\n /** Triggered on blur OR Enter key */\r\n onManualDateEntered() {\r\n if (!this.inputDate) return;\r\n\r\n const parsed = this.parseInputDate(this.inputDate);\r\n if (parsed) {\r\n this.updateDate(parsed);\r\n } else {\r\n console.warn(\"Invalid date entered:\", this.inputDate);\r\n }\r\n }\r\n\r\n /** Reusable update method */\r\n private updateDate(d: Date) {\r\n this.selectedDate = d;\r\n this.inputDate = this.formatDate(d);\r\n this.value.set(d);\r\n }\r\n\r\n formatDate(date: Date): string {\r\n return this.dateService.format(date, this.calendar(), this.format());\r\n }\r\n\r\n private parseInputDate(str: string): Date | null | undefined {\r\n /*if the user clear the text in input box then we must accept as the user\r\n wants to remove date from the control so we will return null*/\r\n if (!str)\r\n return null;\r\n\r\n /*if any text entered in input box then we must try to parse it\r\n if parse success the date service will return the date else will return \r\n null or undefined.\r\n in this case since user entered some date may be he/she made mistake\r\n so we will should not show null or empty value, instead we will\r\n return current date or last selected date\r\n */\r\n var parsedDate = this.dateService.parse(str, this.calendar(), this.format());\r\n if (parsedDate)\r\n return parsedDate;\r\n\r\n //if parseDate is null this means user entered wrong date, in this case we will return\r\n //the last selected date.\r\n if (this.selectedDate) {\r\n return this.selectedDate;\r\n }\r\n\r\n //if last selected date is also null then we will return current date.\r\n return new Date();\r\n }\r\n\r\n\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.inputDiv?.nativeElement.contains(event.target)\r\n || this.modalDiv?.nativeElement.contains(event.target)\r\n || this.calendarDropdown?.nativeElement.contains(event.target)) {\r\n return\r\n }\r\n this.isOpen = false;\r\n // this.updateCalendar();\r\n }\r\n\r\n\r\n async openCalendar() {\r\n const button = this.calendarButton?.nativeElement!;\r\n\r\n const result = await this.floating.open(\r\n button,\r\n FlexDualCalendarComponent,\r\n {\r\n placement: 'bottom',\r\n inputs: {\r\n // You can pass any props here\r\n initialDate: this.selectedDate,\r\n mode: this.calendar,\r\n value: this.value\r\n },\r\n }\r\n );\r\n\r\n if (result) {\r\n //this.selectedDate = result;\r\n this.updateDate(result);\r\n }\r\n }\r\n\r\n\r\n isOpen = false;\r\n\r\n // toggleMenu() {\r\n // this.isOpen = !this.isOpen;\r\n\r\n // if (this.isMobile)\r\n // return;\r\n\r\n // this.updateCalendar();\r\n // }\r\n\r\n // updateCalendar() {\r\n // const button = this.calendarButton?.nativeElement!;\r\n // const calendar = this.calendarDropdown?.nativeElement!;\r\n\r\n // computePosition(button, calendar, {\r\n // placement: \"bottom\",\r\n // strategy: 'fixed',\r\n // middleware: [flip(), shift(), hide()]\r\n // }).then(({ x, y }) => {\r\n // Object.assign(calendar.style, {\r\n // left: `${x}px`,\r\n // top: `${y}px`,\r\n // visibility: !this.isOpen\r\n // ? 'hidden'\r\n // : 'visible',\r\n // });\r\n // });\r\n // }\r\n}\r\n","@if(calendarSwitchPosition() == 'title'){\r\n<div class=\"d-flex align-items-center gap-1\">\r\n <label>{{ title() }}</label>\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" style=\"cursor: pointer; padding-bottom: 1px; padding-top: 1px;\"\r\n (click)=\"switchCalendar()\">\r\n @if(calendar() == 'gregory') {G}\r\n @else{H}\r\n </button>\r\n</div>\r\n}\r\n<div class=\"input-group flex-nowrap\" #inputDiv>\r\n @if(calendarSwitchPosition() == 'inline'){\r\n <span class=\"input-group-text\" style=\"cursor: pointer;\" (click)=\"switchCalendar()\"> @if(calendar() == 'gregory') {G}\r\n @else{H}</span>\r\n }\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n <button #calendarButton class=\"btn btn-outline-secondary\" (click)=\"openCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, input, Input, output, Output, SimpleChanges } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'flex-table-paging',\r\n imports: [CommonModule, FormsModule, TranslateModule],\r\n templateUrl: './flex-table-paging.component.html',\r\n styleUrl: './flex-table-paging.component.css'\r\n})\r\nexport class FlexTablePagingComponent {\r\n @Input() pageIndex: number = 1; // current page\r\n @Input() pageSize: number = 10; // selected page size\r\n @Input() totalCount: number = 0; // total items\r\n @Input() pageSizes: number[] = [10, 50, 100, 200, 400, 800];\r\n\r\n showTotalCount = input<boolean>(false);\r\n\r\n // @Output() pageIndexChange = new EventEmitter<number>();\r\n // @Output() pageSizeChange = new EventEmitter<number>();\r\n pageChange = output<{ skip: number, take: number }>();\r\n\r\n // detect external changes\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['totalCount'] && !changes['totalCount'].firstChange) {\r\n // Reset to page 1 if totalCount decreased or changed\r\n this.pageIndex = 1;\r\n // var d = {\r\n // skip: (this.pageIndex - 1) * this.pageSize,\r\n // take: this.pageSize\r\n // };\r\n // this.pageChange.emit(d);\r\n //this.pageIndexChange.emit(1);\r\n }\r\n }\r\n\r\n get totalPages(): number {\r\n return Math.max(1, Math.ceil(this.totalCount / this.pageSize));\r\n }\r\n\r\n get pages(): number[] {\r\n return Array.from({ length: this.totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n onPageChange(e: any) {\r\n this.pageIndex = Number(e.target.value);\r\n //this.pageIndexChange.emit(this.pageIndex);\r\n console.log(this.pageIndex, this.pageSize)\r\n var d = {\r\n skip: (this.pageIndex - 1) * this.pageSize,\r\n take: this.pageSize\r\n };\r\n console.log(d);\r\n this.pageChange.emit(d);\r\n }\r\n\r\n onPageSizeChange(e: any) {\r\n console.log(e.target.value);\r\n this.pageIndex = 1;\r\n this.pageSize = Number(e.target.value);\r\n console.log(this.pageIndex, this.pageSize)\r\n var d = {\r\n skip: (this.pageIndex - 1) * this.pageSize,\r\n take: this.pageSize\r\n };\r\n console.log(d);\r\n this.pageChange.emit(d);\r\n // this.pageSizeChange.emit(this.pageSize);\r\n\r\n // // reset to page 1 when size changes\r\n // this.pageIndex = 1;\r\n // this.pageIndexChange.emit(this.pageIndex);\r\n }\r\n}\r\n","<div class=\"border-top\">\r\n <div class=\"d-flex align-items-center gap-2 p-2 small\">\r\n <div>{{ \"page-no\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageIndex\" (change)=\"onPageChange($event)\">\r\n @for (p of pages; track $index) {\r\n <option [value]=\"p\">{{ p }}</option>\r\n }\r\n </select>\r\n <div>{{ \"page-size\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\r\n @for (size of pageSizes; track $index) {\r\n <option [value]=\"size\">{{ size }}</option>\r\n }\r\n </select>\r\n @if(showTotalCount()){\r\n <div class=\"ms-auto\">\r\n {{ \"total-count\" | translate }}: <strong>{{ totalCount }}</strong>\r\n </div>\r\n }\r\n\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, ContentChild, ElementRef, output, ViewChild, TemplateRef, input } from '@angular/core';\r\nimport { FlexColumnsComponent } from '../flex-grid/flex-grid-columns';\r\nimport { FlexTablePagingComponent } from \"../flex-table-paging/flex-table-paging.component\";\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { FlexSort } from './flex-sort';\r\nimport { FlexColumnComponent } from '../flex-grid/flex-grid-column';\r\n\r\n@Component({\r\n selector: 'flex-table',\r\n imports: [CommonModule, FlexTablePagingComponent, TranslateModule],\r\n templateUrl: './flex-table.component.html',\r\n styleUrl: './flex-table.component.css'\r\n})\r\nexport class FlexTableComponent {\r\n\r\n columns = Array.from({ length: 50 }, (_, index) => `Item ${index + 1}`);\r\n items = Array.from({ length: 50 }, (_, index) => `Item ${index + 1}`);\r\n\r\n enablePaging = input<boolean>(false);\r\n totalDataCount = input<number>(0);\r\n showTotalDataCount = input<boolean>(false);\r\n\r\n sorts: FlexSort[] = [];\r\n changeRequest = output<{ skip: number, take: number, sorts: FlexSort[] }>();\r\n\r\n pageChange = output<{ skip: number, take: number }>();\r\n currentPage: number = 1;\r\n pageSize: number = 50;\r\n\r\n selectedIndex: number = -1;\r\n\r\n @ContentChild(FlexColumnsComponent) gridColumns?: FlexColumnsComponent;\r\n\r\n @ViewChild(\"tableHeader\") tableHeader?: ElementRef<HTMLDivElement>;\r\n\r\n dataSource = input<any[]>([]);\r\n\r\n rowClicked = output<{ index: number, data: any }>();\r\n rowDblClicked = output<{ index: number, data: any }>();\r\n\r\n tableClass = input<string>();\r\n\r\n syncScroll(e: Event) {\r\n const body = e.target as HTMLElement;\r\n const header = this.tableHeader?.nativeElement; //document.querySelector('.grid-header');\r\n if (header) (header as HTMLElement).scrollLeft = body.scrollLeft;\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 skip = 0;\r\n take = 0;\r\n onPageChange($event: { skip: number; take: number; }) {\r\n this.skip = $event.skip;\r\n this.take = $event.take;\r\n this.pageChange.emit({ skip: $event.skip, take: $event.take });\r\n }\r\n\r\n onSort(col: FlexColumnComponent, event?: MouseEvent) {\r\n\r\n if (!col.enableSort) return;\r\n\r\n const existingIndex = this.sorts.findIndex(s => s.field === col.field);\r\n\r\n if (existingIndex === -1) {\r\n // add ASC\r\n this.sorts.push({\r\n field: col.field,\r\n direction: 'asc',\r\n });\r\n } else {\r\n const existing = this.sorts[existingIndex];\r\n\r\n if (existing.direction === 'asc') {\r\n existing.direction = 'desc';\r\n } else {\r\n // remove sort (ASC → DESC → NONE)\r\n this.sorts.splice(existingIndex, 1);\r\n }\r\n }\r\n\r\n this.changeRequest.emit({\r\n skip: this.skip, take: this.take, sorts: [...this.sorts]\r\n });\r\n }\r\n\r\n getSort(field: string): FlexSort | undefined {\r\n return this.sorts.find(s => s.field === field);\r\n }\r\n\r\n\r\n}\r\n","<div class=\"table-layout\">\r\n <div class=\" table-header\" #tableHeader>\r\n <table class=\"grid-table table table-bordered mb-0\">\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 }\r\n <col style=\"width: auto; min-width: 0;\">\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\" (click)=\"onSort(col, $event)\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n {{ col.headerText() }}\r\n }\r\n\r\n @if(col.enableSort && col.sortField){\r\n\r\n @if(getSort(col.sortField!); as sort){\r\n @if(sort.direction == \"asc\"){\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-down\"></i></span>\r\n }\r\n @else {\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-up\"></i></span>\r\n }\r\n\r\n }\r\n @else{\r\n <span><i class=\"bi bi-arrow-down-up\"></i></span>\r\n }\r\n\r\n\r\n }\r\n </th>\r\n }\r\n <td></td>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"content-area\" (scroll)=\"syncScroll($event)\">\r\n <table class=\"grid-table table table-bordered\" [ngClass]=\"tableClass()\">\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 <col style=\"width: auto; min-width: 0;\">\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 class=\"text-wrap text-break\">\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 }\r\n </td>\r\n\r\n }<td></td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(enablePaging()){\r\n <flex-table-paging [totalCount]=\"totalDataCount()\" (pageChange)=\"onPageChange($event)\"\r\n [showTotalCount]=\"showTotalDataCount()\"></flex-table-paging>\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-table/flex-sort';\r\nexport * from './lib/flex-combo-datepicker/flex-combo-datepicker.component';\r\nexport * from './lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component';\r\nexport * from './lib/flex-container/flex-container.component';\r\nexport * from \"./lib/flex-dual-datepicker/flex-dual-datepicker.component\";\r\nexport * from \"./lib/flex-dual-calendar/flex-dual-calendar.component\";\r\nexport * from \"./lib/flex-table/flex-table.component\";\r\nexport * from \"./lib/flex-table-paging/flex-table-paging.component\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","hijriFmt","hijriMonthNamesEn","hijriMonthNamesAr","weekDaysEn","weekDaysAr","hijriFromGregorian","compareHijri","findGregorianForHijri","i1.DateServiceService","i1","i2.DeviceDetectorService","i3.FloatingUiService","i4"],"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-combo-datepicker/flex-combo-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-combo-datepicker/flex-combo-datepicker.component.html","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-calendar/hijri-calendar.component.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-calendar/hijri-calendar.component.html","../../../projects/flex-ui-controls/src/lib/services/date-service.service.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.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/lib/flex-dual-calendar/flex-dual-calender-data.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-calendar/flex-dual-calendar.component.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-calendar/flex-dual-calendar.component.html","../../../projects/flex-ui-controls/src/lib/services/device-detector.service.ts","../../../projects/flex-ui-controls/src/lib/services/floating-ui.service.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-datepicker/flex-dual-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-datepicker/flex-dual-datepicker.component.html","../../../projects/flex-ui-controls/src/lib/flex-table-paging/flex-table-paging.component.ts","../../../projects/flex-ui-controls/src/lib/flex-table-paging/flex-table-paging.component.html","../../../projects/flex-ui-controls/src/lib/flex-table/flex-table.component.ts","../../../projects/flex-ui-controls/src/lib/flex-table/flex-table.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 @Input() 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 @Input() enableSort = false;\r\n @Input() sortField: string | undefined;\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 { Component, Input, Output, EventEmitter, OnInit, model, effect, input, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\ninterface DateOption {\r\n value: number | '';\r\n name: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'flex-combo-datepicker',\r\n imports: [FormsModule, CommonModule],\r\n templateUrl: './flex-combo-datepicker.component.html',\r\n styleUrls: ['./flex-combo-datepicker.component.css']\r\n})\r\n\r\nexport class ComboDatePickerComponent implements OnInit {\r\n // @Input() value: any = null; // ISO string\r\n @Input() ngMinDate?: string; // ISO string\r\n @Input() ngMaxDate?: string;\r\n @Input() ngMonths?: string[]; // optional month names\r\n @Input() ngOrder: 'dmy' | 'mdy' | 'ymd' = 'dmy';\r\n @Input() ngDisabled: boolean = false;\r\n @Input() ngPlaceholder: string | string[] = 'Day,Month,Year';\r\n\r\n dateChanged = output<any>();\r\n\r\n disabled = input<boolean>(false);\r\n\r\n value = model<any>();\r\n _value: any;\r\n\r\n day: number | '' = '';\r\n month: number | '' = '';\r\n year: number | '' = '';\r\n\r\n dates: DateOption[] = [];\r\n months: DateOption[] = [];\r\n years: DateOption[] = [];\r\n\r\n placeHolders: DateOption[] = [];\r\n\r\n cssClass = input<string>();\r\n\r\n showHeader = input<boolean>(true);\r\n dateTitle = input<string>();\r\n monthTitle = input<string>();\r\n yearTitle = input<string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n this._value = this.value();\r\n this.initModel();\r\n this.updateDates();\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n this.initPlaceholders();\r\n this.initMonths();\r\n this.initYears();\r\n // this.initModel();\r\n // this.updateDates();\r\n }\r\n\r\n private initPlaceholders() {\r\n let holders = Array.isArray(this.ngPlaceholder) ? this.ngPlaceholder : this.ngPlaceholder.split(',');\r\n if (holders.length === 3) {\r\n this.placeHolders = holders.map(h => ({ value: '', name: h, disabled: false }));\r\n }\r\n }\r\n\r\n private initMonths() {\r\n const monthNames = this.ngMonths && this.ngMonths.length === 12 ? this.ngMonths : ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];\r\n this.months = monthNames.map((name, i) => ({ value: i + 1, name }));\r\n if (this.placeHolders.length) this.months.unshift(this.placeHolders[1]);\r\n }\r\n\r\n private initYears() {\r\n const currentYear = new Date().getFullYear();\r\n const minYear = this.ngMinDate ? new Date(this.ngMinDate).getFullYear() : currentYear - 100;\r\n const maxYear = this.ngMaxDate ? new Date(this.ngMaxDate).getFullYear() : currentYear;\r\n this.years = [];\r\n for (let y = minYear; y <= maxYear; y++) {\r\n this.years.push({ value: y, name: y.toString() });\r\n }\r\n if (this.placeHolders.length) this.years.unshift(this.placeHolders[2]);\r\n }\r\n\r\n private initModel() {\r\n if (this.value) {\r\n const date = new Date(this.value());\r\n this.day = date.getDate();\r\n this.month = date.getMonth() + 1;\r\n this.year = date.getFullYear();\r\n }\r\n }\r\n\r\n private updateDates() {\r\n const max = this.month && this.year ? this.getMaxDate(this.month, this.year) : 31;\r\n this.dates = [];\r\n if (this.placeHolders.length) this.dates.push(this.placeHolders[0]);\r\n for (let i = 1; i <= max; i++) {\r\n this.dates.push({ value: i, name: i.toString() });\r\n }\r\n }\r\n\r\n private getMaxDate(month: number, year: number) {\r\n if ([4, 6, 9, 11].includes(month)) return 30;\r\n if (month === 2) return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0) ? 29 : 28;\r\n return 31;\r\n }\r\n\r\n onChange() {\r\n this.updateDates();\r\n if (this.day && this.month && this.year) {\r\n const iso = this.toLocalISOString(new Date(this.year, this.month - 1, this.day));\r\n this.value.set(iso);\r\n this.dateChanged.emit(iso);\r\n }\r\n }\r\n\r\n toLocalISOString(date: Date): string {\r\n const pad = (n: number) => n.toString().padStart(2, '0');\r\n\r\n const year = date.getFullYear();\r\n const month = pad(date.getMonth() + 1);\r\n const day = pad(date.getDate());\r\n const hours = pad(date.getHours());\r\n const minutes = pad(date.getMinutes());\r\n const seconds = pad(date.getSeconds());\r\n //const ms = date.getMilliseconds().toString().padStart(3, '0');\r\n\r\n //return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${ms}`;\r\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\r\n }\r\n}\r\n","<div class=\"row g-1\">\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (dateTitle()) {\r\n {{ dateTitle() }}\r\n }\r\n @else {\r\n Date\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"day\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select ' + cssClass()\">\r\n <option *ngFor=\"let d of dates\" [value]=\"d.value\">{{ d.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (monthTitle()) {\r\n {{ monthTitle() }}\r\n }\r\n @else {\r\n Month\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"month\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select ' + cssClass()\">\r\n <option *ngFor=\"let m of months\" [value]=\"m.value\">{{ m.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (yearTitle()) {\r\n {{ yearTitle() }}\r\n }\r\n @else {\r\n Year\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"year\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select year ' + cssClass()\">\r\n <option *ngFor=\"let y of years\" [value]=\"y.value\">{{ y.name }}</option>\r\n </select>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport type HijriDate = { hy: number; hm: number; hd: number };\r\ntype DayCell = {\r\n g: Date;\r\n h: HijriDate;\r\n inCurrentMonth: boolean;\r\n disabled: boolean;\r\n};\r\n\r\n//\r\n// ✅ Umm al-Qura Hijri calendar with Latin digits\r\n//\r\nconst hijriFmt = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura-nu-latn', {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric'\r\n});\r\n\r\nconst hijriMonthNamesEn = [\r\n 'Muharram', 'Safar', 'Rabi I', 'Rabi II',\r\n 'Jumada I', 'Jumada II', 'Rajab', 'Sha’ban',\r\n 'Ramadan', 'Shawwal', 'Dhu al-Qi’dah', 'Dhu al-Hijjah'\r\n];\r\n\r\nconst hijriMonthNamesAr = [\r\n 'محرم', 'صفر', 'ربيع الأول', 'ربيع الآخر',\r\n 'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان',\r\n 'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة'\r\n];\r\n\r\nconst weekDaysEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\nconst weekDaysAr = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\r\n\r\nfunction hijriFromGregorian(g: Date): HijriDate {\r\n const parts = hijriFmt.formatToParts(g);\r\n //console.log(parts);\r\n const map: Record<string, string> = {};\r\n for (const p of parts) map[p.type] = p.value;\r\n const n = (k: string) => parseInt(map[k] ?? '0', 10);\r\n return { hy: n('year'), hm: n('month'), hd: n('day') };\r\n}\r\n\r\nfunction compareHijri(a: HijriDate, b: HijriDate) {\r\n if (a.hy !== b.hy) return a.hy - b.hy;\r\n if (a.hm !== b.hm) return a.hm - b.hm;\r\n return a.hd - b.hd;\r\n}\r\n\r\nfunction findGregorianForHijri(target: HijriDate): Date {\r\n let lo = new Date(1937, 0, 1).getTime();\r\n let hi = new Date(2076, 11, 31).getTime();\r\n const dayMs = 86400000;\r\n\r\n while (lo <= hi) {\r\n const mid = Math.floor((lo + hi) / 2);\r\n const h = hijriFromGregorian(new Date(mid));\r\n compareHijri(h, target) < 0 ? (lo = mid + dayMs) : (hi = mid - dayMs);\r\n }\r\n\r\n let d = new Date(lo);\r\n while (true) {\r\n const h = hijriFromGregorian(d);\r\n const cmp = compareHijri(h, target);\r\n if (cmp === 0) return d;\r\n if (cmp > 0) throw new Error('Hijri date out of supported range');\r\n d = new Date(d.getTime() + dayMs);\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'app-hijri-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: \"./hijri-calendar.component.html\",\r\n styleUrl: \"./hijri-calendar.component.css\"\r\n})\r\n\r\nexport class HijriCalendarComponent {\r\n /** Two-way bound selected date (Gregorian Date) */\r\n @Input() value: Date | null = null;\r\n @Output() valueChange = new EventEmitter<Date>();\r\n\r\n /** Optional min/max restrictions (Gregorian dates) */\r\n @Input() minDate: Date | null = null;\r\n @Input() maxDate: Date | null = null;\r\n\r\n /** Month + weekday language: 'en' or 'ar' */\r\n @Input() monthLang: 'en' | 'ar' = 'ar';\r\n\r\n hy = signal<number>(0);\r\n hm = signal<number>(0);\r\n\r\n selectedMonth = 1;\r\n selectedYear = 1447;\r\n yearRange: number[] = [];\r\n\r\n get hijriMonthsEn() {\r\n return hijriMonthNamesEn;\r\n }\r\n\r\n get hijriMonthsAr() {\r\n return hijriMonthNamesAr;\r\n }\r\n\r\n get hijriMonths() {\r\n return this.monthLang === 'ar' ? hijriMonthNamesAr : hijriMonthNamesEn;\r\n }\r\n\r\n get weekDays() {\r\n return this.monthLang === 'ar' ? weekDaysAr : weekDaysEn;\r\n }\r\n\r\n get weekDaysEn() {\r\n return weekDaysEn;\r\n }\r\n\r\n get weekDaysAr() {\r\n return weekDaysAr;\r\n }\r\n\r\n get currentMonthName() {\r\n return this.hijriMonths[this.selectedMonth - 1];\r\n }\r\n\r\n constructor() {\r\n const h = hijriFromGregorian(new Date());\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.selectedYear = h.hy;\r\n this.selectedMonth = h.hm;\r\n }\r\n\r\n ngOnInit() {\r\n this.buildYearRange();\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.value) {\r\n const h = hijriFromGregorian(this.value);\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.selectedYear = h.hy;\r\n this.selectedMonth = h.hm;\r\n }\r\n this.buildYearRange();\r\n }\r\n\r\n buildYearRange() {\r\n const minH = this.minDate ? hijriFromGregorian(this.minDate) : { hy: 1356, hm: 1, hd: 1 };\r\n const maxH = this.maxDate ? hijriFromGregorian(this.maxDate) : { hy: 1499, hm: 12, hd: 30 };\r\n this.yearRange = [];\r\n for (let y = minH.hy; y <= maxH.hy; y++) {\r\n this.yearRange.push(y);\r\n }\r\n }\r\n\r\n onMonthYearChange() {\r\n this.hy.set(this.selectedYear);\r\n this.hm.set(this.selectedMonth);\r\n }\r\n\r\n firstOfMonth() {\r\n return findGregorianForHijri({ hy: this.hy(), hm: this.hm(), hd: 1 });\r\n }\r\n\r\n cells(): DayCell[] {\r\n const firstG = this.firstOfMonth();\r\n const firstH = hijriFromGregorian(firstG);\r\n\r\n const start = new Date(firstG);\r\n start.setDate(firstG.getDate() - firstG.getDay());\r\n\r\n const result: DayCell[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const g = new Date(start);\r\n g.setDate(start.getDate() + i);\r\n const h = hijriFromGregorian(g);\r\n\r\n let disabled = false;\r\n if (this.minDate && g < this.stripTime(this.minDate)) disabled = true;\r\n if (this.maxDate && g > this.stripTime(this.maxDate)) disabled = true;\r\n\r\n result.push({\r\n g,\r\n h,\r\n inCurrentMonth: h.hy === firstH.hy && h.hm === firstH.hm,\r\n disabled\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n prevMonth() {\r\n if (!this.canPrev()) return;\r\n let m = this.hm(), y = this.hy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y;\r\n this.selectedMonth = m;\r\n }\r\n\r\n nextMonth() {\r\n if (!this.canNext()) return;\r\n let m = this.hm(), y = this.hy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y;\r\n this.selectedMonth = m;\r\n }\r\n\r\n canPrev(): boolean {\r\n if (!this.minDate) return true;\r\n const minH = hijriFromGregorian(this.stripTime(this.minDate));\r\n return this.hy() > minH.hy || (this.hy() === minH.hy && this.hm() > minH.hm);\r\n }\r\n\r\n canNext(): boolean {\r\n if (!this.maxDate) return true;\r\n const maxH = hijriFromGregorian(this.stripTime(this.maxDate));\r\n return this.hy() < maxH.hy || (this.hy() === maxH.hy && this.hm() < maxH.hm);\r\n }\r\n\r\n isToday(g: Date) {\r\n const t = new Date();\r\n return g.getFullYear() === t.getFullYear()\r\n && g.getMonth() === t.getMonth()\r\n && g.getDate() === t.getDate();\r\n }\r\n\r\n isSelected(g: Date) {\r\n return !!this.value &&\r\n g.getFullYear() === this.value.getFullYear() &&\r\n g.getMonth() === this.value.getMonth() &&\r\n g.getDate() === this.value.getDate();\r\n }\r\n\r\n select(c: DayCell) {\r\n if (c.disabled) return;\r\n\r\n //console.log(c);\r\n\r\n this.value = c.g;\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n private stripTime(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n }\r\n}\r\n","<div class=\"card border-0 p-0\">\r\n <div class=\"card-header p-1\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <button class=\"btn btn-sm\" (click)=\"prevMonth()\" [disabled]=\"!canPrev()\">«</button>\r\n <div class=\"d-flex justify-content-center gap-1\">\r\n <select class=\"form-select form-select-sm w-auto\" [(ngModel)]=\"selectedMonth\"\r\n (change)=\"onMonthYearChange()\">\r\n @for (m of hijriMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{ hijriMonthsAr[$index] }} ({{ hijriMonthsEn[$index] }})</option>\r\n }\r\n </select>\r\n <select class=\"form-select form-select-sm w-auto\" [(ngModel)]=\"selectedYear\"\r\n (change)=\"onMonthYearChange()\">\r\n @for (y of yearRange; track y) {\r\n <option [value]=\"y\">{{ y }}</option>\r\n }\r\n </select>\r\n </div>\r\n <button class=\"btn btn-sm\" (click)=\"nextMonth()\" [disabled]=\"!canNext()\">»</button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-1\">\r\n\r\n\r\n <!-- month/year pickers -->\r\n\r\n\r\n <!-- weekday labels -->\r\n <div class=\"grid\">\r\n @for (w of weekDays; track $index) {\r\n <div class=\"col fw-bold border pb-1\">{{ w }}</div>\r\n }\r\n\r\n </div>\r\n\r\n <!-- calendar cells -->\r\n <div class=\"grid\">\r\n <button *ngFor=\"let c of cells()\" class=\"cell btn rounded-0\" [class.muted]=\"!c.inCurrentMonth\"\r\n [class.today]=\"isToday(c.g)\" [class.selected]=\"isSelected(c.g)\" [disabled]=\"c.disabled\"\r\n (click)=\"select(c)\">\r\n {{ c.h.hd }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport dayjs from 'dayjs';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\nimport utc from \"dayjs/plugin/utc\";\r\nimport { hijriToGregorian, gregorianToHijri } from \"@tabby_ai/hijri-converter\";\r\nimport { FlexDateModel } from '../core/models/flex-date';\r\n\r\ndayjs.extend(utc);\r\ndayjs.extend(customParseFormat);\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class DateServiceService {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n //month will start from 1\r\n convertToGregorian(date: FlexDateModel): FlexDateModel {\r\n var grego = hijriToGregorian(\r\n {\r\n day: date.day,\r\n month: date.month,\r\n year: date.year\r\n }\r\n )\r\n\r\n return {\r\n day: grego.day,\r\n month: grego.month,\r\n year: grego.year\r\n }\r\n }\r\n\r\n //month will start from 1\r\n convertToHijri(date: FlexDateModel): FlexDateModel {\r\n var hijri = gregorianToHijri(\r\n {\r\n day: date.day,\r\n month: date.month,\r\n year: date.year\r\n }\r\n )\r\n\r\n return {\r\n day: hijri.day,\r\n month: hijri.month,\r\n year: hijri.year\r\n }\r\n }\r\n\r\n parse(dateString: string, calendar: FlexCalendarSystem, format: string): Date | null | undefined {\r\n //Step 1: User will input gregorian or islamic(hijri) date. for this we will use customParseFormat\r\n //in the control we will specify the format using binding.\r\n var parsedUtcDate = dayjs.utc(dateString, format, true);\r\n if (!parsedUtcDate.isValid()) {\r\n return null;\r\n }\r\n\r\n if (calendar == \"islamic\") {\r\n var grego = hijriToGregorian(\r\n {\r\n day: parsedUtcDate.date() as number,\r\n month: parsedUtcDate.month() + 1,\r\n year: parsedUtcDate.year()\r\n }\r\n )\r\n\r\n parsedUtcDate = dayjs.utc(`${grego.year}-${grego.month}-${grego.day}`);\r\n }\r\n\r\n return parsedUtcDate.toDate();\r\n }\r\n\r\n format(date: Date, calendar: FlexCalendarSystem, format: string): string {\r\n var day = dayjs.utc(`${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`);\r\n\r\n if (calendar == \"islamic\") {\r\n var hijri = gregorianToHijri(\r\n {\r\n day: date.getDate(),\r\n month: date.getMonth() + 1,\r\n year: date.getFullYear()\r\n }\r\n );\r\n\r\n day = dayjs.utc(`${hijri.year}-${hijri.month}-${hijri.day}`);\r\n }\r\n\r\n return day.format(format);\r\n }\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, HostListener, input, model, OnInit, output, ViewChild } from '@angular/core';\r\nimport { HijriCalendarComponent } from \"../flex-hijri-calendar/hijri-calendar.component\";\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport dayjs from \"dayjs\";\r\nimport { FlexCalendarSystem } from '../../core/types/flex-calendar-system.type';\r\nimport { DateServiceService } from '../../services/date-service.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-hijri-datepicker',\r\n imports: [CommonModule, FormsModule, HijriCalendarComponent],\r\n templateUrl: './hijri-datepicker.component.html',\r\n styleUrl: './hijri-datepicker.component.css'\r\n})\r\n\r\nexport class HijriDatepickerComponent {\r\n value = model<any>();\r\n\r\n selectedDate?: Date;\r\n showCalendar: boolean = false;\r\n\r\n calender = input<FlexCalendarSystem>(\"gregory\");\r\n enabled = input<boolean>(true);\r\n cssClass = input<string>();\r\n format = input<string>(\"DD/MM/YYYY\");\r\n\r\n inputDate: string = \"\";\r\n isMobile = false;\r\n\r\n\r\n constructor(private dateService: DateServiceService) {\r\n\r\n\r\n\r\n effect(() => {\r\n const iso = this.value();\r\n if (iso) {\r\n const date = dayjs(iso);\r\n if (date.isValid()) {\r\n this.selectedDate = date.toDate();\r\n this.inputDate = this.formatDate(this.selectedDate, this.calender(), this.format());\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.selectedDate = undefined;\r\n this.inputDate = \"\";\r\n });\r\n }\r\n\r\n toggleCalendar() {\r\n this.showCalendar = !this.showCalendar;\r\n }\r\n\r\n onDateSelectedFromCalender(e: Date) {\r\n // console.log(\"onDateSelectedFromCalender: \", e);\r\n // this.dateService.log(e);\r\n //var time = this.selectedDate ?? new Date();\r\n\r\n // e.setHours(time.getHours());\r\n // e.setMinutes(time.getMinutes());\r\n\r\n //this.updateDate(e);\r\n //this.showCalendar = false;\r\n\r\n // console.log(e);\r\n }\r\n\r\n /** Triggered on blur OR Enter key */\r\n onManualDateEntered() {\r\n if (!this.inputDate) return;\r\n\r\n const parsed = this.parseInputDate(this.inputDate);\r\n if (parsed) {\r\n this.updateDate(parsed);\r\n } else {\r\n console.warn(\"Invalid date entered:\", this.inputDate);\r\n }\r\n }\r\n\r\n /** Reusable update method */\r\n private updateDate(d: Date) {\r\n this.selectedDate = d;\r\n //this.inputDate = this.formatDateForInput(d);\r\n this.value.set(d);\r\n //this.valueChange.emit(d);\r\n }\r\n\r\n formatDate(date: Date, calender: FlexCalendarSystem, format: string): string {\r\n return this.dateService.format(date, calender, format);\r\n }\r\n\r\n // private formatDateForInput(date: Date): string {\r\n // const fmt = this.format()?.toUpperCase() ?? \"DD/MM/YYYY\";\r\n // //return dayjs(date).format(fmt);\r\n // return this.formatDate(date, fmt);\r\n // }\r\n\r\n private parseInputDate(str: string): Date | null {\r\n\r\n const fmt = this.format()?.toUpperCase() ?? \"DD/MM/YYYY\";\r\n\r\n console.log(str, \"-\", fmt);\r\n\r\n const d = dayjs(str, fmt); // strict parse\r\n\r\n console.log(d.toDate());\r\n\r\n if (!d.isValid()) return null;\r\n\r\n\r\n\r\n if (!this.selectedDate) {\r\n this.selectedDate = new Date();\r\n }\r\n\r\n // gd.set(\"hour\", this.selectedDate.getHours());\r\n // gd.set(\"minute\", this.selectedDate.getMinutes());\r\n // gd.set(\"second\", this.selectedDate.getSeconds());\r\n\r\n return null;\r\n }\r\n\r\n\r\n @ViewChild(\"inputDiv\") inputDiv?: ElementRef;\r\n @ViewChild(\"modalDiv\") modalDiv?: ElementRef;\r\n @ViewChild(\"popupDiv\") popupDiv?: ElementRef;\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.inputDiv?.nativeElement.contains(event.target)\r\n || this.modalDiv?.nativeElement.contains(event.target)\r\n || this.popupDiv?.nativeElement.contains(event.target)) {\r\n return\r\n }\r\n this.showCalendar = false;\r\n }\r\n}\r\n","<div class=\"input-group flex-nowrap\" #inputDiv>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n</div>\r\n\r\n@if(showCalendar){\r\n@if(isMobile){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"showCalendar = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@else{\r\n<div class=\"dropdown-menu show\" #popupDiv>\r\n <app-hijri-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"></app-hijri-calendar>\r\n</div>\r\n}\r\n}","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 HostListener\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\r\n @HostListener('window:resize')\r\n onWindowResize() {\r\n this.resizeContent();\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 this.renderer.setStyle(this.contentHost.nativeElement, 'width', `${parent.clientWidth}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>","import { hijriToGregorian, gregorianToHijri } from \"@tabby_ai/hijri-converter\";\r\n\r\nexport const MinGregorianDate = new Date(1937, 0, 1).getTime();\r\nexport const MaxGregorianDate = new Date(2076, 11, 31).getTime();\r\n\r\nexport type HijriDate = { hy: number; hm: number; hd: number };\r\n\r\nexport type DayCell = {\r\n g: Date; // always Gregorian Date\r\n h: HijriDate; // mapped Hijri for display\r\n inCurrentMonth: boolean;\r\n disabled: boolean;\r\n};\r\n\r\n// ✅ Intl formatters\r\nexport const hijriFmt = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura-nu-latn', {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric'\r\n});\r\n\r\nexport const hijriMonthNamesEn = [\r\n 'Muharram', 'Safar', 'Rabi I', 'Rabi II',\r\n 'Jumada I', 'Jumada II', 'Rajab', 'Sha’ban',\r\n 'Ramadan', 'Shawwal', 'Dhu al-Qi’dah', 'Dhu al-Hijjah'\r\n];\r\n\r\nexport const hijriMonthNamesAr = [\r\n 'محرم', 'صفر', 'ربيع الأول', 'ربيع الآخر',\r\n 'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان',\r\n 'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة'\r\n];\r\n\r\nexport const gregMonthNamesEn = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n];\r\n\r\nexport const gregMonthNamesAr = [\r\n 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',\r\n 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'\r\n];\r\n\r\nexport const weekDaysEn = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\nexport const weekDaysAr = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\r\n\r\n\r\n\r\nexport function hijriFromGregorian(g: Date): HijriDate {\r\n // const parts = hijriFmt.formatToParts(g);\r\n // const map: Record<string, string> = {};\r\n // for (const p of parts) map[p.type] = p.value;\r\n // const n = (k: string) => parseInt(map[k] ?? '0', 10);\r\n // return { hy: n('year'), hm: n('month'), hd: n('day') };\r\n\r\n var hijri = gregorianToHijri(\r\n {\r\n day: g.getDate(),\r\n month: g.getMonth() + 1,\r\n year: g.getFullYear()\r\n }\r\n )\r\n return { hy: hijri.year, hm: hijri.month, hd: hijri.day };\r\n}\r\n\r\nexport function compareHijri(a: HijriDate, b: HijriDate) {\r\n if (a.hy !== b.hy) return a.hy - b.hy;\r\n if (a.hm !== b.hm) return a.hm - b.hm;\r\n return a.hd - b.hd;\r\n}\r\n\r\nexport function findGregorianForHijri(target: HijriDate): Date {\r\n // console.log(target);\r\n // console.log(\"findGregorianForHijri => \", target.hm, \"M\");\r\n\r\n // console.log(typeof target.hm);\r\n // console.log(typeof target.hy);\r\n\r\n var month = parseInt(target.hm.toString());\r\n //var year = parseInt(target.hy.toString());\r\n // console.log(month);\r\n var grego = hijriToGregorian(\r\n {\r\n day: 1,\r\n month: month,\r\n year: target.hy\r\n }\r\n )\r\n //console.log(\"findGregorianForHijri Greg => \", grego.month, \"M\");\r\n return new Date(grego.year, grego.month - 1, grego.day);\r\n // let lo = new Date(1937, 0, 1).getTime();\r\n // let hi = new Date(2076, 11, 31).getTime();\r\n // const dayMs = 86400000;\r\n // while (lo <= hi) {\r\n // const mid = Math.floor((lo + hi) / 2);\r\n // const h = hijriFromGregorian(new Date(mid));\r\n // compareHijri(h, target) < 0 ? (lo = mid + dayMs) : (hi = mid - dayMs);\r\n // }\r\n // let d = new Date(lo);\r\n // while (true) {\r\n // const h = hijriFromGregorian(d);\r\n // const cmp = compareHijri(h, target);\r\n // if (cmp === 0) {\r\n // console.log(d);\r\n // return d;\r\n // }\r\n // if (cmp > 0) throw new Error('Hijri date out of supported range');\r\n // d = new Date(d.getTime() + dayMs);\r\n // }\r\n}\r\n\r\nexport function stripTime(d: Date): Date {\r\n //return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n return d;\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, Input, model, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\nimport {\r\n DayCell, findGregorianForHijri, gregMonthNamesAr,\r\n gregMonthNamesEn, hijriFromGregorian, hijriMonthNamesAr,\r\n hijriMonthNamesEn, stripTime, weekDaysAr, weekDaysEn\r\n} from './flex-dual-calender-data';\r\n\r\n@Component({\r\n selector: 'flex-dual-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './flex-dual-calendar.component.html',\r\n styleUrls: ['./flex-dual-calendar.component.css']\r\n})\r\n\r\nexport class FlexDualCalendarComponent {\r\n /** Two-way bound selected date (Gregorian) */\r\n value = model<Date>(new Date());\r\n // @Output() valueChange = new EventEmitter<Date>();\r\n\r\n /** Optional min/max (Gregorian) */\r\n @Input() minDate?: Date;\r\n @Input() maxDate?: Date;\r\n\r\n /** Month/weekday language */\r\n @Input() monthLang: 'en' | 'ar' = 'en';\r\n\r\n /** Start mode, default Hijri */\r\n //@Input() startMode: FlexCalendarSystem = 'gregory';\r\n\r\n // This will be injected by FloatingUiService\r\n close: ((result?: any) => void) | undefined;\r\n\r\n /** Current mode (hijri | gregory) */\r\n mode = model<FlexCalendarSystem>('gregory');\r\n\r\n /** Hijri view state */\r\n hy = signal<number>(0);\r\n hm = signal<number>(0);\r\n\r\n /** Gregorian view state */\r\n gy = signal<number>(0);\r\n gm = signal<number>(0); // 1..12\r\n\r\n /** selectors */\r\n selectedMonth = 1;\r\n selectedYear = 1447;\r\n yearRange: number[] = [];\r\n\r\n // ---- getters for UI ----\r\n get hijriMonths() {\r\n return this.monthLang === 'ar' ? hijriMonthNamesAr : hijriMonthNamesEn;\r\n }\r\n get gregMonths() {\r\n return this.monthLang === 'ar' ? gregMonthNamesAr : gregMonthNamesEn;\r\n }\r\n get weekDays() {\r\n return this.monthLang === 'ar' ? weekDaysAr : weekDaysEn;\r\n }\r\n get currentMonthName() {\r\n return this.mode() === 'islamic'\r\n ? this.hijriMonths[this.selectedMonth - 1]\r\n : this.gregMonths[this.selectedMonth - 1];\r\n }\r\n\r\n private ignoreDropdownSync = false;\r\n\r\n constructor() {\r\n const today = new Date();\r\n const h = hijriFromGregorian(today);\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.gy.set(today.getFullYear());\r\n this.gm.set(today.getMonth() + 1);\r\n\r\n // initialize selectors with start mode\r\n //this.mode.set(this.startMode);\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n }\r\n\r\n effect((() => {\r\n if (this.ignoreDropdownSync) return;\r\n\r\n const v = this.value();\r\n if (!v) return;\r\n\r\n\r\n const g = stripTime(this.value());\r\n const h = hijriFromGregorian(g);\r\n\r\n this.gy.set(g.getFullYear());\r\n this.gm.set(g.getMonth() + 1);\r\n\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n\r\n // Update dropdowns based on current mode\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n }\r\n }));\r\n }\r\n\r\n ngOnInit() {\r\n this.buildYearRange();\r\n }\r\n\r\n ngOnChanges(changes: any) {\r\n // If value changed from outside, update both calendars\r\n // if (changes['value'] && this.value() instanceof Date) {\r\n // const g = stripTime(this.value());\r\n // const h = hijriFromGregorian(g);\r\n\r\n // this.gy.set(g.getFullYear());\r\n // this.gm.set(g.getMonth() + 1);\r\n\r\n // this.hy.set(h.hy);\r\n // this.hm.set(h.hm);\r\n\r\n // // Update dropdowns based on current mode\r\n // if (this.mode() === 'islamic') {\r\n // this.selectedYear = this.hy();\r\n // this.selectedMonth = this.hm();\r\n // } else {\r\n // this.selectedYear = this.gy();\r\n // this.selectedMonth = this.gm();\r\n // }\r\n // }\r\n\r\n // Rebuild year range if min/max changed\r\n if (changes['minDate'] || changes['maxDate'] || changes['value']) {\r\n this.buildYearRange();\r\n }\r\n }\r\n\r\n\r\n // Build years based on min/max expressed in Hijri for Hijri mode, Gregorian for Gregorian mode\r\n buildYearRange() {\r\n if (this.mode() === 'islamic') {\r\n const minH = this.minDate ? hijriFromGregorian(stripTime(this.minDate)) : { hy: 1356, hm: 1, hd: 1 };\r\n const maxH = this.maxDate ? hijriFromGregorian(stripTime(this.maxDate)) : { hy: 1499, hm: 12, hd: 30 };\r\n this.yearRange = [];\r\n for (let y = minH.hy; y <= maxH.hy; y++) this.yearRange.push(y);\r\n } else {\r\n const minG = this.minDate ? stripTime(this.minDate) : new Date(1937, 0, 1);\r\n const maxG = this.maxDate ? stripTime(this.maxDate) : new Date(2076, 11, 31);\r\n this.yearRange = [];\r\n for (let y = minG.getFullYear(); y <= maxG.getFullYear(); y++) this.yearRange.push(y);\r\n }\r\n }\r\n\r\n // 🔁 Mode switch (SYNCED view — keep same instant)\r\n switchMode(value: FlexCalendarSystem) {\r\n const pivot = this.value(); // use selected date or current view start\r\n if (value === 'gregory') {\r\n // To Gregorian mode\r\n const g = stripTime(pivot);\r\n this.gy.set(g.getFullYear());\r\n this.gm.set(g.getMonth() + 1);\r\n this.mode.set('gregory');\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n } else {\r\n // To Hijri mode\r\n const h = hijriFromGregorian(stripTime(pivot));\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.mode.set('islamic');\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n }\r\n this.buildYearRange();\r\n }\r\n\r\n // called when dropdowns change\r\n onMonthYearChange() {\r\n this.ignoreDropdownSync = true;\r\n\r\n if (this.mode() === 'islamic') {\r\n this.hy.set(this.selectedYear);\r\n this.hm.set(this.selectedMonth);\r\n } else {\r\n this.gy.set(this.selectedYear);\r\n this.gm.set(this.selectedMonth);\r\n }\r\n\r\n setTimeout(() => (this.ignoreDropdownSync = false));\r\n }\r\n\r\n // Start of visible month (Gregorian date)\r\n firstOfMonth(): Date {\r\n if (this.mode() === 'islamic') {\r\n //console.log(\"firstOfMonth function: \", this.hm());\r\n return findGregorianForHijri({ hy: this.hy(), hm: this.hm(), hd: 1 });\r\n }\r\n return new Date(this.gy(), this.gm() - 1, 1);\r\n }\r\n\r\n // Calendar cells for current view\r\n cells(): DayCell[] {\r\n const firstG = this.firstOfMonth();\r\n const firstH = hijriFromGregorian(firstG);\r\n\r\n // grid start (Sunday-first; adjust if you want Saturday-first)\r\n const start = new Date(firstG);\r\n start.setDate(firstG.getDate() - firstG.getDay());\r\n\r\n const result: DayCell[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const g = new Date(start);\r\n g.setDate(start.getDate() + i);\r\n const h = hijriFromGregorian(g);\r\n\r\n //console.log(\"month:\", h.hm);\r\n\r\n let disabled = false;\r\n if (this.minDate && g < stripTime(this.minDate)) disabled = true;\r\n if (this.maxDate && g > stripTime(this.maxDate)) disabled = true;\r\n\r\n const inCurrentMonth =\r\n this.mode() === 'islamic'\r\n ? (h.hy === firstH.hy && h.hm === firstH.hm)\r\n : (g.getFullYear() === firstG.getFullYear() && g.getMonth() === firstG.getMonth());\r\n\r\n result.push({ g, h, inCurrentMonth, disabled });\r\n }\r\n return result;\r\n }\r\n\r\n prevMonth() {\r\n if (!this.canPrev()) return;\r\n\r\n this.ignoreDropdownSync = true;\r\n\r\n if (this.mode() === 'islamic') {\r\n let m = this.hm(), y = this.hy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n } else {\r\n let m = this.gm(), y = this.gy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.gm.set(m); this.gy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n }\r\n\r\n setTimeout(() => (this.ignoreDropdownSync = false));\r\n }\r\n\r\n nextMonth() {\r\n if (!this.canNext()) return;\r\n\r\n this.ignoreDropdownSync = true;\r\n if (this.mode() === 'islamic') {\r\n let m = this.hm(), y = this.hy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n } else {\r\n let m = this.gm(), y = this.gy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.gm.set(m); this.gy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n }\r\n\r\n setTimeout(() => (this.ignoreDropdownSync = false));\r\n }\r\n\r\n canPrev(): boolean {\r\n if (!this.minDate) return true;\r\n const minG = stripTime(this.minDate);\r\n const viewFirst = this.firstOfMonth();\r\n // Can go prev if the first day of previous month is >= minG\r\n const prev = new Date(viewFirst.getFullYear(), viewFirst.getMonth() - 1, 1);\r\n return prev >= new Date(minG.getFullYear(), minG.getMonth(), 1);\r\n }\r\n\r\n canNext(): boolean {\r\n if (!this.maxDate) return true;\r\n const maxG = stripTime(this.maxDate);\r\n const viewFirst = this.firstOfMonth();\r\n const next = new Date(viewFirst.getFullYear(), viewFirst.getMonth() + 1, 1);\r\n // move to the first of the month after max\r\n const maxMonthAfter = new Date(maxG.getFullYear(), maxG.getMonth() + 1, 1);\r\n return next < maxMonthAfter;\r\n }\r\n\r\n isToday(g: Date) {\r\n const t = new Date();\r\n return g.getFullYear() === t.getFullYear()\r\n && g.getMonth() === t.getMonth()\r\n && g.getDate() === t.getDate();\r\n }\r\n\r\n isSelected(g: Date) {\r\n const v = this.value();\r\n if (!v) return false;\r\n\r\n return !!this.value() &&\r\n g.getFullYear() === v.getFullYear() &&\r\n g.getMonth() === v.getMonth() &&\r\n g.getDate() === v.getDate();\r\n }\r\n\r\n select(c: DayCell) {\r\n if (c.disabled) return;\r\n var g = c.g;\r\n var st = stripTime(c.g);\r\n this.value.set(st);\r\n //this.valueChange.emit(this.value);\r\n // keep both views in sync after selection\r\n const h = hijriFromGregorian(this.value());\r\n this.hy.set(h.hy); this.hm.set(h.hm);\r\n this.gy.set(this.value().getFullYear()); this.gm.set(this.value().getMonth() + 1);\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy(); this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy(); this.selectedMonth = this.gm();\r\n }\r\n\r\n if (!this.close)\r\n return;\r\n\r\n this.close(this.value())\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header p-1\">\r\n <div class=\"d-flex gap-1\">\r\n\r\n <div>\r\n <button class=\"btn btn-sm w-100 \" (click)=\"prevMonth()\" [disabled]=\"!canPrev()\"><i\r\n class=\"bi bi-caret-left-fill\"></i></button>\r\n </div>\r\n <div class=\"flex-grow-1\">\r\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"selectedMonth\"\r\n (ngModelChange)=\"onMonthYearChange()\">\r\n @if (mode() === 'islamic') {\r\n @for (m of hijriMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{ hijriMonths[$index] }}-{{$index + 1}}</option>\r\n }\r\n } @else {\r\n @for (m of gregMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{$index + 1}}-{{ gregMonths[$index] }}</option>\r\n }\r\n }\r\n </select>\r\n </div>\r\n <div> <select class=\"form-select form-select-sm\" [(ngModel)]=\"selectedYear\"\r\n (ngModelChange)=\"onMonthYearChange()\">\r\n @for (y of yearRange; track y) {\r\n <option [value]=\"y\">{{ y }}</option>\r\n }\r\n </select></div>\r\n <div>\r\n <button class=\"btn btn-sm w-100 \" (click)=\"nextMonth()\" [disabled]=\"!canNext()\"><i\r\n class=\"bi bi-caret-right-fill\"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <!-- Weekday labels -->\r\n <div class=\"grid\">\r\n @for (w of weekDays; track $index) {\r\n <div class=\"col fw-bold border pb-1\">{{ w }}</div>\r\n }\r\n </div>\r\n\r\n <!-- Calendar cells -->\r\n <div class=\"grid\">\r\n @for (c of cells(); track $index) {\r\n <div class=\"cell\">\r\n <button class=\"btn w-100 rounded-0\" [class.muted]=\"!c.inCurrentMonth\" [class.fw-bold]=\"isToday(c.g)\"\r\n [class.btn-info]=\"isSelected(c.g)\" [disabled]=\"c.disabled\" (click)=\"select(c)\">\r\n <!-- show Hijri day in Hijri mode, otherwise Gregorian -->\r\n @if(mode() === 'islamic'){\r\n {{ c.h.hd }}\r\n }\r\n @else{\r\n {{ c.g.getDate() }}\r\n }\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-footer px-0 py-1\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Basic example\">\r\n <button class=\"btn btn-sm btn-outline-secondary\" [class.btn-info]=\"mode() == 'gregory'\" type=\"button\"\r\n (click)=\"switchMode('gregory')\">\r\n Gregorian\r\n </button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" [class.btn-info]=\"mode() == 'islamic'\" type=\"button\"\r\n (click)=\"switchMode('islamic')\">\r\n هجري\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\n\r\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop';\r\nexport type OS = 'iOS' | 'Android' | 'Windows' | 'MacOS' | 'Linux' | 'Other';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DeviceDetectorService {\r\n\r\n getDeviceType(): DeviceType {\r\n const ua = navigator.userAgent;\r\n if (/Mobi|Android/i.test(ua)) return 'mobile';\r\n if (/iPad|Tablet/i.test(ua)) return 'tablet';\r\n return 'desktop';\r\n }\r\n\r\n getOS(): OS {\r\n const ua = navigator.userAgent;\r\n if (/iPhone|iPad|iPod/i.test(ua)) return 'iOS';\r\n if (/Android/i.test(ua)) return 'Android';\r\n if (/Win/i.test(ua)) return 'Windows';\r\n if (/Mac/i.test(ua)) return 'MacOS';\r\n if (/Linux/i.test(ua)) return 'Linux';\r\n return 'Other';\r\n }\r\n\r\n isMobile(): boolean { return this.getDeviceType() === 'mobile'; }\r\n isTablet(): boolean { return this.getDeviceType() === 'tablet'; }\r\n isDesktop(): boolean { return this.getDeviceType() === 'desktop'; }\r\n}\r\n","import {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n Injectable,\r\n Type,\r\n} from '@angular/core';\r\nimport {\r\n computePosition,\r\n offset,\r\n flip,\r\n shift,\r\n autoUpdate,\r\n type Placement,\r\n} from '@floating-ui/dom';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FloatingUiService {\r\n private activePopup?: {\r\n compRef: ComponentRef<any>;\r\n cleanup: (result?: any) => void;\r\n reference: HTMLElement;\r\n };\r\n\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: EnvironmentInjector\r\n ) { }\r\n\r\n open<T, TResult = any>(\r\n reference: HTMLElement,\r\n component: Type<T>,\r\n options?: {\r\n inputs?: Record<string, any>;\r\n placement?: Placement;\r\n closeOnOutsideClick?: boolean;\r\n closeOnEscape?: boolean;\r\n }\r\n ): Promise<TResult | null> {\r\n // 1️⃣ If same reference clicked again → toggle close\r\n if (this.activePopup && this.activePopup.reference === reference) {\r\n this.activePopup.cleanup(null);\r\n return Promise.resolve(null);\r\n }\r\n\r\n // 2️⃣ If another popup is open → close it first\r\n if (this.activePopup) {\r\n this.activePopup.cleanup(null);\r\n }\r\n\r\n // 3️⃣ Create new popup\r\n return new Promise<TResult | null>((resolve) => {\r\n const compRef = createComponent(component, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n // Add close() callback to component\r\n (compRef.instance as any).close = (result?: TResult) => cleanup(result ?? null);\r\n\r\n // Apply @Input() bindings\r\n if (options?.inputs) {\r\n Object.entries(options.inputs).forEach(([k, v]) => {\r\n (compRef.instance as any)[k] = v;\r\n });\r\n }\r\n\r\n document.body.appendChild(compRef.location.nativeElement);\r\n this.appRef.attachView(compRef.hostView);\r\n\r\n // Position via Floating-UI\r\n const cleanupAutoUpdate = autoUpdate(reference, compRef.location.nativeElement, () => {\r\n computePosition(reference, compRef.location.nativeElement, {\r\n placement: options?.placement ?? 'bottom-start',\r\n middleware: [offset(6), flip(), shift()],\r\n }).then(({ x, y }) => {\r\n Object.assign(compRef.location.nativeElement.style, {\r\n position: 'absolute',\r\n left: `${x}px`,\r\n top: `${y}px`,\r\n zIndex: '1080',\r\n });\r\n });\r\n });\r\n\r\n // Outside click & ESC handlers\r\n const handleClickOutside = (e: MouseEvent) => {\r\n const el = compRef.location.nativeElement;\r\n const target = e.target as Node;\r\n if (!el.contains(target) && !reference.contains(target)) {\r\n cleanup(null);\r\n }\r\n };\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') cleanup(null);\r\n };\r\n\r\n if (options?.closeOnOutsideClick !== false) {\r\n setTimeout(() => document.addEventListener('mousedown', handleClickOutside));\r\n }\r\n if (options?.closeOnEscape !== false) {\r\n document.addEventListener('keydown', handleEscape);\r\n }\r\n\r\n // ✅ The one true cleanup — handles all detach, resolve, destroy safely\r\n const cleanup = (result?: TResult | null) => {\r\n // Guard: if already cleaned up, skip\r\n if (!this.activePopup || this.activePopup.compRef !== compRef) return;\r\n\r\n cleanupAutoUpdate();\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n document.removeEventListener('keydown', handleEscape);\r\n this.appRef.detachView(compRef.hostView);\r\n compRef.destroy();\r\n\r\n this.activePopup = undefined;\r\n resolve(result ?? null);\r\n };\r\n\r\n // track active popup\r\n this.activePopup = { compRef, cleanup, reference };\r\n });\r\n }\r\n\r\n closeActive(result?: any) {\r\n if (this.activePopup) {\r\n this.activePopup.cleanup(result ?? null);\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, HostListener, Input, input, model, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { computePosition, offset, flip, shift, autoPlacement, hide } from '@floating-ui/dom';\r\n\r\nimport dayjs from \"dayjs\";\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\nimport { DateServiceService } from '../services/date-service.service';\r\nimport { FlexDualCalendarComponent } from \"../flex-dual-calendar/flex-dual-calendar.component\";\r\nimport { FlexCalendarSystemSwitchPosition } from '../core/types/flex-calendar-system-switch-position.type';\r\nimport { DeviceDetectorService } from '../services/device-detector.service';\r\nimport { FloatingUiService } from '../services/floating-ui.service';\r\n\r\n@Component({\r\n selector: 'flex-dual-datepicker',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './flex-dual-datepicker.component.html',\r\n styleUrl: './flex-dual-datepicker.component.css'\r\n})\r\n\r\nexport class FlexDualDatepickerComponent {\r\n\r\n @ViewChild('calendarButton') calendarButton?: ElementRef;\r\n @ViewChild('calendarDropdown') calendarDropdown?: ElementRef;\r\n\r\n @ViewChild(\"inputDiv\") inputDiv?: ElementRef;\r\n @ViewChild(\"modalDiv\") modalDiv?: ElementRef;\r\n\r\n value = model<any>();\r\n enabled = input<boolean>(true);\r\n cssClass = input<string>();\r\n format = input<string>(\"DD/MM/YYYY\");\r\n\r\n title = input<string>();\r\n calendarSwitchPosition = input<FlexCalendarSystemSwitchPosition>(\"title\");\r\n\r\n //selectedDate is needed to keep the current data for process\r\n selectedDate?: Date;\r\n\r\n calendar = model<FlexCalendarSystem>(\"gregory\");\r\n // protected _calendar: FlexCalendarSystem = \"gregory\";\r\n\r\n inputDate: string = \"\";\r\n isMobile = false;\r\n\r\n\r\n constructor(private dateService: DateServiceService, private deviceDetector: DeviceDetectorService,\r\n private floating: FloatingUiService\r\n ) {\r\n this.isMobile = deviceDetector.isMobile();\r\n\r\n effect(() => {\r\n //this._calendar = this.calendar();\r\n if (!this.selectedDate)\r\n return;\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n });\r\n\r\n effect(() => {\r\n const iso = this.value();\r\n if (iso) {\r\n const date = dayjs.utc(iso);\r\n if (date.isValid()) {\r\n this.selectedDate = date.toDate();\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.selectedDate = undefined;\r\n this.inputDate = \"\";\r\n });\r\n }\r\n\r\n\r\n\r\n switchCalendar() {\r\n if (this.calendar() == \"gregory\") {\r\n // this._calendar = \"islamic\";\r\n this.calendar.set(\"islamic\");\r\n }\r\n else {\r\n //this._calendar = \"gregory\";\r\n this.calendar.set(\"gregory\");\r\n }\r\n\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n }\r\n\r\n onDateSelectedFromCalender(e: Date) {\r\n this.inputDate = this.formatDate(e);\r\n\r\n this.updateDate(e);\r\n this.isOpen = false;\r\n // this.updateCalendar();\r\n }\r\n\r\n /** Triggered on blur OR Enter key */\r\n onManualDateEntered() {\r\n if (!this.inputDate) return;\r\n\r\n const parsed = this.parseInputDate(this.inputDate);\r\n if (parsed) {\r\n this.updateDate(parsed);\r\n } else {\r\n console.warn(\"Invalid date entered:\", this.inputDate);\r\n }\r\n }\r\n\r\n /** Reusable update method */\r\n private updateDate(d: Date) {\r\n this.selectedDate = d;\r\n this.inputDate = this.formatDate(d);\r\n this.value.set(d);\r\n }\r\n\r\n formatDate(date: Date): string {\r\n return this.dateService.format(date, this.calendar(), this.format());\r\n }\r\n\r\n private parseInputDate(str: string): Date | null | undefined {\r\n /*if the user clear the text in input box then we must accept as the user\r\n wants to remove date from the control so we will return null*/\r\n if (!str)\r\n return null;\r\n\r\n /*if any text entered in input box then we must try to parse it\r\n if parse success the date service will return the date else will return \r\n null or undefined.\r\n in this case since user entered some date may be he/she made mistake\r\n so we will should not show null or empty value, instead we will\r\n return current date or last selected date\r\n */\r\n var parsedDate = this.dateService.parse(str, this.calendar(), this.format());\r\n if (parsedDate)\r\n return parsedDate;\r\n\r\n //if parseDate is null this means user entered wrong date, in this case we will return\r\n //the last selected date.\r\n if (this.selectedDate) {\r\n return this.selectedDate;\r\n }\r\n\r\n //if last selected date is also null then we will return current date.\r\n return new Date();\r\n }\r\n\r\n\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.inputDiv?.nativeElement.contains(event.target)\r\n || this.modalDiv?.nativeElement.contains(event.target)\r\n || this.calendarDropdown?.nativeElement.contains(event.target)) {\r\n return\r\n }\r\n this.isOpen = false;\r\n // this.updateCalendar();\r\n }\r\n\r\n\r\n async openCalendar() {\r\n const button = this.calendarButton?.nativeElement!;\r\n\r\n const result = await this.floating.open(\r\n button,\r\n FlexDualCalendarComponent,\r\n {\r\n placement: 'bottom',\r\n inputs: {\r\n // You can pass any props here\r\n initialDate: this.selectedDate,\r\n mode: this.calendar,\r\n value: this.value\r\n },\r\n }\r\n );\r\n\r\n if (result) {\r\n //this.selectedDate = result;\r\n this.updateDate(result);\r\n }\r\n }\r\n\r\n\r\n isOpen = false;\r\n\r\n // toggleMenu() {\r\n // this.isOpen = !this.isOpen;\r\n\r\n // if (this.isMobile)\r\n // return;\r\n\r\n // this.updateCalendar();\r\n // }\r\n\r\n // updateCalendar() {\r\n // const button = this.calendarButton?.nativeElement!;\r\n // const calendar = this.calendarDropdown?.nativeElement!;\r\n\r\n // computePosition(button, calendar, {\r\n // placement: \"bottom\",\r\n // strategy: 'fixed',\r\n // middleware: [flip(), shift(), hide()]\r\n // }).then(({ x, y }) => {\r\n // Object.assign(calendar.style, {\r\n // left: `${x}px`,\r\n // top: `${y}px`,\r\n // visibility: !this.isOpen\r\n // ? 'hidden'\r\n // : 'visible',\r\n // });\r\n // });\r\n // }\r\n}\r\n","@if(calendarSwitchPosition() == 'title'){\r\n<div class=\"d-flex align-items-center gap-1\">\r\n <label>{{ title() }}</label>\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" style=\"cursor: pointer; padding-bottom: 1px; padding-top: 1px;\"\r\n (click)=\"switchCalendar()\">\r\n @if(calendar() == 'gregory') {G}\r\n @else{H}\r\n </button>\r\n</div>\r\n}\r\n<div class=\"input-group flex-nowrap\" #inputDiv>\r\n @if(calendarSwitchPosition() == 'inline'){\r\n <span class=\"input-group-text\" style=\"cursor: pointer;\" (click)=\"switchCalendar()\"> @if(calendar() == 'gregory') {G}\r\n @else{H}</span>\r\n }\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n <button #calendarButton class=\"btn btn-outline-secondary\" (click)=\"openCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, input, Input, output, Output, SimpleChanges } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'flex-table-paging',\r\n imports: [CommonModule, FormsModule, TranslateModule],\r\n templateUrl: './flex-table-paging.component.html',\r\n styleUrl: './flex-table-paging.component.css'\r\n})\r\nexport class FlexTablePagingComponent {\r\n\r\n @Input() pageIndex: number = 1;\r\n @Output() pageIndexChange = new EventEmitter<number>();\r\n\r\n @Input() pageSize: number = 10;\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n @Input() totalCount: number = 0;\r\n @Input() pageSizes: number[] = [10, 50, 100, 200, 400, 800];\r\n\r\n showTotalCount = input<boolean>(false);\r\n\r\n pageChange = output<{ skip: number, take: number }>();\r\n\r\n // detect external changes\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['totalCount'] && !changes['totalCount'].firstChange) {\r\n // Reset to page 1 if totalCount decreased or changed\r\n this.pageIndex = 1;\r\n }\r\n }\r\n\r\n get totalPages(): number {\r\n return Math.max(1, Math.ceil(this.totalCount / this.pageSize));\r\n }\r\n\r\n get pages(): number[] {\r\n return Array.from({ length: this.totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n onPageChange(e: any) {\r\n this.pageIndex = Number(e);\r\n this.pageChange.emit({\r\n skip: (this.pageIndex - 1) * this.pageSize,\r\n take: this.pageSize\r\n });\r\n }\r\n\r\n onPageSizeChange(e: any) {\r\n\r\n this.pageIndex = 1;\r\n this.pageSize = Number(e);\r\n\r\n this.pageSizeChange.emit(Number(e));\r\n\r\n this.pageChange.emit({\r\n skip: (this.pageIndex - 1) * this.pageSize,\r\n take: this.pageSize\r\n });\r\n }\r\n}\r\n","<div class=\"border-top\">\r\n <div class=\"d-flex align-items-center gap-2 p-2 small\">\r\n <div>{{ \"page-no\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageIndex\" (ngModelChange)=\"onPageChange($event)\">\r\n @for (p of pages; track $index) {\r\n <option [value]=\"p\">{{ p }}</option>\r\n }\r\n </select>\r\n <div>{{ \"page-size\" | translate }}</div>\r\n <select class=\"form-select w-auto\" [ngModel]=\"pageSize\" (ngModelChange)=\"onPageSizeChange($event)\">\r\n @for (size of pageSizes; track $index) {\r\n <option [value]=\"size\">{{ size }}</option>\r\n }\r\n </select>\r\n @if(showTotalCount()){\r\n <div class=\"ms-auto\">\r\n {{ \"total-count\" | translate }}: <strong>{{ totalCount }}</strong>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, ContentChild, ElementRef, output, ViewChild, TemplateRef, input, Input } from '@angular/core';\r\nimport { FlexColumnsComponent } from '../flex-grid/flex-grid-columns';\r\nimport { FlexTablePagingComponent } from \"../flex-table-paging/flex-table-paging.component\";\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { FlexSort } from './flex-sort';\r\nimport { FlexColumnComponent } from '../flex-grid/flex-grid-column';\r\n\r\n@Component({\r\n selector: 'flex-table',\r\n imports: [CommonModule, FlexTablePagingComponent, TranslateModule],\r\n templateUrl: './flex-table.component.html',\r\n styleUrl: './flex-table.component.css'\r\n})\r\n\r\nexport class FlexTableComponent {\r\n\r\n columns = Array.from({ length: 50 }, (_, index) => `Item ${index + 1}`);\r\n items = Array.from({ length: 50 }, (_, index) => `Item ${index + 1}`);\r\n\r\n enablePaging = input<boolean>(false);\r\n totalDataCount = input<number>(0);\r\n showTotalDataCount = input<boolean>(false);\r\n\r\n sorts: FlexSort[] = [];\r\n changeRequest = output<{ skip: number, take: number, sorts: FlexSort[] }>();\r\n\r\n pageChange = output<{ skip: number, take: number }>();\r\n /**\r\n * Paging\r\n */\r\n @Input() pageIndex: number = 1; // current page\r\n @Input() pageSize: number = 10; // selected page size\r\n @Input() pageSizes: number[] = [10, 50, 100, 200, 400, 800];\r\n\r\n selectedIndex: number = -1;\r\n\r\n @ContentChild(FlexColumnsComponent) gridColumns?: FlexColumnsComponent;\r\n\r\n @ViewChild(\"tableHeader\") tableHeader?: ElementRef<HTMLDivElement>;\r\n\r\n dataSource = input<any[]>([]);\r\n\r\n rowClicked = output<{ index: number, data: any }>();\r\n rowDblClicked = output<{ index: number, data: any }>();\r\n\r\n tableClass = input<string>();\r\n\r\n syncScroll(e: Event) {\r\n const body = e.target as HTMLElement;\r\n const header = this.tableHeader?.nativeElement; //document.querySelector('.grid-header');\r\n if (header) (header as HTMLElement).scrollLeft = body.scrollLeft;\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 onPageChange($event: { skip: number; take: number; }) {\r\n if (this.changeRequest) {\r\n this.changeRequest.emit({\r\n skip: (this.pageIndex - 1) * this.pageSize, take: this.pageSize, sorts: [...this.sorts]\r\n });\r\n return;\r\n }\r\n\r\n this.pageChange.emit({ skip: $event.skip, take: $event.take });\r\n }\r\n\r\n onSort(col: FlexColumnComponent, event?: MouseEvent) {\r\n\r\n if (!col.enableSort) return;\r\n\r\n const existingIndex = this.sorts.findIndex(s => s.field === col.sortField);\r\n\r\n if (existingIndex === -1) {\r\n // add ASC\r\n this.sorts.push({\r\n field: col.sortField!,\r\n direction: 'asc',\r\n });\r\n } else {\r\n const existing = this.sorts[existingIndex];\r\n\r\n if (existing.direction === 'asc') {\r\n existing.direction = 'desc';\r\n } else {\r\n // remove sort (ASC → DESC → NONE)\r\n this.sorts.splice(existingIndex, 1);\r\n }\r\n }\r\n\r\n //console.log(\"ok\");\r\n this.changeRequest.emit({\r\n skip: (this.pageIndex - 1) * this.pageSize, take: this.pageSize, sorts: [...this.sorts]\r\n });\r\n }\r\n\r\n getSort(field: string): FlexSort | undefined {\r\n return this.sorts.find(s => s.field === field);\r\n }\r\n\r\n\r\n}\r\n","<div class=\"table-layout\">\r\n <div class=\" table-header\" #tableHeader>\r\n <table class=\"grid-table table table-bordered mb-0\">\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 }\r\n <col style=\"width: auto; min-width: 0;\">\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\" (click)=\"onSort(col, $event)\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n {{ col.headerText() }}\r\n }\r\n\r\n @if(col.enableSort && col.sortField){\r\n\r\n @if(getSort(col.sortField!); as sort){\r\n @if(sort.direction == \"asc\"){\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-down\"></i></span>\r\n }\r\n @else {\r\n <span class=\"bg-warning\"><i class=\"bi bi-arrow-up\"></i></span>\r\n }\r\n\r\n }\r\n @else{\r\n <span><i class=\"bi bi-arrow-down-up\"></i></span>\r\n }\r\n\r\n\r\n }\r\n </th>\r\n }\r\n <td></td>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"content-area\" (scroll)=\"syncScroll($event)\">\r\n <table class=\"grid-table table table-bordered\" [ngClass]=\"tableClass()\">\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 <col style=\"width: auto; min-width: 0;\">\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 class=\"text-wrap text-break\">\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row,\r\n rowIndex: (pageIndex - 1) * pageSize + i,\r\n localIndex: i }\">\r\n </ng-container>\r\n } @else {\r\n {{ row[col.field] }}\r\n }\r\n </td>\r\n\r\n }<td></td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(enablePaging()){\r\n <flex-table-paging [totalCount]=\"totalDataCount()\" (pageChange)=\"onPageChange($event)\"\r\n [showTotalCount]=\"showTotalDataCount()\" [(pageIndex)]=\"pageIndex\" [(pageSize)]=\"pageSize\"\r\n [pageSizes]=\"pageSizes\"></flex-table-paging>\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-table/flex-sort';\r\nexport * from './lib/flex-combo-datepicker/flex-combo-datepicker.component';\r\nexport * from './lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component';\r\nexport * from './lib/flex-container/flex-container.component';\r\nexport * from \"./lib/flex-dual-datepicker/flex-dual-datepicker.component\";\r\nexport * from \"./lib/flex-dual-calendar/flex-dual-calendar.component\";\r\nexport * from \"./lib/flex-table/flex-table.component\";\r\nexport * from \"./lib/flex-table-paging/flex-table-paging.component\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","hijriFmt","hijriMonthNamesEn","hijriMonthNamesAr","weekDaysEn","weekDaysAr","hijriFromGregorian","compareHijri","findGregorianForHijri","i1.DateServiceService","i1","i2.DeviceDetectorService","i3.FloatingUiService","i4"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -43,7 +43,7 @@ declare class FlexPaginationComponent implements OnInit {
|
|
|
43
43
|
prevPage(): void;
|
|
44
44
|
nextPage(): void;
|
|
45
45
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlexPaginationComponent, never>;
|
|
46
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlexPaginationComponent, "flex-pagination", never, { "rowCount": { "alias": "rowCount"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
|
|
46
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlexPaginationComponent, "flex-pagination", never, { "rowCount": { "alias": "rowCount"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
declare class FlexColumnComponent {
|
|
@@ -349,8 +349,12 @@ declare class FlexTableComponent {
|
|
|
349
349
|
skip: number;
|
|
350
350
|
take: number;
|
|
351
351
|
}>;
|
|
352
|
-
|
|
352
|
+
/**
|
|
353
|
+
* Paging
|
|
354
|
+
*/
|
|
355
|
+
pageIndex: number;
|
|
353
356
|
pageSize: number;
|
|
357
|
+
pageSizes: number[];
|
|
354
358
|
selectedIndex: number;
|
|
355
359
|
gridColumns?: FlexColumnsComponent;
|
|
356
360
|
tableHeader?: ElementRef<HTMLDivElement>;
|
|
@@ -367,8 +371,6 @@ declare class FlexTableComponent {
|
|
|
367
371
|
syncScroll(e: Event): void;
|
|
368
372
|
onRowDblClick(index: number, data: any): void;
|
|
369
373
|
onRowClick(index: number, data: any): void;
|
|
370
|
-
skip: number;
|
|
371
|
-
take: number;
|
|
372
374
|
onPageChange($event: {
|
|
373
375
|
skip: number;
|
|
374
376
|
take: number;
|
|
@@ -376,12 +378,14 @@ declare class FlexTableComponent {
|
|
|
376
378
|
onSort(col: FlexColumnComponent, event?: MouseEvent): void;
|
|
377
379
|
getSort(field: string): FlexSort | undefined;
|
|
378
380
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlexTableComponent, never>;
|
|
379
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlexTableComponent, "flex-table", never, { "enablePaging": { "alias": "enablePaging"; "required": false; "isSignal": true; }; "totalDataCount": { "alias": "totalDataCount"; "required": false; "isSignal": true; }; "showTotalDataCount": { "alias": "showTotalDataCount"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "tableClass": { "alias": "tableClass"; "required": false; "isSignal": true; }; }, { "changeRequest": "changeRequest"; "pageChange": "pageChange"; "rowClicked": "rowClicked"; "rowDblClicked": "rowDblClicked"; }, ["gridColumns"], never, true, never>;
|
|
381
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlexTableComponent, "flex-table", never, { "enablePaging": { "alias": "enablePaging"; "required": false; "isSignal": true; }; "totalDataCount": { "alias": "totalDataCount"; "required": false; "isSignal": true; }; "showTotalDataCount": { "alias": "showTotalDataCount"; "required": false; "isSignal": true; }; "pageIndex": { "alias": "pageIndex"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "pageSizes": { "alias": "pageSizes"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "tableClass": { "alias": "tableClass"; "required": false; "isSignal": true; }; }, { "changeRequest": "changeRequest"; "pageChange": "pageChange"; "rowClicked": "rowClicked"; "rowDblClicked": "rowDblClicked"; }, ["gridColumns"], never, true, never>;
|
|
380
382
|
}
|
|
381
383
|
|
|
382
384
|
declare class FlexTablePagingComponent {
|
|
383
385
|
pageIndex: number;
|
|
386
|
+
pageIndexChange: EventEmitter<number>;
|
|
384
387
|
pageSize: number;
|
|
388
|
+
pageSizeChange: EventEmitter<number>;
|
|
385
389
|
totalCount: number;
|
|
386
390
|
pageSizes: number[];
|
|
387
391
|
showTotalCount: _angular_core.InputSignal<boolean>;
|
|
@@ -395,7 +399,7 @@ declare class FlexTablePagingComponent {
|
|
|
395
399
|
onPageChange(e: any): void;
|
|
396
400
|
onPageSizeChange(e: any): void;
|
|
397
401
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlexTablePagingComponent, never>;
|
|
398
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlexTablePagingComponent, "flex-table-paging", never, { "pageIndex": { "alias": "pageIndex"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "totalCount": { "alias": "totalCount"; "required": false; }; "pageSizes": { "alias": "pageSizes"; "required": false; }; "showTotalCount": { "alias": "showTotalCount"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
|
|
402
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlexTablePagingComponent, "flex-table-paging", never, { "pageIndex": { "alias": "pageIndex"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "totalCount": { "alias": "totalCount"; "required": false; }; "pageSizes": { "alias": "pageSizes"; "required": false; }; "showTotalCount": { "alias": "showTotalCount"; "required": false; "isSignal": true; }; }, { "pageIndexChange": "pageIndexChange"; "pageSizeChange": "pageSizeChange"; "pageChange": "pageChange"; }, never, never, true, never>;
|
|
399
403
|
}
|
|
400
404
|
|
|
401
405
|
export { ComboDatePickerComponent, FlexColumnComponent, FlexColumnsComponent, FlexContainerComponent, FlexDualCalendarComponent, FlexDualDatepickerComponent, FlexGridComponent, FlexPaginationComponent, FlexPanelComponent, FlexTableComponent, FlexTablePagingComponent, HijriDatepickerComponent };
|