@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
- <img src="https://img.shields.io/npm/v/@ngflux/ngflux.svg?style=flat" alt="" />
17
- </a>
18
- <a href="https://npmcharts.com/compare/@ngflux/ngflux?minimal=true" title="NPM downloads">
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, ChangeDetectionStrategy, Component, Injector, viewChild, ViewContainerRef, ApplicationRef, signal, createComponent, effect, Injectable, output, model, untracked, HostListener, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
3
- import { Router, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';
4
- import { filter, AsyncSubject } from 'rxjs';
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
- return this.classNames();
41
- }
42
- get isBlock() {
43
- return this.block();
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.0", ngImport: i0, type: NgFluxButton, decorators: [{
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', changeDetection: ChangeDetectionStrategy.Eager, 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"] }]
58
- }], ctorParameters: () => [], 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: [{
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.0", ngImport: i0, type: NgFluxDialogBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
71
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: NgFluxDialogBodyComponent, isStandalone: true, selector: "ngf-dialog-body", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:block;padding:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.Eager });
66
+ 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.0", ngImport: i0, type: NgFluxDialogBodyComponent, decorators: [{
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.0", ngImport: i0, type: NgFluxDialogFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
80
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: NgFluxDialogFooterComponent, isStandalone: true, selector: "ngf-dialog-footer", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:flex;flex-direction:row;align-items:center;justify-content:end;position:sticky;background-color:var(--ngf-dialog-background-color)!important;border-top:var(--ngf-dialog-border)!important;padding:7px 15px;bottom:0;gap:10px}\n"], changeDetection: i0.ChangeDetectionStrategy.Eager });
75
+ 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.0", ngImport: i0, type: NgFluxDialogFooterComponent, decorators: [{
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.0", ngImport: i0, type: NgFluxDialogRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
91
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.0", 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"] });
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.0", ngImport: i0, type: NgFluxDialogRootComponent, decorators: [{
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.0", ngImport: i0, type: NgFluxDialogInternal, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
178
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxDialogInternal, providedIn: 'root' });
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.0", ngImport: i0, type: NgFluxDialogInternal, decorators: [{
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.0", ngImport: i0, type: NgFluxDialogHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
196
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", 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 });
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.0", ngImport: i0, type: NgFluxDialogHeaderComponent, decorators: [{
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.0", ngImport: i0, type: NgFluxLoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
205
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", 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"], changeDetection: i0.ChangeDetectionStrategy.Eager });
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.0", ngImport: i0, type: NgFluxLoadingComponent, decorators: [{
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', changeDetection: ChangeDetectionStrategy.Eager, 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"] }]
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.0", ngImport: i0, type: NgFluxLoadingRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
254
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.0", 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"] });
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.0", ngImport: i0, type: NgFluxLoadingRootComponent, decorators: [{
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
- limitEntries = input.required(/* @ts-ignore */
271
- ...(ngDevMode ? [{ debugName: "limitEntries" }] : /* istanbul ignore next */ []));
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.0", ngImport: i0, type: NgFluxPaginationInfo, deps: [], target: i0.ɵɵFactoryTarget.Component });
305
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", 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 }, limitEntries: { classPropertyName: "limitEntries", publicName: "limitEntries", 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 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", 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 });
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.0", ngImport: i0, type: NgFluxPaginationInfo, decorators: [{
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 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", 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"] }]
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"] }], limitEntries: [{ type: i0.Input, args: [{ isSignal: true, alias: "limitEntries", required: true }] }] } });
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
- limitEntries = input(this.config.pagination?.limitEntries ?? [5, 10, 20, 30, 40, 50], /* @ts-ignore */
323
- ...(ngDevMode ? [{ debugName: "limitEntries" }] : /* istanbul ignore next */ []));
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.0", ngImport: i0, type: NgFluxPagination, deps: [], target: i0.ɵɵFactoryTarget.Component });
355
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", 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 }, limitEntries: { classPropertyName: "limitEntries", publicName: "limitEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { limit: "limitChange", callback: "callback" }, ngImport: i0, template: "<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", styles: [":host{display:block}:host>.content{margin:20px 0}\n"], dependencies: [{ kind: "component", type: NgFluxPaginationInfo, selector: "ngf-pagination-info", inputs: ["data", "limit", "limitEntries"], outputs: ["callback", "limitChange"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
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.0", ngImport: i0, type: NgFluxPagination, decorators: [{
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 [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", styles: [":host{display:block}:host>.content{margin:20px 0}\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"] }], limitEntries: [{ type: i0.Input, args: [{ isSignal: true, alias: "limitEntries", required: false }] }], callback: [{ type: i0.Output, args: ["callback"] }] } });
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.0", ngImport: i0, type: NgFluxLoadingInternal, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
394
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxLoadingInternal, providedIn: 'root' });
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.0", ngImport: i0, type: NgFluxLoadingInternal, decorators: [{
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.0", ngImport: i0, type: NgFluxLoading, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
411
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxLoading, providedIn: 'root' });
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.0", ngImport: i0, type: NgFluxLoading, decorators: [{
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.0", ngImport: i0, type: NgFluxDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
483
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.0", 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 });
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.0", ngImport: i0, type: NgFluxDialogComponent, decorators: [{
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.0", ngImport: i0, type: NgFluxAlertDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
614
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: NgFluxAlertDialog, isStandalone: true, selector: "ngf-dialog-box-alert", 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 [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}\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" }], changeDetection: i0.ChangeDetectionStrategy.Eager });
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.0", ngImport: i0, type: NgFluxAlertDialog, decorators: [{
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', changeDetection: ChangeDetectionStrategy.Eager, imports: [
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 <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", styles: [":host{display:block;width:90%;max-width:500px;background-color:#fff}\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.0", ngImport: i0, type: NgFluxConfirmDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
652
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: NgFluxConfirmDialog, isStandalone: true, selector: "ngf-dialog-box-confirm", 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 [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 });
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.0", ngImport: i0, type: NgFluxConfirmDialog, decorators: [{
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 <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", styles: [":host{display:block;width:90%;max-width:500px;background-color:#fff}\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.0", ngImport: i0, type: NgFluxPromptDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
696
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", 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\" [(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 });
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.0", ngImport: i0, type: NgFluxPromptDialog, decorators: [{
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(title, content, buttons) {
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(title, message, buttons) {
738
- message = `<div class="mbi-success">${message}</div>`;
739
- return this.alert(title, message, buttons);
814
+ success(data) {
815
+ data.content = `<div class="success">${data.content}</div>`;
816
+ return this.alert(data);
740
817
  }
741
- error(title, message, buttons) {
742
- message = `<div class="mbi-error">${message}</div>`;
743
- return this.alert(title, message, buttons);
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.0", ngImport: i0, type: NgFluxDialog, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
764
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxDialog, providedIn: 'root' });
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.0", ngImport: i0, type: NgFluxDialog, decorators: [{
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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"}
@@ -3,4 +3,12 @@
3
3
  width: 90%;
4
4
  max-width: 500px;
5
5
  background-color: #FFF;
6
+
7
+ .success {
8
+ color: var(--ngf-success);
9
+ }
10
+
11
+ .error {
12
+ color: var(--ngf-error);
13
+ }
6
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngflux/ngflux",
3
- "version": "2.0.0",
3
+ "version": "2.1.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/NgFlux/ngflux.git"
@@ -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
- limitEntries?: number[];
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: string;
119
+ title?: string;
113
120
  content: string;
114
121
  buttons?: NgFluxDialogButton<boolean>[];
115
122
  };
116
123
  type NgFluxDialogConfirmOptions = {
117
- title: string;
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
- constructor();
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(title: string, content: string, buttons?: NgFluxDialogButton[]): rxjs.Observable<boolean | null>;
180
- success(title: string, message: string, buttons?: NgFluxDialogButton[]): rxjs.Observable<boolean | null>;
181
- error(title: string, message: string, buttons?: NgFluxDialogButton[]): rxjs.Observable<boolean | null>;
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 limitEntries: _angular_core.InputSignal<number[]>;
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; }; "limitEntries": { "alias": "limitEntries"; "required": false; "isSignal": true; }; }, { "limit": "limitChange"; "callback": "callback"; }, never, ["*"], true, never>;
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 };