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.
- package/dialog/README.md +169 -0
- package/fesm2022/{ngx-input-angle-selector.mjs → ngx-kit-angle-selector.mjs} +16 -16
- package/fesm2022/ngx-kit-angle-selector.mjs.map +1 -0
- package/fesm2022/{ngx-input-box-shadow.mjs → ngx-kit-box-shadow.mjs} +10 -10
- package/fesm2022/ngx-kit-box-shadow.mjs.map +1 -0
- package/fesm2022/{ngx-input-color-picker.mjs → ngx-kit-color-picker.mjs} +30 -14
- package/fesm2022/ngx-kit-color-picker.mjs.map +1 -0
- package/fesm2022/ngx-kit-date-picker.mjs +2280 -0
- package/fesm2022/ngx-kit-date-picker.mjs.map +1 -0
- package/fesm2022/ngx-kit-dialog.mjs +378 -0
- package/fesm2022/ngx-kit-dialog.mjs.map +1 -0
- package/fesm2022/{ngx-input-gradient-picker.mjs → ngx-kit-gradient-picker.mjs} +11 -11
- package/fesm2022/ngx-kit-gradient-picker.mjs.map +1 -0
- package/fesm2022/ngx-kit-menu.mjs +229 -0
- package/fesm2022/ngx-kit-menu.mjs.map +1 -0
- package/fesm2022/ngx-kit-notify.mjs +292 -0
- package/fesm2022/ngx-kit-notify.mjs.map +1 -0
- package/fesm2022/{ngx-input-shared.mjs → ngx-kit-shared.mjs} +267 -162
- package/fesm2022/ngx-kit-shared.mjs.map +1 -0
- package/fesm2022/{ngx-input.mjs → ngx-kit.mjs} +1 -1
- package/fesm2022/ngx-kit.mjs.map +1 -0
- package/package.json +31 -15
- package/styles/all.css +22 -0
- package/styles/overlay.css +22 -0
- package/types/{ngx-input-angle-selector.d.ts → ngx-kit-angle-selector.d.ts} +6 -5
- package/types/{ngx-input-box-shadow.d.ts → ngx-kit-box-shadow.d.ts} +7 -7
- package/types/{ngx-input-color-picker.d.ts → ngx-kit-color-picker.d.ts} +7 -7
- package/types/ngx-kit-date-picker.d.ts +294 -0
- package/types/ngx-kit-dialog.d.ts +139 -0
- package/types/{ngx-input-gradient-picker.d.ts → ngx-kit-gradient-picker.d.ts} +7 -7
- package/types/ngx-kit-menu.d.ts +69 -0
- package/types/ngx-kit-notify.d.ts +60 -0
- package/types/{ngx-input-shared.d.ts → ngx-kit-shared.d.ts} +87 -40
- package/fesm2022/ngx-input-angle-selector.mjs.map +0 -1
- package/fesm2022/ngx-input-box-shadow.mjs.map +0 -1
- package/fesm2022/ngx-input-color-picker.mjs.map +0 -1
- package/fesm2022/ngx-input-gradient-picker.mjs.map +0 -1
- package/fesm2022/ngx-input-shared.mjs.map +0 -1
- package/fesm2022/ngx-input.mjs.map +0 -1
- /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-
|
|
6
|
-
import { BrowserService, RangeSliderComponent } from 'ngx-
|
|
7
|
-
import { NgxInputColor } from 'ngx-
|
|
8
|
-
import { NgxInputAngle } from 'ngx-
|
|
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
|
-
|
|
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,
|
|
460
|
+
constructor(el, renderer, viewContainerRef, overlayService) {
|
|
461
461
|
this.el = el;
|
|
462
462
|
this.renderer = renderer;
|
|
463
463
|
this.viewContainerRef = viewContainerRef;
|
|
464
|
-
this.
|
|
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.
|
|
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.
|
|
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.
|
|
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-
|
|
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":"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"}
|