@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
package/README.md CHANGED
@@ -7,24 +7,26 @@ Component library for Angular 13+, built with Tailwind CSS tokens and Storybook-
7
7
  ## 📦 Installation
8
8
 
9
9
  ```bash
10
- npm install cqa-ui
10
+ npm install @cqa-lib/cqa-ui
11
11
  ```
12
12
 
13
13
  ### Peer dependencies
14
14
 
15
15
  ```bash
16
- npm install @angular/common@^13.4.0 @angular/core@^13.4.0 @angular/forms@^13.4.0 @angular/material@^13.3.9 rxjs@^7.5.0
16
+ npm install @angular/common@^13.4.0 @angular/core@^13.4.0 @angular/forms@^13.4.0 @angular/material@^13.3.9 @angular/cdk@^13.3.9 rxjs@^6.6.7 || ^7.5.0
17
17
  ```
18
18
 
19
19
  ---
20
20
 
21
21
  ## 🚀 Quick Start
22
22
 
23
+ ### Step 1: Import the Module
24
+
23
25
  ```ts
24
26
  // app.module.ts
25
27
  import { NgModule } from '@angular/core';
26
28
  import { BrowserModule } from '@angular/platform-browser';
27
- import { UiKitModule } from 'cqa-ui';
29
+ import { UiKitModule } from '@cqa-lib/cqa-ui';
28
30
 
29
31
  import { AppComponent } from './app.component';
30
32
 
@@ -39,6 +41,49 @@ import { AppComponent } from './app.component';
39
41
  export class AppModule {}
40
42
  ```
41
43
 
44
+ ### Step 2: Import the Styles
45
+
46
+ **Option A: In `angular.json`** (Recommended)
47
+
48
+ ```json
49
+ {
50
+ "projects": {
51
+ "your-project": {
52
+ "architect": {
53
+ "build": {
54
+ "options": {
55
+ "styles": [
56
+ "node_modules/@cqa-lib/cqa-ui/styles.css",
57
+ "src/styles.css"
58
+ ]
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
67
+ **Option B: In `styles.css`**
68
+
69
+ ```css
70
+ @import '@cqa-lib/cqa-ui/styles.css';
71
+ ```
72
+
73
+ ### Step 3: Add Angular Material Icon Font
74
+
75
+ Add this to your `index.html`:
76
+
77
+ ```html
78
+ <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
79
+ ```
80
+
81
+ Or in `styles.css`:
82
+
83
+ ```css
84
+ @import url('https://fonts.googleapis.com/icon?family=Material+Icons');
85
+ ```
86
+
42
87
  ---
43
88
 
44
89
  ## 💡 Usage Examples
@@ -84,7 +129,7 @@ export class AppModule {}
84
129
  ### Dialog
85
130
 
86
131
  ```ts
87
- import { DialogService } from 'cqa-ui';
132
+ import { DialogService } from '@cqa-lib/cqa-ui';
88
133
 
89
134
  constructor(private readonly dialog: DialogService) {}
90
135
 
