@acorex/cdk 21.0.0-next.5 → 21.0.0-next.50

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 (53) hide show
  1. package/accordion/index.d.ts +1 -0
  2. package/common/index.d.ts +9 -7
  3. package/drag-drop/index.d.ts +57 -44
  4. package/drawer/index.d.ts +12 -9
  5. package/fesm2022/acorex-cdk-accordion.mjs +55 -70
  6. package/fesm2022/acorex-cdk-accordion.mjs.map +1 -1
  7. package/fesm2022/acorex-cdk-carousel.mjs +14 -11
  8. package/fesm2022/acorex-cdk-carousel.mjs.map +1 -1
  9. package/fesm2022/acorex-cdk-clipboard.mjs +7 -7
  10. package/fesm2022/acorex-cdk-clipboard.mjs.map +1 -1
  11. package/fesm2022/acorex-cdk-common.mjs +172 -118
  12. package/fesm2022/acorex-cdk-common.mjs.map +1 -1
  13. package/fesm2022/acorex-cdk-dom.mjs +4 -4
  14. package/fesm2022/acorex-cdk-dom.mjs.map +1 -1
  15. package/fesm2022/acorex-cdk-drag-drop.mjs +279 -86
  16. package/fesm2022/acorex-cdk-drag-drop.mjs.map +1 -1
  17. package/fesm2022/acorex-cdk-drawer.mjs +44 -33
  18. package/fesm2022/acorex-cdk-drawer.mjs.map +1 -1
  19. package/fesm2022/acorex-cdk-focus-trap.mjs +3 -3
  20. package/fesm2022/acorex-cdk-focus-trap.mjs.map +1 -1
  21. package/fesm2022/acorex-cdk-input-mask.mjs +68 -63
  22. package/fesm2022/acorex-cdk-input-mask.mjs.map +1 -1
  23. package/fesm2022/acorex-cdk-list-navigation.mjs +41 -23
  24. package/fesm2022/acorex-cdk-list-navigation.mjs.map +1 -1
  25. package/fesm2022/acorex-cdk-outline.mjs +8 -8
  26. package/fesm2022/acorex-cdk-outline.mjs.map +1 -1
  27. package/fesm2022/acorex-cdk-overlay.mjs +3 -3
  28. package/fesm2022/acorex-cdk-overlay.mjs.map +1 -1
  29. package/fesm2022/acorex-cdk-pan-view.mjs +4 -4
  30. package/fesm2022/acorex-cdk-pan-view.mjs.map +1 -1
  31. package/fesm2022/acorex-cdk-qrcode.mjs.map +1 -1
  32. package/fesm2022/acorex-cdk-resizable.mjs +167 -119
  33. package/fesm2022/acorex-cdk-resizable.mjs.map +1 -1
  34. package/fesm2022/acorex-cdk-selection.mjs +12 -12
  35. package/fesm2022/acorex-cdk-selection.mjs.map +1 -1
  36. package/fesm2022/acorex-cdk-sliding-item.mjs +3 -3
  37. package/fesm2022/acorex-cdk-sliding-item.mjs.map +1 -1
  38. package/fesm2022/acorex-cdk-sticky.mjs +3 -3
  39. package/fesm2022/acorex-cdk-sticky.mjs.map +1 -1
  40. package/fesm2022/acorex-cdk-uploader.mjs +746 -0
  41. package/fesm2022/acorex-cdk-uploader.mjs.map +1 -0
  42. package/fesm2022/acorex-cdk-virtual-scroll.mjs +11 -11
  43. package/fesm2022/acorex-cdk-virtual-scroll.mjs.map +1 -1
  44. package/fesm2022/acorex-cdk-wysiwyg.mjs +5 -1
  45. package/fesm2022/acorex-cdk-wysiwyg.mjs.map +1 -1
  46. package/fesm2022/acorex-cdk.mjs.map +1 -1
  47. package/input-mask/index.d.ts +1 -0
  48. package/list-navigation/index.d.ts +1 -0
  49. package/package.json +6 -2
  50. package/resizable/index.d.ts +19 -7
  51. package/uploader/README.md +3 -0
  52. package/uploader/index.d.ts +378 -0
  53. package/wysiwyg/index.d.ts +1 -0
@@ -3,6 +3,7 @@ import { AXHtmlUtil } from '@acorex/core/utils';
3
3
  import { isPlatformBrowser } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, ElementRef, NgZone, DOCUMENT, PLATFORM_ID, signal, model, output, Directive } from '@angular/core';
6
+ import { Subscription } from 'rxjs';
6
7
 
