@cqa-lib/cqa-ui 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +90 -4
  2. package/dist/cqa-ui/README.md +226 -0
  3. package/dist/cqa-ui/esm2020/lib/button/button.component.mjs +257 -0
  4. package/dist/cqa-ui/esm2020/lib/dialog/dialog.component.mjs +127 -0
  5. package/dist/cqa-ui/esm2020/lib/search-bar/search-bar.component.mjs +95 -0
  6. package/dist/cqa-ui/esm2020/lib/segment-control/segment-control.component.mjs +211 -0
  7. package/{fesm2015 → dist/cqa-ui/fesm2015}/cqa-lib-cqa-ui.mjs +13 -53
  8. package/dist/cqa-ui/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -0
  9. package/{fesm2020 → dist/cqa-ui/fesm2020}/cqa-lib-cqa-ui.mjs +13 -53
  10. package/dist/cqa-ui/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -0
  11. package/{lib → dist/cqa-ui/lib}/button/button.component.d.ts +0 -2
  12. package/{lib → dist/cqa-ui/lib}/dialog/dialog.component.d.ts +0 -2
  13. package/{lib → dist/cqa-ui/lib}/search-bar/search-bar.component.d.ts +0 -3
  14. package/{lib → dist/cqa-ui/lib}/segment-control/segment-control.component.d.ts +0 -2
  15. package/dist/cqa-ui/package.json +56 -0
  16. package/dist/cqa-ui/styles.css +1 -0
  17. package/package.json +49 -23
  18. package/esm2020/lib/button/button.component.mjs +0 -265
  19. package/esm2020/lib/dialog/dialog.component.mjs +0 -135
  20. package/esm2020/lib/search-bar/search-bar.component.mjs +0 -111
  21. package/esm2020/lib/segment-control/segment-control.component.mjs +0 -219
  22. package/fesm2015/cqa-lib-cqa-ui.mjs.map +0 -1
  23. package/fesm2020/cqa-lib-cqa-ui.mjs.map +0 -1
  24. package/styles.css +0 -1
  25. /package/{cqa-lib-cqa-ui.d.ts → dist/cqa-ui/cqa-lib-cqa-ui.d.ts} +0 -0
  26. /package/{esm2020 → dist/cqa-ui/esm2020}/cqa-lib-cqa-ui.mjs +0 -0
  27. /package/{esm2020 → dist/cqa-ui/esm2020}/lib/dialog/dialog-ref.mjs +0 -0
  28. /package/{esm2020 → dist/cqa-ui/esm2020}/lib/dialog/dialog.models.mjs +0 -0
  29. /package/{esm2020 → dist/cqa-ui/esm2020}/lib/dialog/dialog.service.mjs +0 -0
  30. /package/{esm2020 → dist/cqa-ui/esm2020}/lib/dialog/dialog.tokens.mjs +0 -0
  31. /package/{esm2020 → dist/cqa-ui/esm2020}/lib/root-wrapper/root-wrapper.component.mjs +0 -0
  32. /package/{esm2020 → dist/cqa-ui/esm2020}/lib/ui-kit.module.mjs +0 -0
  33. /package/{esm2020 → dist/cqa-ui/esm2020}/public-api.mjs +0 -0
  34. /package/{lib → dist/cqa-ui/lib}/dialog/dialog-ref.d.ts +0 -0
  35. /package/{lib → dist/cqa-ui/lib}/dialog/dialog.models.d.ts +0 -0
  36. /package/{lib → dist/cqa-ui/lib}/dialog/dialog.service.d.ts +0 -0
  37. /package/{lib → dist/cqa-ui/lib}/dialog/dialog.tokens.d.ts +0 -0
  38. /package/{lib → dist/cqa-ui/lib}/root-wrapper/root-wrapper.component.d.ts +0 -0
  39. /package/{lib → dist/cqa-ui/lib}/ui-kit.module.d.ts +0 -0
  40. /package/{public-api.d.ts → dist/cqa-ui/public-api.d.ts} +0 -0
