ngx-kit 1.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dialog/README.md +169 -0
  2. package/fesm2022/{ngx-input-angle-selector.mjs → ngx-kit-angle-selector.mjs} +16 -16
  3. package/fesm2022/ngx-kit-angle-selector.mjs.map +1 -0
  4. package/fesm2022/{ngx-input-box-shadow.mjs → ngx-kit-box-shadow.mjs} +10 -10
  5. package/fesm2022/ngx-kit-box-shadow.mjs.map +1 -0
  6. package/fesm2022/{ngx-input-color-picker.mjs → ngx-kit-color-picker.mjs} +30 -14
  7. package/fesm2022/ngx-kit-color-picker.mjs.map +1 -0
  8. package/fesm2022/ngx-kit-date-picker.mjs +2280 -0
  9. package/fesm2022/ngx-kit-date-picker.mjs.map +1 -0
  10. package/fesm2022/ngx-kit-dialog.mjs +378 -0
  11. package/fesm2022/ngx-kit-dialog.mjs.map +1 -0
  12. package/fesm2022/{ngx-input-gradient-picker.mjs → ngx-kit-gradient-picker.mjs} +11 -11
  13. package/fesm2022/ngx-kit-gradient-picker.mjs.map +1 -0
  14. package/fesm2022/ngx-kit-menu.mjs +229 -0
  15. package/fesm2022/ngx-kit-menu.mjs.map +1 -0
  16. package/fesm2022/ngx-kit-notify.mjs +292 -0
  17. package/fesm2022/ngx-kit-notify.mjs.map +1 -0
  18. package/fesm2022/{ngx-input-shared.mjs → ngx-kit-shared.mjs} +267 -162
  19. package/fesm2022/ngx-kit-shared.mjs.map +1 -0
  20. package/fesm2022/{ngx-input.mjs → ngx-kit.mjs} +1 -1
  21. package/fesm2022/ngx-kit.mjs.map +1 -0
  22. package/package.json +31 -15
  23. package/styles/all.css +22 -0
  24. package/styles/overlay.css +22 -0
  25. package/types/{ngx-input-angle-selector.d.ts → ngx-kit-angle-selector.d.ts} +6 -5
  26. package/types/{ngx-input-box-shadow.d.ts → ngx-kit-box-shadow.d.ts} +7 -7
  27. package/types/{ngx-input-color-picker.d.ts → ngx-kit-color-picker.d.ts} +7 -7
  28. package/types/ngx-kit-date-picker.d.ts +294 -0
  29. package/types/ngx-kit-dialog.d.ts +139 -0
  30. package/types/{ngx-input-gradient-picker.d.ts → ngx-kit-gradient-picker.d.ts} +7 -7
  31. package/types/ngx-kit-menu.d.ts +69 -0
  32. package/types/ngx-kit-notify.d.ts +60 -0
  33. package/types/{ngx-input-shared.d.ts → ngx-kit-shared.d.ts} +87 -40
  34. package/fesm2022/ngx-input-angle-selector.mjs.map +0 -1
  35. package/fesm2022/ngx-input-box-shadow.mjs.map +0 -1
  36. package/fesm2022/ngx-input-color-picker.mjs.map +0 -1
  37. package/fesm2022/ngx-input-gradient-picker.mjs.map +0 -1
  38. package/fesm2022/ngx-input-shared.mjs.map +0 -1
  39. package/fesm2022/ngx-input.mjs.map +0 -1
  40. /package/types/{ngx-input.d.ts → ngx-kit.d.ts} +0 -0
