quang 20.4.5 → 20.5.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.
- package/auth/index.d.ts +4 -5
- package/components/date/index.d.ts +1 -0
- package/fesm2022/quang-auth.mjs +20 -20
- package/fesm2022/quang-auth.mjs.map +1 -1
- package/fesm2022/quang-components-autocomplete.mjs +4 -4
- package/fesm2022/quang-components-autocomplete.mjs.map +1 -1
- package/fesm2022/quang-components-checkbox.mjs +4 -4
- package/fesm2022/quang-components-checkbox.mjs.map +1 -1
- package/fesm2022/quang-components-date.mjs +23 -8
- package/fesm2022/quang-components-date.mjs.map +1 -1
- package/fesm2022/quang-components-input.mjs +4 -4
- package/fesm2022/quang-components-input.mjs.map +1 -1
- package/fesm2022/quang-components-paginator.mjs +14 -14
- package/fesm2022/quang-components-paginator.mjs.map +1 -1
- package/fesm2022/quang-components-select.mjs +4 -4
- package/fesm2022/quang-components-select.mjs.map +1 -1
- package/fesm2022/quang-components-shared.mjs +8 -8
- package/fesm2022/quang-components-shared.mjs.map +1 -1
- package/fesm2022/quang-components-table.mjs +4 -4
- package/fesm2022/quang-components-table.mjs.map +1 -1
- package/fesm2022/quang-components-wysiwyg.mjs +4 -4
- package/fesm2022/quang-components-wysiwyg.mjs.map +1 -1
- package/fesm2022/quang-device.mjs +3 -3
- package/fesm2022/quang-device.mjs.map +1 -1
- package/fesm2022/quang-loader.mjs +7 -7
- package/fesm2022/quang-loader.mjs.map +1 -1
- package/fesm2022/quang-overlay-modal.mjs +90 -12
- package/fesm2022/quang-overlay-modal.mjs.map +1 -1
- package/fesm2022/quang-overlay-popover.mjs +8 -8
- package/fesm2022/quang-overlay-popover.mjs.map +1 -1
- package/fesm2022/quang-overlay-shared.mjs +11 -11
- package/fesm2022/quang-overlay-shared.mjs.map +1 -1
- package/fesm2022/quang-overlay-toast.mjs +7 -7
- package/fesm2022/quang-overlay-toast.mjs.map +1 -1
- package/fesm2022/quang-overlay-tooltip.mjs +8 -8
- package/fesm2022/quang-overlay-tooltip.mjs.map +1 -1
- package/fesm2022/quang-translation.mjs +6 -6
- package/fesm2022/quang-translation.mjs.map +1 -1
- package/overlay/modal/index.d.ts +39 -5
- package/overlay/toast/index.d.ts +2 -3
- package/package.json +18 -18
|
@@ -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 } 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
|
+
{"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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"}
|
|
@@ -98,8 +98,8 @@ class QuangSelectComponent extends QuangBaseComponent {
|
|
|
98
98
|
this.hideOptionVisibility();
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
102
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
101
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
102
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", 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 }, autoSelectSingleOption: { classPropertyName: "autoSelectSingleOption", publicName: "autoSelectSingleOption", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
103
103
|
{
|
|
104
104
|
provide: NG_VALUE_ACCESSOR,
|
|
105
105
|
useExisting: forwardRef(() => QuangSelectComponent),
|
|
@@ -111,7 +111,7 @@ class QuangSelectComponent extends QuangBaseComponent {
|
|
|
111
111
|
},
|
|
112
112
|
], 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 d-flex gap-2\"\n >\n <div>\n <span>{{ componentLabel() | transloco }}</span>\n <span [hidden]=\"!_isRequired()\">*</span>\n </div>\n @if (helpMessage() && helpMessageTooltip()) {\n <div [quangTooltip]=\"helpMessage() | transloco\">\n <ng-content select=\"[help-icon]\" />\n </div>\n }\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() && !helpMessageTooltip()) {\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: "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"] }, { kind: "directive", type: QuangTooltipDirective, selector: "[quangTooltip]", inputs: ["quangTooltip", "showMethod"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
113
113
|
}
|
|
114
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangSelectComponent, decorators: [{
|
|
115
115
|
type: Component,
|
|
116
116
|
args: [{ selector: 'quang-select', providers: [
|
|
117
117
|
{
|
|
@@ -124,7 +124,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
124
124
|
multi: false,
|
|
125
125
|
},
|
|
126
126
|
], imports: [TranslocoPipe, NgClass, QuangOptionListComponent, QuangTooltipDirective], 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 d-flex gap-2\"\n >\n <div>\n <span>{{ componentLabel() | transloco }}</span>\n <span [hidden]=\"!_isRequired()\">*</span>\n </div>\n @if (helpMessage() && helpMessageTooltip()) {\n <div [quangTooltip]=\"helpMessage() | transloco\">\n <ng-content select=\"[help-icon]\" />\n </div>\n }\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() && !helpMessageTooltip()) {\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"] }]
|
|
127
|
-
}], ctorParameters: () => [] });
|
|
127
|
+
}], ctorParameters: () => [], propDecorators: { selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], optionListMaxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionListMaxHeight", required: false }] }], selectOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectOptions", required: true }] }], scrollBehaviorOnOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollBehaviorOnOpen", required: false }] }], selectButton: [{ type: i0.ViewChild, args: ['selectButton', { isSignal: true }] }], translateValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "translateValue", required: false }] }], nullOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "nullOption", required: false }] }], autoSelectSingleOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoSelectSingleOption", required: false }] }] } });
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
130
|
* Generated bundle index. Do not edit.
|
|
@@ -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 } 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 { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\nimport { NG_VALUE_ACCESSOR } from '@angular/forms'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\nimport { QuangTooltipDirective } from 'quang/overlay/tooltip'\nimport { combineLatest, filter } from 'rxjs'\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, QuangTooltipDirective],\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 autoSelectSingleOption = input<boolean>(false)\n\n readonly ParentType = OptionListParentType.SELECT\n\n constructor() {\n super()\n combineLatest([toObservable(this.autoSelectSingleOption), toObservable(this.selectOptions)])\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(([autoselect, options]) => autoselect === true && options.length === 1)\n )\n .subscribe(([_, options]) => {\n if (this._value() === null || this._value() === undefined || this._value() === '') {\n this.onChangedHandler(options[0].value)\n }\n })\n }\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 d-flex gap-2\"\n >\n <div>\n <span>{{ componentLabel() | transloco }}</span>\n <span [hidden]=\"!_isRequired()\">*</span>\n </div>\n @if (helpMessage() && helpMessageTooltip()) {\n <div [quangTooltip]=\"helpMessage() | transloco\">\n <ng-content select=\"[help-icon]\" />\n </div>\n }\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() && !helpMessageTooltip()) {\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":"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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 { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\nimport { NG_VALUE_ACCESSOR } from '@angular/forms'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\nimport { QuangTooltipDirective } from 'quang/overlay/tooltip'\nimport { combineLatest, filter } from 'rxjs'\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, QuangTooltipDirective],\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 autoSelectSingleOption = input<boolean>(false)\n\n readonly ParentType = OptionListParentType.SELECT\n\n constructor() {\n super()\n combineLatest([toObservable(this.autoSelectSingleOption), toObservable(this.selectOptions)])\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(([autoselect, options]) => autoselect === true && options.length === 1)\n )\n .subscribe(([_, options]) => {\n if (this._value() === null || this._value() === undefined || this._value() === '') {\n this.onChangedHandler(options[0].value)\n }\n })\n }\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 d-flex gap-2\"\n >\n <div>\n <span>{{ componentLabel() | transloco }}</span>\n <span [hidden]=\"!_isRequired()\">*</span>\n </div>\n @if (helpMessage() && helpMessageTooltip()) {\n <div [quangTooltip]=\"helpMessage() | transloco\">\n <ng-content select=\"[help-icon]\" />\n </div>\n }\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() && !helpMessageTooltip()) {\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":";;;;;;;;;;AA4CA;;;;;;AAMG;AACG,MAAO,oBACX,SAAQ,kBAAgE,CAAA;AA2CxE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AAzCT,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAwB,QAAQ,yDAAC;AAEtD;;;;AAIG;AACH,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAS,OAAO,+DAAC;AAE5C,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,wDAAkB;AAEhD,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAiB,QAAQ,gEAAC;AAEtD,QAAA,IAAA,CAAA,YAAY,GAAG,SAAS,CAAgC,cAAc,wDAAC;AAEvE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAU,KAAK,wDAAC;AAErC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAkB,SAAS,8DAAC;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;oBAC/C;AACA,oBAAA,OAAO,WAAW,KAAK,CAAC,CAAC,KAAK;AAChC,gBAAA,CAAC,CAAC;YACJ;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,0DAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAU,IAAI,0DAAC;AAErC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,IAAI,sDAAC;AAEjC,QAAA,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAU,KAAK,kEAAC;AAErC,QAAA,IAAA,CAAA,UAAU,GAAG,oBAAoB,CAAC,MAAM;AAI/C,QAAA,aAAa,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACxF,aAAA,IAAI,CACH,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EACnC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,UAAU,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;aAE/E,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAI;YAC1B,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACjF,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzC;AACF,QAAA,CAAC,CAAC;IACN;IAEA,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;QACpC;aAAO;YACL,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;IAEA,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;QACnC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;IAEA,oBAAoB,CAAC,WAAW,GAAG,KAAK,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzC;QACA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CACzB,UAAU,CACR,MAAK;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC,EACD,WAAW,GAAG,CAAC,GAAG,EAAE,CACrB,CACF;IACH;IAES,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;YACvB,CAAC,EAAE,GAAG,CAAC;QACT;IACF;AAES,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;QAC7B;IACF;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,UAAU,EAAE;YACvC,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;+GA7GW,oBAAoB,EAAA,IAAA,EAAA,EAAA,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,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,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,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EArBpB;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;SACF,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,ECxCH,ugGAsFA,4RD7C2B,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,8FAAvE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAUZ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAzBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,SAAA,EAGb;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;AACF,qBAAA,EAAA,OAAA,EACQ,CAAC,aAAa,EAAE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,CAAC,EAAA,eAAA,EACjE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ugGAAA,EAAA,MAAA,EAAA,CAAA,oOAAA,CAAA,EAAA;qiBA0BS,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEpExE;;AAEG;;;;"}
|
|
@@ -137,12 +137,12 @@ class QuangBaseComponent {
|
|
|
137
137
|
ngAfterViewInit() {
|
|
138
138
|
this.setupFormControl();
|
|
139
139
|
}
|
|
140
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
141
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.
|
|
140
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
141
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.10", 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 }, helpMessageTooltip: { classPropertyName: "helpMessageTooltip", publicName: "helpMessageTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { componentBlur: "componentBlur" }, ngImport: i0 }); }
|
|
142
142
|
}
|
|
143
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
143
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangBaseComponent, decorators: [{
|
|
144
144
|
type: Directive
|
|
145
|
-
}], ctorParameters: () => [] });
|
|
145
|
+
}], ctorParameters: () => [], propDecorators: { componentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentId", required: false }] }], isReadonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "isReadonly", required: false }] }], componentTabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentTabIndex", required: false }] }], componentClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentClass", required: false }] }], componentLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentLabel", required: false }] }], componentPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentPlaceholder", required: false }] }], errorMap: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMap", required: false }] }], successMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "successMessage", required: false }] }], helpMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpMessage", required: false }] }], formControl: [{ type: i0.Input, args: [{ isSignal: true, alias: "formControl", required: false }] }], helpMessageTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpMessageTooltip", required: false }] }], componentBlur: [{ type: i0.Output, args: ["componentBlur"] }] } });
|
|
146
146
|
|
|
147
147
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
148
148
|
var OptionListParentType;
|
|
@@ -414,13 +414,13 @@ class QuangOptionListComponent {
|
|
|
414
414
|
this.getOptionListTop();
|
|
415
415
|
});
|
|
416
416
|
}
|
|
417
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
418
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
417
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangOptionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
418
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", 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 (\n item of selectOptionsList();\n track (item.value ?? '') + (item.label ?? '');\n let i = $index;\n let last = $last\n ) {\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 }); }
|
|
419
419
|
}
|
|
420
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
420
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangOptionListComponent, decorators: [{
|
|
421
421
|
type: Component,
|
|
422
422
|
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 (\n item of selectOptionsList();\n track (item.value ?? '') + (item.label ?? '');\n let i = $index;\n let last = $last\n ) {\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"] }]
|
|
423
|
-
}], propDecorators: { changePosition: [{
|
|
423
|
+
}], propDecorators: { selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], optionListMaxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionListMaxHeight", required: false }] }], selectOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectOptions", required: false }] }], selectButtonRef: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectButtonRef", required: true }] }], _value: [{ type: i0.Input, args: [{ isSignal: true, alias: "_value", required: false }] }], _isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "_isDisabled", required: false }] }], componentClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentClass", required: false }] }], componentLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentLabel", required: false }] }], componentTabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "componentTabIndex", required: false }] }], translateValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "translateValue", required: false }] }], nullOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "nullOption", required: false }] }], scrollBehaviorOnOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollBehaviorOnOpen", required: false }] }], changedHandler: [{ type: i0.Output, args: ["changedHandler"] }], blurHandler: [{ type: i0.Output, args: ["blurHandler"] }], optionListContainer: [{ type: i0.ViewChild, args: ['optionListContainer', { isSignal: true }] }], parentType: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentType", required: true }] }], parentID: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentID", required: false }] }], changePosition: [{
|
|
424
424
|
type: HostListener,
|
|
425
425
|
args: ['window:scroll']
|
|
426
426
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quang-components-shared.mjs","sources":["../../../projects/quang/components/shared/makeId.ts","../../../projects/quang/components/shared/quang-base-component.directive.ts","../../../projects/quang/components/shared/option-list/option-list.component.ts","../../../projects/quang/components/shared/option-list/option-list.component.html","../../../projects/quang/components/shared/quang-components-shared.ts"],"sourcesContent":["export const makeId = (length: number) => {\n let result = ''\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n const charactersLength = characters.length\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength))\n }\n return result\n}\n","import { AfterViewInit, DestroyRef, Directive, Injector, computed, inject, input, output, signal } from '@angular/core'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\nimport { ControlValueAccessor, FormControl, NgControl, Validators } from '@angular/forms'\n\nimport { Subscription } from 'rxjs'\n\nimport { ErrorData } from './ErrorData'\nimport { makeId } from './makeId'\n\n@Directive()\nexport abstract class QuangBaseComponent<T = any> implements ControlValueAccessor, AfterViewInit {\n componentId = input<string>(makeId(10))\n\n isReadonly = input<boolean>(false)\n\n isReadonly$ = toObservable(this.isReadonly)\n\n componentTabIndex = input<number>(0)\n\n componentClass = input<string | string[]>('')\n\n componentLabel = input<string>('')\n\n componentPlaceholder = input<string>('')\n\n errorMap = input<ErrorData[]>([])\n\n errorMap$ = toObservable(this.errorMap)\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n if (this._isTouched()) {\n this.checkFormErrors()\n }\n })\n\n _errorMessagesByKey = computed(\n () => new Map((this.errorMap() ?? []).map((errorData) => [errorData.error, errorData.message]))\n )\n\n successMessage = input<string>('')\n\n helpMessage = input<string>('')\n\n formControl = input<FormControl>()\n\n // If true, the help message will be shown in a tooltip. Remember to set the `helpMessage` input and add help-icon as ng-content\n helpMessageTooltip = input<boolean>(false)\n\n componentBlur = output<void>()\n\n _value = signal<T | null>(null)\n\n _isRequired = signal<boolean>(false)\n\n _isDisabled = signal<boolean>(false)\n\n _isTouched = signal<boolean>(false)\n\n _isValid = signal<boolean>(false)\n\n _showSuccess = computed(() => this.successMessage() && this._isValid() && this._isTouched() && !this._isDisabled())\n\n _showErrors = computed(\n () => this.errorMap()?.length > 0 && !this._isValid() && this._isTouched() && !this._isDisabled()\n )\n\n _currentErrorMessage = signal<string>('')\n\n _currentErrorMessageExtraData = signal<Record<string, any>>({})\n\n _ngControl = signal<NgControl | null>(null)\n\n _injector = signal<Injector>(inject(Injector))\n\n _statusChange$?: Subscription\n\n getIsRequiredControl = computed(\n () => !!(this._ngControl()?.control as any)?._rawValidators?.find((x: any) => x.name === 'required')\n )\n\n onChange?: (value: T) => void\n\n onTouched?: () => void\n\n destroyRef = inject(DestroyRef)\n\n constructor() {\n toObservable(this.formControl)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((form) => {\n if (form) {\n this.setupFormControl()\n }\n })\n }\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn\n }\n\n writeValue(val: T): void {\n this._value.set(val)\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = () => {\n this._isTouched.set(true)\n fn()\n }\n }\n\n onChangedEventHandler($event: Event) {\n const inputElement = $event.target as HTMLInputElement\n this.onChangedHandler(inputElement.value as T)\n }\n\n onChangedHandler(value: T) {\n this._value.set(value)\n if (this.onChange) {\n this.onChange(value)\n }\n\n if (this.onTouched) {\n this.onTouched()\n }\n }\n\n onBlurHandler() {\n if (this.onTouched) {\n this.onTouched()\n }\n this.componentBlur.emit()\n }\n\n setupFormControl() {\n if (this._statusChange$) {\n this._statusChange$.unsubscribe()\n this._statusChange$ = undefined\n }\n\n this._ngControl.set(this._injector().get(NgControl))\n this._statusChange$ = this._ngControl()\n ?.control?.statusChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.checkFormErrors()\n })\n\n this._isTouched.set(this._ngControl()?.touched ?? false)\n this._isDisabled.set(this.isReadonly() || this._ngControl()?.disabled || false)\n this.checkFormErrors()\n }\n\n onChangeIsReadonly = this.isReadonly$.pipe(takeUntilDestroyed()).subscribe((isReadonly: boolean) => {\n this._isDisabled.set(isReadonly || this._ngControl()?.disabled || false)\n })\n\n setDisabledState(isDisabled: boolean) {\n this._isDisabled.set(isDisabled)\n }\n\n checkFormErrors() {\n const control = this._ngControl()?.control\n this._isValid.set(control?.valid ?? false)\n this._isTouched.set(!control?.pristine)\n\n const validationErrors = control?.errors\n\n this._isRequired.set(validationErrors?.[Validators.required.name])\n\n let errorName = ''\n let errorMessage = ''\n let errorData = true\n\n for (const [validationErrorName, validationErrorData] of Object.entries(validationErrors ?? {})) {\n const relatedErrorMessage = this._errorMessagesByKey().get(validationErrorName)\n if (relatedErrorMessage) {\n errorName = validationErrorName\n errorMessage = relatedErrorMessage\n errorData = validationErrorData\n }\n }\n\n this._currentErrorMessage.set(errorMessage)\n this._currentErrorMessageExtraData.set({ [errorName]: errorData })\n }\n\n ngAfterViewInit(): void {\n this.setupFormControl()\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NgClass, NgStyle } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n HostListener,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\nimport { QUANG_LOGGING_BEHAVIOR } from 'quang'\nimport { Subscription, fromEvent } from 'rxjs'\n\nexport interface SelectOption {\n label: string\n value: string | number | null\n}\n\nexport enum OptionListParentType {\n SELECT = 'select',\n AUTOCOMPLETE = 'autocomplete',\n}\n\n@Component({\n selector: 'quang-option-list',\n imports: [NgStyle, NgClass, TranslocoPipe],\n templateUrl: './option-list.component.html',\n styleUrl: './option-list.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QuangOptionListComponent {\n logLevel = inject(QUANG_LOGGING_BEHAVIOR, { optional: true })\n\n selectionMode = input<'single' | 'multiple'>('single')\n\n optionListMaxHeight = input<string>('201px')\n\n selectOptions = input<SelectOption[]>([])\n\n selectButtonRef = input.required<HTMLButtonElement | HTMLInputElement | HTMLDivElement>()\n\n _value = input<any>()\n\n _isDisabled = input<boolean>()\n\n componentClass = input<string | string[]>('')\n\n componentLabel = input<string>('')\n\n componentTabIndex = input<number>(0)\n\n translateValue = input<boolean>(false)\n\n nullOption = input<boolean>(true)\n\n elementWidth = signal<string>('0px')\n\n elementTop = signal<string>('0px')\n\n elementBottom = signal<string>('0px')\n\n scrollBehaviorOnOpen = input<ScrollBehavior>('smooth')\n\n changedHandler = output<any>()\n\n blurHandler = output<any>()\n\n optionListContainer = viewChild<ElementRef<HTMLDivElement>>('optionListContainer')\n\n destroyRef = inject(DestroyRef)\n\n parentType = input.required<OptionListParentType>()\n\n parentID = input<string>('')\n\n searchString = signal<string>('')\n\n searchResetTimer: ReturnType<typeof setTimeout> | null = null\n\n selectButtonRef$ = toObservable(this.selectButtonRef)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.getOptionListWidth()\n this.getOptionListTop()\n this.getScrollParent(this.selectButtonRef())?.addEventListener('scroll', () => {\n this.getOptionListWidth()\n this.getOptionListTop()\n })\n })\n\n selectOptionsList = computed(() => {\n if (this.nullOption() && this.selectionMode() === 'single') {\n return [\n {\n label: '',\n value: null,\n },\n ...this.selectOptions(),\n ]\n }\n return [...this.selectOptions()]\n })\n\n onKeyDown: Subscription | null = null\n\n selectedElementIndex = computed<number>(\n () => this.selectOptionsList()?.findIndex((x) => x?.value === this._value()) ?? 0\n )\n\n optionList$ = effect(() => {\n const optionListContainer = this.optionListContainer()\n if (optionListContainer && this.parentType() === OptionListParentType.SELECT) {\n optionListContainer?.nativeElement.focus()\n const optionListContainerNativeElement = optionListContainer?.nativeElement\n if (optionListContainerNativeElement) {\n const ul = optionListContainerNativeElement?.children[0] as HTMLUListElement\n const listItem = ul?.children.item(this.selectedElementIndex()) as HTMLLIElement | undefined\n if (listItem) {\n setTimeout(() => {\n listItem.scrollIntoView({ behavior: this.scrollBehaviorOnOpen() })\n }, 0)\n }\n }\n }\n const ul = optionListContainer?.nativeElement?.children[0] as HTMLUListElement | undefined\n const listItems = (ul?.children ?? []) as HTMLLIElement[]\n let currentIndex = this.selectedElementIndex()\n listItems?.[currentIndex]?.classList.add('selected')\n\n if (this.onKeyDown) {\n this.onKeyDown.unsubscribe()\n }\n\n this.onKeyDown = fromEvent(document, 'keydown', {\n capture: true,\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n switch ((event as KeyboardEvent).key) {\n case 'ArrowDown': {\n if (this.parentType() === OptionListParentType.AUTOCOMPLETE) optionListContainer?.nativeElement.focus()\n if (currentIndex !== this.selectedElementIndex()) listItems[currentIndex]?.classList.remove('selected')\n if (currentIndex === listItems.length - 1) {\n currentIndex = listItems.length - 1\n } else {\n currentIndex += 1\n }\n if (currentIndex === 0) {\n event.preventDefault()\n optionListContainer?.nativeElement?.scroll(0, 0)\n }\n const optionListBottom = optionListContainer?.nativeElement?.getBoundingClientRect()?.bottom ?? 0\n const itemListHeight = optionListContainer?.nativeElement?.children?.[0]?.children\n ?.item(currentIndex)\n ?.getBoundingClientRect()?.height\n const itemListBottom = optionListContainer?.nativeElement?.children?.[0]?.children\n ?.item(currentIndex)\n ?.getBoundingClientRect()?.bottom\n if (optionListBottom > (itemListBottom ?? 0) + (itemListHeight ?? 0)) event.preventDefault()\n\n listItems[currentIndex]?.classList.add('selected')\n if (\n (optionListContainer?.nativeElement?.scrollTop ?? 0) >=\n (optionListContainer?.nativeElement?.scrollHeight ?? 0) -\n (optionListContainer?.nativeElement?.offsetHeight ?? 0)\n ) {\n event.preventDefault()\n }\n break\n }\n case 'ArrowUp': {\n if (this.parentType() === OptionListParentType.AUTOCOMPLETE) optionListContainer?.nativeElement.focus()\n if (currentIndex !== this.selectedElementIndex()) listItems[currentIndex]?.classList.remove('selected')\n if (currentIndex !== 0) currentIndex -= 1\n const optionListTop = optionListContainer?.nativeElement?.getBoundingClientRect()?.top ?? 0\n const itemListHeight = optionListContainer?.nativeElement?.children?.[0]?.children\n ?.item(currentIndex)\n ?.getBoundingClientRect()?.height\n const itemListTop = optionListContainer?.nativeElement?.children?.[0]?.children\n ?.item(currentIndex)\n ?.getBoundingClientRect()?.top\n if (optionListTop < (itemListTop ?? 0) - (itemListHeight ?? 0)) event.preventDefault()\n listItems[currentIndex]?.classList.add('selected')\n if (!optionListContainer?.nativeElement?.scrollTop) {\n event.preventDefault()\n }\n break\n }\n case 'Enter': {\n this.onSelectItem(this.selectOptionsList()[currentIndex])\n break\n }\n default: {\n if (\n ((event as KeyboardEvent)?.key?.length === 1 || (event as KeyboardEvent)?.key === 'Backspace') &&\n this.parentType() === OptionListParentType.AUTOCOMPLETE &&\n document.activeElement?.id === optionListContainer?.nativeElement?.id\n ) {\n currentIndex = 0\n document.getElementById(this.parentID())?.focus()\n document.getElementById(this.parentID())?.click()\n } else if (\n (event as KeyboardEvent)?.key?.length === 1 &&\n this.parentType() === OptionListParentType.SELECT\n ) {\n const key = (event as KeyboardEvent).key\n currentIndex = this.handleSearch(key, listItems, currentIndex)\n event.preventDefault()\n }\n break\n }\n }\n })\n })\n\n handleSearch(key: string, listItems: HTMLLIElement[], currentIndex: number): number {\n if (this.searchResetTimer) {\n clearTimeout(this.searchResetTimer)\n }\n\n this.searchString.update((current) => current + key)\n\n this.searchResetTimer = setTimeout(() => {\n this.searchString.set('')\n this.searchResetTimer = null\n }, 500)\n\n const searchStr = this.searchString().toLowerCase()\n const matchIndex = this.selectOptionsList().findIndex((option) => option.label.toLowerCase().includes(searchStr))\n\n if (matchIndex !== -1 && matchIndex !== currentIndex) {\n listItems[currentIndex]?.classList.remove('selected')\n listItems[matchIndex]?.classList.add('selected')\n listItems[matchIndex]?.scrollIntoView({ behavior: this.scrollBehaviorOnOpen() })\n return matchIndex\n }\n\n return currentIndex\n }\n\n @HostListener('window:scroll') changePosition() {\n this.getOptionListWidth()\n this.getOptionListTop()\n }\n\n isScrollable(ele: Element): boolean {\n if (!ele) return false\n\n let result = false\n\n try {\n const hasScrollableContent = ele.scrollHeight > ele.clientHeight\n\n const overflowYStyle = window.getComputedStyle(ele).overflowY\n const isOverflowHidden = overflowYStyle.includes('hidden')\n\n result = hasScrollableContent && !isOverflowHidden\n } catch (_error) {\n if (this.logLevel === 'verbose') console.error('captured error isScrollable', _error)\n }\n\n return result\n }\n\n getScrollParent(node: unknown): Element {\n if (!node || node === document.body || !(node instanceof Element)) return document.body\n return this.isScrollable(node) ? node : this.getScrollParent(node.parentNode)\n }\n\n onSelectItem(item: SelectOption | null): void {\n if (this.selectionMode() === 'single') {\n this.changedHandler.emit(item?.value ?? null)\n } else {\n let targetValue = this._value()\n if (!Array.isArray(targetValue) && targetValue) {\n targetValue = [targetValue]\n }\n const values: string[] | number[] | null = targetValue as string[] | number[] | null\n if (values) {\n if (values.some((x) => x === item?.value)) {\n this.changedHandler.emit(values.filter((x) => x !== item?.value) as string[] | number[])\n } else if (item) {\n this.changedHandler.emit([...values, item.value] as string[] | number[])\n } else {\n this.changedHandler.emit([...values] as string[] | number[])\n }\n } else if (item?.value) {\n this.changedHandler.emit([item.value] as string[] | number[])\n } else {\n this.changedHandler.emit(null)\n }\n }\n this.getOptionListTop()\n }\n\n getSelected(item: SelectOption): boolean {\n if (this.selectionMode() === 'single' || !Array.isArray(this._value())) {\n return this._value() === item.value\n }\n return this._value()?.some((x: number | string | null) => x === item?.value)\n }\n\n onBlurHandler(e: Event): void {\n this.blurHandler.emit(e)\n }\n\n getOptionListWidth() {\n this.elementWidth.set(`${this.selectButtonRef()?.offsetWidth}px`)\n }\n\n getOptionListTop() {\n const nativeElement = this.optionListContainer()?.nativeElement\n const diff =\n window.innerHeight -\n (nativeElement?.getBoundingClientRect()?.height ?? 0) -\n (this.selectButtonRef()?.getBoundingClientRect()?.top ?? 0) -\n (this.selectButtonRef()?.getBoundingClientRect()?.height ?? 0)\n let topValue = 'unset'\n let bottomValue = 'unset'\n const isTop = diff >= 0\n if (isTop) {\n topValue = `${(this.selectButtonRef()?.getBoundingClientRect()?.top ?? 0) + (this.selectButtonRef()?.getBoundingClientRect()?.height ?? 0)}px`\n } else {\n bottomValue = `${window.innerHeight - (this.selectButtonRef()?.getBoundingClientRect()?.bottom ?? 0) + (this.selectButtonRef()?.getBoundingClientRect()?.height ?? 0)}px`\n }\n nativeElement?.classList.toggle('option-list-top', !isTop)\n this.elementTop.set(topValue)\n this.elementBottom.set(bottomValue)\n setTimeout(() => {\n this.getOptionListTop()\n })\n }\n}\n","<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 (\n item of selectOptionsList();\n track (item.value ?? '') + (item.label ?? '');\n let i = $index;\n let last = $last\n ) {\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","/**\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-shared.mjs","sources":["../../../projects/quang/components/shared/makeId.ts","../../../projects/quang/components/shared/quang-base-component.directive.ts","../../../projects/quang/components/shared/option-list/option-list.component.ts","../../../projects/quang/components/shared/option-list/option-list.component.html","../../../projects/quang/components/shared/quang-components-shared.ts"],"sourcesContent":["export const makeId = (length: number) => {\n let result = ''\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n const charactersLength = characters.length\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength))\n }\n return result\n}\n","import { AfterViewInit, DestroyRef, Directive, Injector, computed, inject, input, output, signal } from '@angular/core'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\nimport { ControlValueAccessor, FormControl, NgControl, Validators } from '@angular/forms'\n\nimport { Subscription } from 'rxjs'\n\nimport { ErrorData } from './ErrorData'\nimport { makeId } from './makeId'\n\n@Directive()\nexport abstract class QuangBaseComponent<T = any> implements ControlValueAccessor, AfterViewInit {\n componentId = input<string>(makeId(10))\n\n isReadonly = input<boolean>(false)\n\n isReadonly$ = toObservable(this.isReadonly)\n\n componentTabIndex = input<number>(0)\n\n componentClass = input<string | string[]>('')\n\n componentLabel = input<string>('')\n\n componentPlaceholder = input<string>('')\n\n errorMap = input<ErrorData[]>([])\n\n errorMap$ = toObservable(this.errorMap)\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n if (this._isTouched()) {\n this.checkFormErrors()\n }\n })\n\n _errorMessagesByKey = computed(\n () => new Map((this.errorMap() ?? []).map((errorData) => [errorData.error, errorData.message]))\n )\n\n successMessage = input<string>('')\n\n helpMessage = input<string>('')\n\n formControl = input<FormControl>()\n\n // If true, the help message will be shown in a tooltip. Remember to set the `helpMessage` input and add help-icon as ng-content\n helpMessageTooltip = input<boolean>(false)\n\n componentBlur = output<void>()\n\n _value = signal<T | null>(null)\n\n _isRequired = signal<boolean>(false)\n\n _isDisabled = signal<boolean>(false)\n\n _isTouched = signal<boolean>(false)\n\n _isValid = signal<boolean>(false)\n\n _showSuccess = computed(() => this.successMessage() && this._isValid() && this._isTouched() && !this._isDisabled())\n\n _showErrors = computed(\n () => this.errorMap()?.length > 0 && !this._isValid() && this._isTouched() && !this._isDisabled()\n )\n\n _currentErrorMessage = signal<string>('')\n\n _currentErrorMessageExtraData = signal<Record<string, any>>({})\n\n _ngControl = signal<NgControl | null>(null)\n\n _injector = signal<Injector>(inject(Injector))\n\n _statusChange$?: Subscription\n\n getIsRequiredControl = computed(\n () => !!(this._ngControl()?.control as any)?._rawValidators?.find((x: any) => x.name === 'required')\n )\n\n onChange?: (value: T) => void\n\n onTouched?: () => void\n\n destroyRef = inject(DestroyRef)\n\n constructor() {\n toObservable(this.formControl)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((form) => {\n if (form) {\n this.setupFormControl()\n }\n })\n }\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn\n }\n\n writeValue(val: T): void {\n this._value.set(val)\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = () => {\n this._isTouched.set(true)\n fn()\n }\n }\n\n onChangedEventHandler($event: Event) {\n const inputElement = $event.target as HTMLInputElement\n this.onChangedHandler(inputElement.value as T)\n }\n\n onChangedHandler(value: T) {\n this._value.set(value)\n if (this.onChange) {\n this.onChange(value)\n }\n\n if (this.onTouched) {\n this.onTouched()\n }\n }\n\n onBlurHandler() {\n if (this.onTouched) {\n this.onTouched()\n }\n this.componentBlur.emit()\n }\n\n setupFormControl() {\n if (this._statusChange$) {\n this._statusChange$.unsubscribe()\n this._statusChange$ = undefined\n }\n\n this._ngControl.set(this._injector().get(NgControl))\n this._statusChange$ = this._ngControl()\n ?.control?.statusChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.checkFormErrors()\n })\n\n this._isTouched.set(this._ngControl()?.touched ?? false)\n this._isDisabled.set(this.isReadonly() || this._ngControl()?.disabled || false)\n this.checkFormErrors()\n }\n\n onChangeIsReadonly = this.isReadonly$.pipe(takeUntilDestroyed()).subscribe((isReadonly: boolean) => {\n this._isDisabled.set(isReadonly || this._ngControl()?.disabled || false)\n })\n\n setDisabledState(isDisabled: boolean) {\n this._isDisabled.set(isDisabled)\n }\n\n checkFormErrors() {\n const control = this._ngControl()?.control\n this._isValid.set(control?.valid ?? false)\n this._isTouched.set(!control?.pristine)\n\n const validationErrors = control?.errors\n\n this._isRequired.set(validationErrors?.[Validators.required.name])\n\n let errorName = ''\n let errorMessage = ''\n let errorData = true\n\n for (const [validationErrorName, validationErrorData] of Object.entries(validationErrors ?? {})) {\n const relatedErrorMessage = this._errorMessagesByKey().get(validationErrorName)\n if (relatedErrorMessage) {\n errorName = validationErrorName\n errorMessage = relatedErrorMessage\n errorData = validationErrorData\n }\n }\n\n this._currentErrorMessage.set(errorMessage)\n this._currentErrorMessageExtraData.set({ [errorName]: errorData })\n }\n\n ngAfterViewInit(): void {\n this.setupFormControl()\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NgClass, NgStyle } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n HostListener,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\nimport { QUANG_LOGGING_BEHAVIOR } from 'quang'\nimport { Subscription, fromEvent } from 'rxjs'\n\nexport interface SelectOption {\n label: string\n value: string | number | null\n}\n\nexport enum OptionListParentType {\n SELECT = 'select',\n AUTOCOMPLETE = 'autocomplete',\n}\n\n@Component({\n selector: 'quang-option-list',\n imports: [NgStyle, NgClass, TranslocoPipe],\n templateUrl: './option-list.component.html',\n styleUrl: './option-list.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QuangOptionListComponent {\n logLevel = inject(QUANG_LOGGING_BEHAVIOR, { optional: true })\n\n selectionMode = input<'single' | 'multiple'>('single')\n\n optionListMaxHeight = input<string>('201px')\n\n selectOptions = input<SelectOption[]>([])\n\n selectButtonRef = input.required<HTMLButtonElement | HTMLInputElement | HTMLDivElement>()\n\n _value = input<any>()\n\n _isDisabled = input<boolean>()\n\n componentClass = input<string | string[]>('')\n\n componentLabel = input<string>('')\n\n componentTabIndex = input<number>(0)\n\n translateValue = input<boolean>(false)\n\n nullOption = input<boolean>(true)\n\n elementWidth = signal<string>('0px')\n\n elementTop = signal<string>('0px')\n\n elementBottom = signal<string>('0px')\n\n scrollBehaviorOnOpen = input<ScrollBehavior>('smooth')\n\n changedHandler = output<any>()\n\n blurHandler = output<any>()\n\n optionListContainer = viewChild<ElementRef<HTMLDivElement>>('optionListContainer')\n\n destroyRef = inject(DestroyRef)\n\n parentType = input.required<OptionListParentType>()\n\n parentID = input<string>('')\n\n searchString = signal<string>('')\n\n searchResetTimer: ReturnType<typeof setTimeout> | null = null\n\n selectButtonRef$ = toObservable(this.selectButtonRef)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.getOptionListWidth()\n this.getOptionListTop()\n this.getScrollParent(this.selectButtonRef())?.addEventListener('scroll', () => {\n this.getOptionListWidth()\n this.getOptionListTop()\n })\n })\n\n selectOptionsList = computed(() => {\n if (this.nullOption() && this.selectionMode() === 'single') {\n return [\n {\n label: '',\n value: null,\n },\n ...this.selectOptions(),\n ]\n }\n return [...this.selectOptions()]\n })\n\n onKeyDown: Subscription | null = null\n\n selectedElementIndex = computed<number>(\n () => this.selectOptionsList()?.findIndex((x) => x?.value === this._value()) ?? 0\n )\n\n optionList$ = effect(() => {\n const optionListContainer = this.optionListContainer()\n if (optionListContainer && this.parentType() === OptionListParentType.SELECT) {\n optionListContainer?.nativeElement.focus()\n const optionListContainerNativeElement = optionListContainer?.nativeElement\n if (optionListContainerNativeElement) {\n const ul = optionListContainerNativeElement?.children[0] as HTMLUListElement\n const listItem = ul?.children.item(this.selectedElementIndex()) as HTMLLIElement | undefined\n if (listItem) {\n setTimeout(() => {\n listItem.scrollIntoView({ behavior: this.scrollBehaviorOnOpen() })\n }, 0)\n }\n }\n }\n const ul = optionListContainer?.nativeElement?.children[0] as HTMLUListElement | undefined\n const listItems = (ul?.children ?? []) as HTMLLIElement[]\n let currentIndex = this.selectedElementIndex()\n listItems?.[currentIndex]?.classList.add('selected')\n\n if (this.onKeyDown) {\n this.onKeyDown.unsubscribe()\n }\n\n this.onKeyDown = fromEvent(document, 'keydown', {\n capture: true,\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n switch ((event as KeyboardEvent).key) {\n case 'ArrowDown': {\n if (this.parentType() === OptionListParentType.AUTOCOMPLETE) optionListContainer?.nativeElement.focus()\n if (currentIndex !== this.selectedElementIndex()) listItems[currentIndex]?.classList.remove('selected')\n if (currentIndex === listItems.length - 1) {\n currentIndex = listItems.length - 1\n } else {\n currentIndex += 1\n }\n if (currentIndex === 0) {\n event.preventDefault()\n optionListContainer?.nativeElement?.scroll(0, 0)\n }\n const optionListBottom = optionListContainer?.nativeElement?.getBoundingClientRect()?.bottom ?? 0\n const itemListHeight = optionListContainer?.nativeElement?.children?.[0]?.children\n ?.item(currentIndex)\n ?.getBoundingClientRect()?.height\n const itemListBottom = optionListContainer?.nativeElement?.children?.[0]?.children\n ?.item(currentIndex)\n ?.getBoundingClientRect()?.bottom\n if (optionListBottom > (itemListBottom ?? 0) + (itemListHeight ?? 0)) event.preventDefault()\n\n listItems[currentIndex]?.classList.add('selected')\n if (\n (optionListContainer?.nativeElement?.scrollTop ?? 0) >=\n (optionListContainer?.nativeElement?.scrollHeight ?? 0) -\n (optionListContainer?.nativeElement?.offsetHeight ?? 0)\n ) {\n event.preventDefault()\n }\n break\n }\n case 'ArrowUp': {\n if (this.parentType() === OptionListParentType.AUTOCOMPLETE) optionListContainer?.nativeElement.focus()\n if (currentIndex !== this.selectedElementIndex()) listItems[currentIndex]?.classList.remove('selected')\n if (currentIndex !== 0) currentIndex -= 1\n const optionListTop = optionListContainer?.nativeElement?.getBoundingClientRect()?.top ?? 0\n const itemListHeight = optionListContainer?.nativeElement?.children?.[0]?.children\n ?.item(currentIndex)\n ?.getBoundingClientRect()?.height\n const itemListTop = optionListContainer?.nativeElement?.children?.[0]?.children\n ?.item(currentIndex)\n ?.getBoundingClientRect()?.top\n if (optionListTop < (itemListTop ?? 0) - (itemListHeight ?? 0)) event.preventDefault()\n listItems[currentIndex]?.classList.add('selected')\n if (!optionListContainer?.nativeElement?.scrollTop) {\n event.preventDefault()\n }\n break\n }\n case 'Enter': {\n this.onSelectItem(this.selectOptionsList()[currentIndex])\n break\n }\n default: {\n if (\n ((event as KeyboardEvent)?.key?.length === 1 || (event as KeyboardEvent)?.key === 'Backspace') &&\n this.parentType() === OptionListParentType.AUTOCOMPLETE &&\n document.activeElement?.id === optionListContainer?.nativeElement?.id\n ) {\n currentIndex = 0\n document.getElementById(this.parentID())?.focus()\n document.getElementById(this.parentID())?.click()\n } else if (\n (event as KeyboardEvent)?.key?.length === 1 &&\n this.parentType() === OptionListParentType.SELECT\n ) {\n const key = (event as KeyboardEvent).key\n currentIndex = this.handleSearch(key, listItems, currentIndex)\n event.preventDefault()\n }\n break\n }\n }\n })\n })\n\n handleSearch(key: string, listItems: HTMLLIElement[], currentIndex: number): number {\n if (this.searchResetTimer) {\n clearTimeout(this.searchResetTimer)\n }\n\n this.searchString.update((current) => current + key)\n\n this.searchResetTimer = setTimeout(() => {\n this.searchString.set('')\n this.searchResetTimer = null\n }, 500)\n\n const searchStr = this.searchString().toLowerCase()\n const matchIndex = this.selectOptionsList().findIndex((option) => option.label.toLowerCase().includes(searchStr))\n\n if (matchIndex !== -1 && matchIndex !== currentIndex) {\n listItems[currentIndex]?.classList.remove('selected')\n listItems[matchIndex]?.classList.add('selected')\n listItems[matchIndex]?.scrollIntoView({ behavior: this.scrollBehaviorOnOpen() })\n return matchIndex\n }\n\n return currentIndex\n }\n\n @HostListener('window:scroll') changePosition() {\n this.getOptionListWidth()\n this.getOptionListTop()\n }\n\n isScrollable(ele: Element): boolean {\n if (!ele) return false\n\n let result = false\n\n try {\n const hasScrollableContent = ele.scrollHeight > ele.clientHeight\n\n const overflowYStyle = window.getComputedStyle(ele).overflowY\n const isOverflowHidden = overflowYStyle.includes('hidden')\n\n result = hasScrollableContent && !isOverflowHidden\n } catch (_error) {\n if (this.logLevel === 'verbose') console.error('captured error isScrollable', _error)\n }\n\n return result\n }\n\n getScrollParent(node: unknown): Element {\n if (!node || node === document.body || !(node instanceof Element)) return document.body\n return this.isScrollable(node) ? node : this.getScrollParent(node.parentNode)\n }\n\n onSelectItem(item: SelectOption | null): void {\n if (this.selectionMode() === 'single') {\n this.changedHandler.emit(item?.value ?? null)\n } else {\n let targetValue = this._value()\n if (!Array.isArray(targetValue) && targetValue) {\n targetValue = [targetValue]\n }\n const values: string[] | number[] | null = targetValue as string[] | number[] | null\n if (values) {\n if (values.some((x) => x === item?.value)) {\n this.changedHandler.emit(values.filter((x) => x !== item?.value) as string[] | number[])\n } else if (item) {\n this.changedHandler.emit([...values, item.value] as string[] | number[])\n } else {\n this.changedHandler.emit([...values] as string[] | number[])\n }\n } else if (item?.value) {\n this.changedHandler.emit([item.value] as string[] | number[])\n } else {\n this.changedHandler.emit(null)\n }\n }\n this.getOptionListTop()\n }\n\n getSelected(item: SelectOption): boolean {\n if (this.selectionMode() === 'single' || !Array.isArray(this._value())) {\n return this._value() === item.value\n }\n return this._value()?.some((x: number | string | null) => x === item?.value)\n }\n\n onBlurHandler(e: Event): void {\n this.blurHandler.emit(e)\n }\n\n getOptionListWidth() {\n this.elementWidth.set(`${this.selectButtonRef()?.offsetWidth}px`)\n }\n\n getOptionListTop() {\n const nativeElement = this.optionListContainer()?.nativeElement\n const diff =\n window.innerHeight -\n (nativeElement?.getBoundingClientRect()?.height ?? 0) -\n (this.selectButtonRef()?.getBoundingClientRect()?.top ?? 0) -\n (this.selectButtonRef()?.getBoundingClientRect()?.height ?? 0)\n let topValue = 'unset'\n let bottomValue = 'unset'\n const isTop = diff >= 0\n if (isTop) {\n topValue = `${(this.selectButtonRef()?.getBoundingClientRect()?.top ?? 0) + (this.selectButtonRef()?.getBoundingClientRect()?.height ?? 0)}px`\n } else {\n bottomValue = `${window.innerHeight - (this.selectButtonRef()?.getBoundingClientRect()?.bottom ?? 0) + (this.selectButtonRef()?.getBoundingClientRect()?.height ?? 0)}px`\n }\n nativeElement?.classList.toggle('option-list-top', !isTop)\n this.elementTop.set(topValue)\n this.elementBottom.set(bottomValue)\n setTimeout(() => {\n this.getOptionListTop()\n })\n }\n}\n","<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 (\n item of selectOptionsList();\n track (item.value ?? '') + (item.label ?? '');\n let i = $index;\n let last = $last\n ) {\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|