quang 19.0.28 → 20.0.0

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.
Files changed (113) hide show
  1. package/auth/README.md +10 -0
  2. package/auth/index.d.ts +195 -9
  3. package/auth/mobile/index.d.ts +5 -1
  4. package/components/autocomplete/index.d.ts +46 -1
  5. package/components/checkbox/index.d.ts +15 -1
  6. package/components/date/index.d.ts +89 -1
  7. package/components/input/index.d.ts +19 -1
  8. package/components/paginator/index.d.ts +68 -5
  9. package/components/select/index.d.ts +32 -1
  10. package/components/shared/index.d.ts +112 -4
  11. package/components/table/index.d.ts +70 -1
  12. package/components/wysiwyg/index.d.ts +51 -1
  13. package/device/index.d.ts +14 -1
  14. package/fesm2022/quang-auth.mjs +18 -18
  15. package/fesm2022/quang-auth.mjs.map +1 -1
  16. package/fesm2022/quang-components-autocomplete.mjs +7 -7
  17. package/fesm2022/quang-components-autocomplete.mjs.map +1 -1
  18. package/fesm2022/quang-components-checkbox.mjs +6 -6
  19. package/fesm2022/quang-components-checkbox.mjs.map +1 -1
  20. package/fesm2022/quang-components-date.mjs +5 -5
  21. package/fesm2022/quang-components-date.mjs.map +1 -1
  22. package/fesm2022/quang-components-input.mjs +6 -6
  23. package/fesm2022/quang-components-input.mjs.map +1 -1
  24. package/fesm2022/quang-components-paginator.mjs +15 -15
  25. package/fesm2022/quang-components-paginator.mjs.map +1 -1
  26. package/fesm2022/quang-components-select.mjs +6 -6
  27. package/fesm2022/quang-components-select.mjs.map +1 -1
  28. package/fesm2022/quang-components-shared.mjs +6 -6
  29. package/fesm2022/quang-components-shared.mjs.map +1 -1
  30. package/fesm2022/quang-components-table.mjs +3 -3
  31. package/fesm2022/quang-components-table.mjs.map +1 -1
  32. package/fesm2022/quang-components-wysiwyg.mjs +6 -6
  33. package/fesm2022/quang-components-wysiwyg.mjs.map +1 -1
  34. package/fesm2022/quang-device.mjs +3 -3
  35. package/fesm2022/quang-device.mjs.map +1 -1
  36. package/fesm2022/quang-loader.mjs +7 -8
  37. package/fesm2022/quang-loader.mjs.map +1 -1
  38. package/fesm2022/quang-overlay-modal.mjs +3 -3
  39. package/fesm2022/quang-overlay-modal.mjs.map +1 -1
  40. package/fesm2022/quang-overlay-popover.mjs +8 -8
  41. package/fesm2022/quang-overlay-popover.mjs.map +1 -1
  42. package/fesm2022/quang-overlay-shared.mjs +10 -11
  43. package/fesm2022/quang-overlay-shared.mjs.map +1 -1
  44. package/fesm2022/quang-overlay-toast.mjs +8 -8
  45. package/fesm2022/quang-overlay-toast.mjs.map +1 -1
  46. package/fesm2022/quang-overlay-tooltip.mjs +6 -6
  47. package/fesm2022/quang-overlay-tooltip.mjs.map +1 -1
  48. package/fesm2022/quang-translation.mjs +6 -6
  49. package/fesm2022/quang-translation.mjs.map +1 -1
  50. package/forms/index.d.ts +51 -2
  51. package/index.d.ts +13 -9
  52. package/loader/index.d.ts +69 -4
  53. package/overlay/modal/index.d.ts +34 -1
  54. package/overlay/popover/index.d.ts +25 -1
  55. package/overlay/shared/index.d.ts +116 -3
  56. package/overlay/toast/index.d.ts +45 -2
  57. package/overlay/tooltip/index.d.ts +23 -2
  58. package/package.json +28 -28
  59. package/shared/index.d.ts +16 -1
  60. package/translation/index.d.ts +62 -4
  61. package/auth/auth-providers.d.ts +0 -39
  62. package/auth/auth.service.d.ts +0 -52
  63. package/auth/directives/has-at-least-one-role.directive.d.ts +0 -26
  64. package/auth/directives/has-every-role.directive.d.ts +0 -26
  65. package/auth/directives/is-authenticated.directive.d.ts +0 -14
  66. package/auth/directives/is-not-authenticated.directive.d.ts +0 -14
  67. package/auth/guards/index.d.ts +0 -2
  68. package/auth/guards/is-allowed.guard.d.ts +0 -2
  69. package/auth/guards/is-authenticated.guard.d.ts +0 -2
  70. package/auth/logout-on-error.interceptor.d.ts +0 -9
  71. package/auth/mobile/mobile-auth-feature.d.ts +0 -2
  72. package/auth/token-storage/index.d.ts +0 -3
  73. package/auth/token-storage/local-storage-feature.d.ts +0 -2
  74. package/auth/token-storage/memory-storage-feature.d.ts +0 -12
  75. package/auth/token-storage/session-storage-feature.d.ts +0 -2
  76. package/components/autocomplete/autocomplete.component.d.ts +0 -43
  77. package/components/checkbox/checkbox.component.d.ts +0 -11
  78. package/components/date/date.component.d.ts +0 -85
  79. package/components/input/input.component.d.ts +0 -15
  80. package/components/paginator/paginator-language.service.d.ts +0 -10
  81. package/components/paginator/paginator.component.d.ts +0 -30
  82. package/components/paginator/paginator.module.d.ts +0 -7
  83. package/components/paginator/paginator.service.d.ts +0 -6
  84. package/components/paginator/paginatorIntl.d.ts +0 -12
  85. package/components/select/select.component.d.ts +0 -29
  86. package/components/shared/ErrorData.d.ts +0 -4
  87. package/components/shared/makeId.d.ts +0 -1
  88. package/components/shared/option-list/option-list.component.d.ts +0 -53
  89. package/components/shared/quang-base-component.directive.d.ts +0 -50
  90. package/components/table/table.component.d.ts +0 -66
  91. package/components/wysiwyg/wysiwyg.component.d.ts +0 -46
  92. package/device/resize-observable.service.d.ts +0 -11
  93. package/forms/form-group-model.d.ts +0 -18
  94. package/forms/validators.d.ts +0 -43
  95. package/loader/loader-providers.d.ts +0 -23
  96. package/loader/loader.component.d.ts +0 -23
  97. package/loader/loader.interceptor.d.ts +0 -10
  98. package/loader/loader.service.d.ts +0 -9
  99. package/overlay/modal/modal.component.d.ts +0 -29
  100. package/overlay/popover/popover.component.d.ts +0 -13
  101. package/overlay/popover/popover.directive.d.ts +0 -11
  102. package/overlay/shared/CustomViewportRuler.d.ts +0 -63
  103. package/overlay/shared/quang-base-overlay.component.d.ts +0 -9
  104. package/overlay/shared/quang-base-overlay.directive.d.ts +0 -44
  105. package/overlay/toast/toast.component.d.ts +0 -13
  106. package/overlay/toast/toast.service.d.ts +0 -27
  107. package/overlay/tooltip/tooltip.component.d.ts +0 -11
  108. package/overlay/tooltip/tooltip.directive.d.ts +0 -11
  109. package/shared/intercept-utils.d.ts +0 -13
  110. package/translation/translation-loader.service.d.ts +0 -10
  111. package/translation/translation-providers.d.ts +0 -28
  112. package/translation/translation.service.d.ts +0 -15
  113. package/translation/translations.tokens.d.ts +0 -5
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { signal, Injectable, input, computed, output, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
3
  import * as i1 from '@jsverse/transloco';
4
4
  import { TranslocoPipe } from '@jsverse/transloco';
5
- import { NgIf, NgFor, NgClass, CommonModule } from '@angular/common';
5
+ import { NgClass, CommonModule } from '@angular/common';
6
6
  import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
  import { makeId } from 'quang/components/shared';
8
8
 
@@ -42,10 +42,10 @@ class QuangPaginatorLanguageService extends PaginatorIntl {
42
42
  this.changes.update((x) => x);
43
43
  });
44
44
  }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangPaginatorLanguageService, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Injectable }); }
