cloud-ide-element 0.0.1 → 1.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 (50) hide show
  1. package/README.md +271 -24
  2. package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +182 -0
  3. package/esm2022/lib/components/data-grid/data-grid.component.mjs +1363 -0
  4. package/esm2022/lib/components/data-grid/data-grid.types.mjs +37 -0
  5. package/esm2022/lib/components/dropdown/dropdown.component.mjs +396 -0
  6. package/esm2022/lib/components/global-notifications/global-notifications.component.mjs +30 -0
  7. package/esm2022/lib/components/json-editor/json-editor.component.mjs +521 -0
  8. package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +33 -0
  9. package/esm2022/lib/components/toast-notification/toast-notification.component.mjs +152 -0
  10. package/esm2022/lib/elements/button/cide-ele-button.component.mjs +249 -0
  11. package/esm2022/lib/elements/file-input/file-input.component.mjs +83 -0
  12. package/esm2022/lib/elements/icon/icon.component.mjs +5 -3
  13. package/esm2022/lib/elements/input/input.component.mjs +34 -20
  14. package/esm2022/lib/elements/select/select.component.mjs +471 -0
  15. package/esm2022/lib/elements/tab/cide-ele-tab.component.mjs +74 -0
  16. package/esm2022/lib/elements/textarea/textarea.component.mjs +157 -0
  17. package/esm2022/lib/services/confirmation.service.mjs +151 -0
  18. package/esm2022/lib/services/dropdown-manager.service.mjs +93 -0
  19. package/esm2022/lib/services/notification.service.mjs +196 -0
  20. package/esm2022/lib/utils/directives/resizer/resizer.directive.mjs +231 -0
  21. package/esm2022/lib/utils/directives/tooltip/tooltip.directive.mjs +294 -0
  22. package/esm2022/lib/utils/services/elements/elements.service.mjs +9 -7
  23. package/esm2022/public-api.mjs +23 -2
  24. package/fesm2022/cloud-ide-element.mjs +4646 -47
  25. package/fesm2022/cloud-ide-element.mjs.map +1 -1
  26. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +16 -0
  27. package/lib/components/data-grid/data-grid.component.d.ts +244 -0
  28. package/lib/components/data-grid/data-grid.types.d.ts +146 -0
  29. package/lib/components/dropdown/dropdown.component.d.ts +75 -0
  30. package/lib/components/global-notifications/global-notifications.component.d.ts +5 -0
  31. package/lib/components/json-editor/json-editor.component.d.ts +116 -0
  32. package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +11 -0
  33. package/lib/components/toast-notification/toast-notification.component.d.ts +13 -0
  34. package/lib/elements/button/cide-ele-button.component.d.ts +85 -0
  35. package/lib/elements/file-input/file-input.component.d.ts +25 -0
  36. package/lib/elements/input/input.component.d.ts +7 -4
  37. package/lib/elements/select/select.component.d.ts +91 -0
  38. package/lib/elements/tab/cide-ele-tab.component.d.ts +26 -0
  39. package/lib/elements/textarea/textarea.component.d.ts +47 -0
  40. package/lib/services/confirmation.service.d.ts +65 -0
  41. package/lib/services/dropdown-manager.service.d.ts +22 -0
  42. package/lib/services/notification.service.d.ts +81 -0
  43. package/lib/utils/directives/resizer/resizer.directive.d.ts +44 -0
  44. package/lib/utils/directives/tooltip/tooltip.directive.d.ts +43 -0
  45. package/package.json +30 -4
  46. package/public-api.d.ts +18 -1
  47. package/src/lib/assets/css/cide-ele-style.scss +85 -0
  48. package/src/lib/assets/css/cide-ele-variable.scss +336 -0
  49. package/esm2022/lib/elements/button/button.component.mjs +0 -60
  50. package/lib/elements/button/button.component.d.ts +0 -27
