@impartner/design-components 1.0.3 → 1.0.5

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.
@@ -3560,13 +3560,17 @@ class ModalComponent {
3560
3560
  * Event emitted when the Modal content is accepted.
3561
3561
  */
3562
3562
  this.accept = new EventEmitter();
3563
- this._interactableId = this._interactionService.add(this);
3564
3563
  }
3565
3564
  /**
3566
3565
  * Determines if the Modal should be shown immediately.
3567
3566
  */
3568
3567
  set show(show) {
3569
- this._show = show;
3568
+ if (show) {
3569
+ this.open();
3570
+ }
3571
+ else {
3572
+ this.close();
3573
+ }
3570
3574
  }
3571
3575
  get interactableId() {
3572
3576
  return this._interactableId;
@@ -3590,6 +3594,7 @@ class ModalComponent {
3590
3594
  return !this.titleText && !this.dismissable;
3591
3595
  }
3592
3596
  ngOnInit() {
3597
+ this._interactableId = this._interactionService.add(this);
3593
3598
  if (this.dismissable === undefined && this.theme === ModalTheme.Working) {
3594
3599
  this.dismissable = true;
3595
3600
  }
@@ -3606,35 +3611,38 @@ class ModalComponent {
3606
3611
  !!this.dismissEl?.nativeElement?.firstChild?.disabled) {
3607
3612
  return;
3608
3613
  }
3609
- this._show = false;
3614
+ this.close();
3610
3615
  this.dismiss.emit(event);
3611
3616
  }
3612
3617
  handleDeny(event) {
3613
3618
  if (!!this.denyEl?.nativeElement?.firstChild?.disabled) {
3614
3619
  return;
3615
3620
  }
3616
- this._show = false;
3621
+ this.close();
3617
3622
  this.deny.emit(event);
3618
3623
  }
3619
3624
  handleAccept(event) {
3620
- console.log('this.acceptEl', this.acceptEl);
3621
3625
  if (!!this.acceptEl?.nativeElement?.firstChild?.disabled) {
3622
3626
  return;
3623
3627
  }
3624
- this._show = false;
3628
+ this.close();
3625
3629
  this.accept.emit(event);
3626
3630
  }
3627
3631
  /**
3628
- * Opens/shows the modal programmatically.
3632
+ * Opens/shows the modal. Can be used programmatically.
3629
3633
  */
3630
3634
  open() {
3635
+ if (this.backdrop) {
3636
+ this._interactionService.queueBackdrop(this.interactableId);
3637
+ }
3631
3638
  this._show = true;
3632
3639
  }
3633
3640
  /**
3634
- * Closes/hides the modal programmatically.
3641
+ * Closes/hides the modal. Can be used programmatically.
3635
3642
  */
3636
3643
  close() {
3637
3644
  this._show = false;
3645
+ this._interactionService.dequeueBackdrop(this.interactableId);
3638
3646
  }
3639
3647
  }
3640
3648
  ModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ModalComponent, deps: [{ token: InteractionService }], target: i0.ɵɵFactoryTarget.Component });
@@ -3868,7 +3876,6 @@ class DropdownComponent {
3868
3876
  */
3869
3877
  this.buttonClick = new EventEmitter();
3870
3878
  this.classBtnGroup = true;
3871
- this._interactableId = this._interactionService.add(this);
3872
3879
  }