46
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangPaginatorLanguageService, providedIn: 'root' }); }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangPaginatorLanguageService, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.Injectable }); }
46
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangPaginatorLanguageService, providedIn: 'root' }); }
47
47
  }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangPaginatorLanguageService, decorators: [{
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangPaginatorLanguageService, decorators: [{
49
49
  type: Injectable,
50
50
  args: [{
51
51
  providedIn: 'root',
@@ -114,20 +114,20 @@ class QuangPaginatorComponent {
114
114
  this._currentPage.set(this._totalPages());
115
115
  this.changePage.emit(this._currentPage());
116
116
  }
117
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangPaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
118
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.14", type: QuangPaginatorComponent, isStandalone: true, selector: "quang-paginator", inputs: { componentId: { classPropertyName: "componentId", publicName: "componentId", isSignal: true, isRequired: false, transformFunction: null }, componentTabIndex: { classPropertyName: "componentTabIndex", publicName: "componentTabIndex", isSignal: true, isRequired: false, transformFunction: null }, componentClass: { classPropertyName: "componentClass", publicName: "componentClass", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: true, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: true, transformFunction: null }, sizeList: { classPropertyName: "sizeList", publicName: "sizeList", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: true, transformFunction: null }, showTotalElementsCount: { classPropertyName: "showTotalElementsCount", publicName: "showTotalElementsCount", isSignal: true, isRequired: false, transformFunction: null }, totalItemsText: { classPropertyName: "totalItemsText", publicName: "totalItemsText", isSignal: true, isRequired: false, transformFunction: null }, sizeText: { classPropertyName: "sizeText", publicName: "sizeText", isSignal: true, isRequired: false, transformFunction: null }, pageRangeText: { classPropertyName: "pageRangeText", publicName: "pageRangeText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changePage: "changePage", changeSize: "changeSize" }, ngImport: i0, template: "<div\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n class=\"paginatorContainer\"\n>\n <div\n *ngIf=\"showTotalElementsCount()\"\n class=\"me-3 pagination-label\"\n >\n {{ totalItemsText() | transloco }} {{ totalItems() }}\n </div>\n <div\n *ngIf=\"sizeList().length > 0\"\n class=\"me-3\"\n >\n <label\n class=\"form-label pagination-label mb-0 text-center\"\n for=\"pageSize\"\n >\n {{ sizeText() | transloco }}\n </label>\n <select\n [id]=\"componentId() + '-quang-page-size'\"\n [tabIndex]=\"componentTabIndex()\"\n (change)=\"onChangeSize($event)\"\n #input\n autocomplete=\"off\"\n class=\"form-select page-size\"\n id=\"pageSize\"\n name=\"pageSize\"\n >\n <option\n [selected]=\"pageSize === this._pageSize()\"\n *ngFor=\"let pageSize of sizeList()\"\n >\n {{ pageSize }}\n </option>\n </select>\n </div>\n <div class=\"pagination-label text-center\">\n {{ pageRangeText() | transloco: { page: page(), amountPages: _totalPages() } }}\n </div>\n <div class=\"pagination\">\n <ul>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToFirstPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h80v480h-80Zm440 0L440-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToPreviousPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToNextPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToLastPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m280-240-56-56 184-184-184-184 56-56 240 240-240 240Zm360 0v-480h80v480h-80Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n </ul>\n </div>\n</div>\n\n<ng-template\n #nextTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M530-481 332-679l43-43 241 241-241 241-43-43 198-198Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #prevTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M561-240 320-481l241-241 43 43-198 198 198 198-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #lastTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m272-245-43-43 192-192-192-192 43-43 235 235-235 235Zm388 5v-480h60v480h-60Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #firstTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h60v480h-60Zm447-3L453-477l234-234 43 43-191 191 191 191-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n", styles: [":host{display:block}.paginatorContainer{display:flex;align-items:flex-end;flex-wrap:wrap}@media (min-width: 576px){.paginatorContainer{flex-wrap:nowrap;order:2}}.paginatorContainer .page-size{display:inline-block;margin-bottom:.5rem;order:2;min-width:80px}@media (min-width: 576px){.paginatorContainer .page-size{order:1}}.pagination{margin-bottom:.5rem}.pagination ul{padding:0;margin:0;display:flex}.pagination ul li{list-style-type:none}.pagination ul li.pagination-page{display:none}.pagination ul li .page-link{border-radius:50%;padding:.375rem;border:none;gap:1.5rem;padding:.25rem;background-color:transparent;color:var(--bs-body-color)}.pagination ul li .page-link:disabled svg path{opacity:40%}.pagination ul li .page-link:focus{box-shadow:unset;background-color:unset}.pagination ul li .page-link svg{vertical-align:bottom;width:30px;height:30px}.pagination-label{margin:0;margin-bottom:1rem;font-size:.75rem}\n"], dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
117
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangPaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.0", type: QuangPaginatorComponent, isStandalone: true, selector: "quang-paginator", inputs: { componentId: { classPropertyName: "componentId", publicName: "componentId", isSignal: true, isRequired: false, transformFunction: null }, componentTabIndex: { classPropertyName: "componentTabIndex", publicName: "componentTabIndex", isSignal: true, isRequired: false, transformFunction: null }, componentClass: { classPropertyName: "componentClass", publicName: "componentClass", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: true, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: true, transformFunction: null }, sizeList: { classPropertyName: "sizeList", publicName: "sizeList", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: true, transformFunction: null }, showTotalElementsCount: { classPropertyName: "showTotalElementsCount", publicName: "showTotalElementsCount", isSignal: true, isRequired: false, transformFunction: null }, totalItemsText: { classPropertyName: "totalItemsText", publicName: "totalItemsText", isSignal: true, isRequired: false, transformFunction: null }, sizeText: { classPropertyName: "sizeText", publicName: "sizeText", isSignal: true, isRequired: false, transformFunction: null }, pageRangeText: { classPropertyName: "pageRangeText", publicName: "pageRangeText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changePage: "changePage", changeSize: "changeSize" }, ngImport: i0, template: "<div\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n class=\"paginatorContainer\"\n>\n @if (showTotalElementsCount()) {\n <div class=\"me-3 pagination-label\">{{ totalItemsText() | transloco }} {{ totalItems() }}</div>\n }\n @if (sizeList().length > 0) {\n <div class=\"me-3\">\n <label\n class=\"form-label pagination-label mb-0 text-center\"\n for=\"pageSize\"\n >\n {{ sizeText() | transloco }}\n </label>\n <select\n [id]=\"componentId() + '-quang-page-size'\"\n [tabIndex]=\"componentTabIndex()\"\n (change)=\"onChangeSize($event)\"\n #input\n autocomplete=\"off\"\n class=\"form-select page-size\"\n id=\"pageSize\"\n name=\"pageSize\"\n >\n @for (pageSize of sizeList(); track pageSize) {\n <option [selected]=\"pageSize === this._pageSize()\">\n {{ pageSize }}\n </option>\n }\n </select>\n </div>\n }\n <div class=\"pagination-label text-center\">\n {{ pageRangeText() | transloco: { page: page(), amountPages: _totalPages() } }}\n </div>\n <div class=\"pagination\">\n <ul>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToFirstPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h80v480h-80Zm440 0L440-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToPreviousPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToNextPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToLastPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m280-240-56-56 184-184-184-184 56-56 240 240-240 240Zm360 0v-480h80v480h-80Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n </ul>\n </div>\n</div>\n\n<ng-template\n #nextTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M530-481 332-679l43-43 241 241-241 241-43-43 198-198Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #prevTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M561-240 320-481l241-241 43 43-198 198 198 198-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #lastTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m272-245-43-43 192-192-192-192 43-43 235 235-235 235Zm388 5v-480h60v480h-60Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #firstTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h60v480h-60Zm447-3L453-477l234-234 43 43-191 191 191 191-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n", styles: [":host{display:block}.paginatorContainer{display:flex;align-items:flex-end;flex-wrap:wrap}@media (min-width: 576px){.paginatorContainer{flex-wrap:nowrap;order:2}}.paginatorContainer .page-size{display:inline-block;margin-bottom:.5rem;order:2;min-width:80px}@media (min-width: 576px){.paginatorContainer .page-size{order:1}}.pagination{margin-bottom:.5rem}.pagination ul{padding:0;margin:0;display:flex}.pagination ul li{list-style-type:none}.pagination ul li.pagination-page{display:none}.pagination ul li .page-link{border-radius:50%;padding:.375rem;border:none;gap:1.5rem;padding:.25rem;background-color:transparent;color:var(--bs-body-color)}.pagination ul li .page-link:disabled svg path{opacity:40%}.pagination ul li .page-link:focus{box-shadow:unset;background-color:unset}.pagination ul li .page-link svg{vertical-align:bottom;width:30px;height:30px}.pagination-label{margin:0;margin-bottom:1rem;font-size:.75rem}\n"], dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
119
119
  }
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangPaginatorComponent, decorators: [{
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangPaginatorComponent, decorators: [{
121
121
  type: Component,
122
- args: [{ selector: 'quang-paginator', imports: [TranslocoPipe, NgIf, NgFor, NgClass], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n class=\"paginatorContainer\"\n>\n <div\n *ngIf=\"showTotalElementsCount()\"\n class=\"me-3 pagination-label\"\n >\n {{ totalItemsText() | transloco }} {{ totalItems() }}\n </div>\n <div\n *ngIf=\"sizeList().length > 0\"\n class=\"me-3\"\n >\n <label\n class=\"form-label pagination-label mb-0 text-center\"\n for=\"pageSize\"\n >\n {{ sizeText() | transloco }}\n </label>\n <select\n [id]=\"componentId() + '-quang-page-size'\"\n [tabIndex]=\"componentTabIndex()\"\n (change)=\"onChangeSize($event)\"\n #input\n autocomplete=\"off\"\n class=\"form-select page-size\"\n id=\"pageSize\"\n name=\"pageSize\"\n >\n <option\n [selected]=\"pageSize === this._pageSize()\"\n *ngFor=\"let pageSize of sizeList()\"\n >\n {{ pageSize }}\n </option>\n </select>\n </div>\n <div class=\"pagination-label text-center\">\n {{ pageRangeText() | transloco: { page: page(), amountPages: _totalPages() } }}\n </div>\n <div class=\"pagination\">\n <ul>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToFirstPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h80v480h-80Zm440 0L440-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToPreviousPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToNextPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToLastPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m280-240-56-56 184-184-184-184 56-56 240 240-240 240Zm360 0v-480h80v480h-80Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n </ul>\n </div>\n</div>\n\n<ng-template\n #nextTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M530-481 332-679l43-43 241 241-241 241-43-43 198-198Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #prevTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M561-240 320-481l241-241 43 43-198 198 198 198-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #lastTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m272-245-43-43 192-192-192-192 43-43 235 235-235 235Zm388 5v-480h60v480h-60Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #firstTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h60v480h-60Zm447-3L453-477l234-234 43 43-191 191 191 191-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n", styles: [":host{display:block}.paginatorContainer{display:flex;align-items:flex-end;flex-wrap:wrap}@media (min-width: 576px){.paginatorContainer{flex-wrap:nowrap;order:2}}.paginatorContainer .page-size{display:inline-block;margin-bottom:.5rem;order:2;min-width:80px}@media (min-width: 576px){.paginatorContainer .page-size{order:1}}.pagination{margin-bottom:.5rem}.pagination ul{padding:0;margin:0;display:flex}.pagination ul li{list-style-type:none}.pagination ul li.pagination-page{display:none}.pagination ul li .page-link{border-radius:50%;padding:.375rem;border:none;gap:1.5rem;padding:.25rem;background-color:transparent;color:var(--bs-body-color)}.pagination ul li .page-link:disabled svg path{opacity:40%}.pagination ul li .page-link:focus{box-shadow:unset;background-color:unset}.pagination ul li .page-link svg{vertical-align:bottom;width:30px;height:30px}.pagination-label{margin:0;margin-bottom:1rem;font-size:.75rem}\n"] }]
122
+ args: [{ selector: 'quang-paginator', imports: [TranslocoPipe, NgClass], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n class=\"paginatorContainer\"\n>\n @if (showTotalElementsCount()) {\n <div class=\"me-3 pagination-label\">{{ totalItemsText() | transloco }} {{ totalItems() }}</div>\n }\n @if (sizeList().length > 0) {\n <div class=\"me-3\">\n <label\n class=\"form-label pagination-label mb-0 text-center\"\n for=\"pageSize\"\n >\n {{ sizeText() | transloco }}\n </label>\n <select\n [id]=\"componentId() + '-quang-page-size'\"\n [tabIndex]=\"componentTabIndex()\"\n (change)=\"onChangeSize($event)\"\n #input\n autocomplete=\"off\"\n class=\"form-select page-size\"\n id=\"pageSize\"\n name=\"pageSize\"\n >\n @for (pageSize of sizeList(); track pageSize) {\n <option [selected]=\"pageSize === this._pageSize()\">\n {{ pageSize }}\n </option>\n }\n </select>\n </div>\n }\n <div class=\"pagination-label text-center\">\n {{ pageRangeText() | transloco: { page: page(), amountPages: _totalPages() } }}\n </div>\n <div class=\"pagination\">\n <ul>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToFirstPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h80v480h-80Zm440 0L440-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToPreviousPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToNextPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToLastPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m280-240-56-56 184-184-184-184 56-56 240 240-240 240Zm360 0v-480h80v480h-80Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n </ul>\n </div>\n</div>\n\n<ng-template\n #nextTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M530-481 332-679l43-43 241 241-241 241-43-43 198-198Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #prevTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M561-240 320-481l241-241 43 43-198 198 198 198-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #lastTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m272-245-43-43 192-192-192-192 43-43 235 235-235 235Zm388 5v-480h60v480h-60Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #firstTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h60v480h-60Zm447-3L453-477l234-234 43 43-191 191 191 191-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n", styles: [":host{display:block}.paginatorContainer{display:flex;align-items:flex-end;flex-wrap:wrap}@media (min-width: 576px){.paginatorContainer{flex-wrap:nowrap;order:2}}.paginatorContainer .page-size{display:inline-block;margin-bottom:.5rem;order:2;min-width:80px}@media (min-width: 576px){.paginatorContainer .page-size{order:1}}.pagination{margin-bottom:.5rem}.pagination ul{padding:0;margin:0;display:flex}.pagination ul li{list-style-type:none}.pagination ul li.pagination-page{display:none}.pagination ul li .page-link{border-radius:50%;padding:.375rem;border:none;gap:1.5rem;padding:.25rem;background-color:transparent;color:var(--bs-body-color)}.pagination ul li .page-link:disabled svg path{opacity:40%}.pagination ul li .page-link:focus{box-shadow:unset;background-color:unset}.pagination ul li .page-link svg{vertical-align:bottom;width:30px;height:30px}.pagination-label{margin:0;margin-bottom:1rem;font-size:.75rem}\n"] }]
123
123
  }] });
124
124
 
125
125
  class PaginatorModule {
126
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PaginatorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
127
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: PaginatorModule, imports: [CommonModule] }); }
128
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PaginatorModule, imports: [CommonModule] }); }
126
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: PaginatorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
127
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.0", ngImport: i0, type: PaginatorModule, imports: [CommonModule] }); }
128
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: PaginatorModule, imports: [CommonModule] }); }
129
129
  }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PaginatorModule, decorators: [{
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: PaginatorModule, decorators: [{
131
131
  type: NgModule,
132
132
  args: [{
133
133
  declarations: [],
@@ -142,10 +142,10 @@ class QuangPaginatorService {
142
142
  const end = (pageNumber + 1) * pageSize;
143
143
  return list.slice(start, end);
144
144
  }
145
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangPaginatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
146
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangPaginatorService }); }
145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangPaginatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
146
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangPaginatorService }); }
147
147
  }