@@ -0,0 +1,378 @@
1
+ import * as i1 from '@angular/common';
2
+ import { DOCUMENT, CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { InjectionToken, inject, Directive, Input, Inject, ChangeDetectorRef, ViewChild, ChangeDetectionStrategy, Component, Injector, runInInjectionContext, createComponent, Injectable, Optional, SkipSelf, NgModule } from '@angular/core';
5
+ import { Subject } from 'rxjs';
6
+ import { randomStrnig } from 'ngx-kit/shared';
7
+
8
+ const DIALOG_DATA = new InjectionToken('DIALOG_DATA');
9
+ const DIALOG_REF = new InjectionToken('DIALOG_REF');
10
+
11
+ class NgxDialogBodyDirective {
12
+ _el;
13
+ _renderer;
14
+ height;
15
+ _dialogRef = inject(DIALOG_REF);
16
+ constructor(_el, _renderer) {
17
+ this._el = _el;
18
+ this._renderer = _renderer;
19
+ this._dialogRef.body = this._el;
20
+ }
21
+ ngAfterViewInit() {
22
+ this.onWindowResize();
23
+ if (this._dialogRef.dialog && this._dialogRef.dialog.nativeElement) {
24
+ new ResizeObserver(() => {
25
+ this.onWindowResize();
26
+ }).observe(this._dialogRef.dialog.nativeElement);
27
+ }
28
+ }
29
+ // @HostListener('window:resize', ['$event'])
30
+ onWindowResize(ev) {
31
+ if (!window)
32
+ return;
33
+ let headerH = 0;
34
+ let footerH = 0;
35
+ let dialogH = window.innerHeight;
36
+ if (this._dialogRef.header) {
37
+ headerH = this._dialogRef.header.nativeElement.offsetHeight;
38
+ }
39
+ if (this._dialogRef.footer) {
40
+ footerH = this._dialogRef.footer.nativeElement.offsetHeight;
41
+ }
42
+ if (this._dialogRef.dialog && this._dialogRef.dialog.nativeElement.offsetHeight < dialogH) {
43
+ dialogH = this._dialogRef.dialog.nativeElement.offsetHeight;
44
+ }
45
+ this.height = dialogH - headerH - footerH;
46
+ this._renderer.setStyle(this._el.nativeElement, 'max-height', this.height + 'px');
47
+ // console.log(this.height, ':', 'windowHeight', dialogH, 'h', headerH, 'f', footerH);
48
+ }
49
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogBodyDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
50
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: NgxDialogBodyDirective, isStandalone: false, selector: "ngx-dialog-body,[ngxDialogBody]", host: { classAttribute: "dialog-body" }, exportAs: ["ngxDialogBody"], ngImport: i0 });
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogBodyDirective, decorators: [{
53
+ type: Directive,
54
+ args: [{
55
+ standalone: false,
56
+ selector: 'ngx-dialog-body,[ngxDialogBody]',
57
+ host: {
58
+ class: 'dialog-body',
59
+ },
60
+ exportAs: 'ngxDialogBody',
61
+ }]
62
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }] });
63
+
64
+ class NgxDialogFooterDirective {
65
+ _el;
66
+ align = 'end';
67
+ _dialogRef = inject(DIALOG_REF);
68
+ constructor(_el) {
69
+ this._el = _el;
70
+ }
71
+ ngOnInit() {
72
+ this._dialogRef.footer = this._el;
73
+ }
74
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogFooterDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
75
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: NgxDialogFooterDirective, isStandalone: false, selector: "ngx-dialog-footer,[ngxDialogFooter]", inputs: { align: "align" }, host: { properties: { "class.align-start": "align===\"start\"", "class.align-end": "align===\"end\"", "class.align-space-between": "align===\"space-between\"", "class.align-center": "align===\"center\"", "class.align-space-around": "align===\"space-around\"" }, classAttribute: "dialog-footer" }, exportAs: ["ngxDialogFooter"], ngImport: i0 });
76
+ }
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogFooterDirective, decorators: [{
78
+ type: Directive,
79
+ args: [{
80
+ standalone: false,
81
+ selector: 'ngx-dialog-footer,[ngxDialogFooter]',
82
+ host: {
83
+ class: 'dialog-footer',
84
+ '[class.align-start]': 'align==="start"',
85
+ '[class.align-end]': 'align==="end"',
86
+ '[class.align-space-between]': 'align==="space-between"',
87
+ '[class.align-center]': 'align==="center"',
88
+ '[class.align-space-around]': 'align==="space-around"',
89
+ },
90
+ exportAs: 'ngxDialogFooter',
91
+ }]
92
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { align: [{
93
+ type: Input
94
+ }] } });
95
+
96
+ class NgxDialogHeaderDirective {
97
+ _el;
98
+ _document;
99
+ showCloseButton = true;
100
+ _dialogRef = inject(DIALOG_REF);
101
+ constructor(_el, _document) {
102
+ this._el = _el;
103
+ this._document = _document;
104
+ }
105
+ ngOnInit() {
106
+ this._el.nativeElement.innerHTML = '<span>' + this._el.nativeElement.innerHTML + '</span>';
107
+ if (this.showCloseButton) {
108
+ let closeBtn = this._document.createElement('button');
109
+ closeBtn.className = 'close-btn';
110
+ closeBtn.innerHTML =
111
+ '<svg width="20" height="20" fill="#fff" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z"/></svg>';
112
+ closeBtn.onclick = closeBtn.ontouchend = () => {
113
+ this._dialogRef.close();
114
+ };
115
+ this._el.nativeElement.appendChild(closeBtn);
116
+ }
117
+ this._dialogRef.header = this._el;
118
+ }
119
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogHeaderDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
120
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: NgxDialogHeaderDirective, isStandalone: false, selector: "ngx-dialog-header,[ngxDialogHeader]", inputs: { showCloseButton: "showCloseButton" }, host: { classAttribute: "dialog-header" }, exportAs: ["ngxDialogHeader"], ngImport: i0 });
121
+ }
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogHeaderDirective, decorators: [{
123
+ type: Directive,
124
+ args: [{
125
+ standalone: false,
126
+ selector: 'ngx-dialog-header,[ngxDialogHeader]',
127
+ host: {
128
+ class: 'dialog-header',
129
+ },
130
+ exportAs: 'ngxDialogHeader',
131
+ }]
132
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: Document, decorators: [{
133
+ type: Inject,
134
+ args: [DOCUMENT]
135
+ }] }], propDecorators: { showCloseButton: [{
136
+ type: Input
137
+ }] } });
138
+
139
+ class NgxDialogComponent {
140
+ config;
141
+ component;
142
+ _onClose = new Subject();
143
+ onClose = this._onClose.asObservable();
144
+ ngxDialog;
145
+ _dialogRef = inject(DIALOG_REF);
146
+ cd = inject(ChangeDetectorRef);
147
+ constructor() { }
148
+ ngOnInit() { }
149
+ ngAfterViewInit() {
150
+ this._dialogRef.dialog = this.ngxDialog;
151
+ this.setStyle();
152
+ this.cd.detectChanges();
153
+ }
154
+ ngOnDestroy() { }
155
+ onOverlayClicked(evt) {
156
+ if (this.config?.allowCloseOnOutsideClick) {
157
+ this._dialogRef.close();
158
+ }
159
+ }
160
+ onDialogClicked(evt) {
161
+ evt.stopPropagation();
162
+ }
163
+ close() {
164
+ this._onClose.next();
165
+ }
166
+ setStyle() {
167
+ if (this.ngxDialog) {
168
+ if (this.config?.width) {
169
+ this.ngxDialog.nativeElement.style.width = this.config.width;
170
+ }
171
+ if (this.config?.maxWidth) {
172
+ this.ngxDialog.nativeElement.style.maxWidth = this.config.maxWidth;
173
+ }
174
+ else {
175
+ this.ngxDialog.nativeElement.style.maxWidth = '100%';
176
+ }
177
+ if (this.config?.minWidth) {
178
+ this.ngxDialog.nativeElement.style.minWidth = this.config.minWidth;
179
+ }
180
+ if (this.config?.height) {
181
+ this.ngxDialog.nativeElement.style.height = this.config.height;
182
+ }
183
+ if (this.config?.maxHeight) {
184
+ this.ngxDialog.nativeElement.style.maxHeight = this.config.maxHeight;
185
+ }
186
+ else {
187
+ this.ngxDialog.nativeElement.style.maxHeight = '100%';
188
+ }
189
+ if (this.config?.minHeight) {
190
+ this.ngxDialog.nativeElement.style.minHeight = this.config.minHeight;
191
+ }
192
+ }
193
+ }
194
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
195
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.4", type: NgxDialogComponent, isStandalone: false, selector: "ng-component", viewQueries: [{ propertyName: "ngxDialog", first: true, predicate: ["ngxDialog"], descendants: true }], ngImport: i0, template: "<div class=\"ngx-dialog-overlay\" (click)=\"onOverlayClicked($event)\">\r\n <div class=\"ngx-dialog\" (click)=\"onDialogClicked($event)\" #ngxDialog>\r\n <ng-container *ngComponentOutlet=\"component\"></ng-container>\r\n </div>\r\n</div>", styles: [".ngx-dialog-overlay{display:flex;flex-direction:column;position:fixed;inset:0;background:#0000004d;align-items:center;justify-content:center;transition:opacity .4s cubic-bezier(.25,.8,.25,1);z-index:999}::ng-deep .ngx-dialog{box-shadow:0 0 28px #3c3c3cd6;display:flex;flex-direction:column;border-radius:5px;overflow:hidden;background-color:var(--panel-bg, white);color:var(--side-config-fg, #000000);box-sizing:border-box;animation:ShowDialog .2s cubic-bezier(.25,.8,.25,1)}::ng-deep .ngx-dialog .dialog-header{display:block;background:#1180f3;display:flex;align-items:center;justify-content:space-between;padding:5px 15px;color:#fff;font-size:.8rem;box-sizing:border-box;height:35px}::ng-deep .ngx-dialog .dialog-header .close-btn{background:none;cursor:pointer;border:none;color:#fff}::ng-deep .ngx-dialog .dialog-body{display:block;overflow:auto;padding:20px;box-sizing:border-box}::ng-deep .ngx-dialog .dialog-footer{display:block;box-shadow:0 0 10px #72727252;padding:0 15px;display:flex;align-items:center;min-height:44px}::ng-deep .ngx-dialog .dialog-footer.align-start{justify-content:flex-start}::ng-deep .ngx-dialog .dialog-footer.align-end{justify-content:flex-end}::ng-deep .ngx-dialog .dialog-footer.align-space-between{justify-content:space-between}::ng-deep .ngx-dialog .dialog-footer.align-center{justify-content:center}::ng-deep .ngx-dialog .dialog-footer.align-space-around{justify-content:space-around}@keyframes ShowDialog{0%{transform:translate(0) scale(0)}to{transform:translate(0) scale(1)}}\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
196
+ }
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogComponent, decorators: [{
198
+ type: Component,
199
+ args: [{ standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ngx-dialog-overlay\" (click)=\"onOverlayClicked($event)\">\r\n <div class=\"ngx-dialog\" (click)=\"onDialogClicked($event)\" #ngxDialog>\r\n <ng-container *ngComponentOutlet=\"component\"></ng-container>\r\n </div>\r\n</div>", styles: [".ngx-dialog-overlay{display:flex;flex-direction:column;position:fixed;inset:0;background:#0000004d;align-items:center;justify-content:center;transition:opacity .4s cubic-bezier(.25,.8,.25,1);z-index:999}::ng-deep .ngx-dialog{box-shadow:0 0 28px #3c3c3cd6;display:flex;flex-direction:column;border-radius:5px;overflow:hidden;background-color:var(--panel-bg, white);color:var(--side-config-fg, #000000);box-sizing:border-box;animation:ShowDialog .2s cubic-bezier(.25,.8,.25,1)}::ng-deep .ngx-dialog .dialog-header{display:block;background:#1180f3;display:flex;align-items:center;justify-content:space-between;padding:5px 15px;color:#fff;font-size:.8rem;box-sizing:border-box;height:35px}::ng-deep .ngx-dialog .dialog-header .close-btn{background:none;cursor:pointer;border:none;color:#fff}::ng-deep .ngx-dialog .dialog-body{display:block;overflow:auto;padding:20px;box-sizing:border-box}::ng-deep .ngx-dialog .dialog-footer{display:block;box-shadow:0 0 10px #72727252;padding:0 15px;display:flex;align-items:center;min-height:44px}::ng-deep .ngx-dialog .dialog-footer.align-start{justify-content:flex-start}::ng-deep .ngx-dialog .dialog-footer.align-end{justify-content:flex-end}::ng-deep .ngx-dialog .dialog-footer.align-space-between{justify-content:space-between}::ng-deep .ngx-dialog .dialog-footer.align-center{justify-content:center}::ng-deep .ngx-dialog .dialog-footer.align-space-around{justify-content:space-around}@keyframes ShowDialog{0%{transform:translate(0) scale(0)}to{transform:translate(0) scale(1)}}\n"] }]
200
+ }], ctorParameters: () => [], propDecorators: { ngxDialog: [{
201
+ type: ViewChild,
202
+ args: ['ngxDialog']
203
+ }] } });
204
+
205
+ class NgxDialogConfig {
206
+ /**
207
+ * pass data to dialog
208
+ */
209
+ data = {};
210
+ /** close dialog on outside click
211
+ * - default false */
212
+ allowCloseOnOutsideClick = false;
213
+ /**
214
+ * container class
215
+ * - You can separate the list of classes with a space
216
+ * - for example:"`my class one two three ...`"
217
+ *
218
+ * TODO: must set with public config setter
219
+ */
220
+ containerClass = 'ngx-kit';
221
+ header;
222
+ footer;
223
+ width = '';
224
+ minWidth = '';
225
+ maxWidth = '';
226
+ height = '';
227
+ minHeight = '';
228
+ maxHeight = '';
229
+ /** parent injector */
230
+ injector;
231
+ constructor() { }
232
+ }
233
+
234
+ class NgxDialogRef {
235
+ dialog;
236
+ header;
237
+ footer;
238
+ body;
239
+ _afterClosed = new Subject();
240
+ afterClosed = this._afterClosed.asObservable();
241
+ id;
242
+ close(result) {
243
+ this._afterClosed.next(result);
244
+ }
245
+ }
246
+
247
+ class NgxOverlayService {
248
+ appRef;
249
+ injector;
250
+ envInjector;
251
+ dialogComponentRefs = [];
252
+ _defaultOptions;
253
+ constructor(appRef, injector, envInjector) {
254
+ this.appRef = appRef;
255
+ this.injector = injector;
256
+ this.envInjector = envInjector;
257
+ }
258
+ open(component, config) {
259
+ const dialogRef = this._open(component, config);
260
+ return dialogRef;
261
+ }
262
+ _open(component, config) {
263
+ config = { ...(this._defaultOptions || new NgxDialogConfig()), ...config };
264
+ const map = new WeakMap();
265
+ map.set(NgxDialogConfig, config);
266
+ const dialogRef = new NgxDialogRef();
267
+ dialogRef.id = this.getDialogId;
268
+ map.set(NgxDialogRef, dialogRef);
269
+ const sub = dialogRef.afterClosed.subscribe(() => {
270
+ // close the dialog
271
+ this.removeDialogComponentFromBody(dialogRef.id);
272
+ sub.unsubscribe();
273
+ });
274
+ // ✅ ساخت Injector اختصاصی با DestroyRef
275
+ const componentInjector = Injector.create({
276
+ providers: [
277
+ NgxDialogRef,
278
+ { provide: DIALOG_DATA, useValue: config.data },
279
+ { provide: DIALOG_REF, useValue: dialogRef, multi: false },
280
+ ],
281
+ parent: config?.injector ? config.injector : this.envInjector,
282
+ });
283
+ const componentRef = runInInjectionContext(componentInjector, () => createComponent(NgxDialogComponent, {
284
+ elementInjector: componentInjector,
285
+ environmentInjector: this.envInjector,
286
+ }));
287
+ this.appRef.attachView(componentRef.hostView);
288
+ this.appendDialogComponentToBody(componentRef, config);
289
+ componentRef.instance.config = config;
290
+ componentRef.instance.component = component;
291
+ //componentRef.instance._dialogRef = dialogRef;
292
+ this.dialogComponentRefs.push(componentRef);
293
+ return dialogRef;
294
+ }
295
+ removeDialogComponentFromBody(id) {
296
+ if (!id) {
297
+ return;
298
+ }
299
+ const index = this.dialogComponentRefs.findIndex((x) => x.instance._dialogRef.id == id);
300
+ if (index > -1 && this.dialogComponentRefs[index]) {
301
+ this.appRef.detachView(this.dialogComponentRefs[index].hostView);
302
+ this.dialogComponentRefs[index].destroy();
303
+ this.dialogComponentRefs.splice(index, 1);
304
+ }
305
+ }
306
+ appendDialogComponentToBody(componentRef, config) {
307
+ const domElem = componentRef.hostView.rootNodes[0];
308
+ if (config.containerClass) {
309
+ for (let c of config.containerClass.split(' ')) {
310
+ if (c.trim())
311
+ domElem.classList.add(c);
312
+ }
313
+ }
314
+ document.body.appendChild(domElem);
315
+ }
316
+ closeAll() {
317
+ for (let index = 0; index < this.dialogComponentRefs.length; index++) {
318
+ if (this.dialogComponentRefs[index]) {
319
+ this.appRef.detachView(this.dialogComponentRefs[index].hostView);
320
+ this.dialogComponentRefs[index].destroy();
321
+ }
322
+ }
323
+ this.dialogComponentRefs = [];
324
+ }
325
+ get getDialogId() {
326
+ return randomStrnig(10, true);
327
+ }
328
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxOverlayService, deps: [{ token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
329
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxOverlayService });
330
+ }
331
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxOverlayService, decorators: [{
332
+ type: Injectable
333
+ }], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.Injector }, { type: i0.EnvironmentInjector }] });
334
+
335
+ class Dialog {
336
+ static serviceInstance = null;
337
+ static _setService(svc) {
338
+ this.serviceInstance = svc;
339
+ }
340
+ static open(component, config) {
341
+ if (!this.serviceInstance) {
342
+ throw Error('ngx-dialog: service not initialized. Ensure NgxDialogModule is imported.');
343
+ }
344
+ return this.serviceInstance.open(component, config);
345
+ }
346
+ }
347
+
348
+ class NgxDialogModule {
349
+ constructor(parentModule, service) {
350
+ if (parentModule) {
351
+ return;
352
+ }
353
+ Dialog._setService(service);
354
+ }
355
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogModule, deps: [{ token: NgxDialogModule, optional: true, skipSelf: true }, { token: NgxOverlayService }], target: i0.ɵɵFactoryTarget.NgModule });
356
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogModule, declarations: [NgxDialogComponent, NgxDialogHeaderDirective, NgxDialogFooterDirective, NgxDialogBodyDirective], imports: [CommonModule], exports: [NgxDialogComponent, NgxDialogHeaderDirective, NgxDialogFooterDirective, NgxDialogBodyDirective] });
357
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogModule, providers: [NgxOverlayService], imports: [CommonModule] });
358
+ }
359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDialogModule, decorators: [{
360
+ type: NgModule,
361
+ args: [{
362
+ declarations: [NgxDialogComponent, NgxDialogHeaderDirective, NgxDialogFooterDirective, NgxDialogBodyDirective],
363
+ imports: [CommonModule],
364
+ exports: [NgxDialogComponent, NgxDialogHeaderDirective, NgxDialogFooterDirective, NgxDialogBodyDirective],
365
+ providers: [NgxOverlayService],
366
+ }]
367
+ }], ctorParameters: () => [{ type: NgxDialogModule, decorators: [{
368
+ type: Optional
369
+ }, {
370
+ type: SkipSelf
371
+ }] }, { type: NgxOverlayService }] });
372
+
373
+ /**
374
+ * Generated bundle index. Do not edit.
375
+ */
376
+
377
+ export { DIALOG_DATA, DIALOG_REF, Dialog, NgxDialogBodyDirective, NgxDialogComponent, NgxDialogConfig, NgxDialogFooterDirective, NgxDialogHeaderDirective, NgxDialogModule };
378
+ //# sourceMappingURL=ngx-kit-dialog.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-kit-dialog.mjs","sources":["../../../projects/libs/dialog/dialog.tokens.ts","../../../projects/libs/dialog/directives/body.directive.ts","../../../projects/libs/dialog/directives/footer.directive.ts","../../../projects/libs/dialog/directives/header.directive.ts","../../../projects/libs/dialog/ngx-dialog.component.ts","../../../projects/libs/dialog/ngx-dialog.component.html","../../../projects/libs/dialog/ngx-dialog-config.ts","../../../projects/libs/dialog/ngx-dialog-ref.ts","../../../projects/libs/dialog/ngx-dialog.service.ts","../../../projects/libs/dialog/dialog.facade.ts","../../../projects/libs/dialog/ngx-dialog.module.ts","../../../projects/libs/dialog/ngx-kit-dialog.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { NgxDialogRef } from './ngx-dialog-ref';\r\n\r\nexport const DIALOG_DATA = new InjectionToken<any>('DIALOG_DATA');\r\nexport const DIALOG_REF = new InjectionToken<NgxDialogRef>('DIALOG_REF');\r\n","import { AfterViewInit, Directive, ElementRef, inject, Renderer2 } from '@angular/core';\r\nimport { DIALOG_REF } from '../dialog.tokens';\r\n\r\n@Directive({\r\n standalone: false,\r\n selector: 'ngx-dialog-body,[ngxDialogBody]',\r\n host: {\r\n class: 'dialog-body',\r\n },\r\n exportAs: 'ngxDialogBody',\r\n})\r\nexport class NgxDialogBodyDirective implements AfterViewInit {\r\n height?: number;\r\n\r\n private _dialogRef = inject(DIALOG_REF);\r\n constructor(\r\n public _el: ElementRef<HTMLElement>,\r\n private _renderer: Renderer2,\r\n ) {\r\n this._dialogRef.body = this._el;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.onWindowResize();\r\n if (this._dialogRef.dialog && this._dialogRef.dialog.nativeElement) {\r\n new ResizeObserver(() => {\r\n this.onWindowResize();\r\n }).observe(this._dialogRef.dialog.nativeElement);\r\n }\r\n }\r\n\r\n // @HostListener('window:resize', ['$event'])\r\n onWindowResize(ev?: Event) {\r\n if (!window) return;\r\n let headerH = 0;\r\n let footerH = 0;\r\n let dialogH = window.innerHeight;\r\n if (this._dialogRef.header) {\r\n headerH = this._dialogRef.header.nativeElement.offsetHeight;\r\n }\r\n if (this._dialogRef.footer) {\r\n footerH = this._dialogRef.footer.nativeElement.offsetHeight;\r\n }\r\n if (this._dialogRef.dialog && this._dialogRef.dialog.nativeElement.offsetHeight < dialogH) {\r\n dialogH = this._dialogRef.dialog.nativeElement.offsetHeight;\r\n }\r\n this.height = dialogH - headerH - footerH;\r\n this._renderer.setStyle(this._el.nativeElement, 'max-height', this.height + 'px');\r\n // console.log(this.height, ':', 'windowHeight', dialogH, 'h', headerH, 'f', footerH);\r\n }\r\n}\r\n","import { Directive, ElementRef, inject, Input, OnInit } from '@angular/core';\r\nimport { DIALOG_REF } from '../dialog.tokens';\r\n\r\n@Directive({\r\n standalone: false,\r\n selector: 'ngx-dialog-footer,[ngxDialogFooter]',\r\n host: {\r\n class: 'dialog-footer',\r\n '[class.align-start]': 'align===\"start\"',\r\n '[class.align-end]': 'align===\"end\"',\r\n '[class.align-space-between]': 'align===\"space-between\"',\r\n '[class.align-center]': 'align===\"center\"',\r\n '[class.align-space-around]': 'align===\"space-around\"',\r\n },\r\n exportAs: 'ngxDialogFooter',\r\n})\r\nexport class NgxDialogFooterDirective implements OnInit {\r\n @Input() align: 'start' | 'end' | 'space-between' | 'center' | 'space-around' = 'end';\r\n\r\n private _dialogRef = inject(DIALOG_REF);\r\n constructor(public _el: ElementRef<HTMLElement>) {}\r\n\r\n ngOnInit(): void {\r\n this._dialogRef.footer = this._el;\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Directive, ElementRef, inject, Inject, Input, OnInit } from '@angular/core';\r\nimport { DIALOG_REF } from '../dialog.tokens';\r\n\r\n@Directive({\r\n standalone: false,\r\n selector: 'ngx-dialog-header,[ngxDialogHeader]',\r\n host: {\r\n class: 'dialog-header',\r\n },\r\n exportAs: 'ngxDialogHeader',\r\n})\r\nexport class NgxDialogHeaderDirective implements OnInit {\r\n @Input() showCloseButton = true;\r\n\r\n private _dialogRef = inject(DIALOG_REF);\r\n constructor(\r\n public _el: ElementRef<HTMLElement>,\r\n @Inject(DOCUMENT) private _document: Document,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this._el.nativeElement.innerHTML = '<span>' + this._el.nativeElement.innerHTML + '</span>';\r\n if (this.showCloseButton) {\r\n let closeBtn = this._document.createElement('button');\r\n closeBtn.className = 'close-btn';\r\n closeBtn.innerHTML =\r\n '<svg width=\"20\" height=\"20\" fill=\"#fff\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"><path d=\"M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z\"/></svg>';\r\n\r\n closeBtn.onclick = closeBtn.ontouchend = () => {\r\n this._dialogRef.close();\r\n };\r\n this._el.nativeElement.appendChild(closeBtn);\r\n }\r\n this._dialogRef.header = this._el;\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n OnDestroy,\r\n OnInit,\r\n Type,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { NgxDialogConfig } from './ngx-dialog-config';\r\nimport { DIALOG_REF } from './dialog.tokens';\r\n\r\n@Component({\r\n standalone: false,\r\n templateUrl: './ngx-dialog.component.html',\r\n styleUrls: ['./ngx-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgxDialogComponent implements OnInit, AfterViewInit, OnDestroy {\r\n config?: NgxDialogConfig;\r\n component!: Type<any>;\r\n private readonly _onClose = new Subject<void>();\r\n public onClose = this._onClose.asObservable();\r\n @ViewChild('ngxDialog') ngxDialog?: ElementRef<HTMLElement>;\r\n\r\n _dialogRef = inject(DIALOG_REF);\r\n private cd = inject(ChangeDetectorRef);\r\n constructor() {}\r\n\r\n ngOnInit(): void {}\r\n\r\n ngAfterViewInit(): void {\r\n this._dialogRef.dialog = this.ngxDialog;\r\n this.setStyle();\r\n this.cd.detectChanges();\r\n }\r\n\r\n ngOnDestroy(): void {}\r\n\r\n onOverlayClicked(evt: MouseEvent): void {\r\n if (this.config?.allowCloseOnOutsideClick) {\r\n this._dialogRef.close();\r\n }\r\n }\r\n\r\n onDialogClicked(evt: MouseEvent): void {\r\n evt.stopPropagation();\r\n }\r\n\r\n close(): void {\r\n this._onClose.next();\r\n }\r\n\r\n setStyle() {\r\n if (this.ngxDialog) {\r\n if (this.config?.width) {\r\n this.ngxDialog.nativeElement.style.width = this.config.width;\r\n }\r\n if (this.config?.maxWidth) {\r\n this.ngxDialog.nativeElement.style.maxWidth = this.config.maxWidth;\r\n } else {\r\n this.ngxDialog.nativeElement.style.maxWidth = '100%';\r\n }\r\n if (this.config?.minWidth) {\r\n this.ngxDialog.nativeElement.style.minWidth = this.config.minWidth;\r\n }\r\n if (this.config?.height) {\r\n this.ngxDialog.nativeElement.style.height = this.config.height;\r\n }\r\n if (this.config?.maxHeight) {\r\n this.ngxDialog.nativeElement.style.maxHeight = this.config.maxHeight;\r\n } else {\r\n this.ngxDialog.nativeElement.style.maxHeight = '100%';\r\n }\r\n if (this.config?.minHeight) {\r\n this.ngxDialog.nativeElement.style.minHeight = this.config.minHeight;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"ngx-dialog-overlay\" (click)=\"onOverlayClicked($event)\">\r\n <div class=\"ngx-dialog\" (click)=\"onDialogClicked($event)\" #ngxDialog>\r\n <ng-container *ngComponentOutlet=\"component\"></ng-container>\r\n </div>\r\n</div>","import { Injector } from '@angular/core';\r\n\r\nexport class NgxDialogConfig<DataType = any> {\r\n /**\r\n * pass data to dialog\r\n */\r\n data?: DataType | any = {};\r\n /** close dialog on outside click\r\n * - default false */\r\n allowCloseOnOutsideClick?: boolean = false;\r\n /**\r\n * container class\r\n * - You can separate the list of classes with a space\r\n * - for example:\"`my class one two three ...`\"\r\n *\r\n * TODO: must set with public config setter\r\n */\r\n containerClass? = 'ngx-kit';\r\n header?: {\r\n enable?: true;\r\n title?: '';\r\n showCloseButton?: true;\r\n };\r\n footer?: {\r\n enable?: true;\r\n };\r\n width?: string = '';\r\n minWidth?: string = '';\r\n maxWidth?: string = '';\r\n height?: string = '';\r\n minHeight?: string = '';\r\n maxHeight?: string = '';\r\n\r\n /** parent injector */\r\n injector?: Injector;\r\n\r\n constructor() {}\r\n}\r\n","import { ElementRef } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nexport class NgxDialogRef {\r\n dialog?: ElementRef<HTMLElement>;\r\n header?: ElementRef<HTMLElement>;\r\n footer?: ElementRef<HTMLElement>;\r\n body?: ElementRef<HTMLElement>;\r\n private readonly _afterClosed = new Subject<any>();\r\n\r\n afterClosed: Observable<any> = this._afterClosed.asObservable();\r\n\r\n id?: string;\r\n close(result?: any): void {\r\n this._afterClosed.next(result);\r\n }\r\n}\r\n","import {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EmbeddedViewRef,\r\n EnvironmentInjector,\r\n Injectable,\r\n Injector,\r\n Provider,\r\n runInInjectionContext,\r\n Type,\r\n} from '@angular/core';\r\nimport { NgxDialogConfig } from './ngx-dialog-config';\r\nimport { NgxDialogRef } from './ngx-dialog-ref';\r\nimport { NgxDialogComponent } from './ngx-dialog.component';\r\nimport { DIALOG_DATA, DIALOG_REF } from './dialog.tokens';\r\nimport { randomStrnig } from 'ngx-kit/shared';\r\n\r\n@Injectable()\r\nexport class NgxOverlayService {\r\n dialogComponentRefs: ComponentRef<NgxDialogComponent>[] = [];\r\n _defaultOptions: NgxDialogConfig | undefined;\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: Injector,\r\n private envInjector: EnvironmentInjector,\r\n ) {}\r\n\r\n public open(component: Type<any>, config?: NgxDialogConfig): NgxDialogRef {\r\n const dialogRef = this._open(component, config);\r\n return dialogRef;\r\n }\r\n\r\n private _open(component: Type<any>, config?: NgxDialogConfig): NgxDialogRef {\r\n config = { ...(this._defaultOptions || new NgxDialogConfig()), ...config };\r\n const map = new WeakMap();\r\n map.set(NgxDialogConfig, config);\r\n\r\n const dialogRef = new NgxDialogRef();\r\n dialogRef.id = this.getDialogId;\r\n map.set(NgxDialogRef, dialogRef);\r\n\r\n const sub = dialogRef.afterClosed.subscribe(() => {\r\n // close the dialog\r\n this.removeDialogComponentFromBody(dialogRef.id);\r\n sub.unsubscribe();\r\n });\r\n\r\n // ✅ ساخت Injector اختصاصی با DestroyRef\r\n const componentInjector = Injector.create({\r\n providers: [\r\n NgxDialogRef,\r\n { provide: DIALOG_DATA, useValue: config.data },\r\n { provide: DIALOG_REF, useValue: dialogRef, multi: false },\r\n ],\r\n parent: config?.injector ? config.injector : this.envInjector,\r\n });\r\n\r\n const componentRef: ComponentRef<NgxDialogComponent> = runInInjectionContext(\r\n componentInjector,\r\n () =>\r\n createComponent(NgxDialogComponent, {\r\n elementInjector: componentInjector,\r\n environmentInjector: this.envInjector,\r\n }),\r\n );\r\n\r\n this.appRef.attachView(componentRef.hostView);\r\n this.appendDialogComponentToBody(componentRef, config);\r\n componentRef.instance.config = config;\r\n componentRef.instance.component = component;\r\n //componentRef.instance._dialogRef = dialogRef;\r\n this.dialogComponentRefs.push(componentRef);\r\n return dialogRef;\r\n }\r\n\r\n private removeDialogComponentFromBody(id?: string): void {\r\n if (!id) {\r\n return;\r\n }\r\n const index = this.dialogComponentRefs.findIndex((x) => x.instance._dialogRef.id == id);\r\n if (index > -1 && this.dialogComponentRefs[index]) {\r\n this.appRef.detachView(this.dialogComponentRefs[index].hostView);\r\n this.dialogComponentRefs[index].destroy();\r\n this.dialogComponentRefs.splice(index, 1);\r\n }\r\n }\r\n\r\n private appendDialogComponentToBody(\r\n componentRef: ComponentRef<NgxDialogComponent>,\r\n config: NgxDialogConfig,\r\n ) {\r\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\r\n if (config.containerClass) {\r\n for (let c of config.containerClass.split(' ')) {\r\n if (c.trim()) domElem.classList.add(c);\r\n }\r\n }\r\n document.body.appendChild(domElem);\r\n }\r\n\r\n closeAll() {\r\n for (let index = 0; index < this.dialogComponentRefs.length; index++) {\r\n if (this.dialogComponentRefs[index]) {\r\n this.appRef.detachView(this.dialogComponentRefs[index].hostView);\r\n this.dialogComponentRefs[index].destroy();\r\n }\r\n }\r\n this.dialogComponentRefs = [];\r\n }\r\n\r\n private get getDialogId() {\r\n return randomStrnig(10, true);\r\n }\r\n}\r\n","import { Type } from '@angular/core';\r\nimport { NgxDialogConfig } from './ngx-dialog-config';\r\nimport { NgxOverlayService } from './ngx-dialog.service';\r\nimport { NgxDialogRef } from './ngx-dialog-ref';\r\n\r\nexport class Dialog {\r\n private static serviceInstance: NgxOverlayService | null = null;\r\n static _setService(svc: NgxOverlayService) {\r\n this.serviceInstance = svc;\r\n }\r\n\r\n static open<DataType>(component: Type<any>, config?: NgxDialogConfig<DataType>): NgxDialogRef {\r\n if (!this.serviceInstance) {\r\n throw Error('ngx-dialog: service not initialized. Ensure NgxDialogModule is imported.');\r\n }\r\n return this.serviceInstance.open(component, config);\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { NgxDialogBodyDirective } from './directives/body.directive';\r\nimport { NgxDialogFooterDirective } from './directives/footer.directive';\r\nimport { NgxDialogHeaderDirective } from './directives/header.directive';\r\nimport { NgxDialogComponent } from './ngx-dialog.component';\r\nimport { NgxOverlayService } from './ngx-dialog.service';\r\nimport { Dialog as DialogFacade } from './dialog.facade';\r\n\r\n@NgModule({\r\n declarations: [NgxDialogComponent, NgxDialogHeaderDirective, NgxDialogFooterDirective, NgxDialogBodyDirective],\r\n imports: [CommonModule],\r\n exports: [NgxDialogComponent, NgxDialogHeaderDirective, NgxDialogFooterDirective, NgxDialogBodyDirective],\r\n providers: [NgxOverlayService],\r\n})\r\nexport class NgxDialogModule {\r\n constructor(@Optional() @SkipSelf() parentModule: NgxDialogModule | null, service: NgxOverlayService) {\r\n if (parentModule) {\r\n return;\r\n }\r\n DialogFacade._setService(service);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DialogFacade","i1.NgxOverlayService"],"mappings":"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"}
@@ -2,10 +2,10 @@ import * as i0 from '@angular/core';
2
2
  import { inject, EventEmitter, forwardRef, ViewChild, Output, Input, ChangeDetectionStrategy, Component, ElementRef, HostListener, Directive } from '@angular/core';
