minahil 0.0.1 → 0.0.2

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.
@@ -5,6 +5,10 @@ import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
5
5
  import * as i1 from '@angular/common';
6
6
  import { CommonModule } from '@angular/common';
7
7
  import { ScrollingModule } from '@angular/cdk/scrolling';
8
+ import * as i3 from '@angular/forms';
9
+ import { FormsModule } from '@angular/forms';
10
+ import * as i2$1 from '@ng-select/ng-select';
11
+ import { NgSelectModule } from '@ng-select/ng-select';
8
12
 
9
13
  class MinahilService {
10
14
  constructor() { }
@@ -469,6 +473,125 @@ class PaginatedResult {
469
473
  data = [];
470
474
  }
471
475
 
476
+ class RscPaginationComponent {
477
+ pageSize = 10;
478
+ total = 0;
479
+ changePageSize = new EventEmitter();
480
+ pageChanged = new EventEmitter();
481
+ pages = [];
482
+ activePage = 1;
483
+ activePageChange = new EventEmitter();
484
+ pager = 1;
485
+ isMenuHovered = false;
486
+ // ✅ Added
487
+ startingPage = 0;
488
+ endingPage = 0;
489
+ constructor() {
490
+ const pageCount = this.getPageCount();
491
+ this.pages = this.getArrayOfPage(pageCount);
492
+ // ✅ Added
493
+ this.updateStartEndPages();
494
+ }
495
+ ngOnChanges() {
496
+ const pageCount = this.getPageCount();
497
+ this.pages = this.getArrayOfPage(pageCount);
498
+ if (this.activePage > pageCount) {
499
+ this.activePage = pageCount || 1;
500
+ this.activePageChange.emit(this.activePage);
501
+ }
502
+ if (this.activePage < 1) {
503
+ this.activePage = 1;
504
+ this.activePageChange.emit(this.activePage);
505
+ }
506
+ // ✅ Added
507
+ this.updateStartEndPages();
508
+ }
509
+ getTotalPagesValue() {
510
+ const totalPages = Math.ceil(this.total / this.pageSize);
511
+ return totalPages;
512
+ }
513
+ // ✅ Added method
514
+ updateStartEndPages() {
515
+ this.startingPage = this.pages.length > 0 ? this.pages[0] : 0;
516
+ this.endingPage = this.pages.length > 0
517
+ ? Math.min(this.startingPage + 2, this.pages[this.pages.length - 1])
518
+ : 0;
519
+ }
520
+ getPageCount() {
521
+ let totalPage = 0;
522
+ if (!!this.total && !!this.pageSize)
523
+ if (this.total > 0 && this.pageSize > 0) {
524
+ const pageCount = this.total / this.pageSize;
525
+ const roundedPageCount = Math.floor(pageCount);
526
+ totalPage = roundedPageCount < pageCount ? roundedPageCount + 1 : roundedPageCount;
527
+ }
528
+ return totalPage;
529
+ }
530
+ getArrayOfPage(pageCount) {
531
+ const pageArray = [];
532
+ if (pageCount > 0) {
533
+ for (let i = 1; i <= pageCount; i++)
534
+ pageArray.push(i);
535
+ }
536
+ return pageArray;
537
+ }
538
+ paginate() {
539
+ var from = this.activePage === 1 ? this.activePage - 1 : this.activePage - 2;
540
+ return this.pages.slice(from, this.activePage + 4);
541
+ }
542
+ onClickPage(pageNumber) {
543
+ if (this.activePage !== pageNumber) {
544
+ if (pageNumber >= 1 && pageNumber <= this.pages.length) {
545
+ this.activePage = pageNumber;
546
+ this.pageChanged.emit(this.activePage);
547
+ }
548
+ }
549
+ }
550
+ changeSize(event) {
551
+ this.changePageSize.emit(this.pageSize);
552
+ // ✅ Recalculate pages on size change
553
+ const pageCount = this.getPageCount();
554
+ this.pages = this.getArrayOfPage(pageCount);
555
+ this.updateStartEndPages();
556
+ }
557
+ get startIndex() {
558
+ if (!this.total || this.total === 0)
559
+ return 0;
560
+ return (this.activePage - 1) * this.pageSize + 1;
561
+ }
562
+ get endIndex() {
563
+ if (!this.total || this.total === 0)
564
+ return 0;
565
+ const end = this.activePage * this.pageSize;
566
+ return end > this.total ? this.total : end;
567
+ }
568
+ get totalItems() {
569
+ return this.total || 0;
570
+ }
571
+ // ✅ Added getTotalPages()
572
+ getTotalPages() {
573
+ return this.getPageCount();
574
+ }
575
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RscPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
576
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: RscPaginationComponent, isStandalone: true, selector: "app-rsc-pagination", inputs: { pageSize: "pageSize", total: "total", activePage: "activePage" }, outputs: { changePageSize: "changePageSize", pageChanged: "pageChanged", activePageChange: "activePageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"px-4 py-3 border-t border-[#EBEDF3] rounded-b-xl\">\n <div class=\"flex flex-col lg:flex-row items-center justify-between gap-3\">\n\n <!-- Page size dropdown -->\n <div class=\"flex gap-3 items-center\" *ngIf=\"true\">\n <p class=\"text-xs text-[#15191E] font-medium\">Rows per page</p>\n <ng-select\n [(ngModel)]=\"pageSize\"\n (change)=\"changeSize($event)\"\n placeholder=\"page size\"\n [searchable]=\"false\"\n [clearable]=\"false\"\n class=\"border border-[#E3E6EE] rounded shadow-none text-xs leading-6 font-medium text-[#15191E] focus:shadow-none lg:w-36 w-16 sm-dropdown\"\n >\n <ng-option *ngFor=\"let opt of [25, 50, 75, 100]\" [value]=\"opt\">{{ opt }}</ng-option>\n </ng-select>\n </div>\n\n <!-- showing entries -->\n <p class=\"text-xs text-[#15191E] font-medium\">\n Showing <span>{{ startIndex }}</span> to\n <span>{{ endIndex > totalItems ? totalItems : endIndex }}</span> of\n <span>{{ totalItems }}</span> entries\n </p>\n\n <!-- Pagination main -->\n <nav class=\"flex gap-1.5 items-center\">\n\n <!-- Page count (optional like DoPlanar top numbers) -->\n <p class=\"text-xs text-[#15191E] font-medium lg:block hidden\">\n <span>{{ startingPage || 0 }}</span> -\n <span>{{ endingPage || 0 }}</span> of\n <span>{{ getTotalPages() || 0 }}</span>\n </p>\n\n <ul class=\"flex items-center space-x-1 text-[13px] text-[#B9BBC6]\">\n\n <!-- Previous -->\n <li>\n <a\n href=\"javascript:void(0)\"\n (click)=\"onClickPage(activePage - 1)\"\n class=\"flex items-center justify-center size-7 text-[13px] leading-6 text-[#15191E] rounded-md hover:bg-[#F8F8FA]\"\n [ngClass]=\"{'cursor-not-allowed': activePage === 1}\"\n >\n <img\n *ngIf=\"activePage === 1\"\n src=\"assets/images/icons/arrows/pagination-left-gray.svg\"\n alt=\"Left Arrow Disabled\"\n />\n <img\n *ngIf=\"activePage !== 1\"\n src=\"assets/images/icons/arrows/pagination-left-black.svg\"\n alt=\"Left Arrow\"\n />\n </a>\n </li>\n\n <!-- Page Numbers -->\n <li *ngFor=\"let item of paginate() | slice:0:3\">\n <a\n (click)=\"onClickPage(item)\"\n href=\"javascript:void(0)\"\n class=\"flex items-center justify-center size-7 leading-6 rounded-lg\"\n [ngClass]=\"item === activePage\n ? 'text-[#15191E] bg-[#F8F8FA] hover:bg-[#F8F8FA]'\n : 'hover:bg-[#F8F8FA] hover:text-[#15191E]'\">\n {{ item }}\n </a>\n </li>\n\n <!-- Next -->\n <li>\n <a\n href=\"javascript:void(0)\"\n (click)=\"onClickPage(activePage + 1)\"\n class=\"flex items-center justify-center size-7 text-[13px] leading-6 text-[#15191E] rounded-md hover:bg-[#F8F8FA]\"\n [ngClass]=\"{'cursor-not-allowed': activePage === getTotalPages()}\"\n >\n <img\n *ngIf=\"activePage === getTotalPages()\"\n src=\"assets/images/icons/arrows/pagination-right-gray.svg\"\n alt=\"Right Arrow Disabled\"\n />\n <img\n *ngIf=\"activePage !== getTotalPages()\"\n src=\"assets/images/icons/arrows/pagination-right-black.svg\"\n alt=\"Right Arrow\"\n />\n </a>\n </li>\n\n </ul>\n </nav>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i2$1.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }, { kind: "component", type: i2$1.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }] });
577
+ }
578
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RscPaginationComponent, decorators: [{
579
+ type: Component,
580
+ args: [{ selector: 'app-rsc-pagination', standalone: true, imports: [CommonModule, NgSelectModule, FormsModule], template: "<div class=\"px-4 py-3 border-t border-[#EBEDF3] rounded-b-xl\">\n <div class=\"flex flex-col lg:flex-row items-center justify-between gap-3\">\n\n <!-- Page size dropdown -->\n <div class=\"flex gap-3 items-center\" *ngIf=\"true\">\n <p class=\"text-xs text-[#15191E] font-medium\">Rows per page</p>\n <ng-select\n [(ngModel)]=\"pageSize\"\n (change)=\"changeSize($event)\"\n placeholder=\"page size\"\n [searchable]=\"false\"\n [clearable]=\"false\"\n class=\"border border-[#E3E6EE] rounded shadow-none text-xs leading-6 font-medium text-[#15191E] focus:shadow-none lg:w-36 w-16 sm-dropdown\"\n >\n <ng-option *ngFor=\"let opt of [25, 50, 75, 100]\" [value]=\"opt\">{{ opt }}</ng-option>\n </ng-select>\n </div>\n\n <!-- showing entries -->\n <p class=\"text-xs text-[#15191E] font-medium\">\n Showing <span>{{ startIndex }}</span> to\n <span>{{ endIndex > totalItems ? totalItems : endIndex }}</span> of\n <span>{{ totalItems }}</span> entries\n </p>\n\n <!-- Pagination main -->\n <nav class=\"flex gap-1.5 items-center\">\n\n <!-- Page count (optional like DoPlanar top numbers) -->\n <p class=\"text-xs text-[#15191E] font-medium lg:block hidden\">\n <span>{{ startingPage || 0 }}</span> -\n <span>{{ endingPage || 0 }}</span> of\n <span>{{ getTotalPages() || 0 }}</span>\n </p>\n\n <ul class=\"flex items-center space-x-1 text-[13px] text-[#B9BBC6]\">\n\n <!-- Previous -->\n <li>\n <a\n href=\"javascript:void(0)\"\n (click)=\"onClickPage(activePage - 1)\"\n class=\"flex items-center justify-center size-7 text-[13px] leading-6 text-[#15191E] rounded-md hover:bg-[#F8F8FA]\"\n [ngClass]=\"{'cursor-not-allowed': activePage === 1}\"\n >\n <img\n *ngIf=\"activePage === 1\"\n src=\"assets/images/icons/arrows/pagination-left-gray.svg\"\n alt=\"Left Arrow Disabled\"\n />\n <img\n *ngIf=\"activePage !== 1\"\n src=\"assets/images/icons/arrows/pagination-left-black.svg\"\n alt=\"Left Arrow\"\n />\n </a>\n </li>\n\n <!-- Page Numbers -->\n <li *ngFor=\"let item of paginate() | slice:0:3\">\n <a\n (click)=\"onClickPage(item)\"\n href=\"javascript:void(0)\"\n class=\"flex items-center justify-center size-7 leading-6 rounded-lg\"\n [ngClass]=\"item === activePage\n ? 'text-[#15191E] bg-[#F8F8FA] hover:bg-[#F8F8FA]'\n : 'hover:bg-[#F8F8FA] hover:text-[#15191E]'\">\n {{ item }}\n </a>\n </li>\n\n <!-- Next -->\n <li>\n <a\n href=\"javascript:void(0)\"\n (click)=\"onClickPage(activePage + 1)\"\n class=\"flex items-center justify-center size-7 text-[13px] leading-6 text-[#15191E] rounded-md hover:bg-[#F8F8FA]\"\n [ngClass]=\"{'cursor-not-allowed': activePage === getTotalPages()}\"\n >\n <img\n *ngIf=\"activePage === getTotalPages()\"\n src=\"assets/images/icons/arrows/pagination-right-gray.svg\"\n alt=\"Right Arrow Disabled\"\n />\n <img\n *ngIf=\"activePage !== getTotalPages()\"\n src=\"assets/images/icons/arrows/pagination-right-black.svg\"\n alt=\"Right Arrow\"\n />\n </a>\n </li>\n\n </ul>\n </nav>\n </div>\n</div>\n" }]
581
+ }], ctorParameters: () => [], propDecorators: { pageSize: [{
582
+ type: Input
583
+ }], total: [{
584
+ type: Input
585
+ }], changePageSize: [{
586
+ type: Output
587
+ }], pageChanged: [{
588
+ type: Output
589
+ }], activePage: [{
590
+ type: Input
591
+ }], activePageChange: [{
592
+ type: Output
593
+ }] } });
594
+
472
595
  /*
473
596
  * Public API Surface of minahil
474
597
  */
@@ -477,5 +600,5 @@ class PaginatedResult {
477
600
  * Generated bundle index. Do not edit.
478
601
  */
479
602
 
480
- export { GenericTableComponent, MinahilComponent, MinahilModule, MinahilService, PaginatedResult, TooltipDirective };
603
+ export { GenericTableComponent, MinahilComponent, MinahilModule, MinahilService, PaginatedResult, RscPaginationComponent, TooltipDirective };
481
604
  //# sourceMappingURL=minahil.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"minahil.mjs","sources":["../../../projects/minahil/src/lib/minahil.service.ts","../../../projects/minahil/src/lib/minahil.component.ts","../../../projects/minahil/src/lib/minahil.module.ts","../../../projects/minahil/src/lib/directives/tooltip.directive.ts","../../../projects/minahil/src/lib/generic-table/generic-table.component.ts","../../../projects/minahil/src/lib/generic-table/generic-table.component.html","../../../projects/minahil/src/lib/models/table.model.ts","../../../projects/minahil/src/public-api.ts","../../../projects/minahil/src/minahil.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MinahilService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-minahil',\r\n template: `\r\n <p>\r\n minahil works!\r\n </p>\r\n `,\r\n styles: [\r\n ]\r\n})\r\nexport class MinahilComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n})\r\nexport class MinahilModule {}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n Renderer2,\r\n OnDestroy,\r\n OnInit,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appTooltip]',\r\n standalone: true,\r\n})\r\nexport class TooltipDirective implements OnInit, OnChanges, OnDestroy {\r\n @Input('appTooltip') tooltipContent: string | string[] = '';\r\n @Input('appTooltipPosition') tooltipPosition:\r\n | 'left'\r\n | 'right'\r\n | 'top'\r\n | 'bottom' = 'right';\r\n\r\n private tooltipElement: HTMLElement | null = null;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n ngOnInit(): void {\r\n this.createTooltip();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['tooltipContent'] && !changes['tooltipContent'].firstChange) {\r\n this.updateTooltipContent();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeTooltip();\r\n }\r\n\r\n updateTooltipContent() {\r\n // If tooltip doesn't exist yet and content is now available, create it\r\n if (!this.tooltipElement && !this.isTooltipContentEmpty()) {\r\n this.createTooltip();\r\n return;\r\n }\r\n\r\n if (!this.tooltipElement) return;\r\n if (this.isTooltipContentEmpty()) return;\r\n\r\n // remove old .text nodes\r\n Array.from(this.tooltipElement.querySelectorAll('.text')).forEach((el) =>\r\n this.renderer.removeChild(this.tooltipElement, el)\r\n );\r\n\r\n this.appendContent();\r\n }\r\n\r\n appendContent() {\r\n if (!this.tooltipElement) return;\r\n\r\n const contentLines = Array.isArray(this.tooltipContent)\r\n ? this.tooltipContent\r\n : [this.tooltipContent];\r\n\r\n contentLines.forEach((line: string) => {\r\n const div = this.renderer.createElement('div');\r\n this.renderer.addClass(div, 'text');\r\n if (line?.trim().startsWith('<')) {\r\n div.innerHTML = line;\r\n } else {\r\n const text = this.renderer.createText(line ?? '');\r\n this.renderer.appendChild(div, text);\r\n }\r\n this.renderer.appendChild(this.tooltipElement!, div);\r\n });\r\n }\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter() {\r\n if (this.tooltipElement) {\r\n this.setTooltipPosition();\r\n this.setStyle(this.tooltipElement, {\r\n visibility: 'visible',\r\n opacity: '1',\r\n });\r\n this.renderer.setStyle(document.body, 'overflow-x', 'hidden'); // ✅ temporarily lock horizontal scroll\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave() {\r\n if (this.tooltipElement) {\r\n this.setStyle(this.tooltipElement, {\r\n visibility: 'hidden',\r\n opacity: '0',\r\n });\r\n this.renderer.removeStyle(document.body, 'overflow-x'); // ✅ restore scroll when tooltip hides\r\n }\r\n }\r\n\r\n @HostListener('window:scroll')\r\n @HostListener('window:resize')\r\n onWindowChange() {\r\n if (this.tooltipElement?.style.visibility === 'visible') {\r\n this.setTooltipPosition();\r\n }\r\n }\r\n private isTooltipContentEmpty(): boolean {\r\n if (typeof this.tooltipContent === 'string') {\r\n return !this.tooltipContent.trim();\r\n } else if (Array.isArray(this.tooltipContent)) {\r\n return (\r\n this.tooltipContent.length === 0 ||\r\n this.tooltipContent.every((line) => !line.trim())\r\n );\r\n }\r\n return true;\r\n }\r\n private createTooltip() {\r\n if (this.isTooltipContentEmpty()) return;\r\n this.tooltipElement = this.renderer.createElement('div');\r\n this.renderer.addClass(this.tooltipElement, 'tooltip-content');\r\n\r\n // Add content\r\n const contentLines = Array.isArray(this.tooltipContent)\r\n ? this.tooltipContent\r\n : [this.tooltipContent];\r\n contentLines.forEach((line: string) => {\r\n const div = this.renderer.createElement('div');\r\n this.renderer.addClass(div, 'text');\r\n // this.renderer.appendChild(div, this.renderer.createText(line));\r\n // Check if the line contains HTML\r\n if (line.trim().startsWith('<')) {\r\n div.innerHTML = line;\r\n } else {\r\n const text = this.renderer.createText(line);\r\n this.renderer.appendChild(div, text);\r\n }\r\n this.renderer.appendChild(this.tooltipElement!, div);\r\n });\r\n\r\n // Add triangle\r\n const triangle = this.renderer.createElement('div');\r\n this.renderer.addClass(triangle, 'tooltip-triangle');\r\n this.renderer.appendChild(this.tooltipElement, triangle);\r\n\r\n // Set base styles\r\n this.setStyle(this.tooltipElement!, {\r\n position: 'fixed',\r\n visibility: 'hidden',\r\n opacity: '0',\r\n zIndex: '9999',\r\n transition: 'opacity 0.3s ease, visibility 0.3s ease',\r\n });\r\n\r\n this.renderer.appendChild(document.body, this.tooltipElement);\r\n }\r\n\r\n private setTooltipPosition() {\r\n if (!this.tooltipElement) return;\r\n\r\n const hostRect = this.el.nativeElement.getBoundingClientRect();\r\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\r\n\r\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\r\n const scrollLeft = window.scrollX || document.documentElement.scrollLeft;\r\n\r\n const triangle = this.tooltipElement.querySelector(\r\n '.tooltip-triangle'\r\n ) as HTMLElement;\r\n const padding = 10;\r\n\r\n let top = 0,\r\n left = 0;\r\n\r\n // Position logic\r\n switch (this.tooltipPosition) {\r\n case 'right':\r\n case 'left':\r\n top = hostRect.top + scrollTop + hostRect.height / 2;\r\n left =\r\n this.tooltipPosition === 'right'\r\n ? hostRect.right + scrollLeft + padding\r\n : hostRect.left + scrollLeft - tooltipRect.width - padding;\r\n\r\n // Auto flip if out of viewport\r\n if (\r\n this.tooltipPosition === 'right' &&\r\n left + tooltipRect.width > window.innerWidth\r\n ) {\r\n left = hostRect.left + scrollLeft - tooltipRect.width - padding;\r\n } else if (this.tooltipPosition === 'left' && left < 0) {\r\n left = hostRect.right + scrollLeft + padding;\r\n }\r\n\r\n this.setStyle(this.tooltipElement, {\r\n transform: 'translateY(-50%)',\r\n });\r\n\r\n this.setTriangleStyles(\r\n triangle,\r\n this.tooltipPosition,\r\n left < hostRect.left + scrollLeft\r\n );\r\n break;\r\n\r\n case 'top':\r\n case 'bottom':\r\n left =\r\n hostRect.left +\r\n scrollLeft +\r\n hostRect.width / 2 -\r\n tooltipRect.width / 2;\r\n top =\r\n this.tooltipPosition === 'top'\r\n ? hostRect.top + scrollTop - tooltipRect.height - padding\r\n : hostRect.bottom + scrollTop + padding;\r\n\r\n // Prevent overflow\r\n left = Math.max(\r\n 10,\r\n Math.min(left, window.innerWidth - tooltipRect.width - 10)\r\n );\r\n\r\n this.setStyle(this.tooltipElement, {\r\n transform: 'translateX(0)',\r\n });\r\n\r\n this.setTriangleStyles(triangle, this.tooltipPosition);\r\n break;\r\n }\r\n\r\n this.setStyle(this.tooltipElement, {\r\n top: `${top}px`,\r\n left: `${left}px`,\r\n });\r\n }\r\n\r\n private setTriangleStyles(\r\n triangle: HTMLElement,\r\n position: 'left' | 'right' | 'top' | 'bottom',\r\n flipped: boolean = false\r\n ) {\r\n if (!triangle) return;\r\n\r\n const base = {\r\n top: '',\r\n left: '',\r\n right: '',\r\n bottom: '',\r\n transform: '',\r\n borderColor: '',\r\n };\r\n\r\n let styles: any = { ...base };\r\n\r\n switch (position) {\r\n case 'right':\r\n styles = flipped\r\n ? {\r\n left: '100%',\r\n top: '50%',\r\n transform: 'translateY(-50%) translateX(0)',\r\n borderColor: 'transparent transparent transparent #1a1a1a',\r\n }\r\n : {\r\n left: '-15px',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n borderColor: 'transparent #1a1a1a transparent transparent',\r\n };\r\n break;\r\n\r\n case 'left':\r\n styles = flipped\r\n ? {\r\n left: '100%',\r\n top: '50%',\r\n transform: 'translateY(-50%) translateX(0)',\r\n borderColor: 'transparent transparent transparent #1a1a1a',\r\n }\r\n : {\r\n left: '-15px',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n borderColor: 'transparent #1a1a1a transparent transparent',\r\n };\r\n break;\r\n\r\n case 'top':\r\n styles = {\r\n bottom: '-15px',\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n borderColor: '#1a1a1a transparent transparent transparent',\r\n };\r\n break;\r\n\r\n case 'bottom':\r\n styles = {\r\n top: '-15px',\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n borderColor: 'transparent transparent #1a1a1a transparent',\r\n };\r\n break;\r\n }\r\n\r\n this.setStyle(triangle, styles);\r\n }\r\n\r\n private removeTooltip() {\r\n if (this.tooltipElement) {\r\n this.renderer.removeChild(document.body, this.tooltipElement);\r\n this.tooltipElement = null;\r\n }\r\n }\r\n\r\n // Utility function to apply multiple styles\r\n private setStyle(el: HTMLElement, styles: { [key: string]: string }) {\r\n Object.entries(styles).forEach(([prop, value]) => {\r\n this.renderer.setStyle(el, prop, value);\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n CdkDragDrop,\r\n moveItemInArray,\r\n CdkDragMove,\r\n CdkDragStart,\r\n DragDropModule,\r\n} from '@angular/cdk/drag-drop';\r\nimport {\r\n TableColumn,\r\n TableAction,\r\n PaginatedResult,\r\n} from '../models/table.model';\r\nimport { TooltipDirective } from '../directives/tooltip.directive';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n\r\n@Component({\r\n selector: 'lib-generic-table',\r\n standalone: true,\r\n imports: [TooltipDirective, CommonModule, DragDropModule, ScrollingModule],\r\n templateUrl: './generic-table.component.html',\r\n styleUrls: ['./generic-table.component.css'],\r\n})\r\nexport class GenericTableComponent<T = any> {\r\n @Input() draggable: boolean = false;\r\n @Input() columns: TableColumn<T>[] = [];\r\n @Input() result!: PaginatedResult<T>;\r\n @Input() actions: TableAction<T>[] = [];\r\n\r\n @Input() hasPermission: boolean = true;\r\n\r\n @Output() actionClick = new EventEmitter<{\r\n action: string;\r\n row: T;\r\n }>();\r\n\r\n @Output() sortChange = new EventEmitter<{\r\n columnIndex: number;\r\n column: TableColumn<T>;\r\n direction: 'asc' | 'desc';\r\n }>();\r\n @Output() dragDropChange = new EventEmitter<T[]>();\r\n sortColumn?: keyof T;\r\n sortDirection: 'asc' | 'desc' = 'asc';\r\n\r\n @ViewChild('tableScrollContainer', { static: false })\r\n tableScrollContainer!: ElementRef<HTMLDivElement>;\r\n\r\n /* ---------- Sorting ---------- */\r\n sort(column: TableColumn<T>, index: number) {\r\n if (!column.sortable || !column.field) return;\r\n\r\n // Toggle sort direction\r\n this.sortDirection =\r\n this.sortColumn === column.field\r\n ? this.sortDirection === 'asc'\r\n ? 'desc'\r\n : 'asc'\r\n : 'asc';\r\n\r\n this.sortColumn = column.field;\r\n\r\n // Emit sort change separately\r\n this.sortChange.emit({\r\n columnIndex: index,\r\n column,\r\n direction: this.sortDirection,\r\n });\r\n }\r\n\r\n /* ---------- Visibility ---------- */\r\n isColumnVisible(column: TableColumn<T>): boolean {\r\n return column.visible !== false;\r\n }\r\n\r\n /* ---------- Cell Value ---------- */\r\n getCellValue(row: T, column: TableColumn<T>): string {\r\n if (column.formatter) {\r\n return column.formatter(row);\r\n }\r\n if (column.field) {\r\n return String(row[column.field] ?? '');\r\n }\r\n return '';\r\n }\r\n\r\n /* ---------- Actions ---------- */\r\n emitAction(action: TableAction<T>, row: T) {\r\n this.actionClick.emit({\r\n action: action.name,\r\n row,\r\n });\r\n }\r\n\r\n dropList(event: CdkDragDrop<T[]>) {\r\n if (!this.draggable || !this.result?.data) return;\r\n\r\n moveItemInArray(this.result.data, event.previousIndex, event.currentIndex);\r\n\r\n // Update existing sortOrder on T\r\n this.result.data.forEach((item: any, index) => {\r\n item.sortOrder = index + 1;\r\n });\r\n\r\n // Emit reordered list\r\n this.dragDropChange.emit(this.result.data);\r\n }\r\n\r\n onDragMoved(event: CdkDragMove<any>) {\r\n if (!this.tableScrollContainer) return;\r\n\r\n const container = this.tableScrollContainer.nativeElement;\r\n const rect = container.getBoundingClientRect();\r\n const pointerY = event.pointerPosition.y - rect.top;\r\n\r\n const threshold = 80;\r\n const maxSpeed = 25;\r\n\r\n if (pointerY < threshold) {\r\n const intensity = 1 - pointerY / threshold;\r\n container.scrollTop -= Math.min(maxSpeed, intensity * maxSpeed);\r\n } else if (pointerY > rect.height - threshold) {\r\n const intensity = 1 - (rect.height - pointerY) / threshold;\r\n container.scrollTop += Math.min(maxSpeed, intensity * maxSpeed);\r\n }\r\n }\r\n\r\n onDragStart(event: CdkDragStart<any>) {\r\n const row = event.source.element.nativeElement as HTMLElement;\r\n const cells = Array.from(row.querySelectorAll('td'));\r\n\r\n setTimeout(() => {\r\n const preview = document.querySelector(\r\n '.cdk-drag-preview'\r\n ) as HTMLElement;\r\n\r\n if (!preview) return;\r\n\r\n const previewCells = preview.querySelectorAll('td');\r\n\r\n cells.forEach((cell, index) => {\r\n const width = cell.getBoundingClientRect().width + 'px';\r\n const previewCell = previewCells[index] as HTMLElement;\r\n\r\n if (previewCell) {\r\n previewCell.style.width = width;\r\n previewCell.style.minWidth = width;\r\n previewCell.style.maxWidth = width;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","<div\r\n #tableScrollContainer\r\n cdkScrollable\r\n class=\"h-[calc(100vh-260px)] overflow-y-auto\"\r\n>\r\n <table\r\n class=\"min-w-full text-sm text-left text-gray-800 table-auto border-collapse\"\r\n >\r\n <!-- ================= HEADER ================= -->\r\n <thead>\r\n <tr>\r\n @for (col of columns; track col.header;let i=$index;) { @if\r\n (isColumnVisible(col)) {\r\n <th\r\n class=\"table-header sticky top-0 cursor-pointer\"\r\n [class.action-sticky]=\"col.sticky\"\r\n [class.z-10]=\"col.sticky\"\r\n [ngClass]=\"col.headerClass\"\r\n (click)=\"sort(col, i)\"\r\n >\r\n <span\r\n class=\"flex items-center gap-1\"\r\n [ngClass]=\"\r\n sortColumn === col.field\r\n ? sortDirection === 'asc'\r\n ? 'asc'\r\n : 'desc'\r\n : ''\r\n \"\r\n >\r\n {{ col.header }}\r\n @if (col.sortable) {\r\n <span class=\"sort-icon\"></span>\r\n }\r\n </span>\r\n </th>\r\n } } @if (actions.length) {\r\n <th\r\n class=\"table-header sticky top-0 action-sticky z-10 !bg-[#FBFBFC] w-20\"\r\n >\r\n Action\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <!-- ================= BODY ================= -->\r\n <tbody\r\n cdkDropList\r\n [cdkDropListDisabled]=\"!draggable\"\r\n [cdkDropListData]=\"result.data || []\"\r\n (cdkDropListDropped)=\"dropList($event)\"\r\n >\r\n @for (row of result.data; track row; let rowIndex = $index) {\r\n <tr\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n [cdkDragDisabled]=\"!draggable\"\r\n (cdkDragStarted)=\"onDragStart($event)\"\r\n (cdkDragMoved)=\"onDragMoved($event)\"\r\n class=\"\"\r\n [ngClass]=\"{ 'cursor-move ': draggable }\"\r\n >\r\n @for (col of columns; track col.header; let colIndex = $index) { @if\r\n (isColumnVisible(col)) {\r\n <td class=\"table-cell text-nowrap\" [ngClass]=\"col.cellClass\">\r\n @if (draggable && colIndex === 0) {\r\n <span\r\n cdkDragHandle\r\n class=\"mr-2 text-gray-400\"\r\n [ngClass]=\"{ 'cursor-move': draggable }\"\r\n >☰</span\r\n >\r\n }\r\n {{ getCellValue(row, col) }}\r\n </td>\r\n } } @if (actions.length) {\r\n <td class=\"table-cell action-sticky text-center\">\r\n <div class=\"flex items-center justify-center gap-1.5\">\r\n @for (action of actions; track action.name) { @if (hasPermission) {\r\n <button\r\n class=\"size-6 flex items-center justify-center rounded hover:bg-[#F8F8FA]\"\r\n (click)=\"emitAction(action, row)\"\r\n appTooltip=\"{{ action.tooltip }}\"\r\n appTooltipPosition=\"top\"\r\n >\r\n <img\r\n [src]=\"action.icon\"\r\n width=\"14\"\r\n height=\"14\"\r\n alt=\"action-icon\"\r\n />\r\n </button>\r\n } }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","export interface TableColumn<T = any> {\r\n header: string;\r\n field?: keyof T;\r\n width?: string;\r\n sticky?: boolean;\r\n sortable?: boolean;\r\n headerClass?: string;\r\n cellClass?: string;\r\n formatter?: (row: T) => string;\r\n\r\n /** show / hide both th + td */\r\n visible?: boolean; // default: true\r\n}\r\n\r\nexport interface TableAction<T = any> {\r\n name: string; // e.g. edit, delete\r\n icon: string;\r\n tooltip: string;\r\n permission?: string;\r\n}\r\n\r\nexport class PaginatedResult<T> {\r\n page?: number;\r\n pageSize?: number;\r\n total?: number;\r\n data?: T[] = [];\r\n}\r\n","/*\r\n * Public API Surface of minahil\r\n */\r\n\r\nexport * from './lib/minahil.service';\r\nexport * from './lib/minahil.component';\r\nexport * from './lib/minahil.module';\r\n\r\nexport * from './lib/generic-table/generic-table.component';\r\nexport * from './lib/directives/tooltip.directive';\r\nexport * from './lib/models/table.model';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"minahil.mjs","sources":["../../../projects/minahil/src/lib/minahil.service.ts","../../../projects/minahil/src/lib/minahil.component.ts","../../../projects/minahil/src/lib/minahil.module.ts","../../../projects/minahil/src/lib/directives/tooltip.directive.ts","../../../projects/minahil/src/lib/generic-table/generic-table.component.ts","../../../projects/minahil/src/lib/generic-table/generic-table.component.html","../../../projects/minahil/src/lib/models/table.model.ts","../../../projects/minahil/src/lib/rsc-pagination/rsc-pagination.component.ts","../../../projects/minahil/src/lib/rsc-pagination/rsc-pagination.component.html","../../../projects/minahil/src/public-api.ts","../../../projects/minahil/src/minahil.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MinahilService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-minahil',\r\n template: `\r\n <p>\r\n minahil works!\r\n </p>\r\n `,\r\n styles: [\r\n ]\r\n})\r\nexport class MinahilComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n})\r\nexport class MinahilModule {}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n Renderer2,\r\n OnDestroy,\r\n OnInit,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appTooltip]',\r\n standalone: true,\r\n})\r\nexport class TooltipDirective implements OnInit, OnChanges, OnDestroy {\r\n @Input('appTooltip') tooltipContent: string | string[] = '';\r\n @Input('appTooltipPosition') tooltipPosition:\r\n | 'left'\r\n | 'right'\r\n | 'top'\r\n | 'bottom' = 'right';\r\n\r\n private tooltipElement: HTMLElement | null = null;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n ngOnInit(): void {\r\n this.createTooltip();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['tooltipContent'] && !changes['tooltipContent'].firstChange) {\r\n this.updateTooltipContent();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeTooltip();\r\n }\r\n\r\n updateTooltipContent() {\r\n // If tooltip doesn't exist yet and content is now available, create it\r\n if (!this.tooltipElement && !this.isTooltipContentEmpty()) {\r\n this.createTooltip();\r\n return;\r\n }\r\n\r\n if (!this.tooltipElement) return;\r\n if (this.isTooltipContentEmpty()) return;\r\n\r\n // remove old .text nodes\r\n Array.from(this.tooltipElement.querySelectorAll('.text')).forEach((el) =>\r\n this.renderer.removeChild(this.tooltipElement, el)\r\n );\r\n\r\n this.appendContent();\r\n }\r\n\r\n appendContent() {\r\n if (!this.tooltipElement) return;\r\n\r\n const contentLines = Array.isArray(this.tooltipContent)\r\n ? this.tooltipContent\r\n : [this.tooltipContent];\r\n\r\n contentLines.forEach((line: string) => {\r\n const div = this.renderer.createElement('div');\r\n this.renderer.addClass(div, 'text');\r\n if (line?.trim().startsWith('<')) {\r\n div.innerHTML = line;\r\n } else {\r\n const text = this.renderer.createText(line ?? '');\r\n this.renderer.appendChild(div, text);\r\n }\r\n this.renderer.appendChild(this.tooltipElement!, div);\r\n });\r\n }\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter() {\r\n if (this.tooltipElement) {\r\n this.setTooltipPosition();\r\n this.setStyle(this.tooltipElement, {\r\n visibility: 'visible',\r\n opacity: '1',\r\n });\r\n this.renderer.setStyle(document.body, 'overflow-x', 'hidden'); // ✅ temporarily lock horizontal scroll\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave() {\r\n if (this.tooltipElement) {\r\n this.setStyle(this.tooltipElement, {\r\n visibility: 'hidden',\r\n opacity: '0',\r\n });\r\n this.renderer.removeStyle(document.body, 'overflow-x'); // ✅ restore scroll when tooltip hides\r\n }\r\n }\r\n\r\n @HostListener('window:scroll')\r\n @HostListener('window:resize')\r\n onWindowChange() {\r\n if (this.tooltipElement?.style.visibility === 'visible') {\r\n this.setTooltipPosition();\r\n }\r\n }\r\n private isTooltipContentEmpty(): boolean {\r\n if (typeof this.tooltipContent === 'string') {\r\n return !this.tooltipContent.trim();\r\n } else if (Array.isArray(this.tooltipContent)) {\r\n return (\r\n this.tooltipContent.length === 0 ||\r\n this.tooltipContent.every((line) => !line.trim())\r\n );\r\n }\r\n return true;\r\n }\r\n private createTooltip() {\r\n if (this.isTooltipContentEmpty()) return;\r\n this.tooltipElement = this.renderer.createElement('div');\r\n this.renderer.addClass(this.tooltipElement, 'tooltip-content');\r\n\r\n // Add content\r\n const contentLines = Array.isArray(this.tooltipContent)\r\n ? this.tooltipContent\r\n : [this.tooltipContent];\r\n contentLines.forEach((line: string) => {\r\n const div = this.renderer.createElement('div');\r\n this.renderer.addClass(div, 'text');\r\n // this.renderer.appendChild(div, this.renderer.createText(line));\r\n // Check if the line contains HTML\r\n if (line.trim().startsWith('<')) {\r\n div.innerHTML = line;\r\n } else {\r\n const text = this.renderer.createText(line);\r\n this.renderer.appendChild(div, text);\r\n }\r\n this.renderer.appendChild(this.tooltipElement!, div);\r\n });\r\n\r\n // Add triangle\r\n const triangle = this.renderer.createElement('div');\r\n this.renderer.addClass(triangle, 'tooltip-triangle');\r\n this.renderer.appendChild(this.tooltipElement, triangle);\r\n\r\n // Set base styles\r\n this.setStyle(this.tooltipElement!, {\r\n position: 'fixed',\r\n visibility: 'hidden',\r\n opacity: '0',\r\n zIndex: '9999',\r\n transition: 'opacity 0.3s ease, visibility 0.3s ease',\r\n });\r\n\r\n this.renderer.appendChild(document.body, this.tooltipElement);\r\n }\r\n\r\n private setTooltipPosition() {\r\n if (!this.tooltipElement) return;\r\n\r\n const hostRect = this.el.nativeElement.getBoundingClientRect();\r\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\r\n\r\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\r\n const scrollLeft = window.scrollX || document.documentElement.scrollLeft;\r\n\r\n const triangle = this.tooltipElement.querySelector(\r\n '.tooltip-triangle'\r\n ) as HTMLElement;\r\n const padding = 10;\r\n\r\n let top = 0,\r\n left = 0;\r\n\r\n // Position logic\r\n switch (this.tooltipPosition) {\r\n case 'right':\r\n case 'left':\r\n top = hostRect.top + scrollTop + hostRect.height / 2;\r\n left =\r\n this.tooltipPosition === 'right'\r\n ? hostRect.right + scrollLeft + padding\r\n : hostRect.left + scrollLeft - tooltipRect.width - padding;\r\n\r\n // Auto flip if out of viewport\r\n if (\r\n this.tooltipPosition === 'right' &&\r\n left + tooltipRect.width > window.innerWidth\r\n ) {\r\n left = hostRect.left + scrollLeft - tooltipRect.width - padding;\r\n } else if (this.tooltipPosition === 'left' && left < 0) {\r\n left = hostRect.right + scrollLeft + padding;\r\n }\r\n\r\n this.setStyle(this.tooltipElement, {\r\n transform: 'translateY(-50%)',\r\n });\r\n\r\n this.setTriangleStyles(\r\n triangle,\r\n this.tooltipPosition,\r\n left < hostRect.left + scrollLeft\r\n );\r\n break;\r\n\r\n case 'top':\r\n case 'bottom':\r\n left =\r\n hostRect.left +\r\n scrollLeft +\r\n hostRect.width / 2 -\r\n tooltipRect.width / 2;\r\n top =\r\n this.tooltipPosition === 'top'\r\n ? hostRect.top + scrollTop - tooltipRect.height - padding\r\n : hostRect.bottom + scrollTop + padding;\r\n\r\n // Prevent overflow\r\n left = Math.max(\r\n 10,\r\n Math.min(left, window.innerWidth - tooltipRect.width - 10)\r\n );\r\n\r\n this.setStyle(this.tooltipElement, {\r\n transform: 'translateX(0)',\r\n });\r\n\r\n this.setTriangleStyles(triangle, this.tooltipPosition);\r\n break;\r\n }\r\n\r\n this.setStyle(this.tooltipElement, {\r\n top: `${top}px`,\r\n left: `${left}px`,\r\n });\r\n }\r\n\r\n private setTriangleStyles(\r\n triangle: HTMLElement,\r\n position: 'left' | 'right' | 'top' | 'bottom',\r\n flipped: boolean = false\r\n ) {\r\n if (!triangle) return;\r\n\r\n const base = {\r\n top: '',\r\n left: '',\r\n right: '',\r\n bottom: '',\r\n transform: '',\r\n borderColor: '',\r\n };\r\n\r\n let styles: any = { ...base };\r\n\r\n switch (position) {\r\n case 'right':\r\n styles = flipped\r\n ? {\r\n left: '100%',\r\n top: '50%',\r\n transform: 'translateY(-50%) translateX(0)',\r\n borderColor: 'transparent transparent transparent #1a1a1a',\r\n }\r\n : {\r\n left: '-15px',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n borderColor: 'transparent #1a1a1a transparent transparent',\r\n };\r\n break;\r\n\r\n case 'left':\r\n styles = flipped\r\n ? {\r\n left: '100%',\r\n top: '50%',\r\n transform: 'translateY(-50%) translateX(0)',\r\n borderColor: 'transparent transparent transparent #1a1a1a',\r\n }\r\n : {\r\n left: '-15px',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n borderColor: 'transparent #1a1a1a transparent transparent',\r\n };\r\n break;\r\n\r\n case 'top':\r\n styles = {\r\n bottom: '-15px',\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n borderColor: '#1a1a1a transparent transparent transparent',\r\n };\r\n break;\r\n\r\n case 'bottom':\r\n styles = {\r\n top: '-15px',\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n borderColor: 'transparent transparent #1a1a1a transparent',\r\n };\r\n break;\r\n }\r\n\r\n this.setStyle(triangle, styles);\r\n }\r\n\r\n private removeTooltip() {\r\n if (this.tooltipElement) {\r\n this.renderer.removeChild(document.body, this.tooltipElement);\r\n this.tooltipElement = null;\r\n }\r\n }\r\n\r\n // Utility function to apply multiple styles\r\n private setStyle(el: HTMLElement, styles: { [key: string]: string }) {\r\n Object.entries(styles).forEach(([prop, value]) => {\r\n this.renderer.setStyle(el, prop, value);\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n CdkDragDrop,\r\n moveItemInArray,\r\n CdkDragMove,\r\n CdkDragStart,\r\n DragDropModule,\r\n} from '@angular/cdk/drag-drop';\r\nimport {\r\n TableColumn,\r\n TableAction,\r\n PaginatedResult,\r\n} from '../models/table.model';\r\nimport { TooltipDirective } from '../directives/tooltip.directive';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n\r\n@Component({\r\n selector: 'lib-generic-table',\r\n standalone: true,\r\n imports: [TooltipDirective, CommonModule, DragDropModule, ScrollingModule],\r\n templateUrl: './generic-table.component.html',\r\n styleUrls: ['./generic-table.component.css'],\r\n})\r\nexport class GenericTableComponent<T = any> {\r\n @Input() draggable: boolean = false;\r\n @Input() columns: TableColumn<T>[] = [];\r\n @Input() result!: PaginatedResult<T>;\r\n @Input() actions: TableAction<T>[] = [];\r\n\r\n @Input() hasPermission: boolean = true;\r\n\r\n @Output() actionClick = new EventEmitter<{\r\n action: string;\r\n row: T;\r\n }>();\r\n\r\n @Output() sortChange = new EventEmitter<{\r\n columnIndex: number;\r\n column: TableColumn<T>;\r\n direction: 'asc' | 'desc';\r\n }>();\r\n @Output() dragDropChange = new EventEmitter<T[]>();\r\n sortColumn?: keyof T;\r\n sortDirection: 'asc' | 'desc' = 'asc';\r\n\r\n @ViewChild('tableScrollContainer', { static: false })\r\n tableScrollContainer!: ElementRef<HTMLDivElement>;\r\n\r\n /* ---------- Sorting ---------- */\r\n sort(column: TableColumn<T>, index: number) {\r\n if (!column.sortable || !column.field) return;\r\n\r\n // Toggle sort direction\r\n this.sortDirection =\r\n this.sortColumn === column.field\r\n ? this.sortDirection === 'asc'\r\n ? 'desc'\r\n : 'asc'\r\n : 'asc';\r\n\r\n this.sortColumn = column.field;\r\n\r\n // Emit sort change separately\r\n this.sortChange.emit({\r\n columnIndex: index,\r\n column,\r\n direction: this.sortDirection,\r\n });\r\n }\r\n\r\n /* ---------- Visibility ---------- */\r\n isColumnVisible(column: TableColumn<T>): boolean {\r\n return column.visible !== false;\r\n }\r\n\r\n /* ---------- Cell Value ---------- */\r\n getCellValue(row: T, column: TableColumn<T>): string {\r\n if (column.formatter) {\r\n return column.formatter(row);\r\n }\r\n if (column.field) {\r\n return String(row[column.field] ?? '');\r\n }\r\n return '';\r\n }\r\n\r\n /* ---------- Actions ---------- */\r\n emitAction(action: TableAction<T>, row: T) {\r\n this.actionClick.emit({\r\n action: action.name,\r\n row,\r\n });\r\n }\r\n\r\n dropList(event: CdkDragDrop<T[]>) {\r\n if (!this.draggable || !this.result?.data) return;\r\n\r\n moveItemInArray(this.result.data, event.previousIndex, event.currentIndex);\r\n\r\n // Update existing sortOrder on T\r\n this.result.data.forEach((item: any, index) => {\r\n item.sortOrder = index + 1;\r\n });\r\n\r\n // Emit reordered list\r\n this.dragDropChange.emit(this.result.data);\r\n }\r\n\r\n onDragMoved(event: CdkDragMove<any>) {\r\n if (!this.tableScrollContainer) return;\r\n\r\n const container = this.tableScrollContainer.nativeElement;\r\n const rect = container.getBoundingClientRect();\r\n const pointerY = event.pointerPosition.y - rect.top;\r\n\r\n const threshold = 80;\r\n const maxSpeed = 25;\r\n\r\n if (pointerY < threshold) {\r\n const intensity = 1 - pointerY / threshold;\r\n container.scrollTop -= Math.min(maxSpeed, intensity * maxSpeed);\r\n } else if (pointerY > rect.height - threshold) {\r\n const intensity = 1 - (rect.height - pointerY) / threshold;\r\n container.scrollTop += Math.min(maxSpeed, intensity * maxSpeed);\r\n }\r\n }\r\n\r\n onDragStart(event: CdkDragStart<any>) {\r\n const row = event.source.element.nativeElement as HTMLElement;\r\n const cells = Array.from(row.querySelectorAll('td'));\r\n\r\n setTimeout(() => {\r\n const preview = document.querySelector(\r\n '.cdk-drag-preview'\r\n ) as HTMLElement;\r\n\r\n if (!preview) return;\r\n\r\n const previewCells = preview.querySelectorAll('td');\r\n\r\n cells.forEach((cell, index) => {\r\n const width = cell.getBoundingClientRect().width + 'px';\r\n const previewCell = previewCells[index] as HTMLElement;\r\n\r\n if (previewCell) {\r\n previewCell.style.width = width;\r\n previewCell.style.minWidth = width;\r\n previewCell.style.maxWidth = width;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","<div\r\n #tableScrollContainer\r\n cdkScrollable\r\n class=\"h-[calc(100vh-260px)] overflow-y-auto\"\r\n>\r\n <table\r\n class=\"min-w-full text-sm text-left text-gray-800 table-auto border-collapse\"\r\n >\r\n <!-- ================= HEADER ================= -->\r\n <thead>\r\n <tr>\r\n @for (col of columns; track col.header;let i=$index;) { @if\r\n (isColumnVisible(col)) {\r\n <th\r\n class=\"table-header sticky top-0 cursor-pointer\"\r\n [class.action-sticky]=\"col.sticky\"\r\n [class.z-10]=\"col.sticky\"\r\n [ngClass]=\"col.headerClass\"\r\n (click)=\"sort(col, i)\"\r\n >\r\n <span\r\n class=\"flex items-center gap-1\"\r\n [ngClass]=\"\r\n sortColumn === col.field\r\n ? sortDirection === 'asc'\r\n ? 'asc'\r\n : 'desc'\r\n : ''\r\n \"\r\n >\r\n {{ col.header }}\r\n @if (col.sortable) {\r\n <span class=\"sort-icon\"></span>\r\n }\r\n </span>\r\n </th>\r\n } } @if (actions.length) {\r\n <th\r\n class=\"table-header sticky top-0 action-sticky z-10 !bg-[#FBFBFC] w-20\"\r\n >\r\n Action\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <!-- ================= BODY ================= -->\r\n <tbody\r\n cdkDropList\r\n [cdkDropListDisabled]=\"!draggable\"\r\n [cdkDropListData]=\"result.data || []\"\r\n (cdkDropListDropped)=\"dropList($event)\"\r\n >\r\n @for (row of result.data; track row; let rowIndex = $index) {\r\n <tr\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n [cdkDragDisabled]=\"!draggable\"\r\n (cdkDragStarted)=\"onDragStart($event)\"\r\n (cdkDragMoved)=\"onDragMoved($event)\"\r\n class=\"\"\r\n [ngClass]=\"{ 'cursor-move ': draggable }\"\r\n >\r\n @for (col of columns; track col.header; let colIndex = $index) { @if\r\n (isColumnVisible(col)) {\r\n <td class=\"table-cell text-nowrap\" [ngClass]=\"col.cellClass\">\r\n @if (draggable && colIndex === 0) {\r\n <span\r\n cdkDragHandle\r\n class=\"mr-2 text-gray-400\"\r\n [ngClass]=\"{ 'cursor-move': draggable }\"\r\n >☰</span\r\n >\r\n }\r\n {{ getCellValue(row, col) }}\r\n </td>\r\n } } @if (actions.length) {\r\n <td class=\"table-cell action-sticky text-center\">\r\n <div class=\"flex items-center justify-center gap-1.5\">\r\n @for (action of actions; track action.name) { @if (hasPermission) {\r\n <button\r\n class=\"size-6 flex items-center justify-center rounded hover:bg-[#F8F8FA]\"\r\n (click)=\"emitAction(action, row)\"\r\n appTooltip=\"{{ action.tooltip }}\"\r\n appTooltipPosition=\"top\"\r\n >\r\n <img\r\n [src]=\"action.icon\"\r\n width=\"14\"\r\n height=\"14\"\r\n alt=\"action-icon\"\r\n />\r\n </button>\r\n } }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","export interface TableColumn<T = any> {\r\n header: string;\r\n field?: keyof T;\r\n width?: string;\r\n sticky?: boolean;\r\n sortable?: boolean;\r\n headerClass?: string;\r\n cellClass?: string;\r\n formatter?: (row: T) => string;\r\n\r\n /** show / hide both th + td */\r\n visible?: boolean; // default: true\r\n}\r\n\r\nexport interface TableAction<T = any> {\r\n name: string; // e.g. edit, delete\r\n icon: string;\r\n tooltip: string;\r\n permission?: string;\r\n}\r\n\r\nexport class PaginatedResult<T> {\r\n page?: number;\r\n pageSize?: number;\r\n total?: number;\r\n data?: T[] = [];\r\n}\r\n","import { CommonModule, NgClass } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';\nimport { FormsModule, NgModel } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\n\n@Component({\n selector: 'app-rsc-pagination',\n templateUrl: './rsc-pagination.component.html',\n standalone: true,\n imports: [CommonModule,NgSelectModule,FormsModule],\n styleUrls: ['./rsc-pagination.component.css']\n})\nexport class RscPaginationComponent implements OnChanges {\n\n @Input() public pageSize?: number = 10;\n @Input() public total?: number = 0;\n\n @Output() public changePageSize = new EventEmitter<number>();\n @Output() pageChanged: EventEmitter<number> = new EventEmitter();\n\n public pages: number[] = [];\n @Input() public activePage: number = 1;\n @Output() public activePageChange = new EventEmitter<number>();\n\n pager: number = 1;\n isMenuHovered = false;\n\n // ✅ Added\n startingPage:number = 0;\n endingPage: number = 0;\n\n constructor() {\n const pageCount = this.getPageCount();\n this.pages = this.getArrayOfPage(pageCount);\n\n // ✅ Added\n this.updateStartEndPages();\n }\n\n ngOnChanges(): any {\n const pageCount = this.getPageCount();\n this.pages = this.getArrayOfPage(pageCount);\n\n if (this.activePage > pageCount) {\n this.activePage = pageCount || 1;\n this.activePageChange.emit(this.activePage);\n }\n\n if (this.activePage < 1) {\n this.activePage = 1;\n this.activePageChange.emit(this.activePage);\n }\n\n // ✅ Added\n this.updateStartEndPages();\n }\n\n getTotalPagesValue(){\n const totalPages = Math.ceil(this.total! / this.pageSize!);\n return totalPages;\n }\n\n // ✅ Added method\n private updateStartEndPages(): void {\n this.startingPage = this.pages.length > 0 ? this.pages[0] : 0;\n this.endingPage = this.pages.length > 0\n ? Math.min(this.startingPage + 2, this.pages[this.pages.length - 1])\n : 0;\n }\n\n private getPageCount(): number {\n let totalPage = 0;\n\n if (!!this.total && !!this.pageSize)\n if (this.total > 0 && this.pageSize > 0) {\n const pageCount = this.total / this.pageSize;\n const roundedPageCount = Math.floor(pageCount);\n totalPage = roundedPageCount < pageCount ? roundedPageCount + 1 : roundedPageCount;\n }\n\n return totalPage;\n }\n\n private getArrayOfPage(pageCount: number): number[] {\n const pageArray = [];\n if (pageCount > 0) {\n for (let i = 1; i <= pageCount; i++) pageArray.push(i);\n }\n return pageArray;\n }\n\n paginate() {\n var from = this.activePage === 1 ? this.activePage - 1 : this.activePage - 2;\n return this.pages.slice(from, this.activePage + 4);\n }\n\n onClickPage(pageNumber: number): void {\n if(this.activePage!==pageNumber){\n if (pageNumber >= 1 && pageNumber <= this.pages.length) {\n this.activePage = pageNumber;\n this.pageChanged.emit(this.activePage);\n }\n }\n }\n\n changeSize(event: any) {\n this.changePageSize.emit(this.pageSize);\n\n // ✅ Recalculate pages on size change\n const pageCount = this.getPageCount();\n this.pages = this.getArrayOfPage(pageCount);\n this.updateStartEndPages();\n }\n\n get startIndex(): number {\n if (!this.total || this.total === 0) return 0;\n return (this.activePage - 1) * this.pageSize! + 1;\n }\n\n get endIndex(): number {\n if (!this.total || this.total === 0) return 0;\n const end = this.activePage * this.pageSize!;\n return end > this.total ? this.total : end;\n }\n\n get totalItems(): number {\n return this.total || 0;\n }\n\n // ✅ Added getTotalPages()\n getTotalPages(): number {\n return this.getPageCount();\n }\n\n}\n","<div class=\"px-4 py-3 border-t border-[#EBEDF3] rounded-b-xl\">\n <div class=\"flex flex-col lg:flex-row items-center justify-between gap-3\">\n\n <!-- Page size dropdown -->\n <div class=\"flex gap-3 items-center\" *ngIf=\"true\">\n <p class=\"text-xs text-[#15191E] font-medium\">Rows per page</p>\n <ng-select\n [(ngModel)]=\"pageSize\"\n (change)=\"changeSize($event)\"\n placeholder=\"page size\"\n [searchable]=\"false\"\n [clearable]=\"false\"\n class=\"border border-[#E3E6EE] rounded shadow-none text-xs leading-6 font-medium text-[#15191E] focus:shadow-none lg:w-36 w-16 sm-dropdown\"\n >\n <ng-option *ngFor=\"let opt of [25, 50, 75, 100]\" [value]=\"opt\">{{ opt }}</ng-option>\n </ng-select>\n </div>\n\n <!-- showing entries -->\n <p class=\"text-xs text-[#15191E] font-medium\">\n Showing <span>{{ startIndex }}</span> to\n <span>{{ endIndex > totalItems ? totalItems : endIndex }}</span> of\n <span>{{ totalItems }}</span> entries\n </p>\n\n <!-- Pagination main -->\n <nav class=\"flex gap-1.5 items-center\">\n\n <!-- Page count (optional like DoPlanar top numbers) -->\n <p class=\"text-xs text-[#15191E] font-medium lg:block hidden\">\n <span>{{ startingPage || 0 }}</span> -\n <span>{{ endingPage || 0 }}</span> of\n <span>{{ getTotalPages() || 0 }}</span>\n </p>\n\n <ul class=\"flex items-center space-x-1 text-[13px] text-[#B9BBC6]\">\n\n <!-- Previous -->\n <li>\n <a\n href=\"javascript:void(0)\"\n (click)=\"onClickPage(activePage - 1)\"\n class=\"flex items-center justify-center size-7 text-[13px] leading-6 text-[#15191E] rounded-md hover:bg-[#F8F8FA]\"\n [ngClass]=\"{'cursor-not-allowed': activePage === 1}\"\n >\n <img\n *ngIf=\"activePage === 1\"\n src=\"assets/images/icons/arrows/pagination-left-gray.svg\"\n alt=\"Left Arrow Disabled\"\n />\n <img\n *ngIf=\"activePage !== 1\"\n src=\"assets/images/icons/arrows/pagination-left-black.svg\"\n alt=\"Left Arrow\"\n />\n </a>\n </li>\n\n <!-- Page Numbers -->\n <li *ngFor=\"let item of paginate() | slice:0:3\">\n <a\n (click)=\"onClickPage(item)\"\n href=\"javascript:void(0)\"\n class=\"flex items-center justify-center size-7 leading-6 rounded-lg\"\n [ngClass]=\"item === activePage\n ? 'text-[#15191E] bg-[#F8F8FA] hover:bg-[#F8F8FA]'\n : 'hover:bg-[#F8F8FA] hover:text-[#15191E]'\">\n {{ item }}\n </a>\n </li>\n\n <!-- Next -->\n <li>\n <a\n href=\"javascript:void(0)\"\n (click)=\"onClickPage(activePage + 1)\"\n class=\"flex items-center justify-center size-7 text-[13px] leading-6 text-[#15191E] rounded-md hover:bg-[#F8F8FA]\"\n [ngClass]=\"{'cursor-not-allowed': activePage === getTotalPages()}\"\n >\n <img\n *ngIf=\"activePage === getTotalPages()\"\n src=\"assets/images/icons/arrows/pagination-right-gray.svg\"\n alt=\"Right Arrow Disabled\"\n />\n <img\n *ngIf=\"activePage !== getTotalPages()\"\n src=\"assets/images/icons/arrows/pagination-right-black.svg\"\n alt=\"Right Arrow\"\n />\n </a>\n </li>\n\n </ul>\n </nav>\n </div>\n</div>\n","/*\r\n * Public API Surface of minahil\r\n */\r\n\r\nexport * from './lib/minahil.service';\r\nexport * from './lib/minahil.component';\r\nexport * from './lib/minahil.module';\r\n\r\nexport * from './lib/generic-table/generic-table.component';\r\nexport * from './lib/directives/tooltip.directive';\r\nexport * from './lib/models/table.model';\r\nexport * from './lib/rsc-pagination/rsc-pagination.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -101,5 +101,34 @@ declare class TooltipDirective implements OnInit, OnChanges, OnDestroy {
101
101
  static ɵdir: i0.ɵɵDirectiveDeclaration<TooltipDirective, "[appTooltip]", never, { "tooltipContent": { "alias": "appTooltip"; "required": false; }; "tooltipPosition": { "alias": "appTooltipPosition"; "required": false; }; }, {}, never, never, true, never>;
102
102
  }
103
103
 
104
- export { GenericTableComponent, MinahilComponent, MinahilModule, MinahilService, PaginatedResult, TooltipDirective };
104
+ declare class RscPaginationComponent implements OnChanges {
105
+ pageSize?: number;
106
+ total?: number;
107
+ changePageSize: EventEmitter<number>;
108
+ pageChanged: EventEmitter<number>;
109
+ pages: number[];
110
+ activePage: number;
111
+ activePageChange: EventEmitter<number>;
112
+ pager: number;
113
+ isMenuHovered: boolean;
114
+ startingPage: number;
115
+ endingPage: number;
116
+ constructor();
117
+ ngOnChanges(): any;
118
+ getTotalPagesValue(): number;
119
+ private updateStartEndPages;
120
+ private getPageCount;
121
+ private getArrayOfPage;
122
+ paginate(): number[];
123
+ onClickPage(pageNumber: number): void;
124
+ changeSize(event: any): void;
125
+ get startIndex(): number;
126
+ get endIndex(): number;
127
+ get totalItems(): number;
128
+ getTotalPages(): number;
129
+ static ɵfac: i0.ɵɵFactoryDeclaration<RscPaginationComponent, never>;
130
+ static ɵcmp: i0.ɵɵComponentDeclaration<RscPaginationComponent, "app-rsc-pagination", never, { "pageSize": { "alias": "pageSize"; "required": false; }; "total": { "alias": "total"; "required": false; }; "activePage": { "alias": "activePage"; "required": false; }; }, { "changePageSize": "changePageSize"; "pageChanged": "pageChanged"; "activePageChange": "activePageChange"; }, never, never, true, never>;
131
+ }
132
+
133
+ export { GenericTableComponent, MinahilComponent, MinahilModule, MinahilService, PaginatedResult, RscPaginationComponent, TooltipDirective };
105
134
  export type { TableAction, TableColumn };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minahil",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0",
@@ -21,4 +21,4 @@
21
21
  }
22
22
  },
23
23
  "sideEffects": false
24
- }
24
+ }