@ngflux/ngflux 2.0.0 → 2.1.0

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,5 +1,5 @@
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';
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
3
  import { Router, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';
4
4
  import { filter, AsyncSubject } from 'rxjs';
5
5
  import { NgClass } from '@angular/common';
@@ -36,26 +36,17 @@ class NgFluxButton {
36
36
  ...(ngDevMode ? [{ debugName: "btnClassNames" }] : /* istanbul ignore next */ []));
37
37
  classNames = computed(() => [this.theme() ?? 'default', this.size() ?? 'md'].join(' '), /* @ts-ignore */
38
38
  ...(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
- }
39
+ get bindClass() { return this.classNames(); }
40
+ get isBlock() { return this.block(); }
41
+ get isDisabled() { return this.disabled(); }
42
+ get tabIndex() { return 1; }
52
43
  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 });
44
+ 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", "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
45
  }
55
46
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxButton, decorators: [{
56
47
  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: [{
48
+ args: [{ selector: 'ngf-button', imports: [NgClass], template: "<button [type]=\"type()\" [disabled]=\"disabled()\">\n <div class=\"wrapper\" [ngClass]=\"btnClassNames()\">\n @if (icon(); as ico) {\n <div class=\"icon\">\n <i [ngClass]=\"ico\"></i>\n </div>\n }\n\n <div class=\"content\">\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</button>\n", styles: [":host{display:inline-block;border:1px solid rgba(0,0,0,.2);border-radius:3px;cursor:pointer;font-size:1rem;overflow:clip}:host.block{display:block}:host.disabled{opacity:.5!important;-webkit-user-select:none!important;user-select:none!important;cursor:not-allowed}:host.xs{font-size:.6rem}:host.sm{font-size:.8rem}:host.md{font-size:1rem}:host.lg{font-size:1.25rem}:host.xl{font-size:1.5rem}:host.default{background-color:var(--ngf-default)!important;color:var(--ngf-default-fg)!important}:host.primary{background-color:var(--ngf-primary)!important;color:var(--ngf-primary-fg)!important}:host.secondary{background-color:var(--ngf-secondary)!important;color:var(--ngf-secondary-fg)!important}:host.error{background-color:var(--ngf-error)!important;color:var(--ngf-error-fg)!important}:host.danger{background-color:var(--ngf-danger)!important;color:var(--ngf-danger-fg)!important}:host.success{background-color:var(--ngf-success)!important;color:var(--ngf-success-fg)!important}:host.warning{background-color:var(--ngf-warning)!important;color:var(--ngf-warning-fg)!important}:host.info{background-color:var(--ngf-info)!important;color:var(--ngf-info-fg)!important}:host.light{background-color:var(--ngf-light)!important;color:var(--ngf-light-fg)!important}:host.dark{background-color:var(--ngf-dark)!important;color:var(--ngf-dark-fg)!important}:host>button{display:block;padding:0!important;background-color:transparent;border:none!important;width:100%!important;cursor:inherit!important;color:inherit!important;font-weight:500;font-size:1em}:host>button:focus{outline:none!important}:host .wrapper{display:flex;flex-direction:var(--flex-direction)!important;--flex-direction: row;--icon-border-left: none;--icon-border-right: 1px solid rgba(0, 0, 0, .2)}:host .wrapper.reversed{--flex-direction: row-reverse;--icon-border-left: 1px solid rgba(0, 0, 0, .2);--icon-border-right: none}:host .wrapper>.icon{display:flex;flex-direction:column;justify-content:center;align-items:center;font-size:1.05em;border-left:var(--icon-border-left)!important;border-right:var(--icon-border-right)!important;padding:0 .5em}:host .wrapper>.content{display:block;flex-grow:1;padding:.5em 1em;white-space:nowrap!important;text-align:center!important;text-overflow:ellipsis;overflow:hidden}\n"] }]
49
+ }], 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
50
  type: HostBinding,
60
51
  args: ['class']
61
52
  }], isBlock: [{
@@ -64,6 +55,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
64
55
  }], isDisabled: [{
65
56
  type: HostBinding,
66
57
  args: ['class.disabled']
58
+ }], tabIndex: [{
59
+ type: HostBinding,
60
+ args: ['tabIndex']
67
61
  }] } });
68
62
 
69
63
  class NgFluxDialogBodyComponent {
@@ -202,11 +196,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
202
196
 
203
197
  class NgFluxLoadingComponent {
204
198
  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 });
199
+ 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"] });
206
200
  }
207
201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxLoadingComponent, decorators: [{
208
202
  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"] }]
203
+ 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
204
  }] });
211
205
 
212
206
  class NgFluxLoadingRootComponent {
@@ -267,8 +261,8 @@ class NgFluxPaginationInfo {
267
261
  callback = output();
268
262
  limit = model.required(/* @ts-ignore */
269
263
  ...(ngDevMode ? [{ debugName: "limit" }] : /* istanbul ignore next */ []));
270
- limitEntries = input.required(/* @ts-ignore */
271
- ...(ngDevMode ? [{ debugName: "limitEntries" }] : /* istanbul ignore next */ []));
264
+ limitOptions = input.required(/* @ts-ignore */
265
+ ...(ngDevMode ? [{ debugName: "limitOptions" }] : /* istanbul ignore next */ []));
272
266
  info = computed(() => {
273
267
  const data = this.data();
274
268
  const from = data.from.toLocaleString();
@@ -302,12 +296,12 @@ class NgFluxPaginationInfo {
302
296
  });
303
297
  }
304
298
  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 });
299
+ 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 }, 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
300
  }
307
301
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxPaginationInfo, decorators: [{
308
302
  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 }] }] } });
303
+ args: [{ selector: 'ngf-pagination-info', changeDetection: ChangeDetectionStrategy.Eager, imports: [FormsModule], template: "<div class=\"wrapper\">\n <div class=\"block limit\">\n <div>Per page</div>\n <select name=\"\" id=\"\" [(ngModel)]=\"limit\">\n @for (entry of limitOptions(); track $index) {\n <option [value]=\"entry\">{{ entry }}</option>\n }\n </select>\n </div>\n\n <div class=\"block info\">\n <div>{{ info() }}</div>\n </div>\n\n <div class=\"block nav\">\n <button (click)=\"prev()\" [disabled]=\"disablePrev()\">\n <i class=\"ngf-icon chevron-left\"></i>\n </button>\n\n <button (click)=\"next()\" [disabled]=\"disableNext()\">\n <i class=\"ngf-icon chevron-right\"></i>\n </button>\n </div>\n</div>\n", styles: [":host{display:block;container:pagination/inline-size}:host .wrapper{display:flex;flex-direction:column;font-family:Poppins,sans-serif;align-items:end;text-align:center;font-size:.8rem;gap:5px}@container pagination (min-width: 400px){:host .wrapper{flex-direction:row;justify-content:end;align-items:center;gap:15px}}:host .wrapper .block{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:5px}:host .wrapper .limit>select{display:block;padding:2px 5px;font-size:inherit;outline:none!important;width:50px}:host .wrapper .nav>button{display:block;background-color:transparent;box-shadow:none!important;outline:none!important;cursor:pointer;border:none;padding:0}:host .wrapper .nav>button:disabled{cursor:default;color:#aaa}\n"] }]
304
+ }], 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
305
 
