@pecb-ui/components 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +556 -556
  2. package/fesm2022/pecb-ui-components.mjs +3826 -1945
  3. package/fesm2022/pecb-ui-components.mjs.map +1 -1
  4. package/index.d.ts +3937 -3
  5. package/package.json +6 -8
  6. package/esm2022/lib/components/button/button.component.mjs +0 -171
  7. package/esm2022/lib/components/card/card.component.mjs +0 -182
  8. package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -126
  9. package/esm2022/lib/components/datepicker/datepicker.component.mjs +0 -349
  10. package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -329
  11. package/esm2022/lib/components/input/input.component.mjs +0 -321
  12. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -197
  13. package/esm2022/lib/components/radio/radio.component.mjs +0 -147
  14. package/esm2022/lib/components/right-modal/right-modal.component.mjs +0 -234
  15. package/esm2022/lib/components/sidebar/sidebar.component.mjs +0 -155
  16. package/esm2022/lib/components/status/status.component.mjs +0 -50
  17. package/esm2022/lib/components/tab/tab.component.mjs +0 -151
  18. package/esm2022/lib/components/table/table.component.mjs +0 -503
  19. package/esm2022/lib/components/toggle/toggle.component.mjs +0 -126
  20. package/esm2022/lib/pecb-components.module.mjs +0 -118
  21. package/esm2022/lib/services/loading.service.mjs +0 -182
  22. package/esm2022/lib/services/notification.service.mjs +0 -144
  23. package/esm2022/lib/services/theme.service.mjs +0 -232
  24. package/esm2022/lib/shared/interfaces/component.interfaces.mjs +0 -2
  25. package/esm2022/lib/shared/types/common.types.mjs +0 -6
  26. package/esm2022/lib/shared/utils/accessibility.utils.mjs +0 -223
  27. package/esm2022/lib/shared/utils/dom.utils.mjs +0 -240
  28. package/esm2022/lib/shared/utils/error.utils.mjs +0 -277
  29. package/esm2022/lib/shared/utils/string.utils.mjs +0 -204
  30. package/esm2022/pecb-ui-components.mjs +0 -5
  31. package/esm2022/public-api.mjs +0 -53
  32. package/lib/components/button/button.component.d.ts +0 -130
  33. package/lib/components/card/card.component.d.ts +0 -140
  34. package/lib/components/checkbox/checkbox.component.d.ts +0 -74
  35. package/lib/components/datepicker/datepicker.component.d.ts +0 -155
  36. package/lib/components/dropdown/dropdown.component.d.ts +0 -144
  37. package/lib/components/input/input.component.d.ts +0 -215
  38. package/lib/components/pagination/pagination.component.d.ts +0 -53
  39. package/lib/components/radio/radio.component.d.ts +0 -93
  40. package/lib/components/right-modal/right-modal.component.d.ts +0 -137
  41. package/lib/components/sidebar/sidebar.component.d.ts +0 -97
  42. package/lib/components/status/status.component.d.ts +0 -19
  43. package/lib/components/tab/tab.component.d.ts +0 -102
  44. package/lib/components/table/table.component.d.ts +0 -403
  45. package/lib/components/toggle/toggle.component.d.ts +0 -74
  46. package/lib/pecb-components.module.d.ts +0 -37
  47. package/lib/services/loading.service.d.ts +0 -129
  48. package/lib/services/notification.service.d.ts +0 -136
  49. package/lib/services/theme.service.d.ts +0 -142
  50. package/lib/shared/interfaces/component.interfaces.d.ts +0 -283
  51. package/lib/shared/types/common.types.d.ts +0 -86
  52. package/lib/shared/utils/accessibility.utils.d.ts +0 -167
  53. package/lib/shared/utils/dom.utils.d.ts +0 -108
  54. package/lib/shared/utils/error.utils.d.ts +0 -191
  55. package/lib/shared/utils/string.utils.d.ts +0 -144
  56. package/public-api.d.ts +0 -24