3
3
  import * as i2 from '@angular/forms';
4
4
  import { FormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
5
- import * as i1$1 from 'ngx-input/shared';
6
- import { BrowserService, RangeSliderComponent } from 'ngx-input/shared';
7
- import { NgxInputColor } from 'ngx-input/color-picker';
8
- import { NgxInputAngle } from 'ngx-input/angle-selector';
5
+ import * as i1$1 from 'ngx-kit/shared';
6
+ import { BrowserService, RangeSliderComponent } from 'ngx-kit/shared';
7
+ import { NgxInputColor } from 'ngx-kit/color-picker';
8
+ import { NgxInputAngle } from 'ngx-kit/angle-selector';
9
9
  import * as i1 from '@angular/common';
10
10
  import { CommonModule } from '@angular/common';
11
11
 
@@ -426,7 +426,7 @@ class NgxInputGradient {
426
426
  el;
427
427
  renderer;
428
428
  viewContainerRef;
429
- dialogService;
429
+ overlayService;
430
430
  setInputBackground = true;
431
431
  theme = 'auto';
432
432
  _targetInput;
@@ -457,11 +457,11 @@ class NgxInputGradient {
457
457
  _onChange = (value) => { };
458
458
  _onTouched = () => { };
459
459
  _onValidateChange = () => { };
460
- constructor(el, renderer, viewContainerRef, dialogService) {
460
+ constructor(el, renderer, viewContainerRef, overlayService) {
461
461
  this.el = el;
462
462
  this.renderer = renderer;
463
463
  this.viewContainerRef = viewContainerRef;
464
- this.dialogService = dialogService;
464
+ this.overlayService = overlayService;
465
465
  }
466
466
  onClick(ev) {
467
467
  ev.stopPropagation();
@@ -517,7 +517,7 @@ class NgxInputGradient {
517
517
  this.destroyPicker();
518
518
  return;
519
519
  }
520
- this.pickerRef = this.dialogService.open({
520
+ this.pickerRef = this.overlayService.open({
521
521
  anchor: this.el.nativeElement,
522
522
  component: NgxInputGradientComponent,
523
523
  viewContainerRef: this.viewContainerRef,
@@ -562,7 +562,7 @@ class NgxInputGradient {
562
562
  this.change.emit(c);
563
563
  this._onTouched();
564
564
  }
565
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputGradient, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i1$1.DialogService }], target: i0.ɵɵFactoryTarget.Directive });
565
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputGradient, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i1$1.OverlayService }], target: i0.ɵɵFactoryTarget.Directive });
566
566
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: NgxInputGradient, isStandalone: true, selector: "[ngxInputGradient]", inputs: { setInputBackground: "setInputBackground", theme: "theme", ngxInputColor: "ngxInputColor" }, outputs: { change: "change" }, host: { listeners: { "click": "onClick($event)" } }, providers: [
567
567
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgxInputGradient), multi: true },
568
568
  {
@@ -585,7 +585,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
585
585
  },
