@pecb-ui/components 1.1.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +556 -556
- package/fesm2022/pecb-ui-components.mjs +998 -1907
- package/fesm2022/pecb-ui-components.mjs.map +1 -1
- package/index.d.ts +2439 -3
- package/package.json +6 -8
- package/esm2022/lib/components/button/button.component.mjs +0 -171
- package/esm2022/lib/components/card/card.component.mjs +0 -182
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -126
- package/esm2022/lib/components/datepicker/datepicker.component.mjs +0 -349
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -329
- package/esm2022/lib/components/input/input.component.mjs +0 -321
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -197
- package/esm2022/lib/components/radio/radio.component.mjs +0 -147
- package/esm2022/lib/components/right-modal/right-modal.component.mjs +0 -234
- package/esm2022/lib/components/sidebar/sidebar.component.mjs +0 -155
- package/esm2022/lib/components/status/status.component.mjs +0 -50
- package/esm2022/lib/components/tab/tab.component.mjs +0 -151
- package/esm2022/lib/components/table/table.component.mjs +0 -503
- package/esm2022/lib/components/toggle/toggle.component.mjs +0 -126
- package/esm2022/lib/pecb-components.module.mjs +0 -118
- package/esm2022/lib/services/loading.service.mjs +0 -182
- package/esm2022/lib/services/notification.service.mjs +0 -144
- package/esm2022/lib/services/theme.service.mjs +0 -232
- package/esm2022/lib/shared/interfaces/component.interfaces.mjs +0 -2
- package/esm2022/lib/shared/types/common.types.mjs +0 -6
- package/esm2022/lib/shared/utils/accessibility.utils.mjs +0 -223
- package/esm2022/lib/shared/utils/dom.utils.mjs +0 -240
- package/esm2022/lib/shared/utils/error.utils.mjs +0 -277
- package/esm2022/lib/shared/utils/string.utils.mjs +0 -204
- package/esm2022/pecb-ui-components.mjs +0 -5
- package/esm2022/public-api.mjs +0 -53
- package/lib/components/button/button.component.d.ts +0 -130
- package/lib/components/card/card.component.d.ts +0 -140
- package/lib/components/checkbox/checkbox.component.d.ts +0 -74
- package/lib/components/datepicker/datepicker.component.d.ts +0 -155
- package/lib/components/dropdown/dropdown.component.d.ts +0 -144
- package/lib/components/input/input.component.d.ts +0 -215
- package/lib/components/pagination/pagination.component.d.ts +0 -53
- package/lib/components/radio/radio.component.d.ts +0 -93
- package/lib/components/right-modal/right-modal.component.d.ts +0 -137
- package/lib/components/sidebar/sidebar.component.d.ts +0 -97
- package/lib/components/status/status.component.d.ts +0 -19
- package/lib/components/tab/tab.component.d.ts +0 -102
- package/lib/components/table/table.component.d.ts +0 -403
- package/lib/components/toggle/toggle.component.d.ts +0 -74
- package/lib/pecb-components.module.d.ts +0 -37
- package/lib/services/loading.service.d.ts +0 -129
- package/lib/services/notification.service.d.ts +0 -136
- package/lib/services/theme.service.d.ts +0 -142
- package/lib/shared/interfaces/component.interfaces.d.ts +0 -283
- package/lib/shared/types/common.types.d.ts +0 -86
- package/lib/shared/utils/accessibility.utils.d.ts +0 -167
- package/lib/shared/utils/dom.utils.d.ts +0 -108
- package/lib/shared/utils/error.utils.d.ts +0 -191
- package/lib/shared/utils/string.utils.d.ts +0 -144
- package/public-api.d.ts +0 -24
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { generateUniqueId } from '../../shared/utils/dom.utils';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
/**
|
|
7
|
-
* A professional tab component with multiple styles and sizes.
|
|
8
|
-
* Fully accessible with WCAG 2.1 AA compliance.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```html
|
|
12
|
-
* <pecb-tab
|
|
13
|
-
* label="Tab Name"
|
|
14
|
-
* [active]="true"
|
|
15
|
-
* style="rounded"
|
|
16
|
-
* size="md"
|
|
17
|
-
* (clicked)="handleClick()"
|
|
18
|
-
* ></pecb-tab>
|
|
19
|
-
*
|
|
20
|
-
* <!-- With badge number and close button -->
|
|
21
|
-
* <pecb-tab
|
|
22
|
-
* label="Tab Name"
|
|
23
|
-
* [icon]="10"
|
|
24
|
-
* [closable]="true"
|
|
25
|
-
* [active]="true"
|
|
26
|
-
* (closed)="handleClose()"
|
|
27
|
-
* ></pecb-tab>
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* @publicApi
|
|
31
|
-
*/
|
|
32
|
-
export class TabComponent {
|
|
33
|
-
constructor() {
|
|
34
|
-
/**
|
|
35
|
-
* Unique ID for the tab element
|
|
36
|
-
*/
|
|
37
|
-
this.id = generateUniqueId('tab');
|
|
38
|
-
/**
|
|
39
|
-
* The visual style of the tab
|
|
40
|
-
*/
|
|
41
|
-
this.style = 'rounded';
|
|
42
|
-
/**
|
|
43
|
-
* The size of the tab
|
|
44
|
-
*/
|
|
45
|
-
this.size = 'md';
|
|
46
|
-
/**
|
|
47
|
-
* Label text to display
|
|
48
|
-
*/
|
|
49
|
-
this.label = 'Tab Name';
|
|
50
|
-
/**
|
|
51
|
-
* Whether the tab is in active state
|
|
52
|
-
*/
|
|
53
|
-
this.active = false;
|
|
54
|
-
/**
|
|
55
|
-
* Whether the tab is disabled
|
|
56
|
-
*/
|
|
57
|
-
this.disabled = false;
|
|
58
|
-
/**
|
|
59
|
-
* Whether to show close button
|
|
60
|
-
*/
|
|
61
|
-
this.closable = true;
|
|
62
|
-
/**
|
|
63
|
-
* Event emitted when the tab is clicked
|
|
64
|
-
*/
|
|
65
|
-
this.clicked = new EventEmitter();
|
|
66
|
-
/**
|
|
67
|
-
* Event emitted when the close button is clicked
|
|
68
|
-
*/
|
|
69
|
-
this.closed = new EventEmitter();
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Get CSS classes for the tab
|
|
73
|
-
*/
|
|
74
|
-
get tabClasses() {
|
|
75
|
-
return [
|
|
76
|
-
'pecb-tab',
|
|
77
|
-
`pecb-tab--${this.style}`,
|
|
78
|
-
`pecb-tab--${this.size}`,
|
|
79
|
-
this.active ? 'pecb-tab--active' : '',
|
|
80
|
-
this.disabled ? 'pecb-tab--disabled' : ''
|
|
81
|
-
].filter(Boolean);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Handle tab click
|
|
85
|
-
*/
|
|
86
|
-
onClick(event) {
|
|
87
|
-
if (!this.disabled) {
|
|
88
|
-
event.stopPropagation();
|
|
89
|
-
this.clicked.emit(this.id);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Handle close button click
|
|
94
|
-
*/
|
|
95
|
-
onClose(event) {
|
|
96
|
-
if (!this.disabled) {
|
|
97
|
-
event.stopPropagation();
|
|
98
|
-
this.closed.emit(this.id);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Handle keyboard events for accessibility
|
|
103
|
-
*/
|
|
104
|
-
onKeyDown(event) {
|
|
105
|
-
if (this.disabled)
|
|
106
|
-
return;
|
|
107
|
-
// Handle Enter/Space for tab selection
|
|
108
|
-
if (event.key === 'Enter' || event.key === ' ') {
|
|
109
|
-
event.preventDefault();
|
|
110
|
-
this.clicked.emit(this.id);
|
|
111
|
-
}
|
|
112
|
-
// Handle Delete/Backspace for close (if closable)
|
|
113
|
-
if (this.closable && (event.key === 'Delete' || event.key === 'Backspace')) {
|
|
114
|
-
event.preventDefault();
|
|
115
|
-
this.closed.emit(this.id);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
119
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TabComponent, isStandalone: true, selector: "pecb-tab", inputs: { id: "id", style: "style", size: "size", label: "label", icon: "icon", active: "active", disabled: "disabled", closable: "closable", ariaLabel: "ariaLabel", ariaControls: "ariaControls", ariaSelected: "ariaSelected" }, outputs: { clicked: "clicked", closed: "closed" }, ngImport: i0, template: "<div\r\n [id]=\"id\"\r\n [class]=\"tabClasses.join(' ')\"\r\n role=\"tab\"\r\n [attr.aria-label]=\"ariaLabel || label\"\r\n [attr.aria-controls]=\"ariaControls\"\r\n [attr.aria-selected]=\"ariaSelected !== undefined ? ariaSelected : active\"\r\n [attr.aria-disabled]=\"disabled\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n>\r\n <span class=\"pecb-tab__content\">\r\n <!-- Label -->\r\n <span class=\"pecb-tab__label\">{{ label }}</span>\r\n\r\n <!-- Icon/Badge -->\r\n <span *ngIf=\"icon\" class=\"pecb-tab__icon\" aria-hidden=\"true\">\r\n {{ icon }}\r\n </span>\r\n\r\n <!-- Close button -->\r\n <button\r\n *ngIf=\"closable\"\r\n type=\"button\"\r\n class=\"pecb-tab__close\"\r\n [attr.aria-label]=\"'Close ' + label\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onClose($event)\"\r\n >\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </span>\r\n</div>\r\n", styles: [".pecb-tab{position:relative;display:inline-flex;align-items:center;justify-content:center;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:400;text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none;background-color:#ececec;color:#616161;border:1px solid transparent;transition-property:background-color,border-color,color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-tab:focus-visible{outline:2px solid #a11e29;outline-offset:2px}.pecb-tab--sm{padding:6px 12px;font-size:12px;gap:6px;border-radius:6px}.pecb-tab--sm .pecb-tab__content{gap:6px}.pecb-tab--sm .pecb-tab__icon{width:14px;height:14px;font-size:12px}.pecb-tab--sm .pecb-tab__close{width:14px;height:14px;font-size:14px;margin-left:6px}.pecb-tab--md{padding:8px 16px;font-size:14px;gap:8px;border-radius:8px}.pecb-tab--md .pecb-tab__content{gap:8px}.pecb-tab--md .pecb-tab__icon{width:16px;height:16px;font-size:14px}.pecb-tab--md .pecb-tab__close{width:16px;height:16px;font-size:16px;margin-left:8px}.pecb-tab--rounded{border-radius:80px;background-color:#ececec;color:#616161;border-color:transparent}.pecb-tab--rounded.pecb-tab--sm{border-radius:80px}.pecb-tab--rounded:hover:not(.pecb-tab--disabled):not(.pecb-tab--active){background-color:#e4e4e4;color:#313131}.pecb-tab--rounded.pecb-tab--active{background-color:#c2c2c2;color:#212427;border-color:transparent;font-weight:500}.pecb-tab--rounded.pecb-tab--active .pecb-tab__icon{background-color:#a11e29;color:#fff}.pecb-tab--rounded.pecb-tab--active .pecb-tab__close{color:#313131}.pecb-tab--rounded.pecb-tab--disabled{background-color:#ececec;color:#919191;cursor:not-allowed}.pecb-tab--rounded.pecb-tab--disabled .pecb-tab__icon{background-color:#919191;color:#fff}.pecb-tab--rounded.pecb-tab--disabled .pecb-tab__close{color:#919191}.pecb-tab--line{border-radius:0;background-color:transparent!important;border:none;border-bottom:2px solid transparent;padding-bottom:8px;color:#616161}.pecb-tab--line.pecb-tab--sm{padding-bottom:6px;border-bottom-width:2px}.pecb-tab--line:hover:not(.pecb-tab--disabled):not(.pecb-tab--active){color:#313131;border-bottom-color:#c2c2c2;background-color:transparent!important}.pecb-tab--line.pecb-tab--active{color:#a11e29;border-bottom-color:#a11e29;font-weight:500;background-color:transparent!important}.pecb-tab--line.pecb-tab--active .pecb-tab__icon{background-color:#a11e29;color:#fff}.pecb-tab--line.pecb-tab--active .pecb-tab__close{color:#313131}.pecb-tab--line.pecb-tab--disabled{color:#919191;cursor:not-allowed;background-color:transparent!important;border-bottom-color:#c2c2c2}.pecb-tab--line.pecb-tab--disabled .pecb-tab__icon{background-color:#919191;color:#fff}.pecb-tab--line.pecb-tab--disabled .pecb-tab__close{color:#919191}.pecb-tab__content{display:inline-flex;align-items:center;justify-content:center;gap:8px}.pecb-tab__icon{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 6px;border-radius:10px;background-color:#a11e29;color:#fff;font-size:12px;font-weight:700;line-height:1;flex-shrink:0;white-space:nowrap}.pecb-tab--disabled .pecb-tab__icon{background-color:#919191;color:#fff}.pecb-tab__label{white-space:nowrap;line-height:1.2}.pecb-tab__close{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;background-color:transparent;color:#313131;cursor:pointer;border-radius:50%;font-size:16px;line-height:1;flex-shrink:0;transition-property:background-color,color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-tab__close:hover:not(:disabled){background-color:#3131311a;color:#313131}.pecb-tab__close:active:not(:disabled){background-color:#31313133}.pecb-tab__close:disabled{cursor:not-allowed;opacity:.5}.pecb-tab__close:focus-visible{outline:2px solid #a11e29;outline-offset:1px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
120
|
-
}
|
|
121
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabComponent, decorators: [{
|
|
122
|
-
type: Component,
|
|
123
|
-
args: [{ selector: 'pecb-tab', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n [id]=\"id\"\r\n [class]=\"tabClasses.join(' ')\"\r\n role=\"tab\"\r\n [attr.aria-label]=\"ariaLabel || label\"\r\n [attr.aria-controls]=\"ariaControls\"\r\n [attr.aria-selected]=\"ariaSelected !== undefined ? ariaSelected : active\"\r\n [attr.aria-disabled]=\"disabled\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n>\r\n <span class=\"pecb-tab__content\">\r\n <!-- Label -->\r\n <span class=\"pecb-tab__label\">{{ label }}</span>\r\n\r\n <!-- Icon/Badge -->\r\n <span *ngIf=\"icon\" class=\"pecb-tab__icon\" aria-hidden=\"true\">\r\n {{ icon }}\r\n </span>\r\n\r\n <!-- Close button -->\r\n <button\r\n *ngIf=\"closable\"\r\n type=\"button\"\r\n class=\"pecb-tab__close\"\r\n [attr.aria-label]=\"'Close ' + label\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onClose($event)\"\r\n >\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </span>\r\n</div>\r\n", styles: [".pecb-tab{position:relative;display:inline-flex;align-items:center;justify-content:center;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:400;text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none;background-color:#ececec;color:#616161;border:1px solid transparent;transition-property:background-color,border-color,color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-tab:focus-visible{outline:2px solid #a11e29;outline-offset:2px}.pecb-tab--sm{padding:6px 12px;font-size:12px;gap:6px;border-radius:6px}.pecb-tab--sm .pecb-tab__content{gap:6px}.pecb-tab--sm .pecb-tab__icon{width:14px;height:14px;font-size:12px}.pecb-tab--sm .pecb-tab__close{width:14px;height:14px;font-size:14px;margin-left:6px}.pecb-tab--md{padding:8px 16px;font-size:14px;gap:8px;border-radius:8px}.pecb-tab--md .pecb-tab__content{gap:8px}.pecb-tab--md .pecb-tab__icon{width:16px;height:16px;font-size:14px}.pecb-tab--md .pecb-tab__close{width:16px;height:16px;font-size:16px;margin-left:8px}.pecb-tab--rounded{border-radius:80px;background-color:#ececec;color:#616161;border-color:transparent}.pecb-tab--rounded.pecb-tab--sm{border-radius:80px}.pecb-tab--rounded:hover:not(.pecb-tab--disabled):not(.pecb-tab--active){background-color:#e4e4e4;color:#313131}.pecb-tab--rounded.pecb-tab--active{background-color:#c2c2c2;color:#212427;border-color:transparent;font-weight:500}.pecb-tab--rounded.pecb-tab--active .pecb-tab__icon{background-color:#a11e29;color:#fff}.pecb-tab--rounded.pecb-tab--active .pecb-tab__close{color:#313131}.pecb-tab--rounded.pecb-tab--disabled{background-color:#ececec;color:#919191;cursor:not-allowed}.pecb-tab--rounded.pecb-tab--disabled .pecb-tab__icon{background-color:#919191;color:#fff}.pecb-tab--rounded.pecb-tab--disabled .pecb-tab__close{color:#919191}.pecb-tab--line{border-radius:0;background-color:transparent!important;border:none;border-bottom:2px solid transparent;padding-bottom:8px;color:#616161}.pecb-tab--line.pecb-tab--sm{padding-bottom:6px;border-bottom-width:2px}.pecb-tab--line:hover:not(.pecb-tab--disabled):not(.pecb-tab--active){color:#313131;border-bottom-color:#c2c2c2;background-color:transparent!important}.pecb-tab--line.pecb-tab--active{color:#a11e29;border-bottom-color:#a11e29;font-weight:500;background-color:transparent!important}.pecb-tab--line.pecb-tab--active .pecb-tab__icon{background-color:#a11e29;color:#fff}.pecb-tab--line.pecb-tab--active .pecb-tab__close{color:#313131}.pecb-tab--line.pecb-tab--disabled{color:#919191;cursor:not-allowed;background-color:transparent!important;border-bottom-color:#c2c2c2}.pecb-tab--line.pecb-tab--disabled .pecb-tab__icon{background-color:#919191;color:#fff}.pecb-tab--line.pecb-tab--disabled .pecb-tab__close{color:#919191}.pecb-tab__content{display:inline-flex;align-items:center;justify-content:center;gap:8px}.pecb-tab__icon{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 6px;border-radius:10px;background-color:#a11e29;color:#fff;font-size:12px;font-weight:700;line-height:1;flex-shrink:0;white-space:nowrap}.pecb-tab--disabled .pecb-tab__icon{background-color:#919191;color:#fff}.pecb-tab__label{white-space:nowrap;line-height:1.2}.pecb-tab__close{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;background-color:transparent;color:#313131;cursor:pointer;border-radius:50%;font-size:16px;line-height:1;flex-shrink:0;transition-property:background-color,color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-tab__close:hover:not(:disabled){background-color:#3131311a;color:#313131}.pecb-tab__close:active:not(:disabled){background-color:#31313133}.pecb-tab__close:disabled{cursor:not-allowed;opacity:.5}.pecb-tab__close:focus-visible{outline:2px solid #a11e29;outline-offset:1px}\n"] }]
|
|
124
|
-
}], propDecorators: { id: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}], style: [{
|
|
127
|
-
type: Input
|
|
128
|
-
}], size: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], label: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], icon: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], active: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], disabled: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], closable: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], ariaLabel: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], ariaControls: [{
|
|
143
|
-
type: Input
|
|
144
|
-
}], ariaSelected: [{
|
|
145
|
-
type: Input
|
|
146
|
-
}], clicked: [{
|
|
147
|
-
type: Output
|
|
148
|
-
}], closed: [{
|
|
149
|
-
type: Output
|
|
150
|
-
}] } });
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYi90YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvdGFiL3RhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBS2hFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBU0gsTUFBTSxPQUFPLFlBQVk7SUFSekI7UUFTRTs7V0FFRztRQUNNLE9BQUUsR0FBVyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5Qzs7V0FFRztRQUNNLFVBQUssR0FBYSxTQUFTLENBQUM7UUFFckM7O1dBRUc7UUFDTSxTQUFJLEdBQVksSUFBSSxDQUFDO1FBRTlCOztXQUVHO1FBQ00sVUFBSyxHQUFHLFVBQVUsQ0FBQztRQU81Qjs7V0FFRztRQUNNLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFeEI7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOztXQUVHO1FBQ00sYUFBUSxHQUFHLElBQUksQ0FBQztRQW1CekI7O1dBRUc7UUFDTyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUvQzs7V0FFRztRQUNPLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBcUQvQztJQW5EQzs7T0FFRztJQUNILElBQUksVUFBVTtRQUNaLE9BQU87WUFDTCxVQUFVO1lBQ1YsYUFBYSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3pCLGFBQWEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUMxQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsS0FBb0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFMUIsdUNBQXVDO1FBQ3ZDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMvQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzNFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7K0dBdEhVLFlBQVk7bUdBQVosWUFBWSwyVkN6Q3pCLGlnQ0FrQ0EsZzRIREVZLFlBQVk7OzRGQUtYLFlBQVk7a0JBUnhCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNOzhCQU10QyxFQUFFO3NCQUFWLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0ksT0FBTztzQkFBaEIsTUFBTTtnQkFLRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9kb20udXRpbHMnO1xyXG5cclxuZXhwb3J0IHR5cGUgVGFiU3R5bGUgPSAncm91bmRlZCcgfCAnbGluZSc7XHJcbmV4cG9ydCB0eXBlIFRhYlNpemUgPSAnc20nIHwgJ21kJztcclxuXHJcbi8qKlxyXG4gKiBBIHByb2Zlc3Npb25hbCB0YWIgY29tcG9uZW50IHdpdGggbXVsdGlwbGUgc3R5bGVzIGFuZCBzaXplcy5cclxuICogRnVsbHkgYWNjZXNzaWJsZSB3aXRoIFdDQUcgMi4xIEFBIGNvbXBsaWFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHBlY2ItdGFiXHJcbiAqICAgbGFiZWw9XCJUYWIgTmFtZVwiXHJcbiAqICAgW2FjdGl2ZV09XCJ0cnVlXCJcclxuICogICBzdHlsZT1cInJvdW5kZWRcIlxyXG4gKiAgIHNpemU9XCJtZFwiXHJcbiAqICAgKGNsaWNrZWQpPVwiaGFuZGxlQ2xpY2soKVwiXHJcbiAqID48L3BlY2ItdGFiPlxyXG4gKlxyXG4gKiA8IS0tIFdpdGggYmFkZ2UgbnVtYmVyIGFuZCBjbG9zZSBidXR0b24gLS0+XHJcbiAqIDxwZWNiLXRhYlxyXG4gKiAgIGxhYmVsPVwiVGFiIE5hbWVcIlxyXG4gKiAgIFtpY29uXT1cIjEwXCJcclxuICogICBbY2xvc2FibGVdPVwidHJ1ZVwiXHJcbiAqICAgW2FjdGl2ZV09XCJ0cnVlXCJcclxuICogICAoY2xvc2VkKT1cImhhbmRsZUNsb3NlKClcIlxyXG4gKiA+PC9wZWNiLXRhYj5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBwdWJsaWNBcGlcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncGVjYi10YWInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFiLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYkNvbXBvbmVudCB7XHJcbiAgLyoqXHJcbiAgICogVW5pcXVlIElEIGZvciB0aGUgdGFiIGVsZW1lbnRcclxuICAgKi9cclxuICBASW5wdXQoKSBpZDogc3RyaW5nID0gZ2VuZXJhdGVVbmlxdWVJZCgndGFiJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIHRhYlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHN0eWxlOiBUYWJTdHlsZSA9ICdyb3VuZGVkJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHNpemUgb2YgdGhlIHRhYlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNpemU6IFRhYlNpemUgPSAnbWQnO1xyXG5cclxuICAvKipcclxuICAgKiBMYWJlbCB0ZXh0IHRvIGRpc3BsYXlcclxuICAgKi9cclxuICBASW5wdXQoKSBsYWJlbCA9ICdUYWIgTmFtZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGJhZGdlIG51bWJlciB0byBkaXNwbGF5IGFmdGVyIHRoZSBsYWJlbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGljb24/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIHRhYiBpcyBpbiBhY3RpdmUgc3RhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBhY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgdGFiIGlzIGRpc2FibGVkXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byBzaG93IGNsb3NlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNsb3NhYmxlID0gdHJ1ZTtcclxuXHJcbiAgLy8gLS0tIEFSSUEgQWNjZXNzaWJpbGl0eSBQcm9wZXJ0aWVzIC0tLVxyXG5cclxuICAvKipcclxuICAgKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgdGFiXHJcbiAgICovXHJcbiAgQElucHV0KCkgYXJpYUxhYmVsPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBJRCBvZiB0aGUgdGFiIHBhbmVsIHRoaXMgdGFiIGNvbnRyb2xzXHJcbiAgICovXHJcbiAgQElucHV0KCkgYXJpYUNvbnRyb2xzPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYiBwYW5lbCBpcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGFyaWFTZWxlY3RlZD86IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdGFiIGlzIGNsaWNrZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGNsb3NlIGJ1dHRvbiBpcyBjbGlja2VkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAvKipcclxuICAgKiBHZXQgQ1NTIGNsYXNzZXMgZm9yIHRoZSB0YWJcclxuICAgKi9cclxuICBnZXQgdGFiQ2xhc3NlcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAncGVjYi10YWInLFxyXG4gICAgICBgcGVjYi10YWItLSR7dGhpcy5zdHlsZX1gLFxyXG4gICAgICBgcGVjYi10YWItLSR7dGhpcy5zaXplfWAsXHJcbiAgICAgIHRoaXMuYWN0aXZlID8gJ3BlY2ItdGFiLS1hY3RpdmUnIDogJycsXHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPyAncGVjYi10YWItLWRpc2FibGVkJyA6ICcnXHJcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0YWIgY2xpY2tcclxuICAgKi9cclxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuY2xpY2tlZC5lbWl0KHRoaXMuaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGNsb3NlIGJ1dHRvbiBjbGlja1xyXG4gICAqL1xyXG4gIG9uQ2xvc2UoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy5jbG9zZWQuZW1pdCh0aGlzLmlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBrZXlib2FyZCBldmVudHMgZm9yIGFjY2Vzc2liaWxpdHlcclxuICAgKi9cclxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgLy8gSGFuZGxlIEVudGVyL1NwYWNlIGZvciB0YWIgc2VsZWN0aW9uXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMuY2xpY2tlZC5lbWl0KHRoaXMuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBEZWxldGUvQmFja3NwYWNlIGZvciBjbG9zZSAoaWYgY2xvc2FibGUpXHJcbiAgICBpZiAodGhpcy5jbG9zYWJsZSAmJiAoZXZlbnQua2V5ID09PSAnRGVsZXRlJyB8fCBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KHRoaXMuaWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgW2lkXT1cImlkXCJcclxuICBbY2xhc3NdPVwidGFiQ2xhc3Nlcy5qb2luKCcgJylcIlxyXG4gIHJvbGU9XCJ0YWJcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IGxhYmVsXCJcclxuICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9sc1wiXHJcbiAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJhcmlhU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCA/IGFyaWFTZWxlY3RlZCA6IGFjdGl2ZVwiXHJcbiAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxyXG4gIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxyXG4gIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcclxuPlxyXG4gIDxzcGFuIGNsYXNzPVwicGVjYi10YWJfX2NvbnRlbnRcIj5cclxuICAgIDwhLS0gTGFiZWwgLS0+XHJcbiAgICA8c3BhbiBjbGFzcz1cInBlY2ItdGFiX19sYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxyXG5cclxuICAgIDwhLS0gSWNvbi9CYWRnZSAtLT5cclxuICAgIDxzcGFuICpuZ0lmPVwiaWNvblwiIGNsYXNzPVwicGVjYi10YWJfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAge3sgaWNvbiB9fVxyXG4gICAgPC9zcGFuPlxyXG5cclxuICAgIDwhLS0gQ2xvc2UgYnV0dG9uIC0tPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImNsb3NhYmxlXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNsYXNzPVwicGVjYi10YWJfX2Nsb3NlXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ2xvc2UgJyArIGxhYmVsXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQ2xvc2UoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L3NwYW4+XHJcbjwvZGl2PlxyXG4iXX0=
|