pdm-ui-kit 0.1.49 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +189 -2
  2. package/esm2020/lib/components/alert-dialog/alert-dialog.component.mjs +25 -7
  3. package/esm2020/lib/components/breadcrumb/breadcrumb.component.mjs +37 -4
  4. package/esm2020/lib/components/calendar/calendar.component.mjs +3 -3
  5. package/esm2020/lib/components/card/card.component.mjs +36 -53
  6. package/esm2020/lib/components/command/command.component.mjs +3 -3
  7. package/esm2020/lib/components/context-menu/context-menu.component.mjs +16 -8
  8. package/esm2020/lib/components/data-table/data-table.component.mjs +214 -16
  9. package/esm2020/lib/components/dialog/dialog.component.mjs +133 -17
  10. package/esm2020/lib/components/draggable-table/draggable-table.component.mjs +300 -0
  11. package/esm2020/lib/components/drawer/drawer.component.mjs +138 -10
  12. package/esm2020/lib/components/dropdown-menu/dropdown-menu.component.mjs +6 -3
  13. package/esm2020/lib/components/hover-card/hover-card.component.mjs +3 -3
  14. package/esm2020/lib/components/menubar/menubar.component.mjs +38 -7
  15. package/esm2020/lib/components/navigation-menu/navigation-menu.component.mjs +25 -3
  16. package/esm2020/lib/components/pagination/pagination.component.mjs +3 -3
  17. package/esm2020/lib/components/popover/popover.component.mjs +19 -11
  18. package/esm2020/lib/components/select/select.component.mjs +8 -4
  19. package/esm2020/lib/components/sheet/sheet.component.mjs +88 -11
  20. package/esm2020/lib/components/sidebar/sidebar.component.mjs +52 -5
  21. package/esm2020/lib/components/table/table.component.mjs +152 -188
  22. package/esm2020/lib/components/tabs/tabs.component.mjs +3 -3
  23. package/esm2020/lib/components/tooltip/tooltip.component.mjs +3 -3
  24. package/esm2020/lib/overlay/pdm-outside-click.directive.mjs +86 -0
  25. package/esm2020/lib/pdm-ui-kit.module.mjs +9 -1
  26. package/esm2020/lib/utils/responsive.mjs +143 -0
  27. package/esm2020/lib/utils/z-index.mjs +93 -0
  28. package/esm2020/public-api.mjs +5 -1
  29. package/fesm2015/pdm-ui-kit.mjs +1625 -370
  30. package/fesm2015/pdm-ui-kit.mjs.map +1 -1
  31. package/fesm2020/pdm-ui-kit.mjs +1620 -367
  32. package/fesm2020/pdm-ui-kit.mjs.map +1 -1
  33. package/lib/components/alert-dialog/alert-dialog.component.d.ts +9 -1
  34. package/lib/components/breadcrumb/breadcrumb.component.d.ts +23 -1
  35. package/lib/components/card/card.component.d.ts +32 -19
  36. package/lib/components/context-menu/context-menu.component.d.ts +6 -3
  37. package/lib/components/data-table/data-table.component.d.ts +172 -14
  38. package/lib/components/dialog/dialog.component.d.ts +35 -1
  39. package/lib/components/draggable-table/draggable-table.component.d.ts +74 -0
  40. package/lib/components/drawer/drawer.component.d.ts +67 -3
  41. package/lib/components/menubar/menubar.component.d.ts +10 -2
  42. package/lib/components/navigation-menu/navigation-menu.component.d.ts +22 -1
  43. package/lib/components/popover/popover.component.d.ts +6 -3
  44. package/lib/components/sheet/sheet.component.d.ts +34 -1
  45. package/lib/components/sidebar/sidebar.component.d.ts +39 -1
  46. package/lib/components/table/table.component.d.ts +46 -25
  47. package/lib/overlay/pdm-outside-click.directive.d.ts +40 -0
  48. package/lib/pdm-ui-kit.module.d.ts +42 -40
  49. package/lib/utils/responsive.d.ts +107 -0
  50. package/lib/utils/z-index.d.ts +73 -0
  51. package/package.json +5 -3
  52. package/public-api.d.ts +4 -0
@@ -1,11 +1,42 @@
1
1
  import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
+ import { responsive } from '../../utils/responsive';
3
+ import { Z_INDEX } from '../../utils/z-index';
2
4
  import * as i0 from "@angular/core";
3
5
  import * as i1 from "@angular/common";
