@cqa-lib/cqa-ui 0.0.1
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 +140 -0
- package/cqa-lib-cqa-ui.d.ts +5 -0
- package/esm2020/cqa-lib-cqa-ui.mjs +5 -0
- package/esm2020/lib/button/button.component.mjs +265 -0
- package/esm2020/lib/dialog/dialog-ref.mjs +36 -0
- package/esm2020/lib/dialog/dialog.component.mjs +135 -0
- package/esm2020/lib/dialog/dialog.models.mjs +2 -0
- package/esm2020/lib/dialog/dialog.service.mjs +101 -0
- package/esm2020/lib/dialog/dialog.tokens.mjs +4 -0
- package/esm2020/lib/root-wrapper/root-wrapper.component.mjs +34 -0
- package/esm2020/lib/search-bar/search-bar.component.mjs +111 -0
- package/esm2020/lib/segment-control/segment-control.component.mjs +219 -0
- package/esm2020/lib/ui-kit.module.mjs +71 -0
- package/esm2020/public-api.mjs +11 -0
- package/fesm2015/cqa-lib-cqa-ui.mjs +967 -0
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -0
- package/fesm2020/cqa-lib-cqa-ui.mjs +953 -0
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -0
- package/lib/button/button.component.d.ts +32 -0
- package/lib/dialog/dialog-ref.d.ts +14 -0
- package/lib/dialog/dialog.component.d.ts +30 -0
- package/lib/dialog/dialog.models.d.ts +35 -0
- package/lib/dialog/dialog.service.d.ts +15 -0
- package/lib/dialog/dialog.tokens.d.ts +4 -0
- package/lib/root-wrapper/root-wrapper.component.d.ts +9 -0
- package/lib/search-bar/search-bar.component.d.ts +39 -0
- package/lib/segment-control/segment-control.component.d.ts +39 -0
- package/lib/ui-kit.module.d.ts +16 -0
- package/package.json +56 -0
- package/public-api.d.ts +10 -0
- package/styles.css +1 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGlhbG9nL2RpYWxvZy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBEaWFsb2dSZWYgfSBmcm9tICcuL2RpYWxvZy1yZWYnO1xuXG5leHBvcnQgdHlwZSBEaWFsb2dCdXR0b25Sb2xlID0gJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnd2FybicgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0J1dHRvbkNvbmZpZzxUUmVzdWx0ID0gdW5rbm93bj4ge1xuICBsYWJlbDogc3RyaW5nO1xuICByb2xlPzogRGlhbG9nQnV0dG9uUm9sZTtcbiAgaGFuZGxlcj86IChkaWFsb2dSZWY6IERpYWxvZ1JlZjxUUmVzdWx0PikgPT4gVFJlc3VsdCB8IHZvaWQgfCBQcm9taXNlPFRSZXN1bHQgfCB2b2lkPjtcbiAgY2xvc2VPbkNsaWNrPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRGlhbG9nQnV0dG9uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlRGlhbG9nQ29udGVudDxUQ29udGV4dCA9IGFueT4ge1xuICB0eXBlOiAndGVtcGxhdGUnO1xuICB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8VENvbnRleHQ+O1xuICBjb250ZXh0PzogVENvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGlhbG9nQ29udGVudDxUSW5wdXRzID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICB0eXBlOiAnY29tcG9uZW50JztcbiAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPHVua25vd24+O1xuICBpbnB1dHM/OiBUSW5wdXRzO1xufVxuXG5leHBvcnQgdHlwZSBEaWFsb2dDb250ZW50Q29uZmlnID1cbiAgfCBUZW1wbGF0ZURpYWxvZ0NvbnRlbnRcbiAgfCBDb21wb25lbnREaWFsb2dDb250ZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0NvbmZpZzxUQ29udGVudCBleHRlbmRzIERpYWxvZ0NvbnRlbnRDb25maWcgPSBEaWFsb2dDb250ZW50Q29uZmlnLCBUUmVzdWx0ID0gdW5rbm93bj4ge1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgd2FybmluZz86IHN0cmluZztcbiAgY29udGVudD86IFRDb250ZW50O1xuICBkYXRhPzogdW5rbm93bjtcbiAgYnV0dG9uczogRGlhbG9nQnV0dG9uQ29uZmlnPFRSZXN1bHQ+W107XG4gIGJ1dHRvbkFsaWdubWVudD86IERpYWxvZ0J1dHRvbkFsaWdubWVudDtcbiAgcGFuZWxDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICB3aWR0aD86IHN0cmluZztcbiAgbWF4V2lkdGg/OiBzdHJpbmc7XG4gIGRpc2FibGVDbG9zZT86IGJvb2xlYW47XG59XG5cblxuIl19
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Injectable, Injector } from '@angular/core';
|
|
2
|
+
import { OverlayConfig } from '@angular/cdk/overlay';
|
|
3
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
4
|
+
import { filter } from 'rxjs/operators';
|
|
5
|
+
import { DialogRef } from './dialog-ref';
|
|
6
|
+
import { DialogComponent } from './dialog.component';
|
|
7
|
+
import { DIALOG_DATA, DIALOG_REF } from './dialog.tokens';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
10
|
+
export class DialogService {
|
|
11
|
+
constructor(overlay, injector) {
|
|
12
|
+
this.overlay = overlay;
|
|
13
|
+
this.injector = injector;
|
|
14
|
+
}
|
|
15
|
+
open(config) {
|
|
16
|
+
this.assertValidConfig(config);
|
|
17
|
+
const overlayRef = this.overlay.create(this.buildOverlayConfig(config));
|
|
18
|
+
const dialogRef = new DialogRef(overlayRef);
|
|
19
|
+
const injector = Injector.create({
|
|
20
|
+
parent: this.injector,
|
|
21
|
+
providers: [
|
|
22
|
+
{ provide: DIALOG_REF, useValue: dialogRef },
|
|
23
|
+
{ provide: DIALOG_DATA, useValue: config.data },
|
|
24
|
+
],
|
|
25
|
+
});
|
|
26
|
+
const containerPortal = new ComponentPortal(DialogComponent, undefined, injector);
|
|
27
|
+
const containerRef = overlayRef.attach(containerPortal);
|
|
28
|
+
const containerInstance = containerRef.instance;
|
|
29
|
+
containerInstance.config = config;
|
|
30
|
+
containerInstance.dialogRef = dialogRef;
|
|
31
|
+
if (config.content?.type === 'template') {
|
|
32
|
+
containerInstance.attachTemplate(config.content.template, config.content.context ?? {
|
|
33
|
+
$implicit: config.data,
|
|
34
|
+
data: config.data,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (config.content?.type === 'component') {
|
|
38
|
+
const componentPortal = new ComponentPortal(config.content.component, undefined, Injector.create({
|
|
39
|
+
parent: injector,
|
|
40
|
+
providers: [
|
|
41
|
+
{ provide: DIALOG_REF, useValue: dialogRef },
|
|
42
|
+
{ provide: DIALOG_DATA, useValue: config.data },
|
|
43
|
+
],
|
|
44
|
+
}));
|
|
45
|
+
const componentRef = containerInstance.attachComponent(componentPortal);
|
|
46
|
+
if (componentRef && config.content.inputs) {
|
|
47
|
+
Object.entries(config.content.inputs).forEach(([key, value]) => {
|
|
48
|
+
componentRef.instance[key] = value;
|
|
49
|
+
});
|
|
50
|
+
componentRef.changeDetectorRef.markForCheck();
|
|
51
|
+
}
|
|
52
|
+
if (componentRef) {
|
|
53
|
+
dialogRef.setComponentInstance(componentRef.instance);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
containerRef.changeDetectorRef.markForCheck();
|
|
57
|
+
if (!config.disableClose) {
|
|
58
|
+
overlayRef.backdropClick().subscribe(() => dialogRef.close());
|
|
59
|
+
overlayRef
|
|
60
|
+
.keydownEvents()
|
|
61
|
+
.pipe(filter((event) => {
|
|
62
|
+
return event.key === 'Escape' || event.key === 'Esc';
|
|
63
|
+
}))
|
|
64
|
+
.subscribe(() => dialogRef.close());
|
|
65
|
+
}
|
|
66
|
+
return dialogRef;
|
|
67
|
+
}
|
|
68
|
+
assertValidConfig(config) {
|
|
69
|
+
if (!config.title) {
|
|
70
|
+
throw new Error('Dialog title is required.');
|
|
71
|
+
}
|
|
72
|
+
if (!config.buttons || config.buttons.length < 2) {
|
|
73
|
+
throw new Error('Dialog requires at least two buttons to be provided.');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
buildOverlayConfig(config) {
|
|
77
|
+
const panelClass = Array.isArray(config.panelClass)
|
|
78
|
+
? config.panelClass
|
|
79
|
+
: config.panelClass
|
|
80
|
+
? [config.panelClass]
|
|
81
|
+
: [];
|
|
82
|
+
return new OverlayConfig({
|
|
83
|
+
hasBackdrop: true,
|
|
84
|
+
backdropClass: ['cdk-overlay-dark-backdrop', 'cqa-dialog-backdrop'],
|
|
85
|
+
scrollStrategy: this.overlay.scrollStrategies.block(),
|
|
86
|
+
positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),
|
|
87
|
+
width: config.width,
|
|
88
|
+
maxWidth: config.maxWidth ?? '90vw',
|
|
89
|
+
panelClass: ['cqa-dialog-panel', ...panelClass],
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
DialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogService, deps: [{ token: i1.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
94
|
+
DialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogService, providedIn: 'root' });
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogService, decorators: [{
|
|
96
|
+
type: Injectable,
|
|
97
|
+
args: [{
|
|
98
|
+
providedIn: 'root',
|
|
99
|
+
}]
|
|
100
|
+
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Injector }]; } });
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RpYWxvZy9kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQVcsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFLMUQsTUFBTSxPQUFPLGFBQWE7SUFDeEIsWUFBNkIsT0FBZ0IsRUFBbUIsUUFBa0I7UUFBckQsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFtQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcsQ0FBQztJQUV0RixJQUFJLENBQ0YsTUFBdUM7UUFFdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFVLFVBQVUsQ0FBQyxDQUFDO1FBRXJELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3JCLFNBQVMsRUFBRTtnQkFDVCxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUs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bkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGlhbG9nQ29uZmlnLCBEaWFsb2dDb250ZW50Q29uZmlnIH0gZnJvbSAnLi9kaWFsb2cubW9kZWxzJztcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJy4vZGlhbG9nLXJlZic7XG5pbXBvcnQgeyBEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2RpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRElBTE9HX0RBVEEsIERJQUxPR19SRUYgfSBmcm9tICcuL2RpYWxvZy50b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSwgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgb3BlbjxUQ29udGVudCBleHRlbmRzIERpYWxvZ0NvbnRlbnRDb25maWcgPSBEaWFsb2dDb250ZW50Q29uZmlnLCBUUmVzdWx0ID0gdW5rbm93bj4oXG4gICAgY29uZmlnOiBEaWFsb2dDb25maWc8VENvbnRlbnQsIFRSZXN1bHQ+XG4gICk6IERpYWxvZ1JlZjxUUmVzdWx0PiB7XG4gICAgdGhpcy5hc3NlcnRWYWxpZENvbmZpZyhjb25maWcpO1xuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUodGhpcy5idWlsZE92ZXJsYXlDb25maWcoY29uZmlnKSk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gbmV3IERpYWxvZ1JlZjxUUmVzdWx0PihvdmVybGF5UmVmKTtcblxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IERJQUxPR19SRUYsIHVzZVZhbHVlOiBkaWFsb2dSZWYgfSxcbiAgICAgICAgeyBwcm92aWRlOiBESUFMT0dfREFUQSwgdXNlVmFsdWU6IGNvbmZpZy5kYXRhIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29udGFpbmVyUG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChEaWFsb2dDb21wb25lbnQsIHVuZGVmaW5lZCwgaW5qZWN0b3IpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZiA9IG92ZXJsYXlSZWYuYXR0YWNoKGNvbnRhaW5lclBvcnRhbCk7XG4gICAgY29uc3QgY29udGFpbmVySW5zdGFuY2UgPSBjb250YWluZXJSZWYuaW5zdGFuY2UgYXMgRGlhbG9nQ29tcG9uZW50PFRSZXN1bHQ+O1xuXG4gICAgY29udGFpbmVySW5zdGFuY2UuY29uZmlnID0gY29uZmlnO1xuICAgIGNvbnRhaW5lckluc3RhbmNlLmRpYWxvZ1JlZiA9IGRpYWxvZ1JlZjtcblxuICAgIGlmIChjb25maWcuY29udGVudD8udHlwZSA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgY29udGFpbmVySW5zdGFuY2UuYXR0YWNoVGVtcGxhdGUoXG4gICAgICAgIGNvbmZpZy5jb250ZW50LnRlbXBsYXRlLFxuICAgICAgICBjb25maWcuY29udGVudC5jb250ZXh0ID8/IHtcbiAgICAgICAgICAkaW1wbGljaXQ6IGNvbmZpZy5kYXRhLFxuICAgICAgICAgIGRhdGE6IGNvbmZpZy5kYXRhLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY29udGVudD8udHlwZSA9PT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoXG4gICAgICAgIGNvbmZpZy5jb250ZW50LmNvbXBvbmVudCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgIHBhcmVudDogaW5qZWN0b3IsXG4gICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICB7IHByb3ZpZGU6IERJQUxPR19SRUYsIHVzZVZhbHVlOiBkaWFsb2dSZWYgfSxcbiAgICAgICAgICAgIHsgcHJvdmlkZTogRElBTE9HX0RBVEEsIHVzZVZhbHVlOiBjb25maWcuZGF0YSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjb250YWluZXJJbnN0YW5jZS5hdHRhY2hDb21wb25lbnQoY29tcG9uZW50UG9ydGFsKTtcblxuICAgICAgaWYgKGNvbXBvbmVudFJlZiAmJiBjb25maWcuY29udGVudC5pbnB1dHMpIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY29uZmlnLmNvbnRlbnQuaW5wdXRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnRSZWYpIHtcbiAgICAgICAgZGlhbG9nUmVmLnNldENvbXBvbmVudEluc3RhbmNlKGNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGFpbmVyUmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgaWYgKCFjb25maWcuZGlzYWJsZUNsb3NlKSB7XG4gICAgICBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gZGlhbG9nUmVmLmNsb3NlKCkpO1xuICAgICAgb3ZlcmxheVJlZlxuICAgICAgICAua2V5ZG93bkV2ZW50cygpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBLZXlib2FyZEV2ZW50ID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCkua2V5ID09PSAnRXNjYXBlJyB8fCAoZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCkua2V5ID09PSAnRXNjJztcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gZGlhbG9nUmVmLmNsb3NlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBkaWFsb2dSZWY7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydFZhbGlkQ29uZmlnPFRDb250ZW50IGV4dGVuZHMgRGlhbG9nQ29udGVudENvbmZpZywgVFJlc3VsdD4oXG4gICAgY29uZmlnOiBEaWFsb2dDb25maWc8VENvbnRlbnQsIFRSZXN1bHQ+XG4gICk6IHZvaWQge1xuICAgIGlmICghY29uZmlnLnRpdGxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpYWxvZyB0aXRsZSBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5idXR0b25zIHx8IGNvbmZpZy5idXR0b25zLmxlbmd0aCA8IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlhbG9nIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBidXR0b25zIHRvIGJlIHByb3ZpZGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRPdmVybGF5Q29uZmlnPFRDb250ZW50IGV4dGVuZHMgRGlhbG9nQ29udGVudENvbmZpZywgVFJlc3VsdD4oXG4gICAgY29uZmlnOiBEaWFsb2dDb25maWc8VENvbnRlbnQsIFRSZXN1bHQ+XG4gICk6IE92ZXJsYXlDb25maWcge1xuICAgIGNvbnN0IHBhbmVsQ2xhc3MgPSBBcnJheS5pc0FycmF5KGNvbmZpZy5wYW5lbENsYXNzKVxuICAgICAgPyBjb25maWcucGFuZWxDbGFzc1xuICAgICAgOiBjb25maWcucGFuZWxDbGFzc1xuICAgICAgPyBbY29uZmlnLnBhbmVsQ2xhc3NdXG4gICAgICA6IFtdO1xuXG4gICAgcmV0dXJuIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgYmFja2Ryb3BDbGFzczogWydjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wJywgJ2NxYS1kaWFsb2ctYmFja2Ryb3AnXSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpLFxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLFxuICAgICAgd2lkdGg6IGNvbmZpZy53aWR0aCxcbiAgICAgIG1heFdpZHRoOiBjb25maWcubWF4V2lkdGggPz8gJzkwdncnLFxuICAgICAgcGFuZWxDbGFzczogWydjcWEtZGlhbG9nLXBhbmVsJywgLi4ucGFuZWxDbGFzc10sXG4gICAgfSk7XG4gIH1cbn1cblxuXG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const DIALOG_REF = new InjectionToken('CQA_DIALOG_REF');
|
|
3
|
+
export const DIALOG_DATA = new InjectionToken('CQA_DIALOG_DATA');
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGlhbG9nL2RpYWxvZy50b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxjQUFjLENBQWlCLGdCQUFnQixDQUFDLENBQUM7QUFDL0UsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFNLGlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nUmVmIH0gZnJvbSAnLi9kaWFsb2ctcmVmJztcblxuZXhwb3J0IGNvbnN0IERJQUxPR19SRUYgPSBuZXcgSW5qZWN0aW9uVG9rZW48RGlhbG9nUmVmPGFueT4+KCdDUUFfRElBTE9HX1JFRicpO1xuZXhwb3J0IGNvbnN0IERJQUxPR19EQVRBID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ0NRQV9ESUFMT0dfREFUQScpO1xuXG5cbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class RootWrapperComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.display = 'inline-block';
|
|
7
|
+
this.fullWidth = false;
|
|
8
|
+
}
|
|
9
|
+
get rootStyles() {
|
|
10
|
+
const styles = {
|
|
11
|
+
display: this.fullWidth ? 'block' : this.display
|
|
12
|
+
};
|
|
13
|
+
if (this.fullWidth) {
|
|
14
|
+
styles['width'] = '100%';
|
|
15
|
+
}
|
|
16
|
+
else if (this.width) {
|
|
17
|
+
styles['width'] = this.width;
|
|
18
|
+
}
|
|
19
|
+
return styles;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
RootWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: RootWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
+
RootWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: RootWrapperComponent, selector: "cqa-ui-root", inputs: { display: "display", width: "width", fullWidth: "fullWidth" }, ngImport: i0, template: "<div id=\"cqa-ui-root\" [ngStyle]=\"rootStyles\">\n <ng-content></ng-content>\n</div>\n\n", directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: RootWrapperComponent, decorators: [{
|
|
25
|
+
type: Component,
|
|
26
|
+
args: [{ selector: 'cqa-ui-root', styles: [], template: "<div id=\"cqa-ui-root\" [ngStyle]=\"rootStyles\">\n <ng-content></ng-content>\n</div>\n\n" }]
|
|
27
|
+
}], propDecorators: { display: [{
|
|
28
|
+
type: Input
|
|
29
|
+
}], width: [{
|
|
30
|
+
type: Input
|
|
31
|
+
}], fullWidth: [{
|
|
32
|
+
type: Input
|
|
33
|
+
}] } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcm9vdC13cmFwcGVyL3Jvb3Qtd3JhcHBlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Jvb3Qtd3JhcHBlci9yb290LXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU9qRCxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBTVcsWUFBTyxHQUFpRSxjQUFjLENBQUM7UUFFdkYsY0FBUyxHQUFHLEtBQUssQ0FBQztLQWU1QjtJQWJDLElBQUksVUFBVTtRQUNaLE1BQU0sTUFBTSxHQUEyQjtZQUNyQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTztTQUNqRCxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDMUI7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDOUI7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztpSEFqQlUsb0JBQW9CO3FHQUFwQixvQkFBb0IsMkhDUGpDLDRGQUlBOzJGREdhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxhQUFhLFVBRWYsRUFBRTs4QkFHRCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS11aS1yb290JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jvb3Qtd3JhcHBlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgUm9vdFdyYXBwZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBkaXNwbGF5OiAnYmxvY2snIHwgJ2lubGluZS1ibG9jaycgfCAnaW5saW5lJyB8ICdpbmxpbmUtZmxleCcgfCAnZmxleCcgPSAnaW5saW5lLWJsb2NrJztcbiAgQElucHV0KCkgd2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIGdldCByb290U3R5bGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIGRpc3BsYXk6IHRoaXMuZnVsbFdpZHRoID8gJ2Jsb2NrJyA6IHRoaXMuZGlzcGxheVxuICAgIH07XG4gICAgXG4gICAgaWYgKHRoaXMuZnVsbFdpZHRoKSB7XG4gICAgICBzdHlsZXNbJ3dpZHRoJ10gPSAnMTAwJSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLndpZHRoKSB7XG4gICAgICBzdHlsZXNbJ3dpZHRoJ10gPSB0aGlzLndpZHRoO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gc3R5bGVzO1xuICB9XG59XG5cbiIsIjxkaXYgaWQ9XCJjcWEtdWktcm9vdFwiIFtuZ1N0eWxlXT1cInJvb3RTdHlsZXNcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbiJdfQ==
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, HostBinding } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/icon";
|
|
4
|
+
import * as i2 from "@angular/forms";
|
|
5
|
+
import * as i3 from "@angular/common";
|
|
6
|
+
export class SearchBarComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.id = 'cqa-ui-root';
|
|
9
|
+
/** Placeholder text for the input */
|
|
10
|
+
this.placeholder = 'Search';
|
|
11
|
+
/** Initial value or externally controlled value */
|
|
12
|
+
this.value = '';
|
|
13
|
+
/** Disable interactions */
|
|
14
|
+
this.disabled = false;
|
|
15
|
+
/** Whether the clear button should be visible when there is text */
|
|
16
|
+
this.showClear = true;
|
|
17
|
+
/** Accessible label for the input */
|
|
18
|
+
this.ariaLabel = 'Search';
|
|
19
|
+
/** Automatically focus the input when rendered */
|
|
20
|
+
this.autoFocus = false;
|
|
21
|
+
/** Search bar size */
|
|
22
|
+
this.size = 'md';
|
|
23
|
+
/** Stretch to fill container width */
|
|
24
|
+
this.fullWidth = false;
|
|
25
|
+
/** Emit on value changes (e.g. for two-way binding) */
|
|
26
|
+
this.valueChange = new EventEmitter();
|
|
27
|
+
/** Emit when user submits search (Enter key or form submit) */
|
|
28
|
+
this.search = new EventEmitter();
|
|
29
|
+
/** Emit when the value is cleared via the clear button */
|
|
30
|
+
this.cleared = new EventEmitter();
|
|
31
|
+
this.inputValue = '';
|
|
32
|
+
this.widthClasses = {
|
|
33
|
+
sm: 'w-[295px]',
|
|
34
|
+
md: 'w-[395px]',
|
|
35
|
+
lg: 'w-[495px]',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
get displayStyle() {
|
|
39
|
+
return this.fullWidth ? 'block' : 'inline-block';
|
|
40
|
+
}
|
|
41
|
+
get widthStyle() {
|
|
42
|
+
return this.fullWidth ? '100%' : 'auto';
|
|
43
|
+
}
|
|
44
|
+
ngOnChanges(changes) {
|
|
45
|
+
if (changes['value'] && changes['value'].currentValue !== undefined) {
|
|
46
|
+
const newValue = changes['value'].currentValue ?? '';
|
|
47
|
+
if (newValue !== this.inputValue) {
|
|
48
|
+
this.inputValue = newValue;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
onInput(event) {
|
|
53
|
+
const target = event.target;
|
|
54
|
+
const nextValue = target?.value ?? '';
|
|
55
|
+
this.inputValue = nextValue;
|
|
56
|
+
this.valueChange.emit(this.inputValue);
|
|
57
|
+
}
|
|
58
|
+
onSubmit(event) {
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
if (this.disabled) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this.search.emit(this.inputValue.trim());
|
|
64
|
+
}
|
|
65
|
+
clear() {
|
|
66
|
+
if (this.disabled || this.inputValue === '') {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this.inputValue = '';
|
|
70
|
+
this.valueChange.emit('');
|
|
71
|
+
this.cleared.emit();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
SearchBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SearchBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
75
|
+
SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SearchBarComponent, selector: "cqa-search-bar", inputs: { placeholder: "placeholder", value: "value", disabled: "disabled", showClear: "showClear", ariaLabel: "ariaLabel", autoFocus: "autoFocus", size: "size", fullWidth: "fullWidth" }, outputs: { valueChange: "valueChange", search: "search", cleared: "cleared" }, host: { properties: { "attr.id": "this.id", "style.display": "this.displayStyle", "style.width": "this.widthStyle" } }, usesOnChanges: true, ngImport: i0, template: "<form\n class=\"inline-flex items-center gap-2 px-6 py-3 text-[14px] border border-gray-200 rounded-md bg-white shadow-sm transition-colors\"\n [ngClass]=\"fullWidth ? 'w-full' : widthClasses[size]\"\n (submit)=\"onSubmit($event)\"\n>\n <span\n class=\"flex-none flex items-center justify-center text-gray-400 w-4 h-4\"\n [ngClass]=\"{ 'opacity-[0.38]': disabled }\"\n >\n <mat-icon\n class=\"flex items-center justify-center leading-none p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n >\n search\n </mat-icon>\n </span>\n\n <input\n type=\"text\"\n class=\"flex-1 min-w-[180px] border-none outline-none bg-transparent placeholder:text-gray-400 disabled:text-gray-400 disabled:cursor-not-allowed font-['SF_Pro_Text'] font-normal text-[12.3px] leading-none tracking-normal align-middle text-[#99999E]\"\n style=\"font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; letter-spacing: 0;\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n autocomplete=\"off\"\n autocapitalize=\"none\"\n spellcheck=\"false\"\n [attr.autofocus]=\"autoFocus ? '' : null\"\n />\n\n <button\n *ngIf=\"showClear && inputValue\"\n type=\"button\"\n class=\"flex items-center justify-center p-0 w-4 h-4 border-0 bg-transparent cursor-pointer text-gray-500 hover:text-gray-700 disabled:text-gray-300 transition-colors leading-none\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n aria-label=\"Clear search\"\n >\n <mat-icon\n class=\"flex items-center justify-center leading-none p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n [ngClass]=\"{ 'opacity-[0.38]': disabled }\"\n >\n close\n </mat-icon>\n </button>\n</form>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SearchBarComponent, decorators: [{
|
|
77
|
+
type: Component,
|
|
78
|
+
args: [{ selector: 'cqa-search-bar', template: "<form\n class=\"inline-flex items-center gap-2 px-6 py-3 text-[14px] border border-gray-200 rounded-md bg-white shadow-sm transition-colors\"\n [ngClass]=\"fullWidth ? 'w-full' : widthClasses[size]\"\n (submit)=\"onSubmit($event)\"\n>\n <span\n class=\"flex-none flex items-center justify-center text-gray-400 w-4 h-4\"\n [ngClass]=\"{ 'opacity-[0.38]': disabled }\"\n >\n <mat-icon\n class=\"flex items-center justify-center leading-none p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n >\n search\n </mat-icon>\n </span>\n\n <input\n type=\"text\"\n class=\"flex-1 min-w-[180px] border-none outline-none bg-transparent placeholder:text-gray-400 disabled:text-gray-400 disabled:cursor-not-allowed font-['SF_Pro_Text'] font-normal text-[12.3px] leading-none tracking-normal align-middle text-[#99999E]\"\n style=\"font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; letter-spacing: 0;\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n autocomplete=\"off\"\n autocapitalize=\"none\"\n spellcheck=\"false\"\n [attr.autofocus]=\"autoFocus ? '' : null\"\n />\n\n <button\n *ngIf=\"showClear && inputValue\"\n type=\"button\"\n class=\"flex items-center justify-center p-0 w-4 h-4 border-0 bg-transparent cursor-pointer text-gray-500 hover:text-gray-700 disabled:text-gray-300 transition-colors leading-none\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n aria-label=\"Clear search\"\n >\n <mat-icon\n class=\"flex items-center justify-center leading-none p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n [ngClass]=\"{ 'opacity-[0.38]': disabled }\"\n >\n close\n </mat-icon>\n </button>\n</form>\n", styles: [] }]
|
|
79
|
+
}], propDecorators: { id: [{
|
|
80
|
+
type: HostBinding,
|
|
81
|
+
args: ['attr.id']
|
|
82
|
+
}], displayStyle: [{
|
|
83
|
+
type: HostBinding,
|
|
84
|
+
args: ['style.display']
|
|
85
|
+
}], widthStyle: [{
|
|
86
|
+
type: HostBinding,
|
|
87
|
+
args: ['style.width']
|
|
88
|
+
}], placeholder: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], value: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], disabled: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], showClear: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], ariaLabel: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}], autoFocus: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}], size: [{
|
|
101
|
+
type: Input
|
|
102
|
+
}], fullWidth: [{
|
|
103
|
+
type: Input
|
|
104
|
+
}], valueChange: [{
|
|
105
|
+
type: Output
|
|
106
|
+
}], search: [{
|
|
107
|
+
type: Output
|
|
108
|
+
}], cleared: [{
|
|
109
|
+
type: Output
|
|
110
|
+
}] } });
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUzlHLE1BQU0sT0FBTyxrQkFBa0I7SUFML0I7UUFNMEIsT0FBRSxHQUFHLGFBQWEsQ0FBQztRQVEzQyxxQ0FBcUM7UUFDNUIsZ0JBQVcsR0FBRyxRQUFRLENBQUM7UUFFaEMsbURBQW1EO1FBQzFDLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFcEIsMkJBQTJCO1FBQ2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUIsb0VBQW9FO1FBQzNELGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFMUIscUNBQXFDO1FBQzVCLGNBQVMsR0FBRyxRQUFRLENBQUM7UUFFOUIsa0RBQWtEO1FBQ3pDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFM0Isc0JBQXNCO1FBQ2IsU0FBSSxHQUFrQixJQUFJLENBQUM7UUFFcEMsc0NBQXNDO1FBQzdCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFM0IsdURBQXVEO1FBQzdDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVuRCwrREFBK0Q7UUFDckQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFOUMsMERBQTBEO1FBQ2hELFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTdDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFXUCxpQkFBWSxHQUFrQztZQUNyRCxFQUFFLEVBQUUsV0FBVztZQUNmLEVBQUUsRUFBRSxXQUFXO1lBQ2YsRUFBRSxFQUFFLFdBQVc7U0FDaEIsQ0FBQztLQTJCSDtJQWxGQyxJQUFrQyxZQUFZO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDbkQsQ0FBQztJQUNELElBQWdDLFVBQVU7UUFDeEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxQyxDQUFDO0lBcUNELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUNuRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUNyRCxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQzthQUM1QjtTQUNGO0lBQ0gsQ0FBQztJQVFELE9BQU8sQ0FBQyxLQUFZO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFpQyxDQUFDO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVk7UUFDbkIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLEVBQUU7WUFDM0MsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDOzsrR0FuRlUsa0JBQWtCO21HQUFsQixrQkFBa0IsOGNDVC9CLG1nRUFxREE7MkZENUNhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7OEJBS0YsRUFBRTtzQkFBekIsV0FBVzt1QkFBQyxTQUFTO2dCQUNZLFlBQVk7c0JBQTdDLFdBQVc7dUJBQUMsZUFBZTtnQkFHSSxVQUFVO3NCQUF6QyxXQUFXO3VCQUFDLGFBQWE7Z0JBS2pCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0ksV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxNQUFNO3NCQUFmLE1BQU07Z0JBR0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbnR5cGUgU2VhcmNoQmFyU2l6ZSA9ICdzbScgfCAnbWQnIHwgJ2xnJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXNlYXJjaC1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgaWQgPSAnY3FhLXVpLXJvb3QnO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKSBnZXQgZGlzcGxheVN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bGxXaWR0aCA/ICdibG9jaycgOiAnaW5saW5lLWJsb2NrJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJykgZ2V0IHdpZHRoU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nO1xuICB9XG5cbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dCAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWFyY2gnO1xuXG4gIC8qKiBJbml0aWFsIHZhbHVlIG9yIGV4dGVybmFsbHkgY29udHJvbGxlZCB2YWx1ZSAqL1xuICBASW5wdXQoKSB2YWx1ZSA9ICcnO1xuXG4gIC8qKiBEaXNhYmxlIGludGVyYWN0aW9ucyAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjbGVhciBidXR0b24gc2hvdWxkIGJlIHZpc2libGUgd2hlbiB0aGVyZSBpcyB0ZXh0ICovXG4gIEBJbnB1dCgpIHNob3dDbGVhciA9IHRydWU7XG5cbiAgLyoqIEFjY2Vzc2libGUgbGFiZWwgZm9yIHRoZSBpbnB1dCAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWwgPSAnU2VhcmNoJztcblxuICAvKiogQXV0b21hdGljYWxseSBmb2N1cyB0aGUgaW5wdXQgd2hlbiByZW5kZXJlZCAqL1xuICBASW5wdXQoKSBhdXRvRm9jdXMgPSBmYWxzZTtcblxuICAvKiogU2VhcmNoIGJhciBzaXplICovXG4gIEBJbnB1dCgpIHNpemU6IFNlYXJjaEJhclNpemUgPSAnbWQnO1xuXG4gIC8qKiBTdHJldGNoIHRvIGZpbGwgY29udGFpbmVyIHdpZHRoICovXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0IG9uIHZhbHVlIGNoYW5nZXMgKGUuZy4gZm9yIHR3by13YXkgYmluZGluZykgKi9cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiB1c2VyIHN1Ym1pdHMgc2VhcmNoIChFbnRlciBrZXkgb3IgZm9ybSBzdWJtaXQpICovXG4gIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRW1pdCB3aGVuIHRoZSB2YWx1ZSBpcyBjbGVhcmVkIHZpYSB0aGUgY2xlYXIgYnV0dG9uICovXG4gIEBPdXRwdXQoKSBjbGVhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGlucHV0VmFsdWUgPSAnJztcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10gJiYgY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSA/PyAnJztcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IHdpZHRoQ2xhc3NlczogUmVjb3JkPFNlYXJjaEJhclNpemUsIHN0cmluZz4gPSB7XG4gICAgc206ICd3LVsyOTVweF0nLFxuICAgIG1kOiAndy1bMzk1cHhdJyxcbiAgICBsZzogJ3ctWzQ5NXB4XScsXG4gIH07XG5cbiAgb25JbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gdGFyZ2V0Py52YWx1ZSA/PyAnJztcbiAgICB0aGlzLmlucHV0VmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuaW5wdXRWYWx1ZSk7XG4gIH1cblxuICBvblN1Ym1pdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2guZW1pdCh0aGlzLmlucHV0VmFsdWUudHJpbSgpKTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaW5wdXRWYWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlucHV0VmFsdWUgPSAnJztcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoJycpO1xuICAgIHRoaXMuY2xlYXJlZC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxmb3JtXG4gIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTYgcHktMyB0ZXh0LVsxNHB4XSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbWQgYmctd2hpdGUgc2hhZG93LXNtIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgW25nQ2xhc3NdPVwiZnVsbFdpZHRoID8gJ3ctZnVsbCcgOiB3aWR0aENsYXNzZXNbc2l6ZV1cIlxuICAoc3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIlxuPlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cImZsZXgtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWdyYXktNDAwIHctNCBoLTRcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnb3BhY2l0eS1bMC4zOF0nOiBkaXNhYmxlZCB9XCJcbiAgICA+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsZWFkaW5nLW5vbmUgcC0wXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIjE2XCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIxNlwiXG4gICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCIxNlwiXG4gICAgICA+XG4gICAgICAgIHNlYXJjaFxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L3NwYW4+XG5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIGNsYXNzPVwiZmxleC0xIG1pbi13LVsxODBweF0gYm9yZGVyLW5vbmUgb3V0bGluZS1ub25lIGJnLXRyYW5zcGFyZW50IHBsYWNlaG9sZGVyOnRleHQtZ3JheS00MDAgZGlzYWJsZWQ6dGV4dC1ncmF5LTQwMCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZm9udC1bJ1NGX1Byb19UZXh0J10gZm9udC1ub3JtYWwgdGV4dC1bMTIuM3B4XSBsZWFkaW5nLW5vbmUgdHJhY2tpbmctbm9ybWFsIGFsaWduLW1pZGRsZSB0ZXh0LVsjOTk5OTlFXVwiXG4gICAgICBzdHlsZT1cImZvbnQtZmFtaWx5OiAnU0YgUHJvIFRleHQnLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAwO1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3ZhbHVlXT1cImlucHV0VmFsdWVcIlxuICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIGF1dG9jYXBpdGFsaXplPVwibm9uZVwiXG4gICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgW2F0dHIuYXV0b2ZvY3VzXT1cImF1dG9Gb2N1cyA/ICcnIDogbnVsbFwiXG4gICAgLz5cblxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwic2hvd0NsZWFyICYmIGlucHV0VmFsdWVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMCB3LTQgaC00IGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IGN1cnNvci1wb2ludGVyIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBkaXNhYmxlZDp0ZXh0LWdyYXktMzAwIHRyYW5zaXRpb24tY29sb3JzIGxlYWRpbmctbm9uZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXIoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbGVhZGluZy1ub25lIHAtMFwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCIxNlwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiMTZcIlxuICAgICAgICBbc3R5bGUuZm9udFNpemUucHhdPVwiMTZcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdvcGFjaXR5LVswLjM4XSc6IGRpc2FibGVkIH1cIlxuICAgICAgPlxuICAgICAgICBjbG9zZVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbjwvZm9ybT5cbiJdfQ==
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewChildren, HostBinding, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class SegmentControlComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.id = 'cqa-ui-root';
|
|
7
|
+
this.display = 'inline-block';
|
|
8
|
+
this.segments = [
|
|
9
|
+
{ label: 'Tab Group', value: 'tab-group-1' },
|
|
10
|
+
{ label: 'Tab Group', value: 'tab-group-2' },
|
|
11
|
+
];
|
|
12
|
+
this.disabled = false;
|
|
13
|
+
this.valueChange = new EventEmitter();
|
|
14
|
+
this.indicatorStyle = {};
|
|
15
|
+
this.indicatorVisible = false;
|
|
16
|
+
}
|
|
17
|
+
ngOnChanges(changes) {
|
|
18
|
+
if (changes['segments'] || changes['value']) {
|
|
19
|
+
this.ensureSelectedValue();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
ngAfterViewInit() {
|
|
23
|
+
this.buttonChangesSub = this.segmentButtons.changes.subscribe(() => this.updateIndicator());
|
|
24
|
+
this.ensureSelectedValue();
|
|
25
|
+
this.updateIndicator();
|
|
26
|
+
}
|
|
27
|
+
ngOnDestroy() {
|
|
28
|
+
this.buttonChangesSub?.unsubscribe?.();
|
|
29
|
+
}
|
|
30
|
+
trackByValue(_index, option) {
|
|
31
|
+
return option.value;
|
|
32
|
+
}
|
|
33
|
+
isSelected(option) {
|
|
34
|
+
return option.value === this.value;
|
|
35
|
+
}
|
|
36
|
+
select(option, index) {
|
|
37
|
+
if (this.disabled || option.disabled) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const nextValue = option.value;
|
|
41
|
+
if (nextValue !== this.value) {
|
|
42
|
+
this.value = nextValue;
|
|
43
|
+
this.valueChange.emit(nextValue);
|
|
44
|
+
}
|
|
45
|
+
this.focusButton(index);
|
|
46
|
+
this.updateIndicator();
|
|
47
|
+
}
|
|
48
|
+
onKeyDown(event, currentIndex) {
|
|
49
|
+
if (this.disabled) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
switch (event.key) {
|
|
53
|
+
case 'ArrowRight':
|
|
54
|
+
case 'ArrowDown':
|
|
55
|
+
event.preventDefault();
|
|
56
|
+
this.moveSelection(1, currentIndex);
|
|
57
|
+
break;
|
|
58
|
+
case 'ArrowLeft':
|
|
59
|
+
case 'ArrowUp':
|
|
60
|
+
event.preventDefault();
|
|
61
|
+
this.moveSelection(-1, currentIndex);
|
|
62
|
+
break;
|
|
63
|
+
case 'Home':
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
this.selectFirstEnabled();
|
|
66
|
+
break;
|
|
67
|
+
case 'End':
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
this.selectLastEnabled();
|
|
70
|
+
break;
|
|
71
|
+
case ' ':
|
|
72
|
+
case 'Enter':
|
|
73
|
+
event.preventDefault();
|
|
74
|
+
this.select(this.segments[currentIndex], currentIndex);
|
|
75
|
+
break;
|
|
76
|
+
default:
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
moveSelection(step, startIndex) {
|
|
81
|
+
const enabledIndexes = this.getEnabledIndexes();
|
|
82
|
+
if (enabledIndexes.length === 0) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const currentEnabledIndex = enabledIndexes.indexOf(startIndex);
|
|
86
|
+
const fallbackIndex = this.getSelectedIndex(enabledIndexes);
|
|
87
|
+
const baseIndex = currentEnabledIndex >= 0 ? currentEnabledIndex : fallbackIndex;
|
|
88
|
+
const nextPosition = (baseIndex + step + enabledIndexes.length) % enabledIndexes.length;
|
|
89
|
+
const targetIndex = enabledIndexes[nextPosition];
|
|
90
|
+
this.select(this.segments[targetIndex], targetIndex);
|
|
91
|
+
}
|
|
92
|
+
selectFirstEnabled() {
|
|
93
|
+
const enabledIndexes = this.getEnabledIndexes();
|
|
94
|
+
if (enabledIndexes.length > 0) {
|
|
95
|
+
const index = enabledIndexes[0];
|
|
96
|
+
this.select(this.segments[index], index);
|
|
97
|
+
this.updateIndicator();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
selectLastEnabled() {
|
|
101
|
+
const enabledIndexes = this.getEnabledIndexes();
|
|
102
|
+
if (enabledIndexes.length > 0) {
|
|
103
|
+
const index = enabledIndexes[enabledIndexes.length - 1];
|
|
104
|
+
this.select(this.segments[index], index);
|
|
105
|
+
this.updateIndicator();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
getEnabledIndexes() {
|
|
109
|
+
return this.segments
|
|
110
|
+
.map((option, index) => ({ option, index }))
|
|
111
|
+
.filter(({ option }) => !option.disabled)
|
|
112
|
+
.map(({ index }) => index);
|
|
113
|
+
}
|
|
114
|
+
getSelectedIndex(enabledIndexes) {
|
|
115
|
+
const current = this.segments.findIndex((option) => option.value === this.value && !option.disabled);
|
|
116
|
+
if (current >= 0) {
|
|
117
|
+
return enabledIndexes.indexOf(current);
|
|
118
|
+
}
|
|
119
|
+
return 0;
|
|
120
|
+
}
|
|
121
|
+
ensureSelectedValue() {
|
|
122
|
+
const enabled = this.segments.filter((option) => !option.disabled);
|
|
123
|
+
if (enabled.length === 0) {
|
|
124
|
+
this.value = undefined;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (!this.value || !this.segments.some((option) => option.value === this.value)) {
|
|
128
|
+
this.value = enabled[0].value;
|
|
129
|
+
this.valueChange.emit(this.value);
|
|
130
|
+
const index = this.segments.indexOf(enabled[0]);
|
|
131
|
+
this.focusButton(index);
|
|
132
|
+
this.updateIndicator(index);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const selected = this.segments.find((option) => option.value === this.value);
|
|
136
|
+
if (selected?.disabled) {
|
|
137
|
+
this.value = enabled[0].value;
|
|
138
|
+
this.valueChange.emit(this.value);
|
|
139
|
+
const index = this.segments.indexOf(enabled[0]);
|
|
140
|
+
this.focusButton(index);
|
|
141
|
+
this.updateIndicator(index);
|
|
142
|
+
}
|
|
143
|
+
this.updateIndicator();
|
|
144
|
+
}
|
|
145
|
+
focusButton(index) {
|
|
146
|
+
queueMicrotask(() => {
|
|
147
|
+
const button = this.segmentButtons?.get(index)?.nativeElement;
|
|
148
|
+
button?.focus();
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
updateIndicator(preferredIndex) {
|
|
152
|
+
queueMicrotask(() => {
|
|
153
|
+
const container = this.segmentContainer?.nativeElement;
|
|
154
|
+
const buttons = this.segmentButtons?.toArray() ?? [];
|
|
155
|
+
if (!container || buttons.length === 0) {
|
|
156
|
+
this.indicatorVisible = false;
|
|
157
|
+
this.indicatorStyle = {};
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const index = preferredIndex ?? buttons.findIndex((button, idx) => this.segments[idx]?.value === this.value);
|
|
161
|
+
if (index === -1) {
|
|
162
|
+
this.indicatorVisible = false;
|
|
163
|
+
this.indicatorStyle = {};
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const buttonEl = buttons[index]?.nativeElement;
|
|
167
|
+
if (!buttonEl) {
|
|
168
|
+
this.indicatorVisible = false;
|
|
169
|
+
this.indicatorStyle = {};
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const containerRect = container.getBoundingClientRect();
|
|
173
|
+
const buttonRect = buttonEl.getBoundingClientRect();
|
|
174
|
+
const offsetLeft = buttonEl.offsetLeft;
|
|
175
|
+
const offsetTop = buttonEl.offsetTop;
|
|
176
|
+
const width = buttonEl.offsetWidth;
|
|
177
|
+
const height = buttonEl.offsetHeight;
|
|
178
|
+
const isDisabled = this.disabled || this.segments[index]?.disabled;
|
|
179
|
+
this.indicatorStyle = {
|
|
180
|
+
width: `${width}px`,
|
|
181
|
+
height: `${height}px`,
|
|
182
|
+
left: `${offsetLeft}px`,
|
|
183
|
+
top: `${offsetTop}px`,
|
|
184
|
+
backgroundColor: isDisabled ? '#9BA0F4' : '#3F43EE',
|
|
185
|
+
};
|
|
186
|
+
this.indicatorVisible = true;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
get isIndicatorVisible() {
|
|
190
|
+
return this.indicatorVisible;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
SegmentControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SegmentControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
194
|
+
SegmentControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SegmentControlComponent, selector: "cqa-segment-control", inputs: { segments: "segments", value: "value", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, host: { properties: { "attr.id": "this.id", "style.display": "this.display" } }, viewQueries: [{ propertyName: "segmentContainer", first: true, predicate: ["segmentContainer"], descendants: true }, { propertyName: "segmentButtons", predicate: ["segmentButton"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #segmentContainer\n class=\"relative inline-flex flex-row items-start p-[3.5px] h-[31.5px] bg-[#F5F5F5] rounded-[8px]\"\n role=\"tablist\"\n [attr.aria-disabled]=\"disabled || null\"\n>\n <div\n class=\"absolute rounded-[8px] transition-all duration-200 ease-in-out pointer-events-none\"\n [class.opacity-0]=\"!isIndicatorVisible\"\n [ngStyle]=\"indicatorStyle\"\n aria-hidden=\"true\"\n ></div>\n\n <button\n *ngFor=\"let segment of segments; index as index; trackBy: trackByValue\"\n #segmentButton\n type=\"button\"\n role=\"tab\"\n class=\"relative z-10 flex flex-col justify-center items-center px-[14px] py-[3.5px] h-[25px] rounded-[8px] transition-all duration-200 ease-in-out whitespace-nowrap text-center focus:outline-none focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 flex-none\"\n [ngClass]=\"{\n 'text-white font-medium': isSelected(segment),\n 'text-[#99999E]': !isSelected(segment) && !(disabled || segment.disabled),\n 'cursor-not-allowed': disabled || segment.disabled,\n 'text-[#C7C7C7]': (disabled || segment.disabled) && !isSelected(segment),\n 'hover:text-black': !isSelected(segment) && !disabled && !segment.disabled\n }\"\n [disabled]=\"disabled || segment.disabled\"\n [attr.aria-selected]=\"isSelected(segment)\"\n [attr.tabindex]=\"!disabled && !segment.disabled ? (isSelected(segment) ? 0 : -1) : -1\"\n (click)=\"select(segment, index)\"\n (keydown)=\"onKeyDown($event, index)\"\n >\n <span class=\"flex items-center justify-center h-[18px] font-['Inter'] font-normal text-[12px] leading-[12px] text-center align-middle\">\n {{ segment.label }}\n </span>\n </button>\n</div>\n", directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SegmentControlComponent, decorators: [{
|
|
196
|
+
type: Component,
|
|
197
|
+
args: [{ selector: 'cqa-segment-control', template: "<div\n #segmentContainer\n class=\"relative inline-flex flex-row items-start p-[3.5px] h-[31.5px] bg-[#F5F5F5] rounded-[8px]\"\n role=\"tablist\"\n [attr.aria-disabled]=\"disabled || null\"\n>\n <div\n class=\"absolute rounded-[8px] transition-all duration-200 ease-in-out pointer-events-none\"\n [class.opacity-0]=\"!isIndicatorVisible\"\n [ngStyle]=\"indicatorStyle\"\n aria-hidden=\"true\"\n ></div>\n\n <button\n *ngFor=\"let segment of segments; index as index; trackBy: trackByValue\"\n #segmentButton\n type=\"button\"\n role=\"tab\"\n class=\"relative z-10 flex flex-col justify-center items-center px-[14px] py-[3.5px] h-[25px] rounded-[8px] transition-all duration-200 ease-in-out whitespace-nowrap text-center focus:outline-none focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 flex-none\"\n [ngClass]=\"{\n 'text-white font-medium': isSelected(segment),\n 'text-[#99999E]': !isSelected(segment) && !(disabled || segment.disabled),\n 'cursor-not-allowed': disabled || segment.disabled,\n 'text-[#C7C7C7]': (disabled || segment.disabled) && !isSelected(segment),\n 'hover:text-black': !isSelected(segment) && !disabled && !segment.disabled\n }\"\n [disabled]=\"disabled || segment.disabled\"\n [attr.aria-selected]=\"isSelected(segment)\"\n [attr.tabindex]=\"!disabled && !segment.disabled ? (isSelected(segment) ? 0 : -1) : -1\"\n (click)=\"select(segment, index)\"\n (keydown)=\"onKeyDown($event, index)\"\n >\n <span class=\"flex items-center justify-center h-[18px] font-['Inter'] font-normal text-[12px] leading-[12px] text-center align-middle\">\n {{ segment.label }}\n </span>\n </button>\n</div>\n", styles: [] }]
|
|
198
|
+
}], propDecorators: { id: [{
|
|
199
|
+
type: HostBinding,
|
|
200
|
+
args: ['attr.id']
|
|
201
|
+
}], display: [{
|
|
202
|
+
type: HostBinding,
|
|
203
|
+
args: ['style.display']
|
|
204
|
+
}], segments: [{
|
|
205
|
+
type: Input
|
|
206
|
+
}], value: [{
|
|
207
|
+
type: Input
|
|
208
|
+
}], disabled: [{
|
|
209
|
+
type: Input
|
|
210
|
+
}], valueChange: [{
|
|
211
|
+
type: Output
|
|
212
|
+
}], segmentButtons: [{
|
|
213
|
+
type: ViewChildren,
|
|
214
|
+
args: ['segmentButton']
|
|
215
|
+
}], segmentContainer: [{
|
|
216
|
+
type: ViewChild,
|
|
217
|
+
args: ['segmentContainer']
|
|
218
|
+
}] } });
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VnbWVudC1jb250cm9sL3NlZ21lbnQtY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlZ21lbnQtY29udHJvbC9zZWdtZW50LWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQzs7O0FBY3ZCLE1BQU0sT0FBTyx1QkFBdUI7SUFMcEM7UUFNMEIsT0FBRSxHQUFHLGFBQWEsQ0FBQztRQUNiLFlBQU8sR0FBRyxjQUFjLENBQUM7UUFFOUMsYUFBUSxHQUFvQjtZQUNuQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUM1QyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtTQUM3QyxDQUFDO1FBR08sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFLbkQsbUJBQWMsR0FBMkIsRUFBRSxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztLQTZNMUI7SUExTUMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUs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QUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFFckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQztZQUNuRSxJQUFJLENBQUMsY0FBYyxHQUFHO2dCQUNwQixLQUFLLEVBQUUsR0FBRyxLQUFLLElBQUk7Z0JBQ25CLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSTtnQkFDckIsSUFBSSxFQUFFLEdBQUcsVUFBVSxJQUFJO2dCQUN2QixHQUFHLEVBQUUsR0FBRyxTQUFTLElBQUk7Z0JBQ3JCLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUzthQUNwRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDOztvSEE5TlUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsNmRDNUJwQywrdkRBcUNBOzJGRFRhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxxQkFBcUI7OEJBS1AsRUFBRTtzQkFBekIsV0FBVzt1QkFBQyxTQUFTO2dCQUNRLE9BQU87c0JBQXBDLFdBQVc7dUJBQUMsZUFBZTtnQkFFbkIsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUV3QixjQUFjO3NCQUE1QyxZQUFZO3VCQUFDLGVBQWU7Z0JBQ0UsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgSG9zdEJpbmRpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbnR5cGUgU2VnbWVudE9wdGlvbiA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXNlZ21lbnQtY29udHJvbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWdtZW50LWNvbnRyb2wuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWdtZW50Q29udHJvbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgaWQgPSAnY3FhLXVpLXJvb3QnO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKSBkaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG5cbiAgQElucHV0KCkgc2VnbWVudHM6IFNlZ21lbnRPcHRpb25bXSA9IFtcbiAgICB7IGxhYmVsOiAnVGFiIEdyb3VwJywgdmFsdWU6ICd0YWItZ3JvdXAtMScgfSxcbiAgICB7IGxhYmVsOiAnVGFiIEdyb3VwJywgdmFsdWU6ICd0YWItZ3JvdXAtMicgfSxcbiAgXTtcblxuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAVmlld0NoaWxkcmVuKCdzZWdtZW50QnV0dG9uJykgc2VnbWVudEJ1dHRvbnMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD4+O1xuICBAVmlld0NoaWxkKCdzZWdtZW50Q29udGFpbmVyJykgc2VnbWVudENvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGluZGljYXRvclN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGluZGljYXRvclZpc2libGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBidXR0b25DaGFuZ2VzU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2VnbWVudHMnXSB8fCBjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICB0aGlzLmVuc3VyZVNlbGVjdGVkVmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5idXR0b25DaGFuZ2VzU3ViID0gdGhpcy5zZWdtZW50QnV0dG9ucy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUluZGljYXRvcigpKTtcbiAgICB0aGlzLmVuc3VyZVNlbGVjdGVkVmFsdWUoKTtcbiAgICB0aGlzLnVwZGF0ZUluZGljYXRvcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5idXR0b25DaGFuZ2VzU3ViPy51bnN1YnNjcmliZT8uKCk7XG4gIH1cblxuICB0cmFja0J5VmFsdWUoX2luZGV4OiBudW1iZXIsIG9wdGlvbjogU2VnbWVudE9wdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9wdGlvbi52YWx1ZTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQob3B0aW9uOiBTZWdtZW50T3B0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9wdGlvbi52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcbiAgfVxuXG4gIHNlbGVjdChvcHRpb246IFNlZ21lbnRPcHRpb24sIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCBvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VmFsdWUgPSBvcHRpb24udmFsdWU7XG4gICAgaWYgKG5leHRWYWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXh0VmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNCdXR0b24oaW5kZXgpO1xuICAgIHRoaXMudXBkYXRlSW5kaWNhdG9yKCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24oMSwgY3VycmVudEluZGV4KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbigtMSwgY3VycmVudEluZGV4KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEVuYWJsZWQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdExhc3RFbmFibGVkKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnICc6XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc2VnbWVudHNbY3VycmVudEluZGV4XSwgY3VycmVudEluZGV4KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdmVTZWxlY3Rpb24oc3RlcDogMSB8IC0xLCBzdGFydEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBlbmFibGVkSW5kZXhlcyA9IHRoaXMuZ2V0RW5hYmxlZEluZGV4ZXMoKTtcbiAgICBpZiAoZW5hYmxlZEluZGV4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEVuYWJsZWRJbmRleCA9IGVuYWJsZWRJbmRleGVzLmluZGV4T2Yoc3RhcnRJbmRleCk7XG4gICAgY29uc3QgZmFsbGJhY2tJbmRleCA9IHRoaXMuZ2V0U2VsZWN0ZWRJbmRleChlbmFibGVkSW5kZXhlcyk7XG4gICAgY29uc3QgYmFzZUluZGV4ID0gY3VycmVudEVuYWJsZWRJbmRleCA+PSAwID8gY3VycmVudEVuYWJsZWRJbmRleCA6IGZhbGxiYWNrSW5kZXg7XG4gICAgY29uc3QgbmV4dFBvc2l0aW9uID0gKGJhc2VJbmRleCArIHN0ZXAgKyBlbmFibGVkSW5kZXhlcy5sZW5ndGgpICUgZW5hYmxlZEluZGV4ZXMubGVuZ3RoO1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gZW5hYmxlZEluZGV4ZXNbbmV4dFBvc2l0aW9uXTtcblxuICAgIHRoaXMuc2VsZWN0KHRoaXMuc2VnbWVudHNbdGFyZ2V0SW5kZXhdLCB0YXJnZXRJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEZpcnN0RW5hYmxlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbmFibGVkSW5kZXhlcyA9IHRoaXMuZ2V0RW5hYmxlZEluZGV4ZXMoKTtcbiAgICBpZiAoZW5hYmxlZEluZGV4ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaW5kZXggPSBlbmFibGVkSW5kZXhlc1swXTtcbiAgICAgIHRoaXMuc2VsZWN0KHRoaXMuc2VnbWVudHNbaW5kZXhdLCBpbmRleCk7XG4gICAgICB0aGlzLnVwZGF0ZUluZGljYXRvcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0TGFzdEVuYWJsZWQoKTogdm9pZCB7XG4gICAgY29uc3QgZW5hYmxlZEluZGV4ZXMgPSB0aGlzLmdldEVuYWJsZWRJbmRleGVzKCk7XG4gICAgaWYgKGVuYWJsZWRJbmRleGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gZW5hYmxlZEluZGV4ZXNbZW5hYmxlZEluZGV4ZXMubGVuZ3RoIC0gMV07XG4gICAgICB0aGlzLnNlbGVjdCh0aGlzLnNlZ21lbnRzW2luZGV4XSwgaW5kZXgpO1xuICAgICAgdGhpcy51cGRhdGVJbmRpY2F0b3IoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEVuYWJsZWRJbmRleGVzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50c1xuICAgICAgLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gKHsgb3B0aW9uLCBpbmRleCB9KSlcbiAgICAgIC5maWx0ZXIoKHsgb3B0aW9uIH0pID0+ICFvcHRpb24uZGlzYWJsZWQpXG4gICAgICAubWFwKCh7IGluZGV4IH0pID0+IGluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJbmRleChlbmFibGVkSW5kZXhlczogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlZ21lbnRzLmZpbmRJbmRleCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMudmFsdWUgJiYgIW9wdGlvbi5kaXNhYmxlZCk7XG4gICAgaWYgKGN1cnJlbnQgPj0gMCkge1xuICAgICAgcmV0dXJuIGVuYWJsZWRJbmRleGVzLmluZGV4T2YoY3VycmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVNlbGVjdGVkVmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgZW5hYmxlZCA9IHRoaXMuc2VnbWVudHMuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uZGlzYWJsZWQpO1xuICAgIGlmIChlbmFibGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsdWUgfHwgIXRoaXMuc2VnbWVudHMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZW5hYmxlZFswXS52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWdtZW50cy5pbmRleE9mKGVuYWJsZWRbMF0pO1xuICAgICAgdGhpcy5mb2N1c0J1dHRvbihpbmRleCk7XG4gICAgICB0aGlzLnVwZGF0ZUluZGljYXRvcihpbmRleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlZ21lbnRzLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSB0aGlzLnZhbHVlKTtcbiAgICBpZiAoc2VsZWN0ZWQ/LmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZW5hYmxlZFswXS52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWdtZW50cy5pbmRleE9mKGVuYWJsZWRbMF0pO1xuICAgICAgdGhpcy5mb2N1c0J1dHRvbihpbmRleCk7XG4gICAgICB0aGlzLnVwZGF0ZUluZGljYXRvcihpbmRleCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSW5kaWNhdG9yKCk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzQnV0dG9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBjb25zdCBidXR0b24gPSB0aGlzLnNlZ21lbnRCdXR0b25zPy5nZXQoaW5kZXgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgYnV0dG9uPy5mb2N1cygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmRpY2F0b3IocHJlZmVycmVkSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNlZ21lbnRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBidXR0b25zID0gdGhpcy5zZWdtZW50QnV0dG9ucz8udG9BcnJheSgpID8/IFtdO1xuICAgICAgaWYgKCFjb250YWluZXIgfHwgYnV0dG9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yU3R5bGUgPSB7fTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbmRleCA9IHByZWZlcnJlZEluZGV4ID8/IGJ1dHRvbnMuZmluZEluZGV4KChidXR0b24sIGlkeCkgPT4gdGhpcy5zZWdtZW50c1tpZHhdPy52YWx1ZSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluZGljYXRvclN0eWxlID0ge307XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnV0dG9uRWwgPSBidXR0b25zW2luZGV4XT8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghYnV0dG9uRWwpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yU3R5bGUgPSB7fTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgYnV0dG9uUmVjdCA9IGJ1dHRvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3Qgb2Zmc2V0TGVmdCA9IGJ1dHRvbkVsLm9mZnNldExlZnQ7XG4gICAgICBjb25zdCBvZmZzZXRUb3AgPSBidXR0b25FbC5vZmZzZXRUb3A7XG4gICAgICBjb25zdCB3aWR0aCA9IGJ1dHRvbkVsLm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gYnV0dG9uRWwub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLnNlZ21lbnRzW2luZGV4XT8uZGlzYWJsZWQ7XG4gICAgICB0aGlzLmluZGljYXRvclN0eWxlID0ge1xuICAgICAgICB3aWR0aDogYCR7d2lkdGh9cHhgLFxuICAgICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGAsXG4gICAgICAgIGxlZnQ6IGAke29mZnNldExlZnR9cHhgLFxuICAgICAgICB0b3A6IGAke29mZnNldFRvcH1weGAsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNEaXNhYmxlZCA/ICcjOUJBMEY0JyA6ICcjM0Y0M0VFJyxcbiAgICAgIH07XG4gICAgICB0aGlzLmluZGljYXRvclZpc2libGUgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGlzSW5kaWNhdG9yVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbmRpY2F0b3JWaXNpYmxlO1xuICB9XG59XG4iLCI8ZGl2XG4gICNzZWdtZW50Q29udGFpbmVyXG4gIGNsYXNzPVwicmVsYXRpdmUgaW5saW5lLWZsZXggZmxleC1yb3cgaXRlbXMtc3RhcnQgcC1bMy41cHhdIGgtWzMxLjVweF0gYmctWyNGNUY1RjVdIHJvdW5kZWQtWzhweF1cIlxuICByb2xlPVwidGFibGlzdFwiXG4gIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiXG4+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJhYnNvbHV0ZSByb3VuZGVkLVs4cHhdIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBlYXNlLWluLW91dCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiIWlzSW5kaWNhdG9yVmlzaWJsZVwiXG4gICAgICBbbmdTdHlsZV09XCJpbmRpY2F0b3JTdHlsZVwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgID48L2Rpdj5cblxuICAgIDxidXR0b25cbiAgICAgICpuZ0Zvcj1cImxldCBzZWdtZW50IG9mIHNlZ21lbnRzOyBpbmRleCBhcyBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVZhbHVlXCJcbiAgICAgICNzZWdtZW50QnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB6LTEwIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHB4LVsxNHB4XSBweS1bMy41cHhdIGgtWzI1cHhdIHJvdW5kZWQtWzhweF0gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGVhc2UtaW4tb3V0IHdoaXRlc3BhY2Utbm93cmFwIHRleHQtY2VudGVyIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTAgZmxleC1ub25lXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3RleHQtd2hpdGUgZm9udC1tZWRpdW0nOiBpc1NlbGVjdGVkKHNlZ21lbnQpLFxuICAgICAgICAndGV4dC1bIzk5OTk5RV0nOiAhaXNTZWxlY3RlZChzZWdtZW50KSAmJiAhKGRpc2FibGVkIHx8IHNlZ21lbnQuZGlzYWJsZWQpLFxuICAgICAgICAnY3Vyc29yLW5vdC1hbGxvd2VkJzogZGlzYWJsZWQgfHwgc2VnbWVudC5kaXNhYmxlZCxcbiAgICAgICAgJ3RleHQtWyNDN0M3QzddJzogKGRpc2FibGVkIHx8IHNlZ21lbnQuZGlzYWJsZWQpICYmICFpc1NlbGVjdGVkKHNlZ21lbnQpLFxuICAgICAgICAnaG92ZXI6dGV4dC1ibGFjayc6ICFpc1NlbGVjdGVkKHNlZ21lbnQpICYmICFkaXNhYmxlZCAmJiAhc2VnbWVudC5kaXNhYmxlZFxuICAgICAgfVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgc2VnbWVudC5kaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzU2VsZWN0ZWQoc2VnbWVudClcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiIWRpc2FibGVkICYmICFzZWdtZW50LmRpc2FibGVkID8gKGlzU2VsZWN0ZWQoc2VnbWVudCkgPyAwIDogLTEpIDogLTFcIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdChzZWdtZW50LCBpbmRleClcIlxuICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgaW5kZXgpXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtWzE4cHhdIGZvbnQtWydJbnRlciddIGZvbnQtbm9ybWFsIHRleHQtWzEycHhdIGxlYWRpbmctWzEycHhdIHRleHQtY2VudGVyIGFsaWduLW1pZGRsZVwiPlxuICAgICAge3sgc2VnbWVudC5sYWJlbCB9fVxuICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|