148
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangPaginatorService, decorators: [{
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangPaginatorService, decorators: [{
149
149
  type: Injectable
150
150
  }] });
151
151
 
@@ -1 +1 @@
1
- {"version":3,"file":"quang-components-paginator.mjs","sources":["../../../projects/quang/components/paginator/paginatorIntl.ts","../../../projects/quang/components/paginator/paginator-language.service.ts","../../../projects/quang/components/paginator/paginator.component.ts","../../../projects/quang/components/paginator/paginator.component.html","../../../projects/quang/components/paginator/paginator.module.ts","../../../projects/quang/components/paginator/paginator.service.ts","../../../projects/quang/components/paginator/quang-components-paginator.ts"],"sourcesContent":["import { signal, ɵɵFactoryDeclaration, ɵɵInjectableDeclaration } from '@angular/core'\n\nexport class PaginatorIntl {\n readonly changes = signal<any | undefined>(undefined)\n\n itemsPerPageLabel = ''\n\n nextPageLabel = ''\n\n previousPageLabel = ''\n\n firstPageLabel = ''\n\n lastPageLabel = ''\n\n static ɵfac: ɵɵFactoryDeclaration<PaginatorIntl, never>\n\n static ɵprov: ɵɵInjectableDeclaration<PaginatorIntl>\n\n getRangeLabel: ((page: number, pageSize: number, length: number) => string) | undefined\n}\n","import { Injectable } from '@angular/core'\n\nimport { TranslocoService } from '@jsverse/transloco'\n\nimport { PaginatorIntl } from './paginatorIntl'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class QuangPaginatorLanguageService extends PaginatorIntl {\n constructor(private readonly transloco: TranslocoService) {\n super()\n this.transloco.langChanges$.subscribe(() => {\n this.getAndInitTranslations()\n })\n this.getAndInitTranslations()\n }\n\n getAndInitTranslations(): void {\n this.transloco\n .selectTranslate([\n 'quangPaginator.itemsPerPage',\n 'quangPaginator.nextPage',\n 'quangPaginator.previousPage',\n 'quangPaginator.firstPage',\n 'quangPaginator.lastPage',\n ])\n .subscribe((t) => {\n ;[this.itemsPerPageLabel, this.nextPageLabel, this.previousPageLabel, this.firstPageLabel, this.lastPageLabel] =\n t\n this.changes.update((x) => x)\n })\n }\n}\n","import { NgClass, NgFor, NgIf } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, OnInit, computed, input, output, signal } from '@angular/core'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\n\nimport { makeId } from 'quang/components/shared'\n\n@Component({\n selector: 'quang-paginator',\n imports: [TranslocoPipe, NgIf, NgFor, NgClass],\n templateUrl: './paginator.component.html',\n styleUrl: './paginator.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Paginator component for handling pagination in lists and tables.\n *\n * This component provides a user interface for navigating through pages of data.\n *\n * @usageNotes\n * `showTotalElementsCount` can be used to show or hide the total number of items.\n */\nexport class QuangPaginatorComponent implements OnInit {\n componentId = input<string>(makeId(10))\n\n componentTabIndex = input<number>(0)\n\n componentClass = input<string | string[]>('')\n\n page = input.required<number>()\n\n pageSize = input.required<number>()\n\n sizeList = input<number[]>([])\n\n totalItems = input.required<number>()\n\n showTotalElementsCount = input<boolean>(true)\n\n totalItemsText = input<string>('quangPaginator.totalItems')\n\n sizeText = input<string>('quangPaginator.size')\n\n pageRangeText = input<string>('quangPaginator.pageRange')\n\n _currentPage = signal<number>(1)\n\n page$ = toObservable(this.page)\n .pipe(takeUntilDestroyed())\n .subscribe((page) => {\n this._currentPage.set(page)\n })\n\n _pageSize = signal<number>(0)\n\n pageSize$ = toObservable(this.pageSize)\n .pipe(takeUntilDestroyed())\n .subscribe((pageSize) => {\n this._pageSize.set(pageSize)\n })\n\n _totalPages = computed(() => Math.ceil(this.totalItems() / this._pageSize()))\n\n changePage = output<number>()\n\n changeSize = output<number>()\n\n ngOnInit(): void {\n this._currentPage.set(this.page())\n this._pageSize.set(this.pageSize())\n }\n\n onChangeSize(event: any): void {\n this._pageSize.set(parseInt(event.target.value))\n this.changeSize.emit(this._pageSize())\n this.goToFirstPage()\n }\n\n goToNextPage(): void {\n this._currentPage.update((page) => page + 1)\n this.changePage.emit(this._currentPage())\n }\n\n goToPreviousPage(): void {\n this._currentPage.update((page) => page - 1)\n this.changePage.emit(this._currentPage())\n }\n\n goToFirstPage(): void {\n this._currentPage.set(1)\n this.changePage.emit(this._currentPage())\n }\n\n goToLastPage(): void {\n this._currentPage.set(this._totalPages())\n this.changePage.emit(this._currentPage())\n }\n}\n","<div\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n class=\"paginatorContainer\"\n>\n <div\n *ngIf=\"showTotalElementsCount()\"\n class=\"me-3 pagination-label\"\n >\n {{ totalItemsText() | transloco }} {{ totalItems() }}\n </div>\n <div\n *ngIf=\"sizeList().length > 0\"\n class=\"me-3\"\n >\n <label\n class=\"form-label pagination-label mb-0 text-center\"\n for=\"pageSize\"\n >\n {{ sizeText() | transloco }}\n </label>\n <select\n [id]=\"componentId() + '-quang-page-size'\"\n [tabIndex]=\"componentTabIndex()\"\n (change)=\"onChangeSize($event)\"\n #input\n autocomplete=\"off\"\n class=\"form-select page-size\"\n id=\"pageSize\"\n name=\"pageSize\"\n >\n <option\n [selected]=\"pageSize === this._pageSize()\"\n *ngFor=\"let pageSize of sizeList()\"\n >\n {{ pageSize }}\n </option>\n </select>\n </div>\n <div class=\"pagination-label text-center\">\n {{ pageRangeText() | transloco: { page: page(), amountPages: _totalPages() } }}\n </div>\n <div class=\"pagination\">\n <ul>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToFirstPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h80v480h-80Zm440 0L440-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToPreviousPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToNextPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToLastPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m280-240-56-56 184-184-184-184 56-56 240 240-240 240Zm360 0v-480h80v480h-80Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n </ul>\n </div>\n</div>\n\n<ng-template\n #nextTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M530-481 332-679l43-43 241 241-241 241-43-43 198-198Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #prevTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M561-240 320-481l241-241 43 43-198 198 198 198-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #lastTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m272-245-43-43 192-192-192-192 43-43 235 235-235 235Zm388 5v-480h60v480h-60Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #firstTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h60v480h-60Zm447-3L453-477l234-234 43 43-191 191 191 191-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n})\nexport class PaginatorModule {}\n","import { Injectable } from '@angular/core'\n\n@Injectable()\nexport class QuangPaginatorService {\n // Returns the portion of the list given the page and the number of items per page\n getPage(list: any[], pageNumber: number, pageSize: number): any[] {\n const start = pageNumber * pageSize\n const end = (pageNumber + 1) * pageSize\n return list.slice(start, end)\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quang-components-paginator.mjs","sources":["../../../projects/quang/components/paginator/paginatorIntl.ts","../../../projects/quang/components/paginator/paginator-language.service.ts","../../../projects/quang/components/paginator/paginator.component.ts","../../../projects/quang/components/paginator/paginator.component.html","../../../projects/quang/components/paginator/paginator.module.ts","../../../projects/quang/components/paginator/paginator.service.ts","../../../projects/quang/components/paginator/quang-components-paginator.ts"],"sourcesContent":["import { signal, ɵɵFactoryDeclaration, ɵɵInjectableDeclaration } from '@angular/core'\n\nexport class PaginatorIntl {\n readonly changes = signal<any | undefined>(undefined)\n\n itemsPerPageLabel = ''\n\n nextPageLabel = ''\n\n previousPageLabel = ''\n\n firstPageLabel = ''\n\n lastPageLabel = ''\n\n static ɵfac: ɵɵFactoryDeclaration<PaginatorIntl, never>\n\n static ɵprov: ɵɵInjectableDeclaration<PaginatorIntl>\n\n getRangeLabel: ((page: number, pageSize: number, length: number) => string) | undefined\n}\n","import { Injectable } from '@angular/core'\n\nimport { TranslocoService } from '@jsverse/transloco'\n\nimport { PaginatorIntl } from './paginatorIntl'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class QuangPaginatorLanguageService extends PaginatorIntl {\n constructor(private readonly transloco: TranslocoService) {\n super()\n this.transloco.langChanges$.subscribe(() => {\n this.getAndInitTranslations()\n })\n this.getAndInitTranslations()\n }\n\n getAndInitTranslations(): void {\n this.transloco\n .selectTranslate([\n 'quangPaginator.itemsPerPage',\n 'quangPaginator.nextPage',\n 'quangPaginator.previousPage',\n 'quangPaginator.firstPage',\n 'quangPaginator.lastPage',\n ])\n .subscribe((t) => {\n ;[this.itemsPerPageLabel, this.nextPageLabel, this.previousPageLabel, this.firstPageLabel, this.lastPageLabel] =\n t\n this.changes.update((x) => x)\n })\n }\n}\n","import { NgClass } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, OnInit, computed, input, output, signal } from '@angular/core'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\n\nimport { makeId } from 'quang/components/shared'\n\n@Component({\n selector: 'quang-paginator',\n imports: [TranslocoPipe, NgClass],\n templateUrl: './paginator.component.html',\n styleUrl: './paginator.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Paginator component for handling pagination in lists and tables.\n *\n * This component provides a user interface for navigating through pages of data.\n *\n * @usageNotes\n * `showTotalElementsCount` can be used to show or hide the total number of items.\n */\nexport class QuangPaginatorComponent implements OnInit {\n componentId = input<string>(makeId(10))\n\n componentTabIndex = input<number>(0)\n\n componentClass = input<string | string[]>('')\n\n page = input.required<number>()\n\n pageSize = input.required<number>()\n\n sizeList = input<number[]>([])\n\n totalItems = input.required<number>()\n\n showTotalElementsCount = input<boolean>(true)\n\n totalItemsText = input<string>('quangPaginator.totalItems')\n\n sizeText = input<string>('quangPaginator.size')\n\n pageRangeText = input<string>('quangPaginator.pageRange')\n\n _currentPage = signal<number>(1)\n\n page$ = toObservable(this.page)\n .pipe(takeUntilDestroyed())\n .subscribe((page) => {\n this._currentPage.set(page)\n })\n\n _pageSize = signal<number>(0)\n\n pageSize$ = toObservable(this.pageSize)\n .pipe(takeUntilDestroyed())\n .subscribe((pageSize) => {\n this._pageSize.set(pageSize)\n })\n\n _totalPages = computed(() => Math.ceil(this.totalItems() / this._pageSize()))\n\n changePage = output<number>()\n\n changeSize = output<number>()\n\n ngOnInit(): void {\n this._currentPage.set(this.page())\n this._pageSize.set(this.pageSize())\n }\n\n onChangeSize(event: any): void {\n this._pageSize.set(parseInt(event.target.value))\n this.changeSize.emit(this._pageSize())\n this.goToFirstPage()\n }\n\n goToNextPage(): void {\n this._currentPage.update((page) => page + 1)\n this.changePage.emit(this._currentPage())\n }\n\n goToPreviousPage(): void {\n this._currentPage.update((page) => page - 1)\n this.changePage.emit(this._currentPage())\n }\n\n goToFirstPage(): void {\n this._currentPage.set(1)\n this.changePage.emit(this._currentPage())\n }\n\n goToLastPage(): void {\n this._currentPage.set(this._totalPages())\n this.changePage.emit(this._currentPage())\n }\n}\n","<div\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n class=\"paginatorContainer\"\n>\n @if (showTotalElementsCount()) {\n <div class=\"me-3 pagination-label\">{{ totalItemsText() | transloco }} {{ totalItems() }}</div>\n }\n @if (sizeList().length > 0) {\n <div class=\"me-3\">\n <label\n class=\"form-label pagination-label mb-0 text-center\"\n for=\"pageSize\"\n >\n {{ sizeText() | transloco }}\n </label>\n <select\n [id]=\"componentId() + '-quang-page-size'\"\n [tabIndex]=\"componentTabIndex()\"\n (change)=\"onChangeSize($event)\"\n #input\n autocomplete=\"off\"\n class=\"form-select page-size\"\n id=\"pageSize\"\n name=\"pageSize\"\n >\n @for (pageSize of sizeList(); track pageSize) {\n <option [selected]=\"pageSize === this._pageSize()\">\n {{ pageSize }}\n </option>\n }\n </select>\n </div>\n }\n <div class=\"pagination-label text-center\">\n {{ pageRangeText() | transloco: { page: page(), amountPages: _totalPages() } }}\n </div>\n <div class=\"pagination\">\n <ul>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToFirstPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h80v480h-80Zm440 0L440-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() <= 1\"\n (click)=\"goToPreviousPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToNextPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n <li>\n <button\n [disabled]=\"_currentPage() >= _totalPages()\"\n (click)=\"goToLastPage()\"\n class=\"page-link\"\n type=\"button\"\n >\n <svg\n fill=\"currentColor\"\n height=\"24\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m280-240-56-56 184-184-184-184 56-56 240 240-240 240Zm360 0v-480h80v480h-80Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n </button>\n </li>\n </ul>\n </div>\n</div>\n\n<ng-template\n #nextTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M530-481 332-679l43-43 241 241-241 241-43-43 198-198Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #prevTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M561-240 320-481l241-241 43 43-198 198 198 198-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #lastTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"m272-245-43-43 192-192-192-192 43-43 235 235-235 235Zm388 5v-480h60v480h-60Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n\n<ng-template\n #firstTemplate\n let-currentPage=\"currentPage\"\n let-disabled=\"disabled\"\n>\n <svg\n fill=\"currentColor\"\n fill=\"currentColor\"\n height=\"48\"\n stroke=\"currentColor\"\n viewBox=\"0 -960 960 960\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M240-240v-480h60v480h-60Zm447-3L453-477l234-234 43 43-191 191 191 191-43 43Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n />\n </svg>\n</ng-template>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n})\nexport class PaginatorModule {}\n","import { Injectable } from '@angular/core'\n\n@Injectable()\nexport class QuangPaginatorService {\n // Returns the portion of the list given the page and the number of items per page\n getPage(list: any[], pageNumber: number, pageSize: number): any[] {\n const start = pageNumber * pageSize\n const end = (pageNumber + 1) * pageSize\n return list.slice(start, end)\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { NgIf, NgFor, NgClass } from '@angular/common';
1
+ import { NgClass } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
3
  import { input, viewChild, signal, computed, forwardRef, ChangeDetectionStrategy, Component } from '@angular/core';
4
4
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
@@ -87,8 +87,8 @@ class QuangSelectComponent extends QuangBaseComponent {
87
87
  this.hideOptionVisibility();
88
88
  }
89
89
  }
90
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
91
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: QuangSelectComponent, isStandalone: true, selector: "quang-select", inputs: { selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, optionListMaxHeight: { classPropertyName: "optionListMaxHeight", publicName: "optionListMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, selectOptions: { classPropertyName: "selectOptions", publicName: "selectOptions", isSignal: true, isRequired: true, transformFunction: null }, scrollBehaviorOnOpen: { classPropertyName: "scrollBehaviorOnOpen", publicName: "scrollBehaviorOnOpen", isSignal: true, isRequired: false, transformFunction: null }, translateValue: { classPropertyName: "translateValue", publicName: "translateValue", isSignal: true, isRequired: false, transformFunction: null }, nullOption: { classPropertyName: "nullOption", publicName: "nullOption", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
90
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
91
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.0", type: QuangSelectComponent, isStandalone: true, selector: "quang-select", inputs: { selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, optionListMaxHeight: { classPropertyName: "optionListMaxHeight", publicName: "optionListMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, selectOptions: { classPropertyName: "selectOptions", publicName: "selectOptions", isSignal: true, isRequired: true, transformFunction: null }, scrollBehaviorOnOpen: { classPropertyName: "scrollBehaviorOnOpen", publicName: "scrollBehaviorOnOpen", isSignal: true, isRequired: false, transformFunction: null }, translateValue: { classPropertyName: "translateValue", publicName: "translateValue", isSignal: true, isRequired: false, transformFunction: null }, nullOption: { classPropertyName: "nullOption", publicName: "nullOption", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
92
92
  {
93
93
  provide: NG_VALUE_ACCESSOR,
94
94
  useExisting: forwardRef(() => QuangSelectComponent),
@@ -98,9 +98,9 @@ class QuangSelectComponent extends QuangBaseComponent {
98
98
  provide: QuangOptionListComponent,
99
99
  multi: false,
100
100
  },
101
- ], viewQueries: [{ propertyName: "selectButton", first: true, predicate: ["selectButton"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n (mouseleave)=\"onMouseLeaveCallback()\"\n class=\"mb-3\"\n>\n <label\n [htmlFor]=\"componentId()\"\n *ngIf=\"componentLabel()\"\n class=\"form-label w-100\"\n >\n {{ componentLabel() | transloco }}\n <span [hidden]=\"!_isRequired()\">*</span>\n </label>\n <div\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n class=\"option-list-container\"\n >\n <button\n [attr.required]=\"getIsRequiredControl()\"\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n [disabled]=\"_isDisabled()\"\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n [tabIndex]=\"componentTabIndex()\"\n (click)=\"changeOptionsVisibility()\"\n #selectButton\n class=\"form-select\"\n type=\"button\"\n >\n <div class=\"content\">\n @if (_selectedItems()?.length) {\n <ng-container *ngFor=\"let val of _selectedItems(); let last = last\">\n {{ translateValue() ? (val.label | transloco) : val.label }}{{ !last ? ', ' : '' }}\n </ng-container>\n } @else {\n <ng-container>{{ componentPlaceholder() | transloco }}</ng-container>\n }\n </div>\n </button>\n\n <quang-option-list\n [_isDisabled]=\"_isDisabled()\"\n [_value]=\"_value()\"\n [componentClass]=\"componentClass()\"\n [componentLabel]=\"componentLabel()\"\n [componentTabIndex]=\"componentTabIndex()\"\n [nullOption]=\"nullOption()\"\n [optionListMaxHeight]=\"optionListMaxHeight()\"\n [parentType]=\"ParentType\"\n [scrollBehaviorOnOpen]=\"scrollBehaviorOnOpen()\"\n [selectButtonRef]=\"selectButton\"\n [selectionMode]=\"selectionMode()\"\n [selectOptions]=\"selectOptions()\"\n [translateValue]=\"translateValue()\"\n (blurHandler)=\"onBlurHandler()\"\n (changedHandler)=\"onChangedHandler($event)\"\n *ngIf=\"_showOptions()\"\n #optionList\n ></quang-option-list>\n </div>\n <div class=\"valid-feedback\">\n {{ successMessage() | transloco }}\n </div>\n <div class=\"invalid-feedback\">\n {{ _currentErrorMessage() | transloco: _currentErrorMessageExtraData() }}\n </div>\n <small\n [hidden]=\"_showSuccess() || _showErrors()\"\n *ngIf=\"helpMessage()\"\n aria-live=\"assertive\"\n class=\"form-text text-muted\"\n >\n {{ helpMessage() | transloco }}\n </small>\n</div>\n", styles: [":host{display:block}:host .option-list-container{position:relative}.form-select{height:2.375rem}.form-select:disabled{background-image:unset}.content{text-align:left;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: QuangOptionListComponent, selector: "quang-option-list", inputs: ["selectionMode", "optionListMaxHeight", "selectOptions", "selectButtonRef", "_value", "_isDisabled", "componentClass", "componentLabel", "componentTabIndex", "translateValue", "nullOption", "scrollBehaviorOnOpen", "parentType", "parentID"], outputs: ["changedHandler", "blurHandler"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
101
+ ], viewQueries: [{ propertyName: "selectButton", first: true, predicate: ["selectButton"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n (mouseleave)=\"onMouseLeaveCallback()\"\n class=\"mb-3\"\n>\n @if (componentLabel()) {\n <label\n [htmlFor]=\"componentId()\"\n class=\"form-label w-100\"\n >\n {{ componentLabel() | transloco }}\n <span [hidden]=\"!_isRequired()\">*</span>\n </label>\n }\n <div\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n class=\"option-list-container\"\n >\n <button\n [attr.required]=\"getIsRequiredControl()\"\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n [disabled]=\"_isDisabled()\"\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n [tabIndex]=\"componentTabIndex()\"\n (click)=\"changeOptionsVisibility()\"\n #selectButton\n class=\"form-select\"\n type=\"button\"\n >\n <div class=\"content\">\n @if (_selectedItems()?.length) {\n @for (val of _selectedItems(); track val.value; let last = $last) {\n {{ translateValue() ? (val.label | transloco) : val.label }}{{ !last ? ', ' : '' }}\n }\n } @else {\n <ng-container>{{ componentPlaceholder() | transloco }}</ng-container>\n }\n </div>\n </button>\n\n @if (_showOptions()) {\n <quang-option-list\n [_isDisabled]=\"_isDisabled()\"\n [_value]=\"_value()\"\n [componentClass]=\"componentClass()\"\n [componentLabel]=\"componentLabel()\"\n [componentTabIndex]=\"componentTabIndex()\"\n [nullOption]=\"nullOption()\"\n [optionListMaxHeight]=\"optionListMaxHeight()\"\n [parentType]=\"ParentType\"\n [scrollBehaviorOnOpen]=\"scrollBehaviorOnOpen()\"\n [selectButtonRef]=\"selectButton\"\n [selectionMode]=\"selectionMode()\"\n [selectOptions]=\"selectOptions()\"\n [translateValue]=\"translateValue()\"\n (blurHandler)=\"onBlurHandler()\"\n (changedHandler)=\"onChangedHandler($event)\"\n #optionList\n ></quang-option-list>\n }\n </div>\n <div class=\"valid-feedback\">\n {{ successMessage() | transloco }}\n </div>\n <div class=\"invalid-feedback\">\n {{ _currentErrorMessage() | transloco: _currentErrorMessageExtraData() }}\n </div>\n @if (helpMessage()) {\n <small\n [hidden]=\"_showSuccess() || _showErrors()\"\n aria-live=\"assertive\"\n class=\"form-text text-muted\"\n >\n {{ helpMessage() | transloco }}\n </small>\n }\n</div>\n", styles: [":host{display:block}:host .option-list-container{position:relative}.form-select{height:2.375rem}.form-select:disabled{background-image:unset}.content{text-align:left;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: QuangOptionListComponent, selector: "quang-option-list", inputs: ["selectionMode", "optionListMaxHeight", "selectOptions", "selectButtonRef", "_value", "_isDisabled", "componentClass", "componentLabel", "componentTabIndex", "translateValue", "nullOption", "scrollBehaviorOnOpen", "parentType", "parentID"], outputs: ["changedHandler", "blurHandler"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
102
102
  }
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangSelectComponent, decorators: [{
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangSelectComponent, decorators: [{
104
104
  type: Component,
105
105
  args: [{ selector: 'quang-select', providers: [
106
106
  {
@@ -112,7 +112,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
112
112
  provide: QuangOptionListComponent,
113
113
  multi: false,
114
114
  },
115
- ], imports: [TranslocoPipe, NgIf, NgFor, NgClass, QuangOptionListComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n (mouseleave)=\"onMouseLeaveCallback()\"\n class=\"mb-3\"\n>\n <label\n [htmlFor]=\"componentId()\"\n *ngIf=\"componentLabel()\"\n class=\"form-label w-100\"\n >\n {{ componentLabel() | transloco }}\n <span [hidden]=\"!_isRequired()\">*</span>\n </label>\n <div\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n class=\"option-list-container\"\n >\n <button\n [attr.required]=\"getIsRequiredControl()\"\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n [disabled]=\"_isDisabled()\"\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n [tabIndex]=\"componentTabIndex()\"\n (click)=\"changeOptionsVisibility()\"\n #selectButton\n class=\"form-select\"\n type=\"button\"\n >\n <div class=\"content\">\n @if (_selectedItems()?.length) {\n <ng-container *ngFor=\"let val of _selectedItems(); let last = last\">\n {{ translateValue() ? (val.label | transloco) : val.label }}{{ !last ? ', ' : '' }}\n </ng-container>\n } @else {\n <ng-container>{{ componentPlaceholder() | transloco }}</ng-container>\n }\n </div>\n </button>\n\n <quang-option-list\n [_isDisabled]=\"_isDisabled()\"\n [_value]=\"_value()\"\n [componentClass]=\"componentClass()\"\n [componentLabel]=\"componentLabel()\"\n [componentTabIndex]=\"componentTabIndex()\"\n [nullOption]=\"nullOption()\"\n [optionListMaxHeight]=\"optionListMaxHeight()\"\n [parentType]=\"ParentType\"\n [scrollBehaviorOnOpen]=\"scrollBehaviorOnOpen()\"\n [selectButtonRef]=\"selectButton\"\n [selectionMode]=\"selectionMode()\"\n [selectOptions]=\"selectOptions()\"\n [translateValue]=\"translateValue()\"\n (blurHandler)=\"onBlurHandler()\"\n (changedHandler)=\"onChangedHandler($event)\"\n *ngIf=\"_showOptions()\"\n #optionList\n ></quang-option-list>\n </div>\n <div class=\"valid-feedback\">\n {{ successMessage() | transloco }}\n </div>\n <div class=\"invalid-feedback\">\n {{ _currentErrorMessage() | transloco: _currentErrorMessageExtraData() }}\n </div>\n <small\n [hidden]=\"_showSuccess() || _showErrors()\"\n *ngIf=\"helpMessage()\"\n aria-live=\"assertive\"\n class=\"form-text text-muted\"\n >\n {{ helpMessage() | transloco }}\n </small>\n</div>\n", styles: [":host{display:block}:host .option-list-container{position:relative}.form-select{height:2.375rem}.form-select:disabled{background-image:unset}.content{text-align:left;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"] }]
115
+ ], imports: [TranslocoPipe, NgClass, QuangOptionListComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n (mouseleave)=\"onMouseLeaveCallback()\"\n class=\"mb-3\"\n>\n @if (componentLabel()) {\n <label\n [htmlFor]=\"componentId()\"\n class=\"form-label w-100\"\n >\n {{ componentLabel() | transloco }}\n <span [hidden]=\"!_isRequired()\">*</span>\n </label>\n }\n <div\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n class=\"option-list-container\"\n >\n <button\n [attr.required]=\"getIsRequiredControl()\"\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n [disabled]=\"_isDisabled()\"\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n [tabIndex]=\"componentTabIndex()\"\n (click)=\"changeOptionsVisibility()\"\n #selectButton\n class=\"form-select\"\n type=\"button\"\n >\n <div class=\"content\">\n @if (_selectedItems()?.length) {\n @for (val of _selectedItems(); track val.value; let last = $last) {\n {{ translateValue() ? (val.label | transloco) : val.label }}{{ !last ? ', ' : '' }}\n }\n } @else {\n <ng-container>{{ componentPlaceholder() | transloco }}</ng-container>\n }\n </div>\n </button>\n\n @if (_showOptions()) {\n <quang-option-list\n [_isDisabled]=\"_isDisabled()\"\n [_value]=\"_value()\"\n [componentClass]=\"componentClass()\"\n [componentLabel]=\"componentLabel()\"\n [componentTabIndex]=\"componentTabIndex()\"\n [nullOption]=\"nullOption()\"\n [optionListMaxHeight]=\"optionListMaxHeight()\"\n [parentType]=\"ParentType\"\n [scrollBehaviorOnOpen]=\"scrollBehaviorOnOpen()\"\n [selectButtonRef]=\"selectButton\"\n [selectionMode]=\"selectionMode()\"\n [selectOptions]=\"selectOptions()\"\n [translateValue]=\"translateValue()\"\n (blurHandler)=\"onBlurHandler()\"\n (changedHandler)=\"onChangedHandler($event)\"\n #optionList\n ></quang-option-list>\n }\n </div>\n <div class=\"valid-feedback\">\n {{ successMessage() | transloco }}\n </div>\n <div class=\"invalid-feedback\">\n {{ _currentErrorMessage() | transloco: _currentErrorMessageExtraData() }}\n </div>\n @if (helpMessage()) {\n <small\n [hidden]=\"_showSuccess() || _showErrors()\"\n aria-live=\"assertive\"\n class=\"form-text text-muted\"\n >\n {{ helpMessage() | transloco }}\n </small>\n }\n</div>\n", styles: [":host{display:block}:host .option-list-container{position:relative}.form-select{height:2.375rem}.form-select:disabled{background-image:unset}.content{text-align:left;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"] }]
116
116
  }] });
117
117
 
118
118
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"quang-components-select.mjs","sources":["../../../projects/quang/components/select/select.component.ts","../../../projects/quang/components/select/select.component.html","../../../projects/quang/components/select/quang-components-select.ts"],"sourcesContent":["import { NgClass, NgFor, NgIf } from '@angular/common'\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n forwardRef,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { NG_VALUE_ACCESSOR } from '@angular/forms'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\n\nimport {\n OptionListParentType,\n QuangBaseComponent,\n QuangOptionListComponent,\n SelectOption,\n} from 'quang/components/shared'\n\n@Component({\n selector: 'quang-select',\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => QuangSelectComponent),\n multi: true,\n },\n {\n provide: QuangOptionListComponent,\n multi: false,\n },\n ],\n imports: [TranslocoPipe, NgIf, NgFor, NgClass, QuangOptionListComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Select component for choosing one or multiple options from a dropdown.\n *\n * @usageNotes\n * This component supports both single and multiple selection modes. It can be configured\n * to display a list of options and allows users to select one or more of them by setting the `selectionMode` property to either `single` or `multiple`.\n */\nexport class QuangSelectComponent\n extends QuangBaseComponent<string | number | string[] | number[] | null>\n implements AfterViewInit\n{\n selectionMode = input<'single' | 'multiple'>('single')\n\n /**\n * Set the max height of the selection list before scrolling.\n * Default: 18rem\n * @default 18rem\n */\n optionListMaxHeight = input<string>('18rem')\n\n selectOptions = input.required<SelectOption[]>()\n\n scrollBehaviorOnOpen = input<ScrollBehavior>('smooth')\n\n selectButton = viewChild<ElementRef<HTMLButtonElement>>('selectButton')\n\n _showOptions = signal<boolean>(false)\n\n _optionHideTimeout = signal<any | undefined>(undefined)\n\n _selectedItems = computed(() => {\n if (this._value() !== null) {\n const targetValue = this._value()\n return this.selectOptions().filter((x) => {\n if (Array.isArray(targetValue)) {\n return targetValue.some((k) => k === x.value)\n }\n return targetValue === x.value\n })\n }\n return null\n })\n\n translateValue = input<boolean>(true)\n\n nullOption = input<boolean>(true)\n\n readonly ParentType = OptionListParentType.SELECT\n\n changeOptionsVisibility(skipTimeout = false): void {\n if (this.isReadonly()) return\n if (this._showOptions()) {\n this._showOptions.set(skipTimeout)\n } else {\n this.showOptionVisibility()\n }\n }\n\n showOptionVisibility(): void {\n if (this._optionHideTimeout()) {\n clearTimeout(this._optionHideTimeout())\n this._optionHideTimeout.set(null)\n }\n this._showOptions.set(true)\n }\n\n hideOptionVisibility(skipTimeout = false): void {\n if (this._optionHideTimeout()) {\n clearTimeout(this._optionHideTimeout())\n }\n this._optionHideTimeout.set(\n setTimeout(\n () => {\n this._showOptions.set(false)\n },\n skipTimeout ? 0 : 50\n )\n )\n }\n\n override onBlurHandler() {\n if (this.selectionMode() === 'single') {\n setTimeout(() => {\n this.hideOptionVisibility()\n super.onBlurHandler()\n }, 100)\n }\n }\n\n override onChangedHandler(value: string | number | string[] | number[] | null): void {\n super.onChangedHandler(value)\n if (this.selectionMode() === 'single') {\n this.hideOptionVisibility()\n }\n }\n\n onMouseLeaveCallback() {\n if (this.selectionMode() === 'multiple') {\n this.hideOptionVisibility()\n }\n }\n}\n","<div\n (mouseleave)=\"onMouseLeaveCallback()\"\n class=\"mb-3\"\n>\n <label\n [htmlFor]=\"componentId()\"\n *ngIf=\"componentLabel()\"\n class=\"form-label w-100\"\n >\n {{ componentLabel() | transloco }}\n <span [hidden]=\"!_isRequired()\">*</span>\n </label>\n <div\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n class=\"option-list-container\"\n >\n <button\n [attr.required]=\"getIsRequiredControl()\"\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n [disabled]=\"_isDisabled()\"\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n [tabIndex]=\"componentTabIndex()\"\n (click)=\"changeOptionsVisibility()\"\n #selectButton\n class=\"form-select\"\n type=\"button\"\n >\n <div class=\"content\">\n @if (_selectedItems()?.length) {\n <ng-container *ngFor=\"let val of _selectedItems(); let last = last\">\n {{ translateValue() ? (val.label | transloco) : val.label }}{{ !last ? ', ' : '' }}\n </ng-container>\n } @else {\n <ng-container>{{ componentPlaceholder() | transloco }}</ng-container>\n }\n </div>\n </button>\n\n <quang-option-list\n [_isDisabled]=\"_isDisabled()\"\n [_value]=\"_value()\"\n [componentClass]=\"componentClass()\"\n [componentLabel]=\"componentLabel()\"\n [componentTabIndex]=\"componentTabIndex()\"\n [nullOption]=\"nullOption()\"\n [optionListMaxHeight]=\"optionListMaxHeight()\"\n [parentType]=\"ParentType\"\n [scrollBehaviorOnOpen]=\"scrollBehaviorOnOpen()\"\n [selectButtonRef]=\"selectButton\"\n [selectionMode]=\"selectionMode()\"\n [selectOptions]=\"selectOptions()\"\n [translateValue]=\"translateValue()\"\n (blurHandler)=\"onBlurHandler()\"\n (changedHandler)=\"onChangedHandler($event)\"\n *ngIf=\"_showOptions()\"\n #optionList\n ></quang-option-list>\n </div>\n <div class=\"valid-feedback\">\n {{ successMessage() | transloco }}\n </div>\n <div class=\"invalid-feedback\">\n {{ _currentErrorMessage() | transloco: _currentErrorMessageExtraData() }}\n </div>\n <small\n [hidden]=\"_showSuccess() || _showErrors()\"\n *ngIf=\"helpMessage()\"\n aria-live=\"assertive\"\n class=\"form-text text-muted\"\n >\n {{ helpMessage() | transloco }}\n </small>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quang-components-select.mjs","sources":["../../../projects/quang/components/select/select.component.ts","../../../projects/quang/components/select/select.component.html","../../../projects/quang/components/select/quang-components-select.ts"],"sourcesContent":["import { NgClass } from '@angular/common'\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n forwardRef,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { NG_VALUE_ACCESSOR } from '@angular/forms'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\n\nimport {\n OptionListParentType,\n QuangBaseComponent,\n QuangOptionListComponent,\n SelectOption,\n} from 'quang/components/shared'\n\n@Component({\n selector: 'quang-select',\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => QuangSelectComponent),\n multi: true,\n },\n {\n provide: QuangOptionListComponent,\n multi: false,\n },\n ],\n imports: [TranslocoPipe, NgClass, QuangOptionListComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Select component for choosing one or multiple options from a dropdown.\n *\n * @usageNotes\n * This component supports both single and multiple selection modes. It can be configured\n * to display a list of options and allows users to select one or more of them by setting the `selectionMode` property to either `single` or `multiple`.\n */\nexport class QuangSelectComponent\n extends QuangBaseComponent<string | number | string[] | number[] | null>\n implements AfterViewInit\n{\n selectionMode = input<'single' | 'multiple'>('single')\n\n /**\n * Set the max height of the selection list before scrolling.\n * Default: 18rem\n * @default 18rem\n */\n optionListMaxHeight = input<string>('18rem')\n\n selectOptions = input.required<SelectOption[]>()\n\n scrollBehaviorOnOpen = input<ScrollBehavior>('smooth')\n\n selectButton = viewChild<ElementRef<HTMLButtonElement>>('selectButton')\n\n _showOptions = signal<boolean>(false)\n\n _optionHideTimeout = signal<any | undefined>(undefined)\n\n _selectedItems = computed(() => {\n if (this._value() !== null) {\n const targetValue = this._value()\n return this.selectOptions().filter((x) => {\n if (Array.isArray(targetValue)) {\n return targetValue.some((k) => k === x.value)\n }\n return targetValue === x.value\n })\n }\n return null\n })\n\n translateValue = input<boolean>(true)\n\n nullOption = input<boolean>(true)\n\n readonly ParentType = OptionListParentType.SELECT\n\n changeOptionsVisibility(skipTimeout = false): void {\n if (this.isReadonly()) return\n if (this._showOptions()) {\n this._showOptions.set(skipTimeout)\n } else {\n this.showOptionVisibility()\n }\n }\n\n showOptionVisibility(): void {\n if (this._optionHideTimeout()) {\n clearTimeout(this._optionHideTimeout())\n this._optionHideTimeout.set(null)\n }\n this._showOptions.set(true)\n }\n\n hideOptionVisibility(skipTimeout = false): void {\n if (this._optionHideTimeout()) {\n clearTimeout(this._optionHideTimeout())\n }\n this._optionHideTimeout.set(\n setTimeout(\n () => {\n this._showOptions.set(false)\n },\n skipTimeout ? 0 : 50\n )\n )\n }\n\n override onBlurHandler() {\n if (this.selectionMode() === 'single') {\n setTimeout(() => {\n this.hideOptionVisibility()\n super.onBlurHandler()\n }, 100)\n }\n }\n\n override onChangedHandler(value: string | number | string[] | number[] | null): void {\n super.onChangedHandler(value)\n if (this.selectionMode() === 'single') {\n this.hideOptionVisibility()\n }\n }\n\n onMouseLeaveCallback() {\n if (this.selectionMode() === 'multiple') {\n this.hideOptionVisibility()\n }\n }\n}\n","<div\n (mouseleave)=\"onMouseLeaveCallback()\"\n class=\"mb-3\"\n>\n @if (componentLabel()) {\n <label\n [htmlFor]=\"componentId()\"\n class=\"form-label w-100\"\n >\n {{ componentLabel() | transloco }}\n <span [hidden]=\"!_isRequired()\">*</span>\n </label>\n }\n <div\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n class=\"option-list-container\"\n >\n <button\n [attr.required]=\"getIsRequiredControl()\"\n [class.is-invalid]=\"_ngControl()?.invalid && (_ngControl()?.dirty || _ngControl()?.touched) && errorMap().length\"\n [class.is-valid]=\"_ngControl()?.valid && (_ngControl()?.dirty || _ngControl()?.touched) && successMessage()\"\n [disabled]=\"_isDisabled()\"\n [id]=\"componentId()\"\n [ngClass]=\"componentClass()\"\n [tabIndex]=\"componentTabIndex()\"\n (click)=\"changeOptionsVisibility()\"\n #selectButton\n class=\"form-select\"\n type=\"button\"\n >\n <div class=\"content\">\n @if (_selectedItems()?.length) {\n @for (val of _selectedItems(); track val.value; let last = $last) {\n {{ translateValue() ? (val.label | transloco) : val.label }}{{ !last ? ', ' : '' }}\n }\n } @else {\n <ng-container>{{ componentPlaceholder() | transloco }}</ng-container>\n }\n </div>\n </button>\n\n @if (_showOptions()) {\n <quang-option-list\n [_isDisabled]=\"_isDisabled()\"\n [_value]=\"_value()\"\n [componentClass]=\"componentClass()\"\n [componentLabel]=\"componentLabel()\"\n [componentTabIndex]=\"componentTabIndex()\"\n [nullOption]=\"nullOption()\"\n [optionListMaxHeight]=\"optionListMaxHeight()\"\n [parentType]=\"ParentType\"\n [scrollBehaviorOnOpen]=\"scrollBehaviorOnOpen()\"\n [selectButtonRef]=\"selectButton\"\n [selectionMode]=\"selectionMode()\"\n [selectOptions]=\"selectOptions()\"\n [translateValue]=\"translateValue()\"\n (blurHandler)=\"onBlurHandler()\"\n (changedHandler)=\"onChangedHandler($event)\"\n #optionList\n ></quang-option-list>\n }\n </div>\n <div class=\"valid-feedback\">\n {{ successMessage() | transloco }}\n </div>\n <div class=\"invalid-feedback\">\n {{ _currentErrorMessage() | transloco: _currentErrorMessageExtraData() }}\n </div>\n @if (helpMessage()) {\n <small\n [hidden]=\"_showSuccess() || _showErrors()\"\n aria-live=\"assertive\"\n class=\"form-text text-muted\"\n >\n {{ helpMessage() | transloco }}\n </small>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAyCA;;;;;;AAMG;AACG,MAAO,oBACX,SAAQ,kBAAgE,CAAA;AA1B1E,IAAA,WAAA,GAAA;;AA6BE,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAwB,QAAQ,CAAC;AAEtD;;;;AAIG;AACH,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAS,OAAO,CAAC;AAE5C,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAkB;AAEhD,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAiB,QAAQ,CAAC;AAEtD,QAAA,IAAA,CAAA,YAAY,GAAG,SAAS,CAAgC,cAAc,CAAC;AAEvE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAU,KAAK,CAAC;AAErC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAkB,SAAS,CAAC;AAEvD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;AAC1B,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE;gBACjC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACvC,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC9B,wBAAA,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;;AAE/C,oBAAA,OAAO,WAAW,KAAK,CAAC,CAAC,KAAK;AAChC,iBAAC,CAAC;;AAEJ,YAAA,OAAO,IAAI;AACb,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAU,IAAI,CAAC;AAErC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,IAAI,CAAC;AAExB,QAAA,IAAA,CAAA,UAAU,GAAG,oBAAoB,CAAC,MAAM;AAsDlD;IApDC,uBAAuB,CAAC,WAAW,GAAG,KAAK,EAAA;QACzC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;;aAC7B;YACL,IAAI,CAAC,oBAAoB,EAAE;;;IAI/B,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAEnC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;IAG7B,oBAAoB,CAAC,WAAW,GAAG,KAAK,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;;QAEzC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CACzB,UAAU,CACR,MAAK;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,SAAC,EACD,WAAW,GAAG,CAAC,GAAG,EAAE,CACrB,CACF;;IAGM,aAAa,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;YACrC,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,KAAK,CAAC,aAAa,EAAE;aACtB,EAAE,GAAG,CAAC;;;AAIF,IAAA,gBAAgB,CAAC,KAAmD,EAAA;AAC3E,QAAA,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;YACrC,IAAI,CAAC,oBAAoB,EAAE;;;IAI/B,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,UAAU,EAAE;YACvC,IAAI,CAAC,oBAAoB,EAAE;;;8GA3FpB,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EArBpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrCH,gwFA+EA,EDzCY,MAAA,EAAA,CAAA,oOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,EAAE,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,oFAAE,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAU/C,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAzBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAGb,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,KAAK,EAAE,KAAK;AACb,yBAAA;qBACF,EACQ,OAAA,EAAA,CAAC,aAAa,EAAE,OAAO,EAAE,wBAAwB,CAAC,EAAA,eAAA,EAC1C,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,gwFAAA,EAAA,MAAA,EAAA,CAAA,oOAAA,CAAA,EAAA;;;AEvCjD;;AAEG;;;;"}
@@ -128,10 +128,10 @@ class QuangBaseComponent {
128
128
  ngAfterViewInit() {
129
129
  this.setupFormControl();
130
130
  }
131
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
132
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.14", type: QuangBaseComponent, isStandalone: true, inputs: { componentId: { classPropertyName: "componentId", publicName: "componentId", isSignal: true, isRequired: false, transformFunction: null }, isReadonly: { classPropertyName: "isReadonly", publicName: "isReadonly", isSignal: true, isRequired: false, transformFunction: null }, componentTabIndex: { classPropertyName: "componentTabIndex", publicName: "componentTabIndex", isSignal: true, isRequired: false, transformFunction: null }, componentClass: { classPropertyName: "componentClass", publicName: "componentClass", isSignal: true, isRequired: false, transformFunction: null }, componentLabel: { classPropertyName: "componentLabel", publicName: "componentLabel", isSignal: true, isRequired: false, transformFunction: null }, componentPlaceholder: { classPropertyName: "componentPlaceholder", publicName: "componentPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, errorMap: { classPropertyName: "errorMap", publicName: "errorMap", isSignal: true, isRequired: false, transformFunction: null }, successMessage: { classPropertyName: "successMessage", publicName: "successMessage", isSignal: true, isRequired: false, transformFunction: null }, helpMessage: { classPropertyName: "helpMessage", publicName: "helpMessage", isSignal: true, isRequired: false, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { componentBlur: "componentBlur" }, ngImport: i0 }); }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
132
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.0", type: QuangBaseComponent, isStandalone: true, inputs: { componentId: { classPropertyName: "componentId", publicName: "componentId", isSignal: true, isRequired: false, transformFunction: null }, isReadonly: { classPropertyName: "isReadonly", publicName: "isReadonly", isSignal: true, isRequired: false, transformFunction: null }, componentTabIndex: { classPropertyName: "componentTabIndex", publicName: "componentTabIndex", isSignal: true, isRequired: false, transformFunction: null }, componentClass: { classPropertyName: "componentClass", publicName: "componentClass", isSignal: true, isRequired: false, transformFunction: null }, componentLabel: { classPropertyName: "componentLabel", publicName: "componentLabel", isSignal: true, isRequired: false, transformFunction: null }, componentPlaceholder: { classPropertyName: "componentPlaceholder", publicName: "componentPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, errorMap: { classPropertyName: "errorMap", publicName: "errorMap", isSignal: true, isRequired: false, transformFunction: null }, successMessage: { classPropertyName: "successMessage", publicName: "successMessage", isSignal: true, isRequired: false, transformFunction: null }, helpMessage: { classPropertyName: "helpMessage", publicName: "helpMessage", isSignal: true, isRequired: false, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { componentBlur: "componentBlur" }, ngImport: i0 }); }
133
133
  }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangBaseComponent, decorators: [{
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangBaseComponent, decorators: [{
135
135
  type: Directive
136
136
  }], ctorParameters: () => [] });
137
137
 
@@ -401,10 +401,10 @@ class QuangOptionListComponent {
401
401
  this.elementTop.set(topValue);
402
402
  this.elementBottom.set(bottomValue);
403
403
  }
404
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangOptionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
405
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: QuangOptionListComponent, isStandalone: true, selector: "quang-option-list", inputs: { selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, optionListMaxHeight: { classPropertyName: "optionListMaxHeight", publicName: "optionListMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, selectOptions: { classPropertyName: "selectOptions", publicName: "selectOptions", isSignal: true, isRequired: false, transformFunction: null }, selectButtonRef: { classPropertyName: "selectButtonRef", publicName: "selectButtonRef", isSignal: true, isRequired: true, transformFunction: null }, _value: { classPropertyName: "_value", publicName: "_value", isSignal: true, isRequired: false, transformFunction: null }, _isDisabled: { classPropertyName: "_isDisabled", publicName: "_isDisabled", isSignal: true, isRequired: false, transformFunction: null }, componentClass: { classPropertyName: "componentClass", publicName: "componentClass", isSignal: true, isRequired: false, transformFunction: null }, componentLabel: { classPropertyName: "componentLabel", publicName: "componentLabel", isSignal: true, isRequired: false, transformFunction: null }, componentTabIndex: { classPropertyName: "componentTabIndex", publicName: "componentTabIndex", isSignal: true, isRequired: false, transformFunction: null }, translateValue: { classPropertyName: "translateValue", publicName: "translateValue", isSignal: true, isRequired: false, transformFunction: null }, nullOption: { classPropertyName: "nullOption", publicName: "nullOption", isSignal: true, isRequired: false, transformFunction: null }, scrollBehaviorOnOpen: { classPropertyName: "scrollBehaviorOnOpen", publicName: "scrollBehaviorOnOpen", isSignal: true, isRequired: false, transformFunction: null }, parentType: { classPropertyName: "parentType", publicName: "parentType", isSignal: true, isRequired: true, transformFunction: null }, parentID: { classPropertyName: "parentID", publicName: "parentID", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changedHandler: "changedHandler", blurHandler: "blurHandler" }, host: { listeners: { "window:scroll": "changePosition()" } }, viewQueries: [{ propertyName: "optionListContainer", first: true, predicate: ["optionListContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [ngStyle]=\"{\n 'max-height': optionListMaxHeight(),\n '--option-list-width': elementWidth(),\n '--option-list-top': elementTop(),\n '--option-list-bottom': elementBottom(),\n }\"\n (blur)=\"onBlurHandler($event)\"\n #optionListContainer\n class=\"option-list\"\n id=\"optionList\"\n tabindex=\"1\"\n>\n <ul>\n @for (item of selectOptionsList(); track i; let i = $index; let last = $last) {\n <li\n [class.m-0]=\"last\"\n [class.selected]=\"selectionMode() === 'single' ? getSelected(item) : null\"\n [id]=\"'item-' + i\"\n (mousedown)=\"$event.stopImmediatePropagation(); onSelectItem(item)\"\n class=\"item\"\n >\n <input\n [checked]=\"getSelected(item)\"\n [class.d-none]=\"selectionMode() === 'single' || !item?.value\"\n [disabled]=\"true\"\n [id]=\"i + '-' + item.value + '-checkbox'\"\n [name]=\"i + '-' + item.value + '-checkbox'\"\n [ngClass]=\"componentClass()\"\n [tabIndex]=\"componentTabIndex()\"\n [value]=\"getSelected(item)\"\n (blur)=\"onBlurHandler($event)\"\n #inputCheckbox\n class=\"form-check-input opacity-100\"\n type=\"checkbox\"\n />\n <label\n [class.ms-3]=\"selectionMode() === 'multiple' && item?.value\"\n [for]=\"i + '-' + item.value + '-checkbox'\"\n class=\"form-check-label checkbox-label w-100 opacity-100\"\n >\n {{ translateValue() ? (item.label | transloco) : item.label }}\n </label>\n </li>\n }\n </ul>\n</div>\n", styles: [":host{display:block;z-index:999}.option-list{--option-list-width: 100%;--option-list-top: 10px;--option-list-bottom: unset;border:1px solid var(--bs-border-color);border-top:0;border-radius:var(--bs-border-radius);overflow:auto;position:fixed;width:var(--option-list-width);top:var(--option-list-top);bottom:var(--option-list-bottom);z-index:999}.option-list ul{margin:0;padding:0}.option-list .selected{background-color:var(--bs-body-bg);filter:brightness(95%)}.option-list.option-list-top{border-top:1px solid var(--bs-border-color);border-bottom:0}.option-list:focus-visible{outline:none}.item{display:flex;background-color:var(--bs-body-bg);z-index:1;padding:0 .5rem;min-height:2.5rem}.item label{padding:.5rem 0}.item:hover{cursor:pointer;background-color:var(--bs-body-bg);filter:brightness(95%)}.item *:hover{cursor:pointer}.item .form-check-input{align-self:center}.item .form-check-input:focus{border-color:var(--bs-border-color);box-shadow:unset}.item .form-check-input:checked{background-color:var(--bs-primary);border-color:var(--bs-border-color)}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
404
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangOptionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
405
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.0", type: QuangOptionListComponent, isStandalone: true, selector: "quang-option-list", inputs: { selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, optionListMaxHeight: { classPropertyName: "optionListMaxHeight", publicName: "optionListMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, selectOptions: { classPropertyName: "selectOptions", publicName: "selectOptions", isSignal: true, isRequired: false, transformFunction: null }, selectButtonRef: { classPropertyName: "selectButtonRef", publicName: "selectButtonRef", isSignal: true, isRequired: true, transformFunction: null }, _value: { classPropertyName: "_value", publicName: "_value", isSignal: true, isRequired: false, transformFunction: null }, _isDisabled: { classPropertyName: "_isDisabled", publicName: "_isDisabled", isSignal: true, isRequired: false, transformFunction: null }, componentClass: { classPropertyName: "componentClass", publicName: "componentClass", isSignal: true, isRequired: false, transformFunction: null }, componentLabel: { classPropertyName: "componentLabel", publicName: "componentLabel", isSignal: true, isRequired: false, transformFunction: null }, componentTabIndex: { classPropertyName: "componentTabIndex", publicName: "componentTabIndex", isSignal: true, isRequired: false, transformFunction: null }, translateValue: { classPropertyName: "translateValue", publicName: "translateValue", isSignal: true, isRequired: false, transformFunction: null }, nullOption: { classPropertyName: "nullOption", publicName: "nullOption", isSignal: true, isRequired: false, transformFunction: null }, scrollBehaviorOnOpen: { classPropertyName: "scrollBehaviorOnOpen", publicName: "scrollBehaviorOnOpen", isSignal: true, isRequired: false, transformFunction: null }, parentType: { classPropertyName: "parentType", publicName: "parentType", isSignal: true, isRequired: true, transformFunction: null }, parentID: { classPropertyName: "parentID", publicName: "parentID", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changedHandler: "changedHandler", blurHandler: "blurHandler" }, host: { listeners: { "window:scroll": "changePosition()" } }, viewQueries: [{ propertyName: "optionListContainer", first: true, predicate: ["optionListContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [ngStyle]=\"{\n 'max-height': optionListMaxHeight(),\n '--option-list-width': elementWidth(),\n '--option-list-top': elementTop(),\n '--option-list-bottom': elementBottom(),\n }\"\n (blur)=\"onBlurHandler($event)\"\n #optionListContainer\n class=\"option-list\"\n id=\"optionList\"\n tabindex=\"1\"\n>\n <ul>\n @for (item of selectOptionsList(); track i; let i = $index; let last = $last) {\n <li\n [class.m-0]=\"last\"\n [class.selected]=\"selectionMode() === 'single' ? getSelected(item) : null\"\n [id]=\"'item-' + i\"\n (mousedown)=\"$event.stopImmediatePropagation(); onSelectItem(item)\"\n class=\"item\"\n >\n <input\n [checked]=\"getSelected(item)\"\n [class.d-none]=\"selectionMode() === 'single' || !item?.value\"\n [disabled]=\"true\"\n [id]=\"i + '-' + item.value + '-checkbox'\"\n [name]=\"i + '-' + item.value + '-checkbox'\"\n [ngClass]=\"componentClass()\"\n [tabIndex]=\"componentTabIndex()\"\n [value]=\"getSelected(item)\"\n (blur)=\"onBlurHandler($event)\"\n #inputCheckbox\n class=\"form-check-input opacity-100\"\n type=\"checkbox\"\n />\n <label\n [class.ms-3]=\"selectionMode() === 'multiple' && item?.value\"\n [for]=\"i + '-' + item.value + '-checkbox'\"\n class=\"form-check-label checkbox-label w-100 opacity-100\"\n >\n {{ translateValue() ? (item.label | transloco) : item.label }}\n </label>\n </li>\n }\n </ul>\n</div>\n", styles: [":host{display:block;z-index:999}.option-list{--option-list-width: 100%;--option-list-top: 10px;--option-list-bottom: unset;border:1px solid var(--bs-border-color);border-top:0;border-radius:var(--bs-border-radius);overflow:auto;position:fixed;width:var(--option-list-width);top:var(--option-list-top);bottom:var(--option-list-bottom);z-index:999}.option-list ul{margin:0;padding:0}.option-list .selected{background-color:var(--bs-body-bg);filter:brightness(95%)}.option-list.option-list-top{border-top:1px solid var(--bs-border-color);border-bottom:0}.option-list:focus-visible{outline:none}.item{display:flex;background-color:var(--bs-body-bg);z-index:1;padding:0 .5rem;min-height:2.5rem}.item label{padding:.5rem 0}.item:hover{cursor:pointer;background-color:var(--bs-body-bg);filter:brightness(95%)}.item *:hover{cursor:pointer}.item .form-check-input{align-self:center}.item .form-check-input:focus{border-color:var(--bs-border-color);box-shadow:unset}.item .form-check-input:checked{background-color:var(--bs-primary);border-color:var(--bs-border-color)}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
406
406
  }
407
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangOptionListComponent, decorators: [{
407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangOptionListComponent, decorators: [{
408
408
  type: Component,
409
409
  args: [{ selector: 'quang-option-list', imports: [NgStyle, NgClass, TranslocoPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [ngStyle]=\"{\n 'max-height': optionListMaxHeight(),\n '--option-list-width': elementWidth(),\n '--option-list-top': elementTop(),\n '--option-list-bottom': elementBottom(),\n }\"\n (blur)=\"onBlurHandler($event)\"\n #optionListContainer\n class=\"option-list\"\n id=\"optionList\"\n tabindex=\"1\"\n>\n <ul>\n @for (item of selectOptionsList(); track i; let i = $index; let last = $last) {\n <li\n [class.m-0]=\"last\"\n [class.selected]=\"selectionMode() === 'single' ? getSelected(item) : null\"\n [id]=\"'item-' + i\"\n (mousedown)=\"$event.stopImmediatePropagation(); onSelectItem(item)\"\n class=\"item\"\n >\n <input\n [checked]=\"getSelected(item)\"\n [class.d-none]=\"selectionMode() === 'single' || !item?.value\"\n [disabled]=\"true\"\n [id]=\"i + '-' + item.value + '-checkbox'\"\n [name]=\"i + '-' + item.value + '-checkbox'\"\n [ngClass]=\"componentClass()\"\n [tabIndex]=\"componentTabIndex()\"\n [value]=\"getSelected(item)\"\n (blur)=\"onBlurHandler($event)\"\n #inputCheckbox\n class=\"form-check-input opacity-100\"\n type=\"checkbox\"\n />\n <label\n [class.ms-3]=\"selectionMode() === 'multiple' && item?.value\"\n [for]=\"i + '-' + item.value + '-checkbox'\"\n class=\"form-check-label checkbox-label w-100 opacity-100\"\n >\n {{ translateValue() ? (item.label | transloco) : item.label }}\n </label>\n </li>\n }\n </ul>\n</div>\n", styles: [":host{display:block;z-index:999}.option-list{--option-list-width: 100%;--option-list-top: 10px;--option-list-bottom: unset;border:1px solid var(--bs-border-color);border-top:0;border-radius:var(--bs-border-radius);overflow:auto;position:fixed;width:var(--option-list-width);top:var(--option-list-top);bottom:var(--option-list-bottom);z-index:999}.option-list ul{margin:0;padding:0}.option-list .selected{background-color:var(--bs-body-bg);filter:brightness(95%)}.option-list.option-list-top{border-top:1px solid var(--bs-border-color);border-bottom:0}.option-list:focus-visible{outline:none}.item{display:flex;background-color:var(--bs-body-bg);z-index:1;padding:0 .5rem;min-height:2.5rem}.item label{padding:.5rem 0}.item:hover{cursor:pointer;background-color:var(--bs-body-bg);filter:brightness(95%)}.item *:hover{cursor:pointer}.item .form-check-input{align-self:center}.item .form-check-input:focus{border-color:var(--bs-border-color);box-shadow:unset}.item .form-check-input:checked{background-color:var(--bs-primary);border-color:var(--bs-border-color)}\n"] }]
410
410
  }], propDecorators: { changePosition: [{