6
+ /**
7
+ * Modal/Dialog component con soporte responsive
8
+ *
9
+ * MEJORADO en v0.2.0:
10
+ * - Modo 'responsive' (default): fullscreen en mobile, modal en desktop
11
+ * - Tamaños predefinidos: sm, md, lg, xl
12
+ * - Mejor manejo de scroll en mobile
13
+ *
14
+ * @example
15
+ * // Responsive (recomendado)
16
+ * <pdm-dialog [open]="isOpen" size="responsive">
17
+ * <p>Content</p>
18
+ * </pdm-dialog>
19
+ *
20
+ * @example
21
+ * // Tamaño fijo
22
+ * <pdm-dialog [open]="isOpen" size="lg">
23
+ * <p>Content</p>
24
+ * </pdm-dialog>
25
+ */
4
26
  export class PdmDialogComponent {
5
27
  constructor() {
6
28
  this.open = false;
7
29
  this.variant = 'default';
8
- this.size = 'desktop';
30
+ /**
31
+ * Tamaño del dialog
32
+ * - responsive: fullscreen mobile, modal desktop (recomendado)
33
+ * - sm: 400px max
34
+ * - md: 500px max
35
+ * - lg: 640px max (default)
36
+ * - xl: 800px max
37
+ * - desktop/mobile/mobile-fullscreen: legacy, deprecado
38
+ */
39
+ this.size = 'responsive';
9
40
  this.title = 'Edit profile';
10
41
  this.description = '';
11
42
  this.closeOnBackdrop = true;
@@ -44,47 +75,132 @@ export class PdmDialogComponent {
44
75
  }
45
76
  }
46
77
  get panelClassName() {
78
+ // Legacy sizes (backward compatibility)
79
+ if (this.size === 'desktop') {
80
+ return this.buildClasses(['max-w-[640px]', 'max-h-[calc(100vh-2rem)]', 'rounded-[10px]']);
81
+ }
82
+ if (this.size === 'mobile') {
83
+ return this.buildClasses(['max-w-[320px]', 'min-h-[240px]', 'rounded-[10px]']);
84
+ }
85
+ if (this.size === 'mobile-fullscreen') {
86
+ return this.buildClasses(['max-w-[320px]', 'h-[min(100dvh,640px)]', 'rounded-none', 'sm:rounded-[10px]']);
87
+ }
88
+ // New responsive mode (recomendado)
89
+ if (this.size === 'responsive') {
90
+ return this.buildClasses([
91
+ // Mobile: fullscreen con bordes redondeados solo arriba
92
+ 'w-full',
93
+ 'h-full',
94
+ 'max-h-[100dvh]',
95
+ 'rounded-t-[10px]',
96
+ 'sm:rounded-[10px]',
97
+ // Desktop: modal centrado
98
+ 'sm:w-auto',
99
+ 'sm:h-auto',
100
+ 'sm:max-w-[640px]',
101
+ 'sm:max-h-[calc(100vh-4rem)]'
102
+ ]);
103
+ }
104
+ // New size options
105
+ const sizeMap = {
106
+ sm: 'sm:max-w-[400px]',
107
+ md: 'sm:max-w-[500px]',
108
+ lg: 'sm:max-w-[640px]',
109
+ xl: 'sm:max-w-[800px]'
110
+ };
111
+ const maxWidth = sizeMap[this.size] || sizeMap.lg;
112
+ return this.buildClasses([
113
+ // Mobile: fullscreen
114
+ 'w-full',
115
+ 'h-full',
116
+ 'max-h-[100dvh]',
117
+ 'rounded-t-[10px]',
118
+ // Desktop: modal
119
+ 'sm:rounded-[10px]',
120
+ 'sm:w-auto',
121
+ 'sm:h-auto',
122
+ maxWidth,
123
+ 'sm:max-h-[calc(100vh-4rem)]'
124
+ ]);
125
+ }
126
+ buildClasses(sizeClasses) {
47
127
  const base = [
48
- 'relative z-10 w-full border border-border bg-background text-foreground shadow-lg',
49
- this.size === 'desktop' ? 'max-w-[640px] max-h-[calc(100vh-2rem)] rounded-[10px] overflow-visible' : '',
50
- this.size === 'mobile' ? 'max-w-[320px] min-h-[240px] rounded-[10px] overflow-visible' : '',
51
- this.size === 'mobile-fullscreen'
52
- ? 'max-w-[320px] h-[min(100dvh,640px)] rounded-none sm:rounded-[10px] overflow-visible'
53
- : '',
128
+ 'relative',
129
+ Z_INDEX.modal,
130
+ 'flex',
131
+ 'flex-col',
132
+ 'border',
133
+ 'border-border',
134
+ 'bg-background',
135
+ 'text-foreground',
136
+ 'shadow-lg',
137
+ 'overflow-hidden',
138
+ ...sizeClasses,
54
139
  this.className
55
140
  ];
56
141
  return base.filter(Boolean).join(' ');
57
142
  }
58
143
  get bodyWrapperClassName() {
59
144
  const base = [
60
- 'min-h-0 flex-1',
61
- this.size === 'mobile-fullscreen' ? 'overflow-y-auto px-4 py-6' : 'px-6 py-6',
145
+ 'flex-1',
146
+ 'overflow-y-auto',
147
+ 'px-4',
148
+ 'py-6',
149
+ 'sm:px-6',
62
150
  this.bodyClassName
63
151
  ];
64
152
  return base.filter(Boolean).join(' ');
65
153
  }
66
154
  get headerWrapperClassName() {
67
- return ['flex items-start justify-between gap-3 p-4', this.headerClassName].filter(Boolean).join(' ');
155
+ const base = [
156
+ 'flex',
157
+ 'items-start',
158
+ 'justify-between',
159
+ 'gap-3',
160
+ 'p-4',
161
+ 'sm:p-6',
162
+ 'border-b',
163
+ 'border-border',
164
+ this.headerClassName
165
+ ];
166
+ return base.filter(Boolean).join(' ');
68
167
  }
69
168
  get footerWrapperClassName() {
70
169
  const effectiveAlign = this.alignFooter === 'right' && this.variant === 'custom-close' ? 'left' : this.alignFooter;
71
170
  const base = [
72
171
  'p-4',
172
+ 'sm:p-6',
173
+ 'border-t',
174
+ 'border-border',
175
+ // Mobile: siempre full-width
176
+ 'flex',
177
+ 'flex-col',
178
+ 'gap-2',
179
+ // Desktop: según alignFooter
73
180
  effectiveAlign === 'full-width'
74
- ? 'flex flex-col gap-2'
75
- : effectiveAlign === 'left'
76
- ? 'flex items-center gap-2 justify-start'
77
- : 'flex items-center gap-2 justify-end',
181
+ ? 'sm:flex-col'
182
+ : 'sm:flex-row sm:items-center',
183
+ effectiveAlign === 'left' ? 'sm:justify-start' : '',
184
+ effectiveAlign === 'right' ? 'sm:justify-end' : '',
78
185
  this.footerClassName
79
186
  ];
80
187
  return base.filter(Boolean).join(' ');
81
188
  }
189
+ get containerClassName() {
190
+ // Container con backdrop z-50
191
+ // Mobile: fullscreen desde el bottom
192
+ // Desktop: centrado
193
+ return responsive({
194
+ default: `fixed inset-x-0 bottom-0 ${Z_INDEX.modalBackdrop} flex items-end justify-center`,
195
+ sm: `fixed inset-0 ${Z_INDEX.modalBackdrop} flex items-center justify-center p-4`
196
+ });
197
+ }
82
198
  }
