cloud-ide-element 1.0.2 → 1.0.5

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 (54) hide show
  1. package/README.md +63 -271
  2. package/fesm2022/cloud-ide-element.mjs +614 -618
  3. package/fesm2022/cloud-ide-element.mjs.map +1 -1
  4. package/index.d.ts +1362 -3
  5. package/package.json +4 -31
  6. package/esm2022/cloud-ide-element.mjs +0 -5
  7. package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +0 -182
  8. package/esm2022/lib/components/data-grid/data-grid.component.mjs +0 -1363
  9. package/esm2022/lib/components/data-grid/data-grid.types.mjs +0 -37
  10. package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -396
  11. package/esm2022/lib/components/global-notifications/global-notifications.component.mjs +0 -30
  12. package/esm2022/lib/components/json-editor/json-editor.component.mjs +0 -521
  13. package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +0 -33
  14. package/esm2022/lib/components/toast-notification/toast-notification.component.mjs +0 -152
  15. package/esm2022/lib/elements/button/cide-ele-button.component.mjs +0 -249
  16. package/esm2022/lib/elements/file-input/file-input.component.mjs +0 -83
  17. package/esm2022/lib/elements/icon/icon.component.mjs +0 -26
  18. package/esm2022/lib/elements/input/input.component.mjs +0 -467
  19. package/esm2022/lib/elements/select/select.component.mjs +0 -471
  20. package/esm2022/lib/elements/spinner/spinner.component.mjs +0 -32
  21. package/esm2022/lib/elements/tab/cide-ele-tab.component.mjs +0 -74
  22. package/esm2022/lib/elements/textarea/textarea.component.mjs +0 -157
  23. package/esm2022/lib/services/confirmation.service.mjs +0 -151
  24. package/esm2022/lib/services/dropdown-manager.service.mjs +0 -93
  25. package/esm2022/lib/services/notification.service.mjs +0 -196
  26. package/esm2022/lib/utils/directives/resizer/resizer.directive.mjs +0 -231
  27. package/esm2022/lib/utils/directives/tooltip/tooltip.directive.mjs +0 -294
  28. package/esm2022/lib/utils/pipes/capitalize/capitalize.pipe.mjs +0 -38
  29. package/esm2022/lib/utils/services/elements/elements.service.mjs +0 -39
  30. package/esm2022/public-api.mjs +0 -31
  31. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +0 -16
  32. package/lib/components/data-grid/data-grid.component.d.ts +0 -244
  33. package/lib/components/data-grid/data-grid.types.d.ts +0 -146
  34. package/lib/components/dropdown/dropdown.component.d.ts +0 -75
  35. package/lib/components/global-notifications/global-notifications.component.d.ts +0 -5
  36. package/lib/components/json-editor/json-editor.component.d.ts +0 -116
  37. package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +0 -11
  38. package/lib/components/toast-notification/toast-notification.component.d.ts +0 -13
  39. package/lib/elements/button/cide-ele-button.component.d.ts +0 -85
  40. package/lib/elements/file-input/file-input.component.d.ts +0 -25
  41. package/lib/elements/icon/icon.component.d.ts +0 -9
  42. package/lib/elements/input/input.component.d.ts +0 -182
  43. package/lib/elements/select/select.component.d.ts +0 -91
  44. package/lib/elements/spinner/spinner.component.d.ts +0 -19
  45. package/lib/elements/tab/cide-ele-tab.component.d.ts +0 -26
  46. package/lib/elements/textarea/textarea.component.d.ts +0 -47
  47. package/lib/services/confirmation.service.d.ts +0 -65
  48. package/lib/services/dropdown-manager.service.d.ts +0 -22
  49. package/lib/services/notification.service.d.ts +0 -81
  50. package/lib/utils/directives/resizer/resizer.directive.d.ts +0 -44
  51. package/lib/utils/directives/tooltip/tooltip.directive.d.ts +0 -43
  52. package/lib/utils/pipes/capitalize/capitalize.pipe.d.ts +0 -7
  53. package/lib/utils/services/elements/elements.service.d.ts +0 -12
  54. package/public-api.d.ts +0 -22