@@ -107,6 +152,47 @@ openDialog(): void {
107
152
 
108
153
  ---
109
154
 
155
+ ## 🔧 Troubleshooting
156
+
157
+ ### Component renders as empty tag (no inner HTML)
158
+
159
+ If you see `<cqa-search-bar></cqa-search-bar>` without any inner content, check:
160
+
161
+ 1. **Missing styles import** - Add to `angular.json`:
162
+ ```json
163
+ "styles": [
164
+ "node_modules/@cqa-lib/cqa-ui/styles.css",
165
+ "src/styles.css"
166
+ ]
167
+ ```
168
+
169
+ 2. **Missing Angular Material Icon font** - Add to `index.html`:
170
+ ```html
171
+ <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
172
+ ```
173
+
174
+ 3. **Check browser console** for errors:
175
+ - Missing peer dependencies (`@angular/material`, `@angular/cdk`)
176
+ - Module import errors
177
+ - Template compilation errors
178
+
179
+ 4. **Verify module import** in your `app.module.ts`:
180
+ ```ts
181
+ import { UiKitModule } from '@cqa-lib/cqa-ui';
182
+
183
+ @NgModule({
184
+ imports: [UiKitModule, ...]
185
+ })
186
+ ```
187
+
188
+ 5. **Clear Angular cache and rebuild**:
189
+ ```bash
190
+ rm -rf .angular
191
+ npm start # or ng serve
192
+ ```
193
+
194
+ ---
195
+
110
196
  ## 📚 Storybook
111
197
 
112
198
  ```bash
@@ -0,0 +1,226 @@
1
+ # CQA UI
2
+
3
+ Component library for Angular 13+, built with Tailwind CSS tokens and Storybook-driven documentation.
4
+
5
+ ---
6
+
7
+ ## 📦 Installation
8
+
9
+ ```bash
10
+ npm install @cqa-lib/cqa-ui
11
+ ```
12
+
13
+ ### Peer dependencies
14
+
15
+ ```bash
16
+ npm install @angular/common@^13.4.0 @angular/core@^13.4.0 @angular/forms@^13.4.0 @angular/material@^13.3.9 @angular/cdk@^13.3.9 rxjs@^6.6.7 || ^7.5.0
17
+ ```
18
+
19
+ ---
20
+
21
+ ## 🚀 Quick Start
22
+
23
+ ### Step 1: Import the Module
24
+
25
+ ```ts
26
+ // app.module.ts
27
+ import { NgModule } from '@angular/core';
28
+ import { BrowserModule } from '@angular/platform-browser';
29
+ import { UiKitModule } from '@cqa-lib/cqa-ui';
30
+
31
+ import { AppComponent } from './app.component';
32
+
33
+ @NgModule({
34
+ declarations: [AppComponent],
35
+ imports: [
36
+ BrowserModule,
37
+ UiKitModule
38
+ ],
39
+ bootstrap: [AppComponent]
40
+ })
41
+ export class AppModule {}
42
+ ```
43
+
44
+ ### Step 2: Import the Styles
45
+
46
+ **Option A: In `angular.json`** (Recommended)
47
+
48
+ ```json
49
+ {
50
+ "projects": {
51
+ "your-project": {
52
+ "architect": {
53
+ "build": {
54
+ "options": {
55
+ "styles": [
56
+ "node_modules/@cqa-lib/cqa-ui/styles.css",
57
+ "src/styles.css"
58
+ ]
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
67
+ **Option B: In `styles.css`**
68
+
69
+ ```css
70
+ @import '@cqa-lib/cqa-ui/styles.css';
71
+ ```
72
+
73
+ ### Step 3: Add Angular Material Icon Font
74
+
75
+ Add this to your `index.html`:
76
+
77
+ ```html
78
+ <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
79
+ ```
80
+
81
+ Or in `styles.css`:
82
+
83
+ ```css
84
+ @import url('https://fonts.googleapis.com/icon?family=Material+Icons');
85
+ ```
86
+
87
+ ---
88
+
89
+ ## 💡 Usage Examples
90
+
91
+ ### Button
92
+
93
+ ```html
94
+ <cqa-button variant="filled" icon="save" (clicked)="onSave()">
95
+ Save changes
96
+ </cqa-button>
97
+
98
+ <cqa-button variant="outlined" [disabled]="isSubmitting">
99
+ Cancel
100
+ </cqa-button>
101
+ ```
102
+
103
+ ### Search bar
104
+
105
+ ```html
106
+ <cqa-search-bar
107
+ placeholder="Search components"
108
+ [value]="query"
109
+ [showClear]="true"
110
+ (valueChange)="query = $event"
111
+ (search)="onSearch($event)"
112
+ ></cqa-search-bar>
113
+ ```
114
+
115
+ ### Segment control
116
+
117
+ ```html
118
+ <cqa-segment-control
119
+ [segments]="[
120
+ { label: 'Overview', value: 'overview' },
121
+ { label: 'Analytics', value: 'analytics' },
122
+ { label: 'Settings', value: 'settings', disabled: true }
123
+ ]"
124
+ [value]="currentTab"
125
+ (valueChange)="currentTab = $event"
126
+ ></cqa-segment-control>
127
+ ```
128
+
129
+ ### Dialog
130
+
131
+ ```ts
132
+ import { DialogService } from '@cqa-lib/cqa-ui';
133
+
134
+ constructor(private readonly dialog: DialogService) {}
135
+
136
+ openDialog(): void {
137
+ this.dialog.open({
138
+ title: 'Delete dashboard',
139
+ description: 'Deleting this dashboard will remove it for all collaborators.',
140
+ warning: 'This action cannot be undone.',
141
+ content: {
142
+ type: 'text',
143
+ text: 'Are you sure you want to continue?'
144
+ },
145
+ buttons: [
146
+ { label: 'Cancel', role: 'secondary' },
147
+ { label: 'Delete', role: 'warn', handler: () => 'delete' }
148
+ ]
149
+ });
150
+ }
151
+ ```
152
+
153
+ ---
154
+
155
+ ## 🔧 Troubleshooting
156
+
157
+ ### Component renders as empty tag (no inner HTML)
158
+
159
+ If you see `<cqa-search-bar></cqa-search-bar>` without any inner content, check:
160
+
161
+ 1. **Missing styles import** - Add to `angular.json`:
162
+ ```json
163
+ "styles": [
164
+ "node_modules/@cqa-lib/cqa-ui/styles.css",
165
+ "src/styles.css"
166
+ ]
167
+ ```
168
+
169
+ 2. **Missing Angular Material Icon font** - Add to `index.html`:
170
+ ```html
171
+ <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
172
+ ```
173
+
174
+ 3. **Check browser console** for errors:
175
+ - Missing peer dependencies (`@angular/material`, `@angular/cdk`)
176
+ - Module import errors
177
+ - Template compilation errors
178
+
179
+ 4. **Verify module import** in your `app.module.ts`:
180
+ ```ts
181
+ import { UiKitModule } from '@cqa-lib/cqa-ui';
182
+
183
+ @NgModule({
184
+ imports: [UiKitModule, ...]
185
+ })
186
+ ```
187
+
188
+ 5. **Clear Angular cache and rebuild**:
189
+ ```bash
190
+ rm -rf .angular
191
+ npm start # or ng serve
192
+ ```
193
+
194
+ ---
195
+
196
+ ## 📚 Storybook
197
+
198
+ ```bash
199
+ npm run storybook
200
+ ```
201
+
202
+ View component documentation and interactive examples at `http://localhost:6006`.
203
+
204
+ ---
205
+
206
+ ## 🛠 Development
207
+
208
+ ```bash
209
+ npm install
210
+ npm run build:cqa-ui # build the library bundle
211
+ npm run storybook # start Storybook
212
+ npm run build-storybook # static Storybook build
213
+ ```
214
+
215
+ ### Publish workflow
216
+
217
+ 1. Update version in `package.json`
218
+ 2. `npm run build:cqa-ui`
219
+ 3. `npm publish dist/cqa-ui`
220
+
221
+ ---
222
+
223
+ ## 📄 License
224
+
225
+ MIT — contributions and issues welcome!
226
+
@@ -0,0 +1,257 @@
1
+ import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/icon";
4
+ import * as i2 from "@angular/common";
5
+ export class ButtonComponent {
6
+ constructor() {
7
+ this.variant = 'filled';
8
+ this.disabled = false;
9
+ this.iconPosition = 'start';
10
+ this.type = 'button';
11
+ this.clicked = new EventEmitter();
12
+ // Internal state tracking
13
+ this.isHovered = false;
14
+ this.isFocused = false;
15
+ this.isPressed = false;
16
+ }
17
+ get hasIcon() {
18
+ return !!this.icon;
19
+ }
20
+ get buttonClasses() {
21
+ const baseClasses = [
22
+ 'flex',
23
+ 'flex-col',
24
+ 'justify-center',
25
+ 'items-center',
26
+ 'p-0',
27
+ 'gap-2',
28
+ 'rounded-lg',
29
+ 'cursor-pointer',
30
+ 'font-inter',
31
+ 'font-semibold',
32
+ 'text-sm',
33
+ 'leading-[14px]',
34
+ 'transition-all',
35
+ 'duration-200',
36
+ 'outline-none'
37
+ ];
38
+ if (this.disabled) {
39
+ baseClasses.push('cursor-not-allowed');
40
+ }
41
+ // Add variant and state specific classes
42
+ const variantClasses = this.getVariantClasses();
43
+ return [...baseClasses, ...variantClasses].join(' ');
44
+ }
45
+ get stateLayerClasses() {
46
+ const classes = [
47
+ 'flex',
48
+ 'flex-row',
49
+ 'justify-center',
50
+ 'items-center',
51
+ 'gap-2',
52
+ 'w-full',
53
+ 'h-full',
54
+ 'py-[10px]',
55
+ 'px-6',
56
+ ];
57
+ return classes.join(' ');
58
+ }
59
+ get labelClasses() {
60
+ const classes = [
61
+ 'flex',
62
+ 'items-center',
63
+ 'text-center',
64
+ 'font-inter',
65
+ 'font-semibold',
66
+ 'text-sm',
67
+ 'leading-[14px]',
68
+ 'flex-none',
69
+ this.textClass,
70
+ ];
71
+ if (this.disabled) {
72
+ classes.push('opacity-[0.38]');
73
+ }
74
+ return classes.join(' ');
75
+ }
76
+ get iconClasses() {
77
+ const classes = [
78
+ 'flex',
79
+ 'items-center',
80
+ 'justify-center',
81
+ 'w-[14px]',
82
+ 'h-[14px]',
83
+ 'shrink-0',
84
+ 'flex-none'
85
+ ];
86
+ if (this.disabled) {
87
+ classes.push('opacity-[0.38]');
88
+ }
89
+ return classes.join(' ');
90
+ }
91
+ getVariantClasses() {
92
+ const classes = [];
93
+ if (this.variant === 'filled') {
94
+ if (this.disabled) {
95
+ classes.push('bg-primary-muted');
96
+ }
97
+ else {
98
+ classes.push('bg-primary');
99
+ if (this.isHovered) {
100
+ classes.push('shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_1px_3px_1px_rgba(0,0,0,0.15)]');
101
+ }
102
+ }
103
+ }
104
+ else if (this.variant === 'outlined') {
105
+ if (this.disabled) {
106
+ classes.push('bg-transparent', 'border', 'border-primary-muted');
107
+ }
108
+ else {
109
+ if (this.isFocused) {
110
+ classes.push('bg-primary-surface-alt', 'border', 'border-primary-hover', 'shadow-[0px_4px_4px_rgba(0,0,0,0.25)]');
111
+ }
112
+ else if (this.isHovered || this.isPressed) {
113
+ classes.push('bg-primary-surface', 'border', 'border-primary');
114
+ }
115
+ else {
116
+ classes.push('bg-transparent', 'border', 'border-slate');
117
+ }
118
+ }
119
+ }
120
+ else if (this.variant === 'text') {
121
+ if (this.disabled) {
122
+ classes.push('bg-transparent');
123
+ }
124
+ else {
125
+ classes.push('bg-transparent');
126
+ if (this.isHovered || this.isFocused || this.isPressed) {
127
+ classes.push('bg-primary-surface');
128
+ }
129
+ }
130
+ }
131
+ else if (this.variant === 'elevated') {
132
+ if (this.disabled) {
133
+ classes.push('bg-primary-muted', 'shadow-none');
134
+ }
135
+ else {
136
+ if (this.isFocused) {
137
+ classes.push('bg-primary-surface-alt', 'shadow-[0px_4px_4px_rgba(0,0,0,0.25)]');
138
+ }
139
+ else if (this.isPressed) {
140
+ 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)]');
141
+ }
142
+ else if (this.isHovered) {
143
+ 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)]');
144
+ }
145
+ else {
146
+ 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)]');
147
+ }
148
+ }
149
+ }
150
+ else if (this.variant === 'tonal') {
151
+ if (this.disabled) {
152
+ classes.push('bg-primary-muted');
153
+ }
154
+ else {
155
+ if (this.isHovered) {
156
+ 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)]');
157
+ }
158
+ else {
159
+ classes.push('bg-primary-surface-alt');
160
+ }
161
+ }
162
+ }
163
+ return classes;
164
+ }
165
+ get textClass() {
166
+ if (this.disabled) {
167
+ if (this.variant === 'outlined' || this.variant === 'text') {
168
+ return 'text-ink';
169
+ }
170
+ return 'text-ink-muted';
171
+ }
172
+ switch (this.variant) {
173
+ case 'filled':
174
+ return 'text-surface-default';
175
+ case 'outlined':
176
+ if (this.isFocused || this.isHovered || this.isPressed) {
177
+ return 'text-primary-hover';
178
+ }
179
+ return 'text-slate';
180
+ case 'text':
181
+ case 'elevated':
182
+ return 'text-primary-hover';
183
+ case 'tonal':
184
+ return 'text-ink';
185
+ default:
186
+ return '';
187
+ }
188
+ }
189
+ onMouseEnter() {
190
+ if (!this.disabled) {
191
+ this.isHovered = true;
192
+ }
193
+ }
194
+ onMouseLeave() {
195
+ this.isHovered = false;
196
+ this.isPressed = false;
197
+ }
198
+ onMouseDown() {
199
+ if (!this.disabled) {
200
+ this.isPressed = true;
201
+ }
202
+ }
203
+ onMouseUp() {
204
+ this.isPressed = false;
205
+ }
206
+ onFocus() {
207
+ if (!this.disabled) {
208
+ this.isFocused = true;
209
+ }
210
+ }
211
+ onBlur() {
212
+ this.isFocused = false;
213
+ this.isPressed = false;
214
+ }
215
+ onClick(event) {
216
+ if (!this.disabled) {
217
+ this.clicked.emit(event);
218
+ }
219
+ }
220
+ }
221
+ ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
222
+ ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ButtonComponent, selector: "cqa-button", inputs: { variant: "variant", disabled: "disabled", icon: "icon", iconPosition: "iconPosition", type: "type" }, outputs: { clicked: "clicked" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "mousedown": "onMouseDown()", "mouseup": "onMouseUp()", "focus": "onFocus()", "blur": "onBlur()" } }, ngImport: i0, template: "<div id=\"cqa-ui-root\" style=\"display: inline-block; width: auto;\">\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</div>\n\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ButtonComponent, decorators: [{
224
+ type: Component,
225
+ args: [{ selector: 'cqa-button', template: "<div id=\"cqa-ui-root\" style=\"display: inline-block; width: auto;\">\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</div>\n\n", styles: [] }]
226
+ }], propDecorators: { variant: [{
227
+ type: Input
228
+ }], disabled: [{
229
+ type: Input
230
+ }], icon: [{
231
+ type: Input
232
+ }], iconPosition: [{
233
+ type: Input
234
+ }], type: [{
235
+ type: Input
236
+ }], clicked: [{
237
+ type: Output
238
+ }], onMouseEnter: [{
239
+ type: HostListener,
240
+ args: ['mouseenter']
241
+ }], onMouseLeave: [{
242
+ type: HostListener,
243
+ args: ['mouseleave']
244
+ }], onMouseDown: [{
245
+ type: HostListener,
246
+ args: ['mousedown']
247
+ }], onMouseUp: [{
248
+ type: HostListener,
249
+ args: ['mouseup']
250
+ }], onFocus: [{
251
+ type: HostListener,
252
+ args: ['focus']
253
+ }], onBlur: [{
254
+ type: HostListener,
255
+ args: ['blur']
256
+ }] } });
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFTckYsTUFBTSxPQUFPLGVBQWU7SUFMNUI7UUFPVyxZQUFPLEdBQWtCLFFBQVEsQ0FBQztRQUNsQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLGlCQUFZLEdBQW9CLE9BQU8sQ0FBQztRQUN4QyxTQUFJLEdBQWtDLFFBQVEsQ0FBQztRQUM5QyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUVuRCwwQkFBMEI7UUFDMUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGNBQVMsR0FBWSxLQUFLLENBQUM7S0EwTjVCO0lBeE5DLElBQUksT0FBTztRQUNULE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLE1BQU07WUFDTixVQUFVO1lBQ1YsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFDZCxLQUFLO1lBQ0wsT0FBTztZQUNQLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsWUFBWTtZQUNaLGVBQWU7WUFDZixTQUFTO1lBQ1QsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2QsY0FBYztTQUNmLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsV0FBVyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NB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LElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFHRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBR0QsTUFBTTtRQUNKLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs0R0FyT1UsZUFBZTtnR0FBZixlQUFlLDhYQ1Q1Qiw0NEJBMEJBOzJGRGpCYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFlBQVk7OEJBTWIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLE9BQU87c0JBQWhCLE1BQU07Z0JBcUxQLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZO2dCQVExQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWTtnQkFPMUIsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVc7Z0JBUXpCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTO2dCQU12QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTztnQkFRckIsTUFBTTtzQkFETCxZQUFZO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIEJ1dHRvblZhcmlhbnQgPSAnZmlsbGVkJyB8ICdvdXRsaW5lZCcgfCAndGV4dCcgfCAnZWxldmF0ZWQnIHwgJ3RvbmFsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkNvbXBvbmVudCB7XG5cbiAgQElucHV0KCkgdmFyaWFudDogQnV0dG9uVmFyaWFudCA9ICdmaWxsZWQnO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpY29uPzogc3RyaW5nO1xuICBASW5wdXQoKSBpY29uUG9zaXRpb246ICdzdGFydCcgfCAnZW5kJyA9ICdzdGFydCc7XG4gIEBJbnB1dCgpIHR5cGU6ICdidXR0b24nIHwgJ3N1Ym1pdCcgfCAncmVzZXQnID0gJ2J1dHRvbic7XG4gIEBPdXRwdXQoKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gIC8vIEludGVybmFsIHN0YXRlIHRyYWNraW5nXG4gIGlzSG92ZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNQcmVzc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IGhhc0ljb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pY29uO1xuICB9XG5cbiAgZ2V0IGJ1dHRvbkNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlQ2xhc3NlcyA9IFtcbiAgICAgICdmbGV4JyxcbiAgICAgICdmbGV4LWNvbCcsXG4gICAgICAnanVzdGlmeS1jZW50ZXInLFxuICAgICAgJ2l0ZW1zLWNlbnRlcicsXG4gICAgICAncC0wJyxcbiAgICAgICdnYXAtMicsXG4gICAgICAncm91bmRlZC1sZycsXG4gICAgICAnY3Vyc29yLXBvaW50ZXInLFxuICAgICAgJ2ZvbnQtaW50ZXInLFxuICAgICAgJ2ZvbnQtc2VtaWJvbGQnLFxuICAgICAgJ3RleHQtc20nLFxuICAgICAgJ2xlYWRpbmctWzE0cHhdJyxcbiAgICAgICd0cmFuc2l0aW9uLWFsbCcsXG4gICAgICAnZHVyYXRpb24tMjAwJyxcbiAgICAgICdvdXRsaW5lLW5vbmUnXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICBiYXNlQ2xhc3Nlcy5wdXNoKCdjdXJzb3Itbm90LWFsbG93ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdmFyaWFudCBhbmQgc3RhdGUgc3BlY2lmaWMgY2xhc3Nlc1xuICAgIGNvbnN0IHZhcmlhbnRDbGFzc2VzID0gdGhpcy5nZXRWYXJpYW50Q2xhc3NlcygpO1xuICAgIFxuICAgIHJldHVybiBbLi4uYmFzZUNsYXNzZXMsIC4uLnZhcmlhbnRDbGFzc2VzXS5qb2luKCcgJyk7XG4gIH1cblxuICBnZXQgc3RhdGVMYXllckNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc2VzID0gW1xuICAgICAgJ2ZsZXgnLFxuICAgICAgJ2ZsZXgtcm93JyxcbiAgICAgICdqdXN0aWZ5LWNlbnRlcicsXG4gICAgICAnaXRlbXMtY2VudGVyJyxcbiAgICAgICdnYXAtMicsXG4gICAgICAndy1mdWxsJyxcbiAgICAgICdoLWZ1bGwnLFxuICAgICAgJ3B5LVsxMHB4XScsXG4gICAgICAncHgtNicsXG4gICAgXTtcblxuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldCBsYWJlbENsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc2VzID0gW1xuICAgICAgJ2ZsZXgnLFxuICAgICAgJ2l0ZW1zLWNlbnRlcicsXG4gICAgICAndGV4dC1jZW50ZXInLFxuICAgICAgJ2ZvbnQtaW50ZXInLFxuICAgICAgJ2ZvbnQtc2VtaWJvbGQnLFxuICAgICAgJ3RleHQtc20nLFxuICAgICAgJ2xlYWRpbmctWzE0cHhdJyxcbiAgICAgICdmbGV4LW5vbmUnLFxuICAgICAgdGhpcy50ZXh0Q2xhc3MsXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ29wYWNpdHktWzAuMzhdJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgZ2V0IGljb25DbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtcbiAgICAgICdmbGV4JyxcbiAgICAgICdpdGVtcy1jZW50ZXInLFxuICAgICAgJ2p1c3RpZnktY2VudGVyJyxcbiAgICAgICd3LVsxNHB4XScsXG4gICAgICAnaC1bMTRweF0nLFxuICAgICAgJ3Nocmluay0wJyxcbiAgICAgICdmbGV4LW5vbmUnXG4gICAgXTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdvcGFjaXR5LVswLjM4XScpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhcmlhbnRDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2ZpbGxlZCcpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnYmctcHJpbWFyeS1tdXRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5Jyk7XG4gICAgICAgIGlmICh0aGlzLmlzSG92ZXJlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnc2hhZG93LVswcHhfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMyksMHB4XzFweF8zcHhfMXB4X3JnYmEoMCwwLDAsMC4xNSldJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy10cmFuc3BhcmVudCcsICdib3JkZXInLCAnYm9yZGVyLXByaW1hcnktbXV0ZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYmctcHJpbWFyeS1zdXJmYWNlLWFsdCcsICdib3JkZXInLCAnYm9yZGVyLXByaW1hcnktaG92ZXInLCAnc2hhZG93LVswcHhfNHB4XzRweF9yZ2JhKDAsMCwwLDAuMjUpXScpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNIb3ZlcmVkIHx8IHRoaXMuaXNQcmVzc2VkKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5LXN1cmZhY2UnLCAnYm9yZGVyJywgJ2JvcmRlci1wcmltYXJ5Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy10cmFuc3BhcmVudCcsICdib3JkZXInLCAnYm9yZGVyLXNsYXRlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudCA9PT0gJ3RleHQnKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXRyYW5zcGFyZW50Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXRyYW5zcGFyZW50Jyk7XG4gICAgICAgIGlmICh0aGlzLmlzSG92ZXJlZCB8fCB0aGlzLmlzRm9jdXNlZCB8fCB0aGlzLmlzUHJlc3NlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYmctcHJpbWFyeS1zdXJmYWNlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudCA9PT0gJ2VsZXZhdGVkJykge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5LW11dGVkJywgJ3NoYWRvdy1ub25lJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXByaW1hcnktc3VyZmFjZS1hbHQnLCAnc2hhZG93LVswcHhfNHB4XzRweF9yZ2JhKDAsMCwwLDAuMjUpXScpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNQcmVzc2VkKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5LXN1cmZhY2UnLCAnc2hhZG93LVswcHhfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMyksMHB4XzFweF8zcHhfMXB4X3JnYmEoMCwwLDAsMC4xNSldJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hvdmVyZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXByaW1hcnktc3VyZmFjZS1hbHQnLCAnc2hhZG93LVswcHhfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMyksMHB4XzJweF82cHhfMnB4X3JnYmEoMCwwLDAsMC4xNSldJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5LXN1cmZhY2UnLCAnc2hhZG93LVswcHhfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMyksMHB4XzFweF8zcHhfMXB4X3JnYmEoMCwwLDAsMC4xNSldJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudmFyaWFudCA9PT0gJ3RvbmFsJykge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5LW11dGVkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pc0hvdmVyZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXRvbmFsLWhvdmVyJywgJ3NoYWRvdy1bMHB4XzFweF8ycHhfcmdiYSgwLDAsMCwwLjMpLDBweF8xcHhfM3B4XzFweF9yZ2JhKDAsMCwwLDAuMTUpXScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYmctcHJpbWFyeS1zdXJmYWNlLWFsdCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICBnZXQgdGV4dENsYXNzKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgfHwgdGhpcy52YXJpYW50ID09PSAndGV4dCcpIHtcbiAgICAgICAgcmV0dXJuICd0ZXh0LWluayc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3RleHQtaW5rLW11dGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMudmFyaWFudCkge1xuICAgICAgY2FzZSAnZmlsbGVkJzpcbiAgICAgICAgcmV0dXJuICd0ZXh0LXN1cmZhY2UtZGVmYXVsdCc7XG4gICAgICBjYXNlICdvdXRsaW5lZCc6XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCB8fCB0aGlzLmlzSG92ZXJlZCB8fCB0aGlzLmlzUHJlc3NlZCkge1xuICAgICAgICAgIHJldHVybiAndGV4dC1wcmltYXJ5LWhvdmVyJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ3RleHQtc2xhdGUnO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICBjYXNlICdlbGV2YXRlZCc6XG4gICAgICAgIHJldHVybiAndGV4dC1wcmltYXJ5LWhvdmVyJztcbiAgICAgIGNhc2UgJ3RvbmFsJzpcbiAgICAgICAgcmV0dXJuICd0ZXh0LWluayc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpXG4gIG9uTW91c2VFbnRlcigpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuaXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgdGhpcy5pc1ByZXNzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicpXG4gIG9uTW91c2VEb3duKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pc1ByZXNzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnKVxuICBvbk1vdXNlVXAoKSB7XG4gICAgdGhpcy5pc1ByZXNzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgb25Gb2N1cygpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgb25CbHVyKCkge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5pc1ByZXNzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2xpY2tlZC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cblxuIiwiPGRpdiBpZD1cImNxYS11aS1yb290XCIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiBhdXRvO1wiPlxuICA8YnV0dG9uXG4gICAgW3R5cGVdPVwidHlwZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3Nlc1wiXG4gICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gID5cbiAgICA8c3BhbiBbY2xhc3NdPVwic3RhdGVMYXllckNsYXNzZXNcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaWNvbiAmJiBpY29uUG9zaXRpb24gPT09ICdzdGFydCdcIiBbY2xhc3NdPVwiaWNvbkNsYXNzZXNcIiBbbmdDbGFzc109XCJ0ZXh0Q2xhc3NcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidGV4dC1bMThweF0gbGVhZGluZy1bMThweF0gdy1bMThweF0gaC1bMThweF1cIj5cbiAgICAgICAgICB7eyBpY29uIH19XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBbY2xhc3NdPVwibGFiZWxDbGFzc2VzXCIgW25nQ2xhc3NdPVwidGV4dENsYXNzXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaWNvbiAmJiBpY29uUG9zaXRpb24gPT09ICdlbmQnXCIgW2NsYXNzXT1cImljb25DbGFzc2VzXCIgW25nQ2xhc3NdPVwidGV4dENsYXNzXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRleHQtWzE4cHhdIGxlYWRpbmctWzE4cHhdIHctWzE4cHhdIGgtWzE4cHhdXCI+XG4gICAgICAgICAge3sgaWNvbiB9fVxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuIl19