@ngflux/ngflux 2.0.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/README.md
CHANGED
|
@@ -12,18 +12,10 @@
|
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<a href="https://www.npmjs.com/package/@ngflux/ngflux" title="NPM version">
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
<a href="https://
|
|
19
|
-
<img src="https://img.shields.io/npm/dw/@ngflux/ngflux" alt="" />
|
|
20
|
-
</a>
|
|
21
|
-
<a href="LICENSE" title="MIT License">
|
|
22
|
-
<img src="https://img.shields.io/github/license/NgFlux/ngflux" alt="" />
|
|
23
|
-
</a>
|
|
24
|
-
<a href="https://github.com/NgFlux/ngflux/blob/main/CONTRIBUTING.md" title="PRs Welcome">
|
|
25
|
-
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square" alt="" />
|
|
26
|
-
</a>
|
|
15
|
+
<a href="https://www.npmjs.com/package/@ngflux/ngflux" title="NPM version"><img src="https://img.shields.io/npm/v/@ngflux/ngflux.svg?style=flat" alt="" /></a>
|
|
16
|
+
<a href="https://npmcharts.com/compare/@ngflux/ngflux?minimal=true" title="NPM downloads"><img src="https://img.shields.io/npm/dw/@ngflux/ngflux" alt="" /></a>
|
|
17
|
+
<a href="LICENSE" title="MIT License"><img src="https://img.shields.io/github/license/NgFlux/ngflux" alt="" /></a>
|
|
18
|
+
<a href="https://github.com/NgFlux/ngflux/blob/master/CONTRIBUTING.md" title="PRs Welcome"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square" alt="" /></a>
|
|
27
19
|
</p>
|
|
28
20
|
|
|
29
21
|
<hr>
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, ElementRef, input, computed, HostBinding,
|
|
3
|
-
import { Router, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';
|
|
4
|
-
import { filter, AsyncSubject } from 'rxjs';
|
|
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 { 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
|
|
|
@@ -36,26 +38,17 @@ class NgFluxButton {
|
|
|
36
38
|
...(ngDevMode ? [{ debugName: "btnClassNames" }] : /* istanbul ignore next */ []));
|
|
37
39
|
classNames = computed(() => [this.theme() ?? 'default', this.size() ?? 'md'].join(' '), /* @ts-ignore */
|
|
38
40
|
...(ngDevMode ? [{ debugName: "classNames" }] : /* istanbul ignore next */ []));
|
|
39
|
-
get bindClass() {
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
get
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
get isDisabled() {
|
|
46
|
-
return this.disabled();
|
|
47
|
-
}
|
|
48
|
-
constructor() {
|
|
49
|
-
const { ref: { nativeElement }, } = this;
|
|
50
|
-
nativeElement.tabIndex = 1;
|
|
51
|
-
}
|
|
52
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", 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" } }, 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"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
|
|
41
|
+
get bindClass() { return this.classNames(); }
|
|
42
|
+
get isBlock() { return this.block(); }
|
|
43
|
+
get isDisabled() { return this.disabled(); }
|
|
44
|
+
get tabIndex() { return 1; }
|
|
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"] }] });
|
|
54
47
|
}
|
|
55
|
-
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: [{
|
|
56
49
|
type: Component,
|
|
57
|
-
args: [{ selector: 'ngf-button',
|
|
58
|
-
}],
|
|
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"] }]
|
|
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: [{
|
|
59
52
|
type: HostBinding,
|
|
60
53
|
args: ['class']
|
|
61
54
|
}], isBlock: [{
|
|
@@ -64,33 +57,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
64
57
|
}], isDisabled: [{
|
|
65
58
|
type: HostBinding,
|
|
66
59
|
args: ['class.disabled']
|
|
60
|
+
}], tabIndex: [{
|
|
61
|
+
type: HostBinding,
|
|
62
|
+
args: ['tabIndex']
|
|
67
63
|
}] } });
|
|
68
64
|
|
|
69
65
|
class NgFluxDialogBodyComponent {
|
|
70
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
71
|
-
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 });
|
|
72
68
|
}
|
|
73
|
-
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: [{
|
|
74
70
|
type: Component,
|
|
75
71
|
args: [{ selector: 'ngf-dialog-body', changeDetection: ChangeDetectionStrategy.Eager, imports: [], template: "<ng-content></ng-content>\n", styles: [":host{display:block;padding:20px}\n"] }]
|
|
76
72
|
}] });
|
|
77
73
|
|
|
78
74
|
class NgFluxDialogFooterComponent {
|
|
79
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
80
|
-
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 });
|
|
81
77
|
}
|
|
82
|
-
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: [{
|
|
83
79
|
type: Component,
|
|
84
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"] }]
|
|
85
81
|
}] });
|
|
86
82
|
|
|
87
83
|
class NgFluxDialogRootComponent {
|
|
88
84
|
injector = inject(Injector);
|
|
89
|
-
viewContainer = viewChild.required('container', { read: ViewContainerRef });
|
|
90
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
91
|
-
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"] });
|
|
92
88
|
}
|
|
93
|
-
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: [{
|
|
94
90
|
type: Component,
|
|
95
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"] }]
|
|
96
92
|
}], propDecorators: { viewContainer: [{ type: i0.ViewChild, args: ['container', { ...{ read: ViewContainerRef }, isSignal: true }] }] } });
|
|
@@ -174,10 +170,10 @@ class NgFluxDialogInternal {
|
|
|
174
170
|
clear = () => {
|
|
175
171
|
this.list.set([]);
|
|
176
172
|
};
|
|
177
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
178
|
-
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' });
|
|
179
175
|
}
|
|
180
|
-
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: [{
|
|
181
177
|
type: Injectable,
|
|
182
178
|
args: [{ providedIn: 'root' }]
|
|
183
179
|
}], ctorParameters: () => [] });
|
|
@@ -187,26 +183,108 @@ const NGF_DIALOG_CONFIG = new InjectionToken('ngf-dialog-config');
|
|
|
187
183
|
const NGF_DIALOG_INSTANCE = new InjectionToken('ngf-dialog-instance');
|
|
188
184
|
const NGF_DIALOG_CLOSE_FN = new InjectionToken('ngf-dialog-close-fn');
|
|
189
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
|
+
|
|
190
268
|
class NgFluxDialogHeaderComponent {
|
|
191
269
|
config = inject(NGF_DIALOG_CONFIG);
|
|
192
270
|
dialogRef = inject(NgFluxDialogRef);
|
|
193
271
|
icon = input(/* @ts-ignore */
|
|
194
272
|
...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
195
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
196
|
-
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 });
|
|
197
275
|
}
|
|
198
|
-
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: [{
|
|
199
277
|
type: Component,
|
|
200
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"] }]
|
|
201
279
|
}], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }] } });
|
|
202
280
|
|
|
203
281
|
class NgFluxLoadingComponent {
|
|
204
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
205
|
-
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"] });
|
|
206
284
|
}
|
|
207
|
-
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: [{
|
|
208
286
|
type: Component,
|
|
209
|
-
args: [{ selector: 'ngf-loading',
|
|
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"] }]
|
|
210
288
|
}] });
|
|
211
289
|
|
|
212
290
|
class NgFluxLoadingRootComponent {
|
|
@@ -219,7 +297,7 @@ class NgFluxLoadingRootComponent {
|
|
|
219
297
|
isLoading = computed(() => this.count() > 0, /* @ts-ignore */
|
|
220
298
|
...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
221
299
|
get showLoading() { return this.isLoading(); }
|
|
222
|
-
viewContainer = viewChild.required('container', { read: ViewContainerRef });
|
|
300
|
+
viewContainer = viewChild.required('container', { ...(ngDevMode ? { debugName: "viewContainer" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
|
|
223
301
|
componentRef;
|
|
224
302
|
constructor() {
|
|
225
303
|
const { config, injector } = this;
|
|
@@ -250,10 +328,10 @@ class NgFluxLoadingRootComponent {
|
|
|
250
328
|
entries.pop();
|
|
251
329
|
return entries;
|
|
252
330
|
});
|
|
253
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
254
|
-
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"] });
|
|
255
333
|
}
|
|
256
|
-
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: [{
|
|
257
335
|
type: Component,
|
|
258
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"] }]
|
|
259
337
|
}], ctorParameters: () => [], propDecorators: { showLoading: [{
|
|
@@ -267,8 +345,8 @@ class NgFluxPaginationInfo {
|
|
|
267
345
|
callback = output();
|
|
268
346
|
limit = model.required(/* @ts-ignore */
|
|
269
347
|
...(ngDevMode ? [{ debugName: "limit" }] : /* istanbul ignore next */ []));
|
|
270
|
-
|
|
271
|
-
...(ngDevMode ? [{ debugName: "
|
|
348
|
+
limitOptions = input.required(/* @ts-ignore */
|
|
349
|
+
...(ngDevMode ? [{ debugName: "limitOptions" }] : /* istanbul ignore next */ []));
|
|
272
350
|
info = computed(() => {
|
|
273
351
|
const data = this.data();
|
|
274
352
|
const from = data.from.toLocaleString();
|
|
@@ -301,13 +379,13 @@ class NgFluxPaginationInfo {
|
|
|
301
379
|
limit: data.perPage,
|
|
302
380
|
});
|
|
303
381
|
}
|
|
304
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
305
|
-
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 });
|
|
306
384
|
}
|
|
307
|
-
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: [{
|
|
308
386
|
type: Component,
|
|
309
|
-
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
|
|
310
|
-
}], 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"] }],
|
|
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"] }]
|
|
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 }] }] } });
|
|
311
389
|
|
|
312
390
|
class NgFluxPagination {
|
|
313
391
|
config = inject(NGF_CONFIG);
|
|
@@ -319,8 +397,8 @@ class NgFluxPagination {
|
|
|
319
397
|
...(ngDevMode ? [undefined, { debugName: "transform" }] : /* istanbul ignore next */ []));
|
|
320
398
|
limit = model(this.config.pagination?.limit ?? 10, /* @ts-ignore */
|
|
321
399
|
...(ngDevMode ? [{ debugName: "limit" }] : /* istanbul ignore next */ []));
|
|
322
|
-
|
|
323
|
-
...(ngDevMode ? [{ debugName: "
|
|
400
|
+
limitOptions = input(this.config.pagination?.limitOptions ?? [5, 10, 20, 30, 40, 50], /* @ts-ignore */
|
|
401
|
+
...(ngDevMode ? [{ debugName: "limitOptions" }] : /* istanbul ignore next */ []));
|
|
324
402
|
callback = output();
|
|
325
403
|
value = computed(() => {
|
|
326
404
|
const { config } = this;
|
|
@@ -351,13 +429,13 @@ class NgFluxPagination {
|
|
|
351
429
|
init = true;
|
|
352
430
|
});
|
|
353
431
|
}
|
|
354
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
355
|
-
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 });
|
|
356
434
|
}
|
|
357
|
-
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: [{
|
|
358
436
|
type: Component,
|
|
359
|
-
args: [{ selector: 'ngf-pagination', changeDetection: ChangeDetectionStrategy.Eager, imports: [NgFluxPaginationInfo], template: "<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [
|
|
360
|
-
}], 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"] }],
|
|
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"] }]
|
|
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"] }] } });
|
|
361
439
|
|
|
362
440
|
class NgFluxLoadingInternal {
|
|
363
441
|
config = inject(NGF_CONFIG);
|
|
@@ -390,10 +468,10 @@ class NgFluxLoadingInternal {
|
|
|
390
468
|
router.events.pipe(navError).subscribe(nav => root.stop());
|
|
391
469
|
}
|
|
392
470
|
}
|
|
393
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
394
|
-
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' });
|
|
395
473
|
}
|
|
396
|
-
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: [{
|
|
397
475
|
type: Injectable,
|
|
398
476
|
args: [{ providedIn: 'root' }]
|
|
399
477
|
}], ctorParameters: () => [] });
|
|
@@ -407,10 +485,10 @@ class NgFluxLoading {
|
|
|
407
485
|
...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
408
486
|
start = (text = '') => this.root.start(text);
|
|
409
487
|
stop = () => this.root.stop();
|
|
410
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
411
|
-
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' });
|
|
412
490
|
}
|
|
413
|
-
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: [{
|
|
414
492
|
type: Injectable,
|
|
415
493
|
args: [{ providedIn: 'root' }]
|
|
416
494
|
}] });
|
|
@@ -421,7 +499,7 @@ class NgFluxDialogComponent {
|
|
|
421
499
|
onClosed = inject(NGF_DIALOG_CLOSE_FN);
|
|
422
500
|
content = inject(NGF_DIALOG_CONTENT);
|
|
423
501
|
config = inject(NGF_DIALOG_CONFIG);
|
|
424
|
-
viewContainer = viewChild.required('container', { read: ViewContainerRef });
|
|
502
|
+
viewContainer = viewChild.required('container', { ...(ngDevMode ? { debugName: "viewContainer" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
|
|
425
503
|
componentRef;
|
|
426
504
|
data;
|
|
427
505
|
constructor() {
|
|
@@ -479,10 +557,10 @@ class NgFluxDialogComponent {
|
|
|
479
557
|
const ref = this.componentRef.location;
|
|
480
558
|
ref.nativeElement.classList.add('close');
|
|
481
559
|
}
|
|
482
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
483
|
-
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 });
|
|
484
562
|
}
|
|
485
|
-
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: [{
|
|
486
564
|
type: Component,
|
|
487
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"] }]
|
|
488
566
|
}], ctorParameters: () => [], propDecorators: { viewContainer: [{ type: i0.ViewChild, args: ['container', { ...{ read: ViewContainerRef }, isSignal: true }] }], onBackdropClick: [{
|
|
@@ -610,17 +688,17 @@ class NgFluxAlertDialog {
|
|
|
610
688
|
dialogRef.close();
|
|
611
689
|
}
|
|
612
690
|
}
|
|
613
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
614
|
-
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" }] });
|
|
615
693
|
}
|
|
616
|
-
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: [{
|
|
617
695
|
type: Component,
|
|
618
|
-
args: [{ selector: 'ngf-dialog-box-alert',
|
|
696
|
+
args: [{ selector: 'ngf-dialog-box-alert', imports: [
|
|
619
697
|
NgFluxButton,
|
|
620
698
|
NgFluxDialogHeaderComponent,
|
|
621
699
|
NgFluxDialogBodyComponent,
|
|
622
700
|
NgFluxDialogFooterComponent,
|
|
623
|
-
], template: "<ngf-dialog-header>\n
|
|
701
|
+
], 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"] }]
|
|
624
702
|
}] });
|
|
625
703
|
|
|
626
704
|
class NgFluxConfirmDialog {
|
|
@@ -648,24 +726,24 @@ class NgFluxConfirmDialog {
|
|
|
648
726
|
onButtonClick(e, btn) {
|
|
649
727
|
btn.onClick?.call(null, e, btn, this.dialogRef);
|
|
650
728
|
}
|
|
651
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
652
|
-
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 });
|
|
653
731
|
}
|
|
654
|
-
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: [{
|
|
655
733
|
type: Component,
|
|
656
734
|
args: [{ selector: 'ngf-dialog-box-confirm', changeDetection: ChangeDetectionStrategy.Eager, imports: [
|
|
657
735
|
NgFluxButton,
|
|
658
736
|
NgFluxDialogHeaderComponent,
|
|
659
737
|
NgFluxDialogFooterComponent,
|
|
660
738
|
NgFluxDialogBodyComponent,
|
|
661
|
-
], template: "<ngf-dialog-header>\n
|
|
739
|
+
], 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"] }]
|
|
662
740
|
}] });
|
|
663
741
|
|
|
664
742
|
class NgFluxPromptDialog {
|
|
665
743
|
config = inject(NGF_CONFIG);
|
|
666
744
|
dialogRef = inject(NgFluxDialogRef);
|
|
667
745
|
options = inject(NGF_DIALOG_DATA);
|
|
668
|
-
text = signal('', /* @ts-ignore */
|
|
746
|
+
text = signal(this.options.defaultValue ?? '', /* @ts-ignore */
|
|
669
747
|
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
670
748
|
value = computed(() => this.text().trim(), /* @ts-ignore */
|
|
671
749
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
@@ -692,10 +770,10 @@ class NgFluxPromptDialog {
|
|
|
692
770
|
onButtonClick(e, btn) {
|
|
693
771
|
btn.onClick?.call(null, e, btn, this.dialogRef);
|
|
694
772
|
}
|
|
695
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
696
|
-
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 });
|
|
697
775
|
}
|
|
698
|
-
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: [{
|
|
699
777
|
type: Component,
|
|
700
778
|
args: [{ selector: 'ngf-dialog-box-prompt', changeDetection: ChangeDetectionStrategy.Eager, imports: [
|
|
701
779
|
FormsModule,
|
|
@@ -703,7 +781,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
703
781
|
NgFluxDialogHeaderComponent,
|
|
704
782
|
NgFluxDialogFooterComponent,
|
|
705
783
|
NgFluxDialogBodyComponent,
|
|
706
|
-
], 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\" [(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"] }]
|
|
784
|
+
], 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"] }]
|
|
707
785
|
}] });
|
|
708
786
|
|
|
709
787
|
class NgFluxDialog {
|
|
@@ -724,8 +802,7 @@ class NgFluxDialog {
|
|
|
724
802
|
return instance.events;
|
|
725
803
|
}
|
|
726
804
|
closeAll = () => this.internal.closeAll();
|
|
727
|
-
alert(
|
|
728
|
-
const data = { title, content, buttons };
|
|
805
|
+
alert(data) {
|
|
729
806
|
const dialog = this.open(NgFluxAlertDialog, {
|
|
730
807
|
closeOnBackBtn: false,
|
|
731
808
|
backdropClose: false,
|
|
@@ -734,13 +811,13 @@ class NgFluxDialog {
|
|
|
734
811
|
});
|
|
735
812
|
return dialog.closed;
|
|
736
813
|
}
|
|
737
|
-
success(
|
|
738
|
-
|
|
739
|
-
return this.alert(
|
|
814
|
+
success(data) {
|
|
815
|
+
data.content = `<div class="success">${data.content}</div>`;
|
|
816
|
+
return this.alert(data);
|
|
740
817
|
}
|
|
741
|
-
error(
|
|
742
|
-
|
|
743
|
-
return this.alert(
|
|
818
|
+
error(data) {
|
|
819
|
+
data.content = `<div class="error">${data.content}</div>`;
|
|
820
|
+
return this.alert(data);
|
|
744
821
|
}
|
|
745
822
|
confirm(data) {
|
|
746
823
|
const dialog = this.open(NgFluxConfirmDialog, {
|
|
@@ -760,10 +837,10 @@ class NgFluxDialog {
|
|
|
760
837
|
});
|
|
761
838
|
return dialog.closed;
|
|
762
839
|
}
|
|
763
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
764
|
-
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' });
|
|
765
842
|
}
|
|
766
|
-
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: [{
|
|
767
844
|
type: Injectable,
|
|
768
845
|
args: [{ providedIn: 'root' }]
|
|
769
846
|
}] });
|
|
@@ -772,10 +849,16 @@ const provideNgFlux = (config) => {
|
|
|
772
849
|
config ??= {};
|
|
773
850
|
return makeEnvironmentProviders([
|
|
774
851
|
{ provide: NGF_CONFIG, useValue: config },
|
|
852
|
+
{ provide: TitleStrategy, useClass: RouteTitleStrategy },
|
|
775
853
|
NgFluxDialog,
|
|
776
854
|
NgFluxDialogInternal,
|
|
777
855
|
NgFluxLoading,
|
|
778
856
|
NgFluxLoadingInternal,
|
|
857
|
+
MetaInternal,
|
|
858
|
+
provideAppInitializer(() => {
|
|
859
|
+
const meta = inject(MetaInternal);
|
|
860
|
+
meta.initialize();
|
|
861
|
+
}),
|
|
779
862
|
provideAppInitializer(() => {
|
|
780
863
|
const dialog = inject(NgFluxDialogInternal);
|
|
781
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 limitEntries?: 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 submitButton?: NgFluxDialogButtonObj;\n cancelButton?: NgFluxDialogButtonObj;\n};\n","import {\n Component,\n computed,\n ElementRef,\n HostBinding,\n inject,\n input,\n ChangeDetectionStrategy,\n} 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 changeDetection: ChangeDetectionStrategy.Eager,\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() {\n return this.classNames();\n }\n\n @HostBinding('class.block')\n get isBlock() {\n return this.block();\n }\n\n @HostBinding('class.disabled')\n get isDisabled() {\n return this.disabled();\n }\n\n constructor() {\n const {\n ref: { nativeElement },\n } = this;\n nativeElement.tabIndex = 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, computed, input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ngf-loading',\n templateUrl: 'main.component.html',\n styleUrls: ['main.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\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 limitEntries = 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 limitEntries(); 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 limitEntries = input<number[]>(\n this.config.pagination?.limitEntries ?? [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 [limitEntries]=\"limitEntries()\"\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 [limitEntries]=\"limitEntries()\"\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, ChangeDetectionStrategy } from '@angular/core';\n\nimport { NgFluxDialogRef } from '../../../../services';\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogAlertOptions,\n NgFluxDialogButton,\n NgFluxDialogButtonObj,\n} from '../../../../interfaces';\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 changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogBodyComponent,\n NgFluxDialogFooterComponent,\n ],\n})\nexport class NgFluxAlertDialog {\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","<ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n</ngf-dialog-header>\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","<ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n</ngf-dialog-header>\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('');\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\" [(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(title: string, content: string, buttons?: NgFluxDialogButton[]) {\n const data: NgFluxDialogAlertOptions = { title, content, buttons };\n\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(title: string, message: string, buttons?: NgFluxDialogButton[]) {\n message = `<div class=\"mbi-success\">${message}</div>`;\n return this.alert(title, message, buttons);\n }\n\n error(title: string, message: string, buttons?: NgFluxDialogButton[]) {\n message = `<div class=\"mbi-error\">${message}</div>`;\n return this.alert(title, message, buttons);\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;
|
|
@@ -66,15 +79,9 @@ type DialogOptions = {
|
|
|
66
79
|
type PaginationOptions = {
|
|
67
80
|
preload?: boolean;
|
|
68
81
|
transform?: PaginationTransformer;
|
|
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> {
|
|
@@ -109,12 +116,12 @@ type NgFluxDialogButtonObj<T = any> = ButtonOptions & {
|
|
|
109
116
|
};
|
|
110
117
|
type NgFluxDialogButton<T = any> = 'flex' | NgFluxDialogButtonObj<T>;
|
|
111
118
|
type NgFluxDialogAlertOptions = {
|
|
112
|
-
title
|
|
119
|
+
title?: string;
|
|
113
120
|
content: string;
|
|
114
121
|
buttons?: NgFluxDialogButton<boolean>[];
|
|
115
122
|
};
|
|
116
123
|
type NgFluxDialogConfirmOptions = {
|
|
117
|
-
title
|
|
124
|
+
title?: string;
|
|
118
125
|
content: string;
|
|
119
126
|
okayButton?: NgFluxDialogButtonObj;
|
|
120
127
|
cancelButton?: NgFluxDialogButtonObj;
|
|
@@ -122,6 +129,8 @@ type NgFluxDialogConfirmOptions = {
|
|
|
122
129
|
type NgFluxDialogPromptOptions = {
|
|
123
130
|
title: string;
|
|
124
131
|
content: string;
|
|
132
|
+
placeholder?: string;
|
|
133
|
+
defaultValue?: string;
|
|
125
134
|
submitButton?: NgFluxDialogButtonObj;
|
|
126
135
|
cancelButton?: NgFluxDialogButtonObj;
|
|
127
136
|
};
|
|
@@ -130,6 +139,18 @@ type NgFluxLoadingEntry = {
|
|
|
130
139
|
text: string;
|
|
131
140
|
};
|
|
132
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
|
+
|
|
133
154
|
declare const provideNgFlux: (config?: NgFluxConfig) => _angular_core.EnvironmentProviders;
|
|
134
155
|
|
|
135
156
|
declare class NgFluxButton {
|
|
@@ -146,7 +167,7 @@ declare class NgFluxButton {
|
|
|
146
167
|
get bindClass(): string;
|
|
147
168
|
get isBlock(): boolean;
|
|
148
169
|
get isDisabled(): boolean;
|
|
149
|
-
|
|
170
|
+
get tabIndex(): number;
|
|
150
171
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgFluxButton, never>;
|
|
151
172
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgFluxButton, "ngf-button", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "block": { "alias": "block"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
152
173
|
}
|
|
@@ -176,9 +197,9 @@ declare class NgFluxDialog {
|
|
|
176
197
|
private readonly internal;
|
|
177
198
|
open<T = any>(component: NgFluxComponent<any>, config?: NgFluxDialogConfig): NgFluxDialogEvents<T>;
|
|
178
199
|
readonly closeAll: () => void;
|
|
179
|
-
alert(
|
|
180
|
-
success(
|
|
181
|
-
error(
|
|
200
|
+
alert(data: NgFluxDialogAlertOptions): rxjs.Observable<boolean | null>;
|
|
201
|
+
success(data: NgFluxDialogAlertOptions): rxjs.Observable<boolean | null>;
|
|
202
|
+
error(data: NgFluxDialogAlertOptions): rxjs.Observable<boolean | null>;
|
|
182
203
|
confirm(data: NgFluxDialogConfirmOptions): rxjs.Observable<any>;
|
|
183
204
|
prompt(data: NgFluxDialogPromptOptions): rxjs.Observable<any>;
|
|
184
205
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgFluxDialog, never>;
|
|
@@ -242,13 +263,13 @@ declare class NgFluxPagination {
|
|
|
242
263
|
readonly preload: _angular_core.InputSignal<boolean>;
|
|
243
264
|
readonly transform: _angular_core.InputSignal<PaginationTransformer | undefined>;
|
|
244
265
|
readonly limit: _angular_core.ModelSignal<number>;
|
|
245
|
-
readonly
|
|
266
|
+
readonly limitOptions: _angular_core.InputSignal<number[]>;
|
|
246
267
|
readonly callback: _angular_core.OutputEmitterRef<PaginationInfo>;
|
|
247
268
|
protected readonly value: _angular_core.Signal<Pagination>;
|
|
248
269
|
constructor();
|
|
249
270
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgFluxPagination, never>;
|
|
250
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgFluxPagination, "ngf-pagination", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "preload": { "alias": "preload"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "
|
|
271
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgFluxPagination, "ngf-pagination", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "preload": { "alias": "preload"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "limitOptions": { "alias": "limitOptions"; "required": false; "isSignal": true; }; }, { "limit": "limitChange"; "callback": "callback"; }, never, ["*"], true, never>;
|
|
251
272
|
}
|
|
252
273
|
|
|
253
274
|
export { NGF_CONFIG, NGF_DIALOG_DATA, NgFluxButton, NgFluxDialog, NgFluxDialogBodyComponent, NgFluxDialogFooterComponent, NgFluxDialogHeaderComponent, NgFluxDialogInstance, NgFluxDialogRef, NgFluxDialogRootComponent, NgFluxLoading, NgFluxLoadingRootComponent, NgFluxPagination, provideNgFlux };
|
|
254
|
-
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 };
|