@@ -0,0 +1,152 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { CideIconComponent } from '../../elements/icon/icon.component';
4
+ import { NotificationService } from '../../services/notification.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ export class CideEleToastNotificationComponent {
8
+ constructor() {
9
+ this.notificationService = inject(NotificationService);
10
+ // Signals
11
+ this.activeNotifications = this.notificationService.getActiveNotifications();
12
+ }
13
+ // Methods
14
+ getToastClass(notification) {
15
+ return `toast-${notification.type}`;
16
+ }
17
+ getIconClass(type) {
18
+ return `toast-icon ${type}`;
19
+ }
20
+ removeNotification(id) {
21
+ this.notificationService.remove(id);
22
+ }
23
+ executeUndo(id) {
24
+ this.notificationService.executeUndo(id);
25
+ }
26
+ trackByNotification(index, notification) {
27
+ return notification.id;
28
+ }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleToastNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideEleToastNotificationComponent, isStandalone: true, selector: "cide-ele-toast-notification", ngImport: i0, template: `
31
+ <!-- Toast Container -->
32
+ <div class="toast-container">
33
+ <div
34
+ *ngFor="let notification of activeNotifications(); trackBy: trackByNotification"
35
+ class="toast-notification"
36
+ [class]="getToastClass(notification)"
37
+ [@toastAnimation]>
38
+
39
+ <!-- Toast Content -->
40
+ <div class="toast-content">
41
+ <!-- Icon -->
42
+ <div class="toast-icon" [class]="getIconClass(notification.type)">
43
+ <cide-ele-icon size="sm">
44
+ {{ notification.icon }}
45
+ </cide-ele-icon>
46
+ </div>
47
+
48
+ <!-- Text Content -->
49
+ <div class="toast-text">
50
+ <div *ngIf="notification.title" class="toast-title">
51
+ {{ notification.title }}
52
+ </div>
53
+ <div class="toast-message">
54
+ {{ notification.message }}
55
+ </div>
56
+ </div>
57
+
58
+ <!-- Close Button -->
59
+ <button
60
+ type="button"
61
+ class="toast-close"
62
+ (click)="removeNotification(notification.id)"
63
+ aria-label="Close notification">
64
+ <cide-ele-icon size="xs">close</cide-ele-icon>
65
+ </button>
66
+ </div>
67
+
68
+ <!-- Undo Button -->
69
+ <div *ngIf="notification.showUndo" class="toast-actions">
70
+ <button
71
+ type="button"
72
+ class="toast-undo-btn"
73
+ (click)="executeUndo(notification.id)">
74
+ {{ notification.undoText }}
75
+ </button>
76
+ </div>
77
+
78
+ <!-- Progress Bar -->
79
+ <div
80
+ *ngIf="notification.duration > 0"
81
+ class="toast-progress"
82
+ [style.animation-duration]="notification.duration + 'ms'">
83
+ </div>
84
+ </div>
85
+ </div>
86
+ `, isInline: true, styles: [".toast-container{position:fixed;top:20px;right:20px;z-index:9990;display:flex;flex-direction:column;gap:12px;max-width:400px;width:100%}.toast-notification{background:#fff;border-radius:8px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border:1px solid #e5e7eb;overflow:hidden;position:relative;animation:slideInRight .3s ease-out}.toast-notification.success{border-left:4px solid #16a34a}.toast-notification.error{border-left:4px solid #dc2626}.toast-notification.warning{border-left:4px solid #d97706}.toast-notification.info{border-left:4px solid #2563eb}.toast-content{display:flex;align-items:flex-start;gap:12px;padding:16px}.toast-icon{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.toast-icon.success{background-color:#f0fdf4;color:#16a34a}.toast-icon.error{background-color:#fef2f2;color:#dc2626}.toast-icon.warning{background-color:#fffbeb;color:#d97706}.toast-icon.info{background-color:#eff6ff;color:#2563eb}.toast-text{flex:1;min-width:0}.toast-title{font-size:14px;font-weight:600;color:#111827;margin-bottom:4px;line-height:1.4}.toast-message{font-size:14px;color:#6b7280;line-height:1.4}.toast-close{background:none;border:none;color:#9ca3af;cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0}.toast-close:hover{background-color:#f3f4f6;color:#6b7280}.toast-actions{padding:0 16px 16px;display:flex;justify-content:flex-end}.toast-undo-btn{background:none;border:none;color:#2563eb;font-size:14px;font-weight:500;cursor:pointer;padding:8px 12px;border-radius:6px;transition:all .2s ease}.toast-undo-btn:hover{background-color:#eff6ff}.toast-progress{position:absolute;bottom:0;left:0;height:3px;background-color:#e5e7eb;animation:progressShrink linear forwards}.toast-notification.success .toast-progress{background-color:#16a34a}.toast-notification.error .toast-progress{background-color:#dc2626}.toast-notification.warning .toast-progress{background-color:#d97706}.toast-notification.info .toast-progress{background-color:#2563eb}@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes slideOutRight{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}@keyframes progressShrink{0%{width:100%}to{width:0%}}@media (max-width: 640px){.toast-container{top:10px;right:10px;left:10px;max-width:none}.toast-notification{border-radius:6px}.toast-content{padding:12px}.toast-actions{padding:0 12px 12px}}.toast-close:focus,.toast-undo-btn:focus{outline:2px solid #2563eb;outline-offset:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }], animations: [
87
+ // Add animations here if needed
88
+ ] }); }
89
+ }
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleToastNotificationComponent, decorators: [{
91
+ type: Component,
92
+ args: [{ selector: 'cide-ele-toast-notification', standalone: true, imports: [CommonModule, CideIconComponent], template: `
93
+ <!-- Toast Container -->
94
+ <div class="toast-container">
95
+ <div
96
+ *ngFor="let notification of activeNotifications(); trackBy: trackByNotification"
97
+ class="toast-notification"
98
+ [class]="getToastClass(notification)"
99
+ [@toastAnimation]>
100
+
101
+ <!-- Toast Content -->
102
+ <div class="toast-content">
103
+ <!-- Icon -->
104
+ <div class="toast-icon" [class]="getIconClass(notification.type)">
105
+ <cide-ele-icon size="sm">
106
+ {{ notification.icon }}
107
+ </cide-ele-icon>
108
+ </div>
109
+
110
+ <!-- Text Content -->
111
+ <div class="toast-text">
112
+ <div *ngIf="notification.title" class="toast-title">
113
+ {{ notification.title }}
114
+ </div>
115
+ <div class="toast-message">
116
+ {{ notification.message }}
117
+ </div>
118
+ </div>
119
+
120
+ <!-- Close Button -->
121
+ <button
122
+ type="button"
123
+ class="toast-close"
124
+ (click)="removeNotification(notification.id)"
125
+ aria-label="Close notification">
126
+ <cide-ele-icon size="xs">close</cide-ele-icon>
127
+ </button>
128
+ </div>
129
+
130
+ <!-- Undo Button -->
131
+ <div *ngIf="notification.showUndo" class="toast-actions">
132
+ <button
133
+ type="button"
134
+ class="toast-undo-btn"
135
+ (click)="executeUndo(notification.id)">
136
+ {{ notification.undoText }}
137
+ </button>
138
+ </div>
139
+
140
+ <!-- Progress Bar -->
141
+ <div
142
+ *ngIf="notification.duration > 0"
143
+ class="toast-progress"
144
+ [style.animation-duration]="notification.duration + 'ms'">
145
+ </div>
146
+ </div>
147
+ </div>
148
+ `, animations: [
149
+ // Add animations here if needed
150
+ ], styles: [".toast-container{position:fixed;top:20px;right:20px;z-index:9990;display:flex;flex-direction:column;gap:12px;max-width:400px;width:100%}.toast-notification{background:#fff;border-radius:8px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border:1px solid #e5e7eb;overflow:hidden;position:relative;animation:slideInRight .3s ease-out}.toast-notification.success{border-left:4px solid #16a34a}.toast-notification.error{border-left:4px solid #dc2626}.toast-notification.warning{border-left:4px solid #d97706}.toast-notification.info{border-left:4px solid #2563eb}.toast-content{display:flex;align-items:flex-start;gap:12px;padding:16px}.toast-icon{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.toast-icon.success{background-color:#f0fdf4;color:#16a34a}.toast-icon.error{background-color:#fef2f2;color:#dc2626}.toast-icon.warning{background-color:#fffbeb;color:#d97706}.toast-icon.info{background-color:#eff6ff;color:#2563eb}.toast-text{flex:1;min-width:0}.toast-title{font-size:14px;font-weight:600;color:#111827;margin-bottom:4px;line-height:1.4}.toast-message{font-size:14px;color:#6b7280;line-height:1.4}.toast-close{background:none;border:none;color:#9ca3af;cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0}.toast-close:hover{background-color:#f3f4f6;color:#6b7280}.toast-actions{padding:0 16px 16px;display:flex;justify-content:flex-end}.toast-undo-btn{background:none;border:none;color:#2563eb;font-size:14px;font-weight:500;cursor:pointer;padding:8px 12px;border-radius:6px;transition:all .2s ease}.toast-undo-btn:hover{background-color:#eff6ff}.toast-progress{position:absolute;bottom:0;left:0;height:3px;background-color:#e5e7eb;animation:progressShrink linear forwards}.toast-notification.success .toast-progress{background-color:#16a34a}.toast-notification.error .toast-progress{background-color:#dc2626}.toast-notification.warning .toast-progress{background-color:#d97706}.toast-notification.info .toast-progress{background-color:#2563eb}@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes slideOutRight{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}@keyframes progressShrink{0%{width:100%}to{width:0%}}@media (max-width: 640px){.toast-container{top:10px;right:10px;left:10px;max-width:none}.toast-notification{border-radius:6px}.toast-content{padding:12px}.toast-actions{padding:0 12px 12px}}.toast-close:focus,.toast-undo-btn:focus{outline:2px solid #2563eb;outline-offset:2px}\n"] }]
151
+ }] });
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Qtbm90aWZpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1lbGVtZW50L3NyYy9saWIvY29tcG9uZW50cy90b2FzdC1ub3RpZmljYXRpb24vdG9hc3Qtbm90aWZpY2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBb0IsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBa1M1RixNQUFNLE9BQU8saUNBQWlDO0lBaFM5QztRQWlTVSx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUxRCxVQUFVO1FBQ1Ysd0JBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLENBQUM7S0FzQnpFO0lBcEJDLFVBQVU7SUFDVixhQUFhLENBQUMsWUFBOEI7UUFDMUMsT0FBTyxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVk7UUFDdkIsT0FBTyxjQUFjLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFVO1FBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWEsRUFBRSxZQUE4QjtRQUMvRCxPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0F6QlUsaUNBQWlDO2tHQUFqQyxpQ0FBaUMsdUZBNVJsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3RFQsZ3JGQXpEUyxZQUFZLGdRQUFFLGlCQUFpQixpRkF5UjdCO1FBQ1YsZ0NBQWdDO1NBQ2pDOzsyRkFFVSxpQ0FBaUM7a0JBaFM3QyxTQUFTOytCQUNFLDZCQUE2QixjQUMzQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsWUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0RULGNBZ09XO29CQUNWLGdDQUFnQztxQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIHNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENpZGVJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25JdGVtIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjaWRlLWVsZS10b2FzdC1ub3RpZmljYXRpb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaWRlSWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPCEtLSBUb2FzdCBDb250YWluZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cInRvYXN0LWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBcbiAgICAgICAgKm5nRm9yPVwibGV0IG5vdGlmaWNhdGlvbiBvZiBhY3RpdmVOb3RpZmljYXRpb25zKCk7IHRyYWNrQnk6IHRyYWNrQnlOb3RpZmljYXRpb25cIlxuICAgICAgICBjbGFzcz1cInRvYXN0LW5vdGlmaWNhdGlvblwiXG4gICAgICAgIFtjbGFzc109XCJnZXRUb2FzdENsYXNzKG5vdGlmaWNhdGlvbilcIlxuICAgICAgICBbQHRvYXN0QW5pbWF0aW9uXT5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gVG9hc3QgQ29udGVudCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRvYXN0LWNvbnRlbnRcIj5cbiAgICAgICAgICA8IS0tIEljb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvYXN0LWljb25cIiBbY2xhc3NdPVwiZ2V0SWNvbkNsYXNzKG5vdGlmaWNhdGlvbi50eXBlKVwiPlxuICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgIHt7IG5vdGlmaWNhdGlvbi5pY29uIH19XG4gICAgICAgICAgICA8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBUZXh0IENvbnRlbnQgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvYXN0LXRleHRcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJub3RpZmljYXRpb24udGl0bGVcIiBjbGFzcz1cInRvYXN0LXRpdGxlXCI+XG4gICAgICAgICAgICAgIHt7IG5vdGlmaWNhdGlvbi50aXRsZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9hc3QtbWVzc2FnZVwiPlxuICAgICAgICAgICAgICB7eyBub3RpZmljYXRpb24ubWVzc2FnZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBDbG9zZSBCdXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b2FzdC1jbG9zZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbi5pZClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIG5vdGlmaWNhdGlvblwiPlxuICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gc2l6ZT1cInhzXCI+Y2xvc2U8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgPCEtLSBVbmRvIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vdGlmaWNhdGlvbi5zaG93VW5kb1wiIGNsYXNzPVwidG9hc3QtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidG9hc3QtdW5kby1idG5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWN1dGVVbmRvKG5vdGlmaWNhdGlvbi5pZClcIj5cbiAgICAgICAgICAgIHt7IG5vdGlmaWNhdGlvbi51bmRvVGV4dCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gUHJvZ3Jlc3MgQmFyIC0tPlxuICAgICAgICA8ZGl2IFxuICAgICAgICAgICpuZ0lmPVwibm90aWZpY2F0aW9uLmR1cmF0aW9uID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJ0b2FzdC1wcm9ncmVzc1wiXG4gICAgICAgICAgW3N0eWxlLmFuaW1hdGlvbi1kdXJhdGlvbl09XCJub3RpZmljYXRpb24uZHVyYXRpb24gKyAnbXMnXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAudG9hc3QtY29udGFpbmVyIHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHRvcDogMjBweDtcbiAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgei1pbmRleDogOTk5MDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiAxMnB4O1xuICAgICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIC50b2FzdC1ub3RpZmljYXRpb24ge1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBib3gtc2hhZG93OiAwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNWU3ZWI7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgYW5pbWF0aW9uOiBzbGlkZUluUmlnaHQgMC4zcyBlYXNlLW91dDtcbiAgICB9XG5cbiAgICAudG9hc3Qtbm90aWZpY2F0aW9uLnN1Y2Nlc3Mge1xuICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMTZhMzRhO1xuICAgIH1cblxuICAgIC50b2FzdC1ub3RpZmljYXRpb24uZXJyb3Ige1xuICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjZGMyNjI2O1xuICAgIH1cblxuICAgIC50b2FzdC1ub3RpZmljYXRpb24ud2FybmluZyB7XG4gICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICNkOTc3MDY7XG4gICAgfVxuXG4gICAgLnRvYXN0LW5vdGlmaWNhdGlvbi5pbmZvIHtcbiAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzI1NjNlYjtcbiAgICB9XG5cbiAgICAudG9hc3QtY29udGVudCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICBnYXA6IDEycHg7XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgIH1cblxuICAgIC50b2FzdC1pY29uIHtcbiAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgIH1cblxuICAgIC50b2FzdC1pY29uLnN1Y2Nlc3Mge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZmRmNDtcbiAgICAgIGNvbG9yOiAjMTZhMzRhO1xuICAgIH1cblxuICAgIC50b2FzdC1pY29uLmVycm9yIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWYyZjI7XG4gICAgICBjb2xvcjogI2RjMjYyNjtcbiAgICB9XG5cbiAgICAudG9hc3QtaWNvbi53YXJuaW5nIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZiZWI7XG4gICAgICBjb2xvcjogI2Q5NzcwNjtcbiAgICB9XG5cbiAgICAudG9hc3QtaWNvbi5pbmZvIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZmY2ZmY7XG4gICAgICBjb2xvcjogIzI1NjNlYjtcbiAgICB9XG5cbiAgICAudG9hc3QtdGV4dCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cblxuICAgIC50b2FzdC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICMxMTE4Mjc7XG4gICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgIH1cblxuICAgIC50b2FzdC1tZXNzYWdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGNvbG9yOiAjNmI3MjgwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICB9XG5cbiAgICAudG9hc3QtY2xvc2Uge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGNvbG9yOiAjOWNhM2FmO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgcGFkZGluZzogNHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAudG9hc3QtY2xvc2U6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNjtcbiAgICAgIGNvbG9yOiAjNmI3MjgwO1xuICAgIH1cblxuICAgIC50b2FzdC1hY3Rpb25zIHtcbiAgICAgIHBhZGRpbmc6IDAgMTZweCAxNnB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgfVxuXG4gICAgLnRvYXN0LXVuZG8tYnRuIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBjb2xvcjogIzI1NjNlYjtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgfVxuXG4gICAgLnRvYXN0LXVuZG8tYnRuOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZmY2ZmY7XG4gICAgfVxuXG4gICAgLnRvYXN0LXByb2dyZXNzIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBoZWlnaHQ6IDNweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWU3ZWI7XG4gICAgICBhbmltYXRpb246IHByb2dyZXNzU2hyaW5rIGxpbmVhciBmb3J3YXJkcztcbiAgICB9XG5cbiAgICAudG9hc3Qtbm90aWZpY2F0aW9uLnN1Y2Nlc3MgLnRvYXN0LXByb2dyZXNzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxNmEzNGE7XG4gICAgfVxuXG4gICAgLnRvYXN0LW5vdGlmaWNhdGlvbi5lcnJvciAudG9hc3QtcHJvZ3Jlc3Mge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RjMjYyNjtcbiAgICB9XG5cbiAgICAudG9hc3Qtbm90aWZpY2F0aW9uLndhcm5pbmcgLnRvYXN0LXByb2dyZXNzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkOTc3MDY7XG4gICAgfVxuXG4gICAgLnRvYXN0LW5vdGlmaWNhdGlvbi5pbmZvIC50b2FzdC1wcm9ncmVzcyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjU2M2ViO1xuICAgIH1cblxuICAgIC8qIEFuaW1hdGlvbnMgKi9cbiAgICBAa2V5ZnJhbWVzIHNsaWRlSW5SaWdodCB7XG4gICAgICBmcm9tIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgfVxuICAgICAgdG8ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGtleWZyYW1lcyBzbGlkZU91dFJpZ2h0IHtcbiAgICAgIGZyb20ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgICB0byB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIHByb2dyZXNzU2hyaW5rIHtcbiAgICAgIGZyb20ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIHRvIHtcbiAgICAgICAgd2lkdGg6IDAlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIFJlc3BvbnNpdmUgRGVzaWduICovXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7XG4gICAgICAudG9hc3QtY29udGFpbmVyIHtcbiAgICAgICAgdG9wOiAxMHB4O1xuICAgICAgICByaWdodDogMTBweDtcbiAgICAgICAgbGVmdDogMTBweDtcbiAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgICAgfVxuXG4gICAgICAudG9hc3Qtbm90aWZpY2F0aW9uIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgfVxuXG4gICAgICAudG9hc3QtY29udGVudCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICB9XG5cbiAgICAgIC50b2FzdC1hY3Rpb25zIHtcbiAgICAgICAgcGFkZGluZzogMCAxMnB4IDEycHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogRm9jdXMgc3R5bGVzIGZvciBhY2Nlc3NpYmlsaXR5ICovXG4gICAgLnRvYXN0LWNsb3NlOmZvY3VzLFxuICAgIC50b2FzdC11bmRvLWJ0bjpmb2N1cyB7XG4gICAgICBvdXRsaW5lOiAycHggc29saWQgIzI1NjNlYjtcbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG4gICAgfVxuICBgXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIC8vIEFkZCBhbmltYXRpb25zIGhlcmUgaWYgbmVlZGVkXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2lkZUVsZVRvYXN0Tm90aWZpY2F0aW9uQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvblNlcnZpY2UpO1xuXG4gIC8vIFNpZ25hbHNcbiAgYWN0aXZlTm90aWZpY2F0aW9ucyA9IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZXRBY3RpdmVOb3RpZmljYXRpb25zKCk7XG5cbiAgLy8gTWV0aG9kc1xuICBnZXRUb2FzdENsYXNzKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB0b2FzdC0ke25vdGlmaWNhdGlvbi50eXBlfWA7XG4gIH1cblxuICBnZXRJY29uQ2xhc3ModHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHRvYXN0LWljb24gJHt0eXBlfWA7XG4gIH1cblxuICByZW1vdmVOb3RpZmljYXRpb24oaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5yZW1vdmUoaWQpO1xuICB9XG5cbiAgZXhlY3V0ZVVuZG8oaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5leGVjdXRlVW5kbyhpZCk7XG4gIH1cblxuICB0cmFja0J5Tm90aWZpY2F0aW9uKGluZGV4OiBudW1iZXIsIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbi5pZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,249 @@
1
+ import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { CideSpinnerComponent } from '../spinner/spinner.component';
4
+ import { Subject, debounceTime, takeUntil } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../../public-api";
7
+ import * as i2 from "@angular/router";
8
+ import * as i3 from "@angular/common";
9
+ /**
10
+ * Advanced Angular button component that provides a comprehensive button implementation
11
+ * with loading state, styling variants, animations, tooltips, and other features.
12
+ *
13
+ * This component uses proper Angular templating to avoid hydration issues (NG0500).
14
+ */
15
+ export class CideEleButtonComponent {
16
+ constructor(elementService, router, renderer, elementRef) {
17
+ this.elementService = elementService;
18
+ this.router = router;
19
+ this.renderer = renderer;
20
+ this.elementRef = elementRef;
21
+ this.destroy$ = new Subject();
22
+ this.clickCount = 0;
23
+ this.clickDebouncer$ = new Subject();
24
+ // INPUTS
25
+ /**
26
+ * @description Label of button like Submit, Update, Add, etc.
27
+ * Note: it is only used in case you did not set label between tags (via ng-content)
28
+ */
29
+ this.label = "";
30
+ /** @description Button style variant */
31
+ this.variant = 'primary';
32
+ /** @description Button size */
33
+ this.size = 'md';
34
+ /** @description Button HTML type attribute */
35
+ this.type = 'button';
36
+ /** @description Button shape */
37
+ this.shape = 'default';
38
+ /** @description Button shadow elevation */
39
+ this.elevation = 'medium';
40
+ /** @description Button disabled state */
41
+ this.disabled = false;
42
+ /** @description Unique ID of control, used to differentiate elements */
43
+ this.id = '';
44
+ /** @description Enables loading state with spinner */
45
+ this.loading = false;
46
+ /** @description Makes button take full width of container */
47
+ this.fullWidth = false;
48
+ /** @description Icon to display on the left side of the button */
49
+ this.leftIcon = '';
50
+ /** @description Icon to display on the right side of the button */
51
+ this.rightIcon = '';
52
+ /** @description Additional CSS classes to apply */
53
+ this.customClass = '';
54
+ /** @description Tooltip text to display on hover */
55
+ this.tooltip = '';
56
+ /** @description Aria label for accessibility */
57
+ this.ariaLabel = '';
58
+ /** @description Test ID for automated testing */
59
+ this.testId = '';
60
+ /** @description Route to navigate to when clicked (for link buttons) */
61
+ this.routerLink = '';
62
+ /** @description Router navigation extras */
63
+ this.routerExtras = {};
64
+ /** @description Prevent multiple rapid clicks (debounce) */
65
+ this.preventDoubleClick = true;
66
+ /** @description Animation on click */
67
+ this.animated = true;
68
+ // OUTPUTS
69
+ /**
70
+ * @description Click event of button
71
+ */
72
+ this.btnClick = new EventEmitter();
73
+ /**
74
+ * @description Double click event
75
+ */
76
+ this.doubleClick = new EventEmitter();
77
+ // Setup debounced click handler to prevent double-clicks
78
+ this.clickDebouncer$
79
+ .pipe(debounceTime(300), takeUntil(this.destroy$))
80
+ .subscribe({
81
+ next: (event) => {
82
+ this.handleClick(event);
83
+ }
84
+ });
85
+ }
86
+ onClick(event) {
87
+ if (this.disabled || this.loading) {
88
+ event.preventDefault();
89
+ event.stopPropagation();
90
+ return;
91
+ }
92
+ if (this.animated) {
93
+ this.addClickAnimation();
94
+ }
95
+ if (this.preventDoubleClick) {
96
+ this.clickDebouncer$.next(event);
97
+ }
98
+ else {
99
+ this.handleClick(event);
100
+ }
101
+ }
102
+ handleClick(event) {
103
+ // Handle navigation for routerLink
104
+ if (this.routerLink && this.routerLink.length) {
105
+ event.preventDefault();
106
+ this.router.navigate(Array.isArray(this.routerLink) ? this.routerLink : [this.routerLink], this.routerExtras);
107
+ }
108
+ // Handle double-click detection
109
+ this.clickCount++;
110
+ setTimeout(() => {
111
+ if (this.clickCount === 2) {
112
+ this.doubleClick.emit(event);
113
+ }
114
+ this.clickCount = 0;
115
+ }, 300);
116
+ // Emit standard click event
117
+ this.btnClick.emit(event);
118
+ }
119
+ addClickAnimation() {
120
+ // Add ripple effect
121
+ const ripple = this.renderer.createElement('span');
122
+ this.renderer.addClass(ripple, 'ripple-effect');
123
+ // Position the ripple at click position
124
+ const rect = this.elementRef.nativeElement.getBoundingClientRect();
125
+ const size = Math.max(rect.width, rect.height);
126
+ // Set ripple style
127
+ this.renderer.setStyle(ripple, 'width', `${size}px`);
128
+ this.renderer.setStyle(ripple, 'height', `${size}px`);
129
+ this.renderer.setStyle(ripple, 'left', `${0}px`);
130
+ this.renderer.setStyle(ripple, 'top', `${0}px`);
131
+ // Add ripple to button
132
+ this.renderer.appendChild(this.elementRef.nativeElement, ripple);
133
+ // Modern ES2022+ pattern: Use Promise-based delay
134
+ const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
135
+ delay(600).then(() => {
136
+ this.renderer.removeChild(this.elementRef.nativeElement, ripple);
137
+ });
138
+ }
139
+ ngOnInit() {
140
+ if (this.id) {
141
+ this.getControlData();
142
+ }
143
+ // Set aria-label if not explicitly provided
144
+ if (!this.ariaLabel && this.label) {
145
+ this.ariaLabel = this.label;
146
+ }
147
+ }
148
+ ngOnChanges(changes) {
149
+ // Update aria-label when label changes
150
+ if (changes['label'] && !this.ariaLabel) {
151
+ this.ariaLabel = changes['label'].currentValue;
152
+ }
153
+ }
154
+ ngOnDestroy() {
155
+ this.destroy$.next();
156
+ this.destroy$.complete();
157
+ }
158
+ async getControlData() {
159
+ const cide_element_data = await this.elementService?.getElementData({ sype_key: this.id });
160
+ if (cide_element_data) {
161
+ this.label = cide_element_data?.sype_label;
162
+ }
163
+ }
164
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleButtonComponent, deps: [{ token: i1.CideElementsService }, { token: i2.Router }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
165
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: CideEleButtonComponent, isStandalone: true, selector: "button[cideEleButton], a[cideEleButton]", inputs: { label: "label", variant: "variant", size: "size", type: "type", shape: "shape", elevation: "elevation", disabled: "disabled", id: "id", loading: "loading", fullWidth: "fullWidth", leftIcon: "leftIcon", rightIcon: "rightIcon", customClass: "customClass", tooltip: "tooltip", ariaLabel: "ariaLabel", testId: "testId", routerLink: "routerLink", routerExtras: "routerExtras", preventDoubleClick: "preventDoubleClick", animated: "animated" }, outputs: { btnClick: "btnClick", doubleClick: "doubleClick" }, host: { listeners: { "click": "onClick($event)" }, properties: { "class.cide-button-disabled": "disabled || loading", "attr.disabled": "(disabled || loading) ? true : null", "class.primary": "variant === \"primary\"", "class.secondary": "variant === \"secondary\"", "class.outline": "variant === \"outline\"", "class.text": "variant === \"text\"", "class.link": "variant === \"link\"", "class.success": "variant === \"success\"", "class.danger": "variant === \"danger\"", "class.warning": "variant === \"warning\"", "class.info": "variant === \"info\"", "class.xs": "size === \"xs\"", "class.sm": "size === \"sm\"", "class.md": "size === \"md\"", "class.lg": "size === \"lg\"", "class.xl": "size === \"xl\"", "class.rounded": "shape === \"rounded\"", "class.pill": "shape === \"pill\"", "class.square": "shape === \"square\"", "class.elevation-none": "elevation === \"none\"", "class.elevation-low": "elevation === \"low\"", "class.elevation-medium": "elevation === \"medium\"", "class.elevation-high": "elevation === \"high\"", "attr.type": "type", "attr.aria-label": "ariaLabel", "attr.aria-disabled": "disabled || loading", "attr.data-testid": "testId", "attr.title": "tooltip", "class": "customClass" }, classAttribute: "cide-button tw-rounded-md tw-text-white tw-py-0.5 tw-select-none tw-justify-around tw-flex" }, usesOnChanges: true, ngImport: i0, template: "<!-- Button content container -->\r\n<div class=\"tw-flex tw-items-center tw-justify-center cide-ele-btn-content tw-w-full\">\r\n <!-- Left icon -->\r\n @if (leftIcon) {\r\n <span class=\"tw-icon-container tw-mr-2\">\r\n <i class=\"tw-text-base material-symbols-outlined\">{{leftIcon}}</i>\r\n </span>\r\n }\r\n \r\n <!-- Loading spinner -->\r\n @if (loading) {\r\n <cide-ele-spinner\r\n class=\"tw-inline-block tw-my-1 tw-mr-2\" \r\n size=\"xs\"\r\n [ngClass]=\"{'cide-pill-disabled': (disabled || loading)}\">\r\n </cide-ele-spinner>\r\n }\r\n \r\n <!-- Button label or content -->\r\n @if (label) {\r\n <span>{{ label }}</span>\r\n } @else {\r\n <span class=\"tw-flex tw-items-center tw-justify-center\">\r\n <ng-content></ng-content>\r\n </span>\r\n }\r\n \r\n <!-- Right icon -->\r\n @if (rightIcon) {\r\n <span class=\"tw-icon-container tw-ml-2\">\r\n <i class=\"tw-text-base material-symbols-outlined\">{{rightIcon}}</i>\r\n </span>\r\n }\r\n \r\n <!-- Spacer for spinner when loading to maintain button width -->\r\n @if (loading) {\r\n <span class=\"tw-w-6 tw-p-1 tw-mr-2\"></span>\r\n }\r\n</div>\r\n", styles: [":host{position:relative;background-color:var(--cide-theme-color-brand-primary, #3b82f6);cursor:pointer;font-family:inherit;font-weight:500;outline:none;overflow:hidden;transition:all .2s ease-in-out;border:none;text-align:center;vertical-align:middle;text-decoration:none;line-height:1.5;letter-spacing:.025em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}:host:focus-visible{outline:2px solid var(--cide-theme-color-brand-primary);outline-offset:2px;box-shadow:0 0 0 3px #3b82f64d}:host:hover:not(:disabled){background-color:var(--cide-theme-color-brand-primary-hover, #2563eb);transform:translateY(-1px)}:host:active:not(:disabled){transform:translateY(1px)}:host.cide-button-disabled{background-color:var(--cide-button-background-disabled, #9ca3af)!important;cursor:var(--cide-button-cursor-disabled, not-allowed)!important;opacity:.7;pointer-events:none;transform:none!important}:host.xs{font-size:.75rem;padding:.2rem .4rem}:host.sm{font-size:.875rem;padding:.25rem .5rem}:host.md{font-size:1rem;padding:.25rem .75rem}:host.lg{font-size:1.125rem;padding:.75rem 1rem}:host.xl{font-size:1.25rem;padding:1rem 1.5rem}:host.rounded{border-radius:.5rem}:host.pill{border-radius:9999px}:host.square{border-radius:0}:host.elevation-none{box-shadow:none}:host.elevation-low{box-shadow:0 1px 2px #0000000d}:host.elevation-medium{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}:host.elevation-high{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.ripple-effect{position:absolute;border-radius:50%;background-color:#fff6;transform:scale(0);animation:ripple .6s linear;pointer-events:none}@keyframes ripple{to{transform:scale(4);opacity:0}}:host{color:#fff}:host.secondary{background-color:var(--cide-theme-secondary-color, #4b5563);color:#fff}:host.secondary:hover:not(:disabled){background-color:var(--cide-theme-secondary-color-hover, #374151)}:host.success{background-color:var(--cide-theme-success-color, #10b981);color:#fff}:host.success:hover:not(:disabled){background-color:var(--cide-theme-success-color-hover, #059669)}:host.danger{background-color:var(--cide-theme-danger-color, #ef4444);color:#fff}:host.danger:hover:not(:disabled){background-color:var(--cide-theme-danger-color-hover, #dc2626)}:host.warning{background-color:var(--cide-theme-warning-color, #f59e0b);color:#fff}:host.warning:hover:not(:disabled){background-color:var(--cide-theme-warning-color-hover, #d97706)}:host.info{background-color:var(--cide-theme-info-color, #3b82f6);color:#fff}:host.info:hover:not(:disabled){background-color:var(--cide-theme-info-color-hover, #2563eb)}:host.outline{background-color:transparent;color:var(--cide-theme-color-brand-primary, #3b82f6);border:1px solid var(--cide-theme-color-brand-primary, #3b82f6)}:host.outline:hover:not(:disabled){background-color:#3b82f60d}:host.outline.secondary{color:var(--cide-theme-secondary-color, #4b5563);border-color:var(--cide-theme-secondary-color, #4b5563)}:host.outline.success{color:var(--cide-theme-success-color, #10b981);border-color:var(--cide-theme-success-color, #10b981)}:host.outline.danger{color:var(--cide-theme-danger-color, #ef4444);border-color:var(--cide-theme-danger-color, #ef4444)}:host.outline.warning{color:var(--cide-theme-warning-color, #f59e0b);border-color:var(--cide-theme-warning-color, #f59e0b)}:host.outline.info{color:var(--cide-theme-info-color, #3b82f6);border-color:var(--cide-theme-info-color, #3b82f6)}:host.text{background-color:transparent;color:var(--cide-theme-color-brand-primary, #3b82f6);border:none;padding-left:.5rem;padding-right:.5rem}:host.text:hover:not(:disabled){background-color:#3b82f60d;text-decoration:underline}:host.text.secondary{color:var(--cide-theme-secondary-color, #4b5563)}:host.text.success{color:var(--cide-theme-success-color, #10b981)}:host.text.danger{color:var(--cide-theme-danger-color, #ef4444)}:host.text.warning{color:var(--cide-theme-warning-color, #f59e0b)}:host.text.info{color:var(--cide-theme-info-color, #3b82f6)}:host.link{background-color:transparent;color:var(--cide-theme-color-brand-primary, #3b82f6);border:none;text-decoration:underline;padding:0;font-weight:400}:host.link:hover:not(:disabled){color:var(--cide-theme-color-brand-primary-hover, #2563eb);text-decoration:underline}:host.link.secondary{color:var(--cide-theme-secondary-color, #4b5563)}:host.link.success{color:var(--cide-theme-success-color, #10b981)}:host.link.danger{color:var(--cide-theme-danger-color, #ef4444)}:host.link.warning{color:var(--cide-theme-warning-color, #f59e0b)}:host.link.info{color:var(--cide-theme-info-color, #3b82f6)}.tw-icon-container{display:inline-flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CideSpinnerComponent, selector: "cide-ele-spinner", inputs: ["size", "type"] }] }); }
166
+ }
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleButtonComponent, decorators: [{
168
+ type: Component,
169
+ args: [{ selector: 'button[cideEleButton], a[cideEleButton]', standalone: true, imports: [CommonModule, CideSpinnerComponent], host: {
170
+ 'class': 'cide-button tw-rounded-md tw-text-white tw-py-0.5 tw-select-none tw-justify-around tw-flex',
171
+ '[class.cide-button-disabled]': 'disabled || loading',
172
+ '[attr.disabled]': '(disabled || loading) ? true : null',
173
+ '[class.primary]': 'variant === "primary"',
174
+ '[class.secondary]': 'variant === "secondary"',
175
+ '[class.outline]': 'variant === "outline"',
176
+ '[class.text]': 'variant === "text"',
177
+ '[class.link]': 'variant === "link"',
178
+ '[class.success]': 'variant === "success"',
179
+ '[class.danger]': 'variant === "danger"',
180
+ '[class.warning]': 'variant === "warning"',
181
+ '[class.info]': 'variant === "info"',
182
+ '[class.xs]': 'size === "xs"',
183
+ '[class.sm]': 'size === "sm"',
184
+ '[class.md]': 'size === "md"',
185
+ '[class.lg]': 'size === "lg"',
186
+ '[class.xl]': 'size === "xl"',
187
+ '[class.rounded]': 'shape === "rounded"',
188
+ '[class.pill]': 'shape === "pill"',
189
+ '[class.square]': 'shape === "square"',
190
+ '[class.elevation-none]': 'elevation === "none"',
191
+ '[class.elevation-low]': 'elevation === "low"',
192
+ '[class.elevation-medium]': 'elevation === "medium"',
193
+ '[class.elevation-high]': 'elevation === "high"',
194
+ '[attr.type]': 'type',
195
+ '[attr.aria-label]': 'ariaLabel',
196
+ '[attr.aria-disabled]': 'disabled || loading',
197
+ '[attr.data-testid]': 'testId',
198
+ '[attr.title]': 'tooltip',
199
+ '[class]': 'customClass'
200
+ }, template: "<!-- Button content container -->\r\n<div class=\"tw-flex tw-items-center tw-justify-center cide-ele-btn-content tw-w-full\">\r\n <!-- Left icon -->\r\n @if (leftIcon) {\r\n <span class=\"tw-icon-container tw-mr-2\">\r\n <i class=\"tw-text-base material-symbols-outlined\">{{leftIcon}}</i>\r\n </span>\r\n }\r\n \r\n <!-- Loading spinner -->\r\n @if (loading) {\r\n <cide-ele-spinner\r\n class=\"tw-inline-block tw-my-1 tw-mr-2\" \r\n size=\"xs\"\r\n [ngClass]=\"{'cide-pill-disabled': (disabled || loading)}\">\r\n </cide-ele-spinner>\r\n }\r\n \r\n <!-- Button label or content -->\r\n @if (label) {\r\n <span>{{ label }}</span>\r\n } @else {\r\n <span class=\"tw-flex tw-items-center tw-justify-center\">\r\n <ng-content></ng-content>\r\n </span>\r\n }\r\n \r\n <!-- Right icon -->\r\n @if (rightIcon) {\r\n <span class=\"tw-icon-container tw-ml-2\">\r\n <i class=\"tw-text-base material-symbols-outlined\">{{rightIcon}}</i>\r\n </span>\r\n }\r\n \r\n <!-- Spacer for spinner when loading to maintain button width -->\r\n @if (loading) {\r\n <span class=\"tw-w-6 tw-p-1 tw-mr-2\"></span>\r\n }\r\n</div>\r\n", styles: [":host{position:relative;background-color:var(--cide-theme-color-brand-primary, #3b82f6);cursor:pointer;font-family:inherit;font-weight:500;outline:none;overflow:hidden;transition:all .2s ease-in-out;border:none;text-align:center;vertical-align:middle;text-decoration:none;line-height:1.5;letter-spacing:.025em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}:host:focus-visible{outline:2px solid var(--cide-theme-color-brand-primary);outline-offset:2px;box-shadow:0 0 0 3px #3b82f64d}:host:hover:not(:disabled){background-color:var(--cide-theme-color-brand-primary-hover, #2563eb);transform:translateY(-1px)}:host:active:not(:disabled){transform:translateY(1px)}:host.cide-button-disabled{background-color:var(--cide-button-background-disabled, #9ca3af)!important;cursor:var(--cide-button-cursor-disabled, not-allowed)!important;opacity:.7;pointer-events:none;transform:none!important}:host.xs{font-size:.75rem;padding:.2rem .4rem}:host.sm{font-size:.875rem;padding:.25rem .5rem}:host.md{font-size:1rem;padding:.25rem .75rem}:host.lg{font-size:1.125rem;padding:.75rem 1rem}:host.xl{font-size:1.25rem;padding:1rem 1.5rem}:host.rounded{border-radius:.5rem}:host.pill{border-radius:9999px}:host.square{border-radius:0}:host.elevation-none{box-shadow:none}:host.elevation-low{box-shadow:0 1px 2px #0000000d}:host.elevation-medium{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}:host.elevation-high{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.ripple-effect{position:absolute;border-radius:50%;background-color:#fff6;transform:scale(0);animation:ripple .6s linear;pointer-events:none}@keyframes ripple{to{transform:scale(4);opacity:0}}:host{color:#fff}:host.secondary{background-color:var(--cide-theme-secondary-color, #4b5563);color:#fff}:host.secondary:hover:not(:disabled){background-color:var(--cide-theme-secondary-color-hover, #374151)}:host.success{background-color:var(--cide-theme-success-color, #10b981);color:#fff}:host.success:hover:not(:disabled){background-color:var(--cide-theme-success-color-hover, #059669)}:host.danger{background-color:var(--cide-theme-danger-color, #ef4444);color:#fff}:host.danger:hover:not(:disabled){background-color:var(--cide-theme-danger-color-hover, #dc2626)}:host.warning{background-color:var(--cide-theme-warning-color, #f59e0b);color:#fff}:host.warning:hover:not(:disabled){background-color:var(--cide-theme-warning-color-hover, #d97706)}:host.info{background-color:var(--cide-theme-info-color, #3b82f6);color:#fff}:host.info:hover:not(:disabled){background-color:var(--cide-theme-info-color-hover, #2563eb)}:host.outline{background-color:transparent;color:var(--cide-theme-color-brand-primary, #3b82f6);border:1px solid var(--cide-theme-color-brand-primary, #3b82f6)}:host.outline:hover:not(:disabled){background-color:#3b82f60d}:host.outline.secondary{color:var(--cide-theme-secondary-color, #4b5563);border-color:var(--cide-theme-secondary-color, #4b5563)}:host.outline.success{color:var(--cide-theme-success-color, #10b981);border-color:var(--cide-theme-success-color, #10b981)}:host.outline.danger{color:var(--cide-theme-danger-color, #ef4444);border-color:var(--cide-theme-danger-color, #ef4444)}:host.outline.warning{color:var(--cide-theme-warning-color, #f59e0b);border-color:var(--cide-theme-warning-color, #f59e0b)}:host.outline.info{color:var(--cide-theme-info-color, #3b82f6);border-color:var(--cide-theme-info-color, #3b82f6)}:host.text{background-color:transparent;color:var(--cide-theme-color-brand-primary, #3b82f6);border:none;padding-left:.5rem;padding-right:.5rem}:host.text:hover:not(:disabled){background-color:#3b82f60d;text-decoration:underline}:host.text.secondary{color:var(--cide-theme-secondary-color, #4b5563)}:host.text.success{color:var(--cide-theme-success-color, #10b981)}:host.text.danger{color:var(--cide-theme-danger-color, #ef4444)}:host.text.warning{color:var(--cide-theme-warning-color, #f59e0b)}:host.text.info{color:var(--cide-theme-info-color, #3b82f6)}:host.link{background-color:transparent;color:var(--cide-theme-color-brand-primary, #3b82f6);border:none;text-decoration:underline;padding:0;font-weight:400}:host.link:hover:not(:disabled){color:var(--cide-theme-color-brand-primary-hover, #2563eb);text-decoration:underline}:host.link.secondary{color:var(--cide-theme-secondary-color, #4b5563)}:host.link.success{color:var(--cide-theme-success-color, #10b981)}:host.link.danger{color:var(--cide-theme-danger-color, #ef4444)}:host.link.warning{color:var(--cide-theme-warning-color, #f59e0b)}:host.link.info{color:var(--cide-theme-info-color, #3b82f6)}.tw-icon-container{display:inline-flex;align-items:center;justify-content:center}\n"] }]
201
+ }], ctorParameters: () => [{ type: i1.CideElementsService }, { type: i2.Router }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { label: [{
202
+ type: Input
203
+ }], variant: [{
204
+ type: Input
205
+ }], size: [{
206
+ type: Input
207
+ }], type: [{
208
+ type: Input
209
+ }], shape: [{
210
+ type: Input
211
+ }], elevation: [{
212
+ type: Input
213
+ }], disabled: [{
214
+ type: Input
215
+ }], id: [{
216
+ type: Input
217
+ }], loading: [{
218
+ type: Input
219
+ }], fullWidth: [{
220
+ type: Input
221
+ }], leftIcon: [{
222
+ type: Input
223
+ }], rightIcon: [{
224
+ type: Input
225
+ }], customClass: [{
226
+ type: Input
227
+ }], tooltip: [{
228
+ type: Input
229
+ }], ariaLabel: [{
230
+ type: Input
231
+ }], testId: [{
232
+ type: Input
233
+ }], routerLink: [{
234
+ type: Input
235
+ }], routerExtras: [{
236
+ type: Input
237
+ }], preventDoubleClick: [{
238
+ type: Input
239
+ }], animated: [{
240
+ type: Input
241
+ }], btnClick: [{
242
+ type: Output
243
+ }], doubleClick: [{
244
+ type: Output
245
+ }], onClick: [{
246
+ type: HostListener,
247
+ args: ['click', ['$event']]
248
+ }] } });
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lkZS1lbGUtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1lbGVtZW50L3NyYy9saWIvZWxlbWVudHMvYnV0dG9uL2NpZGUtZWxlLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtZWxlbWVudC9zcmMvbGliL2VsZW1lbnRzL2J1dHRvbi9jaWRlLWVsZS1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQVF4RDs7Ozs7R0FLRztBQTBDSCxNQUFNLE9BQU8sc0JBQXNCO0lBS2pDLFlBQ1UsY0FBbUMsRUFDbkMsTUFBYyxFQUNkLFFBQW1CLEVBQ25CLFVBQXNCO1FBSHRCLG1CQUFjLEdBQWQsY0FBYyxDQUFxQjtRQUNuQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBUnhCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQy9CLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFxQnBELFNBQVM7UUFDVDs7O1dBR0c7UUFDTSxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRTVCLHdDQUF3QztRQUMvQixZ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ZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2lkZUVsZW1lbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBDaWRlU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJy4uL3NwaW5uZXIvc3Bpbm5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IHR5cGUgQnV0dG9uVmFyaWFudCA9ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ291dGxpbmUnIHwgJ3RleHQnIHwgJ2xpbmsnIHwgJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2FybmluZycgfCAnaW5mbycgfCAnZ2hvc3QnO1xyXG5leHBvcnQgdHlwZSBCdXR0b25TaXplID0gJ3hzJyB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCc7XHJcbmV4cG9ydCB0eXBlIEJ1dHRvblR5cGUgPSAnYnV0dG9uJyB8ICdzdWJtaXQnIHwgJ3Jlc2V0JztcclxuZXhwb3J0IHR5cGUgQnV0dG9uU2hhcGUgPSAnZGVmYXVsdCcgfCAncm91bmRlZCcgfCAncGlsbCcgfCAnc3F1YXJlJztcclxuZXhwb3J0IHR5cGUgQnV0dG9uRWxldmF0aW9uID0gJ25vbmUnIHwgJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcclxuXHJcbi8qKlxyXG4gKiBBZHZhbmNlZCBBbmd1bGFyIGJ1dHRvbiBjb21wb25lbnQgdGhhdCBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgYnV0dG9uIGltcGxlbWVudGF0aW9uXHJcbiAqIHdpdGggbG9hZGluZyBzdGF0ZSwgc3R5bGluZyB2YXJpYW50cywgYW5pbWF0aW9ucywgdG9vbHRpcHMsIGFuZCBvdGhlciBmZWF0dXJlcy5cclxuICogXHJcbiAqIFRoaXMgY29tcG9uZW50IHVzZXMgcHJvcGVyIEFuZ3VsYXIgdGVtcGxhdGluZyB0byBhdm9pZCBoeWRyYXRpb24gaXNzdWVzIChORzA1MDApLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ2J1dHRvbltjaWRlRWxlQnV0dG9uXSwgYVtjaWRlRWxlQnV0dG9uXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaWRlU3Bpbm5lckNvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NpZGUtZWxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2lkZS1lbGUtYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgJ2NsYXNzJzogJ2NpZGUtYnV0dG9uIHR3LXJvdW5kZWQtbWQgdHctdGV4dC13aGl0ZSB0dy1weS0wLjUgdHctc2VsZWN0LW5vbmUgdHctanVzdGlmeS1hcm91bmQgdHctZmxleCcsXHJcbiAgICAnW2NsYXNzLmNpZGUtYnV0dG9uLWRpc2FibGVkXSc6ICdkaXNhYmxlZCB8fCBsb2FkaW5nJyxcclxuICAgICdbYXR0ci5kaXNhYmxlZF0nOiAnKGRpc2FibGVkIHx8IGxvYWRpbmcpID8gdHJ1ZSA6IG51bGwnLFxyXG4gICAgJ1tjbGFzcy5wcmltYXJ5XSc6ICd2YXJpYW50ID09PSBcInByaW1hcnlcIicsXHJcbiAgICAnW2NsYXNzLnNlY29uZGFyeV0nOiAndmFyaWFudCA9PT0gXCJzZWNvbmRhcnlcIicsXHJcbiAgICAnW2NsYXNzLm91dGxpbmVdJzogJ3ZhcmlhbnQgPT09IFwib3V0bGluZVwiJyxcclxuICAgICdbY2xhc3MudGV4dF0nOiAndmFyaWFudCA9PT0gXCJ0ZXh0XCInLFxyXG4gICAgJ1tjbGFzcy5saW5rXSc6ICd2YXJpYW50ID09PSBcImxpbmtcIicsXHJcbiAgICAnW2NsYXNzLnN1Y2Nlc3NdJzogJ3ZhcmlhbnQgPT09IFwic3VjY2Vzc1wiJyxcclxuICAgICdbY2xhc3MuZGFuZ2VyXSc6ICd2YXJpYW50ID09PSBcImRhbmdlclwiJyxcclxuICAgICdbY2xhc3Mud2FybmluZ10nOiAndmFyaWFudCA9PT0gXCJ3YXJuaW5nXCInLFxyXG4gICAgJ1tjbGFzcy5pbmZvXSc6ICd2YXJpYW50ID09PSBcImluZm9cIicsXHJcbiAgICAnW2NsYXNzLnhzXSc6ICdzaXplID09PSBcInhzXCInLFxyXG4gICAgJ1tjbGFzcy5zbV0nOiAnc2l6ZSA9PT0gXCJzbVwiJyxcclxuICAgICdbY2xhc3MubWRdJzogJ3NpemUgPT09IFwibWRcIicsXHJcbiAgICAnW2NsYXNzLmxnXSc6ICdzaXplID09PSBcImxnXCInLFxyXG4gICAgJ1tjbGFzcy54bF0nOiAnc2l6ZSA9PT0gXCJ4bFwiJyxcclxuICAgICdbY2xhc3Mucm91bmRlZF0nOiAnc2hhcGUgPT09IFwicm91bmRlZFwiJyxcclxuICAgICdbY2xhc3MucGlsbF0nOiAnc2hhcGUgPT09IFwicGlsbFwiJyxcclxuICAgICdbY2xhc3Muc3F1YXJlXSc6ICdzaGFwZSA9PT0gXCJzcXVhcmVcIicsXHJcbiAgICAnW2NsYXNzLmVsZXZhdGlvbi1ub25lXSc6ICdlbGV2YXRpb24gPT09IFwibm9uZVwiJyxcclxuICAgICdbY2xhc3MuZWxldmF0aW9uLWxvd10nOiAnZWxldmF0aW9uID09PSBcImxvd1wiJyxcclxuICAgICdbY2xhc3MuZWxldmF0aW9uLW1lZGl1bV0nOiAnZWxldmF0aW9uID09PSBcIm1lZGl1bVwiJyxcclxuICAgICdbY2xhc3MuZWxldmF0aW9uLWhpZ2hdJzogJ2VsZXZhdGlvbiA9PT0gXCJoaWdoXCInLFxyXG4gICAgJ1thdHRyLnR5cGVdJzogJ3R5cGUnLFxyXG4gICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogJ2FyaWFMYWJlbCcsXHJcbiAgICAnW2F0dHIuYXJpYS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQgfHwgbG9hZGluZycsXHJcbiAgICAnW2F0dHIuZGF0YS10ZXN0aWRdJzogJ3Rlc3RJZCcsXHJcbiAgICAnW2F0dHIudGl0bGVdJzogJ3Rvb2x0aXAnLFxyXG4gICAgJ1tjbGFzc10nOiAnY3VzdG9tQ2xhc3MnXHJcbiAgfVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIENpZGVFbGVCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGNsaWNrQ291bnQgPSAwO1xyXG4gIHByaXZhdGUgY2xpY2tEZWJvdW5jZXIkID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsZW1lbnRTZXJ2aWNlOiBDaWRlRWxlbWVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkge1xyXG4gICAgLy8gU2V0dXAgZGVib3VuY2VkIGNsaWNrIGhhbmRsZXIgdG8gcHJldmVudCBkb3VibGUtY2xpY2tzXHJcbiAgICB0aGlzLmNsaWNrRGVib3VuY2VyJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIElOUFVUU1xyXG4gIC8qKiBcclxuICAgKiBAZGVzY3JpcHRpb24gTGFiZWwgb2YgYnV0dG9uIGxpa2UgU3VibWl0LCBVcGRhdGUsIEFkZCwgZXRjLiAgXHJcbiAgICogTm90ZTogaXQgaXMgb25seSB1c2VkIGluIGNhc2UgeW91IGRpZCBub3Qgc2V0IGxhYmVsIGJldHdlZW4gdGFncyAodmlhIG5nLWNvbnRlbnQpXHJcbiAgICovXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9IFwiXCI7XHJcbiAgXHJcbiAgLyoqIEBkZXNjcmlwdGlvbiBCdXR0b24gc3R5bGUgdmFyaWFudCAqL1xyXG4gIEBJbnB1dCgpIHZhcmlhbnQ6IEJ1dHRvblZhcmlhbnQgPSAncHJpbWFyeSc7XHJcbiAgXHJcbiAgLyoqIEBkZXNjcmlwdGlvbiBCdXR0b24gc2l6ZSAqL1xyXG4gIEBJbnB1dCgpIHNpemU6IEJ1dHRvblNpemUgPSAnbWQnO1xyXG4gIFxyXG4gIC8qKiBAZGVzY3JpcHRpb24gQnV0dG9uIEhUTUwgdHlwZSBhdHRyaWJ1dGUgKi9cclxuICBASW5wdXQoKSB0eXBlOiBCdXR0b25UeXBlID0gJ2J1dHRvbic7XHJcbiAgXHJcbiAgLyoqIEBkZXNjcmlwdGlvbiBCdXR0b24gc2hhcGUgKi9cclxuICBASW5wdXQoKSBzaGFwZTogQnV0dG9uU2hhcGUgPSAnZGVmYXVsdCc7XHJcbiAgXHJcbiAgLyoqIEBkZXNjcmlwdGlvbiBCdXR0b24gc2hhZG93IGVsZXZhdGlvbiAqL1xyXG4gIEBJbnB1dCgpIGVsZXZhdGlvbjogQnV0dG9uRWxldmF0aW9uID0gJ21lZGl1bSc7XHJcbiAgXHJcbiAgLyoqIEBkZXNjcmlwdGlvbiBCdXR0b24gZGlzYWJsZWQgc3RhdGUgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuICBcclxuICAvKiogQGRlc2NyaXB0aW9uIFVuaXF1ZSBJRCBvZiBjb250cm9sLCB1c2VkIHRvIGRpZmZlcmVudGlhdGUgZWxlbWVudHMgKi9cclxuICBASW5wdXQoKSBpZDogc3RyaW5nID0gJyc7XHJcbiAgXHJcbiAgLyoqIEBkZXNjcmlwdGlvbiBFbmFibGVzIGxvYWRpbmcgc3RhdGUgd2l0aCBzcGlubmVyICovXHJcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKiBAZGVzY3JpcHRpb24gTWFrZXMgYnV0dG9uIHRha2UgZnVsbCB3aWR0aCBvZiBjb250YWluZXIgKi9cclxuICBASW5wdXQoKSBmdWxsV2lkdGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAvKiogQGRlc2NyaXB0aW9uIEljb24gdG8gZGlzcGxheSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBidXR0b24gKi9cclxuICBASW5wdXQoKSBsZWZ0SWNvbjogc3RyaW5nID0gJyc7XHJcbiAgXHJcbiAgLyoqIEBkZXNjcmlwdGlvbiBJY29uIHRvIGRpc3BsYXkgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGJ1dHRvbiAqL1xyXG4gIEBJbnB1dCgpIHJpZ2h0SWNvbjogc3RyaW5nID0gJyc7XHJcbiAgXHJcbiAgLyoqIEBkZXNjcmlwdGlvbiBBZGRpdGlvbmFsIENTUyBjbGFzc2VzIHRvIGFwcGx5ICovXHJcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4gIC8qKiBAZGVzY3JpcHRpb24gVG9vbHRpcCB0ZXh0IHRvIGRpc3BsYXkgb24gaG92ZXIgKi9cclxuICBASW5wdXQoKSB0b29sdGlwOiBzdHJpbmcgPSAnJztcclxuICBcclxuICAvKiogQGRlc2NyaXB0aW9uIEFyaWEgbGFiZWwgZm9yIGFjY2Vzc2liaWxpdHkgKi9cclxuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4gIC8qKiBAZGVzY3JpcHRpb24gVGVzdCBJRCBmb3IgYXV0b21hdGVkIHRlc3RpbmcgKi9cclxuICBASW5wdXQoKSB0ZXN0SWQ6IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4gIC8qKiBAZGVzY3JpcHRpb24gUm91dGUgdG8gbmF2aWdhdGUgdG8gd2hlbiBjbGlja2VkIChmb3IgbGluayBidXR0b25zKSAqL1xyXG4gIEBJbnB1dCgpIHJvdXRlckxpbms6IHN0cmluZyB8IHVua25vd25bXSA9ICcnO1xyXG4gIFxyXG4gIC8qKiBAZGVzY3JpcHRpb24gUm91dGVyIG5hdmlnYXRpb24gZXh0cmFzICovXHJcbiAgQElucHV0KCkgcm91dGVyRXh0cmFzOiBOYXZpZ2F0aW9uRXh0cmFzID0ge307XHJcbiAgXHJcbiAgLyoqIEBkZXNjcmlwdGlvbiBQcmV2ZW50IG11bHRpcGxlIHJhcGlkIGNsaWNrcyAoZGVib3VuY2UpICovXHJcbiAgQElucHV0KCkgcHJldmVudERvdWJsZUNsaWNrOiBib29sZWFuID0gdHJ1ZTtcclxuICBcclxuICAvKiogQGRlc2NyaXB0aW9uIEFuaW1hdGlvbiBvbiBjbGljayAqL1xyXG4gIEBJbnB1dCgpIGFuaW1hdGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBcclxuICAvLyBPVVRQVVRTXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIENsaWNrIGV2ZW50IG9mIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBidG5DbGljazogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBEb3VibGUgY2xpY2sgZXZlbnRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZG91YmxlQ2xpY2s6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5hbmltYXRlZCkge1xyXG4gICAgICB0aGlzLmFkZENsaWNrQW5pbWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnByZXZlbnREb3VibGVDbGljaykge1xyXG4gICAgICB0aGlzLmNsaWNrRGVib3VuY2VyJC5uZXh0KGV2ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2soZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBIYW5kbGUgbmF2aWdhdGlvbiBmb3Igcm91dGVyTGlua1xyXG4gICAgaWYgKHRoaXMucm91dGVyTGluayAmJiB0aGlzLnJvdXRlckxpbmsubGVuZ3RoKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yb3V0ZXJMaW5rKSA/IHRoaXMucm91dGVyTGluayA6IFt0aGlzLnJvdXRlckxpbmtdLFxyXG4gICAgICAgIHRoaXMucm91dGVyRXh0cmFzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEhhbmRsZSBkb3VibGUtY2xpY2sgZGV0ZWN0aW9uXHJcbiAgICB0aGlzLmNsaWNrQ291bnQrKztcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jbGlja0NvdW50ID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5kb3VibGVDbGljay5lbWl0KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNsaWNrQ291bnQgPSAwO1xyXG4gICAgfSwgMzAwKTtcclxuICAgIFxyXG4gICAgLy8gRW1pdCBzdGFuZGFyZCBjbGljayBldmVudFxyXG4gICAgdGhpcy5idG5DbGljay5lbWl0KGV2ZW50KTtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBhZGRDbGlja0FuaW1hdGlvbigpOiB2b2lkIHtcclxuICAgIC8vIEFkZCByaXBwbGUgZWZmZWN0XHJcbiAgICBjb25zdCByaXBwbGUgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MocmlwcGxlLCAncmlwcGxlLWVmZmVjdCcpO1xyXG4gICAgXHJcbiAgICAvLyBQb3NpdGlvbiB0aGUgcmlwcGxlIGF0IGNsaWNrIHBvc2l0aW9uXHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBzaXplID0gTWF0aC5tYXgocmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xyXG4gICAgXHJcbiAgICAvLyBTZXQgcmlwcGxlIHN0eWxlXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZSwgJ3dpZHRoJywgYCR7c2l6ZX1weGApO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShyaXBwbGUsICdoZWlnaHQnLCBgJHtzaXplfXB4YCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZSwgJ2xlZnQnLCBgJHswfXB4YCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJpcHBsZSwgJ3RvcCcsIGAkezB9cHhgKTtcclxuICAgIFxyXG4gICAgLy8gQWRkIHJpcHBsZSB0byBidXR0b25cclxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHJpcHBsZSk7XHJcbiAgICBcclxuICAgIC8vIE1vZGVybiBFUzIwMjIrIHBhdHRlcm46IFVzZSBQcm9taXNlLWJhc2VkIGRlbGF5XHJcbiAgICBjb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuICAgIGRlbGF5KDYwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHJpcHBsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgdGhpcy5nZXRDb250cm9sRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBTZXQgYXJpYS1sYWJlbCBpZiBub3QgZXhwbGljaXRseSBwcm92aWRlZFxyXG4gICAgaWYgKCF0aGlzLmFyaWFMYWJlbCAmJiB0aGlzLmxhYmVsKSB7XHJcbiAgICAgIHRoaXMuYXJpYUxhYmVsID0gdGhpcy5sYWJlbDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8gVXBkYXRlIGFyaWEtbGFiZWwgd2hlbiBsYWJlbCBjaGFuZ2VzXHJcbiAgICBpZiAoY2hhbmdlc1snbGFiZWwnXSAmJiAhdGhpcy5hcmlhTGFiZWwpIHtcclxuICAgICAgdGhpcy5hcmlhTGFiZWwgPSBjaGFuZ2VzWydsYWJlbCddLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldENvbnRyb2xEYXRhKCkge1xyXG4gICAgY29uc3QgY2lkZV9lbGVtZW50X2RhdGEgPSBhd2FpdCB0aGlzLmVsZW1lbnRTZXJ2aWNlPy5nZXRFbGVtZW50RGF0YSh7IHN5cGVfa2V5OiB0aGlzLmlkIH0pO1xyXG4gICAgaWYgKGNpZGVfZWxlbWVudF9kYXRhKSB7XHJcbiAgICAgIHRoaXMubGFiZWwgPSBjaWRlX2VsZW1lbnRfZGF0YT8uc3lwZV9sYWJlbCBhcyBzdHJpbmc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gQnV0dG9uIGNvbnRlbnQgY29udGFpbmVyIC0tPlxyXG48ZGl2IGNsYXNzPVwidHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctanVzdGlmeS1jZW50ZXIgY2lkZS1lbGUtYnRuLWNvbnRlbnQgdHctdy1mdWxsXCI+XHJcbiAgPCEtLSBMZWZ0IGljb24gLS0+XHJcbiAgQGlmIChsZWZ0SWNvbikge1xyXG4gICAgPHNwYW4gY2xhc3M9XCJ0dy1pY29uLWNvbnRhaW5lciB0dy1tci0yXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwidHctdGV4dC1iYXNlIG1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57e2xlZnRJY29ufX08L2k+XHJcbiAgICA8L3NwYW4+XHJcbiAgfVxyXG4gIFxyXG4gIDwhLS0gTG9hZGluZyBzcGlubmVyIC0tPlxyXG4gIEBpZiAobG9hZGluZykge1xyXG4gICAgPGNpZGUtZWxlLXNwaW5uZXJcclxuICAgICAgY2xhc3M9XCJ0dy1pbmxpbmUtYmxvY2sgdHctbXktMSB0dy1tci0yXCIgXHJcbiAgICAgIHNpemU9XCJ4c1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnY2lkZS1waWxsLWRpc2FibGVkJzogKGRpc2FibGVkIHx8IGxvYWRpbmcpfVwiPlxyXG4gICAgPC9jaWRlLWVsZS1zcGlubmVyPlxyXG4gIH1cclxuICBcclxuICA8IS0tIEJ1dHRvbiBsYWJlbCBvciBjb250ZW50IC0tPlxyXG4gIEBpZiAobGFiZWwpIHtcclxuICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxyXG4gIH0gQGVsc2Uge1xyXG4gICAgPHNwYW4gY2xhc3M9XCJ0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1qdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L3NwYW4+XHJcbiAgfVxyXG4gIFxyXG4gIDwhLS0gUmlnaHQgaWNvbiAtLT5cclxuICBAaWYgKHJpZ2h0SWNvbikge1xyXG4gICAgPHNwYW4gY2xhc3M9XCJ0dy1pY29uLWNvbnRhaW5lciB0dy1tbC0yXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwidHctdGV4dC1iYXNlIG1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57e3JpZ2h0SWNvbn19PC9pPlxyXG4gICAgPC9zcGFuPlxyXG4gIH1cclxuICBcclxuICA8IS0tIFNwYWNlciBmb3Igc3Bpbm5lciB3aGVuIGxvYWRpbmcgdG8gbWFpbnRhaW4gYnV0dG9uIHdpZHRoIC0tPlxyXG4gIEBpZiAobG9hZGluZykge1xyXG4gICAgPHNwYW4gY2xhc3M9XCJ0dy13LTYgdHctcC0xIHR3LW1yLTJcIj48L3NwYW4+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,83 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ export class CideEleFileInputComponent {
7
+ constructor() {
8
+ this.label = 'Choose file';
9
+ this.accept = '';
10
+ this.multiple = false;
11
+ this.disabled = false;
12
+ this.helperText = '';
13
+ this.errorText = '';
14
+ this.id = Math.random().toString(36).substring(2, 10);
15
+ this.fileChange = new EventEmitter();
16
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
17
+ this.files = null;
18
+ this.fileNames = [];
19
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
20
+ this.onChange = (files) => { };
21
+ this.onTouched = () => { };
22
+ }
23
+ writeValue(files) {
24
+ this.files = files;
25
+ this.fileNames = files ? Array.from(files).map(f => f.name) : [];
26
+ }
27
+ registerOnChange(fn) {
28
+ this.onChange = fn;
29
+ }
30
+ registerOnTouched(fn) {
31
+ this.onTouched = fn;
32
+ }
33
+ setDisabledState(isDisabled) {
34
+ this.disabled = isDisabled;
35
+ }
36
+ onFileSelected(event) {
37
+ const input = event.target;
38
+ this.files = input.files;
39
+ this.fileNames = this.files ? Array.from(this.files).map(f => f.name) : [];
40
+ this.onChange(this.files);
41
+ this.fileChange.emit(this.files);
42
+ this.onTouched();
43
+ }
44
+ clearFiles() {
45
+ this.files = null;
46
+ this.fileNames = [];
47
+ this.onChange(null);
48
+ this.fileChange.emit(null);
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleFileInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideEleFileInputComponent, isStandalone: true, selector: "cide-ele-file-input", inputs: { label: "label", accept: "accept", multiple: "multiple", disabled: "disabled", helperText: "helperText", errorText: "errorText" }, outputs: { fileChange: "fileChange" }, providers: [
52
+ {
53
+ provide: NG_VALUE_ACCESSOR,
54
+ useExisting: forwardRef(() => CideEleFileInputComponent),
55
+ multi: true
56
+ }
57
+ ], ngImport: i0, template: "<div class=\"cide-file-input\">\r\n <label *ngIf=\"label\" class=\"cide-file-input-label\" [attr.for]=\"'cide-file-input-' + id\">{{ label }}</label>\r\n <div class=\"cide-file-input-wrapper\">\r\n <input\r\n type=\"file\"\r\n [attr.id]=\"'cide-file-input-' + id\"\r\n [attr.accept]=\"accept\"\r\n [attr.multiple]=\"multiple ? true : null\"\r\n [disabled]=\"disabled\"\r\n (change)=\"onFileSelected($event)\"\r\n class=\"cide-file-input-element\"\r\n />\r\n <button *ngIf=\"fileNames.length\" type=\"button\" class=\"cide-file-input-clear\" (click)=\"clearFiles()\">\r\n Clear\r\n </button>\r\n </div>\r\n <div *ngIf=\"fileNames.length\" class=\"cide-file-input-files\">\r\n <span *ngFor=\"let name of fileNames\">{{ name }}</span>\r\n </div>\r\n <div *ngIf=\"errorText\" class=\"cide-file-input-error\">{{ errorText }}</div>\r\n <div *ngIf=\"helperText && !errorText\" class=\"cide-file-input-helper\">{{ helperText }}</div>\r\n</div> ", styles: [".cide-file-input{display:flex;flex-direction:column;gap:.5rem}.cide-file-input-label{font-weight:500;margin-bottom:.25rem}.cide-file-input-wrapper{display:flex;align-items:center;gap:.5rem}.cide-file-input-element{flex:1}.cide-file-input-clear{background:none;border:none;color:#d32f2f;cursor:pointer;font-size:.9rem}.cide-file-input-files{font-size:.95rem;color:#333;margin-top:.25rem}.cide-file-input-error{color:#d32f2f;font-size:.9rem}.cide-file-input-helper{color:#666;font-size:.9rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }] }); }
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleFileInputComponent, decorators: [{
60
+ type: Component,
61
+ args: [{ selector: 'cide-ele-file-input', standalone: true, imports: [CommonModule, FormsModule], providers: [
62
+ {
63
+ provide: NG_VALUE_ACCESSOR,
64
+ useExisting: forwardRef(() => CideEleFileInputComponent),
65
+ multi: true
66
+ }
67
+ ], template: "<div class=\"cide-file-input\">\r\n <label *ngIf=\"label\" class=\"cide-file-input-label\" [attr.for]=\"'cide-file-input-' + id\">{{ label }}</label>\r\n <div class=\"cide-file-input-wrapper\">\r\n <input\r\n type=\"file\"\r\n [attr.id]=\"'cide-file-input-' + id\"\r\n [attr.accept]=\"accept\"\r\n [attr.multiple]=\"multiple ? true : null\"\r\n [disabled]=\"disabled\"\r\n (change)=\"onFileSelected($event)\"\r\n class=\"cide-file-input-element\"\r\n />\r\n <button *ngIf=\"fileNames.length\" type=\"button\" class=\"cide-file-input-clear\" (click)=\"clearFiles()\">\r\n Clear\r\n </button>\r\n </div>\r\n <div *ngIf=\"fileNames.length\" class=\"cide-file-input-files\">\r\n <span *ngFor=\"let name of fileNames\">{{ name }}</span>\r\n </div>\r\n <div *ngIf=\"errorText\" class=\"cide-file-input-error\">{{ errorText }}</div>\r\n <div *ngIf=\"helperText && !errorText\" class=\"cide-file-input-helper\">{{ helperText }}</div>\r\n</div> ", styles: [".cide-file-input{display:flex;flex-direction:column;gap:.5rem}.cide-file-input-label{font-weight:500;margin-bottom:.25rem}.cide-file-input-wrapper{display:flex;align-items:center;gap:.5rem}.cide-file-input-element{flex:1}.cide-file-input-clear{background:none;border:none;color:#d32f2f;cursor:pointer;font-size:.9rem}.cide-file-input-files{font-size:.95rem;color:#333;margin-top:.25rem}.cide-file-input-error{color:#d32f2f;font-size:.9rem}.cide-file-input-helper{color:#666;font-size:.9rem}\n"] }]
68
+ }], propDecorators: { label: [{
69
+ type: Input
70
+ }], accept: [{
71
+ type: Input
72
+ }], multiple: [{
73
+ type: Input
74
+ }], disabled: [{
75
+ type: Input
76
+ }], helperText: [{
77
+ type: Input
78
+ }], errorText: [{
79
+ type: Input
80
+ }], fileChange: [{
81
+ type: Output
82
+ }] } });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtZWxlbWVudC9zcmMvbGliL2VsZW1lbnRzL2ZpbGUtaW5wdXQvZmlsZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtZWxlbWVudC9zcmMvbGliL2VsZW1lbnRzL2ZpbGUtaW5wdXQvZmlsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBZ0J0RixNQUFNLE9BQU8seUJBQXlCO0lBZHRDO1FBZVcsVUFBSyxHQUFXLGFBQWEsQ0FBQztRQUM5QixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFekIsT0FBRSxHQUFXLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV0RCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFM0QsNkRBQTZEO1FBQzdELFVBQUssR0FBb0IsSUFBSSxDQUFDO1FBQzlCLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFFekIsNkRBQTZEO1FBQ3JELGFBQVEsR0FBRyxDQUFDLEtBQXNCLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUMxQyxjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0tBa0M5QjtJQWhDQyxVQUFVLENBQUMsS0FBc0I7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQW9DO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVk7UUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQzs4R0FuRFUseUJBQXlCO2tHQUF6Qix5QkFBeUIscVBBUnpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDeEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQ2hCSCx3K0JBcUJPLHFpQkRaSyxZQUFZLCtQQUFFLFdBQVc7OzJGQVN4Qix5QkFBeUI7a0JBZHJDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FHUCxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsYUFDekI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7NEJBQ3hELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQUdRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFJSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2lkZS1lbGUtZmlsZS1pbnB1dCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2ZpbGUtaW5wdXQuY29tcG9uZW50LnNjc3MnLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENpZGVFbGVGaWxlSW5wdXRDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENpZGVFbGVGaWxlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICdDaG9vc2UgZmlsZSc7XHJcbiAgQElucHV0KCkgYWNjZXB0OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGVscGVyVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgZXJyb3JUZXh0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcHVibGljIGlkOiBzdHJpbmcgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTApO1xyXG5cclxuICBAT3V0cHV0KCkgZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZUxpc3QgfCBudWxsPigpO1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgZmlsZXM6IEZpbGVMaXN0IHwgbnVsbCA9IG51bGw7XHJcbiAgZmlsZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChmaWxlczogRmlsZUxpc3QgfCBudWxsKSA9PiB7fTtcclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xyXG5cclxuICB3cml0ZVZhbHVlKGZpbGVzOiBGaWxlTGlzdCB8IG51bGwpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsZXMgPSBmaWxlcztcclxuICAgIHRoaXMuZmlsZU5hbWVzID0gZmlsZXMgPyBBcnJheS5mcm9tKGZpbGVzKS5tYXAoZiA9PiBmLm5hbWUpIDogW107XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoZmlsZXM6IEZpbGVMaXN0IHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgdGhpcy5maWxlcyA9IGlucHV0LmZpbGVzO1xyXG4gICAgdGhpcy5maWxlTmFtZXMgPSB0aGlzLmZpbGVzID8gQXJyYXkuZnJvbSh0aGlzLmZpbGVzKS5tYXAoZiA9PiBmLm5hbWUpIDogW107XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZmlsZXMpO1xyXG4gICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQodGhpcy5maWxlcyk7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJGaWxlcygpIHtcclxuICAgIHRoaXMuZmlsZXMgPSBudWxsO1xyXG4gICAgdGhpcy5maWxlTmFtZXMgPSBbXTtcclxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICB0aGlzLmZpbGVDaGFuZ2UuZW1pdChudWxsKTtcclxuICB9XHJcbn0gIiwiPGRpdiBjbGFzcz1cImNpZGUtZmlsZS1pbnB1dFwiPlxyXG4gIDxsYWJlbCAqbmdJZj1cImxhYmVsXCIgY2xhc3M9XCJjaWRlLWZpbGUtaW5wdXQtbGFiZWxcIiBbYXR0ci5mb3JdPVwiJ2NpZGUtZmlsZS1pbnB1dC0nICsgaWRcIj57eyBsYWJlbCB9fTwvbGFiZWw+XHJcbiAgPGRpdiBjbGFzcz1cImNpZGUtZmlsZS1pbnB1dC13cmFwcGVyXCI+XHJcbiAgICA8aW5wdXRcclxuICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICBbYXR0ci5pZF09XCInY2lkZS1maWxlLWlucHV0LScgKyBpZFwiXHJcbiAgICAgIFthdHRyLmFjY2VwdF09XCJhY2NlcHRcIlxyXG4gICAgICBbYXR0ci5tdWx0aXBsZV09XCJtdWx0aXBsZSA/IHRydWUgOiBudWxsXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgY2xhc3M9XCJjaWRlLWZpbGUtaW5wdXQtZWxlbWVudFwiXHJcbiAgICAvPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImZpbGVOYW1lcy5sZW5ndGhcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaWRlLWZpbGUtaW5wdXQtY2xlYXJcIiAoY2xpY2spPVwiY2xlYXJGaWxlcygpXCI+XHJcbiAgICAgIENsZWFyXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwiZmlsZU5hbWVzLmxlbmd0aFwiIGNsYXNzPVwiY2lkZS1maWxlLWlucHV0LWZpbGVzXCI+XHJcbiAgICA8c3BhbiAqbmdGb3I9XCJsZXQgbmFtZSBvZiBmaWxlTmFtZXNcIj57eyBuYW1lIH19PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJlcnJvclRleHRcIiBjbGFzcz1cImNpZGUtZmlsZS1pbnB1dC1lcnJvclwiPnt7IGVycm9yVGV4dCB9fTwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJoZWxwZXJUZXh0ICYmICFlcnJvclRleHRcIiBjbGFzcz1cImNpZGUtZmlsZS1pbnB1dC1oZWxwZXJcIj57eyBoZWxwZXJUZXh0IH19PC9kaXY+XHJcbjwvZGl2PiAiXX0=