312
306
  class NgFluxPagination {
313
307
  config = inject(NGF_CONFIG);
@@ -319,8 +313,8 @@ class NgFluxPagination {
319
313
  ...(ngDevMode ? [undefined, { debugName: "transform" }] : /* istanbul ignore next */ []));
320
314
  limit = model(this.config.pagination?.limit ?? 10, /* @ts-ignore */
321
315
  ...(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 */ []));
316
+ limitOptions = input(this.config.pagination?.limitOptions ?? [5, 10, 20, 30, 40, 50], /* @ts-ignore */
317
+ ...(ngDevMode ? [{ debugName: "limitOptions" }] : /* istanbul ignore next */ []));
324
318
  callback = output();
325
319
  value = computed(() => {
326
320
  const { config } = this;
@@ -352,12 +346,12 @@ class NgFluxPagination {
352
346
  });
353
347
  }
354
348
  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 });
349
+ 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 }, 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
350
  }
357
351
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxPagination, decorators: [{
358
352
  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"] }] } });
353
+ args: [{ selector: 'ngf-pagination', changeDetection: ChangeDetectionStrategy.Eager, imports: [NgFluxPaginationInfo], template: "<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n", styles: [":host{display:block}:host>.content{margin:20px 0}\n"] }]
354
+ }], 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
355
 
362
356
  class NgFluxLoadingInternal {
363
357
  config = inject(NGF_CONFIG);
@@ -611,16 +605,16 @@ class NgFluxAlertDialog {
611
605
  }
612
606
  }
613
607
  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 });
608
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", 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
609
  }
616
610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxAlertDialog, decorators: [{
617
611
  type: Component,
618
- args: [{ selector: 'ngf-dialog-box-alert', changeDetection: ChangeDetectionStrategy.Eager, imports: [
612
+ args: [{ selector: 'ngf-dialog-box-alert', imports: [
619
613
  NgFluxButton,
620
614
  NgFluxDialogHeaderComponent,
621
615
  NgFluxDialogBodyComponent,
622
616
  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"] }]
617
+ ], 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
618
  }] });
625
619
 
626
620
  class NgFluxConfirmDialog {
@@ -649,7 +643,7 @@ class NgFluxConfirmDialog {
649
643
  btn.onClick?.call(null, e, btn, this.dialogRef);
650
644
  }
651
645
  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 });
646
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", 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
647
  }
654
648
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxConfirmDialog, decorators: [{
655
649
  type: Component,
@@ -658,14 +652,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
658
652
  NgFluxDialogHeaderComponent,
659
653
  NgFluxDialogFooterComponent,
660
654
  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"] }]
655
+ ], 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
656
  }] });
663
657
 
664
658
  class NgFluxPromptDialog {
665
659
  config = inject(NGF_CONFIG);
666
660
  dialogRef = inject(NgFluxDialogRef);
667
661
  options = inject(NGF_DIALOG_DATA);
668
- text = signal('', /* @ts-ignore */
662
+ text = signal(this.options.defaultValue ?? '', /* @ts-ignore */
669
663
  ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
670
664
  value = computed(() => this.text().trim(), /* @ts-ignore */
671
665
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
@@ -693,7 +687,7 @@ class NgFluxPromptDialog {
693
687
  btn.onClick?.call(null, e, btn, this.dialogRef);
694
688
  }
695
689
  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 });
690
+ 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\" [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
691
  }
698
692
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NgFluxPromptDialog, decorators: [{
699
693
  type: Component,
@@ -703,7 +697,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
703
697
  NgFluxDialogHeaderComponent,
704
698
  NgFluxDialogFooterComponent,
705
699
  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"] }]
700
+ ], 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
701
  }] });
708
702
 