@@ -1,197 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, HostListener } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- export class PaginationComponent {
6
- constructor(elementRef) {
7
- this.elementRef = elementRef;
8
- this.totalItems = 0;
9
- this.pageSize = 10;
10
- this.currentPage = 1;
11
- this.pageSizeOptions = [10, 25, 50, 75];
12
- this.size = 'md';
13
- this.variant = 'full';
14
- this.showPageSizeSelector = true;
15
- this.showItemsInfo = true;
16
- this.maxVisiblePages = 3;
17
- this.disabled = false;
18
- this.ariaLabel = 'Pagination';
19
- this.pageChange = new EventEmitter();
20
- this.pageSizeChange = new EventEmitter();
21
- this.totalPages = 0;
22
- this.visiblePages = [];
23
- this.isDropdownOpen = false;
24
- }
25
- onDocumentClick(event) {
26
- if (this.isDropdownOpen && !this.elementRef.nativeElement.contains(event.target)) {
27
- this.isDropdownOpen = false;
28
- }
29
- }
30
- ngOnChanges(changes) {
31
- if (changes['totalItems'] || changes['pageSize'] || changes['currentPage']) {
32
- this.calculateTotalPages();
33
- this.updateVisiblePages();
34
- }
35
- }
36
- get containerClasses() {
37
- return [
38
- 'pecb-pagination',
39
- `pecb-pagination--${this.size}`,
40
- `pecb-pagination--${this.variant}`,
41
- this.disabled ? 'pecb-pagination--disabled' : ''
42
- ].filter(Boolean);
43
- }
44
- get showPages() {
45
- return this.variant === 'full' || this.variant === 'compact';
46
- }
47
- get showPageSize() {
48
- return this.variant === 'full' && this.showPageSizeSelector;
49
- }
50
- get itemsInfoText() {
51
- if (this.variant === 'minimal' || this.variant === 'centered') {
52
- return `Showing ${this.startIndex}-${this.endIndex} of ${this.totalItems}`;
53
- }
54
- return `${this.startIndex}-${this.endIndex} of ${this.totalItems} items`;
55
- }
56
- get startIndex() {
57
- if (this.totalItems === 0)
58
- return 0;
59
- return (this.currentPage - 1) * this.pageSize + 1;
60
- }
61
- get endIndex() {
62
- return Math.min(this.currentPage * this.pageSize, this.totalItems);
63
- }
64
- get canGoPrevious() {
65
- return this.currentPage > 1 && !this.disabled;
66
- }
67
- get canGoNext() {
68
- return this.currentPage < this.totalPages && !this.disabled;
69
- }
70
- calculateTotalPages() {
71
- this.totalPages = Math.ceil(this.totalItems / this.pageSize);
72
- if (this.currentPage > this.totalPages && this.totalPages > 0) {
73
- this.goToPage(this.totalPages);
74
- }
75
- }
76
- updateVisiblePages() {
77
- const pages = [];
78
- if (this.totalPages <= this.maxVisiblePages + 2) {
79
- for (let i = 1; i <= this.totalPages; i++) {
80
- pages.push(i);
81
- }
82
- }
83
- else {
84
- pages.push(1);
85
- if (this.currentPage <= this.maxVisiblePages) {
86
- for (let i = 2; i <= this.maxVisiblePages + 1; i++) {
87
- pages.push(i);
88
- }
89
- pages.push('...');
90
- pages.push(this.totalPages);
91
- }
92
- else if (this.currentPage >= this.totalPages - this.maxVisiblePages + 1) {
93
- pages.push('...');
94
- for (let i = this.totalPages - this.maxVisiblePages; i <= this.totalPages; i++) {
95
- pages.push(i);
96
- }
97
- }
98
- else {
99
- pages.push('...');
100
- for (let i = this.currentPage - 1; i <= this.currentPage + 1; i++) {
101
- pages.push(i);
102
- }
103
- pages.push('...');
104
- pages.push(this.totalPages);
105
- }
106
- }
107
- this.visiblePages = pages;
108
- }
109
- goToPage(page) {
110
- if (this.disabled || page < 1 || page > this.totalPages || page === this.currentPage) {
111
- return;
112
- }
113
- this.currentPage = page;
114
- this.updateVisiblePages();
115
- this.emitPageChange();
116
- }
117
- goToPrevious() {
118
- if (this.canGoPrevious) {
119
- this.goToPage(this.currentPage - 1);
120
- }
121
- }
122
- goToNext() {
123
- if (this.canGoNext) {
124
- this.goToPage(this.currentPage + 1);
125
- }
126
- }
127
- onPageSizeChange(newSize) {
128
- if (this.disabled)
129
- return;
130
- this.pageSize = newSize;
131
- this.currentPage = 1;
132
- this.calculateTotalPages();
133
- this.updateVisiblePages();
134
- this.isDropdownOpen = false;
135
- this.pageSizeChange.emit(newSize);
136
- this.emitPageChange();
137
- }
138
- toggleDropdown() {
139
- if (!this.disabled) {
140
- this.isDropdownOpen = !this.isDropdownOpen;
141
- }
142
- }
143
- closeDropdown() {
144
- this.isDropdownOpen = false;
145
- }
146
- emitPageChange() {
147
- this.pageChange.emit({
148
- page: this.currentPage,
149
- pageSize: this.pageSize,
150
- startIndex: this.startIndex,
151
- endIndex: this.endIndex
152
- });
153
- }
154
- isNumber(value) {
155
- return typeof value === 'number';
156
- }
157
- trackByPage(index, page) {
158
- return typeof page === 'number' ? page : `ellipsis-${index}`;
159
- }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PaginationComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PaginationComponent, isStandalone: true, selector: "pecb-pagination", inputs: { totalItems: "totalItems", pageSize: "pageSize", currentPage: "currentPage", pageSizeOptions: "pageSizeOptions", size: "size", variant: "variant", showPageSizeSelector: "showPageSizeSelector", showItemsInfo: "showItemsInfo", maxVisiblePages: "maxVisiblePages", disabled: "disabled", ariaLabel: ["aria-label", "ariaLabel"] }, outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, usesOnChanges: true, ngImport: i0, template: "<nav\r\n [class]=\"containerClasses.join(' ')\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n role=\"navigation\"\r\n>\r\n <!-- V4: Centered variant - prev button on left -->\r\n <button\r\n *ngIf=\"variant === 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--prev pecb-pagination__nav-button--bordered\"\r\n [disabled]=\"!canGoPrevious\"\r\n [attr.aria-label]=\"'Go to previous page'\"\r\n (click)=\"goToPrevious()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M10 12L6 8L10 4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <!-- Info section (V1, V2, V3, V4) -->\r\n <div class=\"pecb-pagination__info\" *ngIf=\"showItemsInfo || showPageSize\">\r\n <span *ngIf=\"showItemsInfo\" class=\"pecb-pagination__items-text\">\r\n {{ itemsInfoText }}\r\n </span>\r\n\r\n <!-- Page size dropdown (V1 only) -->\r\n <div *ngIf=\"showPageSize\" class=\"pecb-pagination__page-size\">\r\n <span class=\"pecb-pagination__page-size-label\">Items per page:</span>\r\n <div class=\"pecb-pagination__dropdown\">\r\n <button\r\n type=\"button\"\r\n class=\"pecb-pagination__dropdown-trigger\"\r\n [class.pecb-pagination__dropdown-trigger--open]=\"isDropdownOpen\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-expanded]=\"isDropdownOpen\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggleDropdown()\"\r\n >\r\n <span>{{ pageSize }}</span>\r\n <svg\r\n class=\"pecb-pagination__dropdown-icon\"\r\n [class.pecb-pagination__dropdown-icon--open]=\"isDropdownOpen\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M4 6L8 10L12 6\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <ul\r\n *ngIf=\"isDropdownOpen\"\r\n class=\"pecb-pagination__dropdown-menu\"\r\n role=\"listbox\"\r\n [attr.aria-label]=\"'Select items per page'\"\r\n >\r\n <li\r\n *ngFor=\"let option of pageSizeOptions\"\r\n class=\"pecb-pagination__dropdown-item\"\r\n [class.pecb-pagination__dropdown-item--selected]=\"option === pageSize\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"option === pageSize\"\r\n (click)=\"onPageSizeChange(option)\"\r\n >\r\n {{ option }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Controls section -->\r\n <div class=\"pecb-pagination__controls\">\r\n <!-- Previous button (V1, V2, V3) -->\r\n <button\r\n *ngIf=\"variant !== 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--prev\"\r\n [class.pecb-pagination__nav-button--bordered]=\"variant === 'minimal'\"\r\n [disabled]=\"!canGoPrevious\"\r\n [attr.aria-label]=\"'Go to previous page'\"\r\n (click)=\"goToPrevious()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M10 12L6 8L10 4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <!-- Page numbers (V1, V2) -->\r\n <div *ngIf=\"showPages\" class=\"pecb-pagination__pages\" role=\"group\" aria-label=\"Page navigation\">\r\n <ng-container *ngFor=\"let page of visiblePages; trackBy: trackByPage\">\r\n <button\r\n *ngIf=\"isNumber(page)\"\r\n type=\"button\"\r\n class=\"pecb-pagination__page-button\"\r\n [class.pecb-pagination__page-button--active]=\"page === currentPage\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"'Page ' + page\"\r\n [attr.aria-current]=\"page === currentPage ? 'page' : null\"\r\n (click)=\"goToPage(+page)\"\r\n >\r\n {{ page }}\r\n </button>\r\n <span\r\n *ngIf=\"!isNumber(page)\"\r\n class=\"pecb-pagination__ellipsis\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ page }}\r\n </span>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Next button (V1, V2, V3) -->\r\n <button\r\n *ngIf=\"variant !== 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--next\"\r\n [class.pecb-pagination__nav-button--bordered]=\"variant === 'minimal'\"\r\n [disabled]=\"!canGoNext\"\r\n [attr.aria-label]=\"'Go to next page'\"\r\n (click)=\"goToNext()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6 4L10 8L6 12\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- V4: Centered variant - next button on right -->\r\n <button\r\n *ngIf=\"variant === 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--next pecb-pagination__nav-button--bordered\"\r\n [disabled]=\"!canGoNext\"\r\n [attr.aria-label]=\"'Go to next page'\"\r\n (click)=\"goToNext()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6 4L10 8L6 12\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n</nav>\r\n", styles: [".pecb-pagination{display:flex;align-items:center;justify-content:space-between;gap:24px;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;width:100%}.pecb-pagination--sm .pecb-pagination__items-text,.pecb-pagination--sm .pecb-pagination__page-size-label{font-size:12px}.pecb-pagination--sm .pecb-pagination__dropdown-trigger{height:28px;padding:0 8px;font-size:12px}.pecb-pagination--sm .pecb-pagination__nav-button,.pecb-pagination--sm .pecb-pagination__page-button{width:28px;height:28px;font-size:12px}.pecb-pagination--sm .pecb-pagination__ellipsis{width:28px;height:28px}.pecb-pagination--md .pecb-pagination__items-text,.pecb-pagination--md .pecb-pagination__page-size-label{font-size:14px}.pecb-pagination--md .pecb-pagination__dropdown-trigger{height:32px;padding:0 12px;font-size:14px}.pecb-pagination--md .pecb-pagination__nav-button,.pecb-pagination--md .pecb-pagination__page-button{width:32px;height:32px;font-size:14px}.pecb-pagination--md .pecb-pagination__ellipsis{width:32px;height:32px}.pecb-pagination--lg .pecb-pagination__items-text,.pecb-pagination--lg .pecb-pagination__page-size-label{font-size:16px}.pecb-pagination--lg .pecb-pagination__dropdown-trigger{height:40px;padding:0 16px;font-size:16px}.pecb-pagination--lg .pecb-pagination__nav-button,.pecb-pagination--lg .pecb-pagination__page-button{width:40px;height:40px;font-size:16px}.pecb-pagination--lg .pecb-pagination__ellipsis{width:40px;height:40px}.pecb-pagination--full,.pecb-pagination--compact{justify-content:space-between}.pecb-pagination--compact .pecb-pagination__info{gap:0}.pecb-pagination--minimal{justify-content:space-between}.pecb-pagination--minimal .pecb-pagination__controls{gap:8px}.pecb-pagination--centered{justify-content:space-between}.pecb-pagination--centered .pecb-pagination__info{flex:1;justify-content:center}.pecb-pagination--centered .pecb-pagination__controls{display:none}.pecb-pagination--disabled{opacity:.5;pointer-events:none}.pecb-pagination__info{display:flex;align-items:center;gap:24px}.pecb-pagination__items-text{color:#616161;font-weight:400;white-space:nowrap}.pecb-pagination__page-size{display:flex;align-items:center;gap:8px}.pecb-pagination__page-size-label{color:#616161;font-weight:400;white-space:nowrap}.pecb-pagination__dropdown{position:relative}.pecb-pagination__dropdown-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:64px;background-color:#fff;border:1px solid #ececec;border-radius:12px;color:#313131;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:400;cursor:pointer;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.pecb-pagination__dropdown-trigger:hover:not(:disabled){border-color:#919191}.pecb-pagination__dropdown-trigger:focus{outline:none;border-color:#212427;box-shadow:0 0 0 2px #2124271a}.pecb-pagination__dropdown-trigger:disabled{cursor:not-allowed;opacity:.5}.pecb-pagination__dropdown-trigger--open{border-color:#212427}.pecb-pagination__dropdown-icon{color:#616161;transition:transform .15s ease-in-out;flex-shrink:0}.pecb-pagination__dropdown-icon--open{transform:rotate(180deg)}.pecb-pagination__dropdown-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:1000;min-width:100%;margin:0;padding:8px 0;list-style:none;background-color:#fff;border:1px solid #ececec;border-radius:8px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-pagination__dropdown-item{padding:8px 12px;color:#313131;font-size:14px;font-weight:400;cursor:pointer;transition:background-color .15s ease-in-out,color .15s ease-in-out}.pecb-pagination__dropdown-item:hover{background-color:#f4f4f4}.pecb-pagination__dropdown-item--selected{color:#212427;font-weight:500}.pecb-pagination__controls{display:flex;align-items:center;gap:6px}.pecb-pagination__nav-button{display:flex;align-items:center;justify-content:center;background-color:transparent;border:none;border-radius:8px;color:#919191;cursor:pointer;transition:background-color .15s ease-in-out,color .15s ease-in-out,border-color .15s ease-in-out}.pecb-pagination__nav-button:hover:not(:disabled){background-color:#f4f4f4;color:#313131}.pecb-pagination__nav-button:focus{outline:none;box-shadow:0 0 0 2px #21242733}.pecb-pagination__nav-button:disabled{color:#c2c2c2;cursor:not-allowed}.pecb-pagination__nav-button svg{width:16px;height:16px}.pecb-pagination__nav-button--bordered{background-color:#fff;border:1px solid #ececec;border-radius:8px}.pecb-pagination__nav-button--bordered:hover:not(:disabled){background-color:#fff;border-color:#c2c2c2;color:#212427}.pecb-pagination__nav-button--bordered:hover:not(:disabled) svg path{stroke:#212427}.pecb-pagination__nav-button--bordered:disabled{background-color:#fafafa;border-color:#ececec}.pecb-pagination__pages{display:flex;align-items:center;gap:6px}.pecb-pagination__page-button{display:flex;align-items:center;justify-content:center;background-color:transparent;border:none;border-radius:8px;color:#616161;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:400;cursor:pointer;transition:background-color .15s ease-in-out,color .15s ease-in-out}.pecb-pagination__page-button:hover:not(:disabled):not(.pecb-pagination__page-button--active){background-color:#f4f4f4;color:#313131}.pecb-pagination__page-button:focus{outline:none;box-shadow:0 0 0 2px #21242733}.pecb-pagination__page-button:disabled{cursor:not-allowed;opacity:.5}.pecb-pagination__page-button--active{background-color:#212427;color:#fff;font-weight:500}.pecb-pagination__page-button--active:hover{background-color:#151719}.pecb-pagination__ellipsis{display:flex;align-items:center;justify-content:center;color:#919191;font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
162
- }
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PaginationComponent, decorators: [{
164
- type: Component,
165
- args: [{ selector: 'pecb-pagination', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav\r\n [class]=\"containerClasses.join(' ')\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n role=\"navigation\"\r\n>\r\n <!-- V4: Centered variant - prev button on left -->\r\n <button\r\n *ngIf=\"variant === 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--prev pecb-pagination__nav-button--bordered\"\r\n [disabled]=\"!canGoPrevious\"\r\n [attr.aria-label]=\"'Go to previous page'\"\r\n (click)=\"goToPrevious()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M10 12L6 8L10 4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <!-- Info section (V1, V2, V3, V4) -->\r\n <div class=\"pecb-pagination__info\" *ngIf=\"showItemsInfo || showPageSize\">\r\n <span *ngIf=\"showItemsInfo\" class=\"pecb-pagination__items-text\">\r\n {{ itemsInfoText }}\r\n </span>\r\n\r\n <!-- Page size dropdown (V1 only) -->\r\n <div *ngIf=\"showPageSize\" class=\"pecb-pagination__page-size\">\r\n <span class=\"pecb-pagination__page-size-label\">Items per page:</span>\r\n <div class=\"pecb-pagination__dropdown\">\r\n <button\r\n type=\"button\"\r\n class=\"pecb-pagination__dropdown-trigger\"\r\n [class.pecb-pagination__dropdown-trigger--open]=\"isDropdownOpen\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-expanded]=\"isDropdownOpen\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggleDropdown()\"\r\n >\r\n <span>{{ pageSize }}</span>\r\n <svg\r\n class=\"pecb-pagination__dropdown-icon\"\r\n [class.pecb-pagination__dropdown-icon--open]=\"isDropdownOpen\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M4 6L8 10L12 6\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <ul\r\n *ngIf=\"isDropdownOpen\"\r\n class=\"pecb-pagination__dropdown-menu\"\r\n role=\"listbox\"\r\n [attr.aria-label]=\"'Select items per page'\"\r\n >\r\n <li\r\n *ngFor=\"let option of pageSizeOptions\"\r\n class=\"pecb-pagination__dropdown-item\"\r\n [class.pecb-pagination__dropdown-item--selected]=\"option === pageSize\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"option === pageSize\"\r\n (click)=\"onPageSizeChange(option)\"\r\n >\r\n {{ option }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Controls section -->\r\n <div class=\"pecb-pagination__controls\">\r\n <!-- Previous button (V1, V2, V3) -->\r\n <button\r\n *ngIf=\"variant !== 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--prev\"\r\n [class.pecb-pagination__nav-button--bordered]=\"variant === 'minimal'\"\r\n [disabled]=\"!canGoPrevious\"\r\n [attr.aria-label]=\"'Go to previous page'\"\r\n (click)=\"goToPrevious()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M10 12L6 8L10 4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <!-- Page numbers (V1, V2) -->\r\n <div *ngIf=\"showPages\" class=\"pecb-pagination__pages\" role=\"group\" aria-label=\"Page navigation\">\r\n <ng-container *ngFor=\"let page of visiblePages; trackBy: trackByPage\">\r\n <button\r\n *ngIf=\"isNumber(page)\"\r\n type=\"button\"\r\n class=\"pecb-pagination__page-button\"\r\n [class.pecb-pagination__page-button--active]=\"page === currentPage\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"'Page ' + page\"\r\n [attr.aria-current]=\"page === currentPage ? 'page' : null\"\r\n (click)=\"goToPage(+page)\"\r\n >\r\n {{ page }}\r\n </button>\r\n <span\r\n *ngIf=\"!isNumber(page)\"\r\n class=\"pecb-pagination__ellipsis\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ page }}\r\n </span>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Next button (V1, V2, V3) -->\r\n <button\r\n *ngIf=\"variant !== 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--next\"\r\n [class.pecb-pagination__nav-button--bordered]=\"variant === 'minimal'\"\r\n [disabled]=\"!canGoNext\"\r\n [attr.aria-label]=\"'Go to next page'\"\r\n (click)=\"goToNext()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6 4L10 8L6 12\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- V4: Centered variant - next button on right -->\r\n <button\r\n *ngIf=\"variant === 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--next pecb-pagination__nav-button--bordered\"\r\n [disabled]=\"!canGoNext\"\r\n [attr.aria-label]=\"'Go to next page'\"\r\n (click)=\"goToNext()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6 4L10 8L6 12\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n</nav>\r\n", styles: [".pecb-pagination{display:flex;align-items:center;justify-content:space-between;gap:24px;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;width:100%}.pecb-pagination--sm .pecb-pagination__items-text,.pecb-pagination--sm .pecb-pagination__page-size-label{font-size:12px}.pecb-pagination--sm .pecb-pagination__dropdown-trigger{height:28px;padding:0 8px;font-size:12px}.pecb-pagination--sm .pecb-pagination__nav-button,.pecb-pagination--sm .pecb-pagination__page-button{width:28px;height:28px;font-size:12px}.pecb-pagination--sm .pecb-pagination__ellipsis{width:28px;height:28px}.pecb-pagination--md .pecb-pagination__items-text,.pecb-pagination--md .pecb-pagination__page-size-label{font-size:14px}.pecb-pagination--md .pecb-pagination__dropdown-trigger{height:32px;padding:0 12px;font-size:14px}.pecb-pagination--md .pecb-pagination__nav-button,.pecb-pagination--md .pecb-pagination__page-button{width:32px;height:32px;font-size:14px}.pecb-pagination--md .pecb-pagination__ellipsis{width:32px;height:32px}.pecb-pagination--lg .pecb-pagination__items-text,.pecb-pagination--lg .pecb-pagination__page-size-label{font-size:16px}.pecb-pagination--lg .pecb-pagination__dropdown-trigger{height:40px;padding:0 16px;font-size:16px}.pecb-pagination--lg .pecb-pagination__nav-button,.pecb-pagination--lg .pecb-pagination__page-button{width:40px;height:40px;font-size:16px}.pecb-pagination--lg .pecb-pagination__ellipsis{width:40px;height:40px}.pecb-pagination--full,.pecb-pagination--compact{justify-content:space-between}.pecb-pagination--compact .pecb-pagination__info{gap:0}.pecb-pagination--minimal{justify-content:space-between}.pecb-pagination--minimal .pecb-pagination__controls{gap:8px}.pecb-pagination--centered{justify-content:space-between}.pecb-pagination--centered .pecb-pagination__info{flex:1;justify-content:center}.pecb-pagination--centered .pecb-pagination__controls{display:none}.pecb-pagination--disabled{opacity:.5;pointer-events:none}.pecb-pagination__info{display:flex;align-items:center;gap:24px}.pecb-pagination__items-text{color:#616161;font-weight:400;white-space:nowrap}.pecb-pagination__page-size{display:flex;align-items:center;gap:8px}.pecb-pagination__page-size-label{color:#616161;font-weight:400;white-space:nowrap}.pecb-pagination__dropdown{position:relative}.pecb-pagination__dropdown-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:64px;background-color:#fff;border:1px solid #ececec;border-radius:12px;color:#313131;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:400;cursor:pointer;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.pecb-pagination__dropdown-trigger:hover:not(:disabled){border-color:#919191}.pecb-pagination__dropdown-trigger:focus{outline:none;border-color:#212427;box-shadow:0 0 0 2px #2124271a}.pecb-pagination__dropdown-trigger:disabled{cursor:not-allowed;opacity:.5}.pecb-pagination__dropdown-trigger--open{border-color:#212427}.pecb-pagination__dropdown-icon{color:#616161;transition:transform .15s ease-in-out;flex-shrink:0}.pecb-pagination__dropdown-icon--open{transform:rotate(180deg)}.pecb-pagination__dropdown-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:1000;min-width:100%;margin:0;padding:8px 0;list-style:none;background-color:#fff;border:1px solid #ececec;border-radius:8px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.pecb-pagination__dropdown-item{padding:8px 12px;color:#313131;font-size:14px;font-weight:400;cursor:pointer;transition:background-color .15s ease-in-out,color .15s ease-in-out}.pecb-pagination__dropdown-item:hover{background-color:#f4f4f4}.pecb-pagination__dropdown-item--selected{color:#212427;font-weight:500}.pecb-pagination__controls{display:flex;align-items:center;gap:6px}.pecb-pagination__nav-button{display:flex;align-items:center;justify-content:center;background-color:transparent;border:none;border-radius:8px;color:#919191;cursor:pointer;transition:background-color .15s ease-in-out,color .15s ease-in-out,border-color .15s ease-in-out}.pecb-pagination__nav-button:hover:not(:disabled){background-color:#f4f4f4;color:#313131}.pecb-pagination__nav-button:focus{outline:none;box-shadow:0 0 0 2px #21242733}.pecb-pagination__nav-button:disabled{color:#c2c2c2;cursor:not-allowed}.pecb-pagination__nav-button svg{width:16px;height:16px}.pecb-pagination__nav-button--bordered{background-color:#fff;border:1px solid #ececec;border-radius:8px}.pecb-pagination__nav-button--bordered:hover:not(:disabled){background-color:#fff;border-color:#c2c2c2;color:#212427}.pecb-pagination__nav-button--bordered:hover:not(:disabled) svg path{stroke:#212427}.pecb-pagination__nav-button--bordered:disabled{background-color:#fafafa;border-color:#ececec}.pecb-pagination__pages{display:flex;align-items:center;gap:6px}.pecb-pagination__page-button{display:flex;align-items:center;justify-content:center;background-color:transparent;border:none;border-radius:8px;color:#616161;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:400;cursor:pointer;transition:background-color .15s ease-in-out,color .15s ease-in-out}.pecb-pagination__page-button:hover:not(:disabled):not(.pecb-pagination__page-button--active){background-color:#f4f4f4;color:#313131}.pecb-pagination__page-button:focus{outline:none;box-shadow:0 0 0 2px #21242733}.pecb-pagination__page-button:disabled{cursor:not-allowed;opacity:.5}.pecb-pagination__page-button--active{background-color:#212427;color:#fff;font-weight:500}.pecb-pagination__page-button--active:hover{background-color:#151719}.pecb-pagination__ellipsis{display:flex;align-items:center;justify-content:center;color:#919191;font-size:14px}\n"] }]
166
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { totalItems: [{
167
- type: Input
168
- }], pageSize: [{
169
- type: Input
170
- }], currentPage: [{
171
- type: Input
172
- }], pageSizeOptions: [{
173
- type: Input
174
- }], size: [{
175
- type: Input
176
- }], variant: [{
177
- type: Input
178
- }], showPageSizeSelector: [{
179
- type: Input
180
- }], showItemsInfo: [{
181
- type: Input
182
- }], maxVisiblePages: [{
183
- type: Input
184
- }], disabled: [{
185
- type: Input
186
- }], ariaLabel: [{
187
- type: Input,
188
- args: ['aria-label']
189
- }], pageChange: [{
190
- type: Output
191
- }], pageSizeChange: [{
192
- type: Output
193
- }], onDocumentClick: [{
194
- type: HostListener,
195
- args: ['document:click', ['$event']]
196
- }] } });
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBR3ZCLFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQW9CL0MsTUFBTSxPQUFPLG1CQUFtQjtJQXFCOUIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXBCakMsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixvQkFBZSxHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0MsU0FBSSxHQUFtQixJQUFJLENBQUM7UUFDNUIsWUFBTyxHQUFzQixNQUFNLENBQUM7UUFDcEMseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFTCxjQUFTLEdBQUcsWUFBWSxDQUFDO1FBRXBDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUNqRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFV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QUFDLEtBQWEsRUFBRSxJQUFxQjtRQUM5QyxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDO0lBQy9ELENBQUM7K0dBbExVLG1CQUFtQjttR0FBbkIsbUJBQW1CLDZqQkMvQmhDLCsrTUFzTUEsdXNMRDVLWSxZQUFZOzs0RkFLWCxtQkFBbUI7a0JBUi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUdOLHVCQUF1QixDQUFDLE1BQU07K0VBR3RDLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRWUsU0FBUztzQkFBN0IsS0FBSzt1QkFBQyxZQUFZO2dCQUVULFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFTUCxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBFbGVtZW50UmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uU2l6ZSA9ICdzbScgfCAnbWQnIHwgJ2xnJztcclxuZXhwb3J0IHR5cGUgUGFnaW5hdGlvblZhcmlhbnQgPSAnZnVsbCcgfCAnY29tcGFjdCcgfCAnbWluaW1hbCcgfCAnY2VudGVyZWQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYWdlQ2hhbmdlRXZlbnQge1xyXG4gIHBhZ2U6IG51bWJlcjtcclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gIHN0YXJ0SW5kZXg6IG51bWJlcjtcclxuICBlbmRJbmRleDogbnVtYmVyO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3BlY2ItcGFnaW5hdGlvbicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSB0b3RhbEl0ZW1zID0gMDtcclxuICBASW5wdXQoKSBwYWdlU2l6ZSA9IDEwO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlID0gMTtcclxuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzEwLCAyNSwgNTAsIDc1XTtcclxuICBASW5wdXQoKSBzaXplOiBQYWdpbmF0aW9uU2l6ZSA9ICdtZCc7XHJcbiAgQElucHV0KCkgdmFyaWFudDogUGFnaW5hdGlvblZhcmlhbnQgPSAnZnVsbCc7XHJcbiAgQElucHV0KCkgc2hvd1BhZ2VTaXplU2VsZWN0b3IgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dJdGVtc0luZm8gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIG1heFZpc2libGVQYWdlcyA9IDM7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCdhcmlhLWxhYmVsJykgYXJpYUxhYmVsID0gJ1BhZ2luYXRpb24nO1xyXG5cclxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBwYWdlU2l6ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuICB0b3RhbFBhZ2VzID0gMDtcclxuICB2aXNpYmxlUGFnZXM6IChudW1iZXIgfCBzdHJpbmcpW10gPSBbXTtcclxuICBpc0Ryb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuICYmICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0b3RhbEl0ZW1zJ10gfHwgY2hhbmdlc1sncGFnZVNpemUnXSB8fCBjaGFuZ2VzWydjdXJyZW50UGFnZSddKSB7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlcygpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVQYWdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbnRhaW5lckNsYXNzZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ3BlY2ItcGFnaW5hdGlvbicsXHJcbiAgICAgIGBwZWNiLXBhZ2luYXRpb24tLSR7dGhpcy5zaXplfWAsXHJcbiAgICAgIGBwZWNiLXBhZ2luYXRpb24tLSR7dGhpcy52YXJpYW50fWAsXHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPyAncGVjYi1wYWdpbmF0aW9uLS1kaXNhYmxlZCcgOiAnJ1xyXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvd1BhZ2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudmFyaWFudCA9PT0gJ2Z1bGwnIHx8IHRoaXMudmFyaWFudCA9PT0gJ2NvbXBhY3QnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dQYWdlU2l6ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnZhcmlhbnQgPT09ICdmdWxsJyAmJiB0aGlzLnNob3dQYWdlU2l6ZVNlbGVjdG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGl0ZW1zSW5mb1RleHQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdtaW5pbWFsJyB8fCB0aGlzLnZhcmlhbnQgPT09ICdjZW50ZXJlZCcpIHtcclxuICAgICAgcmV0dXJuIGBTaG93aW5nICR7dGhpcy5zdGFydEluZGV4fS0ke3RoaXMuZW5kSW5kZXh9IG9mICR7dGhpcy50b3RhbEl0ZW1zfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7dGhpcy5zdGFydEluZGV4fS0ke3RoaXMuZW5kSW5kZXh9IG9mICR7dGhpcy50b3RhbEl0ZW1zfSBpdGVtc2A7XHJcbiAgfVxyXG5cclxuICBnZXQgc3RhcnRJbmRleCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMudG90YWxJdGVtcyA9PT0gMCkgcmV0dXJuIDA7XHJcbiAgICByZXR1cm4gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemUgKyAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVuZEluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5taW4odGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucGFnZVNpemUsIHRoaXMudG90YWxJdGVtcyk7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuR29QcmV2aW91cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID4gMSAmJiAhdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGdldCBjYW5Hb05leHQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA8IHRoaXMudG90YWxQYWdlcyAmJiAhdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlVG90YWxQYWdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMgLyB0aGlzLnBhZ2VTaXplKTtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdGhpcy50b3RhbFBhZ2VzICYmIHRoaXMudG90YWxQYWdlcyA+IDApIHtcclxuICAgICAgdGhpcy5nb1RvUGFnZSh0aGlzLnRvdGFsUGFnZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlUGFnZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYWdlczogKG51bWJlciB8IHN0cmluZylbXSA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPD0gdGhpcy5tYXhWaXNpYmxlUGFnZXMgKyAyKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMudG90YWxQYWdlczsgaSsrKSB7XHJcbiAgICAgICAgcGFnZXMucHVzaChpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFnZXMucHVzaCgxKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlIDw9IHRoaXMubWF4VmlzaWJsZVBhZ2VzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPD0gdGhpcy5tYXhWaXNpYmxlUGFnZXMgKyAxOyBpKyspIHtcclxuICAgICAgICAgIHBhZ2VzLnB1c2goaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhZ2VzLnB1c2goJy4uLicpO1xyXG4gICAgICAgIHBhZ2VzLnB1c2godGhpcy50b3RhbFBhZ2VzKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlID49IHRoaXMudG90YWxQYWdlcyAtIHRoaXMubWF4VmlzaWJsZVBhZ2VzICsgMSkge1xyXG4gICAgICAgIHBhZ2VzLnB1c2goJy4uLicpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnRvdGFsUGFnZXMgLSB0aGlzLm1heFZpc2libGVQYWdlczsgaSA8PSB0aGlzLnRvdGFsUGFnZXM7IGkrKykge1xyXG4gICAgICAgICAgcGFnZXMucHVzaChpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFnZXMucHVzaCgnLi4uJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuY3VycmVudFBhZ2UgLSAxOyBpIDw9IHRoaXMuY3VycmVudFBhZ2UgKyAxOyBpKyspIHtcclxuICAgICAgICAgIHBhZ2VzLnB1c2goaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhZ2VzLnB1c2goJy4uLicpO1xyXG4gICAgICAgIHBhZ2VzLnB1c2godGhpcy50b3RhbFBhZ2VzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlzaWJsZVBhZ2VzID0gcGFnZXM7XHJcbiAgfVxyXG5cclxuICBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHBhZ2UgPCAxIHx8IHBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMgfHwgcGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XHJcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVQYWdlcygpO1xyXG4gICAgdGhpcy5lbWl0UGFnZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgZ29Ub1ByZXZpb3VzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FuR29QcmV2aW91cykge1xyXG4gICAgICB0aGlzLmdvVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UgLSAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9OZXh0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FuR29OZXh0KSB7XHJcbiAgICAgIHRoaXMuZ29Ub1BhZ2UodGhpcy5jdXJyZW50UGFnZSArIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShuZXdTaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IG5ld1NpemU7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMuY2FsY3VsYXRlVG90YWxQYWdlcygpO1xyXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUGFnZXMoKTtcclxuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMucGFnZVNpemVDaGFuZ2UuZW1pdChuZXdTaXplKTtcclxuICAgIHRoaXMuZW1pdFBhZ2VDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZURyb3Bkb3duKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlRHJvcGRvd24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRQYWdlQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgc3RhcnRJbmRleDogdGhpcy5zdGFydEluZGV4LFxyXG4gICAgICBlbmRJbmRleDogdGhpcy5lbmRJbmRleFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcclxuICB9XHJcblxyXG4gIHRyYWNrQnlQYWdlKGluZGV4OiBudW1iZXIsIHBhZ2U6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB8IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHBhZ2UgPT09ICdudW1iZXInID8gcGFnZSA6IGBlbGxpcHNpcy0ke2luZGV4fWA7XHJcbiAgfVxyXG59IiwiPG5hdlxyXG4gIFtjbGFzc109XCJjb250YWluZXJDbGFzc2VzLmpvaW4oJyAnKVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxyXG4gIHJvbGU9XCJuYXZpZ2F0aW9uXCJcclxuPlxyXG4gIDwhLS0gVjQ6IENlbnRlcmVkIHZhcmlhbnQgLSBwcmV2IGJ1dHRvbiBvbiBsZWZ0IC0tPlxyXG4gIDxidXR0b25cclxuICAgICpuZ0lmPVwidmFyaWFudCA9PT0gJ2NlbnRlcmVkJ1wiXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIGNsYXNzPVwicGVjYi1wYWdpbmF0aW9uX19uYXYtYnV0dG9uIHBlY2ItcGFnaW5hdGlvbl9fbmF2LWJ1dHRvbi0tcHJldiBwZWNiLXBhZ2luYXRpb25fX25hdi1idXR0b24tLWJvcmRlcmVkXCJcclxuICAgIFtkaXNhYmxlZF09XCIhY2FuR29QcmV2aW91c1wiXHJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidHbyB0byBwcmV2aW91cyBwYWdlJ1wiXHJcbiAgICAoY2xpY2spPVwiZ29Ub1ByZXZpb3VzKClcIlxyXG4gID5cclxuICAgIDxzdmdcclxuICAgICAgd2lkdGg9XCIxNlwiXHJcbiAgICAgIGhlaWdodD1cIjE2XCJcclxuICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICA+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZD1cIk0xMCAxMkw2IDhMMTAgNFwiXHJcbiAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcclxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgLz5cclxuICAgIDwvc3ZnPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8IS0tIEluZm8gc2VjdGlvbiAoVjEsIFYyLCBWMywgVjQpIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJwZWNiLXBhZ2luYXRpb25fX2luZm9cIiAqbmdJZj1cInNob3dJdGVtc0luZm8gfHwgc2hvd1BhZ2VTaXplXCI+XHJcbiAgICA8c3BhbiAqbmdJZj1cInNob3dJdGVtc0luZm9cIiBjbGFzcz1cInBlY2ItcGFnaW5hdGlvbl9faXRlbXMtdGV4dFwiPlxyXG4gICAgICB7eyBpdGVtc0luZm9UZXh0IH19XHJcbiAgICA8L3NwYW4+XHJcblxyXG4gICAgPCEtLSBQYWdlIHNpemUgZHJvcGRvd24gKFYxIG9ubHkpIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dQYWdlU2l6ZVwiIGNsYXNzPVwicGVjYi1wYWdpbmF0aW9uX19wYWdlLXNpemVcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJwZWNiLXBhZ2luYXRpb25fX3BhZ2Utc2l6ZS1sYWJlbFwiPkl0ZW1zIHBlciBwYWdlOjwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBlY2ItcGFnaW5hdGlvbl9fZHJvcGRvd25cIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzPVwicGVjYi1wYWdpbmF0aW9uX19kcm9wZG93bi10cmlnZ2VyXCJcclxuICAgICAgICAgIFtjbGFzcy5wZWNiLXBhZ2luYXRpb25fX2Ryb3Bkb3duLXRyaWdnZXItLW9wZW5dPVwiaXNEcm9wZG93bk9wZW5cIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNEcm9wZG93bk9wZW5cIlxyXG4gICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuPnt7IHBhZ2VTaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICBjbGFzcz1cInBlY2ItcGFnaW5hdGlvbl9fZHJvcGRvd24taWNvblwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5wZWNiLXBhZ2luYXRpb25fX2Ryb3Bkb3duLWljb24tLW9wZW5dPVwiaXNEcm9wZG93bk9wZW5cIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjE2XCJcclxuICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTQgNkw4IDEwTDEyIDZcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8dWxcclxuICAgICAgICAgICpuZ0lmPVwiaXNEcm9wZG93bk9wZW5cIlxyXG4gICAgICAgICAgY2xhc3M9XCJwZWNiLXBhZ2luYXRpb25fX2Ryb3Bkb3duLW1lbnVcIlxyXG4gICAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VsZWN0IGl0ZW1zIHBlciBwYWdlJ1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcGFnZVNpemVPcHRpb25zXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJwZWNiLXBhZ2luYXRpb25fX2Ryb3Bkb3duLWl0ZW1cIlxyXG4gICAgICAgICAgICBbY2xhc3MucGVjYi1wYWdpbmF0aW9uX19kcm9wZG93bi1pdGVtLS1zZWxlY3RlZF09XCJvcHRpb24gPT09IHBhZ2VTaXplXCJcclxuICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwib3B0aW9uID09PSBwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvblBhZ2VTaXplQ2hhbmdlKG9wdGlvbilcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBvcHRpb24gfX1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBDb250cm9scyBzZWN0aW9uIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJwZWNiLXBhZ2luYXRpb25fX2NvbnRyb2xzXCI+XHJcbiAgICA8IS0tIFByZXZpb3VzIGJ1dHRvbiAoVjEsIFYyLCBWMykgLS0+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICpuZ0lmPVwidmFyaWFudCAhPT0gJ2NlbnRlcmVkJ1wiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cInBlY2ItcGFnaW5hdGlvbl9fbmF2LWJ1dHRvbiBwZWNiLXBhZ2luYXRpb25fX25hdi1idXR0b24tLXByZXZcIlxyXG4gICAgICBbY2xhc3MucGVjYi1wYWdpbmF0aW9uX19uYXYtYnV0dG9uLS1ib3JkZXJlZF09XCJ2YXJpYW50ID09PSAnbWluaW1hbCdcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWNhbkdvUHJldmlvdXNcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidHbyB0byBwcmV2aW91cyBwYWdlJ1wiXHJcbiAgICAgIChjbGljayk9XCJnb1RvUHJldmlvdXMoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxzdmdcclxuICAgICAgICB3aWR0aD1cIjE2XCJcclxuICAgICAgICBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNMTAgMTJMNiA4TDEwIDRcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcclxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gUGFnZSBudW1iZXJzIChWMSwgVjIpIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dQYWdlc1wiIGNsYXNzPVwicGVjYi1wYWdpbmF0aW9uX19wYWdlc1wiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJQYWdlIG5hdmlnYXRpb25cIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFnZSBvZiB2aXNpYmxlUGFnZXM7IHRyYWNrQnk6IHRyYWNrQnlQYWdlXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJpc051bWJlcihwYWdlKVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzPVwicGVjYi1wYWdpbmF0aW9uX19wYWdlLWJ1dHRvblwiXHJcbiAgICAgICAgICBbY2xhc3MucGVjYi1wYWdpbmF0aW9uX19wYWdlLWJ1dHRvbi0tYWN0aXZlXT1cInBhZ2UgPT09IGN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidQYWdlICcgKyBwYWdlXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJwYWdlID09PSBjdXJyZW50UGFnZSA/ICdwYWdlJyA6IG51bGxcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKCtwYWdlKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgcGFnZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAqbmdJZj1cIiFpc051bWJlcihwYWdlKVwiXHJcbiAgICAgICAgICBjbGFzcz1cInBlY2ItcGFnaW5hdGlvbl9fZWxsaXBzaXNcIlxyXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBwYWdlIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gTmV4dCBidXR0b24gKFYxLCBWMiwgVjMpIC0tPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cInZhcmlhbnQgIT09ICdjZW50ZXJlZCdcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgY2xhc3M9XCJwZWNiLXBhZ2luYXRpb25fX25hdi1idXR0b24gcGVjYi1wYWdpbmF0aW9uX19uYXYtYnV0dG9uLS1uZXh0XCJcclxuICAgICAgW2NsYXNzLnBlY2ItcGFnaW5hdGlvbl9fbmF2LWJ1dHRvbi0tYm9yZGVyZWRdPVwidmFyaWFudCA9PT0gJ21pbmltYWwnXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFjYW5Hb05leHRcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidHbyB0byBuZXh0IHBhZ2UnXCJcclxuICAgICAgKGNsaWNrKT1cImdvVG9OZXh0KClcIlxyXG4gICAgPlxyXG4gICAgICA8c3ZnXHJcbiAgICAgICAgd2lkdGg9XCIxNlwiXHJcbiAgICAgICAgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTYgNEwxMCA4TDYgMTJcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcclxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFY0OiBDZW50ZXJlZCB2YXJpYW50IC0gbmV4dCBidXR0b24gb24gcmlnaHQgLS0+XHJcbiAgPGJ1dHRvblxyXG4gICAgKm5nSWY9XCJ2YXJpYW50ID09PSAnY2VudGVyZWQnXCJcclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgY2xhc3M9XCJwZWNiLXBhZ2luYXRpb25fX25hdi1idXR0b24gcGVjYi1wYWdpbmF0aW9uX19uYXYtYnV0dG9uLS1uZXh0IHBlY2ItcGFnaW5hdGlvbl9fbmF2LWJ1dHRvbi0tYm9yZGVyZWRcIlxyXG4gICAgW2Rpc2FibGVkXT1cIiFjYW5Hb05leHRcIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInR28gdG8gbmV4dCBwYWdlJ1wiXHJcbiAgICAoY2xpY2spPVwiZ29Ub05leHQoKVwiXHJcbiAgPlxyXG4gICAgPHN2Z1xyXG4gICAgICB3aWR0aD1cIjE2XCJcclxuICAgICAgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgID5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBkPVwiTTYgNEwxMCA4TDYgMTJcIlxyXG4gICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgIC8+XHJcbiAgICA8L3N2Zz5cclxuICA8L2J1dHRvbj5cclxuPC9uYXY+XHJcbiJdfQ==
@@ -1,147 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, forwardRef } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { generateUniqueId } from '../../shared/utils/dom.utils';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- /**
8
- * A professional radio button component with label and description support.
9
- * Fully accessible with WCAG 2.1 AA compliance and reactive forms support.
10
- *
11
- * @example
12
- * ```html
13
- * <!-- Default variant with inner dot -->
14
- * <pecb-radio
15
- * label="Option 1"
16
- * description="This is a description"
17
- * [(ngModel)]="selectedValue"
18
- * value="option1"
19
- * ></pecb-radio>
20
- *
21
- * <!-- Filled variant -->
22
- * <pecb-radio
23
- * label="Option 1"
24
- * variant="filled"
25
- * [(ngModel)]="selectedValue"
26
- * value="option1"
27
- * ></pecb-radio>
28
- * ```
29
- *
30
- * @publicApi
31
- */
32
- export class RadioComponent {
33
- constructor(cdr) {
34
- this.cdr = cdr;
35
- /**
36
- * Unique ID for the radio element
37
- */
38
- this.id = generateUniqueId('radio');
39
- /**
40
- * Visual variant of the radio button
41
- */
42
- this.variant = 'dot';
43
- /**
44
- * Position of the label relative to the radio control.
45
- * 'right' (default): [radio] Title Description
46
- * 'left': Title Description [radio]
47
- */
48
- this.labelPosition = 'right';
49
- /**
50
- * Whether the radio is disabled
51
- */
52
- this.disabled = false;
53
- /**
54
- * Event emitted when selection changes
55
- */
56
- this.selectionChange = new EventEmitter();
57
- // Internal state
58
- this.checked = false;
59
- // ControlValueAccessor
60
- this.onChange = () => { };
61
- this.onTouched = () => { };
62
- }
63
- /**
64
- * Get CSS classes for the radio wrapper
65
- */
66
- get wrapperClasses() {
67
- return [
68
- 'pecb-radio',
69
- `pecb-radio--${this.variant}`,
70
- this.disabled ? 'pecb-radio--disabled' : '',
71
- this.checked ? 'pecb-radio--checked' : '',
72
- this.labelPosition === 'left' ? 'pecb-radio--label-left' : ''
73
- ].filter(Boolean);
74
- }
75
- /**
76
- * Handle radio selection
77
- */
78
- onRadioChange(event) {
79
- if (this.disabled)
80
- return;
81
- const checked = event.target.checked;
82
- if (checked) {
83
- this.checked = true;
84
- this.onChange(this.value);
85
- this.selectionChange.emit(this.value);
86
- this.cdr.markForCheck();
87
- }
88
- }
89
- /**
90
- * Handle blur event
91
- */
92
- onBlur() {
93
- this.onTouched();
94
- }
95
- // ControlValueAccessor implementation
96
- writeValue(value) {
97
- this.checked = value === this.value;
98
- this.cdr.markForCheck();
99
- }
100
- registerOnChange(fn) {
101
- this.onChange = fn;
102
- }
103
- registerOnTouched(fn) {
104
- this.onTouched = fn;
105
- }
106
- setDisabledState(isDisabled) {
107
- this.disabled = isDisabled;
108
- this.cdr.markForCheck();
109
- }
110
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RadioComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
111
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RadioComponent, isStandalone: true, selector: "pecb-radio", inputs: { id: "id", name: "name", value: "value", variant: "variant", label: "label", description: "description", labelPosition: "labelPosition", disabled: "disabled" }, outputs: { selectionChange: "selectionChange" }, providers: [
112
- {
113
- provide: NG_VALUE_ACCESSOR,
114
- useExisting: forwardRef(() => RadioComponent),
115
- multi: true
116
- }
117
- ], ngImport: i0, template: "<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-radio__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"radio\"\r\n class=\"pecb-radio__input\"\r\n [name]=\"name\"\r\n [value]=\"value\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-describedby]=\"description ? id + '-description' : null\"\r\n (change)=\"onRadioChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-radio__content\">\r\n <span *ngIf=\"label\" class=\"pecb-radio__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-radio__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-radio__control\"></span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-radio__content\">\r\n <span *ngIf=\"label\" class=\"pecb-radio__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-radio__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n", styles: [".pecb-radio{position:relative;display:inline-block}.pecb-radio__label{display:flex;align-items:flex-start;cursor:pointer;-webkit-user-select:none;user-select:none;gap:12px}.pecb-radio__input{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}.pecb-radio__control{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px;margin-top:2px;border:2px solid #c2c2c2;border-radius:50%;background-color:#fff;transition-property:border-color,background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-radio__control:after{content:\"\";position:absolute;width:10px;height:10px;border-radius:50%;background-color:#a11e29;opacity:0;transform:scale(0);transition-property:opacity,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-radio__content{display:flex;flex-direction:column;gap:6px;flex:1}.pecb-radio__text{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;font-weight:500;color:#313131;line-height:1.5}.pecb-radio__description{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:12px;font-weight:400;color:#919191;line-height:1.5}.pecb-radio:not(.pecb-radio--disabled) .pecb-radio__label:hover .pecb-radio__control{border-color:#a11e29}.pecb-radio__input:focus-visible+.pecb-radio__control{outline:2px solid #a11e29;outline-offset:2px}.pecb-radio--checked .pecb-radio__control{border-color:#a11e29}.pecb-radio--checked .pecb-radio__control:after{opacity:1;transform:scale(1)}.pecb-radio--filled .pecb-radio__control:after{content:\"\";position:absolute;left:50%;top:50%;width:4px;height:8px;border:solid transparent;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg) scale(0);border-radius:0;background-color:transparent;transition-property:opacity,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-radio--filled.pecb-radio--checked .pecb-radio__control{background-color:#212427;border-color:#212427}.pecb-radio--filled.pecb-radio--checked .pecb-radio__control:after{border-color:#fff;opacity:1;transform:translate(-50%,-60%) rotate(45deg) scale(1)}.pecb-radio--filled.pecb-radio--disabled.pecb-radio--checked .pecb-radio__control{background-color:#c2c2c2;border-color:#c2c2c2}.pecb-radio--filled.pecb-radio--disabled.pecb-radio--checked .pecb-radio__control:after{border-color:#fff}.pecb-radio--disabled .pecb-radio__label{cursor:not-allowed}.pecb-radio--disabled .pecb-radio__control{border-color:#ececec;background-color:#f4f4f4}.pecb-radio--disabled .pecb-radio__control:after{background-color:#c2c2c2}.pecb-radio--disabled .pecb-radio__text{color:#c2c2c2}.pecb-radio--disabled .pecb-radio__description{color:#ececec}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
118
- }
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RadioComponent, decorators: [{
120
- type: Component,
121
- args: [{ selector: 'pecb-radio', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
122
- {
123
- provide: NG_VALUE_ACCESSOR,
124
- useExisting: forwardRef(() => RadioComponent),
125
- multi: true
126
- }
127
- ], template: "<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-radio__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"radio\"\r\n class=\"pecb-radio__input\"\r\n [name]=\"name\"\r\n [value]=\"value\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-describedby]=\"description ? id + '-description' : null\"\r\n (change)=\"onRadioChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-radio__content\">\r\n <span *ngIf=\"label\" class=\"pecb-radio__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-radio__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-radio__control\"></span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-radio__content\">\r\n <span *ngIf=\"label\" class=\"pecb-radio__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-radio__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n", styles: [".pecb-radio{position:relative;display:inline-block}.pecb-radio__label{display:flex;align-items:flex-start;cursor:pointer;-webkit-user-select:none;user-select:none;gap:12px}.pecb-radio__input{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}.pecb-radio__control{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px;margin-top:2px;border:2px solid #c2c2c2;border-radius:50%;background-color:#fff;transition-property:border-color,background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-radio__control:after{content:\"\";position:absolute;width:10px;height:10px;border-radius:50%;background-color:#a11e29;opacity:0;transform:scale(0);transition-property:opacity,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-radio__content{display:flex;flex-direction:column;gap:6px;flex:1}.pecb-radio__text{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;font-weight:500;color:#313131;line-height:1.5}.pecb-radio__description{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:12px;font-weight:400;color:#919191;line-height:1.5}.pecb-radio:not(.pecb-radio--disabled) .pecb-radio__label:hover .pecb-radio__control{border-color:#a11e29}.pecb-radio__input:focus-visible+.pecb-radio__control{outline:2px solid #a11e29;outline-offset:2px}.pecb-radio--checked .pecb-radio__control{border-color:#a11e29}.pecb-radio--checked .pecb-radio__control:after{opacity:1;transform:scale(1)}.pecb-radio--filled .pecb-radio__control:after{content:\"\";position:absolute;left:50%;top:50%;width:4px;height:8px;border:solid transparent;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg) scale(0);border-radius:0;background-color:transparent;transition-property:opacity,transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-radio--filled.pecb-radio--checked .pecb-radio__control{background-color:#212427;border-color:#212427}.pecb-radio--filled.pecb-radio--checked .pecb-radio__control:after{border-color:#fff;opacity:1;transform:translate(-50%,-60%) rotate(45deg) scale(1)}.pecb-radio--filled.pecb-radio--disabled.pecb-radio--checked .pecb-radio__control{background-color:#c2c2c2;border-color:#c2c2c2}.pecb-radio--filled.pecb-radio--disabled.pecb-radio--checked .pecb-radio__control:after{border-color:#fff}.pecb-radio--disabled .pecb-radio__label{cursor:not-allowed}.pecb-radio--disabled .pecb-radio__control{border-color:#ececec;background-color:#f4f4f4}.pecb-radio--disabled .pecb-radio__control:after{background-color:#c2c2c2}.pecb-radio--disabled .pecb-radio__text{color:#c2c2c2}.pecb-radio--disabled .pecb-radio__description{color:#ececec}\n"] }]
128
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { id: [{
129
- type: Input
130
- }], name: [{
131
- type: Input
132
- }], value: [{
133
- type: Input
134
- }], variant: [{
135
- type: Input
136
- }], label: [{
137
- type: Input
138
- }], description: [{
139
- type: Input
140
- }], labelPosition: [{
141
- type: Input
142
- }], disabled: [{
143
- type: Input
144
- }], selectionChange: [{
145
- type: Output
146
- }] } });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsVUFBVSxFQUVYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQUtoRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBZ0JILE1BQU0sT0FBTyxjQUFjO0lBdUR6QixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXREMUM7O1dBRUc7UUFDTSxPQUFFLEdBQVcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFZaEQ7O1dBRUc7UUFDTSxZQUFPLEdBQWlCLEtBQUssQ0FBQztRQVl2Qzs7OztXQUlHO1FBQ00sa0JBQWEsR0FBdUIsT0FBTyxDQUFDO1FBRXJEOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQjs7V0FFRztRQUNPLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUV4RCxpQkFBaUI7UUFDakIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQix1QkFBdUI7UUFDZixhQUFRLEdBQTZCLEdBQUcsRUFBRSxHQUFF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ICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBmb3J3YXJkUmVmLFxyXG4gIENoYW5nZURldGVjdG9yUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9kb20udXRpbHMnO1xyXG5cclxuZXhwb3J0IHR5cGUgUmFkaW9WYXJpYW50ID0gJ2RvdCcgfCAnZmlsbGVkJztcclxuZXhwb3J0IHR5cGUgUmFkaW9MYWJlbFBvc2l0aW9uID0gJ3JpZ2h0JyB8ICdsZWZ0JztcclxuXHJcbi8qKlxyXG4gKiBBIHByb2Zlc3Npb25hbCByYWRpbyBidXR0b24gY29tcG9uZW50IHdpdGggbGFiZWwgYW5kIGRlc2NyaXB0aW9uIHN1cHBvcnQuXHJcbiAqIEZ1bGx5IGFjY2Vzc2libGUgd2l0aCBXQ0FHIDIuMSBBQSBjb21wbGlhbmNlIGFuZCByZWFjdGl2ZSBmb3JtcyBzdXBwb3J0LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDwhLS0gRGVmYXVsdCB2YXJpYW50IHdpdGggaW5uZXIgZG90IC0tPlxyXG4gKiA8cGVjYi1yYWRpb1xyXG4gKiAgIGxhYmVsPVwiT3B0aW9uIDFcIlxyXG4gKiAgIGRlc2NyaXB0aW9uPVwiVGhpcyBpcyBhIGRlc2NyaXB0aW9uXCJcclxuICogICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVmFsdWVcIlxyXG4gKiAgIHZhbHVlPVwib3B0aW9uMVwiXHJcbiAqID48L3BlY2ItcmFkaW8+XHJcbiAqXHJcbiAqIDwhLS0gRmlsbGVkIHZhcmlhbnQgLS0+XHJcbiAqIDxwZWNiLXJhZGlvXHJcbiAqICAgbGFiZWw9XCJPcHRpb24gMVwiXHJcbiAqICAgdmFyaWFudD1cImZpbGxlZFwiXHJcbiAqICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZhbHVlXCJcclxuICogICB2YWx1ZT1cIm9wdGlvbjFcIlxyXG4gKiA+PC9wZWNiLXJhZGlvPlxyXG4gKiBgYGBcclxuICpcclxuICogQHB1YmxpY0FwaVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwZWNiLXJhZGlvJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYWRpby5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmFkaW8uY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhZGlvQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYWRpb0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAvKipcclxuICAgKiBVbmlxdWUgSUQgZm9yIHRoZSByYWRpbyBlbGVtZW50XHJcbiAgICovXHJcbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9IGdlbmVyYXRlVW5pcXVlSWQoJ3JhZGlvJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hbWUgYXR0cmlidXRlIGZvciB0aGUgcmFkaW8gZ3JvdXBcclxuICAgKi9cclxuICBASW5wdXQoKSBuYW1lPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBWYWx1ZSBvZiB0aGlzIHJhZGlvIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHZhbHVlOiB1bmtub3duO1xyXG5cclxuICAvKipcclxuICAgKiBWaXN1YWwgdmFyaWFudCBvZiB0aGUgcmFkaW8gYnV0dG9uXHJcbiAgICovXHJcbiAgQElucHV0KCkgdmFyaWFudDogUmFkaW9WYXJpYW50ID0gJ2RvdCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIExhYmVsIHRleHQgdG8gZGlzcGxheVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBEZXNjcmlwdGlvbiB0ZXh0IHRvIGRpc3BsYXkgYmVsb3cgbGFiZWxcclxuICAgKi9cclxuICBASW5wdXQoKSBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogUG9zaXRpb24gb2YgdGhlIGxhYmVsIHJlbGF0aXZlIHRvIHRoZSByYWRpbyBjb250cm9sLlxyXG4gICAqICdyaWdodCcgKGRlZmF1bHQpOiBbcmFkaW9dIFRpdGxlIERlc2NyaXB0aW9uXHJcbiAgICogJ2xlZnQnOiBUaXRsZSBEZXNjcmlwdGlvbiBbcmFkaW9dXHJcbiAgICovXHJcbiAgQElucHV0KCkgbGFiZWxQb3NpdGlvbjogUmFkaW9MYWJlbFBvc2l0aW9uID0gJ3JpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgcmFkaW8gaXMgZGlzYWJsZWRcclxuICAgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gc2VsZWN0aW9uIGNoYW5nZXNcclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xyXG5cclxuICAvLyBJbnRlcm5hbCBzdGF0ZVxyXG4gIGNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBDU1MgY2xhc3NlcyBmb3IgdGhlIHJhZGlvIHdyYXBwZXJcclxuICAgKi9cclxuICBnZXQgd3JhcHBlckNsYXNzZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ3BlY2ItcmFkaW8nLFxyXG4gICAgICBgcGVjYi1yYWRpby0tJHt0aGlzLnZhcmlhbnR9YCxcclxuICAgICAgdGhpcy5kaXNhYmxlZCA/ICdwZWNiLXJhZGlvLS1kaXNhYmxlZCcgOiAnJyxcclxuICAgICAgdGhpcy5jaGVja2VkID8gJ3BlY2ItcmFkaW8tLWNoZWNrZWQnIDogJycsXHJcbiAgICAgIHRoaXMubGFiZWxQb3NpdGlvbiA9PT0gJ2xlZnQnID8gJ3BlY2ItcmFkaW8tLWxhYmVsLWxlZnQnIDogJydcclxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHJhZGlvIHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIG9uUmFkaW9DaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBibHVyIGV2ZW50XHJcbiAgICovXHJcbiAgb25CbHVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xyXG4gICAgdGhpcy5jaGVja2VkID0gdmFsdWUgPT09IHRoaXMudmFsdWU7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2NsYXNzXT1cIndyYXBwZXJDbGFzc2VzLmpvaW4oJyAnKVwiPlxyXG4gIDxsYWJlbCBbYXR0ci5mb3JdPVwiaWRcIiBjbGFzcz1cInBlY2ItcmFkaW9fX2xhYmVsXCI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgW2lkXT1cImlkXCJcclxuICAgICAgdHlwZT1cInJhZGlvXCJcclxuICAgICAgY2xhc3M9XCJwZWNiLXJhZGlvX19pbnB1dFwiXHJcbiAgICAgIFtuYW1lXT1cIm5hbWVcIlxyXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICBbY2hlY2tlZF09XCJjaGVja2VkXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZGVzY3JpcHRpb24gPyBpZCArICctZGVzY3JpcHRpb24nIDogbnVsbFwiXHJcbiAgICAgIChjaGFuZ2UpPVwib25SYWRpb0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgLz5cclxuICAgIDxzcGFuICpuZ0lmPVwibGFiZWxQb3NpdGlvbiA9PT0gJ2xlZnQnICYmIChsYWJlbCB8fCBkZXNjcmlwdGlvbilcIiBjbGFzcz1cInBlY2ItcmFkaW9fX2NvbnRlbnRcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwicGVjYi1yYWRpb19fdGV4dFwiPnt7IGxhYmVsIH19PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cImRlc2NyaXB0aW9uXCIgW2lkXT1cImlkICsgJy1kZXNjcmlwdGlvbidcIiBjbGFzcz1cInBlY2ItcmFkaW9fX2Rlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cInBlY2ItcmFkaW9fX2NvbnRyb2xcIj48L3NwYW4+XHJcbiAgICA8c3BhbiAqbmdJZj1cImxhYmVsUG9zaXRpb24gPT09ICdyaWdodCcgJiYgKGxhYmVsIHx8IGRlc2NyaXB0aW9uKVwiIGNsYXNzPVwicGVjYi1yYWRpb19fY29udGVudFwiPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cImxhYmVsXCIgY2xhc3M9XCJwZWNiLXJhZGlvX190ZXh0XCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiIGNsYXNzPVwicGVjYi1yYWRpb19fZGVzY3JpcHRpb25cIj57eyBkZXNjcmlwdGlvbiB9fTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2xhYmVsPlxyXG48L2Rpdj5cclxuIl19