@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/package.json CHANGED
@@ -1,7 +1,18 @@
1
1
  {
2
2
  "name": "@cqa-lib/cqa-ui",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "UI Kit library for Angular 13.4",
5
+ "scripts": {
6
+ "build:cqa-ui": "ng-packagr -p ng-package.json && npm run build:tailwind && npm run fix:package",
7
+ "build:tailwind": "tailwindcss -i ./src/lib/styles/tailwind.css -o ./dist/cqa-ui/styles.css --minify",
8
+ "watch:tailwind": "tailwindcss -i ./src/lib/styles/tailwind.css -o ./dist/cqa-ui/styles.css --watch",
9
+ "fix:package": "node -e \"const fs=require('fs');const p=JSON.parse(fs.readFileSync('dist/cqa-ui/package.json','utf8'));delete p.files;if(!p.publishConfig){p.publishConfig={};}p.publishConfig.access='public';fs.writeFileSync('dist/cqa-ui/package.json',JSON.stringify(p,null,2)+'\\n')\"",
10
+ "storybook": "start-storybook -p 6006",
11
+ "build-storybook": "build-storybook"
12
+ },
13
+ "files": [
14
+ "dist/"
15
+ ],
5
16
  "keywords": [
6
17
  "angular",
7
18
  "library",
@@ -30,27 +41,42 @@
30
41
  "@angular/material": "^13.3.9",
31
42
  "rxjs": "^6.6.7 || ^7.5.0"
32
43
  },
33
- "module": "fesm2015/cqa-lib-cqa-ui.mjs",
34
- "es2020": "fesm2020/cqa-lib-cqa-ui.mjs",
35
- "esm2020": "esm2020/cqa-lib-cqa-ui.mjs",
36
- "fesm2020": "fesm2020/cqa-lib-cqa-ui.mjs",
37
- "fesm2015": "fesm2015/cqa-lib-cqa-ui.mjs",
38
- "typings": "cqa-lib-cqa-ui.d.ts",
39
- "exports": {
40
- "./package.json": {
41
- "default": "./package.json"
42
- },
43
- ".": {
44
- "types": "./cqa-lib-cqa-ui.d.ts",
45
- "esm2020": "./esm2020/cqa-lib-cqa-ui.mjs",
46
- "es2020": "./fesm2020/cqa-lib-cqa-ui.mjs",
47
- "es2015": "./fesm2015/cqa-lib-cqa-ui.mjs",
48
- "node": "./fesm2015/cqa-lib-cqa-ui.mjs",
49
- "default": "./fesm2020/cqa-lib-cqa-ui.mjs"
50
- }
51
- },
52
- "sideEffects": false,
53
- "dependencies": {
54
- "tslib": "^2.3.0"
44
+ "devDependencies": {
45
+ "@angular-devkit/architect": "^0.1303.11",
46
+ "@angular-devkit/build-angular": "^13.3.11",
47
+ "@angular-devkit/core": "^13.3.11",
48
+ "@angular/animations": "^13.4.0",
49
+ "@angular/cdk": "^13.3.9",
50
+ "@angular/cli": "^13.3.11",
51
+ "@angular/common": "^13.4.0",
52
+ "@angular/compiler": "^13.4.0",
53
+ "@angular/compiler-cli": "^13.4.0",
54
+ "@angular/core": "^13.4.0",
55
+ "@angular/forms": "^13.4.0",
56
+ "@angular/material": "^13.3.9",
57
+ "@angular/platform-browser": "^13.4.0",
58
+ "@angular/platform-browser-dynamic": "^13.4.0",
59
+ "@storybook/addon-a11y": "6.5.16",
60
+ "@storybook/addon-actions": "^6.5.16",
61
+ "@storybook/addon-essentials": "^6.5.16",
62
+ "@storybook/addon-links": "^6.5.16",
63
+ "@storybook/angular": "^6.5.16",
64
+ "@storybook/builder-webpack5": "^6.5.16",
65
+ "@storybook/manager-webpack5": "^6.5.16",
66
+ "@types/glob": "^8.1.0",
67
+ "@types/lodash": "4.14.191",
68
+ "@types/minimatch": "^5.1.2",
69
+ "@types/node": "^14.18.36",
70
+ "autoprefixer": "^10.4.21",
71
+ "glob": "7.2.3",
72
+ "minimatch": "5.1.6",
73
+ "ng-packagr": "^13.3.0",
74
+ "postcss": "^8.5.6",
75
+ "postcss-loader": "7.3.3",
76
+ "rxjs": "^7.5.0",
77
+ "tailwindcss": "^2.2.19",
78
+ "tslib": "^2.3.0",
79
+ "typescript": "~4.6.4",
80
+ "zone.js": "~0.11.8"
55
81
  }
56
82
  }
@@ -1,265 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, HostListener, 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/common";
5
- export class ButtonComponent {
6
- constructor() {
7
- this.id = 'cqa-ui-root';
8
- this.display = 'contents';
9
- this.variant = 'filled';
10
- this.disabled = false;
11
- this.iconPosition = 'start';
12
- this.type = 'button';
13
- this.clicked = new EventEmitter();
14
- // Internal state tracking
15
- this.isHovered = false;
16
- this.isFocused = false;
17
- this.isPressed = false;
18
- }
19
- get hasIcon() {
20
- return !!this.icon;
21
- }
22
- get buttonClasses() {
23
- const baseClasses = [
24
- 'flex',
25
- 'flex-col',
26
- 'justify-center',
27
- 'items-center',
28
- 'p-0',
29
- 'gap-2',
30
- 'rounded-lg',
31
- 'cursor-pointer',
32
- 'font-inter',
33
- 'font-semibold',
34
- 'text-sm',
35
- 'leading-[14px]',
36
- 'transition-all',
37
- 'duration-200',
38
- 'outline-none'
39
- ];
40
- if (this.disabled) {
41
- baseClasses.push('cursor-not-allowed');
42
- }
43
- // Add variant and state specific classes
44
- const variantClasses = this.getVariantClasses();
45
- return [...baseClasses, ...variantClasses].join(' ');
46
- }
47
- get stateLayerClasses() {
48
- const classes = [
49
- 'flex',
50
- 'flex-row',
51
- 'justify-center',
52
- 'items-center',
53
- 'gap-2',
54
- 'w-full',
55
- 'h-full',
56
- 'py-[10px]',
57
- 'px-6',
58
- ];
59
- return classes.join(' ');
60
- }
61
- get labelClasses() {
62
- const classes = [
63
- 'flex',
64
- 'items-center',
65
- 'text-center',
66
- 'font-inter',
67
- 'font-semibold',
68
- 'text-sm',
69
- 'leading-[14px]',
70
- 'flex-none',
71
- this.textClass,
72
- ];
73
- if (this.disabled) {
74
- classes.push('opacity-[0.38]');
75
- }
76
- return classes.join(' ');
77
- }
78
- get iconClasses() {
79
- const classes = [
80
- 'flex',
81
- 'items-center',
82
- 'justify-center',
83
- 'w-[14px]',
84
- 'h-[14px]',
85
- 'shrink-0',
86
- 'flex-none'
87
- ];
88
- if (this.disabled) {
89
- classes.push('opacity-[0.38]');
90
- }
91
- return classes.join(' ');
92
- }
93
- getVariantClasses() {
94
- const classes = [];
95
- if (this.variant === 'filled') {
96
- if (this.disabled) {
97
- classes.push('bg-primary-muted');
98
- }
99
- else {
100
- classes.push('bg-primary');
101
- if (this.isHovered) {
102
- classes.push('shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_1px_3px_1px_rgba(0,0,0,0.15)]');
103
- }
104
- }
105
- }
106
- else if (this.variant === 'outlined') {
107
- if (this.disabled) {
108
- classes.push('bg-transparent', 'border', 'border-primary-muted');
109
- }
110
- else {
111
- if (this.isFocused) {
112
- classes.push('bg-primary-surface-alt', 'border', 'border-primary-hover', 'shadow-[0px_4px_4px_rgba(0,0,0,0.25)]');
113
- }
114
- else if (this.isHovered || this.isPressed) {
115
- classes.push('bg-primary-surface', 'border', 'border-primary');
116
- }
117
- else {
118
- classes.push('bg-transparent', 'border', 'border-slate');
119
- }
120
- }
121
- }
122
- else if (this.variant === 'text') {
123
- if (this.disabled) {
124
- classes.push('bg-transparent');
125
- }
126
- else {
127
- classes.push('bg-transparent');
128
- if (this.isHovered || this.isFocused || this.isPressed) {
129
- classes.push('bg-primary-surface');
130
- }
131
- }
132
- }
133
- else if (this.variant === 'elevated') {
134
- if (this.disabled) {
135
- classes.push('bg-primary-muted', 'shadow-none');
136
- }
137
- else {
138
- if (this.isFocused) {
139
- classes.push('bg-primary-surface-alt', 'shadow-[0px_4px_4px_rgba(0,0,0,0.25)]');
140
- }
141
- else if (this.isPressed) {
142
- 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)]');
143
- }
144
- else if (this.isHovered) {
145
- 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)]');
146
- }
147
- else {
148
- 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)]');
149
- }
150
- }
151
- }
152
- else if (this.variant === 'tonal') {
153
- if (this.disabled) {
154
- classes.push('bg-primary-muted');
155
- }
156
- else {
157
- if (this.isHovered) {
158
- 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)]');
159
- }
160
- else {
161
- classes.push('bg-primary-surface-alt');
162
- }
163
- }
164
- }
165
- return classes;
166
- }
167
- get textClass() {
168
- if (this.disabled) {
169
- if (this.variant === 'outlined' || this.variant === 'text') {
170
- return 'text-ink';
171
- }
172
- return 'text-ink-muted';
173
- }
174
- switch (this.variant) {
175
- case 'filled':
176
- return 'text-surface-default';
177
- case 'outlined':
178
- if (this.isFocused || this.isHovered || this.isPressed) {
179
- return 'text-primary-hover';
180
- }
181
- return 'text-slate';
182
- case 'text':
183
- case 'elevated':
184
- return 'text-primary-hover';
185
- case 'tonal':
186
- return 'text-ink';
187
- default:
188
- return '';
189
- }
190
- }
191
- onMouseEnter() {
192
- if (!this.disabled) {
193
- this.isHovered = true;
194
- }
195
- }
196
- onMouseLeave() {
197
- this.isHovered = false;
198
- this.isPressed = false;
199
- }
200
- onMouseDown() {
201
- if (!this.disabled) {
202
- this.isPressed = true;
203
- }
204
- }
205
- onMouseUp() {
206
- this.isPressed = false;
207
- }
208
- onFocus() {
209
- if (!this.disabled) {
210
- this.isFocused = true;
211
- }
212
- }
213
- onBlur() {
214
- this.isFocused = false;
215
- this.isPressed = false;
216
- }
217
- onClick(event) {
218
- if (!this.disabled) {
219
- this.clicked.emit(event);
220
- }
221
- }
222
- }
223
- ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
224
- 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()" }, properties: { "attr.id": "this.id", "style.display": "this.display" } }, ngImport: i0, template: "<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", 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"] }] });
225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ButtonComponent, decorators: [{
226
- type: Component,
227
- args: [{ selector: 'cqa-button', template: "<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", styles: [] }]
228
- }], propDecorators: { id: [{
229
- type: HostBinding,
230
- args: ['attr.id']
231
- }], display: [{
232
- type: HostBinding,
233
- args: ['style.display']
234
- }], variant: [{
235
- type: Input
236
- }], disabled: [{
237
- type: Input
238
- }], icon: [{
239
- type: Input
240
- }], iconPosition: [{
241
- type: Input
242
- }], type: [{
243
- type: Input
244
- }], clicked: [{
245
- type: Output
246
- }], onMouseEnter: [{
247
- type: HostListener,
248
- args: ['mouseenter']
249
- }], onMouseLeave: [{
250
- type: HostListener,
251
- args: ['mouseleave']
252
- }], onMouseDown: [{
253
- type: HostListener,
254
- args: ['mousedown']
255
- }], onMouseUp: [{
256
- type: HostListener,
257
- args: ['mouseup']
258
- }], onFocus: [{
259
- type: HostListener,
260
- args: ['focus']
261
- }], onBlur: [{
262
- type: HostListener,
263
- args: ['blur']
264
- }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBU2xHLE1BQU0sT0FBTyxlQUFlO0lBTDVCO1FBTTBCLE9BQUUsR0FBRyxhQUFhLENBQUM7UUFDYixZQUFPLEdBQUcsVUFBVSxDQUFDO1FBRTFDLFlBQU8sR0FBa0IsUUFBUSxDQUFDO1FBQ2xDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsaUJBQVksR0FBb0IsT0FBTyxDQUFDO1FBQ3hDLFNBQUksR0FBa0MsUUFBUSxDQUFDO1FBQzlDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBRW5ELDBCQUEwQjtRQUMxQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFZLEtBQUssQ0FBQztLQTBONUI7SUF4TkMsSUFBSSxPQUFPO1FBQ1QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsTUFBTSxXQUFXLEdBQUc7WUFDbEIsTUFBTTtZQUNOLFVBQVU7WUFDVixnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLEtBQUs7WUFDTCxPQUFPO1lBQ1AsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osZUFBZTtZQUNmLFNBQVM7WUFDVCxnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFDZCxjQUFjO1NBQ2YsQ0FBQztRQUVGLElBQUksSUFB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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgQnV0dG9uVmFyaWFudCA9ICdmaWxsZWQnIHwgJ291dGxpbmVkJyB8ICd0ZXh0JyB8ICdlbGV2YXRlZCcgfCAndG9uYWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uQ29tcG9uZW50IHtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgaWQgPSAnY3FhLXVpLXJvb3QnO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKSBkaXNwbGF5ID0gJ2NvbnRlbnRzJztcblxuICBASW5wdXQoKSB2YXJpYW50OiBCdXR0b25WYXJpYW50ID0gJ2ZpbGxlZCc7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGljb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGljb25Qb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnID0gJ3N0YXJ0JztcbiAgQElucHV0KCkgdHlwZTogJ2J1dHRvbicgfCAnc3VibWl0JyB8ICdyZXNldCcgPSAnYnV0dG9uJztcbiAgQE91dHB1dCgpIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLy8gSW50ZXJuYWwgc3RhdGUgdHJhY2tpbmdcbiAgaXNIb3ZlcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1ByZXNzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXQgaGFzSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmljb247XG4gIH1cblxuICBnZXQgYnV0dG9uQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gW1xuICAgICAgJ2ZsZXgnLFxuICAgICAgJ2ZsZXgtY29sJyxcbiAgICAgICdqdXN0aWZ5LWNlbnRlcicsXG4gICAgICAnaXRlbXMtY2VudGVyJyxcbiAgICAgICdwLTAnLFxuICAgICAgJ2dhcC0yJyxcbiAgICAgICdyb3VuZGVkLWxnJyxcbiAgICAgICdjdXJzb3ItcG9pbnRlcicsXG4gICAgICAnZm9udC1pbnRlcicsXG4gICAgICAnZm9udC1zZW1pYm9sZCcsXG4gICAgICAndGV4dC1zbScsXG4gICAgICAnbGVhZGluZy1bMTRweF0nLFxuICAgICAgJ3RyYW5zaXRpb24tYWxsJyxcbiAgICAgICdkdXJhdGlvbi0yMDAnLFxuICAgICAgJ291dGxpbmUtbm9uZSdcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGJhc2VDbGFzc2VzLnB1c2goJ2N1cnNvci1ub3QtYWxsb3dlZCcpO1xuICAgIH1cblxuICAgIC8vIEFkZCB2YXJpYW50IGFuZCBzdGF0ZSBzcGVjaWZpYyBjbGFzc2VzXG4gICAgY29uc3QgdmFyaWFudENsYXNzZXMgPSB0aGlzLmdldFZhcmlhbnRDbGFzc2VzKCk7XG4gICAgXG4gICAgcmV0dXJuIFsuLi5iYXNlQ2xhc3NlcywgLi4udmFyaWFudENsYXNzZXNdLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldCBzdGF0ZUxheWVyQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbXG4gICAgICAnZmxleCcsXG4gICAgICAnZmxleC1yb3cnLFxuICAgICAgJ2p1c3RpZnktY2VudGVyJyxcbiAgICAgICdpdGVtcy1jZW50ZXInLFxuICAgICAgJ2dhcC0yJyxcbiAgICAgICd3LWZ1bGwnLFxuICAgICAgJ2gtZnVsbCcsXG4gICAgICAncHktWzEwcHhdJyxcbiAgICAgICdweC02JyxcbiAgICBdO1xuXG4gICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgZ2V0IGxhYmVsQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbXG4gICAgICAnZmxleCcsXG4gICAgICAnaXRlbXMtY2VudGVyJyxcbiAgICAgICd0ZXh0LWNlbnRlcicsXG4gICAgICAnZm9udC1pbnRlcicsXG4gICAgICAnZm9udC1zZW1pYm9sZCcsXG4gICAgICAndGV4dC1zbScsXG4gICAgICAnbGVhZGluZy1bMTRweF0nLFxuICAgICAgJ2ZsZXgtbm9uZScsXG4gICAgICB0aGlzLnRleHRDbGFzcyxcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnb3BhY2l0eS1bMC4zOF0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gIH1cblxuICBnZXQgaWNvbkNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc2VzID0gW1xuICAgICAgJ2ZsZXgnLFxuICAgICAgJ2l0ZW1zLWNlbnRlcicsXG4gICAgICAnanVzdGlmeS1jZW50ZXInLFxuICAgICAgJ3ctWzE0cHhdJyxcbiAgICAgICdoLVsxNHB4XScsXG4gICAgICAnc2hyaW5rLTAnLFxuICAgICAgJ2ZsZXgtbm9uZSdcbiAgICBdO1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ29wYWNpdHktWzAuMzhdJyk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFyaWFudENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy52YXJpYW50ID09PSAnZmlsbGVkJykge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5LW11dGVkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXByaW1hcnknKTtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3ZlcmVkKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzaGFkb3ctWzBweF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4zKSwwcHhfMXB4XzNweF8xcHhfcmdiYSgwLDAsMCwwLjE1KV0nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy52YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXRyYW5zcGFyZW50JywgJ2JvcmRlcicsICdib3JkZXItcHJpbWFyeS1tdXRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5LXN1cmZhY2UtYWx0JywgJ2JvcmRlcicsICdib3JkZXItcHJpbWFyeS1ob3ZlcicsICdzaGFkb3ctWzBweF80cHhfNHB4X3JnYmEoMCwwLDAsMC4yNSldJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hvdmVyZWQgfHwgdGhpcy5pc1ByZXNzZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXByaW1hcnktc3VyZmFjZScsICdib3JkZXInLCAnYm9yZGVyLXByaW1hcnknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXRyYW5zcGFyZW50JywgJ2JvcmRlcicsICdib3JkZXItc2xhdGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy52YXJpYW50ID09PSAndGV4dCcpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnYmctdHJhbnNwYXJlbnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnYmctdHJhbnNwYXJlbnQnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3ZlcmVkIHx8IHRoaXMuaXNGb2N1c2VkIHx8IHRoaXMuaXNQcmVzc2VkKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5LXN1cmZhY2UnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy52YXJpYW50ID09PSAnZWxldmF0ZWQnKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXByaW1hcnktbXV0ZWQnLCAnc2hhZG93LW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYmctcHJpbWFyeS1zdXJmYWNlLWFsdCcsICdzaGFkb3ctWzBweF80cHhfNHB4X3JnYmEoMCwwLDAsMC4yNSldJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1ByZXNzZWQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXByaW1hcnktc3VyZmFjZScsICdzaGFkb3ctWzBweF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4zKSwwcHhfMXB4XzNweF8xcHhfcmdiYSgwLDAsMCwwLjE1KV0nKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSG92ZXJlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYmctcHJpbWFyeS1zdXJmYWNlLWFsdCcsICdzaGFkb3ctWzBweF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4zKSwwcHhfMnB4XzZweF8ycHhfcmdiYSgwLDAsMCwwLjE1KV0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXByaW1hcnktc3VyZmFjZScsICdzaGFkb3ctWzBweF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4zKSwwcHhfMXB4XzNweF8xcHhfcmdiYSgwLDAsMCwwLjE1KV0nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy52YXJpYW50ID09PSAndG9uYWwnKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2JnLXByaW1hcnktbXV0ZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlzSG92ZXJlZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnYmctdG9uYWwtaG92ZXInLCAnc2hhZG93LVswcHhfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMyksMHB4XzFweF8zcHhfMXB4X3JnYmEoMCwwLDAsMC4xNSldJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdiZy1wcmltYXJ5LXN1cmZhY2UtYWx0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIGdldCB0ZXh0Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMudmFyaWFudCA9PT0gJ291dGxpbmVkJyB8fCB0aGlzLnZhcmlhbnQgPT09ICd0ZXh0Jykge1xuICAgICAgICByZXR1cm4gJ3RleHQtaW5rJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAndGV4dC1pbmstbXV0ZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy52YXJpYW50KSB7XG4gICAgICBjYXNlICdmaWxsZWQnOlxuICAgICAgICByZXR1cm4gJ3RleHQtc3VyZmFjZS1kZWZhdWx0JztcbiAgICAgIGNhc2UgJ291dGxpbmVkJzpcbiAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2VkIHx8IHRoaXMuaXNIb3ZlcmVkIHx8IHRoaXMuaXNQcmVzc2VkKSB7XG4gICAgICAgICAgcmV0dXJuICd0ZXh0LXByaW1hcnktaG92ZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAndGV4dC1zbGF0ZSc7XG4gICAgICBjYXNlICd0ZXh0JzpcbiAgICAgIGNhc2UgJ2VsZXZhdGVkJzpcbiAgICAgICAgcmV0dXJuICd0ZXh0LXByaW1hcnktaG92ZXInO1xuICAgICAgY2FzZSAndG9uYWwnOlxuICAgICAgICByZXR1cm4gJ3RleHQtaW5rJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgb25Nb3VzZUVudGVyKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pc0hvdmVyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJylcbiAgb25Nb3VzZURvd24oKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzUHJlc3NlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcpXG4gIG9uTW91c2VVcCgpIHtcbiAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBvbkZvY3VzKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzUHJlc3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jbGlja2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8YnV0dG9uXG4gIFt0eXBlXT1cInR5cGVcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzZXNcIlxuICAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCJcbj5cbiAgICA8c3BhbiBbY2xhc3NdPVwic3RhdGVMYXllckNsYXNzZXNcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaWNvbiAmJiBpY29uUG9zaXRpb24gPT09ICdzdGFydCdcIiBbY2xhc3NdPVwiaWNvbkNsYXNzZXNcIiBbbmdDbGFzc109XCJ0ZXh0Q2xhc3NcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidGV4dC1bMThweF0gbGVhZGluZy1bMThweF0gdy1bMThweF0gaC1bMThweF1cIj5cbiAgICAgICAgICB7eyBpY29uIH19XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBbY2xhc3NdPVwibGFiZWxDbGFzc2VzXCIgW25nQ2xhc3NdPVwidGV4dENsYXNzXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaWNvbiAmJiBpY29uUG9zaXRpb24gPT09ICdlbmQnXCIgW2NsYXNzXT1cImljb25DbGFzc2VzXCIgW25nQ2xhc3NdPVwidGV4dENsYXNzXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRleHQtWzE4cHhdIGxlYWRpbmctWzE4cHhdIHctWzE4cHhdIGgtWzE4cHhdXCI+XG4gICAgICAgICAge3sgaWNvbiB9fVxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvYnV0dG9uPlxuXG4iXX0=
@@ -1,135 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, ViewChild, HostBinding, } from '@angular/core';
2
- import { CdkPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../button/button.component";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/cdk/portal";
7
- export class DialogComponent {
8
- constructor(viewContainerRef, cdr) {
9
- this.viewContainerRef = viewContainerRef;
10
- this.cdr = cdr;
11
- this.id = 'cqa-ui-root';
12
- this.display = 'block';
13
- this.contentAttached = false;
14
- }
15
- attachTemplate(template, context) {
16
- if (!this.portalOutlet) {
17
- return;
18
- }
19
- const templateContext = context ??
20
- {
21
- $implicit: this.config?.data,
22
- data: this.config?.data,
23
- };
24
- const portal = new TemplatePortal(template, this.viewContainerRef, templateContext);
25
- this.portalOutlet.attachTemplatePortal(portal);
26
- this.markContentAttached();
27
- }
28
- attachComponent(component) {
29
- if (!this.portalOutlet) {
30
- return undefined;
31
- }
32
- const componentRef = this.portalOutlet.attachComponentPortal(component);
33
- this.markContentAttached();
34
- return componentRef;
35
- }
36
- async onButtonClick(button) {
37
- const closeOnClick = button.closeOnClick ?? true;
38
- let handlerResult = undefined;
39
- if (button.handler) {
40
- handlerResult = button.handler(this.dialogRef);
41
- }
42
- const resolved = handlerResult instanceof Promise ? await handlerResult : handlerResult;
43
- if (!closeOnClick || resolved === false) {
44
- return;
45
- }
46
- this.dialogRef.close(resolved);
47
- }
48
- get buttonAlignmentClass() {
49
- const alignment = this.config?.buttonAlignment ?? 'right';
50
- return this.mapAlignmentToClass(alignment);
51
- }
52
- get panelClassList() {
53
- const baseClasses = [
54
- 'relative',
55
- 'w-full',
56
- 'bg-white',
57
- 'rounded-2xl',
58
- 'shadow-md',
59
- 'border',
60
- 'border-[#E5E7EB]',
61
- 'p-6',
62
- 'text-left',
63
- ];
64
- const custom = this.config?.panelClass;
65
- if (!custom) {
66
- return baseClasses;
67
- }
68
- return Array.isArray(custom) ? [...baseClasses, ...custom] : [...baseClasses, custom];
69
- }
70
- get panelStyles() {
71
- return {
72
- width: this.config?.width,
73
- maxWidth: this.config?.maxWidth ?? '480px',
74
- };
75
- }
76
- buttonVariant(button) {
77
- const role = this.normalizeRole(button.role);
78
- switch (role) {
79
- case 'secondary':
80
- return 'outlined';
81
- case 'text':
82
- return 'text';
83
- case 'tonal':
84
- return 'tonal';
85
- case 'elevated':
86
- return 'elevated';
87
- case 'filled':
88
- case 'primary':
89
- case 'warn':
90
- default:
91
- return 'filled';
92
- }
93
- }
94
- buttonHostClasses(button) {
95
- const role = this.normalizeRole(button.role);
96
- if (role === 'warn') {
97
- return ['cqa-dialog-btn-warn'];
98
- }
99
- return [];
100
- }
101
- mapAlignmentToClass(alignment) {
102
- switch (alignment) {
103
- case 'left':
104
- return 'justify-start';
105
- case 'center':
106
- return 'justify-center';
107
- case 'right':
108
- default:
109
- return 'justify-end';
110
- }
111
- }
112
- markContentAttached() {
113
- this.contentAttached = true;
114
- this.cdr.markForCheck();
115
- }
116
- normalizeRole(role) {
117
- return (role ?? 'secondary').trim().split(/\s+/)[0];
118
- }
119
- }
120
- DialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
121
- DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DialogComponent, selector: "cqa-dialog", host: { properties: { "attr.id": "this.id", "style.display": "this.display" } }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], ngImport: i0, template: "<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", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "disabled", "icon", "iconPosition", "type"], outputs: ["clicked"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
122
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogComponent, decorators: [{
123
- type: Component,
124
- args: [{ selector: 'cqa-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [] }]
125
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
126
- type: HostBinding,
127
- args: ['attr.id']
128
- }], display: [{
129
- type: HostBinding,
130
- args: ['style.display']
131
- }], portalOutlet: [{
132
- type: ViewChild,
133
- args: [CdkPortalOutlet, { static: true }]
134
- }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBR1QsU0FBUyxFQUVULFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFtQixjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFXdkYsTUFBTSxPQUFPLGVBQWU7SUFXMUIsWUFBNkIsZ0JBQWtDLEVBQW1CLEdBQXNCO1FBQTNFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBbUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFWaEYsT0FBRSxHQUFHLGFBQWEsQ0FBQztRQUNiLFlBQU8sR0FBRyxPQUFPLENBQUM7UUFPaEQsb0JBQWUsR0FBRyxLQUFLLENBQUM7SUFFbUYsQ0FBQztJQUU1RyxjQUFjLENBQUMsUUFBOEIsRUFBRSxPQUFpQztRQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixPQUFPO1NBQ1I7UUFFRCxNQUFNLGVBQWUsR0FDbkIsT0FBTztZQUNQO2dCQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUk7Z0JBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUk7YUFDeEIsQ0FBQztRQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsbUJBQW1CLEVB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O1lBQ25CLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sbUJBQW1CLENBQUMsU0FBZ0M7UUFDMUQsUUFBUSxTQUFTLEVBQUU7WUFDakIsS0FBSyxNQUFNO2dCQUNULE9BQU8sZUFBZSxDQUFDO1lBQ3pCLEtBQUssUUFBUTtnQkFDWCxPQUFPLGdCQUFnQixDQUFDO1lBQzFCLEtBQUssT0FBTyxDQUFDO1lBQ2I7Z0JBQ0UsT0FBTyxhQUFhLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUF3QjtRQUM1QyxPQUFPLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDOzs0R0EzSVUsZUFBZTtnR0FBZixlQUFlLGlMQUlmLGVBQWUsOERDekI1Qix5ekNBd0NBOzJGRG5CYSxlQUFlO2tCQU4zQixTQUFTOytCQUNFLFlBQVksbUJBR0wsdUJBQXVCLENBQUMsTUFBTTt1SUFHdkIsRUFBRTtzQkFBekIsV0FBVzt1QkFBQyxTQUFTO2dCQUNRLE9BQU87c0JBQXBDLFdBQVc7dUJBQUMsZUFBZTtnQkFFa0IsWUFBWTtzQkFBekQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgSG9zdEJpbmRpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2RrUG9ydGFsT3V0bGV0LCBDb21wb25lbnRQb3J0YWwsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBEaWFsb2dCdXR0b25BbGlnbm1lbnQsIERpYWxvZ0J1dHRvbkNvbmZpZywgRGlhbG9nQ29uZmlnLCBEaWFsb2dDb250ZW50Q29uZmlnIH0gZnJvbSAnLi9kaWFsb2cubW9kZWxzJztcbmltcG9ydCB7IEJ1dHRvblZhcmlhbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaWFsb2dSZWYgfSBmcm9tICcuL2RpYWxvZy1yZWYnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEaWFsb2dDb21wb25lbnQ8VFJlc3VsdCA9IHVua25vd24+IHtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgaWQgPSAnY3FhLXVpLXJvb3QnO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKSBkaXNwbGF5ID0gJ2Jsb2NrJztcblxuICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldCwgeyBzdGF0aWM6IHRydWUgfSkgcG9ydGFsT3V0bGV0PzogQ2RrUG9ydGFsT3V0bGV0O1xuXG4gIGNvbmZpZyE6IERpYWxvZ0NvbmZpZzxEaWFsb2dDb250ZW50Q29uZmlnLCBUUmVzdWx0PjtcbiAgZGlhbG9nUmVmITogRGlhbG9nUmVmPFRSZXN1bHQ+O1xuXG4gIGNvbnRlbnRBdHRhY2hlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIGF0dGFjaFRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiwgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBvcnRhbE91dGxldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlQ29udGV4dCA9XG4gICAgICBjb250ZXh0ID8/XG4gICAgICB7XG4gICAgICAgICRpbXBsaWNpdDogdGhpcy5jb25maWc/LmRhdGEsXG4gICAgICAgIGRhdGE6IHRoaXMuY29uZmlnPy5kYXRhLFxuICAgICAgfTtcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZiwgdGVtcGxhdGVDb250ZXh0KTtcbiAgICB0aGlzLnBvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChwb3J0YWwpO1xuICAgIHRoaXMubWFya0NvbnRlbnRBdHRhY2hlZCgpO1xuICB9XG5cbiAgYXR0YWNoQ29tcG9uZW50KGNvbXBvbmVudDogQ29tcG9uZW50UG9ydGFsPHVua25vd24+KTogQ29tcG9uZW50UmVmPHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucG9ydGFsT3V0bGV0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMucG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChjb21wb25lbnQpO1xuICAgIHRoaXMubWFya0NvbnRlbnRBdHRhY2hlZCgpO1xuICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gIH1cblxuICBhc3luYyBvbkJ1dHRvbkNsaWNrKGJ1dHRvbjogRGlhbG9nQnV0dG9uQ29uZmlnPFRSZXN1bHQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xvc2VPbkNsaWNrID0gYnV0dG9uLmNsb3NlT25DbGljayA/PyB0cnVlO1xuICAgIGxldCBoYW5kbGVyUmVzdWx0OiBUUmVzdWx0IHwgZmFsc2UgfCB2b2lkIHwgUHJvbWlzZTxUUmVzdWx0IHwgZmFsc2UgfCB2b2lkPiA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChidXR0b24uaGFuZGxlcikge1xuICAgICAgaGFuZGxlclJlc3VsdCA9IGJ1dHRvbi5oYW5kbGVyKHRoaXMuZGlhbG9nUmVmKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZCA9IGhhbmRsZXJSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlID8gYXdhaXQgaGFuZGxlclJlc3VsdCA6IGhhbmRsZXJSZXN1bHQ7XG5cbiAgICBpZiAoIWNsb3NlT25DbGljayB8fCByZXNvbHZlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXNvbHZlZCBhcyBUUmVzdWx0IHwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIGdldCBidXR0b25BbGlnbm1lbnRDbGFzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFsaWdubWVudCA9IHRoaXMuY29uZmlnPy5idXR0b25BbGlnbm1lbnQgPz8gJ3JpZ2h0JztcbiAgICByZXR1cm4gdGhpcy5tYXBBbGlnbm1lbnRUb0NsYXNzKGFsaWdubWVudCk7XG4gIH1cblxuICBnZXQgcGFuZWxDbGFzc0xpc3QoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gW1xuICAgICAgJ3JlbGF0aXZlJyxcbiAgICAgICd3LWZ1bGwnLFxuICAgICAgJ2JnLXdoaXRlJyxcbiAgICAgICdyb3VuZGVkLTJ4bCcsXG4gICAgICAnc2hhZG93LW1kJyxcbiAgICAgICdib3JkZXInLFxuICAgICAgJ2JvcmRlci1bI0U1RTdFQl0nLFxuICAgICAgJ3AtNicsXG4gICAgICAndGV4dC1sZWZ0JyxcbiAgICBdO1xuXG4gICAgY29uc3QgY3VzdG9tID0gdGhpcy5jb25maWc/LnBhbmVsQ2xhc3M7XG5cbiAgICBpZiAoIWN1c3RvbSkge1xuICAgICAgcmV0dXJuIGJhc2VDbGFzc2VzO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGN1c3RvbSkgPyBbLi4uYmFzZUNsYXNzZXMsIC4uLmN1c3RvbV0gOiBbLi4uYmFzZUNsYXNzZXMsIGN1c3RvbV07XG4gIH1cblxuICBnZXQgcGFuZWxTdHlsZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLmNvbmZpZz8ud2lkdGgsXG4gICAgICBtYXhXaWR0aDogdGhpcy5jb25maWc/Lm1heFdpZHRoID8/ICc0ODBweCcsXG4gICAgfTtcbiAgfVxuXG4gIGJ1dHRvblZhcmlhbnQoYnV0dG9uOiBEaWFsb2dCdXR0b25Db25maWc8VFJlc3VsdD4pOiBCdXR0b25WYXJpYW50IHtcbiAgICBjb25zdCByb2xlID0gdGhpcy5ub3JtYWxpemVSb2xlKGJ1dHRvbi5yb2xlKTtcblxuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSAnc2Vjb25kYXJ5JzpcbiAgICAgICAgcmV0dXJuICdvdXRsaW5lZCc7XG4gICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgIGNhc2UgJ3RvbmFsJzpcbiAgICAgICAgcmV0dXJuICd0b25hbCc7XG4gICAgICBjYXNlICdlbGV2YXRlZCc6XG4gICAgICAgIHJldHVybiAnZWxldmF0ZWQnO1xuICAgICAgY2FzZSAnZmlsbGVkJzpcbiAgICAgIGNhc2UgJ3ByaW1hcnknOlxuICAgICAgY2FzZSAnd2Fybic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZpbGxlZCc7XG4gICAgfVxuICB9XG5cbiAgYnV0dG9uSG9zdENsYXNzZXMoYnV0dG9uOiBEaWFsb2dCdXR0b25Db25maWc8VFJlc3VsdD4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgcm9sZSA9IHRoaXMubm9ybWFsaXplUm9sZShidXR0b24ucm9sZSk7XG5cbiAgICBpZiAocm9sZSA9PT0gJ3dhcm4nKSB7XG4gICAgICByZXR1cm4gWydjcWEtZGlhbG9nLWJ0bi13YXJuJ107XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBBbGlnbm1lbnRUb0NsYXNzKGFsaWdubWVudDogRGlhbG9nQnV0dG9uQWxpZ25tZW50KTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHJldHVybiAnanVzdGlmeS1zdGFydCc7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gJ2p1c3RpZnktY2VudGVyJztcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnanVzdGlmeS1lbmQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbnRlbnRBdHRhY2hlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRlbnRBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVJvbGUocm9sZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHJvbGUgPz8gJ3NlY29uZGFyeScpLnRyaW0oKS5zcGxpdCgvXFxzKy8pWzBdO1xuICB9XG59XG5cblxuIiwiPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHB4LTQgc206cHgtNlwiPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwicGFuZWxDbGFzc0xpc3RcIiBbbmdTdHlsZV09XCJwYW5lbFN0eWxlc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIj5cbiAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1bIzExMTgyN11cIj5cbiAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxuICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICA8cCAqbmdJZj1cImNvbmZpZy5kZXNjcmlwdGlvblwiIGNsYXNzPVwidGV4dC1zbSBsZWFkaW5nLTYgdGV4dC1bIzRCNTU2M11cIj5cbiAgICAgICAgICAgIHt7IGNvbmZpZy5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLndhcm5pbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItcmVkLTIwMCBiZy1yZWQtNTAgcHgtNCBweS0zIHRleHQtc20gbGVhZGluZy01IHRleHQtcmVkLTcwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY29uZmlnLndhcm5pbmcgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gdGV4dC1bIzExMTgyN11cIiBbY2xhc3MuaGlkZGVuXT1cIiFjb250ZW50QXR0YWNoZWRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0PjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGZsZXggZmxleC13cmFwIGdhcC0zXCIgW25nQ2xhc3NdPVwiYnV0dG9uQWxpZ25tZW50Q2xhc3NcIj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBjb25maWcuYnV0dG9uc1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFt2YXJpYW50XT1cImJ1dHRvblZhcmlhbnQoYnV0dG9uKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJidXR0b25Ib3N0Q2xhc3NlcyhidXR0b24pXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYnV0dG9uLmxhYmVsIH19XG4gICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cblxuIl19