709
703
  class NgFluxDialog {
@@ -724,8 +718,7 @@ class NgFluxDialog {
724
718
  return instance.events;
725
719
  }
726
720
  closeAll = () => this.internal.closeAll();
727
- alert(title, content, buttons) {
728
- const data = { title, content, buttons };
721
+ alert(data) {
729
722
  const dialog = this.open(NgFluxAlertDialog, {
730
723
  closeOnBackBtn: false,
731
724
  backdropClose: false,
@@ -734,13 +727,13 @@ class NgFluxDialog {
734
727
  });
735
728
  return dialog.closed;
736
729
  }
737
- success(title, message, buttons) {
738
- message = `<div class="mbi-success">${message}</div>`;
739
- return this.alert(title, message, buttons);
730
+ success(data) {
731
+ data.content = `<div class="success">${data.content}</div>`;
732
+ return this.alert(data);
740
733
  }
741
- error(title, message, buttons) {
742
- message = `<div class="mbi-error">${message}</div>`;
743
- return this.alert(title, message, buttons);
734
+ error(data) {
735
+ data.content = `<div class="error">${data.content}</div>`;
736
+ return this.alert(data);
744
737
  }
745
738
  confirm(data) {
746
739
  const dialog = this.open(NgFluxConfirmDialog, {
@@ -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/components/dialog/header/header.component.ts","../../../projects/ngflux/src/lib/components/dialog/header/header.component.html","../../../projects/ngflux/src/lib/components/loading/main/main.component.ts","../../../projects/ngflux/src/lib/components/loading/main/main.component.html","../../../projects/ngflux/src/lib/components/loading/root/root.component.ts","../../../projects/ngflux/src/lib/components/loading/root/root.component.html","../../../projects/ngflux/src/lib/components/pagination/info/info.component.ts","../../../projects/ngflux/src/lib/components/pagination/info/info.component.html","../../../projects/ngflux/src/lib/components/pagination/pagination.component.ts","../../../projects/ngflux/src/lib/components/pagination/pagination.component.html","../../../projects/ngflux/src/lib/internal/Loading.ts","../../../projects/ngflux/src/lib/services/Loading.ts","../../../projects/ngflux/src/lib/components/dialog/main/main.component.ts","../../../projects/ngflux/src/lib/components/dialog/main/main.component.html","../../../projects/ngflux/src/lib/services/DialogRef.ts","../../../projects/ngflux/src/lib/services/DialogInstance.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/alert/alert.dialog.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/alert/alert.dialog.html","../../../projects/ngflux/src/lib/components/dialog/boxes/confirm/confirm.dialog.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/confirm/confirm.dialog.html","../../../projects/ngflux/src/lib/components/dialog/boxes/prompt/prompt.dialog.ts","../../../projects/ngflux/src/lib/components/dialog/boxes/prompt/prompt.dialog.html","../../../projects/ngflux/src/lib/services/Dialog.ts","../../../projects/ngflux/src/lib/ngflux.ts","../../../projects/ngflux/src/public-api.ts","../../../projects/ngflux/src/ngflux-ngflux.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport type { NgFluxComponent } from \"./Component\";\nimport type { ButtonOptions } from \"./Button\";\nimport type { PaginationTransformer } from \"./Pagination\";\n\n// BEGIN: Loading\ntype LoadingOptions = {\n showOnRouteNavigation?: boolean;\n component?: NgFluxComponent;\n};\n// END: Loading\n\n// BEGIN: Dialog Options\ntype DialogAlertOptions = {\n okayButton?: ButtonOptions;\n};\n\ntype DialogConfirmOptions = {\n okayButton?: ButtonOptions;\n cancelButton?: ButtonOptions;\n};\n\ntype DialogPromptOptions = {\n submitButton?: ButtonOptions;\n cancelButton?: ButtonOptions;\n};\n\ntype DialogOptions = {\n alert?: DialogAlertOptions;\n confirm?: DialogConfirmOptions;\n prompt?: DialogPromptOptions;\n};\n// END: Dialog Options\n\n// BEGIN: Pagination\ntype PaginationOptions = {\n preload?: boolean;\n transform?: PaginationTransformer;\n limitOptions?: number[];\n limit?: number;\n};\n// END: Pagination\n\nexport type NgFluxConfig = {\n loading?: LoadingOptions;\n dialog?: DialogOptions;\n pagination?: PaginationOptions;\n};\n\nexport const NGF_CONFIG = new InjectionToken<NgFluxConfig>('ngf-config');\n","import { InjectionToken, Injector, Signal, ViewContainerRef } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nimport type { NgFluxDialogRef } from \"../services/DialogRef\";\nimport type { ButtonDirection, ButtonOptions, ButtonSize, ButtonTheme } from \"./Button\";\n\nexport type NgFluxDialogRoot = {\n viewContainer: Signal<ViewContainerRef>;\n injector: Injector;\n}\n\nexport type NgFluxDialogConfig = {\n closeOnEsc?: boolean;\n closeOnBackBtn?: boolean;\n backdropClose?: boolean;\n closeBtn?: boolean;\n data?: any\n};\n\nexport type NgFluxDialogCommand<T = any> = {\n name: string;\n value?: T;\n};\n\nexport const NGF_DIALOG_DATA = new InjectionToken<any>('ngf-dialog-data');\n\nexport type NgFluxDialogEvents<T = any> = {\n readonly closing: Observable<T | null>;\n readonly closed: Observable<T | null>;\n};\n\nexport type NgFluxDialogButtonObj<T = any> = ButtonOptions & {\n onClick?: (e: MouseEvent, btn: NgFluxDialogButton<T>, dialogRef: NgFluxDialogRef<T>) => void;\n disabled?: () => boolean;\n};\n\nexport type NgFluxDialogButton<T = any> = 'flex' | NgFluxDialogButtonObj<T>;\n\nexport type NgFluxDialogAlertOptions = {\n title?: string;\n content: string;\n buttons?: NgFluxDialogButton<boolean>[];\n};\n\nexport type NgFluxDialogConfirmOptions = {\n title?: string;\n content: string;\n okayButton?: NgFluxDialogButtonObj;\n cancelButton?: NgFluxDialogButtonObj;\n};\n\nexport type NgFluxDialogPromptOptions = {\n title: string;\n content: string;\n placeholder?: string,\n defaultValue?: string,\n submitButton?: NgFluxDialogButtonObj;\n cancelButton?: NgFluxDialogButtonObj;\n};\n","import { Component, computed, effect, ElementRef, HostBinding, inject, input, output } from '@angular/core';\nimport { NgClass } from '@angular/common';\n\nimport { ButtonDirection, ButtonSize, ButtonTheme, ButtonType } from '../../interfaces';\n\n@Component({\n selector: 'ngf-button',\n templateUrl: 'button.component.html',\n styleUrls: ['button.component.scss'],\n imports: [NgClass],\n})\nexport class NgFluxButton {\n private readonly ref: ElementRef<HTMLElement> = inject(ElementRef);\n\n readonly icon = input<string>();\n readonly theme = input<ButtonTheme>();\n readonly type = input<ButtonType>();\n readonly size = input<ButtonSize>();\n readonly direction = input<ButtonDirection>();\n\n readonly block = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n readonly btnClassNames = computed(() => {\n const names: string[] = [];\n\n const direction = this.direction() ?? 'normal';\n if (direction === 'reversed') names.push(direction);\n\n return names;\n });\n\n readonly classNames = computed(() => [this.theme() ?? 'default', this.size() ?? 'md'].join(' '));\n\n @HostBinding('class')\n get bindClass() { return this.classNames(); }\n\n @HostBinding('class.block')\n get isBlock() { return this.block(); }\n\n @HostBinding('class.disabled')\n get isDisabled() { return this.disabled(); }\n\n @HostBinding('tabIndex')\n get tabIndex() { return 1; }\n\n}\n","<button [type]=\"type()\" [disabled]=\"disabled()\">\n <div class=\"wrapper\" [ngClass]=\"btnClassNames()\">\n @if (icon(); as ico) {\n <div class=\"icon\">\n <i [ngClass]=\"ico\"></i>\n </div>\n }\n\n <div class=\"content\">\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</button>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ngf-dialog-body',\n templateUrl: 'body.component.html',\n styleUrls: ['body.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [],\n})\nexport class NgFluxDialogBodyComponent {\n //\n}\n","<ng-content></ng-content>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ngf-dialog-footer',\n templateUrl: 'footer.component.html',\n styleUrls: ['footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [],\n})\nexport class NgFluxDialogFooterComponent {\n //\n}\n","<ng-content></ng-content>\n","import {\n Component,\n inject,\n Injector,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\n\n@Component({\n selector: 'ngf-dialog-root',\n templateUrl: 'root.component.html',\n styleUrls: ['root.component.scss'],\n imports: [],\n})\nexport class NgFluxDialogRootComponent {\n\n readonly injector = inject(Injector);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n}\n","<ng-template #container></ng-template>\n","import { ApplicationRef, ComponentRef, computed, createComponent, effect, inject, Injectable, signal } from \"@angular/core\";\nimport { NgFluxDialogRootComponent } from \"../components/dialog/root/root.component\";\nimport { NgFluxDialogInstance } from \"../services/DialogInstance\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxDialogInternal {\n\n private readonly appRef = inject(ApplicationRef);\n\n private readonly list = signal<NgFluxDialogInstance[]>([]);\n\n readonly count = computed(() => this.list().length);\n readonly isOpen = computed(() => this.count() > 0);\n\n readonly active = computed(() => {\n const entries = this.cloneList();\n if (!entries.length) return null;\n\n const lastIndex = entries.length - 1;\n return entries[lastIndex];\n });\n\n readonly rootRef: ComponentRef<NgFluxDialogRootComponent>;\n\n constructor() {\n const { appRef } = this;\n\n this.rootRef = createComponent(NgFluxDialogRootComponent, {\n environmentInjector: appRef.injector,\n });\n\n const body = document.querySelector('body');\n\n effect(() => {\n const isOpen = this.isOpen();\n body?.classList.toggle('ngf-dialog-open', isOpen);\n });\n\n window.addEventListener('popstate', e => {\n const active = this.active();\n if (!active) return;\n\n history.forward();\n\n const config = active.config;\n\n if (config.closeOnBackBtn) {\n active.send({ name: 'backButton.close' });\n }\n });\n }\n\n initialize() {\n const { appRef, rootRef } = this;\n appRef.attachView(rootRef.hostView);\n\n const elem = rootRef.location.nativeElement as HTMLElement;\n document.body.appendChild(elem);\n }\n\n // ==========================\n\n private readonly cloneList = () => Array.from(this.list());\n\n private readonly indexOf = (item: NgFluxDialogInstance) => {\n const entries = this.list();\n return entries.indexOf(item);\n }\n\n readonly focus = () => {\n const item = this.active();\n item?.focus();\n }\n\n readonly add = (...items: NgFluxDialogInstance[]) => {\n const entries = this.cloneList();\n\n entries.push(...items);\n\n this.list.set(entries);\n\n // ====================\n\n history.pushState(null, '', location.href);\n }\n\n readonly remove = (item: NgFluxDialogInstance) => {\n history.back();\n\n const entries = this.cloneList();\n\n const index = this.indexOf(item);\n entries.splice(index, 1);\n\n this.list.set(entries);\n }\n\n readonly closeAll = () => {\n const entries = this.cloneList();\n\n while (entries.length) {\n const instance = entries.pop();\n instance?.close(false);\n }\n\n this.list.set(entries);\n }\n\n readonly clear = () => {\n this.list.set([]);\n }\n\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { NgFluxComponent, NgFluxDialogConfig } from \"../interfaces\";\nimport type { NgFluxDialogInstance } from \"../services\";\n\nexport const NGF_DIALOG_CONTENT = new InjectionToken<NgFluxComponent>('ngf-dialog-content');\n\nexport const NGF_DIALOG_CONFIG = new InjectionToken<NgFluxDialogConfig>('ngf-dialog-config');\n\nexport const NGF_DIALOG_INSTANCE = new InjectionToken<NgFluxDialogInstance>('ngf-dialog-instance');\n\nexport type OnDialogClose<T = any> = (data?: T) => void;\nexport const NGF_DIALOG_CLOSE_FN = new InjectionToken<OnDialogClose>('ngf-dialog-close-fn');\n","import { NgClass } from '@angular/common';\nimport { Component, inject, input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { NGF_DIALOG_CONFIG } from '../../../internal';\nimport { NgFluxDialogRef } from '../../../services';\n\n@Component({\n selector: 'ngf-dialog-header',\n templateUrl: 'header.component.html',\n styleUrls: ['header.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass],\n})\nexport class NgFluxDialogHeaderComponent {\n readonly config = inject(NGF_DIALOG_CONFIG);\n readonly dialogRef = inject(NgFluxDialogRef);\n\n readonly icon = input<string>();\n}\n","@if (icon(); as ico) {\n <div class=\"left\">\n <i [ngClass]=\"ico\"></i>\n </div>\n}\n\n<div class=\"middle\">\n <ng-content></ng-content>\n</div>\n\n@if (config.closeBtn) {\n <div class=\"right\" title=\"Close\" (click)=\"dialogRef.close()\">\n <i class=\"ngf-icon close\"></i>\n </div>\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngf-loading',\n templateUrl: 'main.component.html',\n styleUrls: ['main.component.scss'],\n imports: [],\n})\nexport class NgFluxLoadingComponent {}\n","<svg viewBox=\"25 25 50 50\">\n <circle r=\"20\" cy=\"50\" cx=\"50\"></circle>\n</svg>\n","import {\n Component,\n ComponentRef,\n computed,\n effect,\n HostBinding,\n inject,\n Injector,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { NgFluxLoadingComponent } from '../main/main.component';\nimport { NGF_CONFIG, NgFluxLoadingEntry } from '../../../interfaces';\n\n@Component({\n selector: 'ngf-loading-root',\n templateUrl: 'root.component.html',\n styleUrls: ['root.component.scss'],\n imports: [],\n})\nexport class NgFluxLoadingRootComponent {\n\n private readonly config = inject(NGF_CONFIG);\n private readonly injector = inject(Injector);\n\n private readonly entries = signal<NgFluxLoadingEntry[]>([]);\n\n readonly count = computed(() => this.entries().length);\n readonly isLoading = computed(() => this.count() > 0);\n\n @HostBinding('class.show')\n get showLoading() { return this.isLoading(); }\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n private componentRef!: ComponentRef<any>;\n\n constructor() {\n const { config, injector } = this;\n\n effect(() => {\n const viewContainer = this.viewContainer();\n const component = config.loading?.component ?? NgFluxLoadingComponent;\n\n const newInjector = Injector.create({\n parent: injector,\n providers: [],\n });\n\n this.componentRef = viewContainer.createComponent(component, {\n injector: newInjector,\n });\n });\n }\n\n readonly entry = computed(() => {\n const entries = this.entries();\n return entries.at(entries.length - 1);\n });\n\n readonly start = (text: string = '') => this.entries.update(v => {\n const entries = Array.from(v);\n entries.push({ text });\n return entries;\n });\n\n readonly stop = () => this.entries.update(v => {\n const entries = Array.from(v);\n entries.pop();\n return entries;\n });\n\n}\n","<div class=\"wrapper\">\n <ng-template #container></ng-template>\n</div>\n","import {\n Component,\n computed,\n inject,\n input,\n model,\n output,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { Pagination, PaginationInfo } from '../../../interfaces';\n\n@Component({\n selector: 'ngf-pagination-info',\n templateUrl: 'info.component.html',\n styleUrls: ['info.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [FormsModule],\n})\nexport class NgFluxPaginationInfo {\n readonly data = input.required<Pagination>();\n readonly callback = output<PaginationInfo>();\n\n readonly limit = model.required<number>();\n readonly limitOptions = input.required<number[]>();\n\n protected readonly info = computed(() => {\n const data = this.data();\n\n const from = data.from.toLocaleString();\n const to = data.to.toLocaleString();\n const total = data.total.toLocaleString();\n\n return `${from} - ${to} of ${total}`;\n });\n\n protected readonly disablePrev = computed(() => {\n const data = this.data();\n return data.currentPage <= 1;\n });\n\n protected readonly disableNext = computed(() => {\n const data = this.data();\n return data.currentPage >= data.lastPage;\n });\n\n protected prev() {\n const data = this.data();\n\n this.callback.emit({\n page: data.currentPage - 1,\n limit: data.perPage,\n });\n }\n\n protected next() {\n const data = this.data();\n\n this.callback.emit({\n page: data.currentPage + 1,\n limit: data.perPage,\n });\n }\n}\n","<div class=\"wrapper\">\n <div class=\"block limit\">\n <div>Per page</div>\n <select name=\"\" id=\"\" [(ngModel)]=\"limit\">\n @for (entry of limitOptions(); track $index) {\n <option [value]=\"entry\">{{ entry }}</option>\n }\n </select>\n </div>\n\n <div class=\"block info\">\n <div>{{ info() }}</div>\n </div>\n\n <div class=\"block nav\">\n <button (click)=\"prev()\" [disabled]=\"disablePrev()\">\n <i class=\"ngf-icon chevron-left\"></i>\n </button>\n\n <button (click)=\"next()\" [disabled]=\"disableNext()\">\n <i class=\"ngf-icon chevron-right\"></i>\n </button>\n </div>\n</div>\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { NgFluxPaginationInfo } from './info/info.component';\nimport { NGF_CONFIG, Pagination, PaginationInfo, PaginationTransformer } from '../../interfaces';\n\n@Component({\n selector: 'ngf-pagination',\n templateUrl: 'pagination.component.html',\n styleUrls: ['pagination.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgFluxPaginationInfo],\n})\nexport class NgFluxPagination {\n private readonly config = inject(NGF_CONFIG);\n\n readonly data = input.required<any>();\n readonly preload = input<boolean>(this.config.pagination?.preload ?? false);\n readonly transform = input<PaginationTransformer>();\n\n readonly limit = model<number>(this.config.pagination?.limit ?? 10);\n readonly limitOptions = input<number[]>(\n this.config.pagination?.limitOptions ?? [5, 10, 20, 30, 40, 50],\n );\n\n readonly callback = output<PaginationInfo>();\n\n protected readonly value = computed<Pagination>(() => {\n const { config } = this;\n\n const data = this.data();\n const transform = this.transform() ?? config.pagination?.transform;\n\n if (!transform) return data as Pagination;\n\n return {\n currentPage: transform.getCurrentPage(data),\n lastPage: transform.getLastPage(data),\n perPage: transform.getPerPage(data),\n from: transform.getFrom(data),\n to: transform.getTo(data),\n total: transform.getTotal(data),\n data: transform.getData(data),\n };\n });\n\n constructor() {\n let init = false;\n\n effect(() => {\n const limit = Number(this.limit());\n const preload = untracked(this.preload);\n const { currentPage: page } = untracked(this.value);\n\n if (preload || init) {\n this.callback.emit({ limit, page });\n }\n\n init = true;\n });\n }\n}\n","<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n\n<ngf-pagination-info\n [data]=\"value()\"\n [(limit)]=\"limit\"\n [limitOptions]=\"limitOptions()\"\n (callback)=\"callback.emit($event)\"\n></ngf-pagination-info>\n","import { ApplicationRef, ComponentRef, computed, createComponent, EmbeddedViewRef, inject, Injectable, signal } from \"@angular/core\";\nimport { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from \"@angular/router\";\nimport { filter } from \"rxjs\";\n\nimport { NgFluxLoadingRootComponent } from \"../components\";\nimport { NGF_CONFIG } from \"../interfaces\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxLoadingInternal {\n\n private readonly config = inject(NGF_CONFIG);\n private readonly appRef = inject(ApplicationRef);\n private readonly router = inject(Router, { optional: true });\n\n readonly rootRef: ComponentRef<NgFluxLoadingRootComponent>;\n\n constructor() {\n const { appRef } = this;\n\n this.rootRef = createComponent(NgFluxLoadingRootComponent, {\n environmentInjector: appRef.injector,\n });\n }\n\n initialize() {\n const { appRef, rootRef } = this;\n appRef.attachView(rootRef.hostView);\n\n const elem = rootRef.location.nativeElement as HTMLElement;\n document.body.appendChild(elem);\n }\n\n showOnRouteNavigation() {\n const { config, router } = this;\n\n if (router && config.loading?.showOnRouteNavigation) {\n const root = this.rootRef.instance;\n\n const navStart = filter(nav => nav instanceof NavigationStart);\n router.events.pipe(navStart).subscribe(nav => root.start());\n\n const navEnd = filter(nav => nav instanceof NavigationEnd);\n router.events.pipe(navEnd).subscribe(nav => root.stop());\n\n const navCancel = filter(nav => nav instanceof NavigationCancel);\n router.events.pipe(navCancel).subscribe(nav => root.stop());\n\n const navError = filter(nav => nav instanceof NavigationError);\n router.events.pipe(navError).subscribe(nav => root.stop());\n }\n }\n\n}\n","import { computed, inject, Injectable } from \"@angular/core\";\nimport { NgFluxLoadingInternal } from \"../internal/Loading\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxLoading {\n\n private readonly internal = inject(NgFluxLoadingInternal);\n\n private readonly root = this.internal.rootRef.instance;\n\n readonly data = computed(() => this.root.entry());\n readonly isLoading = computed(() => this.root.isLoading());\n\n readonly start = (text: string = '') => this.root.start(text);\n readonly stop = () => this.root.stop();\n\n}\n","import {\n Component,\n ComponentRef,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n viewChild,\n ViewContainerRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { NGF_DIALOG_CLOSE_FN, NGF_DIALOG_CONFIG, NGF_DIALOG_CONTENT } from '../../../internal';\nimport { NGF_DIALOG_DATA } from '../../../interfaces';\nimport { NgFluxDialogInstance } from '../../../services';\n\ntype CloseFn = () => void;\n\n@Component({\n selector: 'ngf-dialog',\n templateUrl: 'main.component.html',\n styleUrls: ['main.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [],\n})\nexport class NgFluxDialogComponent {\n private readonly injector = inject(Injector);\n private readonly instance = inject(NgFluxDialogInstance);\n private readonly onClosed = inject(NGF_DIALOG_CLOSE_FN);\n private readonly content = inject(NGF_DIALOG_CONTENT);\n private readonly config = inject(NGF_DIALOG_CONFIG);\n\n readonly viewContainer = viewChild.required('container', { read: ViewContainerRef });\n\n private componentRef!: ComponentRef<any>;\n\n private data: any;\n\n constructor() {\n const { injector, content, config } = this;\n\n effect((onCleanup) => {\n const viewContainer = this.viewContainer();\n\n const newInjector = Injector.create({\n parent: injector,\n providers: [{ provide: NGF_DIALOG_DATA, useValue: config?.data ?? null }],\n });\n\n this.componentRef = viewContainer.createComponent(content, {\n injector: newInjector,\n });\n\n const { nativeElement } = this.componentRef.location as ElementRef<HTMLElement>;\n\n nativeElement.tabIndex = -1;\n nativeElement.classList.add('ngf-dialog-box');\n nativeElement.focus();\n\n nativeElement.addEventListener('click', this.onComponentClick);\n nativeElement.addEventListener('animationend', this.onAnimationComplete);\n\n onCleanup(() => {\n nativeElement.removeEventListener('click', this.onComponentClick);\n nativeElement.removeEventListener('animationend', this.onAnimationComplete);\n });\n });\n }\n\n @HostListener('click', ['$event'])\n onBackdropClick(e: MouseEvent) {\n const { instance } = this;\n\n instance.send({\n name: 'backdrop.close',\n value: false,\n });\n }\n\n private readonly onComponentClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n private readonly onAnimationComplete = (e: AnimationEvent) => {\n switch (e.animationName) {\n case 'ngfDialogOpen':\n {\n }\n break;\n\n case 'ngfDialogClose':\n {\n this.onClosed(this.data);\n }\n break;\n }\n };\n\n focus() {\n const ref = this.componentRef.location as ElementRef<HTMLElement>;\n ref.nativeElement.focus();\n }\n\n close(data?: any) {\n this.data = data;\n\n const ref = this.componentRef.location as ElementRef<HTMLElement>;\n ref.nativeElement.classList.add('close');\n }\n}\n","<div class=\"wrapper\">\n <div class=\"content\">\n <ng-template #container></ng-template>\n </div>\n</div>\n","import { NgFluxDialogCommand } from \"../interfaces\";\n\ntype OnClosed<T = any> = (cmd: NgFluxDialogCommand<T>) => void;\n\nexport class NgFluxDialogRef<T = any> {\n\n constructor(\n private readonly onClosed: OnClosed<T>\n ) {}\n\n readonly close = (value?: T) => this.onClosed({\n name: 'close',\n value,\n });\n\n}\n","import { ComponentRef, Injector, signal, ViewContainerRef } from \"@angular/core\";\nimport { AsyncSubject } from \"rxjs\";\n\nimport { NgFluxDialogCommand, NgFluxDialogConfig, NgFluxDialogEvents } from \"../interfaces/Dialog\";\nimport { NgFluxDialogComponent } from \"../components/dialog/main/main.component\";\nimport { NgFluxDialogRef } from \"./DialogRef\";\nimport { NGF_DIALOG_CLOSE_FN, NGF_DIALOG_CONFIG, NGF_DIALOG_CONTENT, NGF_DIALOG_INSTANCE } from \"../internal\";\nimport { NgFluxComponent } from \"../interfaces\";\n\ntype OnClosedFn<T = any> = (ins: NgFluxDialogInstance<T>) => void;\n\nexport class NgFluxDialogInstance<T = any> {\n\n private readonly xDialogComponentRef: ComponentRef<NgFluxDialogComponent> = null as any;\n\n private readonly xClosing = new AsyncSubject<T | null>();\n private readonly xAfterClosed = new AsyncSubject<T | null>();\n\n readonly events: NgFluxDialogEvents<T> = {\n closing: this.xClosing.asObservable(),\n closed: this.xAfterClosed.asObservable(),\n };\n\n constructor(\n private readonly viewContainer: ViewContainerRef,\n private readonly component: NgFluxComponent<any>,\n private readonly injector: Injector,\n private readonly onClosed: OnClosedFn<T>,\n readonly config: NgFluxDialogConfig,\n ) {\n const dialogRef = new NgFluxDialogRef<T>(this.onCommand);\n\n const newInjector = Injector.create({\n parent: injector,\n providers: [\n { provide: NgFluxDialogRef, useValue: dialogRef },\n { provide: NGF_DIALOG_CONFIG, useValue: config },\n { provide: NGF_DIALOG_CONTENT, useValue: component },\n { provide: NGF_DIALOG_CLOSE_FN, useValue: this.afterClosedFn },\n { provide: NgFluxDialogInstance, useValue: this }\n ],\n });\n\n this.xDialogComponentRef = viewContainer.createComponent(NgFluxDialogComponent, {\n injector: newInjector,\n index: undefined\n });\n }\n\n private readonly onCommand = (cmd: NgFluxDialogCommand<T>) => {\n const { config } = this;\n\n switch (cmd.name) {\n case 'esc.close': {\n if (config.closeOnEsc) this.close();\n } break;\n\n case 'backdrop.close': {\n if (config.backdropClose) this.close();\n } break;\n\n case 'backButton.close': {\n if (config.closeOnBackBtn) this.close();\n } break;\n\n case 'close': {\n this.close(cmd.value);\n } break;\n }\n }\n\n private readonly afterClosedFn = (data?: T) => {\n const { xDialogComponentRef } = this;\n xDialogComponentRef.destroy();\n\n this.xAfterClosed.next(data ?? null);\n this.xAfterClosed.complete();\n\n this.onClosed(this);\n }\n\n focus() {\n const { xDialogComponentRef: { instance } } = this;\n instance.focus();\n }\n\n close(data?: T) {\n const { xDialogComponentRef } = this;\n\n this.xClosing.next(data ?? null);\n this.xClosing.complete();\n\n xDialogComponentRef.instance.close(data);\n }\n\n send(cmd: NgFluxDialogCommand<T>) {\n this.onCommand(cmd);\n }\n\n}\n","import { Component, computed, inject } from '@angular/core';\n\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogAlertOptions,\n NgFluxDialogButton,\n NgFluxDialogButtonObj,\n} from '../../../../interfaces';\n\nimport { NgFluxDialogRef } from '../../../../services';\n\nimport { NgFluxDialogHeaderComponent } from '../../header/header.component';\nimport { NgFluxDialogBodyComponent } from '../../body/body.component';\nimport { NgFluxDialogFooterComponent } from '../../footer/footer.component';\nimport { NgFluxButton } from '../../../button/button.component';\n\n@Component({\n selector: 'ngf-dialog-box-alert',\n templateUrl: 'alert.dialog.html',\n styleUrls: ['alert.dialog.scss'],\n imports: [\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogBodyComponent,\n NgFluxDialogFooterComponent,\n ],\n})\nexport class NgFluxAlertDialog {\n\n readonly config = inject(NGF_CONFIG);\n readonly dialogRef = inject<NgFluxDialogRef<boolean>>(NgFluxDialogRef);\n readonly options: NgFluxDialogAlertOptions = inject(NGF_DIALOG_DATA);\n\n readonly buttons = computed<NgFluxDialogButton<boolean>[]>(() => {\n const config = this.config.dialog?.alert || {};\n\n return (\n this.options.buttons ?? [\n Object.assign(\n {\n text: 'Okay',\n theme: 'primary',\n onClick: (e, btn, ref) => ref.close(),\n } as NgFluxDialogButtonObj<boolean>,\n config.okayButton,\n ),\n ]\n );\n });\n\n onButtonClick(e: MouseEvent, btn: NgFluxDialogButtonObj<boolean>) {\n const { dialogRef } = this;\n\n if (btn.onClick) {\n btn.onClick(e, btn, dialogRef);\n } else {\n dialogRef.close();\n }\n }\n\n}\n","@if (options.title) {\n <ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n </ngf-dialog-header>\n}\n\n<ngf-dialog-body>\n <div [innerHTML]=\"options.content\"></div>\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n @switch (btn) {\n @case ('flex') {<div ngf-flex-x></div>}\n\n @default {\n <ngf-button [theme]=\"btn.theme\" [size]=\"btn.size\" [direction]=\"btn.direction\" (click)=\"onButtonClick($event, btn)\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n }\n }\n</ngf-dialog-footer>\n","import { Component, computed, inject, ChangeDetectionStrategy } from '@angular/core';\n\nimport { NgFluxDialogHeaderComponent } from '../../header/header.component';\nimport { NgFluxDialogFooterComponent } from '../../footer/footer.component';\nimport { NgFluxDialogBodyComponent } from '../../body/body.component';\nimport { NgFluxButton } from '../../../button/button.component';\n\nimport { NgFluxDialogRef } from '../../../../services';\n\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogButtonObj,\n NgFluxDialogConfirmOptions,\n} from '../../../../interfaces';\n\n@Component({\n selector: 'ngf-dialog-box-confirm',\n templateUrl: 'confirm.dialog.html',\n styleUrls: ['confirm.dialog.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogFooterComponent,\n NgFluxDialogBodyComponent,\n ],\n})\nexport class NgFluxConfirmDialog {\n readonly config = inject(NGF_CONFIG);\n readonly dialogRef = inject<NgFluxDialogRef<boolean>>(NgFluxDialogRef);\n readonly options: NgFluxDialogConfirmOptions = inject(NGF_DIALOG_DATA);\n\n readonly buttons = computed(() => {\n const config = this.config.dialog?.prompt ?? {};\n\n return [\n this.options.cancelButton ??\n Object.assign(\n {\n text: 'Cancel',\n theme: 'dark',\n onClick: (e, btn, dialogRef) => dialogRef.close(),\n } as NgFluxDialogButtonObj,\n config.cancelButton,\n ),\n\n this.options.okayButton ??\n Object.assign(\n {\n text: 'Okay',\n theme: 'primary',\n onClick: (e, btn, dialogRef) => dialogRef.close(true),\n } as NgFluxDialogButtonObj,\n config.submitButton,\n ),\n ];\n });\n\n onButtonClick(e: MouseEvent, btn: NgFluxDialogButtonObj) {\n btn.onClick?.call(null, e, btn, this.dialogRef);\n }\n}\n","@if (options.title) {\n <ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n </ngf-dialog-header>\n}\n\n<ngf-dialog-body>\n <div [innerHTML]=\"options.content\"></div>\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n <ngf-button [theme]=\"btn.theme\" (click)=\"onButtonClick($event, btn)\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n</ngf-dialog-footer>\n","import { Component, computed, inject, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgFluxDialogHeaderComponent } from '../../header/header.component';\nimport { NgFluxDialogFooterComponent } from '../../footer/footer.component';\nimport { NgFluxDialogBodyComponent } from '../../body/body.component';\nimport { NgFluxButton } from '../../../button/button.component';\n\nimport { NgFluxDialogRef } from '../../../../services';\n\nimport {\n NGF_CONFIG,\n NGF_DIALOG_DATA,\n NgFluxDialogButtonObj,\n NgFluxDialogPromptOptions,\n} from '../../../../interfaces';\n\n@Component({\n selector: 'ngf-dialog-box-prompt',\n templateUrl: 'prompt.dialog.html',\n styleUrls: ['prompt.dialog.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n FormsModule,\n NgFluxButton,\n NgFluxDialogHeaderComponent,\n NgFluxDialogFooterComponent,\n NgFluxDialogBodyComponent,\n ],\n})\nexport class NgFluxPromptDialog {\n readonly config = inject(NGF_CONFIG);\n readonly dialogRef = inject<NgFluxDialogRef<string>>(NgFluxDialogRef);\n readonly options: NgFluxDialogPromptOptions = inject(NGF_DIALOG_DATA);\n\n readonly text = signal(this.options.defaultValue ?? '');\n readonly value = computed(() => this.text().trim());\n\n readonly buttons = computed(() => {\n const config = this.config.dialog?.prompt ?? {};\n const value = this.value();\n\n return [\n this.options.cancelButton ??\n Object.assign(\n {\n text: 'Cancel',\n theme: 'dark',\n onClick: (e, btn, dialogRef) => dialogRef.close(),\n } as NgFluxDialogButtonObj,\n config.cancelButton,\n ),\n\n this.options.submitButton ??\n Object.assign(\n {\n text: 'Submit',\n theme: 'primary',\n onClick: (e, btn, dialogRef) => dialogRef.close(value),\n disabled: () => !value,\n } as NgFluxDialogButtonObj,\n config.submitButton,\n ),\n ];\n });\n\n onButtonClick(e: MouseEvent, btn: NgFluxDialogButtonObj) {\n btn.onClick?.call(null, e, btn, this.dialogRef);\n }\n}\n","<ngf-dialog-header>\n <h1 ngf-dialog-title>{{ options.title }}</h1>\n</ngf-dialog-header>\n\n<ngf-dialog-body>\n <div class=\"content\" [innerHTML]=\"options.content\"></div>\n <input type=\"text\" name=\"text\" [placeholder]=\"options.placeholder\" [(ngModel)]=\"text\">\n</ngf-dialog-body>\n\n<ngf-dialog-footer>\n @for (btn of buttons(); track $index) {\n <ngf-button [theme]=\"btn.theme\" (click)=\"onButtonClick($event, btn)\" [disabled]=\"btn.disabled?.() ?? false\">\n <span>{{ btn.text }}</span>\n </ngf-button>\n }\n</ngf-dialog-footer>\n","import { inject, Injectable } from \"@angular/core\";\n\nimport { NgFluxDialogInstance } from \"./DialogInstance\";\nimport { NgFluxAlertDialog } from \"../components/dialog/boxes/alert/alert.dialog\";\nimport { NgFluxConfirmDialog } from \"../components/dialog/boxes/confirm/confirm.dialog\";\nimport { NgFluxPromptDialog } from \"../components/dialog/boxes/prompt/prompt.dialog\";\n\nimport { NgFluxDialogInternal } from \"../internal\";\n\nimport {\n NgFluxComponent,\n NgFluxDialogAlertOptions,\n NgFluxDialogButton,\n NgFluxDialogConfig,\n NgFluxDialogConfirmOptions,\n NgFluxDialogEvents,\n NgFluxDialogPromptOptions,\n} from \"../interfaces\";\n\n@Injectable({ providedIn: 'root' })\nexport class NgFluxDialog {\n\n private readonly internal = inject(NgFluxDialogInternal);\n\n open<T = any>(component: NgFluxComponent<any>, config?: NgFluxDialogConfig): NgFluxDialogEvents<T> {\n config ??= {};\n config.backdropClose ??= true;\n config.closeBtn ??= true;\n config.closeOnBackBtn ??= true;\n config.closeOnEsc ??= true;\n\n const { internal } = this;\n const root = internal.rootRef.instance;\n\n const onClosed = (ins: NgFluxDialogInstance<T>) => {\n internal.remove(ins);\n };\n\n const instance = new NgFluxDialogInstance<T>(\n root.viewContainer(),\n component,\n root.injector,\n onClosed,\n config\n );\n\n internal.add(instance);\n\n return instance.events;\n }\n\n readonly closeAll = () => this.internal.closeAll();\n\n alert(data: NgFluxDialogAlertOptions) {\n const dialog = this.open<boolean>(NgFluxAlertDialog, {\n closeOnBackBtn: false,\n backdropClose: false,\n closeOnEsc: false,\n data\n });\n\n return dialog.closed;\n }\n\n success(data: NgFluxDialogAlertOptions) {\n data.content = `<div class=\"success\">${data.content}</div>`;\n return this.alert(data);\n }\n\n error(data: NgFluxDialogAlertOptions) {\n data.content = `<div class=\"error\">${data.content}</div>`;\n return this.alert(data);\n }\n\n confirm(data: NgFluxDialogConfirmOptions) {\n const dialog = this.open(NgFluxConfirmDialog, {\n closeOnBackBtn: false,\n backdropClose: false,\n closeOnEsc: false,\n data\n });\n\n return dialog.closed;\n }\n\n prompt(data: NgFluxDialogPromptOptions) {\n const dialog = this.open(NgFluxPromptDialog, {\n closeOnBackBtn: false,\n backdropClose: false,\n closeOnEsc: false,\n data\n });\n\n return dialog.closed;\n }\n\n}\n","import { inject, makeEnvironmentProviders, provideAppInitializer } from \"@angular/core\";\n\nimport {\n NGF_CONFIG,\n NgFluxConfig,\n} from \"./interfaces\";\n\nimport {\n NgFluxDialog,\n NgFluxLoading,\n} from \"./services\";\n\nimport {\n NgFluxDialogInternal,\n NgFluxLoadingInternal,\n} from \"./internal\";\n\nexport const provideNgFlux = (config?: NgFluxConfig) => {\n config ??= {};\n\n return makeEnvironmentProviders([\n { provide: NGF_CONFIG, useValue: config },\n\n NgFluxDialog,\n NgFluxDialogInternal,\n\n NgFluxLoading,\n NgFluxLoadingInternal,\n\n provideAppInitializer(() => {\n const dialog = inject(NgFluxDialogInternal);\n dialog.initialize();\n }),\n\n provideAppInitializer(() => {\n const loading = inject(NgFluxLoadingInternal);\n\n loading.initialize();\n loading.showOnRouteNavigation();\n }),\n ]);\n};\n","/*\n * Public API Surface of ngflux\n */\n\n\nexport * from './lib/ngflux';\n\nexport * from './lib/components';\nexport * from './lib/interfaces';\nexport * from './lib/services';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -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.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/NgFlux/ngflux.git"
@@ -66,7 +66,7 @@ type DialogOptions = {
66
66
  type PaginationOptions = {
67
67
  preload?: boolean;
68
68
  transform?: PaginationTransformer;
69
- limitEntries?: number[];
69
+ limitOptions?: number[];
70
70
  limit?: number;
71
71
  };
72
72
  type NgFluxConfig = {
@@ -109,12 +109,12 @@ type NgFluxDialogButtonObj<T = any> = ButtonOptions & {
109
109
  };
110
110
  type NgFluxDialogButton<T = any> = 'flex' | NgFluxDialogButtonObj<T>;
111
111
  type NgFluxDialogAlertOptions = {
112
- title: string;
112
+ title?: string;
113
113
  content: string;
114
114
  buttons?: NgFluxDialogButton<boolean>[];
115
115
  };
116
116
  type NgFluxDialogConfirmOptions = {
117
- title: string;
117
+ title?: string;
118
118
  content: string;
119
119
  okayButton?: NgFluxDialogButtonObj;
120
120
  cancelButton?: NgFluxDialogButtonObj;
@@ -122,6 +122,8 @@ type NgFluxDialogConfirmOptions = {
122
122
  type NgFluxDialogPromptOptions = {
123
123
  title: string;
124
124
  content: string;
125
+ placeholder?: string;
126
+ defaultValue?: string;
125
127
  submitButton?: NgFluxDialogButtonObj;
126
128
  cancelButton?: NgFluxDialogButtonObj;
127
129
  };
@@ -146,7 +148,7 @@ declare class NgFluxButton {
146
148
  get bindClass(): string;
147
149
  get isBlock(): boolean;
148
150
  get isDisabled(): boolean;
149
- constructor();
151
+ get tabIndex(): number;
150
152
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgFluxButton, never>;
151
153
  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
154
  }
@@ -176,9 +178,9 @@ declare class NgFluxDialog {
176
178
  private readonly internal;
177
179
  open<T = any>(component: NgFluxComponent<any>, config?: NgFluxDialogConfig): NgFluxDialogEvents<T>;
178
180
  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>;
181
+ alert(data: NgFluxDialogAlertOptions): rxjs.Observable<boolean | null>;
182
+ success(data: NgFluxDialogAlertOptions): rxjs.Observable<boolean | null>;
183
+ error(data: NgFluxDialogAlertOptions): rxjs.Observable<boolean | null>;
182
184
  confirm(data: NgFluxDialogConfirmOptions): rxjs.Observable<any>;
183
185
  prompt(data: NgFluxDialogPromptOptions): rxjs.Observable<any>;
184
186
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgFluxDialog, never>;
@@ -242,12 +244,12 @@ declare class NgFluxPagination {
242
244
  readonly preload: _angular_core.InputSignal<boolean>;
243
245
  readonly transform: _angular_core.InputSignal<PaginationTransformer | undefined>;
244
246
  readonly limit: _angular_core.ModelSignal<number>;
245
- readonly limitEntries: _angular_core.InputSignal<number[]>;
247
+ readonly limitOptions: _angular_core.InputSignal<number[]>;
246
248
  readonly callback: _angular_core.OutputEmitterRef<PaginationInfo>;
247
249
  protected readonly value: _angular_core.Signal<Pagination>;
248
250
  constructor();
249
251
  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>;
252
+ 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
253
  }
252
254
 
253
255
  export { NGF_CONFIG, NGF_DIALOG_DATA, NgFluxButton, NgFluxDialog, NgFluxDialogBodyComponent, NgFluxDialogFooterComponent, NgFluxDialogHeaderComponent, NgFluxDialogInstance, NgFluxDialogRef, NgFluxDialogRootComponent, NgFluxLoading, NgFluxLoadingRootComponent, NgFluxPagination, provideNgFlux };