586
586
  ],
587
587
  }]
588
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i1$1.DialogService }], propDecorators: { setInputBackground: [{
588
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i1$1.OverlayService }], propDecorators: { setInputBackground: [{
589
589
  type: Input
590
590
  }], theme: [{
591
591
  type: Input
@@ -604,4 +604,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
604
604
  */
605
605
 
606
606
  export { NgxInputGradient, NgxInputGradientComponent };
607
- //# sourceMappingURL=ngx-input-gradient-picker.mjs.map
607
+ //# sourceMappingURL=ngx-kit-gradient-picker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-kit-gradient-picker.mjs","sources":["../../../projects/libs/gradient-picker/utils/build-gradient.ts","../../../projects/libs/gradient-picker/contracts/default-gradients.ts","../../../projects/libs/gradient-picker/components/input-gradient.component.ts","../../../projects/libs/gradient-picker/components/input-gradient.component.html","../../../projects/libs/gradient-picker/directives/ngx-input-gradient.directive.ts","../../../projects/libs/gradient-picker/ngx-kit-gradient-picker.ts"],"sourcesContent":["// gradient-utils.ts\r\nimport { GradientStop, GradientType } from '../contracts/GradientStop';\r\n\r\nexport function buildGradientFromStops(\r\n stops: GradientStop[],\r\n type: GradientType = 'linear',\r\n rotation: number | string = 0\r\n): string {\r\n if (!stops || stops.length === 0) return '';\r\n\r\n // sort by numeric value\r\n const sorted = [...stops].sort((a, b) => a.value - b.value);\r\n\r\n // clamp 0..100 and format stops\r\n const parts = sorted.map((s) => {\r\n const v = Math.max(0, Math.min(Number(s.value) || 0, 100));\r\n return `${s.color.trim()} ${v}%`;\r\n });\r\n\r\n let prefix = '';\r\n if (type === 'linear') {\r\n // rotation can be number (deg) or string like 'to right' or '45deg'\r\n if (typeof rotation === 'number') prefix = `${rotation}deg, `;\r\n else if (typeof rotation === 'string' && rotation.trim().length) prefix = `${rotation.trim()}, `;\r\n } else if (type === 'radial') {\r\n // keep simple \"circle\" default: caller may put 'circle' in rotation (or pass separate option if needed)\r\n prefix = typeof rotation === 'string' && rotation.trim() ? `${rotation.trim()}, ` : 'circle, ';\r\n } else if (type === 'conic') {\r\n // conic-gradient accepts angle like 'from 45deg at 50% 50%'\r\n if (typeof rotation === 'number') prefix = `from ${rotation}deg, `;\r\n else if (typeof rotation === 'string' && rotation.trim()) prefix = `${rotation.trim()}, `;\r\n }\r\n\r\n return `${type}-gradient(${prefix}${parts.join(', ')})`;\r\n}\r\n\r\nexport function generateRandomColor(): string {\r\n const letters = '0123456789ABCDEF';\r\n let color = '#';\r\n for (let i = 0; i < 6; i++) {\r\n color += letters[Math.floor(Math.random() * 16)];\r\n }\r\n return color;\r\n}\r\n\r\nexport function isValidGradient(value: string): boolean {\r\n if (!value || typeof value !== 'string') return false;\r\n return /^\\s*(conic|linear|radial)-gradient\\s*\\(/i.test(value.trim());\r\n}\r\n\r\n/**\r\n * parseGradient\r\n * - returns: { type, rotation (number|string), stops, valid }\r\n * - stops: array of { id, color, value } where value is 0..100 (percent)\r\n * - rotation: number (deg) for linear if parsed as angle, or string (e.g. 'to right' or '45deg')\r\n */\r\nexport function parseGradient(value: string): {\r\n type: GradientType;\r\n rotation: number;\r\n shape?: string;\r\n stops: GradientStop[];\r\n valid: boolean;\r\n} {\r\n let type: GradientType = 'linear';\r\n let rotation = 180;\r\n let shape: string | undefined;\r\n let stops: GradientStop[] = [];\r\n let valid = false;\r\n\r\n if (!value) return { type, rotation, shape, stops, valid };\r\n\r\n const match = value.trim().match(/^(\\s*)(conic|linear|radial)-gradient\\s*\\((.*)\\)$/i);\r\n if (!match) return { type, rotation, shape, stops, valid };\r\n\r\n type = match[2].toLowerCase() as GradientType;\r\n let content = match[3].trim();\r\n\r\n // --- Split arguments by commas, respecting parentheses (for rgba, hsl, etc.)\r\n const parts: string[] = [];\r\n let buf = '';\r\n let depth = 0;\r\n for (const c of content) {\r\n if (c === '(') depth++;\r\n if (c === ')') depth--;\r\n if (c === ',' && depth === 0) {\r\n parts.push(buf.trim());\r\n buf = '';\r\n } else {\r\n buf += c;\r\n }\r\n }\r\n if (buf.trim()) parts.push(buf.trim());\r\n\r\n // --- Determine starting index for color stops\r\n let colorStopStart = 0;\r\n const first = parts[0];\r\n\r\n if (type === 'linear') {\r\n // e.g., \"90deg\" or \"to right\"\r\n const angleMatch = first.match(/^(\\d+)(deg)?$/i);\r\n if (angleMatch) {\r\n rotation = parseFloat(angleMatch[1]);\r\n colorStopStart = 1;\r\n } else if (/^to /i.test(first)) {\r\n // optional direction mapping\r\n colorStopStart = 1;\r\n }\r\n } else if (type === 'radial') {\r\n // e.g., \"circle\", \"circle at center\", \"ellipse at top left\"\r\n if (!/^#|rgb|hsl|[a-z]+\\(/i.test(first)) {\r\n shape = first;\r\n colorStopStart = 1;\r\n }\r\n } else if (type === 'conic') {\r\n // e.g., \"from 0deg at center\"\r\n if (!/^#|rgb|hsl|[a-z]+\\(/i.test(first)) colorStopStart = 1;\r\n }\r\n\r\n // --- Regex for color stops\r\n const colorStopRegex = /((#([0-9a-fA-F]{3,8}))|(rgba?\\([^\\)]+\\))|(hsla?\\([^\\)]+\\))|([a-zA-Z]+))(\\s+([\\d.]+%?))?/;\r\n\r\n for (let i = colorStopStart; i < parts.length; i++) {\r\n const stopPart = parts[i].trim();\r\n const m = stopPart.match(colorStopRegex);\r\n if (m) {\r\n const color = m[1];\r\n const posStr = m[9];\r\n let value = 0;\r\n if (posStr && posStr.endsWith('%')) value = parseFloat(posStr);\r\n else if (posStr) value = parseFloat(posStr);\r\n else {\r\n // اگر درصدی وجود نداشت، با توجه به ایندکس مقدار دهی کن\r\n if (stops.length === 0) value = 0;\r\n else if (i === parts.length - 1) value = 100;\r\n else value = (100 / (parts.length - colorStopStart - 1)) * stops.length;\r\n }\r\n\r\n stops.push({ color, value, id: generateId(stops) });\r\n }\r\n }\r\n\r\n valid = stops.length >= 2;\r\n return { type, rotation, shape, stops, valid };\r\n}\r\n\r\nfunction generateId(rangeValues: GradientStop[]): string {\r\n const id = 'ngx-stop-' + Math.random().toString(36).substring(2, 9);\r\n return rangeValues.find((x) => x.id === id) ? generateId(rangeValues) : id;\r\n}\r\n","import { GradientStop } from './GradientStop';\r\n\r\nexport const DefaultGradients: GradientStop[][] = [\r\n // Sunset\r\n [\r\n { id: '1', value: 0, color: '#ff7e5f' },\r\n { id: '2', value: 100, color: '#feb47b' },\r\n ],\r\n\r\n // Ocean Blue\r\n [\r\n { id: '1', value: 0, color: '#00c6ff' },\r\n { id: '2', value: 100, color: '#0072ff' },\r\n ],\r\n\r\n // Purple Dream\r\n [\r\n { id: '1', value: 0, color: '#a18cd1' },\r\n { id: '2', value: 100, color: '#fbc2eb' },\r\n ],\r\n\r\n // Cool Sky\r\n [\r\n { id: '1', value: 0, color: '#2193b0' },\r\n { id: '2', value: 100, color: '#6dd5ed' },\r\n ],\r\n\r\n // Peach\r\n [\r\n { id: '1', value: 0, color: '#ed4264' },\r\n { id: '2', value: 100, color: '#ffedbc' },\r\n ],\r\n\r\n // Night Fade\r\n [\r\n { id: '1', value: 0, color: '#a18cd1' },\r\n { id: '2', value: 100, color: '#fbc2eb' },\r\n ],\r\n\r\n // Aqua Marine\r\n [\r\n { id: '1', value: 0, color: '#1a2980' },\r\n { id: '2', value: 100, color: '#26d0ce' },\r\n ],\r\n\r\n // Forest\r\n [\r\n { id: '1', value: 0, color: '#5a3f37' },\r\n { id: '2', value: 100, color: '#2c7744' },\r\n ],\r\n\r\n // Flame\r\n [\r\n { id: '1', value: 0, color: '#ff4e50' },\r\n { id: '2', value: 100, color: '#f9d423' },\r\n ],\r\n\r\n // Blue Lagoon\r\n [\r\n { id: '1', value: 0, color: '#43cea2' },\r\n { id: '2', value: 100, color: '#185a9d' },\r\n ],\r\n\r\n // Retro\r\n [\r\n { id: '1', value: 0, color: '#3fada8' },\r\n { id: '2', value: 100, color: '#808080' },\r\n ],\r\n\r\n // Sunrise\r\n [\r\n { id: '1', value: 0, color: '#ff512f' },\r\n { id: '2', value: 100, color: '#dd2476' },\r\n ],\r\n\r\n // Rainbow\r\n [\r\n { id: '1', value: 0, color: '#ff0000' },\r\n { id: '2', value: 20, color: '#ff9900' },\r\n { id: '3', value: 40, color: '#ffff00' },\r\n { id: '4', value: 60, color: '#00ff00' },\r\n { id: '5', value: 80, color: '#0000ff' },\r\n { id: '6', value: 100, color: '#8b00ff' },\r\n ],\r\n\r\n // Candy\r\n [\r\n { id: '1', value: 0, color: '#f953c6' },\r\n { id: '2', value: 100, color: '#b91d73' },\r\n ],\r\n\r\n // Citrus\r\n [\r\n { id: '1', value: 0, color: '#fdc830' },\r\n { id: '2', value: 100, color: '#f37335' },\r\n ],\r\n\r\n // Lava\r\n [\r\n { id: '1', value: 0, color: '#e52d27' },\r\n { id: '2', value: 100, color: '#b31217' },\r\n ],\r\n\r\n // Winter\r\n [\r\n { id: '1', value: 0, color: '#e6dada' },\r\n { id: '2', value: 100, color: '#274046' },\r\n ],\r\n\r\n // Purple Love\r\n [\r\n { id: '1', value: 0, color: '#cc2b5e' },\r\n { id: '2', value: 100, color: '#753a88' },\r\n ],\r\n\r\n // Mint\r\n [\r\n { id: '1', value: 0, color: '#76b852' },\r\n { id: '2', value: 100, color: '#8dc26f' },\r\n ],\r\n\r\n // Cloud\r\n [\r\n { id: '1', value: 0, color: '#bdc3c7' },\r\n { id: '2', value: 100, color: '#2c3e50' },\r\n ],\r\n];\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n NG_VALUE_ACCESSOR,\r\n NG_VALIDATORS,\r\n ControlValueAccessor,\r\n Validator,\r\n AbstractControl,\r\n ValidationErrors,\r\n FormsModule,\r\n} from '@angular/forms';\r\nimport { GradientStop, GradientType } from '../contracts/GradientStop';\r\nimport { buildGradientFromStops, generateRandomColor, isValidGradient, parseGradient } from '../utils/build-gradient';\r\nimport { DefaultGradients } from '../contracts/default-gradients';\r\nimport { BrowserService, RangeSliderComponent } from 'ngx-kit/shared';\r\nimport { NgxInputColor } from 'ngx-kit/color-picker';\r\nimport { NgxInputAngle } from 'ngx-kit/angle-selector';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ngx-input-gradient',\r\n templateUrl: './input-gradient.component.html',\r\n styleUrls: ['./input-gradient.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgxInputGradientComponent), multi: true },\r\n {\r\n provide: NG_VALIDATORS,\r\n multi: true,\r\n useExisting: NgxInputGradientComponent,\r\n },\r\n ],\r\n host: {\r\n '[class.dark]': 'theme==\"dark\"',\r\n },\r\n imports: [CommonModule, FormsModule, RangeSliderComponent, NgxInputColor, NgxInputAngle],\r\n})\r\nexport class NgxInputGradientComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {\r\n browserService = inject(BrowserService);\r\n theme: 'light' | 'dark' = this.browserService.prefersDarkMode ? 'dark' : 'light';\r\n @Input('theme') set setTheme(val: 'light' | 'dark' | 'auto') {\r\n if (!val || val == 'auto') {\r\n this.theme = this.browserService.prefersDarkMode ? 'dark' : 'light';\r\n } else {\r\n this.theme = val;\r\n }\r\n }\r\n @Output() change = new EventEmitter<string>();\r\n\r\n defaultGradients: string[] = [];\r\n\r\n resultGradient = '';\r\n baseBg = '';\r\n rangeValues: GradientStop[] = [];\r\n type: GradientType = 'linear';\r\n rotation: number = 90;\r\n selectedIndex = 0;\r\n\r\n isDisabled = false;\r\n protected _onChange = (value: string) => {};\r\n protected _onTouched = () => {};\r\n _onValidateChange = () => {};\r\n\r\n @ViewChild('rangeSlider', { static: true }) rangeSlider?: RangeSliderComponent;\r\n\r\n constructor(private cd: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n this.setDefaultGradients();\r\n }\r\n ngOnDestroy(): void {}\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n setDisabledState(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n }\r\n registerOnValidatorChange(fn: () => void): void {\r\n this._onValidateChange = fn;\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n if (!this.resultGradient) return { required: true };\r\n const parsed = parseGradient(this.resultGradient);\r\n if (!parsed.valid) return { invalid: true };\r\n if (parsed.stops.length < 2) return { stops: 'at least 2 color stops required' };\r\n return null;\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (value && isValidGradient(value)) {\r\n const parsed = parseGradient(value);\r\n if (parsed.valid) {\r\n this.resultGradient = value;\r\n this.type = parsed.type;\r\n this.rotation = +parsed.rotation;\r\n this.rangeValues = parsed.stops;\r\n } else {\r\n this.resultGradient = '';\r\n this.rangeValues = [\r\n { color: generateRandomColor(), value: 0, id: this.generateId() },\r\n { color: generateRandomColor(), value: 100, id: this.generateId() },\r\n ];\r\n this.type = 'linear';\r\n this.rotation = 90;\r\n }\r\n } else {\r\n this.resultGradient = '';\r\n this.rangeValues = [\r\n { color: generateRandomColor(), value: 0, id: this.generateId() },\r\n { color: generateRandomColor(), value: 100, id: this.generateId() },\r\n ];\r\n this.type = 'linear';\r\n this.rotation = 90;\r\n }\r\n this.generateGradient();\r\n }\r\n private generateId(): string {\r\n let id = 'ngx-thumb-' + Math.random().toString(36).substring(2, 9);\r\n if (this.rangeValues.findIndex((x) => x.id == id) >= 0) {\r\n return this.generateId();\r\n }\r\n return id;\r\n }\r\n\r\n stopPropagation(ev: Event) {\r\n ev.stopPropagation();\r\n }\r\n\r\n remove() {\r\n if (this.rangeValues.length > 2) {\r\n this.rangeValues.splice(this.selectedIndex, 1);\r\n this.selectedIndex = 0;\r\n this.generateGradient();\r\n }\r\n }\r\n\r\n generateGradient(ev?: string) {\r\n if (ev && this.rangeValues[this.selectedIndex]) {\r\n this.rangeValues[this.selectedIndex].color = ev;\r\n }\r\n for (let item of this.rangeValues) {\r\n item.color ??= generateRandomColor();\r\n }\r\n this.baseBg = buildGradientFromStops(this.rangeValues, 'linear', 90);\r\n this.resultGradient = buildGradientFromStops(this.rangeValues, this.type, +this.rotation);\r\n this.emitChange();\r\n }\r\n\r\n updateRangeSlider() {\r\n if (this.rangeSlider) {\r\n this.rangeSlider.writeValue(this.rangeValues);\r\n }\r\n }\r\n emitChange() {\r\n this._onChange(this.resultGradient);\r\n this.change.emit(this.resultGradient);\r\n }\r\n\r\n setDefaultGradients() {\r\n this.defaultGradients = [];\r\n\r\n for (let item of DefaultGradients) {\r\n this.defaultGradients.push(buildGradientFromStops(item, 'linear', 90));\r\n }\r\n }\r\n\r\n onSelectDefault(item: string, i: number) {\r\n // console.log('onSelectDefault', item, i);\r\n this.writeValue(item);\r\n this.emitChange();\r\n }\r\n}\r\n","<div class=\"ngx-input-gradient-picker\" (click)=\"stopPropagation($event)\">\r\n <div class=\"ngx-color-preview\" [ngStyle]=\"{ '--ngx-selected-gradient': resultGradient }\"></div>\r\n <div class=\"ngx-c-inner\">\r\n <range-slider\r\n [(ngModel)]=\"rangeValues\"\r\n name=\"rangeCalues\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [step]=\"1\"\r\n [addNewRangeOnClick]=\"true\"\r\n [background]=\"baseBg\"\r\n [(selectedIndex)]=\"selectedIndex\"\r\n (change)=\"generateGradient()\"\r\n #rangeSlider></range-slider>\r\n\r\n <div class=\"text-end\">\r\n <button class=\"remove-btn\" type=\"button\" (click)=\"remove()\">remove</button>\r\n </div>\r\n @if (rangeValues[selectedIndex]) {\r\n <div class=\"ngx-row\">\r\n <div class=\"ngx-col-6\">\r\n <div class=\"label\">Color</div>\r\n <div class=\"input-color\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"rangeValues[selectedIndex].color\"\r\n name=\"color\"\r\n #inputColor\r\n (ngModelChange)=\"generateGradient(); updateRangeSlider()\" />\r\n <span\r\n #ngxGradColor\r\n class=\"color\"\r\n [style.backgroundColor]=\"rangeValues[selectedIndex].color\"\r\n [ngxInputColor]=\"inputColor\"\r\n [theme]=\"theme\"\r\n [ngModel]=\"rangeValues[selectedIndex].color\"\r\n [simpleMode]=\"true\"\r\n (change)=\"generateGradient($event)\"></span>\r\n </div>\r\n </div>\r\n <div class=\"ngx-col-6\">\r\n <div class=\"label\">Position</div>\r\n <input\r\n type=\"number\"\r\n [(ngModel)]=\"rangeValues[selectedIndex].value\"\r\n min=\"0\"\r\n max=\"100\"\r\n name=\"posiition\"\r\n (change)=\"generateGradient(); updateRangeSlider()\" />\r\n </div>\r\n <div class=\"ngx-col-6\">\r\n <div class=\"label\">Rotation</div>\r\n <div class=\"ngx-input-group\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"rotation\"\r\n ngxInputAngle\r\n [theme]=\"theme\"\r\n (change)=\"generateGradient()\"\r\n name=\"rotation\"\r\n [disabled]=\"type == 'radial'\" />\r\n <span class=\"ngx-input-prefix\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\r\n <path\r\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"ngx-col-6\">\r\n <div class=\"label\">Type</div>\r\n <div class=\"ngx-input-group\">\r\n <select [(ngModel)]=\"type\" (change)=\"generateGradient()\" name=\"type\">\r\n <option value=\"linear\">linear</option>\r\n <option value=\"radial\">radial</option>\r\n </select>\r\n <span class=\"ngx-input-prefix\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\r\n <path\r\n d=\"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"default-list\">\r\n @for (item of defaultGradients; track $index; let i = $index) {\r\n <span [style.background]=\"item\" (click)=\"onSelectDefault(item, i)\"></span>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n Renderer2,\r\n ViewContainerRef,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { NgxInputGradientComponent } from '../components/input-gradient.component';\r\nimport { isValidGradient, parseGradient } from '../utils/build-gradient';\r\nimport { OverlayRef, OverlayService } from 'ngx-kit/shared';\r\n\r\n@Directive({\r\n selector: '[ngxInputGradient]',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgxInputGradient), multi: true },\r\n {\r\n provide: NG_VALIDATORS,\r\n multi: true,\r\n useExisting: NgxInputGradient,\r\n },\r\n ],\r\n})\r\nexport class NgxInputGradient implements AfterViewInit, OnDestroy, ControlValueAccessor, Validator {\r\n @Input() setInputBackground = true;\r\n @Input() theme: 'light' | 'dark' | 'auto' = 'auto';\r\n private _targetInput?: HTMLInputElement;\r\n @Input('ngxInputColor') set ngxInputColor(\r\n el: HTMLInputElement | ElementRef<HTMLInputElement> | null | undefined | '',\r\n ) {\r\n this.isHostInput = false;\r\n if (el instanceof ElementRef) {\r\n this._targetInput = el.nativeElement;\r\n } else if (el instanceof HTMLInputElement) {\r\n this.isHostInput = true;\r\n this._targetInput = el;\r\n } else {\r\n this._targetInput = undefined;\r\n }\r\n\r\n if (this._targetInput) {\r\n this._targetInput.removeEventListener('input', this.boundInputHandler);\r\n this._targetInput.addEventListener('input', this.boundInputHandler);\r\n }\r\n }\r\n @Output() change = new EventEmitter<string>();\r\n\r\n private boundInputHandler = (e: Event) => {\r\n this.writeValue((e.target as HTMLInputElement).value);\r\n };\r\n private isHostInput = false;\r\n private pickerRef?: OverlayRef<NgxInputGradientComponent>;\r\n\r\n value = '';\r\n\r\n protected _onChange = (value: string) => {};\r\n protected _onTouched = () => {};\r\n _onValidateChange = () => {};\r\n constructor(\r\n private el: ElementRef<HTMLInputElement>,\r\n private renderer: Renderer2,\r\n private viewContainerRef: ViewContainerRef,\r\n private overlayService: OverlayService,\r\n ) {}\r\n\r\n @HostListener('click', ['$event']) onClick(ev: Event) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.toggleColorPicker();\r\n }\r\n ngAfterViewInit(): void {\r\n if (this._targetInput && this._targetInput.tagName.toLowerCase() === 'input') {\r\n this.writeValue(this._targetInput.value);\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n setDisabledState(disabled: boolean): void {\r\n if (disabled) {\r\n this.renderer.setProperty(this.el.nativeElement, 'disabled', disabled);\r\n } else {\r\n this.renderer.removeAttribute(this.el.nativeElement, 'disabled');\r\n }\r\n }\r\n registerOnValidatorChange(fn: () => void): void {\r\n this._onValidateChange = fn;\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return null;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyPicker();\r\n }\r\n\r\n writeValue(val: any): void {\r\n this.value = val;\r\n if (val && isValidGradient(val)) {\r\n // const parsed = parseGradient(val);\r\n if (this.setInputBackground) {\r\n this.renderer.setStyle(this.el.nativeElement, 'background', val);\r\n }\r\n if (this.isHostInput) {\r\n this.el.nativeElement.value = this.value;\r\n }\r\n this._onValidateChange();\r\n } else {\r\n this.renderer.setStyle(this.el.nativeElement, 'background', '');\r\n }\r\n }\r\n\r\n toggleColorPicker() {\r\n if (this.pickerRef) {\r\n this.destroyPicker();\r\n return;\r\n }\r\n\r\n this.pickerRef = this.overlayService.open({\r\n anchor: this.el.nativeElement,\r\n component: NgxInputGradientComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n alignment: 'start',\r\n placement: 'auto',\r\n configure: (instance, ref) => {\r\n instance.setTheme = this.theme;\r\n instance.writeValue(this.value);\r\n\r\n instance.change.subscribe((c: string) => {\r\n this.value = c;\r\n this.emitChange(c);\r\n });\r\n\r\n // instance.closed.subscribe(() => ref.close());\r\n },\r\n onClosed: () => {\r\n this.pickerRef = undefined;\r\n },\r\n });\r\n }\r\n\r\n destroyPicker() {\r\n if (this.pickerRef) {\r\n this.pickerRef.close();\r\n this.pickerRef = undefined;\r\n }\r\n }\r\n\r\n private async emitChange(c: string) {\r\n if (this.setInputBackground) {\r\n this.renderer.setStyle(this.el.nativeElement, 'background', c);\r\n }\r\n\r\n // اگر روی input باشیم، مقدار رو در input قرار بده\r\n if (this.isHostInput) {\r\n const input = this.el.nativeElement as HTMLInputElement;\r\n input.value = c;\r\n }\r\n\r\n // اگر targetInput وجود داره، در اونم مقدار ست کن\r\n if (this._targetInput instanceof HTMLInputElement) {\r\n this._targetInput.value = c;\r\n const event = new Event('input', { bubbles: true });\r\n this._targetInput.dispatchEvent(event);\r\n }\r\n\r\n this._onChange(c);\r\n this.change.emit(c);\r\n this._onTouched();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;;;;AAGM,SAAU,sBAAsB,CACpC,KAAqB,EACrB,IAAA,GAAqB,QAAQ,EAC7B,QAAA,GAA4B,CAAC,EAAA;AAE7B,IAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE;;IAG3C,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;;IAG3D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAA,EAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG;AAClC,IAAA,CAAC,CAAC;IAEF,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;;QAErB,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,YAAA,MAAM,GAAG,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAO;aACxD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM;AAAE,YAAA,MAAM,GAAG,CAAA,EAAG,QAAQ,CAAC,IAAI,EAAE,IAAI;IAClG;AAAO,SAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;;QAE5B,MAAM,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAA,EAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU;IAChG;AAAO,SAAA,IAAI,IAAI,KAAK,OAAO,EAAE;;QAE3B,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,YAAA,MAAM,GAAG,CAAA,KAAA,EAAQ,QAAQ,CAAA,KAAA,CAAO;aAC7D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;AAAE,YAAA,MAAM,GAAG,CAAA,EAAG,QAAQ,CAAC,IAAI,EAAE,IAAI;IAC3F;AAEA,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,UAAA,EAAa,MAAM,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;AACzD;SAEgB,mBAAmB,GAAA;IACjC,MAAM,OAAO,GAAG,kBAAkB;IAClC,IAAI,KAAK,GAAG,GAAG;AACf,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAClD;AACA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,eAAe,CAAC,KAAa,EAAA;AAC3C,IAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,KAAK;IACrD,OAAO,0CAA0C,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACtE;AAEA;;;;;AAKG;AACG,SAAU,aAAa,CAAC,KAAa,EAAA;IAOzC,IAAI,IAAI,GAAiB,QAAQ;IACjC,IAAI,QAAQ,GAAG,GAAG;AAClB,IAAA,IAAI,KAAyB;IAC7B,IAAI,KAAK,GAAmB,EAAE;IAC9B,IAAI,KAAK,GAAG,KAAK;AAEjB,IAAA,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IAE1D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,mDAAmD,CAAC;AACrF,IAAA,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IAE1D,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAkB;IAC7C,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;;IAG7B,MAAM,KAAK,GAAa,EAAE;IAC1B,IAAI,GAAG,GAAG,EAAE;IACZ,IAAI,KAAK,GAAG,CAAC;AACb,IAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;QACvB,IAAI,CAAC,KAAK,GAAG;AAAE,YAAA,KAAK,EAAE;QACtB,IAAI,CAAC,KAAK,GAAG;AAAE,YAAA,KAAK,EAAE;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE;YAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACtB,GAAG,GAAG,EAAE;QACV;aAAO;YACL,GAAG,IAAI,CAAC;QACV;IACF;IACA,IAAI,GAAG,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;;IAGtC,IAAI,cAAc,GAAG,CAAC;AACtB,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAEtB,IAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;;QAErB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAChD,IAAI,UAAU,EAAE;YACd,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACpC,cAAc,GAAG,CAAC;QACpB;AAAO,aAAA,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;;YAE9B,cAAc,GAAG,CAAC;QACpB;IACF;AAAO,SAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;;QAE5B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACvC,KAAK,GAAG,KAAK;YACb,cAAc,GAAG,CAAC;QACpB;IACF;AAAO,SAAA,IAAI,IAAI,KAAK,OAAO,EAAE;;AAE3B,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,cAAc,GAAG,CAAC;IAC7D;;IAGA,MAAM,cAAc,GAAG,yFAAyF;AAEhH,IAAA,KAAK,IAAI,CAAC,GAAG,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;QACxC,IAAI,CAAC,EAAE;AACL,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,KAAK,GAAG,CAAC;AACb,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,gBAAA,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;AACzD,iBAAA,IAAI,MAAM;AAAE,gBAAA,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;iBACtC;;AAEH,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,KAAK,GAAG,CAAC;AAC5B,qBAAA,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,GAAG,GAAG;;AACvC,oBAAA,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM;YACzE;AAEA,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD;IACF;AAEA,IAAA,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;IACzB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAChD;AAEA,SAAS,UAAU,CAAC,WAA2B,EAAA;IAC7C,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACnE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE;AAC5E;;AClJO,MAAM,gBAAgB,GAAqB;;AAEhD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;QACxC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;QACxC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;QACxC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;QACxC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;;AAGD,IAAA;QACE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,KAAA;CACF;;MC9EY,yBAAyB,CAAA;AA4BhB,IAAA,EAAA;AA3BpB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,KAAK,GAAqB,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,MAAM,GAAG,OAAO;IAChF,IAAoB,QAAQ,CAAC,GAA8B,EAAA;AACzD,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,MAAM,GAAG,OAAO;QACrE;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;QAClB;IACF;AACU,IAAA,MAAM,GAAG,IAAI,YAAY,EAAU;IAE7C,gBAAgB,GAAa,EAAE;IAE/B,cAAc,GAAG,EAAE;IACnB,MAAM,GAAG,EAAE;IACX,WAAW,GAAmB,EAAE;IAChC,IAAI,GAAiB,QAAQ;IAC7B,QAAQ,GAAW,EAAE;IACrB,aAAa,GAAG,CAAC;IAEjB,UAAU,GAAG,KAAK;AACR,IAAA,SAAS,GAAG,CAAC,KAAa,KAAI,EAAE,CAAC;AACjC,IAAA,UAAU,GAAI,MAAK,EAAE,CAAC;AAChC,IAAA,iBAAiB,GAAG,MAAK,EAAE,CAAC;AAEgB,IAAA,WAAW;AAEvD,IAAA,WAAA,CAAoB,EAAqB,EAAA;QAArB,IAAA,CAAA,EAAE,GAAF,EAAE;IAAsB;IAE5C,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AACA,IAAA,WAAW,KAAU;AACrB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AACA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;IAC5B;AACA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AACA,IAAA,QAAQ,CAAC,OAAwB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;QACnD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC3C,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE;AAChF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;AACnC,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ;AAChC,gBAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK;YACjC;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;gBACxB,IAAI,CAAC,WAAW,GAAG;AACjB,oBAAA,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;AACjE,oBAAA,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;iBACpE;AACD,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;AACpB,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;YACpB;QACF;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;YACxB,IAAI,CAAC,WAAW,GAAG;AACjB,gBAAA,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;AACjE,gBAAA,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;aACpE;AACD,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;AACpB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QACpB;QACA,IAAI,CAAC,gBAAgB,EAAE;IACzB;IACQ,UAAU,GAAA;QAChB,IAAI,EAAE,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;AACtD,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE;QAC1B;AACA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,eAAe,CAAC,EAAS,EAAA;QACvB,EAAE,CAAC,eAAe,EAAE;IACtB;IAEA,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;YACtB,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;AAEA,IAAA,gBAAgB,CAAC,EAAW,EAAA;QAC1B,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,GAAG,EAAE;QACjD;AACA,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,KAAK,mBAAmB,EAAE;QACtC;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC;AACpE,QAAA,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzF,IAAI,CAAC,UAAU,EAAE;IACnB;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/C;IACF;IACA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IACvC;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAE1B,QAAA,KAAK,IAAI,IAAI,IAAI,gBAAgB,EAAE;AACjC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxE;IACF;IAEA,eAAe,CAAC,IAAY,EAAE,CAAS,EAAA;;AAErC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE;IACnB;uGAxIW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,SAAA,EAbzB;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACrG,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,yBAAyB;AACvC,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1CH,ihIA8FA,EAAA,MAAA,EAAA,CAAA,whFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhDY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,stDAAE,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,KAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAE5E,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAlBrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACrG,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAAA,yBAA2B;AACvC,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,cAAc,EAAE,eAAe;qBAChC,EAAA,OAAA,EACQ,CAAC,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,ihIAAA,EAAA,MAAA,EAAA,CAAA,whFAAA,CAAA,EAAA;;sBAKvF,KAAK;uBAAC,OAAO;;sBAOb;;sBAgBA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MEtC/B,gBAAgB,CAAA;AAoCjB,IAAA,EAAA;AACA,IAAA,QAAA;AACA,IAAA,gBAAA;AACA,IAAA,cAAA;IAtCD,kBAAkB,GAAG,IAAI;IACzB,KAAK,GAA8B,MAAM;AAC1C,IAAA,YAAY;IACpB,IAA4B,aAAa,CACvC,EAA2E,EAAA;AAE3E,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,EAAE,YAAY,UAAU,EAAE;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,aAAa;QACtC;AAAO,aAAA,IAAI,EAAE,YAAY,gBAAgB,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QACxB;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;QAC/B;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC;YACtE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC;QACrE;IACF;AACU,IAAA,MAAM,GAAG,IAAI,YAAY,EAAU;AAErC,IAAA,iBAAiB,GAAG,CAAC,CAAQ,KAAI;QACvC,IAAI,CAAC,UAAU,CAAE,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC;AACvD,IAAA,CAAC;IACO,WAAW,GAAG,KAAK;AACnB,IAAA,SAAS;IAEjB,KAAK,GAAG,EAAE;AAEA,IAAA,SAAS,GAAG,CAAC,KAAa,KAAI,EAAE,CAAC;AACjC,IAAA,UAAU,GAAI,MAAK,EAAE,CAAC;AAChC,IAAA,iBAAiB,GAAG,MAAK,EAAE,CAAC;AAC5B,IAAA,WAAA,CACU,EAAgC,EAChC,QAAmB,EACnB,gBAAkC,EAClC,cAA8B,EAAA;QAH9B,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,cAAc,GAAd,cAAc;IACrB;AAEgC,IAAA,OAAO,CAAC,EAAS,EAAA;QAClD,EAAE,CAAC,eAAe,EAAE;QACpB,EAAE,CAAC,cAAc,EAAE;QACnB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IACA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;YAC5E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC1C;IACF;AACA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AACA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QAChC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC;QACxE;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC;QAClE;IACF;AACA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AACA,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,OAAO,IAAI;IACb;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA,IAAA,UAAU,CAAC,GAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;AAChB,QAAA,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE;;AAE/B,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,CAAC;YAClE;AACA,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;YAC1C;YACA,IAAI,CAAC,iBAAiB,EAAE;QAC1B;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,CAAC;QACjE;IACF;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,aAAa,EAAE;YACpB;QACF;QAEA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;AAC7B,YAAA,SAAS,EAAE,yBAAyB;YACpC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,SAAS,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAI;AAC3B,gBAAA,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK;AAC9B,gBAAA,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;gBAE/B,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAS,KAAI;AACtC,oBAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,oBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACpB,gBAAA,CAAC,CAAC;;YAGJ,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS;YAC5B,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC5B;IACF;IAEQ,MAAM,UAAU,CAAC,CAAS,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;QAChE;;AAGA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAiC;AACvD,YAAA,KAAK,CAAC,KAAK,GAAG,CAAC;QACjB;;AAGA,QAAA,IAAI,IAAI,CAAC,YAAY,YAAY,gBAAgB,EAAE;AACjD,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC;AAC3B,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnD,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC;QACxC;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE;IACnB;uGArJW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,SAAA,EAThB;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5F,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,gBAAgB;AAC9B,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAX5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5F,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAAA,gBAAkB;AAC9B,yBAAA;AACF,qBAAA;AACF,iBAAA;;sBAEE;;sBACA;;sBAEA,KAAK;uBAAC,eAAe;;sBAkBrB;;sBAoBA,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;AC9EnC;;AAEG;;;;"}