@ngflux/ngflux 2.1.0 → 2.1.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/fesm2022/ngflux-ngflux.mjs +146 -56
- package/fesm2022/ngflux-ngflux.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngflux-ngflux.d.ts +26 -7
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, ElementRef, input, computed, HostBinding, Component, ChangeDetectionStrategy, Injector, viewChild, ViewContainerRef, ApplicationRef, signal, createComponent, effect, Injectable, output, model, untracked, HostListener, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
|
|
3
|
-
import { Router, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';
|
|
4
|
-
import { filter, AsyncSubject } from 'rxjs';
|
|
3
|
+
import { TitleStrategy, Router, ActivationEnd, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';
|
|
4
|
+
import { filter, map, AsyncSubject } from 'rxjs';
|
|
5
5
|
import { NgClass } from '@angular/common';
|
|
6
|
+
import { Title, Meta } from '@angular/platform-browser';
|
|
6
7
|
import * as i1 from '@angular/forms';
|
|
7
8
|
import { FormsModule } from '@angular/forms';
|
|
8
9
|
|
|
9
10
|
const NGF_CONFIG = new InjectionToken('ngf-config');
|
|
11
|
+
// END: Pagination
|
|
10
12
|
|
|
11
13
|
const NGF_DIALOG_DATA = new InjectionToken('ngf-dialog-data');
|
|
12
14
|
|
|
@@ -40,10 +42,10 @@ class NgFluxButton {
|
|
|
40
42
|
get isBlock() { return this.block(); }
|
|
41
43
|
get isDisabled() { return this.disabled(); }
|
|
42
44
|
get tabIndex() { return 1; }
|
|
43
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
44
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
45
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: NgFluxButton, isStandalone: true, selector: "ngf-button", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.bindClass", "class.block": "this.isBlock", "class.disabled": "this.isDisabled", "tabIndex": "this.tabIndex" } }, ngImport: i0, template: "<button [type]=\"type()\" [disabled]=\"disabled()\">\n <div class=\"wrapper\" [ngClass]=\"btnClassNames()\">\n @if (icon(); as ico) {\n <div class=\"icon\">\n <i [ngClass]=\"ico\"></i>\n </div>\n }\n\n <div class=\"content\">\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</button>\n", styles: [":host{display:inline-block;border:1px solid rgba(0,0,0,.2);border-radius:3px;cursor:pointer;font-size:1rem;overflow:clip}:host.block{display:block}:host.disabled{opacity:.5!important;-webkit-user-select:none!important;user-select:none!important;cursor:not-allowed}:host.xs{font-size:.6rem}:host.sm{font-size:.8rem}:host.md{font-size:1rem}:host.lg{font-size:1.25rem}:host.xl{font-size:1.5rem}:host.default{background-color:var(--ngf-default)!important;color:var(--ngf-default-fg)!important}:host.primary{background-color:var(--ngf-primary)!important;color:var(--ngf-primary-fg)!important}:host.secondary{background-color:var(--ngf-secondary)!important;color:var(--ngf-secondary-fg)!important}:host.error{background-color:var(--ngf-error)!important;color:var(--ngf-error-fg)!important}:host.danger{background-color:var(--ngf-danger)!important;color:var(--ngf-danger-fg)!important}:host.success{background-color:var(--ngf-success)!important;color:var(--ngf-success-fg)!important}:host.warning{background-color:var(--ngf-warning)!important;color:var(--ngf-warning-fg)!important}:host.info{background-color:var(--ngf-info)!important;color:var(--ngf-info-fg)!important}:host.light{background-color:var(--ngf-light)!important;color:var(--ngf-light-fg)!important}:host.dark{background-color:var(--ngf-dark)!important;color:var(--ngf-dark-fg)!important}:host>button{display:block;padding:0!important;background-color:transparent;border:none!important;width:100%!important;cursor:inherit!important;color:inherit!important;font-weight:500;font-size:1em}:host>button:focus{outline:none!important}:host .wrapper{display:flex;flex-direction:var(--flex-direction)!important;--flex-direction: row;--icon-border-left: none;--icon-border-right: 1px solid rgba(0, 0, 0, .2)}:host .wrapper.reversed{--flex-direction: row-reverse;--icon-border-left: 1px solid rgba(0, 0, 0, .2);--icon-border-right: none}:host .wrapper>.icon{display:flex;flex-direction:column;justify-content:center;align-items:center;font-size:1.05em;border-left:var(--icon-border-left)!important;border-right:var(--icon-border-right)!important;padding:0 .5em}:host .wrapper>.content{display:block;flex-grow:1;padding:.5em 1em;white-space:nowrap!important;text-align:center!important;text-overflow:ellipsis;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
45
47
|
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxButton, decorators: [{
|
|
47
49
|
type: Component,
|
|
48
50
|
args: [{ selector: 'ngf-button', imports: [NgClass], template: "<button [type]=\"type()\" [disabled]=\"disabled()\">\n <div class=\"wrapper\" [ngClass]=\"btnClassNames()\">\n @if (icon(); as ico) {\n <div class=\"icon\">\n <i [ngClass]=\"ico\"></i>\n </div>\n }\n\n <div class=\"content\">\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</button>\n", styles: [":host{display:inline-block;border:1px solid rgba(0,0,0,.2);border-radius:3px;cursor:pointer;font-size:1rem;overflow:clip}:host.block{display:block}:host.disabled{opacity:.5!important;-webkit-user-select:none!important;user-select:none!important;cursor:not-allowed}:host.xs{font-size:.6rem}:host.sm{font-size:.8rem}:host.md{font-size:1rem}:host.lg{font-size:1.25rem}:host.xl{font-size:1.5rem}:host.default{background-color:var(--ngf-default)!important;color:var(--ngf-default-fg)!important}:host.primary{background-color:var(--ngf-primary)!important;color:var(--ngf-primary-fg)!important}:host.secondary{background-color:var(--ngf-secondary)!important;color:var(--ngf-secondary-fg)!important}:host.error{background-color:var(--ngf-error)!important;color:var(--ngf-error-fg)!important}:host.danger{background-color:var(--ngf-danger)!important;color:var(--ngf-danger-fg)!important}:host.success{background-color:var(--ngf-success)!important;color:var(--ngf-success-fg)!important}:host.warning{background-color:var(--ngf-warning)!important;color:var(--ngf-warning-fg)!important}:host.info{background-color:var(--ngf-info)!important;color:var(--ngf-info-fg)!important}:host.light{background-color:var(--ngf-light)!important;color:var(--ngf-light-fg)!important}:host.dark{background-color:var(--ngf-dark)!important;color:var(--ngf-dark-fg)!important}:host>button{display:block;padding:0!important;background-color:transparent;border:none!important;width:100%!important;cursor:inherit!important;color:inherit!important;font-weight:500;font-size:1em}:host>button:focus{outline:none!important}:host .wrapper{display:flex;flex-direction:var(--flex-direction)!important;--flex-direction: row;--icon-border-left: none;--icon-border-right: 1px solid rgba(0, 0, 0, .2)}:host .wrapper.reversed{--flex-direction: row-reverse;--icon-border-left: 1px solid rgba(0, 0, 0, .2);--icon-border-right: none}:host .wrapper>.icon{display:flex;flex-direction:column;justify-content:center;align-items:center;font-size:1.05em;border-left:var(--icon-border-left)!important;border-right:var(--icon-border-right)!important;padding:0 .5em}:host .wrapper>.content{display:block;flex-grow:1;padding:.5em 1em;white-space:nowrap!important;text-align:center!important;text-overflow:ellipsis;overflow:hidden}\n"] }]
|
|
49
51
|
}], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], block: [{ type: i0.Input, args: [{ isSignal: true, alias: "block", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], bindClass: [{
|
|
@@ -61,30 +63,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
61
63
|
}] } });
|
|
62
64
|
|
|
63
65
|
class NgFluxDialogBodyComponent {
|
|
64
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
65
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
67
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: NgFluxDialogBodyComponent, isStandalone: true, selector: "ngf-dialog-body", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:block;padding:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
66
68
|
}
|
|
67
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogBodyComponent, decorators: [{
|
|
68
70
|
type: Component,
|
|
69
71
|
args: [{ selector: 'ngf-dialog-body', changeDetection: ChangeDetectionStrategy.Eager, imports: [], template: "<ng-content></ng-content>\n", styles: [":host{display:block;padding:20px}\n"] }]
|
|
70
72
|
}] });
|
|
71
73
|
|
|
72
74
|
class NgFluxDialogFooterComponent {
|
|
73
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
74
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
75
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
76
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: NgFluxDialogFooterComponent, isStandalone: true, selector: "ngf-dialog-footer", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;align-items:center;justify-content:end;position:sticky;background-color:var(--ngf-dialog-background-color)!important;border-top:var(--ngf-dialog-border)!important;padding:7px 15px;bottom:0;gap:10px}\n"], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
75
77
|
}
|
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
78
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogFooterComponent, decorators: [{
|
|
77
79
|
type: Component,
|
|
78
80
|
args: [{ selector: 'ngf-dialog-footer', changeDetection: ChangeDetectionStrategy.Eager, imports: [], template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;align-items:center;justify-content:end;position:sticky;background-color:var(--ngf-dialog-background-color)!important;border-top:var(--ngf-dialog-border)!important;padding:7px 15px;bottom:0;gap:10px}\n"] }]
|
|
79
81
|
}] });
|
|
80
82
|
|
|
81
83
|
class NgFluxDialogRootComponent {
|
|
82
84
|
injector = inject(Injector);
|
|
83
|
-
viewContainer = viewChild.required('container', { read: ViewContainerRef });
|
|
84
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
85
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.
|
|
85
|
+
viewContainer = viewChild.required('container', { ...(ngDevMode ? { debugName: "viewContainer" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
|
|
86
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
87
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.6", type: NgFluxDialogRootComponent, isStandalone: true, selector: "ngf-dialog-root", viewQueries: [{ propertyName: "viewContainer", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "<ng-template #container></ng-template>\n", styles: [":host{display:block;width:0px;height:0px;visibility:hidden}\n"] });
|
|
86
88
|
}
|
|
87
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogRootComponent, decorators: [{
|
|
88
90
|
type: Component,
|
|
89
91
|
args: [{ selector: 'ngf-dialog-root', imports: [], template: "<ng-template #container></ng-template>\n", styles: [":host{display:block;width:0px;height:0px;visibility:hidden}\n"] }]
|
|
90
92
|
}], propDecorators: { viewContainer: [{ type: i0.ViewChild, args: ['container', { ...{ read: ViewContainerRef }, isSignal: true }] }] } });
|
|
@@ -168,10 +170,10 @@ class NgFluxDialogInternal {
|
|
|
168
170
|
clear = () => {
|
|
169
171
|
this.list.set([]);
|
|
170
172
|
};
|
|
171
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
172
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
173
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogInternal, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
174
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogInternal, providedIn: 'root' });
|
|
173
175
|
}
|
|
174
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogInternal, decorators: [{
|
|
175
177
|
type: Injectable,
|
|
176
178
|
args: [{ providedIn: 'root' }]
|
|
177
179
|
}], ctorParameters: () => [] });
|
|
@@ -181,24 +183,106 @@ const NGF_DIALOG_CONFIG = new InjectionToken('ngf-dialog-config');
|
|
|
181
183
|
const NGF_DIALOG_INSTANCE = new InjectionToken('ngf-dialog-instance');
|
|
182
184
|
const NGF_DIALOG_CLOSE_FN = new InjectionToken('ngf-dialog-close-fn');
|
|
183
185
|
|
|
186
|
+
class RouteTitleStrategy extends TitleStrategy {
|
|
187
|
+
config = inject(NGF_CONFIG);
|
|
188
|
+
service = inject(Title);
|
|
189
|
+
getChildSnapshot(snapshot) {
|
|
190
|
+
if (snapshot.firstChild)
|
|
191
|
+
return this.getChildSnapshot(snapshot.firstChild);
|
|
192
|
+
return snapshot;
|
|
193
|
+
}
|
|
194
|
+
getParentTitle(snapshot) {
|
|
195
|
+
if (snapshot.parent) {
|
|
196
|
+
const title = snapshot.parent.title;
|
|
197
|
+
if (title)
|
|
198
|
+
return title;
|
|
199
|
+
return this.getParentTitle(snapshot.parent);
|
|
200
|
+
}
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
updateTitle(snapshot) {
|
|
204
|
+
const { config, service } = this;
|
|
205
|
+
const entries = [];
|
|
206
|
+
if (config.title?.prefix)
|
|
207
|
+
entries.push(config.title.prefix);
|
|
208
|
+
const child = this.getChildSnapshot(snapshot.root);
|
|
209
|
+
const routeConfig = (child.routeConfig ?? {});
|
|
210
|
+
let routeTitle = routeConfig.getTitle?.(child.data) ?? this.buildTitle(snapshot);
|
|
211
|
+
if (routeConfig.addParentTitle) {
|
|
212
|
+
const parentTitle = this.getParentTitle(child);
|
|
213
|
+
if (parentTitle) {
|
|
214
|
+
const separator = routeConfig.parentTitleSeparator ?? ' - ';
|
|
215
|
+
if (routeTitle) {
|
|
216
|
+
routeTitle += separator + parentTitle;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
routeTitle = parentTitle;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (routeTitle)
|
|
224
|
+
entries.push(routeTitle);
|
|
225
|
+
if (config.title?.suffix)
|
|
226
|
+
entries.push(config.title.suffix);
|
|
227
|
+
const separator = config.title?.separator ?? ' | ';
|
|
228
|
+
const title = entries.join(separator);
|
|
229
|
+
if (title)
|
|
230
|
+
service.setTitle(title);
|
|
231
|
+
}
|
|
232
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RouteTitleStrategy, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
233
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RouteTitleStrategy, providedIn: 'root' });
|
|
234
|
+
}
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: RouteTitleStrategy, decorators: [{
|
|
236
|
+
type: Injectable,
|
|
237
|
+
args: [{ providedIn: 'root' }]
|
|
238
|
+
}] });
|
|
239
|
+
|
|
240
|
+
class MetaInternal {
|
|
241
|
+
meta = inject(Meta);
|
|
242
|
+
router = inject(Router);
|
|
243
|
+
snapshot = this.router.events.pipe(filter(e => e instanceof ActivationEnd), filter(e => !e.snapshot.firstChild), map(e => e.snapshot));
|
|
244
|
+
initialize() {
|
|
245
|
+
const { meta, snapshot } = this;
|
|
246
|
+
const initialDescription = meta.getTag('name="description"')?.content;
|
|
247
|
+
const initialKeywords = meta.getTag('name="keywords"')?.content;
|
|
248
|
+
snapshot.subscribe(snap => {
|
|
249
|
+
const config = (snap.routeConfig ?? {});
|
|
250
|
+
const description = config.getDescription?.(snap.data) ?? config.description ?? initialDescription;
|
|
251
|
+
if (description)
|
|
252
|
+
meta.updateTag({ name: 'description', content: description });
|
|
253
|
+
let keywords = config.getKeywords?.(snap.data) ?? config.keywords ?? initialKeywords;
|
|
254
|
+
if (Array.isArray(keywords))
|
|
255
|
+
keywords = keywords.join(', ');
|
|
256
|
+
if (keywords)
|
|
257
|
+
meta.updateTag({ name: 'keywords', content: keywords });
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MetaInternal, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
261
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MetaInternal, providedIn: 'root' });
|
|
262
|
+
}
|
|
263
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MetaInternal, decorators: [{
|
|
264
|
+
type: Injectable,
|
|
265
|
+
args: [{ providedIn: 'root' }]
|
|
266
|
+
}] });
|
|
267
|
+
|
|
184
268
|
class NgFluxDialogHeaderComponent {
|
|
185
269
|
config = inject(NGF_DIALOG_CONFIG);
|
|
186
270
|
dialogRef = inject(NgFluxDialogRef);
|
|
187
271
|
icon = input(/* @ts-ignore */
|
|
188
272
|
...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
189
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
190
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
273
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
274
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: NgFluxDialogHeaderComponent, isStandalone: true, selector: "ngf-dialog-header", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (icon(); as ico) {\n <div class=\"left\">\n <i [ngClass]=\"ico\"></i>\n </div>\n}\n\n<div class=\"middle\">\n <ng-content></ng-content>\n</div>\n\n@if (config.closeBtn) {\n <div class=\"right\" title=\"Close\" (click)=\"dialogRef.close()\">\n <i class=\"ngf-icon close\"></i>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:row;position:sticky;background-color:var(--ngf-dialog-background-color)!important;border-bottom:var(--ngf-dialog-border)!important;min-height:50px;top:0}:host>.left{display:flex;flex-direction:row;justify-content:center;align-items:center;padding:10px}:host>.middle{display:flex;flex-direction:column;justify-content:center;align-items:start;overflow:hidden;text-overflow:ellipsis;padding:10px 20px;flex:1 0 0;width:0px}:host>.right{display:flex;flex-direction:row;justify-content:center;align-items:center;cursor:pointer;padding:10px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
191
275
|
}
|
|
192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
276
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogHeaderComponent, decorators: [{
|
|
193
277
|
type: Component,
|
|
194
278
|
args: [{ selector: 'ngf-dialog-header', changeDetection: ChangeDetectionStrategy.Eager, imports: [NgClass], template: "@if (icon(); as ico) {\n <div class=\"left\">\n <i [ngClass]=\"ico\"></i>\n </div>\n}\n\n<div class=\"middle\">\n <ng-content></ng-content>\n</div>\n\n@if (config.closeBtn) {\n <div class=\"right\" title=\"Close\" (click)=\"dialogRef.close()\">\n <i class=\"ngf-icon close\"></i>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:row;position:sticky;background-color:var(--ngf-dialog-background-color)!important;border-bottom:var(--ngf-dialog-border)!important;min-height:50px;top:0}:host>.left{display:flex;flex-direction:row;justify-content:center;align-items:center;padding:10px}:host>.middle{display:flex;flex-direction:column;justify-content:center;align-items:start;overflow:hidden;text-overflow:ellipsis;padding:10px 20px;flex:1 0 0;width:0px}:host>.right{display:flex;flex-direction:row;justify-content:center;align-items:center;cursor:pointer;padding:10px}\n"] }]
|
|
195
279
|
}], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }] } });
|
|
196
280
|
|
|
197
281
|
class NgFluxLoadingComponent {
|
|
198
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
199
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
282
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
283
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: NgFluxLoadingComponent, isStandalone: true, selector: "ngf-loading", ngImport: i0, template: "<svg viewBox=\"25 25 50 50\">\n <circle r=\"20\" cy=\"50\" cx=\"50\"></circle>\n</svg>\n", styles: [":host{display:block}:host svg{width:3.25em;transform-origin:center;animation:rotate4 2s linear infinite}:host circle{fill:none;stroke:var(--ngf-loading-foreground)!important;stroke-width:5;stroke-dasharray:1,200;stroke-dashoffset:0;stroke-linecap:round;animation:dash4 1.5s ease-in-out infinite}@keyframes rotate4{to{transform:rotate(360deg)}}@keyframes dash4{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,200;stroke-dashoffset:-35px}to{stroke-dashoffset:-125px}}\n"] });
|
|
200
284
|
}
|
|
201
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
285
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoadingComponent, decorators: [{
|
|
202
286
|
type: Component,
|
|
203
287
|
args: [{ selector: 'ngf-loading', imports: [], template: "<svg viewBox=\"25 25 50 50\">\n <circle r=\"20\" cy=\"50\" cx=\"50\"></circle>\n</svg>\n", styles: [":host{display:block}:host svg{width:3.25em;transform-origin:center;animation:rotate4 2s linear infinite}:host circle{fill:none;stroke:var(--ngf-loading-foreground)!important;stroke-width:5;stroke-dasharray:1,200;stroke-dashoffset:0;stroke-linecap:round;animation:dash4 1.5s ease-in-out infinite}@keyframes rotate4{to{transform:rotate(360deg)}}@keyframes dash4{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,200;stroke-dashoffset:-35px}to{stroke-dashoffset:-125px}}\n"] }]
|
|
204
288
|
}] });
|
|
@@ -213,7 +297,7 @@ class NgFluxLoadingRootComponent {
|
|
|
213
297
|
isLoading = computed(() => this.count() > 0, /* @ts-ignore */
|
|
214
298
|
...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
215
299
|
get showLoading() { return this.isLoading(); }
|
|
216
|
-
viewContainer = viewChild.required('container', { read: ViewContainerRef });
|
|
300
|
+
viewContainer = viewChild.required('container', { ...(ngDevMode ? { debugName: "viewContainer" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
|
|
217
301
|
componentRef;
|
|
218
302
|
constructor() {
|
|
219
303
|
const { config, injector } = this;
|
|
@@ -244,10 +328,10 @@ class NgFluxLoadingRootComponent {
|
|
|
244
328
|
entries.pop();
|
|
245
329
|
return entries;
|
|
246
330
|
});
|
|
247
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
248
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.
|
|
331
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoadingRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
332
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.6", type: NgFluxLoadingRootComponent, isStandalone: true, selector: "ngf-loading-root", host: { properties: { "class.show": "this.showLoading" } }, viewQueries: [{ propertyName: "viewContainer", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "<div class=\"wrapper\">\n <ng-template #container></ng-template>\n</div>\n", styles: [":host{display:none;position:fixed;z-index:var(--ngf-loading-z-index)!important;inset:0}:host.show{display:block}:host>.wrapper{display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:var(--ngf-loading-background)!important;height:100%!important;width:100%!important}\n"] });
|
|
249
333
|
}
|
|
250
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
334
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoadingRootComponent, decorators: [{
|
|
251
335
|
type: Component,
|
|
252
336
|
args: [{ selector: 'ngf-loading-root', imports: [], template: "<div class=\"wrapper\">\n <ng-template #container></ng-template>\n</div>\n", styles: [":host{display:none;position:fixed;z-index:var(--ngf-loading-z-index)!important;inset:0}:host.show{display:block}:host>.wrapper{display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:var(--ngf-loading-background)!important;height:100%!important;width:100%!important}\n"] }]
|
|
253
337
|
}], ctorParameters: () => [], propDecorators: { showLoading: [{
|
|
@@ -295,10 +379,10 @@ class NgFluxPaginationInfo {
|
|
|
295
379
|
limit: data.perPage,
|
|
296
380
|
});
|
|
297
381
|
}
|
|
298
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
299
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
382
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxPaginationInfo, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
383
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: NgFluxPaginationInfo, isStandalone: true, selector: "ngf-pagination-info", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, limit: { classPropertyName: "limit", publicName: "limit", isSignal: true, isRequired: true, transformFunction: null }, limitOptions: { classPropertyName: "limitOptions", publicName: "limitOptions", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { callback: "callback", limit: "limitChange" }, ngImport: i0, template: "<div class=\"wrapper\">\n <div class=\"block limit\">\n <div>Per page</div>\n <select name=\"\" id=\"\" [(ngModel)]=\"limit\">\n @for (entry of limitOptions(); track $index) {\n <option [value]=\"entry\">{{ entry }}</option>\n }\n </select>\n </div>\n\n <div class=\"block info\">\n <div>{{ info() }}</div>\n </div>\n\n <div class=\"block nav\">\n <button (click)=\"prev()\" [disabled]=\"disablePrev()\">\n <i class=\"ngf-icon chevron-left\"></i>\n </button>\n\n <button (click)=\"next()\" [disabled]=\"disableNext()\">\n <i class=\"ngf-icon chevron-right\"></i>\n </button>\n </div>\n</div>\n", styles: [":host{display:block;container:pagination/inline-size}:host .wrapper{display:flex;flex-direction:column;font-family:Poppins,sans-serif;align-items:end;text-align:center;font-size:.8rem;gap:5px}@container pagination (min-width: 400px){:host .wrapper{flex-direction:row;justify-content:end;align-items:center;gap:15px}}:host .wrapper .block{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:5px}:host .wrapper .limit>select{display:block;padding:2px 5px;font-size:inherit;outline:none!important;width:50px}:host .wrapper .nav>button{display:block;background-color:transparent;box-shadow:none!important;outline:none!important;cursor:pointer;border:none;padding:0}:host .wrapper .nav>button:disabled{cursor:default;color:#aaa}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
300
384
|
}
|
|
301
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxPaginationInfo, decorators: [{
|
|
302
386
|
type: Component,
|
|
303
387
|
args: [{ selector: 'ngf-pagination-info', changeDetection: ChangeDetectionStrategy.Eager, imports: [FormsModule], template: "<div class=\"wrapper\">\n <div class=\"block limit\">\n <div>Per page</div>\n <select name=\"\" id=\"\" [(ngModel)]=\"limit\">\n @for (entry of limitOptions(); track $index) {\n <option [value]=\"entry\">{{ entry }}</option>\n }\n </select>\n </div>\n\n <div class=\"block info\">\n <div>{{ info() }}</div>\n </div>\n\n <div class=\"block nav\">\n <button (click)=\"prev()\" [disabled]=\"disablePrev()\">\n <i class=\"ngf-icon chevron-left\"></i>\n </button>\n\n <button (click)=\"next()\" [disabled]=\"disableNext()\">\n <i class=\"ngf-icon chevron-right\"></i>\n </button>\n </div>\n</div>\n", styles: [":host{display:block;container:pagination/inline-size}:host .wrapper{display:flex;flex-direction:column;font-family:Poppins,sans-serif;align-items:end;text-align:center;font-size:.8rem;gap:5px}@container pagination (min-width: 400px){:host .wrapper{flex-direction:row;justify-content:end;align-items:center;gap:15px}}:host .wrapper .block{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:5px}:host .wrapper .limit>select{display:block;padding:2px 5px;font-size:inherit;outline:none!important;width:50px}:host .wrapper .nav>button{display:block;background-color:transparent;box-shadow:none!important;outline:none!important;cursor:pointer;border:none;padding:0}:host .wrapper .nav>button:disabled{cursor:default;color:#aaa}\n"] }]
|
|
304
388
|
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], callback: [{ type: i0.Output, args: ["callback"] }], limit: [{ type: i0.Input, args: [{ isSignal: true, alias: "limit", required: true }] }, { type: i0.Output, args: ["limitChange"] }], limitOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "limitOptions", required: true }] }] } });
|
|
@@ -345,10 +429,10 @@ class NgFluxPagination {
|
|
|
345
429
|
init = true;
|
|
346
430
|
});
|
|
347
431
|
}
|
|
348
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
349
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
432
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxPagination, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
433
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.6", type: NgFluxPagination, isStandalone: true, selector: "ngf-pagination", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, preload: { classPropertyName: "preload", publicName: "preload", isSignal: true, isRequired: false, transformFunction: null }, transform: { classPropertyName: "transform", publicName: "transform", isSignal: true, isRequired: false, transformFunction: null }, limit: { classPropertyName: "limit", publicName: "limit", isSignal: true, isRequired: false, transformFunction: null }, limitOptions: { classPropertyName: "limitOptions", publicName: "limitOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { limit: "limitChange", callback: "callback" }, ngImport: i0, template: "<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n", styles: [":host{display:block}:host>.content{margin:20px 0}\n"], dependencies: [{ kind: "component", type: NgFluxPaginationInfo, selector: "ngf-pagination-info", inputs: ["data", "limit", "limitOptions"], outputs: ["callback", "limitChange"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
350
434
|
}
|
|
351
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
435
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxPagination, decorators: [{
|
|
352
436
|
type: Component,
|
|
353
437
|
args: [{ selector: 'ngf-pagination', changeDetection: ChangeDetectionStrategy.Eager, imports: [NgFluxPaginationInfo], template: "<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n", styles: [":host{display:block}:host>.content{margin:20px 0}\n"] }]
|
|
354
438
|
}], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], preload: [{ type: i0.Input, args: [{ isSignal: true, alias: "preload", required: false }] }], transform: [{ type: i0.Input, args: [{ isSignal: true, alias: "transform", required: false }] }], limit: [{ type: i0.Input, args: [{ isSignal: true, alias: "limit", required: false }] }, { type: i0.Output, args: ["limitChange"] }], limitOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "limitOptions", required: false }] }], callback: [{ type: i0.Output, args: ["callback"] }] } });
|
|
@@ -384,10 +468,10 @@ class NgFluxLoadingInternal {
|
|
|
384
468
|
router.events.pipe(navError).subscribe(nav => root.stop());
|
|
385
469
|
}
|
|
386
470
|
}
|
|
387
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
388
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
471
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoadingInternal, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
472
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoadingInternal, providedIn: 'root' });
|
|
389
473
|
}
|
|
390
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
474
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoadingInternal, decorators: [{
|
|
391
475
|
type: Injectable,
|
|
392
476
|
args: [{ providedIn: 'root' }]
|
|
393
477
|
}], ctorParameters: () => [] });
|
|
@@ -401,10 +485,10 @@ class NgFluxLoading {
|
|
|
401
485
|
...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
402
486
|
start = (text = '') => this.root.start(text);
|
|
403
487
|
stop = () => this.root.stop();
|
|
404
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
405
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
488
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoading, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
489
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoading, providedIn: 'root' });
|
|
406
490
|
}
|
|
407
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
491
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxLoading, decorators: [{
|
|
408
492
|
type: Injectable,
|
|
409
493
|
args: [{ providedIn: 'root' }]
|
|
410
494
|
}] });
|
|
@@ -415,7 +499,7 @@ class NgFluxDialogComponent {
|
|
|
415
499
|
onClosed = inject(NGF_DIALOG_CLOSE_FN);
|
|
416
500
|
content = inject(NGF_DIALOG_CONTENT);
|
|
417
501
|
config = inject(NGF_DIALOG_CONFIG);
|
|
418
|
-
viewContainer = viewChild.required('container', { read: ViewContainerRef });
|
|
502
|
+
viewContainer = viewChild.required('container', { ...(ngDevMode ? { debugName: "viewContainer" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
|
|
419
503
|
componentRef;
|
|
420
504
|
data;
|
|
421
505
|
constructor() {
|
|
@@ -473,10 +557,10 @@ class NgFluxDialogComponent {
|
|
|
473
557
|
const ref = this.componentRef.location;
|
|
474
558
|
ref.nativeElement.classList.add('close');
|
|
475
559
|
}
|
|
476
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
477
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.
|
|
560
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
561
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.6", type: NgFluxDialogComponent, isStandalone: true, selector: "ngf-dialog", host: { listeners: { "click": "onBackdropClick($event)" } }, viewQueries: [{ propertyName: "viewContainer", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "<div class=\"wrapper\">\n <div class=\"content\">\n <ng-template #container></ng-template>\n </div>\n</div>\n", styles: [":host{display:block;position:fixed;background-color:var(--ngf-dialog-backdrop-color)!important;visibility:visible!important;z-index:var(--ngf-dialog-z-index)!important;inset:0}:host>.wrapper{display:block;width:100%!important;height:100%!important;overflow:hidden auto}:host>.wrapper>.content{display:flex;flex-direction:column;justify-content:center;align-items:center;min-width:100%;min-height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
478
562
|
}
|
|
479
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
563
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialogComponent, decorators: [{
|
|
480
564
|
type: Component,
|
|
481
565
|
args: [{ selector: 'ngf-dialog', changeDetection: ChangeDetectionStrategy.Eager, imports: [], template: "<div class=\"wrapper\">\n <div class=\"content\">\n <ng-template #container></ng-template>\n </div>\n</div>\n", styles: [":host{display:block;position:fixed;background-color:var(--ngf-dialog-backdrop-color)!important;visibility:visible!important;z-index:var(--ngf-dialog-z-index)!important;inset:0}:host>.wrapper{display:block;width:100%!important;height:100%!important;overflow:hidden auto}:host>.wrapper>.content{display:flex;flex-direction:column;justify-content:center;align-items:center;min-width:100%;min-height:100%}\n"] }]
|
|
482
566
|
}], ctorParameters: () => [], propDecorators: { viewContainer: [{ type: i0.ViewChild, args: ['container', { ...{ read: ViewContainerRef }, isSignal: true }] }], onBackdropClick: [{
|
|
@@ -604,10 +688,10 @@ class NgFluxAlertDialog {
|
|
|
604
688
|
dialogRef.close();
|
|
605
689
|
}
|
|
606
690
|
}
|
|
607
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
608
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
691
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxAlertDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
692
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: NgFluxAlertDialog, isStandalone: true, selector: "ngf-dialog-box-alert", ngImport: i0, template: "@if (options.title) {\n <ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n </ngf-dialog-header>\n}\n\n<ngf-dialog-body>\n <div [innerHTML]=\"options.content\"></div>\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n @switch (btn) {\n @case ('flex') {<div ngf-flex-x></div>}\n\n @default {\n <ngf-button [theme]=\"btn.theme\" [size]=\"btn.size\" [direction]=\"btn.direction\" (click)=\"onButtonClick($event, btn)\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n }\n }\n</ngf-dialog-footer>\n", styles: [":host{display:block;width:90%;max-width:500px;background-color:#fff}:host .success{color:var(--ngf-success)}:host .error{color:var(--ngf-error)}\n"], dependencies: [{ kind: "component", type: NgFluxButton, selector: "ngf-button", inputs: ["icon", "theme", "type", "size", "direction", "block", "disabled"] }, { kind: "component", type: NgFluxDialogHeaderComponent, selector: "ngf-dialog-header", inputs: ["icon"] }, { kind: "component", type: NgFluxDialogBodyComponent, selector: "ngf-dialog-body" }, { kind: "component", type: NgFluxDialogFooterComponent, selector: "ngf-dialog-footer" }] });
|
|
609
693
|
}
|
|
610
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
694
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxAlertDialog, decorators: [{
|
|
611
695
|
type: Component,
|
|
612
696
|
args: [{ selector: 'ngf-dialog-box-alert', imports: [
|
|
613
697
|
NgFluxButton,
|
|
@@ -642,10 +726,10 @@ class NgFluxConfirmDialog {
|
|
|
642
726
|
onButtonClick(e, btn) {
|
|
643
727
|
btn.onClick?.call(null, e, btn, this.dialogRef);
|
|
644
728
|
}
|
|
645
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
646
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
729
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxConfirmDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
730
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: NgFluxConfirmDialog, isStandalone: true, selector: "ngf-dialog-box-confirm", ngImport: i0, template: "@if (options.title) {\n <ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n </ngf-dialog-header>\n}\n\n<ngf-dialog-body>\n <div [innerHTML]=\"options.content\"></div>\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n <ngf-button [theme]=\"btn.theme\" (click)=\"onButtonClick($event, btn)\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n</ngf-dialog-footer>\n", styles: [":host{display:block;width:90%;max-width:500px;background-color:#fff}\n"], dependencies: [{ kind: "component", type: NgFluxButton, selector: "ngf-button", inputs: ["icon", "theme", "type", "size", "direction", "block", "disabled"] }, { kind: "component", type: NgFluxDialogHeaderComponent, selector: "ngf-dialog-header", inputs: ["icon"] }, { kind: "component", type: NgFluxDialogFooterComponent, selector: "ngf-dialog-footer" }, { kind: "component", type: NgFluxDialogBodyComponent, selector: "ngf-dialog-body" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
647
731
|
}
|
|
648
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
732
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxConfirmDialog, decorators: [{
|
|
649
733
|
type: Component,
|
|
650
734
|
args: [{ selector: 'ngf-dialog-box-confirm', changeDetection: ChangeDetectionStrategy.Eager, imports: [
|
|
651
735
|
NgFluxButton,
|
|
@@ -686,10 +770,10 @@ class NgFluxPromptDialog {
|
|
|
686
770
|
onButtonClick(e, btn) {
|
|
687
771
|
btn.onClick?.call(null, e, btn, this.dialogRef);
|
|
688
772
|
}
|
|
689
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
690
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
773
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxPromptDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
774
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: NgFluxPromptDialog, isStandalone: true, selector: "ngf-dialog-box-prompt", ngImport: i0, template: "<ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n</ngf-dialog-header>\n\n<ngf-dialog-body>\n <div class=\"content\" [innerHTML]=\"options.content\"></div>\n <input type=\"text\" name=\"text\" [placeholder]=\"options.placeholder\" [(ngModel)]=\"text\">\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n <ngf-button [theme]=\"btn.theme\" (click)=\"onButtonClick($event, btn)\" [disabled]=\"btn.disabled?.() ?? false\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n</ngf-dialog-footer>\n", styles: [":host{display:block;width:90%;max-width:350px;background-color:#fff}:host .content{margin:0 0 10px}:host input{display:block;width:100%!important;border:1px solid #DDD;background-color:#fff;padding:10px 15px;font-size:1.2rem}:host input:focus{outline:2px solid #DDD;box-shadow:none!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NgFluxButton, selector: "ngf-button", inputs: ["icon", "theme", "type", "size", "direction", "block", "disabled"] }, { kind: "component", type: NgFluxDialogHeaderComponent, selector: "ngf-dialog-header", inputs: ["icon"] }, { kind: "component", type: NgFluxDialogFooterComponent, selector: "ngf-dialog-footer" }, { kind: "component", type: NgFluxDialogBodyComponent, selector: "ngf-dialog-body" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
691
775
|
}
|
|
692
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
776
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxPromptDialog, decorators: [{
|
|
693
777
|
type: Component,
|
|
694
778
|
args: [{ selector: 'ngf-dialog-box-prompt', changeDetection: ChangeDetectionStrategy.Eager, imports: [
|
|
695
779
|
FormsModule,
|
|
@@ -753,10 +837,10 @@ class NgFluxDialog {
|
|
|
753
837
|
});
|
|
754
838
|
return dialog.closed;
|
|
755
839
|
}
|
|
756
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
757
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
840
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialog, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
841
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialog, providedIn: 'root' });
|
|
758
842
|
}
|
|
759
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
843
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: NgFluxDialog, decorators: [{
|
|
760
844
|
type: Injectable,
|
|
761
845
|
args: [{ providedIn: 'root' }]
|
|
762
846
|
}] });
|
|
@@ -765,10 +849,16 @@ const provideNgFlux = (config) => {
|
|
|
765
849
|
config ??= {};
|
|
766
850
|
return makeEnvironmentProviders([
|
|
767
851
|
{ provide: NGF_CONFIG, useValue: config },
|
|
852
|
+
{ provide: TitleStrategy, useClass: RouteTitleStrategy },
|
|
768
853
|
NgFluxDialog,
|
|
769
854
|
NgFluxDialogInternal,
|
|
770
855
|
NgFluxLoading,
|
|
771
856
|
NgFluxLoadingInternal,
|
|
857
|
+
MetaInternal,
|
|
858
|
+
provideAppInitializer(() => {
|
|
859
|
+
const meta = inject(MetaInternal);
|
|
860
|
+
meta.initialize();
|
|
861
|
+
}),
|
|
772
862
|
provideAppInitializer(() => {
|
|
773
863
|
const dialog = inject(NgFluxDialogInternal);
|
|
774
864
|
dialog.initialize();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngflux-ngflux.mjs","sources":["../../../projects/ngflux/src/lib/interfaces/Config.ts","../../../projects/ngflux/src/lib/interfaces/Dialog.ts","../../../projects/ngflux/src/lib/components/button/button.component.ts","../../../projects/ngflux/src/lib/components/button/button.component.html","../../../projects/ngflux/src/lib/components/dialog/body/body.component.ts","../../../projects/ngflux/src/lib/components/dialog/body/body.component.html","../../../projects/ngflux/src/lib/components/dialog/footer/footer.component.ts","../../../projects/ngflux/src/lib/components/dialog/footer/footer.component.html","../../../projects/ngflux/src/lib/components/dialog/root/root.component.ts","../../../projects/ngflux/src/lib/components/dialog/root/root.component.html","../../../projects/ngflux/src/lib/internal/Dialog.ts","../../../projects/ngflux/src/lib/internal/DialogTokens.ts","../../../projects/ngflux/src/lib/components/dialog/header/header.component.ts","../../../projects/ngflux/src/lib/components/dialog/header/header.component.html","../../../projects/ngflux/src/lib/components/loading/main/main.component.ts","../../../projects/ngflux/src/lib/components/loading/main/main.component.html","../../../projects/ngflux/src/lib/components/loading/root/root.component.ts","../../../projects/ngflux/src/lib/components/loading/root/root.component.html","../../../projects/ngflux/src/lib/components/pagination/info/info.component.ts","../../../projects/ngflux/src/lib/components/pagination/info/info.component.html","../../../projects/ngflux/src/lib/components/pagination/pagination.component.ts","../../../projects/ngflux/src/lib/components/pagination/pagination.component.html","../../../projects/ngflux/src/lib/internal/Loading.ts","../../../projects/ngflux/src/lib/services/Loading.ts","../../../projects/ngflux/src/lib/components/dialog/main/main.component.ts","../../../projects/ngflux/src/lib/components/dialog/main/main.component.html","../../../projects/ngflux/src/lib/services/DialogRef.ts","../../../projects/ngflux/src/lib/services/DialogInstance.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/alert/alert.dialog.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/alert/alert.dialog.html","../../../projects/ngflux/src/lib/components/dialog/boxes/confirm/confirm.dialog.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/confirm/confirm.dialog.html","../../../projects/ngflux/src/lib/components/dialog/boxes/prompt/prompt.dialog.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/prompt/prompt.dialog.html","../../../projects/ngflux/src/lib/services/Dialog.ts","../../../projects/ngflux/src/lib/ngflux.ts","../../../projects/ngflux/src/public-api.ts","../../../projects/ngflux/src/ngflux-ngflux.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport type { NgFluxComponent } from \"./Component\";\nimport type { ButtonOptions } from \"./Button\";\nimport type { PaginationTransformer } from \"./Pagination\";\n\n// BEGIN: Loading\ntype LoadingOptions = {\n showOnRouteNavigation?: boolean;\n component?: NgFluxComponent;\n};\n// END: Loading\n\n// BEGIN: Dialog Options\ntype DialogAlertOptions = {\n okayButton?: ButtonOptions;\n};\n\ntype DialogConfirmOptions = {\n okayButton?: ButtonOptions;\n cancelButton?: ButtonOptions;\n};\n\ntype DialogPromptOptions = {\n submitButton?: ButtonOptions;\n cancelButton?: ButtonOptions;\n};\n\ntype DialogOptions = {\n alert?: DialogAlertOptions;\n confirm?: DialogConfirmOptions;\n prompt?: DialogPromptOptions;\n};\n// END: Dialog Options\n\n// BEGIN: Pagination\ntype PaginationOptions = {\n preload?: boolean;\n transform?: PaginationTransformer;\n limitOptions?: number[];\n limit?: number;\n};\n// END: Pagination\n\nexport type NgFluxConfig = {\n loading?: LoadingOptions;\n dialog?: DialogOptions;\n pagination?: PaginationOptions;\n};\n\nexport const NGF_CONFIG = new InjectionToken<NgFluxConfig>('ngf-config');\n","import { InjectionToken, Injector, Signal, ViewContainerRef } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nimport type { NgFluxDialogRef } from \"../services/DialogRef\";\nimport type { ButtonDirection, ButtonOptions, ButtonSize, ButtonTheme } from \"./Button\";\n\nexport type NgFluxDialogRoot = {\n viewContainer: Signal<ViewContainerRef>;\n injector: Injector;\n}\n\nexport type NgFluxDialogConfig = {\n closeOnEsc?: boolean;\n closeOnBackBtn?: boolean;\n backdropClose?: boolean;\n closeBtn?: boolean;\n data?: any\n};\n\nexport type NgFluxDialogCommand<T = any> = {\n name: string;\n value?: T;\n};\n\nexport const NGF_DIALOG_DATA = new InjectionToken<any>('ngf-dialog-data');\n\nexport type NgFluxDialogEvents<T = any> = {\n readonly closing: Observable<T | null>;\n readonly closed: Observable<T | null>;\n};\n\nexport type NgFluxDialogButtonObj<T = any> = ButtonOptions & {\n onClick?: (e: MouseEvent, btn: NgFluxDialogButton<T>, dialogRef: NgFluxDialogRef<T>) => void;\n disabled?: () => boolean;\n};\n\nexport type NgFluxDialogButton<T = any> = 'flex' | NgFluxDialogButtonObj<T>;\n\nexport type NgFluxDialogAlertOptions = {\n title?: string;\n content: string;\n buttons?: NgFluxDialogButton<boolean>[];\n};\n\nexport type NgFluxDialogConfirmOptions = {\n title?: string;\n content: string;\n okayButton?: NgFluxDialogButtonObj;\n cancelButton?: NgFluxDialogButtonObj;\n};\n\nexport type NgFluxDialogPromptOptions = {\n title: string;\n content: string;\n placeholder?: string,\n defaultValue?: string,\n submitButton?: NgFluxDialogButtonObj;\n cancelButton?: NgFluxDialogButtonObj;\n};\n","import { Component, computed, effect, ElementRef, HostBinding, inject, input, output } from '@angular/core';\nimport { NgClass } from '@angular/common';\n\nimport { ButtonDirection, ButtonSize, ButtonTheme, ButtonType } from '../../interfaces';\n\n@Component({\n selector: 'ngf-button',\n templateUrl: 'button.component.html',\n styleUrls: ['button.component.scss'],\n imports: [NgClass],\n})\nexport class NgFluxButton {\n private readonly ref: ElementRef<HTMLElement> = inject(ElementRef);\n\n readonly icon = input<string>();\n readonly theme = input<ButtonTheme>();\n readonly type = input<ButtonType>();\n readonly size = input<ButtonSize>();\n readonly direction = input<ButtonDirection>();\n\n readonly block = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n readonly btnClassNames = computed(() => {\n const names: string[] = [];\n\n const direction = this.direction() ?? 'normal';\n if (direction === 'reversed') names.push(direction);\n\n return names;\n });\n\n readonly classNames = computed(() => [this.theme() ?? 'default', this.size() ?? 'md'].join(' '));\n\n @HostBinding('class')\n get bindClass() { return this.classNames(); }\n\n @HostBinding('class.block')\n get isBlock() { return this.block(); }\n\n @HostBinding('class.disabled')\n get isDisabled() { return this.disabled(); }\n\n @HostBinding('tabIndex')\n get tabIndex() { return 1; }\n\n}\n","<button [type]=\"type()\" [disabled]=\"disabled()\">\n <div class=\"wrapper\" [ngClass]=\"btnClassNames()\">\n @if (icon(); as ico) {\n <div class=\"icon\">\n <i [ngClass]=\"ico\"></i>\n </div>\n }\n\n <div class=\"content\">\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</button>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ngf-dialog-body',\n templateUrl: 'body.component.html',\n styleUrls: ['body.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [],\n})\nexport class NgFluxDialogBodyComponent {\n //\n}\n","<ng-content></ng-content>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ngf-dialog-footer',\n templateUrl: 'footer.component.html',\n styleUrls: ['footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [],\n})\nexport class NgFluxDialogFooterComponent {\n //\n}\n","<ng-content></ng-content>\n","import {\n Component,\n inject,\n Injector,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\n\n@Component({\n selector: 'ngf-dialog-root',\n templateUrl: 'root.component.html',\n styleUrls: ['root.component.scss'],\n imports: [],\n})\nexport class NgFluxDialogRootComponent {\n\n readonly injector = inject(Injector);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n}\n","<ng-template #container></ng-template>\n","import { ApplicationRef, ComponentRef, computed, createComponent, effect, inject, Injectable, signal } from \"@angular/core\";\nimport { NgFluxDialogRootComponent } from \"../components/dialog/root/root.component\";\nimport { NgFluxDialogInstance } from \"../services/DialogInstance\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxDialogInternal {\n\n private readonly appRef = inject(ApplicationRef);\n\n private readonly list = signal<NgFluxDialogInstance[]>([]);\n\n readonly count = computed(() => this.list().length);\n readonly isOpen = computed(() => this.count() > 0);\n\n readonly active = computed(() => {\n const entries = this.cloneList();\n if (!entries.length) return null;\n\n const lastIndex = entries.length - 1;\n return entries[lastIndex];\n });\n\n readonly rootRef: ComponentRef<NgFluxDialogRootComponent>;\n\n constructor() {\n const { appRef } = this;\n\n this.rootRef = createComponent(NgFluxDialogRootComponent, {\n environmentInjector: appRef.injector,\n });\n\n const body = document.querySelector('body');\n\n effect(() => {\n const isOpen = this.isOpen();\n body?.classList.toggle('ngf-dialog-open', isOpen);\n });\n\n window.addEventListener('popstate', e => {\n const active = this.active();\n if (!active) return;\n\n history.forward();\n\n const config = active.config;\n\n if (config.closeOnBackBtn) {\n active.send({ name: 'backButton.close' });\n }\n });\n }\n\n initialize() {\n const { appRef, rootRef } = this;\n appRef.attachView(rootRef.hostView);\n\n const elem = rootRef.location.nativeElement as HTMLElement;\n document.body.appendChild(elem);\n }\n\n // ==========================\n\n private readonly cloneList = () => Array.from(this.list());\n\n private readonly indexOf = (item: NgFluxDialogInstance) => {\n const entries = this.list();\n return entries.indexOf(item);\n }\n\n readonly focus = () => {\n const item = this.active();\n item?.focus();\n }\n\n readonly add = (...items: NgFluxDialogInstance[]) => {\n const entries = this.cloneList();\n\n entries.push(...items);\n\n this.list.set(entries);\n\n // ====================\n\n history.pushState(null, '', location.href);\n }\n\n readonly remove = (item: NgFluxDialogInstance) => {\n history.back();\n\n const entries = this.cloneList();\n\n const index = this.indexOf(item);\n entries.splice(index, 1);\n\n this.list.set(entries);\n }\n\n readonly closeAll = () => {\n const entries = this.cloneList();\n\n while (entries.length) {\n const instance = entries.pop();\n instance?.close(false);\n }\n\n this.list.set(entries);\n }\n\n readonly clear = () => {\n this.list.set([]);\n }\n\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { NgFluxComponent, NgFluxDialogConfig } from \"../interfaces\";\nimport type { NgFluxDialogInstance } from \"../services\";\n\nexport const NGF_DIALOG_CONTENT = new InjectionToken<NgFluxComponent>('ngf-dialog-content');\n\nexport const NGF_DIALOG_CONFIG = new InjectionToken<NgFluxDialogConfig>('ngf-dialog-config');\n\nexport const NGF_DIALOG_INSTANCE = new InjectionToken<NgFluxDialogInstance>('ngf-dialog-instance');\n\nexport type OnDialogClose<T = any> = (data?: T) => void;\nexport const NGF_DIALOG_CLOSE_FN = new InjectionToken<OnDialogClose>('ngf-dialog-close-fn');\n","import { NgClass } from '@angular/common';\nimport { Component, inject, input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { NGF_DIALOG_CONFIG } from '../../../internal';\nimport { NgFluxDialogRef } from '../../../services';\n\n@Component({\n selector: 'ngf-dialog-header',\n templateUrl: 'header.component.html',\n styleUrls: ['header.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass],\n})\nexport class NgFluxDialogHeaderComponent {\n readonly config = inject(NGF_DIALOG_CONFIG);\n readonly dialogRef = inject(NgFluxDialogRef);\n\n readonly icon = input<string>();\n}\n","@if (icon(); as ico) {\n <div class=\"left\">\n <i [ngClass]=\"ico\"></i>\n </div>\n}\n\n<div class=\"middle\">\n <ng-content></ng-content>\n</div>\n\n@if (config.closeBtn) {\n <div class=\"right\" title=\"Close\" (click)=\"dialogRef.close()\">\n <i class=\"ngf-icon close\"></i>\n </div>\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngf-loading',\n templateUrl: 'main.component.html',\n styleUrls: ['main.component.scss'],\n imports: [],\n})\nexport class NgFluxLoadingComponent {}\n","<svg viewBox=\"25 25 50 50\">\n <circle r=\"20\" cy=\"50\" cx=\"50\"></circle>\n</svg>\n","import {\n Component,\n ComponentRef,\n computed,\n effect,\n HostBinding,\n inject,\n Injector,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { NgFluxLoadingComponent } from '../main/main.component';\nimport { NGF_CONFIG, NgFluxLoadingEntry } from '../../../interfaces';\n\n@Component({\n selector: 'ngf-loading-root',\n templateUrl: 'root.component.html',\n styleUrls: ['root.component.scss'],\n imports: [],\n})\nexport class NgFluxLoadingRootComponent {\n\n private readonly config = inject(NGF_CONFIG);\n private readonly injector = inject(Injector);\n\n private readonly entries = signal<NgFluxLoadingEntry[]>([]);\n\n readonly count = computed(() => this.entries().length);\n readonly isLoading = computed(() => this.count() > 0);\n\n @HostBinding('class.show')\n get showLoading() { return this.isLoading(); }\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n private componentRef!: ComponentRef<any>;\n\n constructor() {\n const { config, injector } = this;\n\n effect(() => {\n const viewContainer = this.viewContainer();\n const component = config.loading?.component ?? NgFluxLoadingComponent;\n\n const newInjector = Injector.create({\n parent: injector,\n providers: [],\n });\n\n this.componentRef = viewContainer.createComponent(component, {\n injector: newInjector,\n });\n });\n }\n\n readonly entry = computed(() => {\n const entries = this.entries();\n return entries.at(entries.length - 1);\n });\n\n readonly start = (text: string = '') => this.entries.update(v => {\n const entries = Array.from(v);\n entries.push({ text });\n return entries;\n });\n\n readonly stop = () => this.entries.update(v => {\n const entries = Array.from(v);\n entries.pop();\n return entries;\n });\n\n}\n","<div class=\"wrapper\">\n <ng-template #container></ng-template>\n</div>\n","import {\n Component,\n computed,\n inject,\n input,\n model,\n output,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { Pagination, PaginationInfo } from '../../../interfaces';\n\n@Component({\n selector: 'ngf-pagination-info',\n templateUrl: 'info.component.html',\n styleUrls: ['info.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [FormsModule],\n})\nexport class NgFluxPaginationInfo {\n readonly data = input.required<Pagination>();\n readonly callback = output<PaginationInfo>();\n\n readonly limit = model.required<number>();\n readonly limitOptions = input.required<number[]>();\n\n protected readonly info = computed(() => {\n const data = this.data();\n\n const from = data.from.toLocaleString();\n const to = data.to.toLocaleString();\n const total = data.total.toLocaleString();\n\n return `${from} - ${to} of ${total}`;\n });\n\n protected readonly disablePrev = computed(() => {\n const data = this.data();\n return data.currentPage <= 1;\n });\n\n protected readonly disableNext = computed(() => {\n const data = this.data();\n return data.currentPage >= data.lastPage;\n });\n\n protected prev() {\n const data = this.data();\n\n this.callback.emit({\n page: data.currentPage - 1,\n limit: data.perPage,\n });\n }\n\n protected next() {\n const data = this.data();\n\n this.callback.emit({\n page: data.currentPage + 1,\n limit: data.perPage,\n });\n }\n}\n","<div class=\"wrapper\">\n <div class=\"block limit\">\n <div>Per page</div>\n <select name=\"\" id=\"\" [(ngModel)]=\"limit\">\n @for (entry of limitOptions(); track $index) {\n <option [value]=\"entry\">{{ entry }}</option>\n }\n </select>\n </div>\n\n <div class=\"block info\">\n <div>{{ info() }}</div>\n </div>\n\n <div class=\"block nav\">\n <button (click)=\"prev()\" [disabled]=\"disablePrev()\">\n <i class=\"ngf-icon chevron-left\"></i>\n </button>\n\n <button (click)=\"next()\" [disabled]=\"disableNext()\">\n <i class=\"ngf-icon chevron-right\"></i>\n </button>\n </div>\n</div>\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { NgFluxPaginationInfo } from './info/info.component';\nimport { NGF_CONFIG, Pagination, PaginationInfo, PaginationTransformer } from '../../interfaces';\n\n@Component({\n selector: 'ngf-pagination',\n templateUrl: 'pagination.component.html',\n styleUrls: ['pagination.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgFluxPaginationInfo],\n})\nexport class NgFluxPagination {\n private readonly config = inject(NGF_CONFIG);\n\n readonly data = input.required<any>();\n readonly preload = input<boolean>(this.config.pagination?.preload ?? false);\n readonly transform = input<PaginationTransformer>();\n\n readonly limit = model<number>(this.config.pagination?.limit ?? 10);\n readonly limitOptions = input<number[]>(\n this.config.pagination?.limitOptions ?? [5, 10, 20, 30, 40, 50],\n );\n\n readonly callback = output<PaginationInfo>();\n\n protected readonly value = computed<Pagination>(() => {\n const { config } = this;\n\n const data = this.data();\n const transform = this.transform() ?? config.pagination?.transform;\n\n if (!transform) return data as Pagination;\n\n return {\n currentPage: transform.getCurrentPage(data),\n lastPage: transform.getLastPage(data),\n perPage: transform.getPerPage(data),\n from: transform.getFrom(data),\n to: transform.getTo(data),\n total: transform.getTotal(data),\n data: transform.getData(data),\n };\n });\n\n constructor() {\n let init = false;\n\n effect(() => {\n const limit = Number(this.limit());\n const preload = untracked(this.preload);\n const { currentPage: page } = untracked(this.value);\n\n if (preload || init) {\n this.callback.emit({ limit, page });\n }\n\n init = true;\n });\n }\n}\n","<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n","import { ApplicationRef, ComponentRef, computed, createComponent, EmbeddedViewRef, inject, Injectable, signal } from \"@angular/core\";\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from \"@angular/router\";\nimport { filter } from \"rxjs\";\n\nimport { NgFluxLoadingRootComponent } from \"../components\";\nimport { NGF_CONFIG } from \"../interfaces\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxLoadingInternal {\n\n private readonly config = inject(NGF_CONFIG);\n private readonly appRef = inject(ApplicationRef);\n private readonly router = inject(Router, { optional: true });\n\n readonly rootRef: ComponentRef<NgFluxLoadingRootComponent>;\n\n constructor() {\n const { appRef } = this;\n\n this.rootRef = createComponent(NgFluxLoadingRootComponent, {\n environmentInjector: appRef.injector,\n });\n }\n\n initialize() {\n const { appRef, rootRef } = this;\n appRef.attachView(rootRef.hostView);\n\n const elem = rootRef.location.nativeElement as HTMLElement;\n document.body.appendChild(elem);\n }\n\n showOnRouteNavigation() {\n const { config, router } = this;\n\n if (router && config.loading?.showOnRouteNavigation) {\n const root = this.rootRef.instance;\n\n const navStart = filter(nav => nav instanceof NavigationStart);\n router.events.pipe(navStart).subscribe(nav => root.start());\n\n const navEnd = filter(nav => nav instanceof NavigationEnd);\n router.events.pipe(navEnd).subscribe(nav => root.stop());\n\n const navCancel = filter(nav => nav instanceof NavigationCancel);\n router.events.pipe(navCancel).subscribe(nav => root.stop());\n\n const navError = filter(nav => nav instanceof NavigationError);\n router.events.pipe(navError).subscribe(nav => root.stop());\n }\n }\n\n}\n","import { computed, inject, Injectable } from \"@angular/core\";\nimport { NgFluxLoadingInternal } from \"../internal/Loading\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxLoading {\n\n private readonly internal = inject(NgFluxLoadingInternal);\n\n private readonly root = this.internal.rootRef.instance;\n\n readonly data = computed(() => this.root.entry());\n readonly isLoading = computed(() => this.root.isLoading());\n\n readonly start = (text: string = '') => this.root.start(text);\n readonly stop = () => this.root.stop();\n\n}\n","import {\n Component,\n ComponentRef,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n viewChild,\n ViewContainerRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { NGF_DIALOG_CLOSE_FN, NGF_DIALOG_CONFIG, NGF_DIALOG_CONTENT } from '../../../internal';\nimport { NGF_DIALOG_DATA } from '../../../interfaces';\nimport { NgFluxDialogInstance } from '../../../services';\n\ntype CloseFn = () => void;\n\n@Component({\n selector: 'ngf-dialog',\n templateUrl: 'main.component.html',\n styleUrls: ['main.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [],\n})\nexport class NgFluxDialogComponent {\n private readonly injector = inject(Injector);\n private readonly instance = inject(NgFluxDialogInstance);\n private readonly onClosed = inject(NGF_DIALOG_CLOSE_FN);\n private readonly content = inject(NGF_DIALOG_CONTENT);\n private readonly config = inject(NGF_DIALOG_CONFIG);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n private componentRef!: ComponentRef<any>;\n\n private data: any;\n\n constructor() {\n const { injector, content, config } = this;\n\n effect((onCleanup) => {\n const viewContainer = this.viewContainer();\n\n const newInjector = Injector.create({\n parent: injector,\n providers: [{ provide: NGF_DIALOG_DATA, useValue: config?.data ?? null }],\n });\n\n this.componentRef = viewContainer.createComponent(content, {\n injector: newInjector,\n });\n\n const { nativeElement } = this.componentRef.location as ElementRef<HTMLElement>;\n\n nativeElement.tabIndex = -1;\n nativeElement.classList.add('ngf-dialog-box');\n nativeElement.focus();\n\n nativeElement.addEventListener('click', this.onComponentClick);\n nativeElement.addEventListener('animationend', this.onAnimationComplete);\n\n onCleanup(() => {\n nativeElement.removeEventListener('click', this.onComponentClick);\n nativeElement.removeEventListener('animationend', this.onAnimationComplete);\n });\n });\n }\n\n @HostListener('click', ['$event'])\n onBackdropClick(e: MouseEvent) {\n const { instance } = this;\n\n instance.send({\n name: 'backdrop.close',\n value: false,\n });\n }\n\n private readonly onComponentClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n private readonly onAnimationComplete = (e: AnimationEvent) => {\n switch (e.animationName) {\n case 'ngfDialogOpen':\n {\n }\n break;\n\n case 'ngfDialogClose':\n {\n this.onClosed(this.data);\n }\n break;\n }\n };\n\n focus() {\n const ref = this.componentRef.location as ElementRef<HTMLElement>;\n ref.nativeElement.focus();\n }\n\n close(data?: any) {\n this.data = data;\n\n const ref = this.componentRef.location as ElementRef<HTMLElement>;\n ref.nativeElement.classList.add('close');\n }\n}\n","<div class=\"wrapper\">\n <div class=\"content\">\n <ng-template #container></ng-template>\n </div>\n</div>\n","import { NgFluxDialogCommand } from \"../interfaces\";\n\ntype OnClosed<T = any> = (cmd: NgFluxDialogCommand<T>) => void;\n\nexport class NgFluxDialogRef<T = any> {\n\n constructor(\n private readonly onClosed: OnClosed<T>\n ) {}\n\n readonly close = (value?: T) => this.onClosed({\n name: 'close',\n value,\n });\n\n}\n","import { ComponentRef, Injector, signal, ViewContainerRef } from \"@angular/core\";\nimport { AsyncSubject } from \"rxjs\";\n\nimport { NgFluxDialogCommand, NgFluxDialogConfig, NgFluxDialogEvents } from \"../interfaces/Dialog\";\nimport { NgFluxDialogComponent } from \"../components/dialog/main/main.component\";\nimport { NgFluxDialogRef } from \"./DialogRef\";\nimport { NGF_DIALOG_CLOSE_FN, NGF_DIALOG_CONFIG, NGF_DIALOG_CONTENT, NGF_DIALOG_INSTANCE } from \"../internal\";\nimport { NgFluxComponent } from \"../interfaces\";\n\ntype OnClosedFn<T = any> = (ins: NgFluxDialogInstance<T>) => void;\n\nexport class NgFluxDialogInstance<T = any> {\n\n private readonly xDialogComponentRef: ComponentRef<NgFluxDialogComponent> = null as any;\n\n private readonly xClosing = new AsyncSubject<T | null>();\n private readonly xAfterClosed = new AsyncSubject<T | null>();\n\n readonly events: NgFluxDialogEvents<T> = {\n closing: this.xClosing.asObservable(),\n closed: this.xAfterClosed.asObservable(),\n };\n\n constructor(\n private readonly viewContainer: ViewContainerRef,\n private readonly component: NgFluxComponent<any>,\n private readonly injector: Injector,\n private readonly onClosed: OnClosedFn<T>,\n readonly config: NgFluxDialogConfig,\n ) {\n const dialogRef = new NgFluxDialogRef<T>(this.onCommand);\n\n const newInjector = Injector.create({\n parent: injector,\n providers: [\n { provide: NgFluxDialogRef, useValue: dialogRef },\n { provide: NGF_DIALOG_CONFIG, useValue: config },\n { provide: NGF_DIALOG_CONTENT, useValue: component },\n { provide: NGF_DIALOG_CLOSE_FN, useValue: this.afterClosedFn },\n { provide: NgFluxDialogInstance, useValue: this }\n ],\n });\n\n this.xDialogComponentRef = viewContainer.createComponent(NgFluxDialogComponent, {\n injector: newInjector,\n index: undefined\n });\n }\n\n private readonly onCommand = (cmd: NgFluxDialogCommand<T>) => {\n const { config } = this;\n\n switch (cmd.name) {\n case 'esc.close': {\n if (config.closeOnEsc) this.close();\n } break;\n\n case 'backdrop.close': {\n if (config.backdropClose) this.close();\n } break;\n\n case 'backButton.close': {\n if (config.closeOnBackBtn) this.close();\n } break;\n\n case 'close': {\n this.close(cmd.value);\n } break;\n }\n }\n\n private readonly afterClosedFn = (data?: T) => {\n const { xDialogComponentRef } = this;\n xDialogComponentRef.destroy();\n\n this.xAfterClosed.next(data ?? null);\n this.xAfterClosed.complete();\n\n this.onClosed(this);\n }\n\n focus() {\n const { xDialogComponentRef: { instance } } = this;\n instance.focus();\n }\n\n close(data?: T) {\n const { xDialogComponentRef } = this;\n\n this.xClosing.next(data ?? null);\n this.xClosing.complete();\n\n xDialogComponentRef.instance.close(data);\n }\n\n send(cmd: NgFluxDialogCommand<T>) {\n this.onCommand(cmd);\n }\n\n}\n","import { Component, computed, inject } from '@angular/core';\n\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogAlertOptions,\n NgFluxDialogButton,\n NgFluxDialogButtonObj,\n} from '../../../../interfaces';\n\nimport { NgFluxDialogRef } from '../../../../services';\n\nimport { NgFluxDialogHeaderComponent } from '../../header/header.component';\nimport { NgFluxDialogBodyComponent } from '../../body/body.component';\nimport { NgFluxDialogFooterComponent } from '../../footer/footer.component';\nimport { NgFluxButton } from '../../../button/button.component';\n\n@Component({\n selector: 'ngf-dialog-box-alert',\n templateUrl: 'alert.dialog.html',\n styleUrls: ['alert.dialog.scss'],\n imports: [\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogBodyComponent,\n NgFluxDialogFooterComponent,\n ],\n})\nexport class NgFluxAlertDialog {\n\n readonly config = inject(NGF_CONFIG);\n readonly dialogRef = inject<NgFluxDialogRef<boolean>>(NgFluxDialogRef);\n readonly options: NgFluxDialogAlertOptions = inject(NGF_DIALOG_DATA);\n\n readonly buttons = computed<NgFluxDialogButton<boolean>[]>(() => {\n const config = this.config.dialog?.alert || {};\n\n return (\n this.options.buttons ?? [\n Object.assign(\n {\n text: 'Okay',\n theme: 'primary',\n onClick: (e, btn, ref) => ref.close(),\n } as NgFluxDialogButtonObj<boolean>,\n config.okayButton,\n ),\n ]\n );\n });\n\n onButtonClick(e: MouseEvent, btn: NgFluxDialogButtonObj<boolean>) {\n const { dialogRef } = this;\n\n if (btn.onClick) {\n btn.onClick(e, btn, dialogRef);\n } else {\n dialogRef.close();\n }\n }\n\n}\n","@if (options.title) {\n <ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n </ngf-dialog-header>\n}\n\n<ngf-dialog-body>\n <div [innerHTML]=\"options.content\"></div>\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n @switch (btn) {\n @case ('flex') {<div ngf-flex-x></div>}\n\n @default {\n <ngf-button [theme]=\"btn.theme\" [size]=\"btn.size\" [direction]=\"btn.direction\" (click)=\"onButtonClick($event, btn)\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n }\n }\n</ngf-dialog-footer>\n","import { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\n\nimport { NgFluxDialogHeaderComponent } from '../../header/header.component';\nimport { NgFluxDialogFooterComponent } from '../../footer/footer.component';\nimport { NgFluxDialogBodyComponent } from '../../body/body.component';\nimport { NgFluxButton } from '../../../button/button.component';\n\nimport { NgFluxDialogRef } from '../../../../services';\n\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogButtonObj,\n NgFluxDialogConfirmOptions,\n} from '../../../../interfaces';\n\n@Component({\n selector: 'ngf-dialog-box-confirm',\n templateUrl: 'confirm.dialog.html',\n styleUrls: ['confirm.dialog.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogFooterComponent,\n NgFluxDialogBodyComponent,\n ],\n})\nexport class NgFluxConfirmDialog {\n readonly config = inject(NGF_CONFIG);\n readonly dialogRef = inject<NgFluxDialogRef<boolean>>(NgFluxDialogRef);\n readonly options: NgFluxDialogConfirmOptions = inject(NGF_DIALOG_DATA);\n\n readonly buttons = computed(() => {\n const config = this.config.dialog?.prompt ?? {};\n\n return [\n this.options.cancelButton ??\n Object.assign(\n {\n text: 'Cancel',\n theme: 'dark',\n onClick: (e, btn, dialogRef) => dialogRef.close(),\n } as NgFluxDialogButtonObj,\n config.cancelButton,\n ),\n\n this.options.okayButton ??\n Object.assign(\n {\n text: 'Okay',\n theme: 'primary',\n onClick: (e, btn, dialogRef) => dialogRef.close(true),\n } as NgFluxDialogButtonObj,\n config.submitButton,\n ),\n ];\n });\n\n onButtonClick(e: MouseEvent, btn: NgFluxDialogButtonObj) {\n btn.onClick?.call(null, e, btn, this.dialogRef);\n }\n}\n","@if (options.title) {\n <ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n </ngf-dialog-header>\n}\n\n<ngf-dialog-body>\n <div [innerHTML]=\"options.content\"></div>\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n <ngf-button [theme]=\"btn.theme\" (click)=\"onButtonClick($event, btn)\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n</ngf-dialog-footer>\n","import { Component, computed, inject, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgFluxDialogHeaderComponent } from '../../header/header.component';\nimport { NgFluxDialogFooterComponent } from '../../footer/footer.component';\nimport { NgFluxDialogBodyComponent } from '../../body/body.component';\nimport { NgFluxButton } from '../../../button/button.component';\n\nimport { NgFluxDialogRef } from '../../../../services';\n\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogButtonObj,\n NgFluxDialogPromptOptions,\n} from '../../../../interfaces';\n\n@Component({\n selector: 'ngf-dialog-box-prompt',\n templateUrl: 'prompt.dialog.html',\n styleUrls: ['prompt.dialog.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n FormsModule,\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogFooterComponent,\n NgFluxDialogBodyComponent,\n ],\n})\nexport class NgFluxPromptDialog {\n readonly config = inject(NGF_CONFIG);\n readonly dialogRef = inject<NgFluxDialogRef<string>>(NgFluxDialogRef);\n readonly options: NgFluxDialogPromptOptions = inject(NGF_DIALOG_DATA);\n\n readonly text = signal(this.options.defaultValue ?? '');\n readonly value = computed(() => this.text().trim());\n\n readonly buttons = computed(() => {\n const config = this.config.dialog?.prompt ?? {};\n const value = this.value();\n\n return [\n this.options.cancelButton ??\n Object.assign(\n {\n text: 'Cancel',\n theme: 'dark',\n onClick: (e, btn, dialogRef) => dialogRef.close(),\n } as NgFluxDialogButtonObj,\n config.cancelButton,\n ),\n\n this.options.submitButton ??\n Object.assign(\n {\n text: 'Submit',\n theme: 'primary',\n onClick: (e, btn, dialogRef) => dialogRef.close(value),\n disabled: () => !value,\n } as NgFluxDialogButtonObj,\n config.submitButton,\n ),\n ];\n });\n\n onButtonClick(e: MouseEvent, btn: NgFluxDialogButtonObj) {\n btn.onClick?.call(null, e, btn, this.dialogRef);\n }\n}\n","<ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n</ngf-dialog-header>\n\n<ngf-dialog-body>\n <div class=\"content\" [innerHTML]=\"options.content\"></div>\n <input type=\"text\" name=\"text\" [placeholder]=\"options.placeholder\" [(ngModel)]=\"text\">\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n <ngf-button [theme]=\"btn.theme\" (click)=\"onButtonClick($event, btn)\" [disabled]=\"btn.disabled?.() ?? false\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n</ngf-dialog-footer>\n","import { inject, Injectable } from \"@angular/core\";\n\nimport { NgFluxDialogInstance } from \"./DialogInstance\";\nimport { NgFluxAlertDialog } from \"../components/dialog/boxes/alert/alert.dialog\";\nimport { NgFluxConfirmDialog } from \"../components/dialog/boxes/confirm/confirm.dialog\";\nimport { NgFluxPromptDialog } from \"../components/dialog/boxes/prompt/prompt.dialog\";\n\nimport { NgFluxDialogInternal } from \"../internal\";\n\nimport {\n NgFluxComponent,\n NgFluxDialogAlertOptions,\n NgFluxDialogButton,\n NgFluxDialogConfig,\n NgFluxDialogConfirmOptions,\n NgFluxDialogEvents,\n NgFluxDialogPromptOptions,\n} from \"../interfaces\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxDialog {\n\n private readonly internal = inject(NgFluxDialogInternal);\n\n open<T = any>(component: NgFluxComponent<any>, config?: NgFluxDialogConfig): NgFluxDialogEvents<T> {\n config ??= {};\n config.backdropClose ??= true;\n config.closeBtn ??= true;\n config.closeOnBackBtn ??= true;\n config.closeOnEsc ??= true;\n\n const { internal } = this;\n const root = internal.rootRef.instance;\n\n const onClosed = (ins: NgFluxDialogInstance<T>) => {\n internal.remove(ins);\n };\n\n const instance = new NgFluxDialogInstance<T>(\n root.viewContainer(),\n component,\n root.injector,\n onClosed,\n config\n );\n\n internal.add(instance);\n\n return instance.events;\n }\n\n readonly closeAll = () => this.internal.closeAll();\n\n alert(data: NgFluxDialogAlertOptions) {\n const dialog = this.open<boolean>(NgFluxAlertDialog, {\n closeOnBackBtn: false,\n backdropClose: false,\n closeOnEsc: false,\n data\n });\n\n return dialog.closed;\n }\n\n success(data: NgFluxDialogAlertOptions) {\n data.content = `<div class=\"success\">${data.content}</div>`;\n return this.alert(data);\n }\n\n error(data: NgFluxDialogAlertOptions) {\n data.content = `<div class=\"error\">${data.content}</div>`;\n return this.alert(data);\n }\n\n confirm(data: NgFluxDialogConfirmOptions) {\n const dialog = this.open(NgFluxConfirmDialog, {\n closeOnBackBtn: false,\n backdropClose: false,\n closeOnEsc: false,\n data\n });\n\n return dialog.closed;\n }\n\n prompt(data: NgFluxDialogPromptOptions) {\n const dialog = this.open(NgFluxPromptDialog, {\n closeOnBackBtn: false,\n backdropClose: false,\n closeOnEsc: false,\n data\n });\n\n return dialog.closed;\n }\n\n}\n","import { inject, makeEnvironmentProviders, provideAppInitializer } from \"@angular/core\";\n\nimport {\n NGF_CONFIG,\n NgFluxConfig,\n} from \"./interfaces\";\n\nimport {\n NgFluxDialog,\n NgFluxLoading,\n} from \"./services\";\n\nimport {\n NgFluxDialogInternal,\n NgFluxLoadingInternal,\n} from \"./internal\";\n\nexport const provideNgFlux = (config?: NgFluxConfig) => {\n config ??= {};\n\n return makeEnvironmentProviders([\n { provide: NGF_CONFIG, useValue: config },\n\n NgFluxDialog,\n NgFluxDialogInternal,\n\n NgFluxLoading,\n NgFluxLoadingInternal,\n\n provideAppInitializer(() => {\n const dialog = inject(NgFluxDialogInternal);\n dialog.initialize();\n }),\n\n provideAppInitializer(() => {\n const loading = inject(NgFluxLoadingInternal);\n\n loading.initialize();\n loading.showOnRouteNavigation();\n }),\n ]);\n};\n","/*\n * Public API Surface of ngflux\n */\n\n\nexport * from './lib/ngflux';\n\nexport * from './lib/components';\nexport * from './lib/interfaces';\nexport * from './lib/services';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngflux-ngflux.mjs","sources":["../../../projects/ngflux/src/lib/interfaces/Config.ts","../../../projects/ngflux/src/lib/interfaces/Dialog.ts","../../../projects/ngflux/src/lib/components/button/button.component.ts","../../../projects/ngflux/src/lib/components/button/button.component.html","../../../projects/ngflux/src/lib/components/dialog/body/body.component.ts","../../../projects/ngflux/src/lib/components/dialog/body/body.component.html","../../../projects/ngflux/src/lib/components/dialog/footer/footer.component.ts","../../../projects/ngflux/src/lib/components/dialog/footer/footer.component.html","../../../projects/ngflux/src/lib/components/dialog/root/root.component.ts","../../../projects/ngflux/src/lib/components/dialog/root/root.component.html","../../../projects/ngflux/src/lib/internal/Dialog.ts","../../../projects/ngflux/src/lib/internal/DialogTokens.ts","../../../projects/ngflux/src/lib/internal/RouteTitleStrategy.ts","../../../projects/ngflux/src/lib/internal/Meta.ts","../../../projects/ngflux/src/lib/components/dialog/header/header.component.ts","../../../projects/ngflux/src/lib/components/dialog/header/header.component.html","../../../projects/ngflux/src/lib/components/loading/main/main.component.ts","../../../projects/ngflux/src/lib/components/loading/main/main.component.html","../../../projects/ngflux/src/lib/components/loading/root/root.component.ts","../../../projects/ngflux/src/lib/components/loading/root/root.component.html","../../../projects/ngflux/src/lib/components/pagination/info/info.component.ts","../../../projects/ngflux/src/lib/components/pagination/info/info.component.html","../../../projects/ngflux/src/lib/components/pagination/pagination.component.ts","../../../projects/ngflux/src/lib/components/pagination/pagination.component.html","../../../projects/ngflux/src/lib/internal/Loading.ts","../../../projects/ngflux/src/lib/services/Loading.ts","../../../projects/ngflux/src/lib/components/dialog/main/main.component.ts","../../../projects/ngflux/src/lib/components/dialog/main/main.component.html","../../../projects/ngflux/src/lib/services/DialogRef.ts","../../../projects/ngflux/src/lib/services/DialogInstance.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/alert/alert.dialog.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/alert/alert.dialog.html","../../../projects/ngflux/src/lib/components/dialog/boxes/confirm/confirm.dialog.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/confirm/confirm.dialog.html","../../../projects/ngflux/src/lib/components/dialog/boxes/prompt/prompt.dialog.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/prompt/prompt.dialog.html","../../../projects/ngflux/src/lib/services/Dialog.ts","../../../projects/ngflux/src/lib/ngflux.ts","../../../projects/ngflux/src/public-api.ts","../../../projects/ngflux/src/ngflux-ngflux.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport type { NgFluxComponent } from \"./Component\";\nimport type { ButtonOptions } from \"./Button\";\nimport type { PaginationTransformer } from \"./Pagination\";\n\nexport type NgFluxConfig = {\n loading?: LoadingOptions;\n dialog?: DialogOptions;\n pagination?: PaginationOptions;\n title?: RouterTitleOptions;\n};\n\nexport const NGF_CONFIG = new InjectionToken<NgFluxConfig>('ngf-config');\n\n// BEGIN: Router\ntype RouterTitleOptions = {\n separator?: string;\n prefix?: string;\n suffix?: string;\n};\n// END: Router\n\n\n// BEGIN: Loading\ntype LoadingOptions = {\n showOnRouteNavigation?: boolean;\n component?: NgFluxComponent;\n};\n// END: Loading\n\n// BEGIN: Dialog Options\ntype DialogAlertOptions = {\n okayButton?: ButtonOptions;\n};\n\ntype DialogConfirmOptions = {\n okayButton?: ButtonOptions;\n cancelButton?: ButtonOptions;\n};\n\ntype DialogPromptOptions = {\n submitButton?: ButtonOptions;\n cancelButton?: ButtonOptions;\n};\n\ntype DialogOptions = {\n alert?: DialogAlertOptions;\n confirm?: DialogConfirmOptions;\n prompt?: DialogPromptOptions;\n};\n// END: Dialog Options\n\n// BEGIN: Pagination\ntype PaginationOptions = {\n preload?: boolean;\n transform?: PaginationTransformer;\n limitOptions?: number[];\n limit?: number;\n};\n// END: Pagination\n","import { InjectionToken, Injector, Signal, ViewContainerRef } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nimport type { NgFluxDialogRef } from \"../services/DialogRef\";\nimport type { ButtonOptions } from \"./Button\";\n\nexport type NgFluxDialogRoot = {\n viewContainer: Signal<ViewContainerRef>;\n injector: Injector;\n}\n\nexport type NgFluxDialogConfig = {\n closeOnEsc?: boolean;\n closeOnBackBtn?: boolean;\n backdropClose?: boolean;\n closeBtn?: boolean;\n data?: any\n};\n\nexport type NgFluxDialogCommand<T = any> = {\n name: string;\n value?: T;\n};\n\nexport const NGF_DIALOG_DATA = new InjectionToken<any>('ngf-dialog-data');\n\nexport type NgFluxDialogEvents<T = any> = {\n readonly closing: Observable<T | null>;\n readonly closed: Observable<T | null>;\n};\n\nexport type NgFluxDialogButtonObj<T = any> = ButtonOptions & {\n onClick?: (e: MouseEvent, btn: NgFluxDialogButton<T>, dialogRef: NgFluxDialogRef<T>) => void;\n disabled?: () => boolean;\n};\n\nexport type NgFluxDialogButton<T = any> = 'flex' | NgFluxDialogButtonObj<T>;\n\nexport type NgFluxDialogAlertOptions = {\n title?: string;\n content: string;\n buttons?: NgFluxDialogButton<boolean>[];\n};\n\nexport type NgFluxDialogConfirmOptions = {\n title?: string;\n content: string;\n okayButton?: NgFluxDialogButtonObj;\n cancelButton?: NgFluxDialogButtonObj;\n};\n\nexport type NgFluxDialogPromptOptions = {\n title: string;\n content: string;\n placeholder?: string,\n defaultValue?: string,\n submitButton?: NgFluxDialogButtonObj;\n cancelButton?: NgFluxDialogButtonObj;\n};\n","import { Component, computed, effect, ElementRef, HostBinding, inject, input, output } from '@angular/core';\nimport { NgClass } from '@angular/common';\n\nimport { ButtonDirection, ButtonSize, ButtonTheme, ButtonType } from '../../interfaces';\n\n@Component({\n selector: 'ngf-button',\n templateUrl: 'button.component.html',\n styleUrls: ['button.component.scss'],\n imports: [NgClass],\n})\nexport class NgFluxButton {\n private readonly ref: ElementRef<HTMLElement> = inject(ElementRef);\n\n readonly icon = input<string>();\n readonly theme = input<ButtonTheme>();\n readonly type = input<ButtonType>();\n readonly size = input<ButtonSize>();\n readonly direction = input<ButtonDirection>();\n\n readonly block = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n readonly btnClassNames = computed(() => {\n const names: string[] = [];\n\n const direction = this.direction() ?? 'normal';\n if (direction === 'reversed') names.push(direction);\n\n return names;\n });\n\n readonly classNames = computed(() => [this.theme() ?? 'default', this.size() ?? 'md'].join(' '));\n\n @HostBinding('class')\n get bindClass() { return this.classNames(); }\n\n @HostBinding('class.block')\n get isBlock() { return this.block(); }\n\n @HostBinding('class.disabled')\n get isDisabled() { return this.disabled(); }\n\n @HostBinding('tabIndex')\n get tabIndex() { return 1; }\n\n}\n","<button [type]=\"type()\" [disabled]=\"disabled()\">\n <div class=\"wrapper\" [ngClass]=\"btnClassNames()\">\n @if (icon(); as ico) {\n <div class=\"icon\">\n <i [ngClass]=\"ico\"></i>\n </div>\n }\n\n <div class=\"content\">\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</button>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ngf-dialog-body',\n templateUrl: 'body.component.html',\n styleUrls: ['body.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [],\n})\nexport class NgFluxDialogBodyComponent {\n //\n}\n","<ng-content></ng-content>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ngf-dialog-footer',\n templateUrl: 'footer.component.html',\n styleUrls: ['footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [],\n})\nexport class NgFluxDialogFooterComponent {\n //\n}\n","<ng-content></ng-content>\n","import {\n Component,\n inject,\n Injector,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\n\n@Component({\n selector: 'ngf-dialog-root',\n templateUrl: 'root.component.html',\n styleUrls: ['root.component.scss'],\n imports: [],\n})\nexport class NgFluxDialogRootComponent {\n\n readonly injector = inject(Injector);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n}\n","<ng-template #container></ng-template>\n","import { ApplicationRef, ComponentRef, computed, createComponent, effect, inject, Injectable, signal } from \"@angular/core\";\nimport { NgFluxDialogRootComponent } from \"../components/dialog/root/root.component\";\nimport { NgFluxDialogInstance } from \"../services/DialogInstance\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxDialogInternal {\n\n private readonly appRef = inject(ApplicationRef);\n\n private readonly list = signal<NgFluxDialogInstance[]>([]);\n\n readonly count = computed(() => this.list().length);\n readonly isOpen = computed(() => this.count() > 0);\n\n readonly active = computed(() => {\n const entries = this.cloneList();\n if (!entries.length) return null;\n\n const lastIndex = entries.length - 1;\n return entries[lastIndex];\n });\n\n readonly rootRef: ComponentRef<NgFluxDialogRootComponent>;\n\n constructor() {\n const { appRef } = this;\n\n this.rootRef = createComponent(NgFluxDialogRootComponent, {\n environmentInjector: appRef.injector,\n });\n\n const body = document.querySelector('body');\n\n effect(() => {\n const isOpen = this.isOpen();\n body?.classList.toggle('ngf-dialog-open', isOpen);\n });\n\n window.addEventListener('popstate', e => {\n const active = this.active();\n if (!active) return;\n\n history.forward();\n\n const config = active.config;\n\n if (config.closeOnBackBtn) {\n active.send({ name: 'backButton.close' });\n }\n });\n }\n\n initialize() {\n const { appRef, rootRef } = this;\n appRef.attachView(rootRef.hostView);\n\n const elem = rootRef.location.nativeElement as HTMLElement;\n document.body.appendChild(elem);\n }\n\n // ==========================\n\n private readonly cloneList = () => Array.from(this.list());\n\n private readonly indexOf = (item: NgFluxDialogInstance) => {\n const entries = this.list();\n return entries.indexOf(item);\n }\n\n readonly focus = () => {\n const item = this.active();\n item?.focus();\n }\n\n readonly add = (...items: NgFluxDialogInstance[]) => {\n const entries = this.cloneList();\n\n entries.push(...items);\n\n this.list.set(entries);\n\n // ====================\n\n history.pushState(null, '', location.href);\n }\n\n readonly remove = (item: NgFluxDialogInstance) => {\n history.back();\n\n const entries = this.cloneList();\n\n const index = this.indexOf(item);\n entries.splice(index, 1);\n\n this.list.set(entries);\n }\n\n readonly closeAll = () => {\n const entries = this.cloneList();\n\n while (entries.length) {\n const instance = entries.pop();\n instance?.close(false);\n }\n\n this.list.set(entries);\n }\n\n readonly clear = () => {\n this.list.set([]);\n }\n\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { NgFluxComponent, NgFluxDialogConfig } from \"../interfaces\";\nimport type { NgFluxDialogInstance } from \"../services\";\n\nexport const NGF_DIALOG_CONTENT = new InjectionToken<NgFluxComponent>('ngf-dialog-content');\n\nexport const NGF_DIALOG_CONFIG = new InjectionToken<NgFluxDialogConfig>('ngf-dialog-config');\n\nexport const NGF_DIALOG_INSTANCE = new InjectionToken<NgFluxDialogInstance>('ngf-dialog-instance');\n\nexport type OnDialogClose<T = any> = (data?: T) => void;\nexport const NGF_DIALOG_CLOSE_FN = new InjectionToken<OnDialogClose>('ngf-dialog-close-fn');\n","import { inject, Injectable } from \"@angular/core\";\nimport { Title } from \"@angular/platform-browser\";\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, TitleStrategy } from \"@angular/router\";\nimport { NGF_CONFIG, NgFluxRoute } from \"../interfaces\";\n\n@Injectable({ providedIn: 'root' })\nexport class RouteTitleStrategy extends TitleStrategy {\n\n private readonly config = inject(NGF_CONFIG);\n private readonly service = inject(Title);\n\n private getChildSnapshot(snapshot: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\n if (snapshot.firstChild) return this.getChildSnapshot(snapshot.firstChild);\n return snapshot;\n }\n\n private getParentTitle(snapshot: ActivatedRouteSnapshot): string | undefined {\n if (snapshot.parent) {\n const title = snapshot.parent.title;\n if (title) return title;\n\n return this.getParentTitle(snapshot.parent);\n }\n\n return undefined;\n }\n\n override updateTitle(snapshot: RouterStateSnapshot): void {\n const { config, service } = this;\n const entries: string[] = [];\n\n if (config.title?.prefix) entries.push(config.title.prefix);\n\n const child = this.getChildSnapshot(snapshot.root);\n const routeConfig = (child.routeConfig ?? {}) as NgFluxRoute;\n\n let routeTitle = routeConfig.getTitle?.(child.data) ?? this.buildTitle(snapshot);\n\n if (routeConfig.addParentTitle) {\n const parentTitle = this.getParentTitle(child);\n\n if (parentTitle) {\n const separator = routeConfig.parentTitleSeparator ?? ' - ';\n\n if (routeTitle) {\n routeTitle += separator + parentTitle;\n } else {\n routeTitle = parentTitle;\n }\n }\n }\n\n if (routeTitle) entries.push(routeTitle);\n if (config.title?.suffix) entries.push(config.title.suffix);\n\n const separator = config.title?.separator ?? ' | ';\n const title = entries.join(separator);\n\n if (title) service.setTitle(title);\n }\n\n}\n","import { inject, Injectable } from \"@angular/core\";\nimport { Meta } from \"@angular/platform-browser\";\nimport { ActivationEnd, Router } from \"@angular/router\";\nimport { filter, map } from \"rxjs\";\n\nimport { NgFluxRoute } from \"../interfaces\";\n\n@Injectable({ providedIn: 'root' })\nexport class MetaInternal {\n\n private readonly meta = inject(Meta);\n private readonly router = inject(Router);\n\n private readonly snapshot = this.router.events.pipe(\n filter(e => e instanceof ActivationEnd),\n filter(e => !e.snapshot.firstChild),\n map(e => e.snapshot),\n );\n\n initialize() {\n const { meta, snapshot } = this;\n\n const initialDescription = meta.getTag('name=\"description\"')?.content;\n const initialKeywords = meta.getTag('name=\"keywords\"')?.content;\n\n snapshot.subscribe(snap => {\n const config = (snap.routeConfig ?? {}) as NgFluxRoute;\n\n const description = config.getDescription?.(snap.data) ?? config.description ?? initialDescription;\n if (description) meta.updateTag({ name: 'description', content: description });\n\n let keywords = config.getKeywords?.(snap.data) ?? config.keywords ?? initialKeywords;\n if (Array.isArray(keywords)) keywords = keywords.join(', ');\n if (keywords) meta.updateTag({ name: 'keywords', content: keywords });\n });\n }\n\n}\n","import { NgClass } from '@angular/common';\nimport { Component, inject, input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { NGF_DIALOG_CONFIG } from '../../../internal';\nimport { NgFluxDialogRef } from '../../../services';\n\n@Component({\n selector: 'ngf-dialog-header',\n templateUrl: 'header.component.html',\n styleUrls: ['header.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass],\n})\nexport class NgFluxDialogHeaderComponent {\n readonly config = inject(NGF_DIALOG_CONFIG);\n readonly dialogRef = inject(NgFluxDialogRef);\n\n readonly icon = input<string>();\n}\n","@if (icon(); as ico) {\n <div class=\"left\">\n <i [ngClass]=\"ico\"></i>\n </div>\n}\n\n<div class=\"middle\">\n <ng-content></ng-content>\n</div>\n\n@if (config.closeBtn) {\n <div class=\"right\" title=\"Close\" (click)=\"dialogRef.close()\">\n <i class=\"ngf-icon close\"></i>\n </div>\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngf-loading',\n templateUrl: 'main.component.html',\n styleUrls: ['main.component.scss'],\n imports: [],\n})\nexport class NgFluxLoadingComponent {}\n","<svg viewBox=\"25 25 50 50\">\n <circle r=\"20\" cy=\"50\" cx=\"50\"></circle>\n</svg>\n","import {\n Component,\n ComponentRef,\n computed,\n effect,\n HostBinding,\n inject,\n Injector,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { NgFluxLoadingComponent } from '../main/main.component';\nimport { NGF_CONFIG, NgFluxLoadingEntry } from '../../../interfaces';\n\n@Component({\n selector: 'ngf-loading-root',\n templateUrl: 'root.component.html',\n styleUrls: ['root.component.scss'],\n imports: [],\n})\nexport class NgFluxLoadingRootComponent {\n\n private readonly config = inject(NGF_CONFIG);\n private readonly injector = inject(Injector);\n\n private readonly entries = signal<NgFluxLoadingEntry[]>([]);\n\n readonly count = computed(() => this.entries().length);\n readonly isLoading = computed(() => this.count() > 0);\n\n @HostBinding('class.show')\n get showLoading() { return this.isLoading(); }\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n private componentRef!: ComponentRef<any>;\n\n constructor() {\n const { config, injector } = this;\n\n effect(() => {\n const viewContainer = this.viewContainer();\n const component = config.loading?.component ?? NgFluxLoadingComponent;\n\n const newInjector = Injector.create({\n parent: injector,\n providers: [],\n });\n\n this.componentRef = viewContainer.createComponent(component, {\n injector: newInjector,\n });\n });\n }\n\n readonly entry = computed(() => {\n const entries = this.entries();\n return entries.at(entries.length - 1);\n });\n\n readonly start = (text: string = '') => this.entries.update(v => {\n const entries = Array.from(v);\n entries.push({ text });\n return entries;\n });\n\n readonly stop = () => this.entries.update(v => {\n const entries = Array.from(v);\n entries.pop();\n return entries;\n });\n\n}\n","<div class=\"wrapper\">\n <ng-template #container></ng-template>\n</div>\n","import {\n Component,\n computed,\n inject,\n input,\n model,\n output,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { Pagination, PaginationInfo } from '../../../interfaces';\n\n@Component({\n selector: 'ngf-pagination-info',\n templateUrl: 'info.component.html',\n styleUrls: ['info.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [FormsModule],\n})\nexport class NgFluxPaginationInfo {\n readonly data = input.required<Pagination>();\n readonly callback = output<PaginationInfo>();\n\n readonly limit = model.required<number>();\n readonly limitOptions = input.required<number[]>();\n\n protected readonly info = computed(() => {\n const data = this.data();\n\n const from = data.from.toLocaleString();\n const to = data.to.toLocaleString();\n const total = data.total.toLocaleString();\n\n return `${from} - ${to} of ${total}`;\n });\n\n protected readonly disablePrev = computed(() => {\n const data = this.data();\n return data.currentPage <= 1;\n });\n\n protected readonly disableNext = computed(() => {\n const data = this.data();\n return data.currentPage >= data.lastPage;\n });\n\n protected prev() {\n const data = this.data();\n\n this.callback.emit({\n page: data.currentPage - 1,\n limit: data.perPage,\n });\n }\n\n protected next() {\n const data = this.data();\n\n this.callback.emit({\n page: data.currentPage + 1,\n limit: data.perPage,\n });\n }\n}\n","<div class=\"wrapper\">\n <div class=\"block limit\">\n <div>Per page</div>\n <select name=\"\" id=\"\" [(ngModel)]=\"limit\">\n @for (entry of limitOptions(); track $index) {\n <option [value]=\"entry\">{{ entry }}</option>\n }\n </select>\n </div>\n\n <div class=\"block info\">\n <div>{{ info() }}</div>\n </div>\n\n <div class=\"block nav\">\n <button (click)=\"prev()\" [disabled]=\"disablePrev()\">\n <i class=\"ngf-icon chevron-left\"></i>\n </button>\n\n <button (click)=\"next()\" [disabled]=\"disableNext()\">\n <i class=\"ngf-icon chevron-right\"></i>\n </button>\n </div>\n</div>\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { NgFluxPaginationInfo } from './info/info.component';\nimport { NGF_CONFIG, Pagination, PaginationInfo, PaginationTransformer } from '../../interfaces';\n\n@Component({\n selector: 'ngf-pagination',\n templateUrl: 'pagination.component.html',\n styleUrls: ['pagination.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgFluxPaginationInfo],\n})\nexport class NgFluxPagination {\n private readonly config = inject(NGF_CONFIG);\n\n readonly data = input.required<any>();\n readonly preload = input<boolean>(this.config.pagination?.preload ?? false);\n readonly transform = input<PaginationTransformer>();\n\n readonly limit = model<number>(this.config.pagination?.limit ?? 10);\n readonly limitOptions = input<number[]>(this.config.pagination?.limitOptions ?? [5, 10, 20, 30, 40, 50]);\n\n readonly callback = output<PaginationInfo>();\n\n protected readonly value = computed<Pagination>(() => {\n const { config } = this;\n\n const data = this.data();\n const transform = this.transform() ?? config.pagination?.transform;\n\n if (!transform) return data as Pagination;\n\n return {\n currentPage: transform.getCurrentPage(data),\n lastPage: transform.getLastPage(data),\n perPage: transform.getPerPage(data),\n from: transform.getFrom(data),\n to: transform.getTo(data),\n total: transform.getTotal(data),\n data: transform.getData(data),\n };\n });\n\n constructor() {\n let init = false;\n\n effect(() => {\n const limit = Number(this.limit());\n const preload = untracked(this.preload);\n const { currentPage: page } = untracked(this.value);\n\n if (preload || init) {\n this.callback.emit({ limit, page });\n }\n\n init = true;\n });\n }\n}\n","<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n","import { ApplicationRef, ComponentRef, computed, createComponent, EmbeddedViewRef, inject, Injectable, signal } from \"@angular/core\";\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from \"@angular/router\";\nimport { filter } from \"rxjs\";\n\nimport { NgFluxLoadingRootComponent } from \"../components\";\nimport { NGF_CONFIG } from \"../interfaces\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxLoadingInternal {\n\n private readonly config = inject(NGF_CONFIG);\n private readonly appRef = inject(ApplicationRef);\n private readonly router = inject(Router, { optional: true });\n\n readonly rootRef: ComponentRef<NgFluxLoadingRootComponent>;\n\n constructor() {\n const { appRef } = this;\n\n this.rootRef = createComponent(NgFluxLoadingRootComponent, {\n environmentInjector: appRef.injector,\n });\n }\n\n initialize() {\n const { appRef, rootRef } = this;\n appRef.attachView(rootRef.hostView);\n\n const elem = rootRef.location.nativeElement as HTMLElement;\n document.body.appendChild(elem);\n }\n\n showOnRouteNavigation() {\n const { config, router } = this;\n\n if (router && config.loading?.showOnRouteNavigation) {\n const root = this.rootRef.instance;\n\n const navStart = filter(nav => nav instanceof NavigationStart);\n router.events.pipe(navStart).subscribe(nav => root.start());\n\n const navEnd = filter(nav => nav instanceof NavigationEnd);\n router.events.pipe(navEnd).subscribe(nav => root.stop());\n\n const navCancel = filter(nav => nav instanceof NavigationCancel);\n router.events.pipe(navCancel).subscribe(nav => root.stop());\n\n const navError = filter(nav => nav instanceof NavigationError);\n router.events.pipe(navError).subscribe(nav => root.stop());\n }\n }\n\n}\n","import { computed, inject, Injectable } from \"@angular/core\";\nimport { NgFluxLoadingInternal } from \"../internal/Loading\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxLoading {\n\n private readonly internal = inject(NgFluxLoadingInternal);\n\n private readonly root = this.internal.rootRef.instance;\n\n readonly data = computed(() => this.root.entry());\n readonly isLoading = computed(() => this.root.isLoading());\n\n readonly start = (text: string = '') => this.root.start(text);\n readonly stop = () => this.root.stop();\n\n}\n","import {\n Component,\n ComponentRef,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n viewChild,\n ViewContainerRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { NGF_DIALOG_CLOSE_FN, NGF_DIALOG_CONFIG, NGF_DIALOG_CONTENT } from '../../../internal';\nimport { NGF_DIALOG_DATA } from '../../../interfaces';\nimport { NgFluxDialogInstance } from '../../../services';\n\ntype CloseFn = () => void;\n\n@Component({\n selector: 'ngf-dialog',\n templateUrl: 'main.component.html',\n styleUrls: ['main.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [],\n})\nexport class NgFluxDialogComponent {\n private readonly injector = inject(Injector);\n private readonly instance = inject(NgFluxDialogInstance);\n private readonly onClosed = inject(NGF_DIALOG_CLOSE_FN);\n private readonly content = inject(NGF_DIALOG_CONTENT);\n private readonly config = inject(NGF_DIALOG_CONFIG);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n private componentRef!: ComponentRef<any>;\n\n private data: any;\n\n constructor() {\n const { injector, content, config } = this;\n\n effect((onCleanup) => {\n const viewContainer = this.viewContainer();\n\n const newInjector = Injector.create({\n parent: injector,\n providers: [{ provide: NGF_DIALOG_DATA, useValue: config?.data ?? null }],\n });\n\n this.componentRef = viewContainer.createComponent(content, {\n injector: newInjector,\n });\n\n const { nativeElement } = this.componentRef.location as ElementRef<HTMLElement>;\n\n nativeElement.tabIndex = -1;\n nativeElement.classList.add('ngf-dialog-box');\n nativeElement.focus();\n\n nativeElement.addEventListener('click', this.onComponentClick);\n nativeElement.addEventListener('animationend', this.onAnimationComplete);\n\n onCleanup(() => {\n nativeElement.removeEventListener('click', this.onComponentClick);\n nativeElement.removeEventListener('animationend', this.onAnimationComplete);\n });\n });\n }\n\n @HostListener('click', ['$event'])\n onBackdropClick(e: MouseEvent) {\n const { instance } = this;\n\n instance.send({\n name: 'backdrop.close',\n value: false,\n });\n }\n\n private readonly onComponentClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n private readonly onAnimationComplete = (e: AnimationEvent) => {\n switch (e.animationName) {\n case 'ngfDialogOpen':\n {\n }\n break;\n\n case 'ngfDialogClose':\n {\n this.onClosed(this.data);\n }\n break;\n }\n };\n\n focus() {\n const ref = this.componentRef.location as ElementRef<HTMLElement>;\n ref.nativeElement.focus();\n }\n\n close(data?: any) {\n this.data = data;\n\n const ref = this.componentRef.location as ElementRef<HTMLElement>;\n ref.nativeElement.classList.add('close');\n }\n}\n","<div class=\"wrapper\">\n <div class=\"content\">\n <ng-template #container></ng-template>\n </div>\n</div>\n","import { NgFluxDialogCommand } from \"../interfaces\";\n\ntype OnClosed<T = any> = (cmd: NgFluxDialogCommand<T>) => void;\n\nexport class NgFluxDialogRef<T = any> {\n\n constructor(\n private readonly onClosed: OnClosed<T>\n ) {}\n\n readonly close = (value?: T) => this.onClosed({\n name: 'close',\n value,\n });\n\n}\n","import { ComponentRef, Injector, signal, ViewContainerRef } from \"@angular/core\";\nimport { AsyncSubject } from \"rxjs\";\n\nimport { NgFluxDialogCommand, NgFluxDialogConfig, NgFluxDialogEvents } from \"../interfaces/Dialog\";\nimport { NgFluxDialogComponent } from \"../components/dialog/main/main.component\";\nimport { NgFluxDialogRef } from \"./DialogRef\";\nimport { NGF_DIALOG_CLOSE_FN, NGF_DIALOG_CONFIG, NGF_DIALOG_CONTENT, NGF_DIALOG_INSTANCE } from \"../internal\";\nimport { NgFluxComponent } from \"../interfaces\";\n\ntype OnClosedFn<T = any> = (ins: NgFluxDialogInstance<T>) => void;\n\nexport class NgFluxDialogInstance<T = any> {\n\n private readonly xDialogComponentRef: ComponentRef<NgFluxDialogComponent> = null as any;\n\n private readonly xClosing = new AsyncSubject<T | null>();\n private readonly xAfterClosed = new AsyncSubject<T | null>();\n\n readonly events: NgFluxDialogEvents<T> = {\n closing: this.xClosing.asObservable(),\n closed: this.xAfterClosed.asObservable(),\n };\n\n constructor(\n private readonly viewContainer: ViewContainerRef,\n private readonly component: NgFluxComponent<any>,\n private readonly injector: Injector,\n private readonly onClosed: OnClosedFn<T>,\n readonly config: NgFluxDialogConfig,\n ) {\n const dialogRef = new NgFluxDialogRef<T>(this.onCommand);\n\n const newInjector = Injector.create({\n parent: injector,\n providers: [\n { provide: NgFluxDialogRef, useValue: dialogRef },\n { provide: NGF_DIALOG_CONFIG, useValue: config },\n { provide: NGF_DIALOG_CONTENT, useValue: component },\n { provide: NGF_DIALOG_CLOSE_FN, useValue: this.afterClosedFn },\n { provide: NgFluxDialogInstance, useValue: this }\n ],\n });\n\n this.xDialogComponentRef = viewContainer.createComponent(NgFluxDialogComponent, {\n injector: newInjector,\n index: undefined\n });\n }\n\n private readonly onCommand = (cmd: NgFluxDialogCommand<T>) => {\n const { config } = this;\n\n switch (cmd.name) {\n case 'esc.close': {\n if (config.closeOnEsc) this.close();\n } break;\n\n case 'backdrop.close': {\n if (config.backdropClose) this.close();\n } break;\n\n case 'backButton.close': {\n if (config.closeOnBackBtn) this.close();\n } break;\n\n case 'close': {\n this.close(cmd.value);\n } break;\n }\n }\n\n private readonly afterClosedFn = (data?: T) => {\n const { xDialogComponentRef } = this;\n xDialogComponentRef.destroy();\n\n this.xAfterClosed.next(data ?? null);\n this.xAfterClosed.complete();\n\n this.onClosed(this);\n }\n\n focus() {\n const { xDialogComponentRef: { instance } } = this;\n instance.focus();\n }\n\n close(data?: T) {\n const { xDialogComponentRef } = this;\n\n this.xClosing.next(data ?? null);\n this.xClosing.complete();\n\n xDialogComponentRef.instance.close(data);\n }\n\n send(cmd: NgFluxDialogCommand<T>) {\n this.onCommand(cmd);\n }\n\n}\n","import { Component, computed, inject } from '@angular/core';\n\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogAlertOptions,\n NgFluxDialogButton,\n NgFluxDialogButtonObj,\n} from '../../../../interfaces';\n\nimport { NgFluxDialogRef } from '../../../../services';\n\nimport { NgFluxDialogHeaderComponent } from '../../header/header.component';\nimport { NgFluxDialogBodyComponent } from '../../body/body.component';\nimport { NgFluxDialogFooterComponent } from '../../footer/footer.component';\nimport { NgFluxButton } from '../../../button/button.component';\n\n@Component({\n selector: 'ngf-dialog-box-alert',\n templateUrl: 'alert.dialog.html',\n styleUrls: ['alert.dialog.scss'],\n imports: [\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogBodyComponent,\n NgFluxDialogFooterComponent,\n ],\n})\nexport class NgFluxAlertDialog {\n\n readonly config = inject(NGF_CONFIG);\n readonly dialogRef = inject<NgFluxDialogRef<boolean>>(NgFluxDialogRef);\n readonly options: NgFluxDialogAlertOptions = inject(NGF_DIALOG_DATA);\n\n readonly buttons = computed<NgFluxDialogButton<boolean>[]>(() => {\n const config = this.config.dialog?.alert || {};\n\n return (\n this.options.buttons ?? [\n Object.assign(\n {\n text: 'Okay',\n theme: 'primary',\n onClick: (e, btn, ref) => ref.close(),\n } as NgFluxDialogButtonObj<boolean>,\n config.okayButton,\n ),\n ]\n );\n });\n\n onButtonClick(e: MouseEvent, btn: NgFluxDialogButtonObj<boolean>) {\n const { dialogRef } = this;\n\n if (btn.onClick) {\n btn.onClick(e, btn, dialogRef);\n } else {\n dialogRef.close();\n }\n }\n\n}\n","@if (options.title) {\n <ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n </ngf-dialog-header>\n}\n\n<ngf-dialog-body>\n <div [innerHTML]=\"options.content\"></div>\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n @switch (btn) {\n @case ('flex') {<div ngf-flex-x></div>}\n\n @default {\n <ngf-button [theme]=\"btn.theme\" [size]=\"btn.size\" [direction]=\"btn.direction\" (click)=\"onButtonClick($event, btn)\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n }\n }\n</ngf-dialog-footer>\n","import { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\n\nimport { NgFluxDialogHeaderComponent } from '../../header/header.component';\nimport { NgFluxDialogFooterComponent } from '../../footer/footer.component';\nimport { NgFluxDialogBodyComponent } from '../../body/body.component';\nimport { NgFluxButton } from '../../../button/button.component';\n\nimport { NgFluxDialogRef } from '../../../../services';\n\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogButtonObj,\n NgFluxDialogConfirmOptions,\n} from '../../../../interfaces';\n\n@Component({\n selector: 'ngf-dialog-box-confirm',\n templateUrl: 'confirm.dialog.html',\n styleUrls: ['confirm.dialog.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogFooterComponent,\n NgFluxDialogBodyComponent,\n ],\n})\nexport class NgFluxConfirmDialog {\n readonly config = inject(NGF_CONFIG);\n readonly dialogRef = inject<NgFluxDialogRef<boolean>>(NgFluxDialogRef);\n readonly options: NgFluxDialogConfirmOptions = inject(NGF_DIALOG_DATA);\n\n readonly buttons = computed(() => {\n const config = this.config.dialog?.prompt ?? {};\n\n return [\n this.options.cancelButton ??\n Object.assign(\n {\n text: 'Cancel',\n theme: 'dark',\n onClick: (e, btn, dialogRef) => dialogRef.close(),\n } as NgFluxDialogButtonObj,\n config.cancelButton,\n ),\n\n this.options.okayButton ??\n Object.assign(\n {\n text: 'Okay',\n theme: 'primary',\n onClick: (e, btn, dialogRef) => dialogRef.close(true),\n } as NgFluxDialogButtonObj,\n config.submitButton,\n ),\n ];\n });\n\n onButtonClick(e: MouseEvent, btn: NgFluxDialogButtonObj) {\n btn.onClick?.call(null, e, btn, this.dialogRef);\n }\n}\n","@if (options.title) {\n <ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n </ngf-dialog-header>\n}\n\n<ngf-dialog-body>\n <div [innerHTML]=\"options.content\"></div>\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n <ngf-button [theme]=\"btn.theme\" (click)=\"onButtonClick($event, btn)\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n</ngf-dialog-footer>\n","import { Component, computed, inject, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgFluxDialogHeaderComponent } from '../../header/header.component';\nimport { NgFluxDialogFooterComponent } from '../../footer/footer.component';\nimport { NgFluxDialogBodyComponent } from '../../body/body.component';\nimport { NgFluxButton } from '../../../button/button.component';\n\nimport { NgFluxDialogRef } from '../../../../services';\n\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogButtonObj,\n NgFluxDialogPromptOptions,\n} from '../../../../interfaces';\n\n@Component({\n selector: 'ngf-dialog-box-prompt',\n templateUrl: 'prompt.dialog.html',\n styleUrls: ['prompt.dialog.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n FormsModule,\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogFooterComponent,\n NgFluxDialogBodyComponent,\n ],\n})\nexport class NgFluxPromptDialog {\n readonly config = inject(NGF_CONFIG);\n readonly dialogRef = inject<NgFluxDialogRef<string>>(NgFluxDialogRef);\n readonly options: NgFluxDialogPromptOptions = inject(NGF_DIALOG_DATA);\n\n readonly text = signal(this.options.defaultValue ?? '');\n readonly value = computed(() => this.text().trim());\n\n readonly buttons = computed(() => {\n const config = this.config.dialog?.prompt ?? {};\n const value = this.value();\n\n return [\n this.options.cancelButton ??\n Object.assign(\n {\n text: 'Cancel',\n theme: 'dark',\n onClick: (e, btn, dialogRef) => dialogRef.close(),\n } as NgFluxDialogButtonObj,\n config.cancelButton,\n ),\n\n this.options.submitButton ??\n Object.assign(\n {\n text: 'Submit',\n theme: 'primary',\n onClick: (e, btn, dialogRef) => dialogRef.close(value),\n disabled: () => !value,\n } as NgFluxDialogButtonObj,\n config.submitButton,\n ),\n ];\n });\n\n onButtonClick(e: MouseEvent, btn: NgFluxDialogButtonObj) {\n btn.onClick?.call(null, e, btn, this.dialogRef);\n }\n}\n","<ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n</ngf-dialog-header>\n\n<ngf-dialog-body>\n <div class=\"content\" [innerHTML]=\"options.content\"></div>\n <input type=\"text\" name=\"text\" [placeholder]=\"options.placeholder\" [(ngModel)]=\"text\">\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n <ngf-button [theme]=\"btn.theme\" (click)=\"onButtonClick($event, btn)\" [disabled]=\"btn.disabled?.() ?? false\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n</ngf-dialog-footer>\n","import { inject, Injectable } from \"@angular/core\";\n\nimport { NgFluxDialogInstance } from \"./DialogInstance\";\nimport { NgFluxAlertDialog } from \"../components/dialog/boxes/alert/alert.dialog\";\nimport { NgFluxConfirmDialog } from \"../components/dialog/boxes/confirm/confirm.dialog\";\nimport { NgFluxPromptDialog } from \"../components/dialog/boxes/prompt/prompt.dialog\";\n\nimport { NgFluxDialogInternal } from \"../internal\";\n\nimport {\n NgFluxComponent,\n NgFluxDialogAlertOptions,\n NgFluxDialogButton,\n NgFluxDialogConfig,\n NgFluxDialogConfirmOptions,\n NgFluxDialogEvents,\n NgFluxDialogPromptOptions,\n} from \"../interfaces\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxDialog {\n\n private readonly internal = inject(NgFluxDialogInternal);\n\n open<T = any>(component: NgFluxComponent<any>, config?: NgFluxDialogConfig): NgFluxDialogEvents<T> {\n config ??= {};\n config.backdropClose ??= true;\n config.closeBtn ??= true;\n config.closeOnBackBtn ??= true;\n config.closeOnEsc ??= true;\n\n const { internal } = this;\n const root = internal.rootRef.instance;\n\n const onClosed = (ins: NgFluxDialogInstance<T>) => {\n internal.remove(ins);\n };\n\n const instance = new NgFluxDialogInstance<T>(\n root.viewContainer(),\n component,\n root.injector,\n onClosed,\n config\n );\n\n internal.add(instance);\n\n return instance.events;\n }\n\n readonly closeAll = () => this.internal.closeAll();\n\n alert(data: NgFluxDialogAlertOptions) {\n const dialog = this.open<boolean>(NgFluxAlertDialog, {\n closeOnBackBtn: false,\n backdropClose: false,\n closeOnEsc: false,\n data\n });\n\n return dialog.closed;\n }\n\n success(data: NgFluxDialogAlertOptions) {\n data.content = `<div class=\"success\">${data.content}</div>`;\n return this.alert(data);\n }\n\n error(data: NgFluxDialogAlertOptions) {\n data.content = `<div class=\"error\">${data.content}</div>`;\n return this.alert(data);\n }\n\n confirm(data: NgFluxDialogConfirmOptions) {\n const dialog = this.open(NgFluxConfirmDialog, {\n closeOnBackBtn: false,\n backdropClose: false,\n closeOnEsc: false,\n data\n });\n\n return dialog.closed;\n }\n\n prompt(data: NgFluxDialogPromptOptions) {\n const dialog = this.open(NgFluxPromptDialog, {\n closeOnBackBtn: false,\n backdropClose: false,\n closeOnEsc: false,\n data\n });\n\n return dialog.closed;\n }\n\n}\n","import { inject, makeEnvironmentProviders, provideAppInitializer } from \"@angular/core\";\nimport { TitleStrategy } from \"@angular/router\";\n\nimport {\n NGF_CONFIG,\n NgFluxConfig,\n} from \"./interfaces\";\n\nimport {\n NgFluxDialog,\n NgFluxLoading,\n} from \"./services\";\n\nimport {\n MetaInternal,\n NgFluxDialogInternal,\n NgFluxLoadingInternal,\n RouteTitleStrategy,\n} from \"./internal\";\n\nexport const provideNgFlux = (config?: NgFluxConfig) => {\n config ??= {};\n\n return makeEnvironmentProviders([\n { provide: NGF_CONFIG, useValue: config },\n { provide: TitleStrategy, useClass: RouteTitleStrategy },\n\n NgFluxDialog,\n NgFluxDialogInternal,\n\n NgFluxLoading,\n NgFluxLoadingInternal,\n\n MetaInternal,\n\n provideAppInitializer(() => {\n const meta = inject(MetaInternal);\n meta.initialize();\n }),\n\n provideAppInitializer(() => {\n const dialog = inject(NgFluxDialogInternal);\n dialog.initialize();\n }),\n\n provideAppInitializer(() => {\n const loading = inject(NgFluxLoadingInternal);\n\n loading.initialize();\n loading.showOnRouteNavigation();\n }),\n ]);\n};\n","/*\n * Public API Surface of ngflux\n */\n\n\nexport * from './lib/ngflux';\n\nexport * from './lib/components';\nexport * from './lib/interfaces';\nexport * from './lib/services';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/types/ngflux-ngflux.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { InjectionToken, Signal, ViewContainerRef, Injector } from '@angular/cor
|
|
|
3
3
|
import * as _ngflux_ngflux from '@ngflux/ngflux';
|
|
4
4
|
import * as rxjs from 'rxjs';
|
|
5
5
|
import { Observable } from 'rxjs';
|
|
6
|
+
import { Route, Data } from '@angular/router';
|
|
6
7
|
|
|
7
8
|
type ButtonDirection = 'normal' | 'reversed';
|
|
8
9
|
type ButtonTheme = 'default' | 'primary' | 'secondary' | 'error' | 'danger' | 'success' | 'warning' | 'info' | 'light' | 'dark';
|
|
@@ -43,6 +44,18 @@ type PaginationInfo = {
|
|
|
43
44
|
page: number;
|
|
44
45
|
};
|
|
45
46
|
|
|
47
|
+
type NgFluxConfig = {
|
|
48
|
+
loading?: LoadingOptions;
|
|
49
|
+
dialog?: DialogOptions;
|
|
50
|
+
pagination?: PaginationOptions;
|
|
51
|
+
title?: RouterTitleOptions;
|
|
52
|
+
};
|
|
53
|
+
declare const NGF_CONFIG: InjectionToken<NgFluxConfig>;
|
|
54
|
+
type RouterTitleOptions = {
|
|
55
|
+
separator?: string;
|
|
56
|
+
prefix?: string;
|
|
57
|
+
suffix?: string;
|
|
58
|
+
};
|
|
46
59
|
type LoadingOptions = {
|
|
47
60
|
showOnRouteNavigation?: boolean;
|
|
48
61
|
component?: NgFluxComponent;
|
|
@@ -69,12 +82,6 @@ type PaginationOptions = {
|
|
|
69
82
|
limitOptions?: number[];
|
|
70
83
|
limit?: number;
|
|
71
84
|
};
|
|
72
|
-
type NgFluxConfig = {
|
|
73
|
-
loading?: LoadingOptions;
|
|
74
|
-
dialog?: DialogOptions;
|
|
75
|
-
pagination?: PaginationOptions;
|
|
76
|
-
};
|
|
77
|
-
declare const NGF_CONFIG: InjectionToken<NgFluxConfig>;
|
|
78
85
|
|
|
79
86
|
type OnClosed<T = any> = (cmd: NgFluxDialogCommand<T>) => void;
|
|
80
87
|
declare class NgFluxDialogRef<T = any> {
|
|
@@ -132,6 +139,18 @@ type NgFluxLoadingEntry = {
|
|
|
132
139
|
text: string;
|
|
133
140
|
};
|
|
134
141
|
|
|
142
|
+
type NgFluxRoutes = NgFluxRoute[];
|
|
143
|
+
type NgFluxRoute = Route & {
|
|
144
|
+
addParentTitle?: boolean;
|
|
145
|
+
parentTitleSeparator?: string;
|
|
146
|
+
description?: string;
|
|
147
|
+
keywords?: string | string[];
|
|
148
|
+
getTitle?: (data: Data) => string;
|
|
149
|
+
getDescription?: (data: Data) => string;
|
|
150
|
+
getKeywords?: (data: Data) => string | string[];
|
|
151
|
+
children?: NgFluxRoutes;
|
|
152
|
+
};
|
|
153
|
+
|
|
135
154
|
declare const provideNgFlux: (config?: NgFluxConfig) => _angular_core.EnvironmentProviders;
|
|
136
155
|
|
|
137
156
|
declare class NgFluxButton {
|
|
@@ -253,4 +272,4 @@ declare class NgFluxPagination {
|
|
|
253
272
|
}
|
|
254
273
|
|
|
255
274
|
export { NGF_CONFIG, NGF_DIALOG_DATA, NgFluxButton, NgFluxDialog, NgFluxDialogBodyComponent, NgFluxDialogFooterComponent, NgFluxDialogHeaderComponent, NgFluxDialogInstance, NgFluxDialogRef, NgFluxDialogRootComponent, NgFluxLoading, NgFluxLoadingRootComponent, NgFluxPagination, provideNgFlux };
|
|
256
|
-
export type { ButtonDirection, ButtonOptions, ButtonSize, ButtonTheme, ButtonType, NgFluxComponent, NgFluxConfig, NgFluxDialogAlertOptions, NgFluxDialogButton, NgFluxDialogButtonObj, NgFluxDialogCommand, NgFluxDialogConfig, NgFluxDialogConfirmOptions, NgFluxDialogEvents, NgFluxDialogPromptOptions, NgFluxDialogRoot, NgFluxLoadingEntry, Pagination, PaginationInfo, PaginationTransformer };
|
|
275
|
+
export type { ButtonDirection, ButtonOptions, ButtonSize, ButtonTheme, ButtonType, NgFluxComponent, NgFluxConfig, NgFluxDialogAlertOptions, NgFluxDialogButton, NgFluxDialogButtonObj, NgFluxDialogCommand, NgFluxDialogConfig, NgFluxDialogConfirmOptions, NgFluxDialogEvents, NgFluxDialogPromptOptions, NgFluxDialogRoot, NgFluxLoadingEntry, NgFluxRoute, NgFluxRoutes, Pagination, PaginationInfo, PaginationTransformer };
|