@@ -1,196 +0,0 @@
1
- import { Injectable, signal, computed } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class NotificationService {
4
- constructor() {
5
- this.notifications = signal([]);
6
- this.maxNotifications = 5; // Maximum notifications to show at once
7
- // Computed signals
8
- this.activeNotifications = computed(() => this.notifications().filter(n => n.isVisible));
9
- }
10
- /**
11
- * Show a success notification
12
- */
13
- success(message, options) {
14
- return this.show({
15
- message,
16
- type: 'success',
17
- icon: 'check_circle',
18
- duration: 3000,
19
- ...options
20
- });
21
- }
22
- /**
23
- * Show an error notification
24
- */
25
- error(message, options) {
26
- return this.show({
27
- message,
28
- type: 'error',
29
- icon: 'error',
30
- duration: 5000,
31
- ...options
32
- });
33
- }
34
- /**
35
- * Show a warning notification
36
- */
37
- warning(message, options) {
38
- return this.show({
39
- message,
40
- type: 'warning',
41
- icon: 'warning',
42
- duration: 4000,
43
- ...options
44
- });
45
- }
46
- /**
47
- * Show an info notification
48
- */
49
- info(message, options) {
50
- return this.show({
51
- message,
52
- type: 'info',
53
- icon: 'info',
54
- duration: 3000,
55
- ...options
56
- });
57
- }
58
- /**
59
- * Show a notification with undo functionality
60
- */
61
- showWithUndo(message, undoAction, options) {
62
- return this.show({
63
- message,
64
- type: 'info',
65
- icon: 'info',
66
- duration: 8000,
67
- showUndo: true,
68
- undoAction,
69
- undoText: 'Undo',
70
- ...options
71
- });
72
- }
73
- /**
74
- * Show a notification for reversible destructive actions
75
- */
76
- showReversibleAction(action, itemName, undoAction, options) {
77
- return this.showWithUndo(`${action} "${itemName}"`, undoAction, {
78
- type: 'warning',
79
- icon: 'delete',
80
- title: `${action} completed`,
81
- ...options
82
- });
83
- }
84
- /**
85
- * Show a notification for background tasks
86
- */
87
- showBackgroundTask(taskName, isComplete = true, options) {
88
- return this.show({
89
- message: isComplete ? `${taskName} completed successfully` : `${taskName} in progress...`,
90
- type: isComplete ? 'success' : 'info',
91
- icon: isComplete ? 'check_circle' : 'sync',
92
- duration: isComplete ? 3000 : 0, // Don't auto-dismiss for in-progress tasks
93
- ...options
94
- });
95
- }
96
- /**
97
- * Core show method
98
- */
99
- show(options) {
100
- const notification = {
101
- id: this.generateId(),
102
- message: options.message,
103
- type: options.type || 'info',
104
- duration: options.duration || 3000,
105
- showUndo: options.showUndo || false,
106
- undoAction: options.undoAction,
107
- undoText: options.undoText || 'Undo',
108
- icon: options.icon || this.getDefaultIcon(options.type || 'info'),
109
- title: options.title,
110
- timestamp: Date.now(),
111
- isVisible: true
112
- };
113
- this.addNotification(notification);
114
- return notification.id;
115
- }
116
- /**
117
- * Remove a specific notification
118
- */
119
- remove(id) {
120
- this.notifications.update(notifications => notifications.map(n => n.id === id ? { ...n, isVisible: false } : n));
121
- // Remove from array after animation
122
- setTimeout(() => {
123
- this.notifications.update(notifications => notifications.filter(n => n.id !== id));
124
- }, 300);
125
- }
126
- /**
127
- * Remove all notifications
128
- */
129
- clearAll() {
130
- this.notifications.update(notifications => notifications.map(n => ({ ...n, isVisible: false })));
131
- setTimeout(() => {
132
- this.notifications.set([]);
133
- }, 300);
134
- }
135
- /**
136
- * Execute undo action for a notification
137
- */
138
- executeUndo(id) {
139
- const notification = this.notifications().find(n => n.id === id);
140
- if (notification && notification.undoAction) {
141
- notification.undoAction();
142
- this.remove(id);
143
- }
144
- }
145
- // Internal methods
146
- addNotification(notification) {
147
- this.notifications.update(notifications => {
148
- const newNotifications = [...notifications, notification];
149
- // Limit the number of visible notifications
150
- if (newNotifications.length > this.maxNotifications) {
151
- // Remove oldest notifications
152
- const toRemove = newNotifications.length - this.maxNotifications;
153
- for (let i = 0; i < toRemove; i++) {
154
- if (newNotifications[i]) {
155
- newNotifications[i] = { ...newNotifications[i], isVisible: false };
156
- }
157
- }
158
- }
159
- return newNotifications;
160
- });
161
- // Auto-remove after duration (if not 0)
162
- if (notification.duration > 0) {
163
- setTimeout(() => {
164
- this.remove(notification.id);
165
- }, notification.duration);
166
- }
167
- }
168
- generateId() {
169
- return `notification-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
170
- }
171
- getDefaultIcon(type) {
172
- const iconMap = {
173
- success: 'check_circle',
174
- error: 'error',
175
- warning: 'warning',
176
- info: 'info'
177
- };
178
- return iconMap[type];
179
- }
180
- // Public getters for components
181
- getNotifications() {
182
- return this.notifications;
183
- }
184
- getActiveNotifications() {
185
- return this.activeNotifications;
186
- }
187
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
188
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
189
- }
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NotificationService, decorators: [{
191
- type: Injectable,
192
- args: [{
193
- providedIn: 'root'
194
- }]
195
- }], ctorParameters: () => [] });
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtZWxlbWVudC9zcmMvbGliL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUErQjdELE1BQU0sT0FBTyxtQkFBbUI7SUFTOUI7UUFSUSxrQkFBYSxHQUFHLE1BQU0sQ0FBcUIsRUFBRSxDQUFDLENBQUM7UUFDL0MscUJBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO1FBRXRFLG1CQUFtQjtRQUNuQix3QkFBbUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ2xDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQzlDLENBQUM7SUFFYSxDQUFDO0lBRWhCOztPQUVHO0lBQ0gsT0FBTyxDQUFDLE9BQWUsRUFBRSxPQUFzQztRQUM3RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDZixPQUFPO1lBQ1AsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsY0FBYztZQUNwQixRQUFRLEVBQUUsSUFBSTtZQUNkLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxPQUFlLEVBQUUsT0FBc0M7UUFDM0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsT0FBTztZQUNQLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLE9BQU87WUFDYixRQUFRLEVBQUUsSUFBSTtZQUNkLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FB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O1lBQy9CLENBQUMsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNqRixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQThDO1FBQ25FLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLGNBQWM7WUFDdkIsS0FBSyxFQUFFLE9BQU87WUFDZCxPQUFPLEVBQUUsU0FBUztZQUNsQixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7OEdBek9VLG1CQUFtQjtrSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uT3B0aW9ucyB7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIHR5cGU/OiAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nO1xyXG4gIGR1cmF0aW9uPzogbnVtYmVyO1xyXG4gIHNob3dVbmRvPzogYm9vbGVhbjtcclxuICB1bmRvQWN0aW9uPzogKCkgPT4gdm9pZDtcclxuICB1bmRvVGV4dD86IHN0cmluZztcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkl0ZW0ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIHR5cGU6ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnd2FybmluZycgfCAnaW5mbyc7XHJcbiAgZHVyYXRpb246IG51bWJlcjtcclxuICBzaG93VW5kbzogYm9vbGVhbjtcclxuICB1bmRvQWN0aW9uPzogKCkgPT4gdm9pZDtcclxuICB1bmRvVGV4dDogc3RyaW5nO1xyXG4gIGljb246IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICB0aW1lc3RhbXA6IG51bWJlcjtcclxuICBpc1Zpc2libGU6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgbm90aWZpY2F0aW9ucyA9IHNpZ25hbDxOb3RpZmljYXRpb25JdGVtW10+KFtdKTtcclxuICBwcml2YXRlIG1heE5vdGlmaWNhdGlvbnMgPSA1OyAvLyBNYXhpbXVtIG5vdGlmaWNhdGlvbnMgdG8gc2hvdyBhdCBvbmNlXHJcblxyXG4gIC8vIENvbXB1dGVkIHNpZ25hbHNcclxuICBhY3RpdmVOb3RpZmljYXRpb25zID0gY29tcHV0ZWQoKCkgPT4gXHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnMoKS5maWx0ZXIobiA9PiBuLmlzVmlzaWJsZSlcclxuICApO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYSBzdWNjZXNzIG5vdGlmaWNhdGlvblxyXG4gICAqL1xyXG4gIHN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nLCBvcHRpb25zPzogUGFydGlhbDxOb3RpZmljYXRpb25PcHRpb25zPik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5zaG93KHtcclxuICAgICAgbWVzc2FnZSxcclxuICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxyXG4gICAgICBpY29uOiAnY2hlY2tfY2lyY2xlJyxcclxuICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgIC4uLm9wdGlvbnNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbiBlcnJvciBub3RpZmljYXRpb25cclxuICAgKi9cclxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBQYXJ0aWFsPE5vdGlmaWNhdGlvbk9wdGlvbnM+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNob3coe1xyXG4gICAgICBtZXNzYWdlLFxyXG4gICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICBpY29uOiAnZXJyb3InLFxyXG4gICAgICBkdXJhdGlvbjogNTAwMCxcclxuICAgICAgLi4ub3B0aW9uc1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGEgd2FybmluZyBub3RpZmljYXRpb25cclxuICAgKi9cclxuICB3YXJuaW5nKG1lc3NhZ2U6IHN0cmluZywgb3B0aW9ucz86IFBhcnRpYWw8Tm90aWZpY2F0aW9uT3B0aW9ucz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7XHJcbiAgICAgIG1lc3NhZ2UsXHJcbiAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgaWNvbjogJ3dhcm5pbmcnLFxyXG4gICAgICBkdXJhdGlvbjogNDAwMCxcclxuICAgICAgLi4ub3B0aW9uc1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGFuIGluZm8gbm90aWZpY2F0aW9uXHJcbiAgICovXHJcbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBQYXJ0aWFsPE5vdGlmaWNhdGlvbk9wdGlvbnM+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNob3coe1xyXG4gICAgICBtZXNzYWdlLFxyXG4gICAgICB0eXBlOiAnaW5mbycsXHJcbiAgICAgIGljb246ICdpbmZvJyxcclxuICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgIC4uLm9wdGlvbnNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhIG5vdGlmaWNhdGlvbiB3aXRoIHVuZG8gZnVuY3Rpb25hbGl0eVxyXG4gICAqL1xyXG4gIHNob3dXaXRoVW5kbyhcclxuICAgIG1lc3NhZ2U6IHN0cmluZywgXHJcbiAgICB1bmRvQWN0aW9uOiAoKSA9PiB2b2lkLCBcclxuICAgIG9wdGlvbnM/OiBQYXJ0aWFsPE5vdGlmaWNhdGlvbk9wdGlvbnM+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNob3coe1xyXG4gICAgICBtZXNzYWdlLFxyXG4gICAgICB0eXBlOiAnaW5mbycsXHJcbiAgICAgIGljb246ICdpbmZvJyxcclxuICAgICAgZHVyYXRpb246IDgwMDAsXHJcbiAgICAgIHNob3dVbmRvOiB0cnVlLFxyXG4gICAgICB1bmRvQWN0aW9uLFxyXG4gICAgICB1bmRvVGV4dDogJ1VuZG8nLFxyXG4gICAgICAuLi5vcHRpb25zXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYSBub3RpZmljYXRpb24gZm9yIHJldmVyc2libGUgZGVzdHJ1Y3RpdmUgYWN0aW9uc1xyXG4gICAqL1xyXG4gIHNob3dSZXZlcnNpYmxlQWN0aW9uKFxyXG4gICAgYWN0aW9uOiBzdHJpbmcsXHJcbiAgICBpdGVtTmFtZTogc3RyaW5nLFxyXG4gICAgdW5kb0FjdGlvbjogKCkgPT4gdm9pZCxcclxuICAgIG9wdGlvbnM/OiBQYXJ0aWFsPE5vdGlmaWNhdGlvbk9wdGlvbnM+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNob3dXaXRoVW5kbyhcclxuICAgICAgYCR7YWN0aW9ufSBcIiR7aXRlbU5hbWV9XCJgLFxyXG4gICAgICB1bmRvQWN0aW9uLFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgIGljb246ICdkZWxldGUnLFxyXG4gICAgICAgIHRpdGxlOiBgJHthY3Rpb259IGNvbXBsZXRlZGAsXHJcbiAgICAgICAgLi4ub3B0aW9uc1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhIG5vdGlmaWNhdGlvbiBmb3IgYmFja2dyb3VuZCB0YXNrc1xyXG4gICAqL1xyXG4gIHNob3dCYWNrZ3JvdW5kVGFzayhcclxuICAgIHRhc2tOYW1lOiBzdHJpbmcsXHJcbiAgICBpc0NvbXBsZXRlOiBib29sZWFuID0gdHJ1ZSxcclxuICAgIG9wdGlvbnM/OiBQYXJ0aWFsPE5vdGlmaWNhdGlvbk9wdGlvbnM+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNob3coe1xyXG4gICAgICBtZXNzYWdlOiBpc0NvbXBsZXRlID8gYCR7dGFza05hbWV9IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgIDogYCR7dGFza05hbWV9IGluIHByb2dyZXNzLi4uYCxcclxuICAgICAgdHlwZTogaXNDb21wbGV0ZSA/ICdzdWNjZXNzJyA6ICdpbmZvJyxcclxuICAgICAgaWNvbjogaXNDb21wbGV0ZSA/ICdjaGVja19jaXJjbGUnIDogJ3N5bmMnLFxyXG4gICAgICBkdXJhdGlvbjogaXNDb21wbGV0ZSA/IDMwMDAgOiAwLCAvLyBEb24ndCBhdXRvLWRpc21pc3MgZm9yIGluLXByb2dyZXNzIHRhc2tzXHJcbiAgICAgIC4uLm9wdGlvbnNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29yZSBzaG93IG1ldGhvZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2hvdyhvcHRpb25zOiBOb3RpZmljYXRpb25PcHRpb25zKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uSXRlbSA9IHtcclxuICAgICAgaWQ6IHRoaXMuZ2VuZXJhdGVJZCgpLFxyXG4gICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UsXHJcbiAgICAgIHR5cGU6IG9wdGlvbnMudHlwZSB8fCAnaW5mbycsXHJcbiAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uIHx8IDMwMDAsXHJcbiAgICAgIHNob3dVbmRvOiBvcHRpb25zLnNob3dVbmRvIHx8IGZhbHNlLFxyXG4gICAgICB1bmRvQWN0aW9uOiBvcHRpb25zLnVuZG9BY3Rpb24sXHJcbiAgICAgIHVuZG9UZXh0OiBvcHRpb25zLnVuZG9UZXh0IHx8ICdVbmRvJyxcclxuICAgICAgaWNvbjogb3B0aW9ucy5pY29uIHx8IHRoaXMuZ2V0RGVmYXVsdEljb24ob3B0aW9ucy50eXBlIHx8ICdpbmZvJyksXHJcbiAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlLFxyXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXHJcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmFkZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xyXG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbi5pZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIHNwZWNpZmljIG5vdGlmaWNhdGlvblxyXG4gICAqL1xyXG4gIHJlbW92ZShpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnMudXBkYXRlKG5vdGlmaWNhdGlvbnMgPT4gXHJcbiAgICAgIG5vdGlmaWNhdGlvbnMubWFwKG4gPT4gXHJcbiAgICAgICAgbi5pZCA9PT0gaWQgPyB7IC4uLm4sIGlzVmlzaWJsZTogZmFsc2UgfSA6IG5cclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBSZW1vdmUgZnJvbSBhcnJheSBhZnRlciBhbmltYXRpb25cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMudXBkYXRlKG5vdGlmaWNhdGlvbnMgPT4gXHJcbiAgICAgICAgbm90aWZpY2F0aW9ucy5maWx0ZXIobiA9PiBuLmlkICE9PSBpZClcclxuICAgICAgKTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYWxsIG5vdGlmaWNhdGlvbnNcclxuICAgKi9cclxuICBjbGVhckFsbCgpOiB2b2lkIHtcclxuICAgIHRoaXMubm90aWZpY2F0aW9ucy51cGRhdGUobm90aWZpY2F0aW9ucyA9PiBcclxuICAgICAgbm90aWZpY2F0aW9ucy5tYXAobiA9PiAoeyAuLi5uLCBpc1Zpc2libGU6IGZhbHNlIH0pKVxyXG4gICAgKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnNldChbXSk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZSB1bmRvIGFjdGlvbiBmb3IgYSBub3RpZmljYXRpb25cclxuICAgKi9cclxuICBleGVjdXRlVW5kbyhpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLm5vdGlmaWNhdGlvbnMoKS5maW5kKG4gPT4gbi5pZCA9PT0gaWQpO1xyXG4gICAgaWYgKG5vdGlmaWNhdGlvbiAmJiBub3RpZmljYXRpb24udW5kb0FjdGlvbikge1xyXG4gICAgICBub3RpZmljYXRpb24udW5kb0FjdGlvbigpO1xyXG4gICAgICB0aGlzLnJlbW92ZShpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBJbnRlcm5hbCBtZXRob2RzXHJcbiAgcHJpdmF0ZSBhZGROb3RpZmljYXRpb24obm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25JdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnMudXBkYXRlKG5vdGlmaWNhdGlvbnMgPT4ge1xyXG4gICAgICBjb25zdCBuZXdOb3RpZmljYXRpb25zID0gWy4uLm5vdGlmaWNhdGlvbnMsIG5vdGlmaWNhdGlvbl07XHJcbiAgICAgIFxyXG4gICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIHZpc2libGUgbm90aWZpY2F0aW9uc1xyXG4gICAgICBpZiAobmV3Tm90aWZpY2F0aW9ucy5sZW5ndGggPiB0aGlzLm1heE5vdGlmaWNhdGlvbnMpIHtcclxuICAgICAgICAvLyBSZW1vdmUgb2xkZXN0IG5vdGlmaWNhdGlvbnNcclxuICAgICAgICBjb25zdCB0b1JlbW92ZSA9IG5ld05vdGlmaWNhdGlvbnMubGVuZ3RoIC0gdGhpcy5tYXhOb3RpZmljYXRpb25zO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9SZW1vdmU7IGkrKykge1xyXG4gICAgICAgICAgaWYgKG5ld05vdGlmaWNhdGlvbnNbaV0pIHtcclxuICAgICAgICAgICAgbmV3Tm90aWZpY2F0aW9uc1tpXSA9IHsgLi4ubmV3Tm90aWZpY2F0aW9uc1tpXSwgaXNWaXNpYmxlOiBmYWxzZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgcmV0dXJuIG5ld05vdGlmaWNhdGlvbnM7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBdXRvLXJlbW92ZSBhZnRlciBkdXJhdGlvbiAoaWYgbm90IDApXHJcbiAgICBpZiAobm90aWZpY2F0aW9uLmR1cmF0aW9uID4gMCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbW92ZShub3RpZmljYXRpb24uaWQpO1xyXG4gICAgICB9LCBub3RpZmljYXRpb24uZHVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYG5vdGlmaWNhdGlvbi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRJY29uKHR5cGU6ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnd2FybmluZycgfCAnaW5mbycpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaWNvbk1hcCA9IHtcclxuICAgICAgc3VjY2VzczogJ2NoZWNrX2NpcmNsZScsXHJcbiAgICAgIGVycm9yOiAnZXJyb3InLFxyXG4gICAgICB3YXJuaW5nOiAnd2FybmluZycsXHJcbiAgICAgIGluZm86ICdpbmZvJ1xyXG4gICAgfTtcclxuICAgIHJldHVybiBpY29uTWFwW3R5cGVdO1xyXG4gIH1cclxuXHJcbiAgLy8gUHVibGljIGdldHRlcnMgZm9yIGNvbXBvbmVudHNcclxuICBnZXROb3RpZmljYXRpb25zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9ucztcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZU5vdGlmaWNhdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVOb3RpZmljYXRpb25zO1xyXG4gIH1cclxufVxyXG5cclxuIl19
@@ -1,231 +0,0 @@
1
- import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /**
4
- <!-- Basic horizontal (left-right) layout -->
5
- <div class="panel-container">
6
- <div class="left-panel">
7
- Left Panel Content
8
- </div>
9
-
10
- <div cideEleResizer direction="horizontal" [minPrevSize]="100" [minNextSize]="100">resize
11
- </div>
12
-
13
- <div class="right-panel">
14
- Right Panel Content
15
- </div>
16
- </div>
17
-
18
- <!-- Basic vertical (top-bottom) layout -->
19
- <div class="panel-container-vertical">
20
- <div class="top-panel">
21
- Top Panel Content
22
- </div>
23
-
24
- <div cideEleResizer direction="vertical" [minPrevSize]="50" [minNextSize]="50">resize
25
- </div>
26
-
27
- <div class="bottom-panel">
28
- Bottom Panel Content
29
- </div>
30
- </div>
31
-
32
- <!-- Using with custom selectors -->
33
- <div class="complex-layout">
34
- <div id="panel1">Panel 1</div>
35
- <div id="panel2">Panel 2</div>
36
-
37
- <div cideEleResizer direction="horizontal" prevElementSelector="#panel1" nextElementSelector="#panel2"
38
- [usePercentage]="true">resize
39
- </div>
40
-
41
- <div id="panel3">Panel 3</div>
42
- </div>
43
- */
44
- export class CideEleResizerDirective {
45
- constructor(el, renderer) {
46
- this.el = el;
47
- this.renderer = renderer;
48
- this.direction = 'horizontal';
49
- this.to = "";
50
- this.prevElementSelector = ''; // Selector for previous element
51
- this.nextElementSelector = ''; // Selector for next element
52
- this.parentElementSelector = ''; // Selector for parent element
53
- this.minPrevSize = 0; // Minimum size of previous element (px)
54
- this.minNextSize = 0; // Minimum size of next element (px)
55
- this.usePercentage = false; // Use percentage instead of pixels
56
- this.resizeStart = new EventEmitter();
57
- this.resizing = new EventEmitter();
58
- this.resizeEnd = new EventEmitter();
59
- this.isResizing = false;
60
- this.startPosition = 0;
61
- this.prevElement = null;
62
- this.nextElement = null;
63
- this.prevSize = 0;
64
- this.nextSize = 0;
65
- this.containerSize = 0;
66
- this.startPrevSize = 0;
67
- this.startNextSize = 0;
68
- this.onMouseMove = (event) => {
69
- if (!this.isResizing)
70
- return;
71
- // Calculate movement
72
- const currentPosition = this.direction === 'horizontal' ? event.clientX : event.clientY;
73
- const delta = currentPosition - this.startPosition;
74
- // Calculate new sizes
75
- let newPrevSize = this.startPrevSize + delta;
76
- let newNextSize = this.startNextSize - delta;
77
- // Apply constraints
78
- if (newPrevSize < this.minPrevSize) {
79
- const diff = this.minPrevSize - newPrevSize;
80
- newPrevSize = this.minPrevSize;
81
- newNextSize = this.startNextSize - delta + diff;
82
- // skip if previsus size is equal to the minimum size, note above code is dark code which will not be executed
83
- return;
84
- }
85
- if (newNextSize < this.minNextSize) {
86
- const diff = this.minNextSize - newNextSize;
87
- newNextSize = this.minNextSize;
88
- newPrevSize = this.startPrevSize + delta - diff;
89
- // skip if next size is equal to the minimum size, note above code is dark code which will not be executed
90
- return;
91
- }
92
- // Update sizes
93
- this.prevSize = newPrevSize;
94
- this.nextSize = newNextSize;
95
- // Apply new sizes
96
- if (this.usePercentage) {
97
- const prevPercent = (newPrevSize / this.containerSize) * 100;
98
- const nextPercent = (newNextSize / this.containerSize) * 100;
99
- this.renderer.setStyle(this.prevElement, this.getSizeProperty(), `${prevPercent}%`);
100
- this.renderer.setStyle(this.nextElement, this.getSizeProperty(), `${nextPercent}%`);
101
- }
102
- else {
103
- this.renderer.setStyle(this.prevElement, this.getSizeProperty(), `${newPrevSize}px`);
104
- this.renderer.setStyle(this.nextElement, this.getSizeProperty(), `${newNextSize}px`);
105
- }
106
- // Emit resizing event
107
- this.resizing.emit({ prevSize: newPrevSize, nextSize: newNextSize });
108
- };
109
- this.onMouseUp = () => {
110
- this.isResizing = false;
111
- // Remove event listeners
112
- document.removeEventListener('mousemove', this.onMouseMove);
113
- document.removeEventListener('mouseup', this.onMouseUp);
114
- // Restore text selection
115
- document.body.style.userSelect = '';
116
- // Emit resizeEnd event
117
- if (this.prevElement && this.nextElement) {
118
- this.resizeEnd.emit({ prevSize: this.prevSize, nextSize: this.nextSize });
119
- }
120
- // Remove visual feedback
121
- this.renderer.removeClass(this.el.nativeElement, 'resizing');
122
- };
123
- }
124
- ngOnInit() {
125
- // Set cursor style based on direction
126
- this.renderer.setStyle(this.el.nativeElement, 'cursor', this.direction === 'horizontal' ? 'ew-resize' : 'ns-resize');
127
- // Add a class to help with styling
128
- this.renderer.addClass(this.el.nativeElement, 'panel-resizer');
129
- this.renderer.addClass(this.el.nativeElement, `panel-resizer-${this.direction}`);
130
- this.renderer.addClass(this.el.nativeElement, `cide-lyt-devider-${this.direction}`);
131
- if (this.to) {
132
- this.renderer.addClass(this.el.nativeElement, `cide-lyt-devider-${this.direction}-${this.to}`);
133
- }
134
- }
135
- onMouseDown(event) {
136
- event.preventDefault();
137
- // Get the elements to resize
138
- this.prevElement = this.getPrevElement();
139
- this.nextElement = this.getNextElement();
140
- // if (!this.prevElement || !this.nextElement) {
141
- // console.error('Could not find elements to resize');
142
- // return;
143
- // }
144
- // Get container size
145
- const parent = this.parentElementSelector ? document.querySelector(this.parentElementSelector) : this.el.nativeElement.parentElement;
146
- if (parent) {
147
- console.log(parent.offsetWidth, "parent.offsetWidth");
148
- this.containerSize = this.direction === 'horizontal'
149
- ? parent.offsetWidth
150
- : parent.offsetHeight;
151
- }
152
- // Store initial positions and sizes
153
- this.startPosition = this.direction === 'horizontal' ? event.clientX : event.clientY;
154
- if (this.prevElement) {
155
- console.log(this.prevElement.offsetWidth, "this.prevElement.offsetWidth");
156
- this.startPrevSize = this.direction === 'horizontal'
157
- ? this.prevElement.offsetWidth
158
- : this.prevElement.offsetHeight;
159
- }
160
- if (this.nextElement) {
161
- console.log(this.nextElement.offsetWidth, "this.nextElement.offsetWidth");
162
- this.startNextSize = this.direction === 'horizontal'
163
- ? this.nextElement.offsetWidth
164
- : this.nextElement.offsetHeight;
165
- }
166
- this.prevSize = this.startPrevSize;
167
- this.nextSize = this.startNextSize;
168
- this.isResizing = true;
169
- // Add event listeners
170
- document.addEventListener('mousemove', this.onMouseMove);
171
- document.addEventListener('mouseup', this.onMouseUp);
172
- // Disable text selection
173
- document.body.style.userSelect = 'none';
174
- // Emit resizeStart event
175
- this.resizeStart.emit();
176
- // Add visual feedback
177
- this.renderer.addClass(this.el.nativeElement, 'resizing');
178
- }
179
- getPrevElement() {
180
- if (this.prevElementSelector) {
181
- const parent = this.parentElementSelector ? document.querySelector(this.parentElementSelector) : this.el.nativeElement.parentElement;
182
- return parent?.querySelector(this.prevElementSelector) || null;
183
- }
184
- return this.el.nativeElement.previousElementSibling;
185
- }
186
- getNextElement() {
187
- if (this.nextElementSelector) {
188
- const parent = this.parentElementSelector ? document.querySelector(this.parentElementSelector) : this.el.nativeElement.parentElement;
189
- return parent?.querySelector(this.nextElementSelector) || null;
190
- }
191
- return this.el.nativeElement.nextElementSibling;
192
- }
193
- getSizeProperty() {
194
- return this.direction === 'horizontal' ? 'width' : 'height';
195
- }
196
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleResizerDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
197
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: CideEleResizerDirective, isStandalone: true, selector: "[cideEleResizer]", inputs: { direction: "direction", to: "to", prevElementSelector: "prevElementSelector", nextElementSelector: "nextElementSelector", parentElementSelector: "parentElementSelector", minPrevSize: "minPrevSize", minNextSize: "minNextSize", usePercentage: "usePercentage" }, outputs: { resizeStart: "resizeStart", resizing: "resizing", resizeEnd: "resizeEnd" }, host: { listeners: { "mousedown": "onMouseDown($event)" } }, ngImport: i0 }); }
198
- }
199
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleResizerDirective, decorators: [{
200
- type: Directive,
201
- args: [{
202
- selector: '[cideEleResizer]',
203
- standalone: true
204
- }]
205
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { direction: [{
206
- type: Input
207
- }], to: [{
208
- type: Input
209
- }], prevElementSelector: [{
210
- type: Input
211
- }], nextElementSelector: [{
212
- type: Input
213
- }], parentElementSelector: [{
214
- type: Input
215
- }], minPrevSize: [{
216
- type: Input
217
- }], minNextSize: [{
218
- type: Input
219
- }], usePercentage: [{
220
- type: Input
221
- }], resizeStart: [{
222
- type: Output
223
- }], resizing: [{
224
- type: Output
225
- }], resizeEnd: [{
226
- type: Output
227
- }], onMouseDown: [{
228
- type: HostListener,
229
- args: ['mousedown', ['$event']]
230
- }] } });
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtZWxlbWVudC9zcmMvbGliL3V0aWxzL2RpcmVjdGl2ZXMvcmVzaXplci9yZXNpemVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQzs7QUFVcEg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7QUFDSCxNQUFNLE9BQU8sdUJBQXVCO0lBdUJsQyxZQUFvQixFQUFjLEVBQVUsUUFBbUI7UUFBM0MsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUF0QnRELGNBQVMsR0FBNEIsWUFBWSxDQUFDO1FBQ2xELE9BQUUsR0FBOEIsRUFBRSxDQUFDO1FBQ25DLHdCQUFtQixHQUFHLEVBQUUsQ0FBQyxDQUFFLGdDQUFnQztRQUMzRCx3QkFBbUIsR0FBRyxFQUFFLENBQUMsQ0FBRSw0QkFBNEI7UUFDdkQsMEJBQXFCLEdBQUcsRUFBRSxDQUFDLENBQUUsOEJBQThCO1FBQzNELGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQVcsd0NBQXdDO1FBQ25FLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQVcsb0NBQW9DO1FBQy9ELGtCQUFhLEdBQUcsS0FBSyxDQUFDLENBQUssbUNBQW1DO1FBQzdELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQTBDLENBQUM7UUFDdEUsY0FBUyxHQUFHLElBQUksWUFBWSxFQUEwQyxDQUFDO1FBRXpFLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsZ0JBQVcs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YUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNqRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxrQkFBaUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sZUFBZTtRQUNyQixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUM5RCxDQUFDOzhHQXpMVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkE5Q25DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3VHQTRDVSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFnQ1AsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgdHlwZSBDaWRlRWxlUmVzaXplckRpcmVjdGlvbiA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XHJcbmV4cG9ydCB0eXBlIENpZGVFbGVSZXNpemVyRGlyZWN0aW9uVG8gPSBcInJpZ2h0LXRvLWxlZnRcIiB8IFwibGVmdC10by1yaWdodFwiIHwgXCJcIjtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2NpZGVFbGVSZXNpemVyXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5cclxuLyoqXHJcbjwhLS0gQmFzaWMgaG9yaXpvbnRhbCAobGVmdC1yaWdodCkgbGF5b3V0IC0tPlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGVmdC1wYW5lbFwiPlxyXG4gICAgICAgIExlZnQgUGFuZWwgQ29udGVudFxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjaWRlRWxlUmVzaXplciBkaXJlY3Rpb249XCJob3Jpem9udGFsXCIgW21pblByZXZTaXplXT1cIjEwMFwiIFttaW5OZXh0U2l6ZV09XCIxMDBcIj5yZXNpemVcclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1wYW5lbFwiPlxyXG4gICAgICAgIFJpZ2h0IFBhbmVsIENvbnRlbnRcclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gQmFzaWMgdmVydGljYWwgKHRvcC1ib3R0b20pIGxheW91dCAtLT5cclxuPGRpdiBjbGFzcz1cInBhbmVsLWNvbnRhaW5lci12ZXJ0aWNhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvcC1wYW5lbFwiPlxyXG4gICAgICAgIFRvcCBQYW5lbCBDb250ZW50XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNpZGVFbGVSZXNpemVyIGRpcmVjdGlvbj1cInZlcnRpY2FsXCIgW21pblByZXZTaXplXT1cIjUwXCIgW21pbk5leHRTaXplXT1cIjUwXCI+cmVzaXplXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYm90dG9tLXBhbmVsXCI+XHJcbiAgICAgICAgQm90dG9tIFBhbmVsIENvbnRlbnRcclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gVXNpbmcgd2l0aCBjdXN0b20gc2VsZWN0b3JzIC0tPlxyXG48ZGl2IGNsYXNzPVwiY29tcGxleC1sYXlvdXRcIj5cclxuICAgIDxkaXYgaWQ9XCJwYW5lbDFcIj5QYW5lbCAxPC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwicGFuZWwyXCI+UGFuZWwgMjwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2lkZUVsZVJlc2l6ZXIgZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHByZXZFbGVtZW50U2VsZWN0b3I9XCIjcGFuZWwxXCIgbmV4dEVsZW1lbnRTZWxlY3Rvcj1cIiNwYW5lbDJcIlxyXG4gICAgICAgIFt1c2VQZXJjZW50YWdlXT1cInRydWVcIj5yZXNpemVcclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgaWQ9XCJwYW5lbDNcIj5QYW5lbCAzPC9kaXY+XHJcbjwvZGl2PlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENpZGVFbGVSZXNpemVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBkaXJlY3Rpb246IENpZGVFbGVSZXNpemVyRGlyZWN0aW9uID0gJ2hvcml6b250YWwnO1xyXG4gIEBJbnB1dCgpIHRvOiBDaWRlRWxlUmVzaXplckRpcmVjdGlvblRvID0gXCJcIjtcclxuICBASW5wdXQoKSBwcmV2RWxlbWVudFNlbGVjdG9yID0gJyc7ICAvLyBTZWxlY3RvciBmb3IgcHJldmlvdXMgZWxlbWVudFxyXG4gIEBJbnB1dCgpIG5leHRFbGVtZW50U2VsZWN0b3IgPSAnJzsgIC8vIFNlbGVjdG9yIGZvciBuZXh0IGVsZW1lbnRcclxuICBASW5wdXQoKSBwYXJlbnRFbGVtZW50U2VsZWN0b3IgPSAnJzsgIC8vIFNlbGVjdG9yIGZvciBwYXJlbnQgZWxlbWVudFxyXG4gIEBJbnB1dCgpIG1pblByZXZTaXplID0gMDsgICAgICAgICAgIC8vIE1pbmltdW0gc2l6ZSBvZiBwcmV2aW91cyBlbGVtZW50IChweClcclxuICBASW5wdXQoKSBtaW5OZXh0U2l6ZSA9IDA7ICAgICAgICAgICAvLyBNaW5pbXVtIHNpemUgb2YgbmV4dCBlbGVtZW50IChweClcclxuICBASW5wdXQoKSB1c2VQZXJjZW50YWdlID0gZmFsc2U7ICAgICAvLyBVc2UgcGVyY2VudGFnZSBpbnN0ZWFkIG9mIHBpeGVsc1xyXG4gIEBPdXRwdXQoKSByZXNpemVTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgcmVzaXppbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcHJldlNpemU6IG51bWJlciwgbmV4dFNpemU6IG51bWJlciB9PigpO1xyXG4gIEBPdXRwdXQoKSByZXNpemVFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcHJldlNpemU6IG51bWJlciwgbmV4dFNpemU6IG51bWJlciB9PigpO1xyXG5cclxuICBwcml2YXRlIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIHN0YXJ0UG9zaXRpb24gPSAwO1xyXG4gIHByaXZhdGUgcHJldkVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBuZXh0RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHByZXZTaXplID0gMDtcclxuICBwcml2YXRlIG5leHRTaXplID0gMDtcclxuICBwcml2YXRlIGNvbnRhaW5lclNpemUgPSAwO1xyXG4gIHByaXZhdGUgc3RhcnRQcmV2U2l6ZSA9IDA7XHJcbiAgcHJpdmF0ZSBzdGFydE5leHRTaXplID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBTZXQgY3Vyc29yIHN0eWxlIGJhc2VkIG9uIGRpcmVjdGlvblxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAnY3Vyc29yJyxcclxuICAgICAgdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdldy1yZXNpemUnIDogJ25zLXJlc2l6ZSdcclxuICAgICk7XHJcblxyXG4gICAgLy8gQWRkIGEgY2xhc3MgdG8gaGVscCB3aXRoIHN0eWxpbmdcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAncGFuZWwtcmVzaXplcicpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIGBwYW5lbC1yZXNpemVyLSR7dGhpcy5kaXJlY3Rpb259YCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgYGNpZGUtbHl0LWRldmlkZXItJHt0aGlzLmRpcmVjdGlvbn1gKTtcclxuICAgIGlmICh0aGlzLnRvKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCBgY2lkZS1seXQtZGV2aWRlci0ke3RoaXMuZGlyZWN0aW9ufS0ke3RoaXMudG99YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIEdldCB0aGUgZWxlbWVudHMgdG8gcmVzaXplXHJcbiAgICB0aGlzLnByZXZFbGVtZW50ID0gdGhpcy5nZXRQcmV2RWxlbWVudCgpO1xyXG4gICAgdGhpcy5uZXh0RWxlbWVudCA9IHRoaXMuZ2V0TmV4dEVsZW1lbnQoKTtcclxuXHJcbiAgICAvLyBpZiAoIXRoaXMucHJldkVsZW1lbnQgfHwgIXRoaXMubmV4dEVsZW1lbnQpIHtcclxuICAgIC8vICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGZpbmQgZWxlbWVudHMgdG8gcmVzaXplJyk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBHZXQgY29udGFpbmVyIHNpemVcclxuXHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudEVsZW1lbnRTZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5wYXJlbnRFbGVtZW50U2VsZWN0b3IpIDogdGhpcy5lbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHBhcmVudC5vZmZzZXRXaWR0aCwgXCJwYXJlbnQub2Zmc2V0V2lkdGhcIilcclxuICAgICAgdGhpcy5jb250YWluZXJTaXplID0gdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xyXG4gICAgICAgID8gcGFyZW50Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgOiBwYXJlbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG4gICAgLy8gU3RvcmUgaW5pdGlhbCBwb3NpdGlvbnMgYW5kIHNpemVzXHJcbiAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gZXZlbnQuY2xpZW50WCA6IGV2ZW50LmNsaWVudFk7XHJcbiAgICBpZiAodGhpcy5wcmV2RWxlbWVudCkge1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnByZXZFbGVtZW50Lm9mZnNldFdpZHRoLCBcInRoaXMucHJldkVsZW1lbnQub2Zmc2V0V2lkdGhcIilcclxuICAgICAgdGhpcy5zdGFydFByZXZTaXplID0gdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xyXG4gICAgICAgID8gdGhpcy5wcmV2RWxlbWVudC5vZmZzZXRXaWR0aFxyXG4gICAgICAgIDogdGhpcy5wcmV2RWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5uZXh0RWxlbWVudCkge1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLm5leHRFbGVtZW50Lm9mZnNldFdpZHRoLCBcInRoaXMubmV4dEVsZW1lbnQub2Zmc2V0V2lkdGhcIilcclxuICAgICAgdGhpcy5zdGFydE5leHRTaXplID0gdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xyXG4gICAgICAgID8gdGhpcy5uZXh0RWxlbWVudC5vZmZzZXRXaWR0aFxyXG4gICAgICAgIDogdGhpcy5uZXh0RWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmV2U2l6ZSA9IHRoaXMuc3RhcnRQcmV2U2l6ZTtcclxuICAgIHRoaXMubmV4dFNpemUgPSB0aGlzLnN0YXJ0TmV4dFNpemU7XHJcblxyXG4gICAgdGhpcy5pc1Jlc2l6aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCk7XHJcblxyXG4gICAgLy8gRGlzYWJsZSB0ZXh0IHNlbGVjdGlvblxyXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnO1xyXG5cclxuICAgIC8vIEVtaXQgcmVzaXplU3RhcnQgZXZlbnRcclxuICAgIHRoaXMucmVzaXplU3RhcnQuZW1pdCgpO1xyXG5cclxuICAgIC8vIEFkZCB2aXN1YWwgZmVlZGJhY2tcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAncmVzaXppbmcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Nb3VzZU1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIG1vdmVtZW50XHJcbiAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gZXZlbnQuY2xpZW50WCA6IGV2ZW50LmNsaWVudFk7XHJcbiAgICBjb25zdCBkZWx0YSA9IGN1cnJlbnRQb3NpdGlvbiAtIHRoaXMuc3RhcnRQb3NpdGlvbjtcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgbmV3IHNpemVzXHJcbiAgICBsZXQgbmV3UHJldlNpemUgPSB0aGlzLnN0YXJ0UHJldlNpemUgKyBkZWx0YTtcclxuICAgIGxldCBuZXdOZXh0U2l6ZSA9IHRoaXMuc3RhcnROZXh0U2l6ZSAtIGRlbHRhO1xyXG5cclxuICAgIC8vIEFwcGx5IGNvbnN0cmFpbnRzXHJcbiAgICBpZiAobmV3UHJldlNpemUgPCB0aGlzLm1pblByZXZTaXplKSB7XHJcbiAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLm1pblByZXZTaXplIC0gbmV3UHJldlNpemU7XHJcbiAgICAgIG5ld1ByZXZTaXplID0gdGhpcy5taW5QcmV2U2l6ZTtcclxuICAgICAgbmV3TmV4dFNpemUgPSB0aGlzLnN0YXJ0TmV4dFNpemUgLSBkZWx0YSArIGRpZmY7XHJcbiAgICAgIC8vIHNraXAgaWYgcHJldmlzdXMgc2l6ZSBpcyBlcXVhbCB0byB0aGUgbWluaW11bSBzaXplLCBub3RlIGFib3ZlIGNvZGUgaXMgZGFyayBjb2RlIHdoaWNoIHdpbGwgbm90IGJlIGV4ZWN1dGVkXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV3TmV4dFNpemUgPCB0aGlzLm1pbk5leHRTaXplKSB7XHJcbiAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLm1pbk5leHRTaXplIC0gbmV3TmV4dFNpemU7XHJcbiAgICAgIG5ld05leHRTaXplID0gdGhpcy5taW5OZXh0U2l6ZTtcclxuICAgICAgbmV3UHJldlNpemUgPSB0aGlzLnN0YXJ0UHJldlNpemUgKyBkZWx0YSAtIGRpZmY7XHJcbiAgICAgIC8vIHNraXAgaWYgbmV4dCBzaXplIGlzIGVxdWFsIHRvIHRoZSBtaW5pbXVtIHNpemUsIG5vdGUgYWJvdmUgY29kZSBpcyBkYXJrIGNvZGUgd2hpY2ggd2lsbCBub3QgYmUgZXhlY3V0ZWRcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBzaXplc1xyXG4gICAgdGhpcy5wcmV2U2l6ZSA9IG5ld1ByZXZTaXplO1xyXG4gICAgdGhpcy5uZXh0U2l6ZSA9IG5ld05leHRTaXplO1xyXG5cclxuICAgIC8vIEFwcGx5IG5ldyBzaXplc1xyXG4gICAgaWYgKHRoaXMudXNlUGVyY2VudGFnZSkge1xyXG4gICAgICBjb25zdCBwcmV2UGVyY2VudCA9IChuZXdQcmV2U2l6ZSAvIHRoaXMuY29udGFpbmVyU2l6ZSkgKiAxMDA7XHJcbiAgICAgIGNvbnN0IG5leHRQZXJjZW50ID0gKG5ld05leHRTaXplIC8gdGhpcy5jb250YWluZXJTaXplKSAqIDEwMDtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5wcmV2RWxlbWVudCwgdGhpcy5nZXRTaXplUHJvcGVydHkoKSwgYCR7cHJldlBlcmNlbnR9JWApO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMubmV4dEVsZW1lbnQsIHRoaXMuZ2V0U2l6ZVByb3BlcnR5KCksIGAke25leHRQZXJjZW50fSVgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5wcmV2RWxlbWVudCwgdGhpcy5nZXRTaXplUHJvcGVydHkoKSwgYCR7bmV3UHJldlNpemV9cHhgKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm5leHRFbGVtZW50LCB0aGlzLmdldFNpemVQcm9wZXJ0eSgpLCBgJHtuZXdOZXh0U2l6ZX1weGApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVtaXQgcmVzaXppbmcgZXZlbnRcclxuICAgIHRoaXMucmVzaXppbmcuZW1pdCh7IHByZXZTaXplOiBuZXdQcmV2U2l6ZSwgbmV4dFNpemU6IG5ld05leHRTaXplIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzUmVzaXppbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzXHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlKTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCk7XHJcblxyXG4gICAgLy8gUmVzdG9yZSB0ZXh0IHNlbGVjdGlvblxyXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJyc7XHJcblxyXG4gICAgLy8gRW1pdCByZXNpemVFbmQgZXZlbnRcclxuICAgIGlmICh0aGlzLnByZXZFbGVtZW50ICYmIHRoaXMubmV4dEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5yZXNpemVFbmQuZW1pdCh7IHByZXZTaXplOiB0aGlzLnByZXZTaXplLCBuZXh0U2l6ZTogdGhpcy5uZXh0U2l6ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgdmlzdWFsIGZlZWRiYWNrXHJcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ3Jlc2l6aW5nJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByZXZFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5wcmV2RWxlbWVudFNlbGVjdG9yKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50RWxlbWVudFNlbGVjdG9yID8gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLnBhcmVudEVsZW1lbnRTZWxlY3RvcikgOiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgICAgcmV0dXJuIHBhcmVudD8ucXVlcnlTZWxlY3Rvcih0aGlzLnByZXZFbGVtZW50U2VsZWN0b3IpIHx8IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5leHRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5uZXh0RWxlbWVudFNlbGVjdG9yKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50RWxlbWVudFNlbGVjdG9yID8gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLnBhcmVudEVsZW1lbnRTZWxlY3RvcikgOiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgICAgcmV0dXJuIHBhcmVudD8ucXVlcnlTZWxlY3Rvcih0aGlzLm5leHRFbGVtZW50U2VsZWN0b3IpIHx8IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZyBhcyBIVE1MRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2l6ZVByb3BlcnR5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcclxuICB9XHJcbn0iXX0=