7
8
  class AXResizableDirective {
8
9
  constructor() {
@@ -12,12 +13,26 @@ class AXResizableDirective {
12
13
  this.document = inject(DOCUMENT);
13
14
  this.platformID = inject(PLATFORM_ID);
14
15
  this.isResizing = signal(false, ...(ngDevMode ? [{ debugName: "isResizing" }] : []));
16
+ this.initialElementWidth = 0;
17
+ this.startMoveWidth = 0;
18
+ this.subscriptions = new Subscription();
19
+ // Bound event handlers to maintain reference for cleanup
20
+ this.boundMouseDown = this.onMouseDown.bind(this);
21
+ this.boundMouseMove = this.onMouseMove.bind(this);
22
+ this.boundMouseUp = this.onMouseUp.bind(this);
23
+ this.boundMouseEnter = this.onMouseEnter.bind(this);
24
+ this.boundMouseLeave = this.onMouseLeave.bind(this);
25
+ this.boundDoubleClick = this.onDoubleClick.bind(this);
15
26
  this.resizeObserver = new ResizeObserver((entries) => {
16
- entries
17
- .filter((e) => e.target === this.el.nativeElement.parentElement)
18
- .forEach((i) => {
19
- this.maxWidth.set(i.contentRect.width);
20
- });
27
+ const parentElement = this.hostElement.parentElement;
28
+ if (!parentElement)
29
+ return;
30
+ for (const entry of entries) {
31
+ if (entry.target === parentElement && this.maxWidth() === Infinity) {
32
+ this.maxWidth.set(entry.contentRect.width);
33
+ break;
34
+ }
35
+ }
21
36
  });
22
37
  /** Define if directive is active or not */
23
38
  this.axResizable = model(true, ...(ngDevMode ? [{ debugName: "axResizable" }] : []));
@@ -38,57 +53,70 @@ class AXResizableDirective {
38
53
  /** Event emitted on double-click. */
39
54
  this.onResizingDblClick = output();
40
55
  this.isRTL = signal(AXHtmlUtil.isRtl(this.document.documentElement), ...(ngDevMode ? [{ debugName: "isRTL" }] : []));
41
- this.platformService.directionChange.subscribe((i) => {
56
+ this.isBrowser = isPlatformBrowser(this.platformID);
57
+ this.hostElement = this.el.nativeElement;
58
+ this.subscriptions.add(this.platformService.directionChange.subscribe((i) => {
42
59
  this.isRTL.set(i.data === 'rtl');
43
- });
60
+ if (this.resizeHandle) {
61
+ this.updateHandlePosition();
62
+ }
63
+ }));
44
64
  }
45
65
  ngAfterViewInit() {
46
- this.initialElementWidth = this.el.nativeElement.offsetWidth; // Store the initial width
47
- if (this.width() !== null) {
48
- this.el.nativeElement.style.width = `${this.width()}px`;
66
+ if (!this.isBrowser)
67
+ return;
68
+ this.initialElementWidth = this.hostElement.offsetWidth;
69
+ const initialWidth = this.width();
70
+ if (initialWidth !== null) {
71
+ this.hostElement.style.width = `${initialWidth}px`;
49
72
  }
50
73
  if (this.maxWidth() === Infinity) {
51
- const parentWidth = this.el.nativeElement.parentElement?.offsetWidth;
74
+ const parentWidth = this.hostElement.parentElement?.offsetWidth;
52
75
  if (parentWidth) {
53
76
  this.maxWidth.set(parentWidth);
54
77
  }
55
78
  }
56
- this.resizeObserver.observe(this.el.nativeElement.parentElement);
79
+ const parentElement = this.hostElement.parentElement;
80
+ if (parentElement) {
81
+ this.resizeObserver.observe(parentElement);
82
+ }
57
83
  this.createResizeHandle();
58
84
  this.setupResizableState();
59
85
  }
60
86
  ngOnDestroy() {
87
+ this.subscriptions.unsubscribe();
61
88
  this.resizeObserver.disconnect();
62
89
  this.cleanupEventListeners();
63
90
  }
64
- // ngDoCheck(): void {
65
- // console.log('check');
66
- // }
67
91
  setupResizableState() {
68
- this.axResizable.subscribe((isActive) => {
92
+ this.subscriptions.add(this.axResizable.subscribe((isActive) => {
69
93
  if (!isActive) {
70
- this.resetToInitialWidth(); // Reset width when disabled
71
- this.cleanupEventListeners(); // Remove event listeners
94
+ this.resetToInitialWidth();
95
+ this.cleanupEventListeners();
72
96
  }
73
97
  else {
74
- this.createResizeHandle(); // Re-enable functionality
98
+ this.createResizeHandle();
75
99
  }
76
- });
100
+ }));
77
101
  }
78
102
  createResizeHandle() {
79
- if (!this.axResizable())
80
- return; // Do nothing if directive is disabled
81
- this.el.nativeElement.style.position = 'relative';
103
+ if (!this.axResizable() || this.resizeHandle)
104
+ return;
105
+ this.hostElement.style.position = 'relative';
82
106
  this.resizeHandle = this.document.createElement('div');
83
107
  this.resizeHandle.classList.add('ax-resizable-handler');
84
- this.el.nativeElement.appendChild(this.resizeHandle);
85
- const isRTL = this.isRTL();
108
+ this.hostElement.appendChild(this.resizeHandle);
109
+ this.applyHandleStyles();
110
+ this.attachEventListeners();
111
+ }
112
+ applyHandleStyles() {
113
+ if (!this.resizeHandle)
114
+ return;
86
115
  Object.assign(this.resizeHandle.style, {
87
116
  width: STYLES.handlerWidth,
88
117
  backgroundColor: STYLES.backgroundColor,
89
118
  position: 'absolute',
90
119
  top: '0',
91
- [isRTL ? 'left' : 'right']: '0',
92
120
  bottom: '0',
93
121
  cursor: STYLES.cursor,
94
122
  zIndex: STYLES.zIndex,
@@ -96,150 +124,170 @@ class AXResizableDirective {
96
124
  borderRadius: STYLES.borderRadius,
97
125
  userSelect: 'none',
98
126
  });
127
+ this.updateHandlePosition();
128
+ }
129
+ updateHandlePosition() {
130
+ if (!this.resizeHandle)
131
+ return;
132
+ const isRTL = this.isRTL();
133
+ if (isRTL) {
134
+ this.resizeHandle.style.left = '0';
135
+ this.resizeHandle.style.right = '';
136
+ }
137
+ else {
138
+ this.resizeHandle.style.right = '0';
139
+ this.resizeHandle.style.left = '';
140
+ }
141
+ }
142
+ attachEventListeners() {
143
+ if (!this.resizeHandle)
144
+ return;
145
+ const handle = this.resizeHandle;
99
146
  this.zone.runOutsideAngular(() => {
100
- this.resizeHandle.addEventListener('mousedown', this.onMouseDown.bind(this));
101
- this.document.addEventListener('mousemove', this.onMouseMove.bind(this));
102
- this.document.addEventListener('mouseup', this.onMouseUp.bind(this));
103
- this.resizeHandle.addEventListener('mouseenter', this.onMouseEnter.bind(this));
104
- this.resizeHandle.addEventListener('mouseleave', this.onMouseLeave.bind(this));
105
- this.resizeHandle.addEventListener('dblclick', this.onDoubleClick.bind(this));
147
+ handle.addEventListener('mousedown', this.boundMouseDown);
148
+ handle.addEventListener('mouseenter', this.boundMouseEnter);
149
+ handle.addEventListener('mouseleave', this.boundMouseLeave);
150
+ handle.addEventListener('dblclick', this.boundDoubleClick);
151
+ this.document.addEventListener('mousemove', this.boundMouseMove);
152
+ this.document.addEventListener('mouseup', this.boundMouseUp);
106
153
  });
107
154
  }
108
155
  cleanupEventListeners() {
109
156
  if (this.resizeHandle) {
110
- this.resizeHandle.removeEventListener('mousedown', this.onMouseDown.bind(this));
111
- this.resizeHandle.removeEventListener('mouseenter', this.onMouseEnter.bind(this));
112
- this.resizeHandle.removeEventListener('mouseleave', this.onMouseLeave.bind(this));
113
- this.resizeHandle.removeEventListener('dblclick', this.onDoubleClick.bind(this));
114
- if (this.resizeHandle.parentElement) {
115
- this.resizeHandle.parentElement.removeChild(this.resizeHandle);
116
- }
157
+ this.resizeHandle.removeEventListener('mousedown', this.boundMouseDown);
158
+ this.resizeHandle.removeEventListener('mouseenter', this.boundMouseEnter);
159
+ this.resizeHandle.removeEventListener('mouseleave', this.boundMouseLeave);
160
+ this.resizeHandle.removeEventListener('dblclick', this.boundDoubleClick);
161
+ this.resizeHandle.remove();
162
+ this.resizeHandle = undefined;
117
163
  }
118
- this.document.removeEventListener('mousemove', this.onMouseMove.bind(this));
119
- this.document.removeEventListener('mouseup', this.onMouseUp.bind(this));
164
+ this.document.removeEventListener('mousemove', this.boundMouseMove);
165
+ this.document.removeEventListener('mouseup', this.boundMouseUp);
120
166
  this.document.body.style.cursor = '';
121
167
  }
122
168
  onMouseDown(event) {
123
- if (isPlatformBrowser(this.platformID)) {
124
- const handleRect = this.resizeHandle.getBoundingClientRect();
125
- if (event.clientX >= handleRect.left && event.clientX <= handleRect.right) {
126
- this.isResizing.set(true);
127
- this.document.body.style.cursor = STYLES.cursorActive;
128
- this.resizeHandle.style.backgroundColor = STYLES.backgroundColorActive;
129
- event.preventDefault();
130
- this.startMoveWidth = this.el.nativeElement.offsetWidth;
131
- this.onResizingStarted.emit({
132
- component: this,
133
- htmlElement: this.el.nativeElement,
134
- isUserInteraction: true,
135
- name: 'resizingStarted',
136
- value: this.el.nativeElement.offsetWidth,
137
- oldValue: this.el.nativeElement.offsetWidth,
138
- });
139
- }
140
- }
169
+ if (!this.resizeHandle)
170
+ return;
171
+ const handleRect = this.resizeHandle.getBoundingClientRect();
172
+ if (event.clientX < handleRect.left || event.clientX > handleRect.right)
173
+ return;
174
+ event.preventDefault();
175
+ this.isResizing.set(true);
176
+ this.document.body.style.cursor = STYLES.cursorActive;
177
+ this.resizeHandle.style.backgroundColor = STYLES.backgroundColorActive;
178
+ this.startMoveWidth = this.hostElement.offsetWidth;
179
+ this.zone.run(() => {
180
+ this.onResizingStarted.emit({
181
+ component: this,
182
+ htmlElement: this.hostElement,
183
+ isUserInteraction: true,
184
+ name: 'resizingStarted',
185
+ value: this.startMoveWidth,
186
+ oldValue: this.startMoveWidth,
187
+ });
188
+ });
141
189
  }
142
190
  onMouseMove(event) {
143
- if (this.isResizing() && isPlatformBrowser(this.platformID)) {
144
- const rect = this.el.nativeElement.getBoundingClientRect();
145
- const isRTL = this.isRTL();
146
- let newWidth;
147
- if (isRTL) {
148
- newWidth = rect.right - event.clientX;
149
- }
150
- else {
151
- newWidth = event.clientX - rect.left;
152
- }
153
- // Clamp the width to minWidth and maxWidth
154
- newWidth = Math.max(this.minWidth(), Math.min(newWidth, this.maxWidth()));
155
- // Update the width only if it has changed
156
- if (newWidth !== this.el.nativeElement.offsetWidth) {
157
- this.el.nativeElement.style.width = `${newWidth}px`;
158
- }
191
+ if (!this.isResizing())
192
+ return;
193
+ const rect = this.hostElement.getBoundingClientRect();
194
+ const isRTL = this.isRTL();
195
+ let newWidth = isRTL ? rect.right - event.clientX : event.clientX - rect.left;
196
+ newWidth = Math.max(this.minWidth(), Math.min(newWidth, this.maxWidth()));
197
+ if (newWidth !== this.hostElement.offsetWidth) {
198
+ this.hostElement.style.width = `${newWidth}px`;
159
199
  }
160
200
  }
161
201
  onMouseUp() {
162
- if (this.isResizing() && isPlatformBrowser(this.platformID)) {
163
- this.isResizing.set(false);
164
- this.document.body.style.cursor = '';
165
- this.resizeHandle.style.backgroundColor = STYLES.backgroundColor;
202
+ if (!this.isResizing() || !this.resizeHandle)
203
+ return;
204
+ this.isResizing.set(false);
205
+ this.document.body.style.cursor = '';
206
+ this.resizeHandle.style.backgroundColor = STYLES.backgroundColor;
207
+ const currentWidth = this.hostElement.offsetWidth;
208
+ this.zone.run(() => {
166
209
  this.onResizingEnded.emit({
167
210
  component: this,
168
- htmlElement: this.el.nativeElement,
211
+ htmlElement: this.hostElement,
169
212
  isUserInteraction: true,
170
213
  name: 'resizingEnded',
171
- value: this.el.nativeElement.offsetWidth,
214
+ value: currentWidth,
172
215
  oldValue: this.startMoveWidth,
173
216
  });
174
- }
217
+ });
175
218
  }
176
219
  onMouseEnter() {
177
- if (!this.isResizing()) {
220
+ if (!this.isResizing() && this.resizeHandle) {
178
221
  this.resizeHandle.style.backgroundColor = STYLES.backgroundColorHover;
179
222
  }
180
223
  }
181
224
  onMouseLeave() {
182
- if (!this.isResizing()) {
225
+ if (!this.isResizing() && this.resizeHandle) {
183
226
  this.resizeHandle.style.backgroundColor = STYLES.backgroundColor;
184
227
  }
185
228
  }
186
229
  onDoubleClick() {
187
- const elementWidth = this.el.nativeElement.offsetWidth;
188
- // const maxWidth = this.maxWidth();
189
- // const initialWidth = this.initialWidth() !== null ? this.initialWidth() : this.initialElementWidth;
230
+ const elementWidth = this.hostElement.offsetWidth;
231
+ const action = this.dblClickAction();
190
232
  let newWidth;
191
- if (this.dblClickAction() === 'reset') {
192
- newWidth = this.resetToInitialWidth();
193
- }
194
- else if (this.dblClickAction() === 'maximize') {
195
- newWidth = this.maximizeToMaxWidth();
233
+ switch (action) {
234
+ case 'reset':
235
+ newWidth = this.resetToInitialWidth();
236
+ break;
237
+ case 'maximize':
238
+ newWidth = this.maximizeToMaxWidth();
239
+ break;
240
+ case 'fit':
241
+ newWidth = this.fitToContent();
242
+ break;
243
+ default:
244
+ newWidth = elementWidth;
196
245
  }
197
- else {
198
- newWidth = this.fitToContent();
199
- }
200
- this.onResizingDblClick.emit({
201
- component: this,
202
- htmlElement: this.el.nativeElement,
203
- isUserInteraction: true,
204
- name: 'onResizingDblClick',
205
- oldValue: elementWidth,
206
- value: newWidth,
246
+ this.zone.run(() => {
247
+ this.onResizingDblClick.emit({
248
+ component: this,
249
+ htmlElement: this.hostElement,
250
+ isUserInteraction: true,
251
+ name: 'onResizingDblClick',
252
+ oldValue: elementWidth,
253
+ value: newWidth,
254
+ });
207
255
  });
208
256
  }
209
257
  resetToInitialWidth() {
210
- if (this.defaultWidth() !== null) {
211
- this.el.nativeElement.style.width = `${this.defaultWidth()}px`;
212
- return this.defaultWidth();
258
+ const defaultWidth = this.defaultWidth();
259
+ if (defaultWidth !== null) {
260
+ this.hostElement.style.width = `${defaultWidth}px`;
261
+ return defaultWidth;
213
262
  }
214
- else if (this.width() !== null) {
215
- this.el.nativeElement.style.width = `${this.width()}px`;
216
- return this.width();
217
- }
218
- else {
219
- this.el.nativeElement.style.width = `${this.initialElementWidth}px`;
220
- return this.initialElementWidth;
263
+ const initialWidth = this.width();
264
+ if (initialWidth !== null) {
265
+ this.hostElement.style.width = `${initialWidth}px`;
266
+ return initialWidth;
221
267
  }
268
+ this.hostElement.style.width = `${this.initialElementWidth}px`;
269
+ return this.initialElementWidth;
222
270
  }
223
271
  maximizeToMaxWidth() {
224
272
  const maxWidth = this.maxWidth();
225
273
  if (maxWidth !== Infinity) {
226
- this.el.nativeElement.style.width = `${maxWidth}px`;
274
+ this.hostElement.style.width = `${maxWidth}px`;
227
275
  }
228
276
  return maxWidth;
229
277
  }
230
278
  fitToContent() {
231
- this.el.nativeElement.style.width = 'fit-content';
232
- return this.el.nativeElement.clientWidth;
279
+ this.hostElement.style.width = 'fit-content';
280
+ return this.hostElement.clientWidth;
233
281
  }
234
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXResizableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
235
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.3", type: AXResizableDirective, isStandalone: true, selector: "[axResizable]", inputs: { axResizable: { classPropertyName: "axResizable", publicName: "axResizable", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, dblClickAction: { classPropertyName: "dblClickAction", publicName: "dblClickAction", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, defaultWidth: { classPropertyName: "defaultWidth", publicName: "defaultWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { axResizable: "axResizableChange", minWidth: "minWidthChange", maxWidth: "maxWidthChange", dblClickAction: "dblClickActionChange", width: "widthChange", defaultWidth: "defaultWidthChange", onResizingStarted: "onResizingStarted", onResizingEnded: "onResizingEnded", onResizingDblClick: "onResizingDblClick" }, ngImport: i0 }); }
282
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXResizableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
283
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: AXResizableDirective, isStandalone: true, selector: "[axResizable]", inputs: { axResizable: { classPropertyName: "axResizable", publicName: "axResizable", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, dblClickAction: { classPropertyName: "dblClickAction", publicName: "dblClickAction", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, defaultWidth: { classPropertyName: "defaultWidth", publicName: "defaultWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { axResizable: "axResizableChange", minWidth: "minWidthChange", maxWidth: "maxWidthChange", dblClickAction: "dblClickActionChange", width: "widthChange", defaultWidth: "defaultWidthChange", onResizingStarted: "onResizingStarted", onResizingEnded: "onResizingEnded", onResizingDblClick: "onResizingDblClick" }, ngImport: i0 }); }
236
284
  }
237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXResizableDirective, decorators: [{
285
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXResizableDirective, decorators: [{
238
286
  type: Directive,
239
287
  args: [{
240
288
  selector: '[axResizable]',
241
289
  }]
242
- }], ctorParameters: () => [] });
290
+ }], ctorParameters: () => [], propDecorators: { axResizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "axResizable", required: false }] }, { type: i0.Output, args: ["axResizableChange"] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }, { type: i0.Output, args: ["minWidthChange"] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }, { type: i0.Output, args: ["maxWidthChange"] }], dblClickAction: [{ type: i0.Input, args: [{ isSignal: true, alias: "dblClickAction", required: false }] }, { type: i0.Output, args: ["dblClickActionChange"] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }, { type: i0.Output, args: ["widthChange"] }], defaultWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultWidth", required: false }] }, { type: i0.Output, args: ["defaultWidthChange"] }], onResizingStarted: [{ type: i0.Output, args: ["onResizingStarted"] }], onResizingEnded: [{ type: i0.Output, args: ["onResizingEnded"] }], onResizingDblClick: [{ type: i0.Output, args: ["onResizingDblClick"] }] } });
243
291
  const STYLES = {
244
292
  handlerWidth: 'var(--ax-comp-resizable-handler-width, 4px)',
245
293
  backgroundColor: 'rgba(var(--ax-comp-resizable-background-color))',
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-resizable.mjs","sources":["../tmp-esm2022/resizable/lib/resize.directive.js","../tmp-esm2022/resizable/acorex-cdk-resizable.js"],"sourcesContent":["import { AXPlatform } from '@acorex/core/platform';\nimport { AXHtmlUtil } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Directive, DOCUMENT, ElementRef, inject, model, NgZone, output, PLATFORM_ID, signal, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXResizableDirective {\n constructor() {\n this.el = inject(ElementRef);\n this.platformService = inject(AXPlatform);\n this.zone = inject(NgZone);\n this.document = inject(DOCUMENT);\n this.platformID = inject(PLATFORM_ID);\n this.isResizing = signal(false, ...(ngDevMode ? [{ debugName: \"isResizing\" }] : []));\n this.resizeObserver = new ResizeObserver((entries) => {\n entries\n .filter((e) => e.target === this.el.nativeElement.parentElement)\n .forEach((i) => {\n this.maxWidth.set(i.contentRect.width);\n });\n });\n /** Define if directive is active or not */\n this.axResizable = model(true, ...(ngDevMode ? [{ debugName: \"axResizable\" }] : []));\n /** Minimum width for the resizable element. */\n this.minWidth = model(100, ...(ngDevMode ? [{ debugName: \"minWidth\" }] : []));\n /** Maximum width for the resizable element. Defaults to parent width if not provided. */\n this.maxWidth = model(Infinity, ...(ngDevMode ? [{ debugName: \"maxWidth\" }] : []));\n /** Behavior on double-click: 'reset' or 'maximize'. */\n this.dblClickAction = model('reset', ...(ngDevMode ? [{ debugName: \"dblClickAction\" }] : []));\n /** Define initial width for the element. */\n this.width = model(null, ...(ngDevMode ? [{ debugName: \"width\" }] : []));\n /** Define reset width for the element. */\n this.defaultWidth = model(null, ...(ngDevMode ? [{ debugName: \"defaultWidth\" }] : []));\n /** Event emitted when resizing starts. */\n this.onResizingStarted = output();\n /** Event emitted when resizing ends. */\n this.onResizingEnded = output();\n /** Event emitted on double-click. */\n this.onResizingDblClick = output();\n this.isRTL = signal(AXHtmlUtil.isRtl(this.document.documentElement), ...(ngDevMode ? [{ debugName: \"isRTL\" }] : []));\n this.platformService.directionChange.subscribe((i) => {\n this.isRTL.set(i.data === 'rtl');\n });\n }\n ngAfterViewInit() {\n this.initialElementWidth = this.el.nativeElement.offsetWidth; // Store the initial width\n if (this.width() !== null) {\n this.el.nativeElement.style.width = `${this.width()}px`;\n }\n if (this.maxWidth() === Infinity) {\n const parentWidth = this.el.nativeElement.parentElement?.offsetWidth;\n if (parentWidth) {\n this.maxWidth.set(parentWidth);\n }\n }\n this.resizeObserver.observe(this.el.nativeElement.parentElement);\n this.createResizeHandle();\n this.setupResizableState();\n }\n ngOnDestroy() {\n this.resizeObserver.disconnect();\n this.cleanupEventListeners();\n }\n // ngDoCheck(): void {\n // console.log('check');\n // }\n setupResizableState() {\n this.axResizable.subscribe((isActive) => {\n if (!isActive) {\n this.resetToInitialWidth(); // Reset width when disabled\n this.cleanupEventListeners(); // Remove event listeners\n }\n else {\n this.createResizeHandle(); // Re-enable functionality\n }\n });\n }\n createResizeHandle() {\n if (!this.axResizable())\n return; // Do nothing if directive is disabled\n this.el.nativeElement.style.position = 'relative';\n this.resizeHandle = this.document.createElement('div');\n this.resizeHandle.classList.add('ax-resizable-handler');\n this.el.nativeElement.appendChild(this.resizeHandle);\n const isRTL = this.isRTL();\n Object.assign(this.resizeHandle.style, {\n width: STYLES.handlerWidth,\n backgroundColor: STYLES.backgroundColor,\n position: 'absolute',\n top: '0',\n [isRTL ? 'left' : 'right']: '0',\n bottom: '0',\n cursor: STYLES.cursor,\n zIndex: STYLES.zIndex,\n transition: STYLES.transition,\n borderRadius: STYLES.borderRadius,\n userSelect: 'none',\n });\n this.zone.runOutsideAngular(() => {\n this.resizeHandle.addEventListener('mousedown', this.onMouseDown.bind(this));\n this.document.addEventListener('mousemove', this.onMouseMove.bind(this));\n this.document.addEventListener('mouseup', this.onMouseUp.bind(this));\n this.resizeHandle.addEventListener('mouseenter', this.onMouseEnter.bind(this));\n this.resizeHandle.addEventListener('mouseleave', this.onMouseLeave.bind(this));\n this.resizeHandle.addEventListener('dblclick', this.onDoubleClick.bind(this));\n });\n }\n cleanupEventListeners() {\n if (this.resizeHandle) {\n this.resizeHandle.removeEventListener('mousedown', this.onMouseDown.bind(this));\n this.resizeHandle.removeEventListener('mouseenter', this.onMouseEnter.bind(this));\n this.resizeHandle.removeEventListener('mouseleave', this.onMouseLeave.bind(this));\n this.resizeHandle.removeEventListener('dblclick', this.onDoubleClick.bind(this));\n if (this.resizeHandle.parentElement) {\n this.resizeHandle.parentElement.removeChild(this.resizeHandle);\n }\n }\n this.document.removeEventListener('mousemove', this.onMouseMove.bind(this));\n this.document.removeEventListener('mouseup', this.onMouseUp.bind(this));\n this.document.body.style.cursor = '';\n }\n onMouseDown(event) {\n if (isPlatformBrowser(this.platformID)) {\n const handleRect = this.resizeHandle.getBoundingClientRect();\n if (event.clientX >= handleRect.left && event.clientX <= handleRect.right) {\n this.isResizing.set(true);\n this.document.body.style.cursor = STYLES.cursorActive;\n this.resizeHandle.style.backgroundColor = STYLES.backgroundColorActive;\n event.preventDefault();\n this.startMoveWidth = this.el.nativeElement.offsetWidth;\n this.onResizingStarted.emit({\n component: this,\n htmlElement: this.el.nativeElement,\n isUserInteraction: true,\n name: 'resizingStarted',\n value: this.el.nativeElement.offsetWidth,\n oldValue: this.el.nativeElement.offsetWidth,\n });\n }\n }\n }\n onMouseMove(event) {\n if (this.isResizing() && isPlatformBrowser(this.platformID)) {\n const rect = this.el.nativeElement.getBoundingClientRect();\n const isRTL = this.isRTL();\n let newWidth;\n if (isRTL) {\n newWidth = rect.right - event.clientX;\n }\n else {\n newWidth = event.clientX - rect.left;\n }\n // Clamp the width to minWidth and maxWidth\n newWidth = Math.max(this.minWidth(), Math.min(newWidth, this.maxWidth()));\n // Update the width only if it has changed\n if (newWidth !== this.el.nativeElement.offsetWidth) {\n this.el.nativeElement.style.width = `${newWidth}px`;\n }\n }\n }\n onMouseUp() {\n if (this.isResizing() && isPlatformBrowser(this.platformID)) {\n this.isResizing.set(false);\n this.document.body.style.cursor = '';\n this.resizeHandle.style.backgroundColor = STYLES.backgroundColor;\n this.onResizingEnded.emit({\n component: this,\n htmlElement: this.el.nativeElement,\n isUserInteraction: true,\n name: 'resizingEnded',\n value: this.el.nativeElement.offsetWidth,\n oldValue: this.startMoveWidth,\n });\n }\n }\n onMouseEnter() {\n if (!this.isResizing()) {\n this.resizeHandle.style.backgroundColor = STYLES.backgroundColorHover;\n }\n }\n onMouseLeave() {\n if (!this.isResizing()) {\n this.resizeHandle.style.backgroundColor = STYLES.backgroundColor;\n }\n }\n onDoubleClick() {\n const elementWidth = this.el.nativeElement.offsetWidth;\n // const maxWidth = this.maxWidth();\n // const initialWidth = this.initialWidth() !== null ? this.initialWidth() : this.initialElementWidth;\n let newWidth;\n if (this.dblClickAction() === 'reset') {\n newWidth = this.resetToInitialWidth();\n }\n else if (this.dblClickAction() === 'maximize') {\n newWidth = this.maximizeToMaxWidth();\n }\n else {\n newWidth = this.fitToContent();\n }\n this.onResizingDblClick.emit({\n component: this,\n htmlElement: this.el.nativeElement,\n isUserInteraction: true,\n name: 'onResizingDblClick',\n oldValue: elementWidth,\n value: newWidth,\n });\n }\n resetToInitialWidth() {\n if (this.defaultWidth() !== null) {\n this.el.nativeElement.style.width = `${this.defaultWidth()}px`;\n return this.defaultWidth();\n }\n else if (this.width() !== null) {\n this.el.nativeElement.style.width = `${this.width()}px`;\n return this.width();\n }\n else {\n this.el.nativeElement.style.width = `${this.initialElementWidth}px`;\n return this.initialElementWidth;\n }\n }\n maximizeToMaxWidth() {\n const maxWidth = this.maxWidth();\n if (maxWidth !== Infinity) {\n this.el.nativeElement.style.width = `${maxWidth}px`;\n }\n return maxWidth;\n }\n fitToContent() {\n this.el.nativeElement.style.width = 'fit-content';\n return this.el.nativeElement.clientWidth;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXResizableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.3\", type: AXResizableDirective, isStandalone: true, selector: \"[axResizable]\", inputs: { axResizable: { classPropertyName: \"axResizable\", publicName: \"axResizable\", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: \"minWidth\", publicName: \"minWidth\", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: \"maxWidth\", publicName: \"maxWidth\", isSignal: true, isRequired: false, transformFunction: null }, dblClickAction: { classPropertyName: \"dblClickAction\", publicName: \"dblClickAction\", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: \"width\", publicName: \"width\", isSignal: true, isRequired: false, transformFunction: null }, defaultWidth: { classPropertyName: \"defaultWidth\", publicName: \"defaultWidth\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { axResizable: \"axResizableChange\", minWidth: \"minWidthChange\", maxWidth: \"maxWidthChange\", dblClickAction: \"dblClickActionChange\", width: \"widthChange\", defaultWidth: \"defaultWidthChange\", onResizingStarted: \"onResizingStarted\", onResizingEnded: \"onResizingEnded\", onResizingDblClick: \"onResizingDblClick\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXResizableDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axResizable]',\n }]\n }], ctorParameters: () => [] });\nconst STYLES = {\n handlerWidth: 'var(--ax-comp-resizable-handler-width, 4px)',\n backgroundColor: 'rgba(var(--ax-comp-resizable-background-color))',\n backgroundColorActive: 'rgba(var(--ax-comp-resizable-background-color-active, var(--ax-sys-color-primary-surface)))',\n backgroundColorHover: 'rgba(var(--ax-comp-resizable-background-color-hover, var(--ax-sys-color-primary-light-surface)))',\n cursor: 'var(--ax-comp-resizable-cursor, ew-resize)',\n cursorActive: 'var(--ax-comp-resizable-cursor-active, ew-resize)',\n zIndex: 'var(--ax-comp-resizable-z-index, 999)',\n transition: 'var(--ax-comp-resizable-transition, background-color --ax-sys-transition-duration --ax-sys-transition-timing-function)',\n borderRadius: 'var(--ax-comp-resizable-border-radius, --ax-sys-border-radius)',\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9yZXNpemFibGUvc3JjL2xpYi9yZXNpemUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixXQUFXLEVBQ1gsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8sb0JBQW9CO0lBNkMvQjtRQTVDUSxPQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixlQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWpDLGVBQVUsR0FBNEIsTUFBTSxDQUFDLEtBQUssc0RBQUMsQ0FBQztRQUdwRCxtQkFBYyxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdEQsT0FBTztpQkFDSixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUE2QixDQUFDLGFBQWEsQ0FBQztpQkFDaEYsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JB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clFVLG9CQUFvQjtrR0FBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUhoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO2lCQUMxQjs7QUFrUkQsTUFBTSxNQUFNLEdBQUc7SUFDYixZQUFZLEVBQUUsNkNBQTZDO0lBQzNELGVBQWUsRUFBRSxpREFBaUQ7SUFDbEUscUJBQXFCLEVBQUUsNkZBQTZGO0lBQ3BILG9CQUFvQixFQUNsQixrR0FBa0c7SUFDcEcsTUFBTSxFQUFFLDRDQUE0QztJQUNwRCxZQUFZLEVBQUUsbURBQW1EO0lBQ2pFLE1BQU0sRUFBRSx1Q0FBdUM7SUFDL0MsVUFBVSxFQUNSLHdIQUF3SDtJQUMxSCxZQUFZLEVBQUUsZ0VBQWdFO0NBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7IEFYSHRtbFV0aWwgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBET0NVTUVOVCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBtb2RlbCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIG91dHB1dCxcbiAgUExBVEZPUk1fSUQsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhSZXNpemFibGVdJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhSZXNpemFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHBsYXRmb3JtU2VydmljZSA9IGluamVjdChBWFBsYXRmb3JtKTtcbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHBsYXRmb3JtSUQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlc2l6ZUhhbmRsZTogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgaXNSZXNpemluZzogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIGluaXRpYWxFbGVtZW50V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBzdGFydE1vdmVXaWR0aDogbnVtYmVyO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgZW50cmllc1xuICAgICAgLmZpbHRlcigoZSkgPT4gZS50YXJnZXQgPT09ICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnQpXG4gICAgICAuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICB0aGlzLm1heFdpZHRoLnNldChpLmNvbnRlbnRSZWN0LndpZHRoKTtcbiAgICAgIH0pO1xuICB9KTtcblxuICAvKiogRGVmaW5lIGlmIGRpcmVjdGl2ZSBpcyBhY3RpdmUgb3Igbm90ICovXG4gIGF4UmVzaXphYmxlID0gbW9kZWwodHJ1ZSk7XG5cbiAgLyoqIE1pbmltdW0gd2lkdGggZm9yIHRoZSByZXNpemFibGUgZWxlbWVudC4gKi9cbiAgbWluV2lkdGggPSBtb2RlbCgxMDApO1xuXG4gIC8qKiBNYXhpbXVtIHdpZHRoIGZvciB0aGUgcmVzaXphYmxlIGVsZW1lbnQuIERlZmF1bHRzIHRvIHBhcmVudCB3aWR0aCBpZiBub3QgcHJvdmlkZWQuICovXG4gIG1heFdpZHRoID0gbW9kZWwoSW5maW5pdHkpO1xuXG4gIC8qKiBCZWhhdmlvciBvbiBkb3VibGUtY2xpY2s6ICdyZXNldCcgb3IgJ21heGltaXplJy4gKi9cbiAgZGJsQ2xpY2tBY3Rpb24gPSBtb2RlbDwncmVzZXQnIHwgJ21heGltaXplJyB8ICdmaXQnPigncmVzZXQnKTtcblxuICAvKiogRGVmaW5lIGluaXRpYWwgd2lkdGggZm9yIHRoZSBlbGVtZW50LiAqL1xuICB3aWR0aCA9IG1vZGVsPG51bGwgfCBudW1iZXI+KG51bGwpO1xuXG4gIC8qKiBEZWZpbmUgcmVzZXQgd2lkdGggZm9yIHRoZSBlbGVtZW50LiAqL1xuICBkZWZhdWx0V2lkdGggPSBtb2RlbDxudWxsIHwgbnVtYmVyPihudWxsKTtcblxuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHJlc2l6aW5nIHN0YXJ0cy4gKi9cbiAgb25SZXNpemluZ1N0YXJ0ZWQgPSBvdXRwdXQ8QVhWYWx1ZUNoYW5nZWRFdmVudDxudW1iZXI+PigpO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gcmVzaXppbmcgZW5kcy4gKi9cbiAgb25SZXNpemluZ0VuZGVkID0gb3V0cHV0PEFYVmFsdWVDaGFuZ2VkRXZlbnQ8bnVtYmVyPj4oKTtcblxuICAvKiogRXZlbnQgZW1pdHRlZCBvbiBkb3VibGUtY2xpY2suICovXG4gIG9uUmVzaXppbmdEYmxDbGljayA9IG91dHB1dDxBWFZhbHVlQ2hhbmdlZEV2ZW50PG51bWJlcj4+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wbGF0Zm9ybVNlcnZpY2UuZGlyZWN0aW9uQ2hhbmdlLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgICAgdGhpcy5pc1JUTC5zZXQoaS5kYXRhID09PSAncnRsJyk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsRWxlbWVudFdpZHRoID0gKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGg7IC8vIFN0b3JlIHRoZSBpbml0aWFsIHdpZHRoXG5cbiAgICBpZiAodGhpcy53aWR0aCgpICE9PSBudWxsKSB7XG4gICAgICAodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS53aWR0aCA9IGAke3RoaXMud2lkdGgoKX1weGA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWF4V2lkdGgoKSA9PT0gSW5maW5pdHkpIHtcbiAgICAgIGNvbnN0IHBhcmVudFdpZHRoID0gKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudD8ub2Zmc2V0V2lkdGg7XG4gICAgICBpZiAocGFyZW50V2lkdGgpIHtcbiAgICAgICAgdGhpcy5tYXhXaWR0aC5zZXQocGFyZW50V2lkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudCk7XG4gICAgdGhpcy5jcmVhdGVSZXNpemVIYW5kbGUoKTtcbiAgICB0aGlzLnNldHVwUmVzaXphYmxlU3RhdGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuY2xlYW51cEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gIC8vICAgY29uc29sZS5sb2coJ2NoZWNrJyk7XG4gIC8vIH1cblxuICBwcml2YXRlIHNldHVwUmVzaXphYmxlU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5heFJlc2l6YWJsZS5zdWJzY3JpYmUoKGlzQWN0aXZlKSA9PiB7XG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMucmVzZXRUb0luaXRpYWxXaWR0aCgpOyAvLyBSZXNldCB3aWR0aCB3aGVuIGRpc2FibGVkXG4gICAgICAgIHRoaXMuY2xlYW51cEV2ZW50TGlzdGVuZXJzKCk7IC8vIFJlbW92ZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlUmVzaXplSGFuZGxlKCk7IC8vIFJlLWVuYWJsZSBmdW5jdGlvbmFsaXR5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc2l6ZUhhbmRsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXhSZXNpemFibGUoKSkgcmV0dXJuOyAvLyBEbyBub3RoaW5nIGlmIGRpcmVjdGl2ZSBpcyBkaXNhYmxlZFxuXG4gICAgKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuXG4gICAgdGhpcy5yZXNpemVIYW5kbGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucmVzaXplSGFuZGxlLmNsYXNzTGlzdC5hZGQoJ2F4LXJlc2l6YWJsZS1oYW5kbGVyJyk7XG4gICAgKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5yZXNpemVIYW5kbGUpO1xuXG4gICAgY29uc3QgaXNSVEwgPSB0aGlzLmlzUlRMKCk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLnJlc2l6ZUhhbmRsZS5zdHlsZSwge1xuICAgICAgd2lkdGg6IFNUWUxFUy5oYW5kbGVyV2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFNUWUxFUy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgW2lzUlRMID8gJ2xlZnQnIDogJ3JpZ2h0J106ICcwJyxcbiAgICAgIGJvdHRvbTogJzAnLFxuICAgICAgY3Vyc29yOiBTVFlMRVMuY3Vyc29yLFxuICAgICAgekluZGV4OiBTVFlMRVMuekluZGV4LFxuICAgICAgdHJhbnNpdGlvbjogU1RZTEVTLnRyYW5zaXRpb24sXG4gICAgICBib3JkZXJSYWRpdXM6IFNUWUxFUy5ib3JkZXJSYWRpdXMsXG4gICAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgfSk7XG5cbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNpemVIYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5yZXNpemVIYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMub25Nb3VzZUVudGVyLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5yZXNpemVIYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMub25Nb3VzZUxlYXZlLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5yZXNpemVIYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCB0aGlzLm9uRG91YmxlQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNpemVIYW5kbGUpIHtcbiAgICAgIHRoaXMucmVzaXplSGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5vbk1vdXNlRW50ZXIuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5vbk1vdXNlTGVhdmUuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIHRoaXMub25Eb3VibGVDbGljay5iaW5kKHRoaXMpKTtcblxuICAgICAgaWYgKHRoaXMucmVzaXplSGFuZGxlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5yZXNpemVIYW5kbGUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLnJlc2l6ZUhhbmRsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcykpO1xuICAgIHRoaXMuZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgaXNSVEwgPSBzaWduYWwoQVhIdG1sVXRpbC5pc1J0bCh0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpO1xuXG4gIHByaXZhdGUgb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlEKSkge1xuICAgICAgY29uc3QgaGFuZGxlUmVjdCA9IHRoaXMucmVzaXplSGFuZGxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKGV2ZW50LmNsaWVudFggPj0gaGFuZGxlUmVjdC5sZWZ0ICYmIGV2ZW50LmNsaWVudFggPD0gaGFuZGxlUmVjdC5yaWdodCkge1xuICAgICAgICB0aGlzLmlzUmVzaXppbmcuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gU1RZTEVTLmN1cnNvckFjdGl2ZTtcbiAgICAgICAgdGhpcy5yZXNpemVIYW5kbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gU1RZTEVTLmJhY2tncm91bmRDb2xvckFjdGl2ZTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGFydE1vdmVXaWR0aCA9ICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoO1xuICAgICAgICB0aGlzLm9uUmVzaXppbmdTdGFydGVkLmVtaXQoe1xuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBodG1sRWxlbWVudDogdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgICAgICAgIG5hbWU6ICdyZXNpemluZ1N0YXJ0ZWQnLFxuICAgICAgICAgIHZhbHVlOiAodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aCxcbiAgICAgICAgICBvbGRWYWx1ZTogKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Jlc2l6aW5nKCkgJiYgaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlEKSkge1xuICAgICAgY29uc3QgcmVjdCA9ICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaXNSVEwgPSB0aGlzLmlzUlRMKCk7XG4gICAgICBsZXQgbmV3V2lkdGg6IG51bWJlcjtcblxuICAgICAgaWYgKGlzUlRMKSB7XG4gICAgICAgIG5ld1dpZHRoID0gcmVjdC5yaWdodCAtIGV2ZW50LmNsaWVudFg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdXaWR0aCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENsYW1wIHRoZSB3aWR0aCB0byBtaW5XaWR0aCBhbmQgbWF4V2lkdGhcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5tYXgodGhpcy5taW5XaWR0aCgpLCBNYXRoLm1pbihuZXdXaWR0aCwgdGhpcy5tYXhXaWR0aCgpKSk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgd2lkdGggb25seSBpZiBpdCBoYXMgY2hhbmdlZFxuICAgICAgaWYgKG5ld1dpZHRoICE9PSAodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aCkge1xuICAgICAgICAodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uTW91c2VVcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Jlc2l6aW5nKCkgJiYgaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlEKSkge1xuICAgICAgdGhpcy5pc1Jlc2l6aW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJyc7XG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBTVFlMRVMuYmFja2dyb3VuZENvbG9yO1xuXG4gICAgICB0aGlzLm9uUmVzaXppbmdFbmRlZC5lbWl0KHtcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICBodG1sRWxlbWVudDogdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICBpc1VzZXJJbnRlcmFjdGlvbjogdHJ1ZSxcbiAgICAgICAgbmFtZTogJ3Jlc2l6aW5nRW5kZWQnLFxuICAgICAgICB2YWx1ZTogKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGgsXG4gICAgICAgIG9sZFZhbHVlOiB0aGlzLnN0YXJ0TW92ZVdpZHRoLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbk1vdXNlRW50ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzaXppbmcoKSkge1xuICAgICAgdGhpcy5yZXNpemVIYW5kbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gU1RZTEVTLmJhY2tncm91bmRDb2xvckhvdmVyO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25Nb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nKCkpIHtcbiAgICAgIHRoaXMucmVzaXplSGFuZGxlLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFNUWUxFUy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkRvdWJsZUNsaWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9ICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoO1xuICAgIC8vIGNvbnN0IG1heFdpZHRoID0gdGhpcy5tYXhXaWR0aCgpO1xuICAgIC8vIGNvbnN0IGluaXRpYWxXaWR0aCA9IHRoaXMuaW5pdGlhbFdpZHRoKCkgIT09IG51bGwgPyB0aGlzLmluaXRpYWxXaWR0aCgpIDogdGhpcy5pbml0aWFsRWxlbWVudFdpZHRoO1xuICAgIGxldCBuZXdXaWR0aDogbnVtYmVyO1xuICAgIGlmICh0aGlzLmRibENsaWNrQWN0aW9uKCkgPT09ICdyZXNldCcpIHtcbiAgICAgIG5ld1dpZHRoID0gdGhpcy5yZXNldFRvSW5pdGlhbFdpZHRoKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRibENsaWNrQWN0aW9uKCkgPT09ICdtYXhpbWl6ZScpIHtcbiAgICAgIG5ld1dpZHRoID0gdGhpcy5tYXhpbWl6ZVRvTWF4V2lkdGgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3V2lkdGggPSB0aGlzLmZpdFRvQ29udGVudCgpO1xuICAgIH1cblxuICAgIHRoaXMub25SZXNpemluZ0RibENsaWNrLmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgICAgbmFtZTogJ29uUmVzaXppbmdEYmxDbGljaycsXG4gICAgICBvbGRWYWx1ZTogZWxlbWVudFdpZHRoLFxuICAgICAgdmFsdWU6IG5ld1dpZHRoLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFRvSW5pdGlhbFdpZHRoKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFdpZHRoKCkgIT09IG51bGwpIHtcbiAgICAgICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLndpZHRoID0gYCR7dGhpcy5kZWZhdWx0V2lkdGgoKX1weGA7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0V2lkdGgoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMud2lkdGgoKSAhPT0gbnVsbCkge1xuICAgICAgKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUud2lkdGggPSBgJHt0aGlzLndpZHRoKCl9cHhgO1xuICAgICAgcmV0dXJuIHRoaXMud2lkdGgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUud2lkdGggPSBgJHt0aGlzLmluaXRpYWxFbGVtZW50V2lkdGh9cHhgO1xuICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbEVsZW1lbnRXaWR0aDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1heGltaXplVG9NYXhXaWR0aCgpIHtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMubWF4V2lkdGgoKTtcbiAgICBpZiAobWF4V2lkdGggIT09IEluZmluaXR5KSB7XG4gICAgICAodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS53aWR0aCA9IGAke21heFdpZHRofXB4YDtcbiAgICB9XG4gICAgcmV0dXJuIG1heFdpZHRoO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXRUb0NvbnRlbnQoKSB7XG4gICAgKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUud2lkdGggPSAnZml0LWNvbnRlbnQnO1xuICAgIHJldHVybiAodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5jbGllbnRXaWR0aDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgQVhWYWx1ZUNoYW5nZWRFdmVudDxUPiB7XG4gIGNvbXBvbmVudDogdW5rbm93bjtcbiAgaHRtbEVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgaXNVc2VySW50ZXJhY3Rpb24/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICB2YWx1ZT86IFQ7XG4gIG9sZFZhbHVlPzogVDtcbn1cblxuY29uc3QgU1RZTEVTID0ge1xuICBoYW5kbGVyV2lkdGg6ICd2YXIoLS1heC1jb21wLXJlc2l6YWJsZS1oYW5kbGVyLXdpZHRoLCA0cHgpJyxcbiAgYmFja2dyb3VuZENvbG9yOiAncmdiYSh2YXIoLS1heC1jb21wLXJlc2l6YWJsZS1iYWNrZ3JvdW5kLWNvbG9yKSknLFxuICBiYWNrZ3JvdW5kQ29sb3JBY3RpdmU6ICdyZ2JhKHZhcigtLWF4LWNvbXAtcmVzaXphYmxlLWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCB2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS1zdXJmYWNlKSkpJyxcbiAgYmFja2dyb3VuZENvbG9ySG92ZXI6XG4gICAgJ3JnYmEodmFyKC0tYXgtY29tcC1yZXNpemFibGUtYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgdmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktbGlnaHQtc3VyZmFjZSkpKScsXG4gIGN1cnNvcjogJ3ZhcigtLWF4LWNvbXAtcmVzaXphYmxlLWN1cnNvciwgZXctcmVzaXplKScsXG4gIGN1cnNvckFjdGl2ZTogJ3ZhcigtLWF4LWNvbXAtcmVzaXphYmxlLWN1cnNvci1hY3RpdmUsIGV3LXJlc2l6ZSknLFxuICB6SW5kZXg6ICd2YXIoLS1heC1jb21wLXJlc2l6YWJsZS16LWluZGV4LCA5OTkpJyxcbiAgdHJhbnNpdGlvbjpcbiAgICAndmFyKC0tYXgtY29tcC1yZXNpemFibGUtdHJhbnNpdGlvbiwgYmFja2dyb3VuZC1jb2xvciAtLWF4LXN5cy10cmFuc2l0aW9uLWR1cmF0aW9uIC0tYXgtc3lzLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKScsXG4gIGJvcmRlclJhZGl1czogJ3ZhcigtLWF4LWNvbXAtcmVzaXphYmxlLWJvcmRlci1yYWRpdXMsIC0tYXgtc3lzLWJvcmRlci1yYWRpdXMpJyxcbn07XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1yZXNpemFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvcmVzaXphYmxlL3NyYy9hY29yZXgtY2RrLXJlc2l6YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;;;;AAKO,MAAM,oBAAoB,CAAC;AAClC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACpC,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC;AACjD,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAClC,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAC7C,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAK;AAC9D,YAAY;AACZ,iBAAiB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa;AAC/E,iBAAiB,OAAO,CAAC,CAAC,CAAC,KAAK;AAChC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;AACtD,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrF;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1F;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChF;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9F;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,EAAE;AACzC;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,EAAE;AACvC;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,MAAM,EAAE;AAC1C,QAAQ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5H,QAAQ,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;AAC9D,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;AAC5C,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC;AACrE,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;AACnC,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AACnE,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,QAAQ,EAAE;AAC1C,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,WAAW;AAChF,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;AAC9C,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC;AACxE,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,IAAI;AACJ,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AACxC,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,IAAI;AACJ;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAK;AACjD,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAgB,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3C,gBAAgB,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7C,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1C,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAY,OAAO;AACnB,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AACzD,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9D,QAAQ,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAC/D,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5D,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC/C,YAAY,KAAK,EAAE,MAAM,CAAC,YAAY;AACtC,YAAY,eAAe,EAAE,MAAM,CAAC,eAAe;AACnD,YAAY,QAAQ,EAAE,UAAU;AAChC,YAAY,GAAG,EAAE,GAAG;AACpB,YAAY,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,GAAG;AAC3C,YAAY,MAAM,EAAE,GAAG;AACvB,YAAY,MAAM,EAAE,MAAM,CAAC,MAAM;AACjC,YAAY,MAAM,EAAE,MAAM,CAAC,MAAM;AACjC,YAAY,UAAU,EAAE,MAAM,CAAC,UAAU;AACzC,YAAY,YAAY,EAAE,MAAM,CAAC,YAAY;AAC7C,YAAY,UAAU,EAAE,MAAM;AAC9B,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAC1C,YAAY,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxF,YAAY,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpF,YAAY,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChF,YAAY,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1F,YAAY,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1F,YAAY,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzF,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3F,YAAY,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7F,YAAY,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7F,YAAY,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5F,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACjD,gBAAgB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9E,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnF,QAAQ,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;AAC5C,IAAI;AACJ,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAChD,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;AACxE,YAAY,IAAI,KAAK,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE;AACvF,gBAAgB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY;AACrE,gBAAgB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,qBAAqB;AACtF,gBAAgB,KAAK,CAAC,cAAc,EAAE;AACtC,gBAAgB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW;AACvE,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC5C,oBAAoB,SAAS,EAAE,IAAI;AACnC,oBAAoB,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;AACtD,oBAAoB,iBAAiB,EAAE,IAAI;AAC3C,oBAAoB,IAAI,EAAE,iBAAiB;AAC3C,oBAAoB,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW;AAC5D,oBAAoB,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW;AAC/D,iBAAiB,CAAC;AAClB,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACrE,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACtE,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AACtC,YAAY,IAAI,QAAQ;AACxB,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO;AACrD,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;AACpD,YAAY;AACZ;AACA,YAAY,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACrF;AACA,YAAY,IAAI,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE;AAChE,gBAAgB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AACnE,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,GAAG;AAChB,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACrE,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;AAChD,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe;AAC5E,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACtC,gBAAgB,SAAS,EAAE,IAAI;AAC/B,gBAAgB,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;AAClD,gBAAgB,iBAAiB,EAAE,IAAI;AACvC,gBAAgB,IAAI,EAAE,eAAe;AACrC,gBAAgB,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW;AACxD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,cAAc;AAC7C,aAAa,CAAC;AACd,QAAQ;AACR,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AAChC,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,oBAAoB;AACjF,QAAQ;AACR,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AAChC,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe;AAC5E,QAAQ;AACR,IAAI;AACJ,IAAI,aAAa,GAAG;AACpB,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW;AAC9D;AACA;AACA,QAAQ,IAAI,QAAQ;AACpB,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,OAAO,EAAE;AAC/C,YAAY,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACjD,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,UAAU,EAAE;AACvD,YAAY,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAChD,QAAQ;AACR,aAAa;AACb,YAAY,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AAC1C,QAAQ;AACR,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AACrC,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;AAC9C,YAAY,iBAAiB,EAAE,IAAI;AACnC,YAAY,IAAI,EAAE,oBAAoB;AACtC,YAAY,QAAQ,EAAE,YAAY;AAClC,YAAY,KAAK,EAAE,QAAQ;AAC3B,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;AAC1C,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;AAC1E,YAAY,OAAO,IAAI,CAAC,YAAY,EAAE;AACtC,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;AACxC,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AACnE,YAAY,OAAO,IAAI,CAAC,KAAK,EAAE;AAC/B,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;AAC/E,YAAY,OAAO,IAAI,CAAC,mBAAmB;AAC3C,QAAQ;AACR,IAAI;AACJ,IAAI,kBAAkB,GAAG;AACzB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxC,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACnC,YAAY,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AAC/D,QAAQ;AACR,QAAQ,OAAO,QAAQ;AACvB,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa;AACzD,QAAQ,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW;AAChD,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACtL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AACtyC;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,eAAe;AAC7C,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;AACvC,MAAM,MAAM,GAAG;AACf,IAAI,YAAY,EAAE,6CAA6C;AAC/D,IAAI,eAAe,EAAE,iDAAiD;AACtE,IAAI,qBAAqB,EAAE,6FAA6F;AACxH,IAAI,oBAAoB,EAAE,kGAAkG;AAC5H,IAAI,MAAM,EAAE,4CAA4C;AACxD,IAAI,YAAY,EAAE,mDAAmD;AACrE,IAAI,MAAM,EAAE,uCAAuC;AACnD,IAAI,UAAU,EAAE,wHAAwH;AACxI,IAAI,YAAY,EAAE,gEAAgE;AAClF,CAAC;;AC3PD;AACA;AACA;;;;"}
1
+ {"version":3,"file":"acorex-cdk-resizable.mjs","sources":["../../../../packages/cdk/resizable/src/lib/resize.directive.ts","../../../../packages/cdk/resizable/src/acorex-cdk-resizable.ts"],"sourcesContent":["import { AXPlatform } from '@acorex/core/platform';\nimport { AXHtmlUtil } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n Directive,\n DOCUMENT,\n ElementRef,\n inject,\n model,\n NgZone,\n OnDestroy,\n output,\n PLATFORM_ID,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n selector: '[axResizable]',\n})\nexport class AXResizableDirective implements AfterViewInit, OnDestroy {\n private readonly el = inject(ElementRef);\n private readonly platformService = inject(AXPlatform);\n private readonly zone = inject(NgZone);\n private readonly document = inject(DOCUMENT);\n private readonly platformID = inject(PLATFORM_ID);\n private readonly isBrowser: boolean;\n \n private hostElement!: HTMLElement;\n private resizeHandle?: HTMLElement;\n private isResizing: WritableSignal<boolean> = signal(false);\n private initialElementWidth = 0;\n private startMoveWidth = 0;\n private subscriptions = new Subscription();\n \n // Bound event handlers to maintain reference for cleanup\n private readonly boundMouseDown = this.onMouseDown.bind(this);\n private readonly boundMouseMove = this.onMouseMove.bind(this);\n private readonly boundMouseUp = this.onMouseUp.bind(this);\n private readonly boundMouseEnter = this.onMouseEnter.bind(this);\n private readonly boundMouseLeave = this.onMouseLeave.bind(this);\n private readonly boundDoubleClick = this.onDoubleClick.bind(this);\n \n private readonly resizeObserver = new ResizeObserver((entries) => {\n const parentElement = this.hostElement.parentElement;\n if (!parentElement) return;\n \n for (const entry of entries) {\n if (entry.target === parentElement && this.maxWidth() === Infinity) {\n this.maxWidth.set(entry.contentRect.width);\n break;\n }\n }\n });\n\n /** Define if directive is active or not */\n axResizable = model(true);\n\n /** Minimum width for the resizable element. */\n minWidth = model(100);\n\n /** Maximum width for the resizable element. Defaults to parent width if not provided. */\n maxWidth = model(Infinity);\n\n /** Behavior on double-click: 'reset' or 'maximize'. */\n dblClickAction = model<'reset' | 'maximize' | 'fit'>('reset');\n\n /** Define initial width for the element. */\n width = model<null | number>(null);\n\n /** Define reset width for the element. */\n defaultWidth = model<null | number>(null);\n\n /** Event emitted when resizing starts. */\n onResizingStarted = output<AXValueChangedEvent<number>>();\n\n /** Event emitted when resizing ends. */\n onResizingEnded = output<AXValueChangedEvent<number>>();\n\n /** Event emitted on double-click. */\n onResizingDblClick = output<AXValueChangedEvent<number>>();\n\n constructor() {\n this.isBrowser = isPlatformBrowser(this.platformID);\n this.hostElement = this.el.nativeElement as HTMLElement;\n \n this.subscriptions.add(\n this.platformService.directionChange.subscribe((i) => {\n this.isRTL.set(i.data === 'rtl');\n if (this.resizeHandle) {\n this.updateHandlePosition();\n }\n })\n );\n }\n\n ngAfterViewInit(): void {\n if (!this.isBrowser) return;\n \n this.initialElementWidth = this.hostElement.offsetWidth;\n\n const initialWidth = this.width();\n if (initialWidth !== null) {\n this.hostElement.style.width = `${initialWidth}px`;\n }\n\n if (this.maxWidth() === Infinity) {\n const parentWidth = this.hostElement.parentElement?.offsetWidth;\n if (parentWidth) {\n this.maxWidth.set(parentWidth);\n }\n }\n \n const parentElement = this.hostElement.parentElement;\n if (parentElement) {\n this.resizeObserver.observe(parentElement);\n }\n \n this.createResizeHandle();\n this.setupResizableState();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n this.resizeObserver.disconnect();\n this.cleanupEventListeners();\n }\n\n private setupResizableState(): void {\n this.subscriptions.add(\n this.axResizable.subscribe((isActive) => {\n if (!isActive) {\n this.resetToInitialWidth();\n this.cleanupEventListeners();\n } else {\n this.createResizeHandle();\n }\n })\n );\n }\n\n private createResizeHandle(): void {\n if (!this.axResizable() || this.resizeHandle) return;\n\n this.hostElement.style.position = 'relative';\n\n this.resizeHandle = this.document.createElement('div');\n this.resizeHandle.classList.add('ax-resizable-handler');\n this.hostElement.appendChild(this.resizeHandle);\n\n this.applyHandleStyles();\n this.attachEventListeners();\n }\n \n private applyHandleStyles(): void {\n if (!this.resizeHandle) return;\n \n Object.assign(this.resizeHandle.style, {\n width: STYLES.handlerWidth,\n backgroundColor: STYLES.backgroundColor,\n position: 'absolute',\n top: '0',\n bottom: '0',\n cursor: STYLES.cursor,\n zIndex: STYLES.zIndex,\n transition: STYLES.transition,\n borderRadius: STYLES.borderRadius,\n userSelect: 'none',\n });\n \n this.updateHandlePosition();\n }\n \n private updateHandlePosition(): void {\n if (!this.resizeHandle) return;\n \n const isRTL = this.isRTL();\n if (isRTL) {\n this.resizeHandle.style.left = '0';\n this.resizeHandle.style.right = '';\n } else {\n this.resizeHandle.style.right = '0';\n this.resizeHandle.style.left = '';\n }\n }\n \n private attachEventListeners(): void {\n if (!this.resizeHandle) return;\n \n const handle = this.resizeHandle;\n this.zone.runOutsideAngular(() => {\n handle.addEventListener('mousedown', this.boundMouseDown);\n handle.addEventListener('mouseenter', this.boundMouseEnter);\n handle.addEventListener('mouseleave', this.boundMouseLeave);\n handle.addEventListener('dblclick', this.boundDoubleClick);\n this.document.addEventListener('mousemove', this.boundMouseMove);\n this.document.addEventListener('mouseup', this.boundMouseUp);\n });\n }\n\n private cleanupEventListeners(): void {\n if (this.resizeHandle) {\n this.resizeHandle.removeEventListener('mousedown', this.boundMouseDown);\n this.resizeHandle.removeEventListener('mouseenter', this.boundMouseEnter);\n this.resizeHandle.removeEventListener('mouseleave', this.boundMouseLeave);\n this.resizeHandle.removeEventListener('dblclick', this.boundDoubleClick);\n this.resizeHandle.remove();\n this.resizeHandle = undefined;\n }\n\n this.document.removeEventListener('mousemove', this.boundMouseMove);\n this.document.removeEventListener('mouseup', this.boundMouseUp);\n this.document.body.style.cursor = '';\n }\n\n private isRTL = signal(AXHtmlUtil.isRtl(this.document.documentElement));\n\n private onMouseDown(event: MouseEvent): void {\n if (!this.resizeHandle) return;\n \n const handleRect = this.resizeHandle.getBoundingClientRect();\n if (event.clientX < handleRect.left || event.clientX > handleRect.right) return;\n \n event.preventDefault();\n \n this.isResizing.set(true);\n this.document.body.style.cursor = STYLES.cursorActive;\n this.resizeHandle.style.backgroundColor = STYLES.backgroundColorActive;\n this.startMoveWidth = this.hostElement.offsetWidth;\n \n this.zone.run(() => {\n this.onResizingStarted.emit({\n component: this,\n htmlElement: this.hostElement,\n isUserInteraction: true,\n name: 'resizingStarted',\n value: this.startMoveWidth,\n oldValue: this.startMoveWidth,\n });\n });\n }\n\n private onMouseMove(event: MouseEvent): void {\n if (!this.isResizing()) return;\n \n const rect = this.hostElement.getBoundingClientRect();\n const isRTL = this.isRTL();\n \n let newWidth = isRTL ? rect.right - event.clientX : event.clientX - rect.left;\n newWidth = Math.max(this.minWidth(), Math.min(newWidth, this.maxWidth()));\n\n if (newWidth !== this.hostElement.offsetWidth) {\n this.hostElement.style.width = `${newWidth}px`;\n }\n }\n\n private onMouseUp(): void {\n if (!this.isResizing() || !this.resizeHandle) return;\n \n this.isResizing.set(false);\n this.document.body.style.cursor = '';\n this.resizeHandle.style.backgroundColor = STYLES.backgroundColor;\n \n const currentWidth = this.hostElement.offsetWidth;\n \n this.zone.run(() => {\n this.onResizingEnded.emit({\n component: this,\n htmlElement: this.hostElement,\n isUserInteraction: true,\n name: 'resizingEnded',\n value: currentWidth,\n oldValue: this.startMoveWidth,\n });\n });\n }\n\n private onMouseEnter(): void {\n if (!this.isResizing() && this.resizeHandle) {\n this.resizeHandle.style.backgroundColor = STYLES.backgroundColorHover;\n }\n }\n\n private onMouseLeave(): void {\n if (!this.isResizing() && this.resizeHandle) {\n this.resizeHandle.style.backgroundColor = STYLES.backgroundColor;\n }\n }\n\n private onDoubleClick(): void {\n const elementWidth = this.hostElement.offsetWidth;\n const action = this.dblClickAction();\n \n let newWidth: number;\n switch (action) {\n case 'reset':\n newWidth = this.resetToInitialWidth();\n break;\n case 'maximize':\n newWidth = this.maximizeToMaxWidth();\n break;\n case 'fit':\n newWidth = this.fitToContent();\n break;\n default:\n newWidth = elementWidth;\n }\n\n this.zone.run(() => {\n this.onResizingDblClick.emit({\n component: this,\n htmlElement: this.hostElement,\n isUserInteraction: true,\n name: 'onResizingDblClick',\n oldValue: elementWidth,\n value: newWidth,\n });\n });\n }\n\n private resetToInitialWidth(): number {\n const defaultWidth = this.defaultWidth();\n if (defaultWidth !== null) {\n this.hostElement.style.width = `${defaultWidth}px`;\n return defaultWidth;\n }\n \n const initialWidth = this.width();\n if (initialWidth !== null) {\n this.hostElement.style.width = `${initialWidth}px`;\n return initialWidth;\n }\n \n this.hostElement.style.width = `${this.initialElementWidth}px`;\n return this.initialElementWidth;\n }\n\n private maximizeToMaxWidth(): number {\n const maxWidth = this.maxWidth();\n if (maxWidth !== Infinity) {\n this.hostElement.style.width = `${maxWidth}px`;\n }\n return maxWidth;\n }\n\n private fitToContent(): number {\n this.hostElement.style.width = 'fit-content';\n return this.hostElement.clientWidth;\n }\n}\n\ninterface AXValueChangedEvent<T> {\n component: unknown;\n htmlElement?: HTMLElement;\n isUserInteraction?: boolean;\n name?: string;\n value?: T;\n oldValue?: T;\n}\n\nconst STYLES = {\n handlerWidth: 'var(--ax-comp-resizable-handler-width, 4px)',\n backgroundColor: 'rgba(var(--ax-comp-resizable-background-color))',\n backgroundColorActive: 'rgba(var(--ax-comp-resizable-background-color-active, var(--ax-sys-color-primary-surface)))',\n backgroundColorHover:\n 'rgba(var(--ax-comp-resizable-background-color-hover, var(--ax-sys-color-primary-light-surface)))',\n cursor: 'var(--ax-comp-resizable-cursor, ew-resize)',\n cursorActive: 'var(--ax-comp-resizable-cursor-active, ew-resize)',\n zIndex: 'var(--ax-comp-resizable-z-index, 999)',\n transition:\n 'var(--ax-comp-resizable-transition, background-color --ax-sys-transition-duration --ax-sys-transition-timing-function)',\n borderRadius: 'var(--ax-comp-resizable-border-radius, --ax-sys-border-radius)',\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}