3873
3880
  get classDropdown() {
3874
3881
  return this.position === 'down';
@@ -3899,6 +3906,9 @@ class DropdownComponent {
3899
3906
  get shown() {
3900
3907
  return this.valid && this.show;
3901
3908
  }
3909
+ ngOnInit() {
3910
+ this._interactableId = this._interactionService.add(this);
3911
+ }
3902
3912
  ngOnDestroy() {
3903
3913
  this._interactionService.remove(this.interactableId);
3904
3914
  this._interactableId = 0;
@@ -7580,22 +7590,24 @@ class PaginationComponent {
7580
7590
  return Math.ceil(this.total / this.perPage);
7581
7591
  }
7582
7592
  get firstPageResult() {
7583
- if (this.total < 1 || this.page < 1 || this.perPage < 1) {
7593
+ const page = this._getPageClamped();
7594
+ if (this.total < 1 || page < 1 || this.perPage < 1) {
7584
7595
  return 0;
7585
7596
  }
7586
- if (this.page === 1) {
7597
+ if (page === 1) {
7587
7598
  return 1;
7588
7599
  }
7589
- if (this.page > Math.ceil(this.total / this.perPage)) {
7600
+ if (page > Math.ceil(this.total / this.perPage)) {
7590
7601
  return this.total;
7591
7602
  }
7592
- return (this.page - 1) * this.perPage + 1;
7603
+ return (page - 1) * this.perPage + 1;
7593
7604
  }
7594
7605
  get lastPageResult() {
7595
- if (this.total <= 0 || this.page < 1 || this.perPage < 1) {
7606
+ const page = this._getPageClamped();
7607
+ if (this.total <= 0 || page < 1 || this.perPage < 1) {
7596
7608
  return 0;
7597
7609
  }
7598
- if (this.page === 1) {
7610
+ if (page === 1) {
7599
7611
  if (this.total < this.perPage) {
7600
7612
  return this.total;
7601
7613
  }
@@ -7603,26 +7615,38 @@ class PaginationComponent {
7603
7615
  return this.perPage;
7604
7616
  }
7605
7617
  }
7606
- if (this.total < this.perPage * this.page) {
7618
+ if (this.total < this.perPage * page) {
7607
7619
  return this.total;
7608
7620
  }
7609
7621
  else {
7610
- return this.perPage * this.page;
7622
+ return this.perPage * page;
7623
+ }
7624
+ }
7625
+ _getPageClamped(page) {
7626
+ page = Number(page || this.page || 0);
7627
+ if (isNaN(page) || page < 1) {
7628
+ return 1;
7611
7629
  }
7630
+ if (page > this.totalPages) {
7631
+ return this.totalPages;
7632
+ }
7633
+ return page;
7612
7634
  }
7613
7635
  goToPreviousPage() {
7614
- if (this.page <= 1) {
7636
+ const page = this._getPageClamped();
7637
+ if (page <= 1) {
7615
7638
  return;
7616
7639
  }
7617
- const previousPage = this.page - 1;
7640
+ const previousPage = page - 1;
7618
7641
  this.page = previousPage;
7619
7642
  this.goToPage.emit(previousPage);
7620
7643
  }
7621
7644
  goToNextPage() {
7622
- if (this.page >= this.totalPages) {
7645
+ const page = this._getPageClamped();
7646
+ if (page >= this.totalPages) {
7623
7647
  return;
7624
7648
  }
7625
- const nextPage = this.page + 1;
7649
+ const nextPage = page + 1;
7626
7650
  this.page = nextPage;
7627
7651
  this.goToPage.emit(nextPage);
7628
7652
  }
@@ -7630,25 +7654,20 @@ class PaginationComponent {
7630
7654
  this.goToExactPage(target?.value);
7631
7655
  }
7632
7656
  goToExactPage(page) {
7633
- if (!page) {
7634
- return;
7635
- }
7636
- let allowedPageNumber = Number(page);
7637
- if (allowedPageNumber < 0) {
7638
- allowedPageNumber = 1;
7639
- }
7640
- if (allowedPageNumber > this.totalPages) {
7641
- allowedPageNumber = this.totalPages;
7642
- }
7643
- this.page = allowedPageNumber;
7644
- this.goToPage.emit(allowedPageNumber);
7657
+ this.page = this._getPageClamped(page);
7658
+ this.goToPage.emit(this.page);
7659
+ }
7660
+ preventDefaultAndBlur(event) {
7661
+ // prevents PRM form submit
7662
+ event.preventDefault();
7663
+ event.target.blur();
7645
7664
  }
7646
7665
  }
7647
7666
  PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7648
- PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: PaginationComponent, selector: "impdc-pagination, div[impdc-pagination]", inputs: { page: "page", perPage: "perPage", total: "total", summary: "summary" }, outputs: { goToPage: "goToPage" }, ngImport: i0, template: "<div class=\"pagination-container\">\n <div class=\"mobile-pagination\">\n <button\n impdcButton\n theme=\"secondary\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPreviousPage()\">\n <i class=\"fas fa-chevron-left\"></i>\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n [disabled]=\"page === totalPages\"\n (click)=\"goToNextPage()\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n </div>\n\n <div class=\"desktop-pagination\">\n <div>\n <span class=\"summary\" [innerHTML]=\"summary\"></span>\n </div>\n <div class=\"pagination-actions\">\n <button\n impdcButton\n theme=\"secondary\"\n aria-label=\"First Page\"\n class=\"pagination-first-last-btns\"\n (click)=\"goToExactPage(1)\"\n [disabled]=\"page <= 1\">\n <i class=\"fas fa-chevron-left first\"></i>\n <i class=\"fas fa-chevron-left\"></i>\n <!-- 1 -->\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n class=\"previous\"\n aria-label=\"Previous\"\n (click)=\"goToPreviousPage()\"\n [disabled]=\"page <= 1\">\n <i class=\"fas fa-chevron-left\"></i>\n </button>\n <div class=\"page-change\">\n <input\n impdcInput\n maxlength=\"4\"\n [value]=\"page\"\n (blur)=\"goToExactPageFromEvent($event)\" />\n <span class=\"total-pages\"> / {{ totalPages }} </span>\n </div>\n <button\n impdcButton\n theme=\"secondary\"\n aria-label=\"Next\"\n (click)=\"goToNextPage()\"\n [disabled]=\"page === totalPages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n class=\"pagination-first-last-btns\"\n aria-label=\"Last Page\"\n (click)=\"goToExactPage(totalPages)\"\n [disabled]=\"page === totalPages\">\n <i class=\"fas fa-chevron-right\"></i>\n <i class=\"fas fa-chevron-right last\"></i>\n <!-- {{ totalPages }} -->\n </button>\n </div>\n </div>\n</div>\n", styles: [".pagination-container{background-color:var(--impd-color-white);padding:var(--impd-size-3) var(--impd-size-6);gap:1rem;color:var(--impd-color-gray-700, #374151)}@media (min-width: 640px){.pagination-container{padding-left:var(--impd-size-6);padding-right:var(--impd-size-6)}}.mobile-pagination{display:flex;gap:2rem;justify-content:space-between;align-items:center}@media (min-width: 640px){.mobile-pagination{display:none}}.desktop-pagination{display:none}@media (min-width: 640px){.desktop-pagination{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between;gap:2rem;flex-flow:wrap}}.summary{font-size:var(--impd-font-size-sm);line-height:var(--impd-size-5);font-weight:400;color:var(--impd-color-gray-700)}.pagination-actions{display:flex;flex-direction:row;gap:.4rem;flex-flow:wrap}.pagination-actions .first{margin-right:-1.2rem}.pagination-actions .last{margin-left:-1.2rem}.page-change{display:flex;flex-direction:row;align-items:center;gap:.4rem;font-size:var(--impd-size-3_5, 1.4rem)}.page-change .form-control{min-width:4.275rem;max-width:6.3rem;text-align:center}.page-change .total-pages{padding:0 1.2rem}.pagination-first-last-btns{padding-left:1.325rem;padding-right:1.325rem}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[impdcButton]", inputs: ["type", "theme", "text", "disabled", "titleText", "ariaLabel"] }, { kind: "directive", type: InputDirective, selector: "input[impdcInput], textarea[impdcInput], select[impdcNativeSelect]", inputs: ["disabled", "id", "type", "required", "readonly", "errorStateMatcher", "value"], exportAs: ["impdcInput"] }] });
7667
+ PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: PaginationComponent, selector: "impdc-pagination, div[impdc-pagination]", inputs: { page: "page", perPage: "perPage", total: "total", summary: "summary" }, outputs: { goToPage: "goToPage" }, ngImport: i0, template: "<div class=\"pagination-container\">\n <div class=\"mobile-pagination\">\n <button\n impdcButton\n theme=\"secondary\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPreviousPage()\">\n <i class=\"fas fa-chevron-left\"></i>\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n [disabled]=\"page === totalPages\"\n (click)=\"goToNextPage()\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n </div>\n\n <div class=\"desktop-pagination\">\n <div>\n <span class=\"summary\" [innerHTML]=\"summary\"></span>\n </div>\n <div class=\"pagination-actions\">\n <button\n impdcButton\n theme=\"secondary\"\n aria-label=\"First Page\"\n class=\"pagination-first-last-btns\"\n (click)=\"goToExactPage(1)\"\n [disabled]=\"page <= 1\">\n <i class=\"fas fa-chevron-left first\"></i>\n <i class=\"fas fa-chevron-left\"></i>\n <!-- 1 -->\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n class=\"previous\"\n aria-label=\"Previous\"\n (click)=\"goToPreviousPage()\"\n [disabled]=\"page <= 1\">\n <i class=\"fas fa-chevron-left\"></i>\n </button>\n <div class=\"page-change\">\n <input\n impdcInput\n [(ngModel)]=\"page\"\n maxlength=\"4\"\n (blur)=\"goToExactPageFromEvent($event)\"\n (keydown.enter)=\"preventDefaultAndBlur($event)\" />\n <span class=\"total-pages\"> / {{ totalPages }} </span>\n </div>\n <button\n impdcButton\n theme=\"secondary\"\n aria-label=\"Next\"\n (click)=\"goToNextPage()\"\n [disabled]=\"page >= totalPages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n class=\"pagination-first-last-btns\"\n aria-label=\"Last Page\"\n (click)=\"goToExactPage(totalPages)\"\n [disabled]=\"page === totalPages\">\n <i class=\"fas fa-chevron-right\"></i>\n <i class=\"fas fa-chevron-right last\"></i>\n <!-- {{ totalPages }} -->\n </button>\n </div>\n </div>\n</div>\n", styles: [".pagination-container{background-color:var(--impd-color-white);padding:var(--impd-size-3) var(--impd-size-6);gap:1rem;color:var(--impd-color-gray-700, #374151)}@media (min-width: 640px){.pagination-container{padding-left:var(--impd-size-6);padding-right:var(--impd-size-6)}}.mobile-pagination{display:flex;gap:2rem;justify-content:space-between;align-items:center}@media (min-width: 640px){.mobile-pagination{display:none}}.desktop-pagination{display:none}@media (min-width: 640px){.desktop-pagination{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between;gap:2rem;flex-flow:wrap}}.summary{font-size:var(--impd-font-size-sm);line-height:var(--impd-size-5);font-weight:400;color:var(--impd-color-gray-700)}.pagination-actions{display:flex;flex-direction:row;gap:.4rem;flex-flow:wrap}.pagination-actions .first{margin-right:-1.2rem}.pagination-actions .last{margin-left:-1.2rem}.page-change{display:flex;flex-direction:row;align-items:center;gap:.4rem;font-size:var(--impd-size-3_5, 1.4rem)}.page-change .form-control{min-width:4.275rem;max-width:6.3rem;text-align:center}.page-change .total-pages{padding:0 1.2rem}.pagination-first-last-btns{padding-left:1.325rem;padding-right:1.325rem}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[impdcButton]", inputs: ["type", "theme", "text", "disabled", "titleText", "ariaLabel"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputDirective, selector: "input[impdcInput], textarea[impdcInput], select[impdcNativeSelect]", inputs: ["disabled", "id", "type", "required", "readonly", "errorStateMatcher", "value"], exportAs: ["impdcInput"] }] });
7649
7668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PaginationComponent, decorators: [{
7650
7669
  type: Component,
7651
- args: [{ selector: 'impdc-pagination, div[impdc-pagination]', template: "<div class=\"pagination-container\">\n <div class=\"mobile-pagination\">\n <button\n impdcButton\n theme=\"secondary\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPreviousPage()\">\n <i class=\"fas fa-chevron-left\"></i>\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n [disabled]=\"page === totalPages\"\n (click)=\"goToNextPage()\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n </div>\n\n <div class=\"desktop-pagination\">\n <div>\n <span class=\"summary\" [innerHTML]=\"summary\"></span>\n </div>\n <div class=\"pagination-actions\">\n <button\n impdcButton\n theme=\"secondary\"\n aria-label=\"First Page\"\n class=\"pagination-first-last-btns\"\n (click)=\"goToExactPage(1)\"\n [disabled]=\"page <= 1\">\n <i class=\"fas fa-chevron-left first\"></i>\n <i class=\"fas fa-chevron-left\"></i>\n <!-- 1 -->\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n class=\"previous\"\n aria-label=\"Previous\"\n (click)=\"goToPreviousPage()\"\n [disabled]=\"page <= 1\">\n <i class=\"fas fa-chevron-left\"></i>\n </button>\n <div class=\"page-change\">\n <input\n impdcInput\n maxlength=\"4\"\n [value]=\"page\"\n (blur)=\"goToExactPageFromEvent($event)\" />\n <span class=\"total-pages\"> / {{ totalPages }} </span>\n </div>\n <button\n impdcButton\n theme=\"secondary\"\n aria-label=\"Next\"\n (click)=\"goToNextPage()\"\n [disabled]=\"page === totalPages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n class=\"pagination-first-last-btns\"\n aria-label=\"Last Page\"\n (click)=\"goToExactPage(totalPages)\"\n [disabled]=\"page === totalPages\">\n <i class=\"fas fa-chevron-right\"></i>\n <i class=\"fas fa-chevron-right last\"></i>\n <!-- {{ totalPages }} -->\n </button>\n </div>\n </div>\n</div>\n", styles: [".pagination-container{background-color:var(--impd-color-white);padding:var(--impd-size-3) var(--impd-size-6);gap:1rem;color:var(--impd-color-gray-700, #374151)}@media (min-width: 640px){.pagination-container{padding-left:var(--impd-size-6);padding-right:var(--impd-size-6)}}.mobile-pagination{display:flex;gap:2rem;justify-content:space-between;align-items:center}@media (min-width: 640px){.mobile-pagination{display:none}}.desktop-pagination{display:none}@media (min-width: 640px){.desktop-pagination{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between;gap:2rem;flex-flow:wrap}}.summary{font-size:var(--impd-font-size-sm);line-height:var(--impd-size-5);font-weight:400;color:var(--impd-color-gray-700)}.pagination-actions{display:flex;flex-direction:row;gap:.4rem;flex-flow:wrap}.pagination-actions .first{margin-right:-1.2rem}.pagination-actions .last{margin-left:-1.2rem}.page-change{display:flex;flex-direction:row;align-items:center;gap:.4rem;font-size:var(--impd-size-3_5, 1.4rem)}.page-change .form-control{min-width:4.275rem;max-width:6.3rem;text-align:center}.page-change .total-pages{padding:0 1.2rem}.pagination-first-last-btns{padding-left:1.325rem;padding-right:1.325rem}\n"] }]
7670
+ args: [{ selector: 'impdc-pagination, div[impdc-pagination]', template: "<div class=\"pagination-container\">\n <div class=\"mobile-pagination\">\n <button\n impdcButton\n theme=\"secondary\"\n [disabled]=\"page <= 1\"\n (click)=\"goToPreviousPage()\">\n <i class=\"fas fa-chevron-left\"></i>\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n [disabled]=\"page === totalPages\"\n (click)=\"goToNextPage()\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n </div>\n\n <div class=\"desktop-pagination\">\n <div>\n <span class=\"summary\" [innerHTML]=\"summary\"></span>\n </div>\n <div class=\"pagination-actions\">\n <button\n impdcButton\n theme=\"secondary\"\n aria-label=\"First Page\"\n class=\"pagination-first-last-btns\"\n (click)=\"goToExactPage(1)\"\n [disabled]=\"page <= 1\">\n <i class=\"fas fa-chevron-left first\"></i>\n <i class=\"fas fa-chevron-left\"></i>\n <!-- 1 -->\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n class=\"previous\"\n aria-label=\"Previous\"\n (click)=\"goToPreviousPage()\"\n [disabled]=\"page <= 1\">\n <i class=\"fas fa-chevron-left\"></i>\n </button>\n <div class=\"page-change\">\n <input\n impdcInput\n [(ngModel)]=\"page\"\n maxlength=\"4\"\n (blur)=\"goToExactPageFromEvent($event)\"\n (keydown.enter)=\"preventDefaultAndBlur($event)\" />\n <span class=\"total-pages\"> / {{ totalPages }} </span>\n </div>\n <button\n impdcButton\n theme=\"secondary\"\n aria-label=\"Next\"\n (click)=\"goToNextPage()\"\n [disabled]=\"page >= totalPages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <button\n impdcButton\n theme=\"secondary\"\n class=\"pagination-first-last-btns\"\n aria-label=\"Last Page\"\n (click)=\"goToExactPage(totalPages)\"\n [disabled]=\"page === totalPages\">\n <i class=\"fas fa-chevron-right\"></i>\n <i class=\"fas fa-chevron-right last\"></i>\n <!-- {{ totalPages }} -->\n </button>\n </div>\n </div>\n</div>\n", styles: [".pagination-container{background-color:var(--impd-color-white);padding:var(--impd-size-3) var(--impd-size-6);gap:1rem;color:var(--impd-color-gray-700, #374151)}@media (min-width: 640px){.pagination-container{padding-left:var(--impd-size-6);padding-right:var(--impd-size-6)}}.mobile-pagination{display:flex;gap:2rem;justify-content:space-between;align-items:center}@media (min-width: 640px){.mobile-pagination{display:none}}.desktop-pagination{display:none}@media (min-width: 640px){.desktop-pagination{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between;gap:2rem;flex-flow:wrap}}.summary{font-size:var(--impd-font-size-sm);line-height:var(--impd-size-5);font-weight:400;color:var(--impd-color-gray-700)}.pagination-actions{display:flex;flex-direction:row;gap:.4rem;flex-flow:wrap}.pagination-actions .first{margin-right:-1.2rem}.pagination-actions .last{margin-left:-1.2rem}.page-change{display:flex;flex-direction:row;align-items:center;gap:.4rem;font-size:var(--impd-size-3_5, 1.4rem)}.page-change .form-control{min-width:4.275rem;max-width:6.3rem;text-align:center}.page-change .total-pages{padding:0 1.2rem}.pagination-first-last-btns{padding-left:1.325rem;padding-right:1.325rem}\n"] }]
7652
7671
  }], propDecorators: { page: [{
7653
7672
  type: Input
7654
7673
  }], perPage: [{
@@ -7665,12 +7684,12 @@ class PaginationModule {
7665
7684
  constructor() { }
7666
7685
  }
7667
7686
  PaginationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PaginationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7668
- PaginationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: PaginationModule, declarations: [PaginationComponent], imports: [CommonModule, ButtonModule, ImpdcFormsModule], exports: [ButtonModule, ImpdcFormsModule, PaginationComponent] });
7669
- PaginationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PaginationModule, imports: [CommonModule, ButtonModule, ImpdcFormsModule, ButtonModule, ImpdcFormsModule] });
7687
+ PaginationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: PaginationModule, declarations: [PaginationComponent], imports: [CommonModule, ButtonModule, FormsModule, ImpdcFormsModule], exports: [ButtonModule, ImpdcFormsModule, PaginationComponent] });
7688
+ PaginationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PaginationModule, imports: [CommonModule, ButtonModule, FormsModule, ImpdcFormsModule, ButtonModule, ImpdcFormsModule] });
7670
7689
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PaginationModule, decorators: [{
7671
7690
  type: NgModule,
7672
7691
  args: [{
7673
- imports: [CommonModule, ButtonModule, ImpdcFormsModule],
7692
+ imports: [CommonModule, ButtonModule, FormsModule, ImpdcFormsModule],
7674
7693
  declarations: [PaginationComponent],
7675
7694
  exports: [ButtonModule, ImpdcFormsModule, PaginationComponent]
7676
7695
  }]
@@ -8390,9 +8409,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
8390
8409
  class InteractionService {
8391
8410
  constructor() {
8392
8411
  this._interactables = [];
8412
+ this._backdropQueue = [];
8393
8413
  }
8394
8414
  get showBackdrop() {
8395
- return this._interactables.some(i => i instanceof ModalComponent && i.shown && i.backdrop);
8415
+ return this._backdropQueue.length > 0;
8396
8416
  }
8397
8417
  registerBackdrop(modalBackdrop) {
8398
8418
  // WARNING: there should only be 1 backdrop component, preferably loaded in the body
@@ -8414,8 +8434,12 @@ class InteractionService {
8414
8434
  }
8415
8435
  }
8416
8436
  add(interactable) {
8417
- if (interactable.interactableId > 0) {
8418
- return interactable.interactableId;
8437
+ const interactableId = interactable.interactableId;
8438
+ if (interactableId > 0) {
8439
+ if (!this._interactables.some(i => i.interactableId === interactableId)) {
8440
+ this._interactables.push(interactable);
8441
+ }
8442
+ return interactableId;
8419
8443
  }
8420
8444
  this._interactables.push(interactable);
8421
8445
  return this._interactables.length;
@@ -8425,6 +8449,7 @@ class InteractionService {
8425
8449
  return;
8426
8450
  }
8427
8451
  this._interactables.splice(interactableId - 1, 1);
8452
+ this.dequeueBackdrop(interactableId);
8428
8453
  }
8429
8454
  toggle(interactable) {
8430
8455
  if (interactable.interactableId <= 0 || interactable.show) {
@@ -8438,6 +8463,17 @@ class InteractionService {
8438
8463
  }
8439
8464
  return true;
8440
8465
  }
8466
+ queueBackdrop(interactableId) {
8467
+ if (!this._backdropQueue.includes(interactableId)) {
8468
+ this._backdropQueue.push(interactableId);
8469
+ }
8470
+ }
8471
+ dequeueBackdrop(interactableId) {
8472
+ const interactableIdIndex = this._backdropQueue.indexOf(interactableId);
8473
+ if (interactableIdIndex !== -1) {
8474
+ this._backdropQueue.splice(interactableIdIndex, 1);
8475
+ }
8476
+ }
8441
8477
  }
8442
8478
  InteractionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InteractionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
8443
8479
  InteractionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InteractionService, providedIn: 'root' });