@@ -1,111 +0,0 @@
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==
@@ -1,219 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"cqa-lib-cqa-ui.mjs","sources":["../../../src/lib/button/button.component.ts","../../../src/lib/button/button.component.html","../../../src/lib/search-bar/search-bar.component.ts","../../../src/lib/search-bar/search-bar.component.html","../../../src/lib/segment-control/segment-control.component.ts","../../../src/lib/segment-control/segment-control.component.html","../../../src/lib/dialog/dialog.component.ts","../../../src/lib/dialog/dialog.component.html","../../../src/lib/root-wrapper/root-wrapper.component.ts","../../../src/lib/root-wrapper/root-wrapper.component.html","../../../src/lib/ui-kit.module.ts","../../../src/lib/dialog/dialog-ref.ts","../../../src/lib/dialog/dialog.tokens.ts","../../../src/lib/dialog/dialog.service.ts","../../../src/cqa-lib-cqa-ui.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, HostListener, HostBinding } from '@angular/core';\n\nexport type ButtonVariant = 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal';\n\n@Component({\n selector: 'cqa-button',\n templateUrl: './button.component.html',\n styleUrls: []\n})\nexport class ButtonComponent {\n @HostBinding('attr.id') id = 'cqa-ui-root';\n @HostBinding('style.display') display = 'contents';\n\n @Input() variant: ButtonVariant = 'filled';\n @Input() disabled: boolean = false;\n @Input() icon?: string;\n @Input() iconPosition: 'start' | 'end' = 'start';\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n // Internal state tracking\n isHovered: boolean = false;\n isFocused: boolean = false;\n isPressed: boolean = false;\n\n get hasIcon(): boolean {\n return !!this.icon;\n }\n\n get buttonClasses(): string {\n const baseClasses = [\n 'flex',\n 'flex-col',\n 'justify-center',\n 'items-center',\n 'p-0',\n 'gap-2',\n 'rounded-lg',\n 'cursor-pointer',\n 'font-inter',\n 'font-semibold',\n 'text-sm',\n 'leading-[14px]',\n 'transition-all',\n 'duration-200',\n 'outline-none'\n ];\n\n if (this.disabled) {\n baseClasses.push('cursor-not-allowed');\n }\n\n // Add variant and state specific classes\n const variantClasses = this.getVariantClasses();\n \n return [...baseClasses, ...variantClasses].join(' ');\n }\n\n get stateLayerClasses(): string {\n const classes = [\n 'flex',\n 'flex-row',\n 'justify-center',\n 'items-center',\n 'gap-2',\n 'w-full',\n 'h-full',\n 'py-[10px]',\n 'px-6',\n ];\n\n return classes.join(' ');\n }\n\n get labelClasses(): string {\n const classes = [\n 'flex',\n 'items-center',\n 'text-center',\n 'font-inter',\n 'font-semibold',\n 'text-sm',\n 'leading-[14px]',\n 'flex-none',\n this.textClass,\n ];\n\n if (this.disabled) {\n classes.push('opacity-[0.38]');\n }\n\n return classes.join(' ');\n }\n\n get iconClasses(): string {\n const classes = [\n 'flex',\n 'items-center',\n 'justify-center',\n 'w-[14px]',\n 'h-[14px]',\n 'shrink-0',\n 'flex-none'\n ];\n if (this.disabled) {\n classes.push('opacity-[0.38]');\n }\n return classes.join(' ');\n }\n\n private getVariantClasses(): string[] {\n const classes: string[] = [];\n\n if (this.variant === 'filled') {\n if (this.disabled) {\n classes.push('bg-primary-muted');\n } else {\n classes.push('bg-primary');\n if (this.isHovered) {\n classes.push('shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_1px_3px_1px_rgba(0,0,0,0.15)]');\n }\n }\n } else if (this.variant === 'outlined') {\n if (this.disabled) {\n classes.push('bg-transparent', 'border', 'border-primary-muted');\n } else {\n if (this.isFocused) {\n classes.push('bg-primary-surface-alt', 'border', 'border-primary-hover', 'shadow-[0px_4px_4px_rgba(0,0,0,0.25)]');\n } else if (this.isHovered || this.isPressed) {\n classes.push('bg-primary-surface', 'border', 'border-primary');\n } else {\n classes.push('bg-transparent', 'border', 'border-slate');\n }\n }\n } else if (this.variant === 'text') {\n if (this.disabled) {\n classes.push('bg-transparent');\n } else {\n classes.push('bg-transparent');\n if (this.isHovered || this.isFocused || this.isPressed) {\n classes.push('bg-primary-surface');\n }\n }\n } else if (this.variant === 'elevated') {\n if (this.disabled) {\n classes.push('bg-primary-muted', 'shadow-none');\n } else {\n if (this.isFocused) {\n classes.push('bg-primary-surface-alt', 'shadow-[0px_4px_4px_rgba(0,0,0,0.25)]');\n } else if (this.isPressed) {\n classes.push('bg-primary-surface', 'shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_1px_3px_1px_rgba(0,0,0,0.15)]');\n } else if (this.isHovered) {\n classes.push('bg-primary-surface-alt', 'shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_2px_6px_2px_rgba(0,0,0,0.15)]');\n } else {\n classes.push('bg-primary-surface', 'shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_1px_3px_1px_rgba(0,0,0,0.15)]');\n }\n }\n } else if (this.variant === 'tonal') {\n if (this.disabled) {\n classes.push('bg-primary-muted');\n } else {\n if (this.isHovered) {\n classes.push('bg-tonal-hover', 'shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_1px_3px_1px_rgba(0,0,0,0.15)]');\n } else {\n classes.push('bg-primary-surface-alt');\n }\n }\n }\n\n return classes;\n }\n\n get textClass(): string {\n if (this.disabled) {\n if (this.variant === 'outlined' || this.variant === 'text') {\n return 'text-ink';\n }\n return 'text-ink-muted';\n }\n\n switch (this.variant) {\n case 'filled':\n return 'text-surface-default';\n case 'outlined':\n if (this.isFocused || this.isHovered || this.isPressed) {\n return 'text-primary-hover';\n }\n return 'text-slate';\n case 'text':\n case 'elevated':\n return 'text-primary-hover';\n case 'tonal':\n return 'text-ink';\n default:\n return '';\n }\n }\n\n @HostListener('mouseenter')\n onMouseEnter() {\n if (!this.disabled) {\n this.isHovered = true;\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\n this.isHovered = false;\n this.isPressed = false;\n }\n\n @HostListener('mousedown')\n onMouseDown() {\n if (!this.disabled) {\n this.isPressed = true;\n }\n }\n\n @HostListener('mouseup')\n onMouseUp() {\n this.isPressed = false;\n }\n\n @HostListener('focus')\n onFocus() {\n if (!this.disabled) {\n this.isFocused = true;\n }\n }\n\n @HostListener('blur')\n onBlur() {\n this.isFocused = false;\n this.isPressed = false;\n }\n\n onClick(event: MouseEvent) {\n if (!this.disabled) {\n this.clicked.emit(event);\n }\n }\n}\n\n","<button\n [type]=\"type\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [class]=\"buttonClasses\"\n (click)=\"onClick($event)\"\n>\n <span [class]=\"stateLayerClasses\">\n <span *ngIf=\"icon && iconPosition === 'start'\" [class]=\"iconClasses\" [ngClass]=\"textClass\">\n <mat-icon class=\"text-[18px] leading-[18px] w-[18px] h-[18px]\">\n {{ icon }}\n </mat-icon>\n </span>\n <span [class]=\"labelClasses\" [ngClass]=\"textClass\">\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"icon && iconPosition === 'end'\" [class]=\"iconClasses\" [ngClass]=\"textClass\">\n <mat-icon class=\"text-[18px] leading-[18px] w-[18px] h-[18px]\">\n {{ icon }}\n </mat-icon>\n </span>\n </span>\n</button>\n\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, HostBinding } from '@angular/core';\n\ntype SearchBarSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'cqa-search-bar',\n templateUrl: './search-bar.component.html',\n styleUrls: []\n})\nexport class SearchBarComponent implements OnChanges {\n @HostBinding('attr.id') id = 'cqa-ui-root';\n @HostBinding('style.display') get displayStyle() {\n return this.fullWidth ? 'block' : 'inline-block';\n }\n @HostBinding('style.width') get widthStyle() {\n return this.fullWidth ? '100%' : 'auto';\n }\n\n /** Placeholder text for the input */\n @Input() placeholder = 'Search';\n\n /** Initial value or externally controlled value */\n @Input() value = '';\n\n /** Disable interactions */\n @Input() disabled = false;\n\n /** Whether the clear button should be visible when there is text */\n @Input() showClear = true;\n\n /** Accessible label for the input */\n @Input() ariaLabel = 'Search';\n\n /** Automatically focus the input when rendered */\n @Input() autoFocus = false;\n\n /** Search bar size */\n @Input() size: SearchBarSize = 'md';\n\n /** Stretch to fill container width */\n @Input() fullWidth = false;\n\n /** Emit on value changes (e.g. for two-way binding) */\n @Output() valueChange = new EventEmitter<string>();\n\n /** Emit when user submits search (Enter key or form submit) */\n @Output() search = new EventEmitter<string>();\n\n /** Emit when the value is cleared via the clear button */\n @Output() cleared = new EventEmitter<void>();\n\n inputValue = '';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] && changes['value'].currentValue !== undefined) {\n const newValue = changes['value'].currentValue ?? '';\n if (newValue !== this.inputValue) {\n this.inputValue = newValue;\n }\n }\n }\n\n readonly widthClasses: Record<SearchBarSize, string> = {\n sm: 'w-[295px]',\n md: 'w-[395px]',\n lg: 'w-[495px]',\n };\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement | null;\n const nextValue = target?.value ?? '';\n this.inputValue = nextValue;\n this.valueChange.emit(this.inputValue);\n }\n\n onSubmit(event: Event): void {\n event.preventDefault();\n if (this.disabled) {\n return;\n }\n\n this.search.emit(this.inputValue.trim());\n }\n\n clear(): void {\n if (this.disabled || this.inputValue === '') {\n return;\n }\n\n this.inputValue = '';\n this.valueChange.emit('');\n this.cleared.emit();\n }\n}\n","<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","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnChanges,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n HostBinding,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\ntype SegmentOption = {\n label: string;\n value: string;\n disabled?: boolean;\n};\n\n@Component({\n selector: 'cqa-segment-control',\n templateUrl: './segment-control.component.html',\n styleUrls: [],\n})\nexport class SegmentControlComponent implements OnChanges, AfterViewInit, OnDestroy {\n @HostBinding('attr.id') id = 'cqa-ui-root';\n @HostBinding('style.display') display = 'inline-block';\n\n @Input() segments: SegmentOption[] = [\n { label: 'Tab Group', value: 'tab-group-1' },\n { label: 'Tab Group', value: 'tab-group-2' },\n ];\n\n @Input() value?: string;\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<string>();\n\n @ViewChildren('segmentButton') segmentButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n @ViewChild('segmentContainer') segmentContainer?: ElementRef<HTMLDivElement>;\n\n indicatorStyle: Record<string, string> = {};\n indicatorVisible = false;\n private buttonChangesSub?: Subscription;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['segments'] || changes['value']) {\n this.ensureSelectedValue();\n }\n }\n\n ngAfterViewInit(): void {\n this.buttonChangesSub = this.segmentButtons.changes.subscribe(() => this.updateIndicator());\n this.ensureSelectedValue();\n this.updateIndicator();\n }\n\n ngOnDestroy(): void {\n this.buttonChangesSub?.unsubscribe?.();\n }\n\n trackByValue(_index: number, option: SegmentOption): string {\n return option.value;\n }\n\n isSelected(option: SegmentOption): boolean {\n return option.value === this.value;\n }\n\n select(option: SegmentOption, index: number): void {\n if (this.disabled || option.disabled) {\n return;\n }\n\n const nextValue = option.value;\n if (nextValue !== this.value) {\n this.value = nextValue;\n this.valueChange.emit(nextValue);\n }\n\n this.focusButton(index);\n this.updateIndicator();\n }\n\n onKeyDown(event: KeyboardEvent, currentIndex: number): void {\n if (this.disabled) {\n return;\n }\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault();\n this.moveSelection(1, currentIndex);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault();\n this.moveSelection(-1, currentIndex);\n break;\n case 'Home':\n event.preventDefault();\n this.selectFirstEnabled();\n break;\n case 'End':\n event.preventDefault();\n this.selectLastEnabled();\n break;\n case ' ':\n case 'Enter':\n event.preventDefault();\n this.select(this.segments[currentIndex], currentIndex);\n break;\n default:\n break;\n }\n }\n\n private moveSelection(step: 1 | -1, startIndex: number): void {\n const enabledIndexes = this.getEnabledIndexes();\n if (enabledIndexes.length === 0) {\n return;\n }\n\n const currentEnabledIndex = enabledIndexes.indexOf(startIndex);\n const fallbackIndex = this.getSelectedIndex(enabledIndexes);\n const baseIndex = currentEnabledIndex >= 0 ? currentEnabledIndex : fallbackIndex;\n const nextPosition = (baseIndex + step + enabledIndexes.length) % enabledIndexes.length;\n const targetIndex = enabledIndexes[nextPosition];\n\n this.select(this.segments[targetIndex], targetIndex);\n }\n\n private selectFirstEnabled(): void {\n const enabledIndexes = this.getEnabledIndexes();\n if (enabledIndexes.length > 0) {\n const index = enabledIndexes[0];\n this.select(this.segments[index], index);\n this.updateIndicator();\n }\n }\n\n private selectLastEnabled(): void {\n const enabledIndexes = this.getEnabledIndexes();\n if (enabledIndexes.length > 0) {\n const index = enabledIndexes[enabledIndexes.length - 1];\n this.select(this.segments[index], index);\n this.updateIndicator();\n }\n }\n\n private getEnabledIndexes(): number[] {\n return this.segments\n .map((option, index) => ({ option, index }))\n .filter(({ option }) => !option.disabled)\n .map(({ index }) => index);\n }\n\n private getSelectedIndex(enabledIndexes: number[]): number {\n const current = this.segments.findIndex((option) => option.value === this.value && !option.disabled);\n if (current >= 0) {\n return enabledIndexes.indexOf(current);\n }\n\n return 0;\n }\n\n private ensureSelectedValue(): void {\n const enabled = this.segments.filter((option) => !option.disabled);\n if (enabled.length === 0) {\n this.value = undefined;\n return;\n }\n\n if (!this.value || !this.segments.some((option) => option.value === this.value)) {\n this.value = enabled[0].value;\n this.valueChange.emit(this.value);\n const index = this.segments.indexOf(enabled[0]);\n this.focusButton(index);\n this.updateIndicator(index);\n return;\n }\n\n const selected = this.segments.find((option) => option.value === this.value);\n if (selected?.disabled) {\n this.value = enabled[0].value;\n this.valueChange.emit(this.value);\n const index = this.segments.indexOf(enabled[0]);\n this.focusButton(index);\n this.updateIndicator(index);\n }\n this.updateIndicator();\n }\n\n private focusButton(index: number): void {\n queueMicrotask(() => {\n const button = this.segmentButtons?.get(index)?.nativeElement;\n button?.focus();\n });\n }\n\n private updateIndicator(preferredIndex?: number): void {\n queueMicrotask(() => {\n const container = this.segmentContainer?.nativeElement;\n const buttons = this.segmentButtons?.toArray() ?? [];\n if (!container || buttons.length === 0) {\n this.indicatorVisible = false;\n this.indicatorStyle = {};\n return;\n }\n\n const index = preferredIndex ?? buttons.findIndex((button, idx) => this.segments[idx]?.value === this.value);\n if (index === -1) {\n this.indicatorVisible = false;\n this.indicatorStyle = {};\n return;\n }\n\n const buttonEl = buttons[index]?.nativeElement;\n if (!buttonEl) {\n this.indicatorVisible = false;\n this.indicatorStyle = {};\n return;\n }\n\n const containerRect = container.getBoundingClientRect();\n const buttonRect = buttonEl.getBoundingClientRect();\n const offsetLeft = buttonEl.offsetLeft;\n const offsetTop = buttonEl.offsetTop;\n const width = buttonEl.offsetWidth;\n const height = buttonEl.offsetHeight;\n\n const isDisabled = this.disabled || this.segments[index]?.disabled;\n this.indicatorStyle = {\n width: `${width}px`,\n height: `${height}px`,\n left: `${offsetLeft}px`,\n top: `${offsetTop}px`,\n backgroundColor: isDisabled ? '#9BA0F4' : '#3F43EE',\n };\n this.indicatorVisible = true;\n });\n }\n\n get isIndicatorVisible(): boolean {\n return this.indicatorVisible;\n }\n}\n","<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","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n HostBinding,\n} from '@angular/core';\nimport { CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { DialogButtonAlignment, DialogButtonConfig, DialogConfig, DialogContentConfig } from './dialog.models';\nimport { ButtonVariant } from '../button/button.component';\nimport { DialogRef } from './dialog-ref';\n\n@Component({\n selector: 'cqa-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DialogComponent<TResult = unknown> {\n @HostBinding('attr.id') id = 'cqa-ui-root';\n @HostBinding('style.display') display = 'block';\n\n @ViewChild(CdkPortalOutlet, { static: true }) portalOutlet?: CdkPortalOutlet;\n\n config!: DialogConfig<DialogContentConfig, TResult>;\n dialogRef!: DialogRef<TResult>;\n\n contentAttached = false;\n\n constructor(private readonly viewContainerRef: ViewContainerRef, private readonly cdr: ChangeDetectorRef) {}\n\n attachTemplate(template: TemplateRef<unknown>, context?: Record<string, unknown>): void {\n if (!this.portalOutlet) {\n return;\n }\n\n const templateContext =\n context ??\n {\n $implicit: this.config?.data,\n data: this.config?.data,\n };\n const portal = new TemplatePortal(template, this.viewContainerRef, templateContext);\n this.portalOutlet.attachTemplatePortal(portal);\n this.markContentAttached();\n }\n\n attachComponent(component: ComponentPortal<unknown>): ComponentRef<unknown> | undefined {\n if (!this.portalOutlet) {\n return undefined;\n }\n\n const componentRef = this.portalOutlet.attachComponentPortal(component);\n this.markContentAttached();\n return componentRef;\n }\n\n async onButtonClick(button: DialogButtonConfig<TResult>): Promise<void> {\n const closeOnClick = button.closeOnClick ?? true;\n let handlerResult: TResult | false | void | Promise<TResult | false | void> = undefined;\n\n if (button.handler) {\n handlerResult = button.handler(this.dialogRef);\n }\n\n const resolved = handlerResult instanceof Promise ? await handlerResult : handlerResult;\n\n if (!closeOnClick || resolved === false) {\n return;\n }\n\n this.dialogRef.close(resolved as TResult | undefined);\n }\n\n get buttonAlignmentClass(): string {\n const alignment = this.config?.buttonAlignment ?? 'right';\n return this.mapAlignmentToClass(alignment);\n }\n\n get panelClassList(): string[] {\n const baseClasses = [\n 'relative',\n 'w-full',\n 'bg-white',\n 'rounded-2xl',\n 'shadow-md',\n 'border',\n 'border-[#E5E7EB]',\n 'p-6',\n 'text-left',\n ];\n\n const custom = this.config?.panelClass;\n\n if (!custom) {\n return baseClasses;\n }\n\n return Array.isArray(custom) ? [...baseClasses, ...custom] : [...baseClasses, custom];\n }\n\n get panelStyles(): Record<string, string | undefined> {\n return {\n width: this.config?.width,\n maxWidth: this.config?.maxWidth ?? '480px',\n };\n }\n\n buttonVariant(button: DialogButtonConfig<TResult>): ButtonVariant {\n const role = this.normalizeRole(button.role);\n\n switch (role) {\n case 'secondary':\n return 'outlined';\n case 'text':\n return 'text';\n case 'tonal':\n return 'tonal';\n case 'elevated':\n return 'elevated';\n case 'filled':\n case 'primary':\n case 'warn':\n default:\n return 'filled';\n }\n }\n\n buttonHostClasses(button: DialogButtonConfig<TResult>): string[] {\n const role = this.normalizeRole(button.role);\n\n if (role === 'warn') {\n return ['cqa-dialog-btn-warn'];\n }\n\n return [];\n }\n\n private mapAlignmentToClass(alignment: DialogButtonAlignment): string {\n switch (alignment) {\n case 'left':\n return 'justify-start';\n case 'center':\n return 'justify-center';\n case 'right':\n default:\n return 'justify-end';\n }\n }\n\n private markContentAttached(): void {\n this.contentAttached = true;\n this.cdr.markForCheck();\n }\n\n private normalizeRole(role: string | undefined): string {\n return (role ?? 'secondary').trim().split(/\\s+/)[0];\n }\n}\n\n\n","<div class=\"flex w-full justify-center px-4 sm:px-6\">\n <div [ngClass]=\"panelClassList\" [ngStyle]=\"panelStyles\">\n <div class=\"flex flex-col gap-5\">\n <div class=\"flex flex-col gap-3\">\n <h2 class=\"text-lg font-semibold text-[#111827]\">\n {{ config.title }}\n </h2>\n\n <p *ngIf=\"config.description\" class=\"text-sm leading-6 text-[#4B5563]\">\n {{ config.description }}\n </p>\n\n <div\n *ngIf=\"config.warning\"\n class=\"rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm leading-5 text-red-700\"\n >\n {{ config.warning }}\n </div>\n </div>\n\n <div class=\"text-sm text-[#111827]\" [class.hidden]=\"!contentAttached\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n <div class=\"mt-4 flex flex-wrap gap-3\" [ngClass]=\"buttonAlignmentClass\">\n <cqa-button\n *ngFor=\"let button of config.buttons\"\n type=\"button\"\n [variant]=\"buttonVariant(button)\"\n [ngClass]=\"buttonHostClasses(button)\"\n (clicked)=\"onButtonClick(button)\"\n >\n {{ button.label }}\n </cqa-button>\n </div>\n </div>\n </div>\n</div>\n\n\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'cqa-ui-root',\n templateUrl: './root-wrapper.component.html',\n styles: []\n})\nexport class RootWrapperComponent {\n @Input() display: 'block' | 'inline-block' | 'inline' | 'inline-flex' | 'flex' = 'inline-block';\n @Input() width?: string;\n @Input() fullWidth = false;\n\n get rootStyles(): Record<string, string> {\n const styles: Record<string, string> = {\n display: this.fullWidth ? 'block' : this.display\n };\n \n if (this.fullWidth) {\n styles['width'] = '100%';\n } else if (this.width) {\n styles['width'] = this.width;\n }\n \n return styles;\n }\n}\n\n","<div id=\"cqa-ui-root\" [ngStyle]=\"rootStyles\">\n <ng-content></ng-content>\n</div>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ButtonComponent } from './button/button.component';\nimport { SearchBarComponent } from './search-bar/search-bar.component';\nimport { SegmentControlComponent } from './segment-control/segment-control.component';\nimport { DialogComponent } from './dialog/dialog.component';\nimport { RootWrapperComponent } from './root-wrapper/root-wrapper.component';\n// import { CardComponent } from './card/card.component';\n// import { InputComponent } from './input/input.component';\n// import { IconButtonComponent } from './icon-button/icon-button.component';\n\n@NgModule({\n declarations: [\n ButtonComponent,\n SearchBarComponent,\n SegmentControlComponent,\n DialogComponent,\n RootWrapperComponent,\n // CardComponent,\n // InputComponent,\n // IconButtonComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MatIconModule,\n OverlayModule,\n PortalModule\n ],\n exports: [\n ButtonComponent,\n SearchBarComponent,\n SegmentControlComponent,\n DialogComponent,\n RootWrapperComponent,\n // CardComponent,\n // InputComponent,\n // IconButtonComponent\n ]\n})\nexport class UiKitModule { }\n\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { Observable, Subject } from 'rxjs';\n\nexport class DialogRef<TResult = unknown> {\n private readonly closed$ = new Subject<TResult | undefined>();\n private isClosed = false;\n private componentInstance?: unknown;\n\n constructor(private readonly overlayRef: OverlayRef) {\n this.overlayRef.detachments().subscribe(() => {\n this.finishClose(undefined);\n });\n }\n\n close(result?: TResult): void {\n if (this.isClosed) {\n return;\n }\n\n this.finishClose(result);\n this.overlayRef.dispose();\n }\n\n afterClosed(): Observable<TResult | undefined> {\n return this.closed$.asObservable();\n }\n\n setComponentInstance(instance: unknown): void {\n this.componentInstance = instance;\n }\n\n getComponentInstance<TComponent>(): TComponent | undefined {\n return this.componentInstance as TComponent | undefined;\n }\n\n private finishClose(result: TResult | undefined): void {\n if (this.isClosed) {\n return;\n }\n\n this.isClosed = true;\n this.closed$.next(result);\n this.closed$.complete();\n }\n}\n\n\n","import { InjectionToken } from '@angular/core';\nimport { DialogRef } from './dialog-ref';\n\nexport const DIALOG_REF = new InjectionToken<DialogRef<any>>('CQA_DIALOG_REF');\nexport const DIALOG_DATA = new InjectionToken<any>('CQA_DIALOG_DATA');\n\n\n","import { Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { filter } from 'rxjs/operators';\nimport { DialogConfig, DialogContentConfig } from './dialog.models';\nimport { DialogRef } from './dialog-ref';\nimport { DialogComponent } from './dialog.component';\nimport { DIALOG_DATA, DIALOG_REF } from './dialog.tokens';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogService {\n constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n open<TContent extends DialogContentConfig = DialogContentConfig, TResult = unknown>(\n config: DialogConfig<TContent, TResult>\n ): DialogRef<TResult> {\n this.assertValidConfig(config);\n\n const overlayRef = this.overlay.create(this.buildOverlayConfig(config));\n const dialogRef = new DialogRef<TResult>(overlayRef);\n\n const injector = Injector.create({\n parent: this.injector,\n providers: [\n { provide: DIALOG_REF, useValue: dialogRef },\n { provide: DIALOG_DATA, useValue: config.data },\n ],\n });\n\n const containerPortal = new ComponentPortal(DialogComponent, undefined, injector);\n const containerRef = overlayRef.attach(containerPortal);\n const containerInstance = containerRef.instance as DialogComponent<TResult>;\n\n containerInstance.config = config;\n containerInstance.dialogRef = dialogRef;\n\n if (config.content?.type === 'template') {\n containerInstance.attachTemplate(\n config.content.template,\n config.content.context ?? {\n $implicit: config.data,\n data: config.data,\n }\n );\n }\n\n if (config.content?.type === 'component') {\n const componentPortal = new ComponentPortal(\n config.content.component,\n undefined,\n Injector.create({\n parent: injector,\n providers: [\n { provide: DIALOG_REF, useValue: dialogRef },\n { provide: DIALOG_DATA, useValue: config.data },\n ],\n })\n );\n\n const componentRef = containerInstance.attachComponent(componentPortal);\n\n if (componentRef && config.content.inputs) {\n Object.entries(config.content.inputs).forEach(([key, value]) => {\n (componentRef.instance as Record<string, unknown>)[key] = value;\n });\n componentRef.changeDetectorRef.markForCheck();\n }\n\n if (componentRef) {\n dialogRef.setComponentInstance(componentRef.instance);\n }\n }\n\n containerRef.changeDetectorRef.markForCheck();\n\n if (!config.disableClose) {\n overlayRef.backdropClick().subscribe(() => dialogRef.close());\n overlayRef\n .keydownEvents()\n .pipe(\n filter((event): event is KeyboardEvent => {\n return (event as KeyboardEvent).key === 'Escape' || (event as KeyboardEvent).key === 'Esc';\n })\n )\n .subscribe(() => dialogRef.close());\n }\n\n return dialogRef;\n }\n\n private assertValidConfig<TContent extends DialogContentConfig, TResult>(\n config: DialogConfig<TContent, TResult>\n ): void {\n if (!config.title) {\n throw new Error('Dialog title is required.');\n }\n\n if (!config.buttons || config.buttons.length < 2) {\n throw new Error('Dialog requires at least two buttons to be provided.');\n }\n }\n\n private buildOverlayConfig<TContent extends DialogContentConfig, TResult>(\n config: DialogConfig<TContent, TResult>\n ): OverlayConfig {\n const panelClass = Array.isArray(config.panelClass)\n ? config.panelClass\n : config.panelClass\n ? [config.panelClass]\n : [];\n\n return new OverlayConfig({\n hasBackdrop: true,\n backdropClass: ['cdk-overlay-dark-backdrop', 'cqa-dialog-backdrop'],\n scrollStrategy: this.overlay.scrollStrategies.block(),\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n width: config.width,\n maxWidth: config.maxWidth ?? '90vw',\n panelClass: ['cqa-dialog-panel', ...panelClass],\n });\n }\n}\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i1.ButtonComponent"],"mappings":"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"}