83
199
  PdmDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
84
- PdmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDialogComponent, selector: "pdm-dialog", inputs: { open: "open", variant: "variant", size: "size", title: "title", description: "description", closeOnBackdrop: "closeOnBackdrop", closeOnEsc: "closeOnEsc", showCloseButton: "showCloseButton", showHeader: "showHeader", showFooter: "showFooter", primaryActionText: "primaryActionText", secondaryActionText: "secondaryActionText", alignFooter: "alignFooter", headerClassName: "headerClassName", bodyClassName: "bodyClassName", footerClassName: "footerClassName", className: "className" }, outputs: { openChange: "openChange", primaryAction: "primaryAction", secondaryAction: "secondaryAction" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, ngImport: i0, template: "<div *ngIf=\"open\" class=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n <div class=\"absolute inset-0 bg-foreground/30\" (click)=\"onBackdropClick()\"></div>\n <section role=\"dialog\" aria-modal=\"true\" [ngClass]=\"panelClassName\">\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <div class=\"min-w-0\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 appearance-none items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </div>\n\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </div>\n </section>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
200
+ PdmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDialogComponent, selector: "pdm-dialog", inputs: { open: "open", variant: "variant", size: "size", title: "title", description: "description", closeOnBackdrop: "closeOnBackdrop", closeOnEsc: "closeOnEsc", showCloseButton: "showCloseButton", showHeader: "showHeader", showFooter: "showFooter", primaryActionText: "primaryActionText", secondaryActionText: "secondaryActionText", alignFooter: "alignFooter", headerClassName: "headerClassName", bodyClassName: "bodyClassName", footerClassName: "footerClassName", className: "className" }, outputs: { openChange: "openChange", primaryAction: "primaryAction", secondaryAction: "secondaryAction" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, ngImport: i0, template: "<div *ngIf=\"open\" [ngClass]=\"containerClassName\">\n <!-- Backdrop -->\n <div class=\"absolute inset-0 bg-foreground/30 backdrop-blur-sm\" (click)=\"onBackdropClick()\"></div>\n \n <!-- Dialog Panel -->\n <section role=\"dialog\" aria-modal=\"true\" [ngClass]=\"panelClassName\">\n <!-- Header -->\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 flex-shrink-0 appearance-none items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </div>\n\n <!-- Body -->\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm sm:w-auto\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </div>\n </section>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
85
201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogComponent, decorators: [{
86
202
  type: Component,
87
- args: [{ selector: 'pdm-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"open\" class=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n <div class=\"absolute inset-0 bg-foreground/30\" (click)=\"onBackdropClick()\"></div>\n <section role=\"dialog\" aria-modal=\"true\" [ngClass]=\"panelClassName\">\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <div class=\"min-w-0\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 appearance-none items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </div>\n\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </div>\n </section>\n</div>\n" }]
203
+ args: [{ selector: 'pdm-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"open\" [ngClass]=\"containerClassName\">\n <!-- Backdrop -->\n <div class=\"absolute inset-0 bg-foreground/30 backdrop-blur-sm\" (click)=\"onBackdropClick()\"></div>\n \n <!-- Dialog Panel -->\n <section role=\"dialog\" aria-modal=\"true\" [ngClass]=\"panelClassName\">\n <!-- Header -->\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 flex-shrink-0 appearance-none items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </div>\n\n <!-- Body -->\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm sm:w-auto\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </div>\n </section>\n</div>\n" }]
88
204
  }], propDecorators: { open: [{
89
205
  type: Input
90
206
  }], variant: [{
@@ -129,4 +245,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
129
245
  type: HostListener,
130
246
  args: ['document:keydown.escape']
131
247
  }] } });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFXOUcsTUFBTSxPQUFPLGtCQUFrQjtJQUwvQjtRQU1XLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDYixZQUFPLEdBQXFCLFNBQVMsQ0FBQztRQUN0QyxTQUFJLEdBQWtCLFNBQVMsQ0FBQztRQUNoQyxVQUFLLEdBQUcsY0FBYyxDQUFDO1FBQ3ZCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLHNCQUFpQixHQUFHLGNBQWMsQ0FBQztRQUNuQyx3QkFBbUIsR0FBRyxRQUFRLENBQUM7UUFDL0IsZ0JBQVcsR0FBeUIsT0FBTyxDQUFDO1FBQzVDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFFZCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDekMsb0JBQWUsR0FBRyxJQUFJLFlB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LGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHUCxLQUFLO3NCQURKLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgUGRtRGlhbG9nVmFyaWFudCA9ICdkZWZhdWx0JyB8ICdjdXN0b20tY2xvc2UnO1xuZXhwb3J0IHR5cGUgUGRtRGlhbG9nU2l6ZSA9ICdkZXNrdG9wJyB8ICdtb2JpbGUnIHwgJ21vYmlsZS1mdWxsc2NyZWVuJztcbmV4cG9ydCB0eXBlIFBkbURpYWxvZ0Zvb3RlckFsaWduID0gJ3JpZ2h0JyB8ICdmdWxsLXdpZHRoJyB8ICdsZWZ0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGRtLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1EaWFsb2dDb21wb25lbnQge1xuICBASW5wdXQoKSBvcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFBkbURpYWxvZ1ZhcmlhbnQgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIHNpemU6IFBkbURpYWxvZ1NpemUgPSAnZGVza3RvcCc7XG4gIEBJbnB1dCgpIHRpdGxlID0gJ0VkaXQgcHJvZmlsZSc7XG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uID0gJyc7XG4gIEBJbnB1dCgpIGNsb3NlT25CYWNrZHJvcCA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NlT25Fc2MgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Q2xvc2VCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93SGVhZGVyID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0Zvb3RlciA9IHRydWU7XG4gIEBJbnB1dCgpIHByaW1hcnlBY3Rpb25UZXh0ID0gJ1NhdmUgY2hhbmdlcyc7XG4gIEBJbnB1dCgpIHNlY29uZGFyeUFjdGlvblRleHQgPSAnQ2FuY2VsJztcbiAgQElucHV0KCkgYWxpZ25Gb290ZXI6IFBkbURpYWxvZ0Zvb3RlckFsaWduID0gJ3JpZ2h0JztcbiAgQElucHV0KCkgaGVhZGVyQ2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGJvZHlDbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgZm9vdGVyQ2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICcnO1xuXG4gIEBPdXRwdXQoKSBvcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgcHJpbWFyeUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlY29uZGFyeUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScpXG4gIG9uRXNjKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW4gJiYgdGhpcy5jbG9zZU9uRXNjKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgb25QcmltYXJ5QWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMucHJpbWFyeUFjdGlvbi5lbWl0KCk7XG4gIH1cblxuICBvblNlY29uZGFyeUFjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlY29uZGFyeUFjdGlvbi5lbWl0KCk7XG4gIH1cblxuICBvbkJhY2tkcm9wQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VPbkJhY2tkcm9wKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhbmVsQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZSA9IFtcbiAgICAgICdyZWxhdGl2ZSB6LTEwIHctZnVsbCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1iYWNrZ3JvdW5kIHRleHQtZm9yZWdyb3VuZCBzaGFkb3ctbGcnLFxuICAgICAgdGhpcy5zaXplID09PSAnZGVza3RvcCcgPyAnbWF4LXctWzY0MHB4XSBtYXgtaC1bY2FsYygxMDB2aC0ycmVtKV0gcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctdmlzaWJsZScgOiAnJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ21vYmlsZScgPyAnbWF4LXctWzMyMHB4XSBtaW4taC1bMjQwcHhdIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LXZpc2libGUnIDogJycsXG4gICAgICB0aGlzLnNpemUgPT09ICdtb2JpbGUtZnVsbHNjcmVlbidcbiAgICAgICAgPyAnbWF4LXctWzMyMHB4XSBoLVttaW4oMTAwZHZoLDY0MHB4KV0gcm91bmRlZC1ub25lIHNtOnJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LXZpc2libGUnXG4gICAgICAgIDogJycsXG4gICAgICB0aGlzLmNsYXNzTmFtZVxuICAgIF07XG5cbiAgICByZXR1cm4gYmFzZS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB9XG5cbiAgZ2V0IGJvZHlXcmFwcGVyQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZSA9IFtcbiAgICAgICdtaW4taC0wIGZsZXgtMScsXG4gICAgICB0aGlzLnNpemUgPT09ICdtb2JpbGUtZnVsbHNjcmVlbicgPyAnb3ZlcmZsb3cteS1hdXRvIHB4LTQgcHktNicgOiAncHgtNiBweS02JyxcbiAgICAgIHRoaXMuYm9keUNsYXNzTmFtZVxuICAgIF07XG5cbiAgICByZXR1cm4gYmFzZS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB9XG5cbiAgZ2V0IGhlYWRlcldyYXBwZXJDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gWydmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtMyBwLTQnLCB0aGlzLmhlYWRlckNsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldCBmb290ZXJXcmFwcGVyQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZWZmZWN0aXZlQWxpZ24gPVxuICAgICAgdGhpcy5hbGlnbkZvb3RlciA9PT0gJ3JpZ2h0JyAmJiB0aGlzLnZhcmlhbnQgPT09ICdjdXN0b20tY2xvc2UnID8gJ2xlZnQnIDogdGhpcy5hbGlnbkZvb3RlcjtcblxuICAgIGNvbnN0IGJhc2UgPSBbXG4gICAgICAncC00JyxcbiAgICAgIGVmZmVjdGl2ZUFsaWduID09PSAnZnVsbC13aWR0aCdcbiAgICAgICAgPyAnZmxleCBmbGV4LWNvbCBnYXAtMidcbiAgICAgICAgOiBlZmZlY3RpdmVBbGlnbiA9PT0gJ2xlZnQnXG4gICAgICAgICAgPyAnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIganVzdGlmeS1zdGFydCdcbiAgICAgICAgICA6ICdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBqdXN0aWZ5LWVuZCcsXG4gICAgICB0aGlzLmZvb3RlckNsYXNzTmFtZVxuICAgIF07XG5cbiAgICByZXR1cm4gYmFzZS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwib3BlblwiIGNsYXNzPVwiZml4ZWQgaW5zZXQtMCB6LTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNFwiPlxuICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy1mb3JlZ3JvdW5kLzMwXCIgKGNsaWNrKT1cIm9uQmFja2Ryb3BDbGljaygpXCI+PC9kaXY+XG4gIDxzZWN0aW9uIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiIFtuZ0NsYXNzXT1cInBhbmVsQ2xhc3NOYW1lXCI+XG4gICAgPGRpdiAqbmdJZj1cInNob3dIZWFkZXJcIiBbbmdDbGFzc109XCJoZWFkZXJXcmFwcGVyQ2xhc3NOYW1lXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWluLXctMFwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJtLTAgdGV4dC1sZyBmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodCB0ZXh0LWZvcmVncm91bmRcIj57eyB0aXRsZSB9fTwvaDI+XG4gICAgICAgIDxwICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBjbGFzcz1cIm0tMCBtdC0yIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e3sgZGVzY3JpcHRpb24gfX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93Q2xvc2VCdXR0b25cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTYgdy02IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1zbSBib3JkZXItMCBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1mb3JlZ3JvdW5kIG9wYWNpdHktNzAgcmluZy1vZmZzZXQtYmFja2dyb3VuZCB0cmFuc2l0aW9uLW9wYWNpdHkgaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJpbmcgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2UgZGlhbG9nXCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk02IDZMMTggMThNMTggNkw2IDE4XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgW25nQ2xhc3NdPVwiYm9keVdyYXBwZXJDbGFzc05hbWVcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93Rm9vdGVyXCIgW25nQ2xhc3NdPVwiZm9vdGVyV3JhcHBlckNsYXNzTmFtZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhbnQgPT09ICdjdXN0b20tY2xvc2UnOyBlbHNlIGRlZmF1bHRBY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBzaGFkb3ctc21cIlxuICAgICAgICAgIChjbGljayk9XCJvblNlY29uZGFyeUFjdGlvbigpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHNlY29uZGFyeUFjdGlvblRleHQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QWN0aW9ucz5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC05IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2Vjb25kYXJ5QWN0aW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgc2Vjb25kYXJ5QWN0aW9uVGV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC05IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBiZy1wcmltYXJ5IHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy1zbVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUHJpbWFyeUFjdGlvbigpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHByaW1hcnlBY3Rpb25UZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQVc5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQU1ILE1BQU0sT0FBTyxrQkFBa0I7SUFML0I7UUFNVyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsWUFBTyxHQUFxQixTQUFTLENBQUM7UUFFL0M7Ozs7Ozs7O1dBUUc7UUFDTSxTQUFJLEdBQWtCLFlBQVksQ0FBQztRQUVuQyxVQUFLLEdBQUcsY0FBYyxDQUFDO1FBQ3ZCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLHNCQUFpQixHQUFHLGNBQWMsQ0FBQztRQUNuQyx3QkFBbUIsR0FBRyxRQUFRLENBQUM7UUFDL0IsZ0JBQVcsR0FBeUIsT0FBTyxDQUFDO1FBQzVDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLG9CQUFlLEdBQUcs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QUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHUCxLQUFLO3NCQURKLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJlc3BvbnNpdmUgfSBmcm9tICcuLi8uLi91dGlscy9yZXNwb25zaXZlJztcbmltcG9ydCB7IFpfSU5ERVggfSBmcm9tICcuLi8uLi91dGlscy96LWluZGV4JztcblxuZXhwb3J0IHR5cGUgUGRtRGlhbG9nVmFyaWFudCA9ICdkZWZhdWx0JyB8ICdjdXN0b20tY2xvc2UnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSAncmVzcG9uc2l2ZScgbW9kZSBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjAuMy4wXG4gKi9cbmV4cG9ydCB0eXBlIFBkbURpYWxvZ1NpemUgPSAnZGVza3RvcCcgfCAnbW9iaWxlJyB8ICdtb2JpbGUtZnVsbHNjcmVlbicgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJ3Jlc3BvbnNpdmUnO1xuXG5leHBvcnQgdHlwZSBQZG1EaWFsb2dGb290ZXJBbGlnbiA9ICdyaWdodCcgfCAnZnVsbC13aWR0aCcgfCAnbGVmdCc7XG5cbi8qKlxuICogTW9kYWwvRGlhbG9nIGNvbXBvbmVudCBjb24gc29wb3J0ZSByZXNwb25zaXZlXG4gKiBcbiAqIE1FSk9SQURPIGVuIHYwLjIuMDpcbiAqIC0gTW9kbyAncmVzcG9uc2l2ZScgKGRlZmF1bHQpOiBmdWxsc2NyZWVuIGVuIG1vYmlsZSwgbW9kYWwgZW4gZGVza3RvcFxuICogLSBUYW1hw7FvcyBwcmVkZWZpbmlkb3M6IHNtLCBtZCwgbGcsIHhsXG4gKiAtIE1lam9yIG1hbmVqbyBkZSBzY3JvbGwgZW4gbW9iaWxlXG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXNwb25zaXZlIChyZWNvbWVuZGFkbylcbiAqIDxwZG0tZGlhbG9nIFtvcGVuXT1cImlzT3BlblwiIHNpemU9XCJyZXNwb25zaXZlXCI+XG4gKiAgIDxwPkNvbnRlbnQ8L3A+XG4gKiA8L3BkbS1kaWFsb2c+XG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBUYW1hw7FvIGZpam9cbiAqIDxwZG0tZGlhbG9nIFtvcGVuXT1cImlzT3BlblwiIHNpemU9XCJsZ1wiPlxuICogICA8cD5Db250ZW50PC9wPlxuICogPC9wZG0tZGlhbG9nPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwZG0tZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbURpYWxvZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIG9wZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdmFyaWFudDogUGRtRGlhbG9nVmFyaWFudCA9ICdkZWZhdWx0JztcbiAgXG4gIC8qKlxuICAgKiBUYW1hw7FvIGRlbCBkaWFsb2dcbiAgICogLSByZXNwb25zaXZlOiBmdWxsc2NyZWVuIG1vYmlsZSwgbW9kYWwgZGVza3RvcCAocmVjb21lbmRhZG8pXG4gICAqIC0gc206IDQwMHB4IG1heFxuICAgKiAtIG1kOiA1MDBweCBtYXhcbiAgICogLSBsZzogNjQwcHggbWF4IChkZWZhdWx0KVxuICAgKiAtIHhsOiA4MDBweCBtYXhcbiAgICogLSBkZXNrdG9wL21vYmlsZS9tb2JpbGUtZnVsbHNjcmVlbjogbGVnYWN5LCBkZXByZWNhZG9cbiAgICovXG4gIEBJbnB1dCgpIHNpemU6IFBkbURpYWxvZ1NpemUgPSAncmVzcG9uc2l2ZSc7XG4gIFxuICBASW5wdXQoKSB0aXRsZSA9ICdFZGl0IHByb2ZpbGUnO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbiA9ICcnO1xuICBASW5wdXQoKSBjbG9zZU9uQmFja2Ryb3AgPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zZU9uRXNjID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0Nsb3NlQnV0dG9uID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0hlYWRlciA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dGb290ZXIgPSB0cnVlO1xuICBASW5wdXQoKSBwcmltYXJ5QWN0aW9uVGV4dCA9ICdTYXZlIGNoYW5nZXMnO1xuICBASW5wdXQoKSBzZWNvbmRhcnlBY3Rpb25UZXh0ID0gJ0NhbmNlbCc7XG4gIEBJbnB1dCgpIGFsaWduRm9vdGVyOiBQZG1EaWFsb2dGb290ZXJBbGlnbiA9ICdyaWdodCc7XG4gIEBJbnB1dCgpIGhlYWRlckNsYXNzTmFtZSA9ICcnO1xuICBASW5wdXQoKSBib2R5Q2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGZvb3RlckNsYXNzTmFtZSA9ICcnO1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcblxuICBAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHByaW1hcnlBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWNvbmRhcnlBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICBvbkVzYygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuICYmIHRoaXMuY2xvc2VPbkVzYykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIG9uUHJpbWFyeUFjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnByaW1hcnlBY3Rpb24uZW1pdCgpO1xuICB9XG5cbiAgb25TZWNvbmRhcnlBY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWNvbmRhcnlBY3Rpb24uZW1pdCgpO1xuICB9XG5cbiAgb25CYWNrZHJvcENsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlT25CYWNrZHJvcCkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYW5lbENsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIC8vIExlZ2FjeSBzaXplcyAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgICBpZiAodGhpcy5zaXplID09PSAnZGVza3RvcCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ2xhc3NlcyhbJ21heC13LVs2NDBweF0nLCAnbWF4LWgtW2NhbGMoMTAwdmgtMnJlbSldJywgJ3JvdW5kZWQtWzEwcHhdJ10pO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5zaXplID09PSAnbW9iaWxlJykge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDbGFzc2VzKFsnbWF4LXctWzMyMHB4XScsICdtaW4taC1bMjQwcHhdJywgJ3JvdW5kZWQtWzEwcHhdJ10pO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5zaXplID09PSAnbW9iaWxlLWZ1bGxzY3JlZW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENsYXNzZXMoWydtYXgtdy1bMzIwcHhdJywgJ2gtW21pbigxMDBkdmgsNjQwcHgpXScsICdyb3VuZGVkLW5vbmUnLCAnc206cm91bmRlZC1bMTBweF0nXSk7XG4gICAgfVxuXG4gICAgLy8gTmV3IHJlc3BvbnNpdmUgbW9kZSAocmVjb21lbmRhZG8pXG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gJ3Jlc3BvbnNpdmUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENsYXNzZXMoW1xuICAgICAgICAvLyBNb2JpbGU6IGZ1bGxzY3JlZW4gY29uIGJvcmRlcyByZWRvbmRlYWRvcyBzb2xvIGFycmliYVxuICAgICAgICAndy1mdWxsJyxcbiAgICAgICAgJ2gtZnVsbCcsXG4gICAgICAgICdtYXgtaC1bMTAwZHZoXScsXG4gICAgICAgICdyb3VuZGVkLXQtWzEwcHhdJyxcbiAgICAgICAgJ3NtOnJvdW5kZWQtWzEwcHhdJyxcbiAgICAgICAgLy8gRGVza3RvcDogbW9kYWwgY2VudHJhZG9cbiAgICAgICAgJ3NtOnctYXV0bycsXG4gICAgICAgICdzbTpoLWF1dG8nLFxuICAgICAgICAnc206bWF4LXctWzY0MHB4XScsXG4gICAgICAgICdzbTptYXgtaC1bY2FsYygxMDB2aC00cmVtKV0nXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBOZXcgc2l6ZSBvcHRpb25zXG4gICAgY29uc3Qgc2l6ZU1hcCA9IHtcbiAgICAgIHNtOiAnc206bWF4LXctWzQwMHB4XScsXG4gICAgICBtZDogJ3NtOm1heC13LVs1MDBweF0nLFxuICAgICAgbGc6ICdzbTptYXgtdy1bNjQwcHhdJyxcbiAgICAgIHhsOiAnc206bWF4LXctWzgwMHB4XSdcbiAgICB9O1xuXG4gICAgY29uc3QgbWF4V2lkdGggPSBzaXplTWFwW3RoaXMuc2l6ZSBhcyBrZXlvZiB0eXBlb2Ygc2l6ZU1hcF0gfHwgc2l6ZU1hcC5sZztcblxuICAgIHJldHVybiB0aGlzLmJ1aWxkQ2xhc3NlcyhbXG4gICAgICAvLyBNb2JpbGU6IGZ1bGxzY3JlZW5cbiAgICAgICd3LWZ1bGwnLFxuICAgICAgJ2gtZnVsbCcsXG4gICAgICAnbWF4LWgtWzEwMGR2aF0nLFxuICAgICAgJ3JvdW5kZWQtdC1bMTBweF0nLFxuICAgICAgLy8gRGVza3RvcDogbW9kYWxcbiAgICAgICdzbTpyb3VuZGVkLVsxMHB4XScsXG4gICAgICAnc206dy1hdXRvJyxcbiAgICAgICdzbTpoLWF1dG8nLFxuICAgICAgbWF4V2lkdGgsXG4gICAgICAnc206bWF4LWgtW2NhbGMoMTAwdmgtNHJlbSldJ1xuICAgIF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENsYXNzZXMoc2l6ZUNsYXNzZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlID0gW1xuICAgICAgJ3JlbGF0aXZlJyxcbiAgICAgIFpfSU5ERVgubW9kYWwsIC8vIHotWzYwXSAtIGRlYmUgZXN0YXIgc29icmUgYmFja2Ryb3AgKHotNTApXG4gICAgICAnZmxleCcsXG4gICAgICAnZmxleC1jb2wnLFxuICAgICAgJ2JvcmRlcicsXG4gICAgICAnYm9yZGVyLWJvcmRlcicsXG4gICAgICAnYmctYmFja2dyb3VuZCcsXG4gICAgICAndGV4dC1mb3JlZ3JvdW5kJyxcbiAgICAgICdzaGFkb3ctbGcnLFxuICAgICAgJ292ZXJmbG93LWhpZGRlbicsXG4gICAgICAuLi5zaXplQ2xhc3NlcyxcbiAgICAgIHRoaXMuY2xhc3NOYW1lXG4gICAgXTtcblxuICAgIHJldHVybiBiYXNlLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIH1cblxuICBnZXQgYm9keVdyYXBwZXJDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlID0gW1xuICAgICAgJ2ZsZXgtMScsXG4gICAgICAnb3ZlcmZsb3cteS1hdXRvJyxcbiAgICAgICdweC00JyxcbiAgICAgICdweS02JyxcbiAgICAgICdzbTpweC02JyxcbiAgICAgIHRoaXMuYm9keUNsYXNzTmFtZVxuICAgIF07XG5cbiAgICByZXR1cm4gYmFzZS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB9XG5cbiAgZ2V0IGhlYWRlcldyYXBwZXJDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlID0gW1xuICAgICAgJ2ZsZXgnLFxuICAgICAgJ2l0ZW1zLXN0YXJ0JyxcbiAgICAgICdqdXN0aWZ5LWJldHdlZW4nLFxuICAgICAgJ2dhcC0zJyxcbiAgICAgICdwLTQnLFxuICAgICAgJ3NtOnAtNicsXG4gICAgICAnYm9yZGVyLWInLFxuICAgICAgJ2JvcmRlci1ib3JkZXInLFxuICAgICAgdGhpcy5oZWFkZXJDbGFzc05hbWVcbiAgICBdO1xuICAgIFxuICAgIHJldHVybiBiYXNlLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIH1cblxuICBnZXQgZm9vdGVyV3JhcHBlckNsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVmZmVjdGl2ZUFsaWduID1cbiAgICAgIHRoaXMuYWxpZ25Gb290ZXIgPT09ICdyaWdodCcgJiYgdGhpcy52YXJpYW50ID09PSAnY3VzdG9tLWNsb3NlJyA/ICdsZWZ0JyA6IHRoaXMuYWxpZ25Gb290ZXI7XG5cbiAgICBjb25zdCBiYXNlID0gW1xuICAgICAgJ3AtNCcsXG4gICAgICAnc206cC02JyxcbiAgICAgICdib3JkZXItdCcsXG4gICAgICAnYm9yZGVyLWJvcmRlcicsXG4gICAgICAvLyBNb2JpbGU6IHNpZW1wcmUgZnVsbC13aWR0aFxuICAgICAgJ2ZsZXgnLFxuICAgICAgJ2ZsZXgtY29sJyxcbiAgICAgICdnYXAtMicsXG4gICAgICAvLyBEZXNrdG9wOiBzZWfDum4gYWxpZ25Gb290ZXJcbiAgICAgIGVmZmVjdGl2ZUFsaWduID09PSAnZnVsbC13aWR0aCdcbiAgICAgICAgPyAnc206ZmxleC1jb2wnXG4gICAgICAgIDogJ3NtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlcicsXG4gICAgICBlZmZlY3RpdmVBbGlnbiA9PT0gJ2xlZnQnID8gJ3NtOmp1c3RpZnktc3RhcnQnIDogJycsXG4gICAgICBlZmZlY3RpdmVBbGlnbiA9PT0gJ3JpZ2h0JyA/ICdzbTpqdXN0aWZ5LWVuZCcgOiAnJyxcbiAgICAgIHRoaXMuZm9vdGVyQ2xhc3NOYW1lXG4gICAgXTtcblxuICAgIHJldHVybiBiYXNlLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIH1cblxuICBnZXQgY29udGFpbmVyQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgLy8gQ29udGFpbmVyIGNvbiBiYWNrZHJvcCB6LTUwXG4gICAgLy8gTW9iaWxlOiBmdWxsc2NyZWVuIGRlc2RlIGVsIGJvdHRvbVxuICAgIC8vIERlc2t0b3A6IGNlbnRyYWRvXG4gICAgcmV0dXJuIHJlc3BvbnNpdmUoe1xuICAgICAgZGVmYXVsdDogYGZpeGVkIGluc2V0LXgtMCBib3R0b20tMCAke1pfSU5ERVgubW9kYWxCYWNrZHJvcH0gZmxleCBpdGVtcy1lbmQganVzdGlmeS1jZW50ZXJgLFxuICAgICAgc206IGBmaXhlZCBpbnNldC0wICR7Wl9JTkRFWC5tb2RhbEJhY2tkcm9wfSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTRgXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJvcGVuXCIgW25nQ2xhc3NdPVwiY29udGFpbmVyQ2xhc3NOYW1lXCI+XG4gIDwhLS0gQmFja2Ryb3AgLS0+XG4gIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGJnLWZvcmVncm91bmQvMzAgYmFja2Ryb3AtYmx1ci1zbVwiIChjbGljayk9XCJvbkJhY2tkcm9wQ2xpY2soKVwiPjwvZGl2PlxuICBcbiAgPCEtLSBEaWFsb2cgUGFuZWwgLS0+XG4gIDxzZWN0aW9uIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiIFtuZ0NsYXNzXT1cInBhbmVsQ2xhc3NOYW1lXCI+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiAqbmdJZj1cInNob3dIZWFkZXJcIiBbbmdDbGFzc109XCJoZWFkZXJXcmFwcGVyQ2xhc3NOYW1lXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWluLXctMCBmbGV4LTFcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwibS0wIHRleHQtbGcgZm9udC1zZW1pYm9sZCBsZWFkaW5nLW5vbmUgdHJhY2tpbmctdGlnaHQgdGV4dC1mb3JlZ3JvdW5kXCI+e3sgdGl0bGUgfX08L2gyPlxuICAgICAgICA8cCAqbmdJZj1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJtLTAgbXQtMiB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPnt7IGRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd0Nsb3NlQnV0dG9uXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC02IHctNiBmbGV4LXNocmluay0wIGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1zbSBib3JkZXItMCBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1mb3JlZ3JvdW5kIG9wYWNpdHktNzAgcmluZy1vZmZzZXQtYmFja2dyb3VuZCB0cmFuc2l0aW9uLW9wYWNpdHkgaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJpbmcgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2UgZGlhbG9nXCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk02IDZMMTggMThNMTggNkw2IDE4XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQm9keSAtLT5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cImJvZHlXcmFwcGVyQ2xhc3NOYW1lXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvb3RlciAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0Zvb3RlclwiIFtuZ0NsYXNzXT1cImZvb3RlcldyYXBwZXJDbGFzc05hbWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYW50ID09PSAnY3VzdG9tLWNsb3NlJzsgZWxzZSBkZWZhdWx0QWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgdy1mdWxsIGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSBzbTp3LWF1dG9cIlxuICAgICAgICAgIChjbGljayk9XCJvblNlY29uZGFyeUFjdGlvbigpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHNlY29uZGFyeUFjdGlvblRleHQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QWN0aW9ucz5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC05IHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBzaGFkb3ctc20gc206dy1hdXRvXCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWNvbmRhcnlBY3Rpb24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzZWNvbmRhcnlBY3Rpb25UZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgdy1mdWxsIGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBiZy1wcmltYXJ5IHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy1zbSBzbTp3LWF1dG9cIlxuICAgICAgICAgIChjbGljayk9XCJvblByaW1hcnlBY3Rpb24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcmltYXJ5QWN0aW9uVGV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuIl19