@bootkit/ng0 0.0.0-alpha.41 → 0.0.0-alpha.42
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/components/accordion/index.d.ts +4 -4
- package/components/button/index.d.ts +6 -7
- package/components/card/index.d.ts +2 -2
- package/components/code/index.d.ts +2 -4
- package/components/collapse/index.d.ts +5 -6
- package/components/form-field/index.d.ts +1 -1
- package/components/pagination/index.d.ts +2 -2
- package/data/index.d.ts +1 -6
- package/fesm2022/bootkit-ng0-components-accordion.mjs +5 -7
- package/fesm2022/bootkit-ng0-components-accordion.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-button.mjs +9 -13
- package/fesm2022/bootkit-ng0-components-button.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-card.mjs +6 -8
- package/fesm2022/bootkit-ng0-components-card.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-code.mjs +8 -12
- package/fesm2022/bootkit-ng0-components-code.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-collapse.mjs +12 -16
- package/fesm2022/bootkit-ng0-components-collapse.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-form-field.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-pagination.mjs +9 -9
- package/fesm2022/bootkit-ng0-components-pagination.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-table.mjs +1 -2
- package/fesm2022/bootkit-ng0-components-table.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-data.mjs +1 -1
- package/fesm2022/bootkit-ng0-data.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { QueryList
|
|
2
|
+
import { QueryList } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
declare class AccordionItemComponent {
|
|
5
5
|
private _element;
|
|
@@ -19,8 +19,6 @@ declare class AccordionItemComponent {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
declare class AccordionComponent {
|
|
22
|
-
private _element;
|
|
23
|
-
private _renderer;
|
|
24
22
|
/**
|
|
25
23
|
* The mode of the accordion - 'single' or 'multiple'.
|
|
26
24
|
* 'single' mode allows only one item to be expanded at a time.
|
|
@@ -28,7 +26,9 @@ declare class AccordionComponent {
|
|
|
28
26
|
*/
|
|
29
27
|
mode: i0.InputSignal<"single" | "multiple">;
|
|
30
28
|
readonly items: QueryList<AccordionItemComponent>;
|
|
31
|
-
|
|
29
|
+
private _element;
|
|
30
|
+
private _renderer;
|
|
31
|
+
constructor();
|
|
32
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<AccordionComponent, never>;
|
|
33
33
|
static ɵcmp: i0.ɵɵComponentDeclaration<AccordionComponent, "ng0-accordion", ["ng0Accordion"], { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, {}, ["items"], ["*"], true, never>;
|
|
34
34
|
}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { OnInit, OnDestroy
|
|
3
|
-
import { HttpService } from '@bootkit/ng0/http';
|
|
2
|
+
import { OnInit, OnDestroy } from '@angular/core';
|
|
4
3
|
|
|
5
4
|
declare class ButtonDirective implements OnInit, OnDestroy {
|
|
6
|
-
private _element;
|
|
7
|
-
private _renderer;
|
|
8
|
-
private _http;
|
|
9
|
-
private _destroyRef;
|
|
10
5
|
private _loadingElement;
|
|
11
6
|
/**
|
|
12
7
|
* The IDs of the HTTP requests that this button listens to.
|
|
@@ -30,7 +25,11 @@ declare class ButtonDirective implements OnInit, OnDestroy {
|
|
|
30
25
|
* Default is true.
|
|
31
26
|
*/
|
|
32
27
|
loadingIndicator: i0.InputSignalWithTransform<boolean, unknown>;
|
|
33
|
-
|
|
28
|
+
private _element;
|
|
29
|
+
private _renderer;
|
|
30
|
+
private _http;
|
|
31
|
+
private _destroyRef;
|
|
32
|
+
constructor();
|
|
34
33
|
ngOnInit(): void;
|
|
35
34
|
private _showLoading;
|
|
36
35
|
private _hideLoading;
|
|
@@ -2,10 +2,10 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { ElementRef, Renderer2 } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
declare class CardComponent {
|
|
5
|
+
header: i0.InputSignal<string | undefined>;
|
|
5
6
|
private _element;
|
|
6
7
|
private _renderer;
|
|
7
|
-
|
|
8
|
-
constructor(_element: ElementRef, _renderer: Renderer2);
|
|
8
|
+
constructor();
|
|
9
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<CardComponent, never>;
|
|
10
10
|
static ɵcmp: i0.ɵɵComponentDeclaration<CardComponent, "ng0-card", ["ng0Card"], { "header": { "alias": "header"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
11
11
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import * as _angular_platform_browser from '@angular/platform-browser';
|
|
3
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
3
|
|
|
5
4
|
type CodeFormatterFunc = (code: string) => string;
|
|
6
5
|
declare class CodeFormatter {
|
|
@@ -19,14 +18,13 @@ declare class CodeFormatters {
|
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
declare class CodeComponent {
|
|
22
|
-
private
|
|
23
|
-
private
|
|
21
|
+
private _formatters;
|
|
22
|
+
private _domSanitizer;
|
|
24
23
|
/** Code formatter name */
|
|
25
24
|
formatter: i0.InputSignal<string>;
|
|
26
25
|
/** Code */
|
|
27
26
|
code: i0.InputSignal<string>;
|
|
28
27
|
protected _safeHtml: i0.Signal<_angular_platform_browser.SafeHtml | undefined>;
|
|
29
|
-
constructor(formatters: CodeFormatters, domSanitizer: DomSanitizer);
|
|
30
28
|
static ɵfac: i0.ɵɵFactoryDeclaration<CodeComponent, never>;
|
|
31
29
|
static ɵcmp: i0.ɵɵComponentDeclaration<CodeComponent, "ng0-code", ["ng0Code"], { "formatter": { "alias": "formatter"; "required": true; "isSignal": true; }; "code": { "alias": "code"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
32
30
|
}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { OnInit, OnDestroy
|
|
3
|
-
import { AnimationBuilder } from '@angular/animations';
|
|
2
|
+
import { OnInit, OnDestroy } from '@angular/core';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Directive to handle the collapse and expand functionality of a host element.
|
|
7
6
|
*/
|
|
8
7
|
declare class CollapseDirective implements OnInit, OnDestroy {
|
|
9
|
-
private el;
|
|
10
|
-
private builder;
|
|
11
|
-
private renderer;
|
|
12
8
|
/**
|
|
13
9
|
* Indicates whether the host element is collapsed.
|
|
14
10
|
* @input
|
|
@@ -20,7 +16,10 @@ declare class CollapseDirective implements OnInit, OnDestroy {
|
|
|
20
16
|
timings: i0.InputSignal<string | number>;
|
|
21
17
|
private _player?;
|
|
22
18
|
private _firstExecution;
|
|
23
|
-
|
|
19
|
+
private _el;
|
|
20
|
+
private _animationBuilder;
|
|
21
|
+
private _renderer;
|
|
22
|
+
constructor();
|
|
24
23
|
ngOnInit(): void;
|
|
25
24
|
private _collapse;
|
|
26
25
|
private _expand;
|
|
@@ -41,7 +41,7 @@ declare class FormFieldComponent implements AfterContentInit {
|
|
|
41
41
|
ngAfterContentInit(): void;
|
|
42
42
|
private _checkValidation;
|
|
43
43
|
private _isControlRequired;
|
|
44
|
-
|
|
44
|
+
protected _onFocusOut(): void;
|
|
45
45
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldComponent, never>;
|
|
46
46
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormFieldComponent, "ng0-form-field, ng0-field", ["ng0FormField"], { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; "showRequired": { "alias": "showRequired"; "required": false; "isSignal": true; }; "showSubscripts": { "alias": "showSubscripts"; "required": false; "isSignal": true; }; "inputGroup": { "alias": "inputGroup"; "required": false; "isSignal": true; }; }, {}, ["_ngControlElement", "_ngControl"], ["*"], true, never>;
|
|
47
47
|
}
|
|
@@ -11,9 +11,9 @@ declare class PaginationComponent {
|
|
|
11
11
|
*/
|
|
12
12
|
pageSize: _angular_core.InputSignal<number>;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Zero-based index of the selected page.
|
|
15
15
|
*/
|
|
16
|
-
selectedPage: _angular_core.InputSignal<number
|
|
16
|
+
selectedPage: _angular_core.InputSignal<number>;
|
|
17
17
|
/**
|
|
18
18
|
* Maximum number of visible pages.
|
|
19
19
|
* Default is 10.
|
package/data/index.d.ts
CHANGED
|
@@ -29,18 +29,13 @@ declare class DataRequest {
|
|
|
29
29
|
*/
|
|
30
30
|
interface DataRequestPage {
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
* If zeroBased is true, the index starts from 0.
|
|
32
|
+
* Zero-based index of the page.
|
|
34
33
|
*/
|
|
35
34
|
index: number;
|
|
36
35
|
/**
|
|
37
36
|
* Size of the page, i.e., number of items in each page.
|
|
38
37
|
*/
|
|
39
38
|
size: number;
|
|
40
|
-
/**
|
|
41
|
-
* Indicates if the index is zero-based.
|
|
42
|
-
*/
|
|
43
|
-
zeroBased: boolean;
|
|
44
39
|
}
|
|
45
40
|
/**
|
|
46
41
|
* Represents a sorting option in a DataRequest.
|
|
@@ -36,8 +36,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
|
|
|
36
36
|
}], ctorParameters: () => [], propDecorators: { header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }] } });
|
|
37
37
|
|
|
38
38
|
class AccordionComponent {
|
|
39
|
-
_element;
|
|
40
|
-
_renderer;
|
|
41
39
|
/**
|
|
42
40
|
* The mode of the accordion - 'single' or 'multiple'.
|
|
43
41
|
* 'single' mode allows only one item to be expanded at a time.
|
|
@@ -45,18 +43,18 @@ class AccordionComponent {
|
|
|
45
43
|
*/
|
|
46
44
|
mode = input('single', ...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
47
45
|
items;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
_element = inject(ElementRef);
|
|
47
|
+
_renderer = inject(Renderer2);
|
|
48
|
+
constructor() {
|
|
51
49
|
this._renderer.addClass(this._element.nativeElement, 'accordion');
|
|
52
50
|
}
|
|
53
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: AccordionComponent, deps: [
|
|
51
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: AccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
54
52
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.11", type: AccordionComponent, isStandalone: true, selector: "ng0-accordion", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "items", predicate: AccordionItemComponent }], exportAs: ["ng0Accordion"], ngImport: i0, template: "<ng-content></ng-content>", styles: [":host{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
55
53
|
}
|
|
56
54
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: AccordionComponent, decorators: [{
|
|
57
55
|
type: Component,
|
|
58
56
|
args: [{ selector: 'ng0-accordion', exportAs: 'ng0Accordion', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>", styles: [":host{display:block}\n"] }]
|
|
59
|
-
}], ctorParameters: () => [
|
|
57
|
+
}], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], items: [{
|
|
60
58
|
type: ContentChildren,
|
|
61
59
|
args: [AccordionItemComponent]
|
|
62
60
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-accordion.mjs","sources":["../../../projects/ng0/components/accordion/accordion-item.component.ts","../../../projects/ng0/components/accordion/accordion-item.component.html","../../../projects/ng0/components/accordion/accordion.component.ts","../../../projects/ng0/components/accordion/accordion.component.html","../../../projects/ng0/components/accordion/accordion.module.ts","../../../projects/ng0/components/accordion/bootkit-ng0-components-accordion.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, model, Renderer2 } from '@angular/core';\nimport { CollapseComponent } from '@bootkit/ng0/components/collapse';\nimport { AccordionComponent } from './accordion.component';\n\n@Component({\n selector: 'ng0-accordion-item',\n exportAs: 'ng0AccordionItem',\n templateUrl: './accordion-item.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `:host {display: block;}`,\n imports: [\n CollapseComponent\n ]\n})\nexport class AccordionItemComponent {\n private _element = inject(ElementRef);\n private _renderer = inject(Renderer2);\n private _accordion = inject(AccordionComponent);\n\n /**\n * The header text of the accordion item.\n */\n public header = input<string>();\n\n /**\n * Whether the accordion item is collapsed or expanded.\n */\n public collapsed = model(true);\n\n constructor() {\n this._renderer.addClass(this._element.nativeElement, 'accordion-item');\n\n effect(() => {\n var collapsed = this.collapsed();\n if (this._accordion.mode() == 'single') {\n if (!collapsed) {\n this._accordion.items.filter(x => x !== this).forEach(x => x.collapsed.update(x => true));\n }\n }\n })\n }\n}\n","<h6 class=\"accordion-header\">\n <button class=\"accordion-button\" type=\"button\" [class.collapsed]=\"collapsed()\" (click)=\"collapsed.set(!collapsed())\">\n {{header()}}\n </button>\n</h6>\n\n<ng0-collapse [collapsed]=\"collapsed()\">\n <div class=\"accordion-body\">\n <ng-content></ng-content>\n </div>\n</ng0-collapse>","import { ChangeDetectionStrategy, Component, ContentChildren, ElementRef, input, QueryList, Renderer2 } from '@angular/core';\nimport { AccordionItemComponent } from './accordion-item.component';\n\n@Component({\n selector: 'ng0-accordion',\n exportAs: 'ng0Accordion',\n templateUrl: './accordion.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `:host {display: block;}`\n})\nexport class AccordionComponent {\n /**\n * The mode of the accordion - 'single' or 'multiple'.\n * 'single' mode allows only one item to be expanded at a time.\n * 'multiple' mode allows multiple items to be expanded simultaneously.\n */\n public mode = input<'single' | 'multiple'>('single');\n\n @ContentChildren(AccordionItemComponent)\n public readonly items!: QueryList<AccordionItemComponent>;\n\n
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-accordion.mjs","sources":["../../../projects/ng0/components/accordion/accordion-item.component.ts","../../../projects/ng0/components/accordion/accordion-item.component.html","../../../projects/ng0/components/accordion/accordion.component.ts","../../../projects/ng0/components/accordion/accordion.component.html","../../../projects/ng0/components/accordion/accordion.module.ts","../../../projects/ng0/components/accordion/bootkit-ng0-components-accordion.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, model, Renderer2 } from '@angular/core';\nimport { CollapseComponent } from '@bootkit/ng0/components/collapse';\nimport { AccordionComponent } from './accordion.component';\n\n@Component({\n selector: 'ng0-accordion-item',\n exportAs: 'ng0AccordionItem',\n templateUrl: './accordion-item.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `:host {display: block;}`,\n imports: [\n CollapseComponent\n ]\n})\nexport class AccordionItemComponent {\n private _element = inject(ElementRef);\n private _renderer = inject(Renderer2);\n private _accordion = inject(AccordionComponent);\n\n /**\n * The header text of the accordion item.\n */\n public header = input<string>();\n\n /**\n * Whether the accordion item is collapsed or expanded.\n */\n public collapsed = model(true);\n\n constructor() {\n this._renderer.addClass(this._element.nativeElement, 'accordion-item');\n\n effect(() => {\n var collapsed = this.collapsed();\n if (this._accordion.mode() == 'single') {\n if (!collapsed) {\n this._accordion.items.filter(x => x !== this).forEach(x => x.collapsed.update(x => true));\n }\n }\n })\n }\n}\n","<h6 class=\"accordion-header\">\n <button class=\"accordion-button\" type=\"button\" [class.collapsed]=\"collapsed()\" (click)=\"collapsed.set(!collapsed())\">\n {{header()}}\n </button>\n</h6>\n\n<ng0-collapse [collapsed]=\"collapsed()\">\n <div class=\"accordion-body\">\n <ng-content></ng-content>\n </div>\n</ng0-collapse>","import { ChangeDetectionStrategy, Component, ContentChildren, ElementRef, inject, input, QueryList, Renderer2 } from '@angular/core';\nimport { AccordionItemComponent } from './accordion-item.component';\n\n@Component({\n selector: 'ng0-accordion',\n exportAs: 'ng0Accordion',\n templateUrl: './accordion.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `:host {display: block;}`\n})\nexport class AccordionComponent {\n /**\n * The mode of the accordion - 'single' or 'multiple'.\n * 'single' mode allows only one item to be expanded at a time.\n * 'multiple' mode allows multiple items to be expanded simultaneously.\n */\n public mode = input<'single' | 'multiple'>('single');\n\n @ContentChildren(AccordionItemComponent)\n public readonly items!: QueryList<AccordionItemComponent>;\n\n private _element = inject(ElementRef);\n private _renderer = inject(Renderer2);\n\n constructor() {\n this._renderer.addClass(this._element.nativeElement, 'accordion');\n }\n}\n","<ng-content></ng-content>","import { NgModule } from '@angular/core';\nimport { AccordionComponent } from './accordion.component';\nimport { AccordionItemComponent } from './accordion-item.component';\n\n@NgModule({\n imports: [\n AccordionComponent,\n AccordionItemComponent,\n ],\n exports: [\n AccordionComponent,\n AccordionItemComponent,\n ]\n})\nexport class AccordionModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, model, booleanAttribute, Directive, NgModule } from '@angular/core';
|
|
2
|
+
import { input, model, booleanAttribute, inject, ElementRef, Renderer2, DestroyRef, Directive, NgModule } from '@angular/core';
|
|
3
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
-
import
|
|
4
|
+
import { HttpService } from '@bootkit/ng0/http';
|
|
5
5
|
|
|
6
6
|
class ButtonDirective {
|
|
7
|
-
_element;
|
|
8
|
-
_renderer;
|
|
9
|
-
_http;
|
|
10
|
-
_destroyRef;
|
|
11
7
|
_loadingElement;
|
|
12
8
|
/**
|
|
13
9
|
* The IDs of the HTTP requests that this button listens to.
|
|
@@ -31,11 +27,11 @@ class ButtonDirective {
|
|
|
31
27
|
* Default is true.
|
|
32
28
|
*/
|
|
33
29
|
loadingIndicator = input(false, ...(ngDevMode ? [{ debugName: "loadingIndicator", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
_element = inject(ElementRef);
|
|
31
|
+
_renderer = inject(Renderer2);
|
|
32
|
+
_http = inject(HttpService);
|
|
33
|
+
_destroyRef = inject(DestroyRef);
|
|
34
|
+
constructor() {
|
|
39
35
|
}
|
|
40
36
|
ngOnInit() {
|
|
41
37
|
this._renderer.setStyle(this._element.nativeElement, "position", "relative");
|
|
@@ -76,7 +72,7 @@ class ButtonDirective {
|
|
|
76
72
|
}
|
|
77
73
|
ngOnDestroy() {
|
|
78
74
|
}
|
|
79
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ButtonDirective, deps: [
|
|
75
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
80
76
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.11", type: ButtonDirective, isStandalone: true, selector: "button[ng0Button], a[ng0Button], input[type=button][ng0Button], input[type=submit][ng0Button], input[type=reset][ng0Button]", inputs: { request: { classPropertyName: "request", publicName: "request", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, disableDuringRequest: { classPropertyName: "disableDuringRequest", publicName: "disableDuringRequest", isSignal: true, isRequired: false, transformFunction: null }, loadingIndicator: { classPropertyName: "loadingIndicator", publicName: "loadingIndicator", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange" }, host: { properties: { "class.disabled": "disabled()", "prop.disabled": "disabled()", "attr.aria-disabled": "disabled()", "attr.tabindex": "disabled() ? \"-1\" : \"\" " } }, exportAs: ["ng0Button"], ngImport: i0 });
|
|
81
77
|
}
|
|
82
78
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ButtonDirective, decorators: [{
|
|
@@ -92,7 +88,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
|
|
|
92
88
|
'[attr.tabindex]': 'disabled() ? "-1" : "" ',
|
|
93
89
|
}
|
|
94
90
|
}]
|
|
95
|
-
}], ctorParameters: () => [
|
|
91
|
+
}], ctorParameters: () => [], propDecorators: { request: [{ type: i0.Input, args: [{ isSignal: true, alias: "request", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], disableDuringRequest: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableDuringRequest", required: false }] }], loadingIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingIndicator", required: false }] }] } });
|
|
96
92
|
|
|
97
93
|
class ButtonModule {
|
|
98
94
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-button.mjs","sources":["../../../projects/ng0/components/button/button.directive.ts","../../../projects/ng0/components/button/button.module.ts","../../../projects/ng0/components/button/bootkit-ng0-components-button.ts"],"sourcesContent":["import { Directive, Renderer2, ElementRef, OnInit, OnDestroy, input, DestroyRef, model, booleanAttribute } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HttpService } from '@bootkit/ng0/http';\n\n@Directive({\n selector: 'button[ng0Button], a[ng0Button], input[type=button][ng0Button], input[type=submit][ng0Button], input[type=reset][ng0Button]',\n exportAs: 'ng0Button',\n standalone: true,\n host: {\n '[class.disabled]': 'disabled()',\n '[prop.disabled]': 'disabled()',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.tabindex]': 'disabled() ? \"-1\" : \"\" ',\n }\n})\nexport class ButtonDirective implements OnInit, OnDestroy {\n private _loadingElement: any;\n\n /**\n * The IDs of the HTTP requests that this button listens to.\n * If one of these requests is in progress, it will show a loading indicator or will be disabled based on 'showLoading' and 'disableOnLoading' properties.\n */\n public request = input<string | string[] | undefined>(undefined);\n\n /** \n * Whether the button is disabled or not.\n */\n public disabled = model<boolean>(false);\n\n /**\n * Whether to wait for the HTTP response before enabling the button again.\n * If true, the button will remain disabled until the HTTP request completes.\n * This is useful for preventing multiple clicks while waiting for a response.\n * Default is true.\n */\n public disableDuringRequest = input(true, {transform: booleanAttribute});\n\n /**\n * Whether to show a loading indicator when the HTTP request is in progress.\n * If true, a loading spinner will be displayed on the button while the request is being processed.\n * Default is true.\n */\n public loadingIndicator = input(false, {transform: booleanAttribute});\n\n
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-button.mjs","sources":["../../../projects/ng0/components/button/button.directive.ts","../../../projects/ng0/components/button/button.module.ts","../../../projects/ng0/components/button/bootkit-ng0-components-button.ts"],"sourcesContent":["import { Directive, Renderer2, ElementRef, OnInit, OnDestroy, input, DestroyRef, model, booleanAttribute, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HttpService } from '@bootkit/ng0/http';\n\n@Directive({\n selector: 'button[ng0Button], a[ng0Button], input[type=button][ng0Button], input[type=submit][ng0Button], input[type=reset][ng0Button]',\n exportAs: 'ng0Button',\n standalone: true,\n host: {\n '[class.disabled]': 'disabled()',\n '[prop.disabled]': 'disabled()',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.tabindex]': 'disabled() ? \"-1\" : \"\" ',\n }\n})\nexport class ButtonDirective implements OnInit, OnDestroy {\n private _loadingElement: any;\n\n /**\n * The IDs of the HTTP requests that this button listens to.\n * If one of these requests is in progress, it will show a loading indicator or will be disabled based on 'showLoading' and 'disableOnLoading' properties.\n */\n public request = input<string | string[] | undefined>(undefined);\n\n /** \n * Whether the button is disabled or not.\n */\n public disabled = model<boolean>(false);\n\n /**\n * Whether to wait for the HTTP response before enabling the button again.\n * If true, the button will remain disabled until the HTTP request completes.\n * This is useful for preventing multiple clicks while waiting for a response.\n * Default is true.\n */\n public disableDuringRequest = input(true, { transform: booleanAttribute });\n\n /**\n * Whether to show a loading indicator when the HTTP request is in progress.\n * If true, a loading spinner will be displayed on the button while the request is being processed.\n * Default is true.\n */\n public loadingIndicator = input(false, { transform: booleanAttribute });\n\n private _element = inject(ElementRef);\n private _renderer = inject(Renderer2);\n private _http = inject(HttpService);\n private _destroyRef = inject(DestroyRef);\n\n constructor() {\n }\n\n ngOnInit(): void {\n this._renderer.setStyle(this._element.nativeElement, \"position\", \"relative\");\n\n if (this.request()) {\n this._http.events.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(e => {\n var ids = (Array.isArray(this.request()) ? this.request() : [this.request()]) as string[];\n\n if (ids.includes(e?.options?.id)) {\n let requestInProgress = e.type === 'Send' || e.type === 'Progress';\n\n if (this.disableDuringRequest()) {\n this.disabled.set(requestInProgress);\n }\n\n if (this.loadingIndicator()) {\n if (requestInProgress) {\n this._showLoading();\n } else {\n this._hideLoading();\n }\n }\n }\n });\n }\n }\n\n // @HostListener('click', ['$event']) private _onClick(e: MouseEvent): void {\n // if (!this._disabled) {\n // }\n // }\n\n private _showLoading() {\n this._loadingElement = this._renderer.createElement(\"div\");\n [\"spinner-grow\", \"spinner-grow-sm\", \"text-warning\"].forEach(s => this._renderer.addClass(this._loadingElement, s));\n this._renderer.setStyle(this._loadingElement, \"position\", \"absolute\");\n this._renderer.setStyle(this._loadingElement, \"top\", \"-25%\");\n this._renderer.setStyle(this._loadingElement, \"left\", \"-5px\");\n this._renderer.appendChild(this._element.nativeElement, this._loadingElement);\n }\n\n private _hideLoading() {\n this._renderer.removeChild(this._element.nativeElement, this._loadingElement);\n }\n\n ngOnDestroy(): void {\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ButtonDirective } from './button.directive';\n\n@NgModule({\n imports: [\n ButtonDirective,\n ],\n exports: [\n ButtonDirective,\n ]\n})\nexport class ButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
2
|
+
import { input, inject, ElementRef, Renderer2, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
|
|
6
6
|
class CardComponent {
|
|
7
|
-
_element;
|
|
8
|
-
_renderer;
|
|
9
7
|
header = input(...(ngDevMode ? [undefined, { debugName: "header" }] : []));
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
_element = inject(ElementRef);
|
|
9
|
+
_renderer = inject(Renderer2);
|
|
10
|
+
constructor() {
|
|
13
11
|
this._renderer.addClass(this._element.nativeElement, 'card');
|
|
14
12
|
}
|
|
15
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CardComponent, deps: [
|
|
13
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16
14
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.11", type: CardComponent, isStandalone: true, selector: "ng0-card", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ng0Card"], ngImport: i0, template: "<div *ngIf=\"header()\" class=\"card-header\">\n {{header()}}\n</div>\n\n<div class=\"card-body\">\n <ng-content></ng-content>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
17
15
|
}
|
|
18
16
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CardComponent, decorators: [{
|
|
19
17
|
type: Component,
|
|
20
18
|
args: [{ selector: 'ng0-card', exportAs: 'ng0Card', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div *ngIf=\"header()\" class=\"card-header\">\n {{header()}}\n</div>\n\n<div class=\"card-body\">\n <ng-content></ng-content>\n</div>\n" }]
|
|
21
|
-
}], ctorParameters: () => [
|
|
19
|
+
}], ctorParameters: () => [], propDecorators: { header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }] } });
|
|
22
20
|
|
|
23
21
|
class CardHeaderComponent {
|
|
24
22
|
_element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-card.mjs","sources":["../../../projects/ng0/components/card/card.component.ts","../../../projects/ng0/components/card/card.component.html","../../../projects/ng0/components/card/card-header.component.ts","../../../projects/ng0/components/card/card-header.component.html","../../../projects/ng0/components/card/card.module.ts","../../../projects/ng0/components/card/bootkit-ng0-components-card.ts"],"sourcesContent":["import { Component, ElementRef, Renderer2,
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-card.mjs","sources":["../../../projects/ng0/components/card/card.component.ts","../../../projects/ng0/components/card/card.component.html","../../../projects/ng0/components/card/card-header.component.ts","../../../projects/ng0/components/card/card-header.component.html","../../../projects/ng0/components/card/card.module.ts","../../../projects/ng0/components/card/bootkit-ng0-components-card.ts"],"sourcesContent":["import { Component, ElementRef, Renderer2, ChangeDetectionStrategy, input, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ng0-card',\n exportAs: 'ng0Card',\n templateUrl: 'card.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule]\n})\nexport class CardComponent {\n public header = input<string>();\n private _element = inject(ElementRef);\n private _renderer = inject(Renderer2);\n\n constructor() {\n this._renderer.addClass(this._element.nativeElement, 'card');\n }\n}\n","<div *ngIf=\"header()\" class=\"card-header\">\n {{header()}}\n</div>\n\n<div class=\"card-body\">\n <ng-content></ng-content>\n</div>\n","import { Component, ElementRef, Renderer2, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ng0-card-header',\n exportAs: 'ng0CardHeader',\n templateUrl: 'card-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule]\n})\nexport class CardHeaderComponent {\n constructor(private _element: ElementRef, private _renderer: Renderer2) { \n }\n}\n","<ng-content></ng-content>","import { NgModule } from '@angular/core';\nimport { CardComponent } from './card.component';\nimport { CardHeaderComponent } from './card-header.component';\n\nconst DECLARES = [\n CardComponent,\n CardHeaderComponent\n];\n\n@NgModule({\n imports: DECLARES,\n exports: DECLARES\n})\nexport class CardModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
-
import
|
|
2
|
+
import { Injectable, inject, input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
4
|
|
|
5
5
|
class CodeFormatter {
|
|
6
6
|
name;
|
|
@@ -36,31 +36,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
|
|
|
36
36
|
}], ctorParameters: () => [] });
|
|
37
37
|
|
|
38
38
|
class CodeComponent {
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
_formatters = inject(CodeFormatters);
|
|
40
|
+
_domSanitizer = inject(DomSanitizer);
|
|
41
41
|
/** Code formatter name */
|
|
42
42
|
formatter = input.required(...(ngDevMode ? [{ debugName: "formatter" }] : []));
|
|
43
43
|
/** Code */
|
|
44
44
|
code = input.required(...(ngDevMode ? [{ debugName: "code" }] : []));
|
|
45
45
|
_safeHtml = computed(() => {
|
|
46
|
-
var frmt = this.
|
|
46
|
+
var frmt = this._formatters.find(this.formatter());
|
|
47
47
|
if (frmt == null) {
|
|
48
48
|
console.warn(`Code formatter named "${this.formatter()}" not found.`);
|
|
49
49
|
return undefined;
|
|
50
50
|
}
|
|
51
|
-
return this.
|
|
51
|
+
return this._domSanitizer.bypassSecurityTrustHtml(frmt.format(this.code()));
|
|
52
52
|
}, ...(ngDevMode ? [{ debugName: "_safeHtml" }] : []));
|
|
53
|
-
|
|
54
|
-
this.formatters = formatters;
|
|
55
|
-
this.domSanitizer = domSanitizer;
|
|
56
|
-
}
|
|
57
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CodeComponent, deps: [{ token: CodeFormatters }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
58
54
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.11", type: CodeComponent, isStandalone: true, selector: "ng0-code", inputs: { formatter: { classPropertyName: "formatter", publicName: "formatter", isSignal: true, isRequired: true, transformFunction: null }, code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: true, transformFunction: null } }, exportAs: ["ng0Code"], ngImport: i0, template: "<pre class=\"language-{{formatter()}} formatter-{{formatter()}}\">@if(_safeHtml()) {<code class=\"language-{{formatter()}} formatter-{{formatter()}}\" [innerHtml]=\"_safeHtml()\" ></code>}@else {<code class=\"language-{{formatter()}} formatter-{{formatter()}}\" [innerText]=\"code()\"></code>}</pre>", styles: [":host{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
59
55
|
}
|
|
60
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CodeComponent, decorators: [{
|
|
61
57
|
type: Component,
|
|
62
58
|
args: [{ selector: 'ng0-code', exportAs: 'ng0Code', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<pre class=\"language-{{formatter()}} formatter-{{formatter()}}\">@if(_safeHtml()) {<code class=\"language-{{formatter()}} formatter-{{formatter()}}\" [innerHtml]=\"_safeHtml()\" ></code>}@else {<code class=\"language-{{formatter()}} formatter-{{formatter()}}\" [innerText]=\"code()\"></code>}</pre>", styles: [":host{display:block}\n"] }]
|
|
63
|
-
}],
|
|
59
|
+
}], propDecorators: { formatter: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatter", required: true }] }], code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: true }] }] } });
|
|
64
60
|
|
|
65
61
|
/**
|
|
66
62
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-code.mjs","sources":["../../../projects/ng0/components/code/types.ts","../../../projects/ng0/components/code/code-formatters.ts","../../../projects/ng0/components/code/code.component.ts","../../../projects/ng0/components/code/code.component.html","../../../projects/ng0/components/code/bootkit-ng0-components-code.ts"],"sourcesContent":["export type CodeFormatterFunc = (code: string) => string;\n\nexport class CodeFormatter {\n constructor(public readonly name: string, public readonly format: CodeFormatterFunc) {\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CodeFormatter, CodeFormatterFunc } from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CodeFormatters {\n private _formatters = new Array<CodeFormatter>();\n\n constructor() { }\n\n add(name: string, func: CodeFormatterFunc): CodeFormatter {\n var formatter = this._formatters.find(x => x.name == name);\n if (!formatter) {\n formatter = new CodeFormatter(name, func);\n this._formatters.push(formatter);\n }\n\n return formatter;\n }\n\n find(name: string) {\n return this._formatters.find(x => x.name == name);\n }\n}\n\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { CodeFormatters } from './code-formatters';\n\n@Component({\n selector: 'ng0-code',\n exportAs: 'ng0Code',\n styleUrls: ['./code.component.scss'],\n templateUrl: './code.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodeComponent {\n\n /** Code formatter name */\n formatter = input.required<string>();\n\n /** Code */\n code = input.required<string>();\n\n protected _safeHtml = computed(() => {\n var frmt = this.
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-code.mjs","sources":["../../../projects/ng0/components/code/types.ts","../../../projects/ng0/components/code/code-formatters.ts","../../../projects/ng0/components/code/code.component.ts","../../../projects/ng0/components/code/code.component.html","../../../projects/ng0/components/code/bootkit-ng0-components-code.ts"],"sourcesContent":["export type CodeFormatterFunc = (code: string) => string;\n\nexport class CodeFormatter {\n constructor(public readonly name: string, public readonly format: CodeFormatterFunc) {\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CodeFormatter, CodeFormatterFunc } from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CodeFormatters {\n private _formatters = new Array<CodeFormatter>();\n\n constructor() { }\n\n add(name: string, func: CodeFormatterFunc): CodeFormatter {\n var formatter = this._formatters.find(x => x.name == name);\n if (!formatter) {\n formatter = new CodeFormatter(name, func);\n this._formatters.push(formatter);\n }\n\n return formatter;\n }\n\n find(name: string) {\n return this._formatters.find(x => x.name == name);\n }\n}\n\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { CodeFormatters } from './code-formatters';\n\n@Component({\n selector: 'ng0-code',\n exportAs: 'ng0Code',\n styleUrls: ['./code.component.scss'],\n templateUrl: './code.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodeComponent {\n private _formatters = inject(CodeFormatters);\n private _domSanitizer = inject(DomSanitizer);\n\n /** Code formatter name */\n formatter = input.required<string>();\n\n /** Code */\n code = input.required<string>();\n\n protected _safeHtml = computed(() => {\n var frmt = this._formatters.find(this.formatter());\n\n if (frmt == null) {\n console.warn(`Code formatter named \"${this.formatter()}\" not found.`)\n return undefined;\n }\n\n return this._domSanitizer.bypassSecurityTrustHtml(frmt.format(this.code()));\n })\n}\n","<pre class=\"language-{{formatter()}} formatter-{{formatter()}}\">@if(_safeHtml()) {<code class=\"language-{{formatter()}} formatter-{{formatter()}}\" [innerHtml]=\"_safeHtml()\" ></code>}@else {<code class=\"language-{{formatter()}} formatter-{{formatter()}}\" [innerText]=\"code()\"></code>}</pre>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, effect, Directive, model, HostBinding, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
|
-
import
|
|
4
|
-
import { style, animate, trigger, state, transition } from '@angular/animations';
|
|
2
|
+
import { input, inject, ElementRef, Renderer2, effect, Directive, model, HostBinding, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
|
+
import { AnimationBuilder, style, animate, trigger, state, transition } from '@angular/animations';
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
6
|
* Directive to handle the collapse and expand functionality of a host element.
|
|
8
7
|
*/
|
|
9
8
|
class CollapseDirective {
|
|
10
|
-
el;
|
|
11
|
-
builder;
|
|
12
|
-
renderer;
|
|
13
9
|
/**
|
|
14
10
|
* Indicates whether the host element is collapsed.
|
|
15
11
|
* @input
|
|
@@ -21,11 +17,11 @@ class CollapseDirective {
|
|
|
21
17
|
timings = input('0.2s', ...(ngDevMode ? [{ debugName: "timings" }] : []));
|
|
22
18
|
_player;
|
|
23
19
|
_firstExecution = true;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
_el = inject(ElementRef);
|
|
21
|
+
_animationBuilder = inject(AnimationBuilder);
|
|
22
|
+
_renderer = inject(Renderer2);
|
|
23
|
+
constructor() {
|
|
24
|
+
this._renderer.setStyle(this._el.nativeElement, 'overflow', 'hidden');
|
|
29
25
|
effect(() => {
|
|
30
26
|
var collapsed = this.collapsed();
|
|
31
27
|
if (this._firstExecution) {
|
|
@@ -73,15 +69,15 @@ class CollapseDirective {
|
|
|
73
69
|
});
|
|
74
70
|
}
|
|
75
71
|
_playAnimation(animation) {
|
|
76
|
-
this._player = this.
|
|
72
|
+
this._player = this._animationBuilder.build(animation).create(this._el.nativeElement);
|
|
77
73
|
this._player.play();
|
|
78
74
|
}
|
|
79
|
-
_addClass = (cls) => this.
|
|
80
|
-
_removeClass = (cls) => this.
|
|
75
|
+
_addClass = (cls) => this._renderer.addClass(this._el.nativeElement, cls);
|
|
76
|
+
_removeClass = (cls) => this._renderer.removeClass(this._el.nativeElement, cls);
|
|
81
77
|
ngOnDestroy() {
|
|
82
78
|
this._player?.destroy();
|
|
83
79
|
}
|
|
84
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CollapseDirective, deps: [
|
|
80
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CollapseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
85
81
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.11", type: CollapseDirective, isStandalone: true, selector: "[ng0Collapse]", inputs: { collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, timings: { classPropertyName: "timings", publicName: "timings", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["ng0Collapse"], ngImport: i0 });
|
|
86
82
|
}
|
|
87
83
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CollapseDirective, decorators: [{
|
|
@@ -91,7 +87,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
|
|
|
91
87
|
exportAs: 'ng0Collapse',
|
|
92
88
|
standalone: true,
|
|
93
89
|
}]
|
|
94
|
-
}], ctorParameters: () => [
|
|
90
|
+
}], ctorParameters: () => [], propDecorators: { collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], timings: [{ type: i0.Input, args: [{ isSignal: true, alias: "timings", required: false }] }] } });
|
|
95
91
|
|
|
96
92
|
/**
|
|
97
93
|
* A component that provides collapse and expand functionality.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-collapse.mjs","sources":["../../../projects/ng0/components/collapse/collapse.directive.ts","../../../projects/ng0/components/collapse/collapse.component.ts","../../../projects/ng0/components/collapse/collapse.component.html","../../../projects/ng0/components/collapse/collapse.module.ts","../../../projects/ng0/components/collapse/bootkit-ng0-components-collapse.ts"],"sourcesContent":["import { Directive, OnInit, ElementRef, Renderer2, input, effect, OnDestroy } from '@angular/core';\nimport { animate, AnimationBuilder, AnimationMetadata, AnimationPlayer, style } from '@angular/animations';\n\n/** \n * Directive to handle the collapse and expand functionality of a host element. \n */\n@Directive({\n selector: '[ng0Collapse]',\n exportAs: 'ng0Collapse',\n standalone: true,\n})\nexport class CollapseDirective implements OnInit, OnDestroy {\n /**\n * Indicates whether the host element is collapsed. \n * @input \n */\n public collapsed = input(false);\n\n /** Animation timings for collapse/expand animations. \n * @input \n */\n public timings = input<string | number>('0.2s');\n\n private _player?: AnimationPlayer;\n private _firstExecution = true;\n\n constructor(private el: ElementRef, private builder: AnimationBuilder, private renderer: Renderer2) {\n renderer.setStyle(el.nativeElement, 'overflow', 'hidden');\n \n effect(() => {\n var collapsed = this.collapsed();\n if (this._firstExecution) {\n this._firstExecution = false;\n return;\n }\n\n if (collapsed)\n this._collapse()\n else\n this._expand();\n });\n }\n\n ngOnInit(): void {\n this._addClass('collapse');\n if (!this.collapsed()) {\n this._addClass('show');\n }\n }\n\n private _collapse() {\n if (this._player) {\n this._player.destroy();\n }\n\n this._playAnimation([\n style({ height: '*', opacity: '*' }),\n animate(this.timings(), style({ height: 0, opacity: 0 })),\n ])\n\n this._player!.onDone(() => {\n if (this.collapsed()) {\n this._removeClass('show')\n }\n });\n }\n\n private _expand() {\n if (this._player) {\n this._player.destroy();\n }\n\n this._addClass('show')\n this._playAnimation([\n style({ height: 0, opacity: 0 }),\n animate(this.timings(), style({ height: '*', opacity: '*' })),\n ]);\n\n this._player!.onDone(() => {\n this._player!.destroy()\n this._player = undefined;\n });\n }\n\n private _playAnimation(animation: AnimationMetadata | AnimationMetadata[]) {\n this._player = this.builder.build(animation).create(this.el.nativeElement);\n this._player.play();\n }\n\n private _addClass = (cls: string) => this.renderer.addClass(this.el.nativeElement, cls);\n private _removeClass = (cls: string) => this.renderer.removeClass(this.el.nativeElement, cls);\n\n ngOnDestroy(): void {\n this._player?.destroy();\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, input, model } from '@angular/core';\nimport { trigger, state, style, animate, transition } from '@angular/animations';\n\n/**\n * A component that provides collapse and expand functionality. \n*/\n@Component({\n selector: 'ng0-collapse',\n templateUrl: './collapse.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `:host{display :block; overflow: hidden}`,\n animations: [\n trigger('collapseExpand', [\n state('collapsed', style({ height: 0, opacity: 0, })),\n state('expanded', style({ height: '*', opacity: '*', })),\n transition('collapsed <=> expanded', [\n animate('{{timings}}')\n ])\n ])\n ]\n})\nexport class CollapseComponent {\n /**\n * Indicates whether the host element is collapsed. \n * @model \n */\n public collapsed = model(false);\n\n /** Animation timings for collapse/expand animations. \n * @input \n */\n public timings = input<string | number>('0.2s');\n\n @HostBinding('@collapseExpand')\n private get _collapseExpand() {\n return { value: this.collapsed() ? 'collapsed' : 'expanded', params: { timings: this.timings() } };\n }\n}\n","<ng-content></ng-content>","import { NgModule } from '@angular/core';\nimport { CollapseDirective } from './collapse.directive';\nimport { CollapseComponent } from './collapse.component';\n\nconst items = [\n CollapseDirective,\n CollapseComponent\n];\n\n@NgModule({\n imports: items,\n exports: items\n})\nexport class CollapseModule {\n}\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":"bootkit-ng0-components-collapse.mjs","sources":["../../../projects/ng0/components/collapse/collapse.directive.ts","../../../projects/ng0/components/collapse/collapse.component.ts","../../../projects/ng0/components/collapse/collapse.component.html","../../../projects/ng0/components/collapse/collapse.module.ts","../../../projects/ng0/components/collapse/bootkit-ng0-components-collapse.ts"],"sourcesContent":["import { Directive, OnInit, ElementRef, Renderer2, input, effect, OnDestroy, inject } from '@angular/core';\nimport { animate, AnimationBuilder, AnimationMetadata, AnimationPlayer, style } from '@angular/animations';\n\n/** \n * Directive to handle the collapse and expand functionality of a host element. \n */\n@Directive({\n selector: '[ng0Collapse]',\n exportAs: 'ng0Collapse',\n standalone: true,\n})\nexport class CollapseDirective implements OnInit, OnDestroy {\n /**\n * Indicates whether the host element is collapsed. \n * @input \n */\n public collapsed = input(false);\n\n /** Animation timings for collapse/expand animations. \n * @input \n */\n public timings = input<string | number>('0.2s');\n\n private _player?: AnimationPlayer;\n private _firstExecution = true;\n\n private _el = inject(ElementRef)\n private _animationBuilder = inject(AnimationBuilder)\n private _renderer = inject(Renderer2);\n\n constructor() {\n this._renderer.setStyle(this._el.nativeElement, 'overflow', 'hidden');\n\n effect(() => {\n var collapsed = this.collapsed();\n if (this._firstExecution) {\n this._firstExecution = false;\n return;\n }\n\n if (collapsed)\n this._collapse()\n else\n this._expand();\n });\n }\n\n ngOnInit(): void {\n this._addClass('collapse');\n if (!this.collapsed()) {\n this._addClass('show');\n }\n }\n\n private _collapse() {\n if (this._player) {\n this._player.destroy();\n }\n\n this._playAnimation([\n style({ height: '*', opacity: '*' }),\n animate(this.timings(), style({ height: 0, opacity: 0 })),\n ])\n\n this._player!.onDone(() => {\n if (this.collapsed()) {\n this._removeClass('show')\n }\n });\n }\n\n private _expand() {\n if (this._player) {\n this._player.destroy();\n }\n\n this._addClass('show')\n this._playAnimation([\n style({ height: 0, opacity: 0 }),\n animate(this.timings(), style({ height: '*', opacity: '*' })),\n ]);\n\n this._player!.onDone(() => {\n this._player!.destroy()\n this._player = undefined;\n });\n }\n\n private _playAnimation(animation: AnimationMetadata | AnimationMetadata[]) {\n this._player = this._animationBuilder.build(animation).create(this._el.nativeElement);\n this._player.play();\n }\n\n private _addClass = (cls: string) => this._renderer.addClass(this._el.nativeElement, cls);\n private _removeClass = (cls: string) => this._renderer.removeClass(this._el.nativeElement, cls);\n\n ngOnDestroy(): void {\n this._player?.destroy();\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, input, model } from '@angular/core';\nimport { trigger, state, style, animate, transition } from '@angular/animations';\n\n/**\n * A component that provides collapse and expand functionality. \n*/\n@Component({\n selector: 'ng0-collapse',\n templateUrl: './collapse.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `:host{display :block; overflow: hidden}`,\n animations: [\n trigger('collapseExpand', [\n state('collapsed', style({ height: 0, opacity: 0, })),\n state('expanded', style({ height: '*', opacity: '*', })),\n transition('collapsed <=> expanded', [\n animate('{{timings}}')\n ])\n ])\n ]\n})\nexport class CollapseComponent {\n /**\n * Indicates whether the host element is collapsed. \n * @model \n */\n public collapsed = model(false);\n\n /** Animation timings for collapse/expand animations. \n * @input \n */\n public timings = input<string | number>('0.2s');\n\n @HostBinding('@collapseExpand')\n private get _collapseExpand() {\n return { value: this.collapsed() ? 'collapsed' : 'expanded', params: { timings: this.timings() } };\n }\n}\n","<ng-content></ng-content>","import { NgModule } from '@angular/core';\nimport { CollapseDirective } from './collapse.directive';\nimport { CollapseComponent } from './collapse.component';\n\nconst items = [\n CollapseDirective,\n CollapseComponent\n];\n\n@NgModule({\n imports: items,\n exports: items\n})\nexport class CollapseModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-form-field.mjs","sources":["../../../projects/ng0/components/form-field/form-field.component.ts","../../../projects/ng0/components/form-field/form-field.component.html","../../../projects/ng0/components/form-field/form-field.module.ts","../../../projects/ng0/components/form-field/bootkit-ng0-components-form-field.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, DestroyRef, ElementRef, HostListener, inject, input, Renderer2, signal, ViewEncapsulation } from '@angular/core';\nimport { Component, ContentChild, AfterContentInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, NgControl } from '@angular/forms';\nimport { LocalizationService } from '@bootkit/ng0/localization';\n\n@Component({\n selector: 'ng0-form-field, ng0-field',\n exportAs: 'ng0FormField',\n templateUrl: './form-field.component.html',\n styleUrls: ['./form-field.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule],\n host: {\n '[class.ng0-form-field-required]': '_hasRequiredControl()',\n }\n})\nexport class FormFieldComponent implements AfterContentInit {\n @ContentChild(NgControl, { static: true, read: ElementRef }) private _ngControlElement?: ElementRef;\n private _destroyRef = inject(DestroyRef);\n private _renderer = inject(Renderer2);\n private _localizationService = inject(LocalizationService);\n // private _form = inject(NgForm, { optional: true });\n @ContentChild(NgControl) protected _ngControl?: NgControl;\n protected _status = signal<string | null>('');\n protected _hasRequiredControl = signal(false);\n protected _errorText = signal<string | undefined>(undefined);\n\n /**\n * The label text for the form field.\n */\n public readonly label = input<string>();\n\n /**\n * The hint text to display below the form field.\n */\n public readonly hint = input<string>();\n\n /**\n * If true, the form-field will show validation errors.\n */\n public readonly showErrors = input(true, { transform: booleanAttribute });\n\n /**\n * If undefined, the indicator will be shown based on the control's required state.\n * If true, the form-field will show a required indicator (*) next to the label (regardless of the control's required state).\n * If false, the required indicator will not be shown (regardless of the control's required state).\n */\n public readonly showRequired = input<boolean | undefined>(undefined);\n\n /**\n * If true, the form-field will show subscripts (e.g. hints, errors) for the field label.\n */\n public readonly showSubscripts = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the form-field will be rendered inside a \".input-group\" element.\n */\n public readonly inputGroup = input(true, { transform: booleanAttribute });\n\n ngAfterContentInit(): void {\n this._hasRequiredControl.set(this._isControlRequired());\n\n if (this._ngControl) {\n this._status.set(this._ngControl.status);\n\n this._ngControl.statusChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(change => {\n this._status.set(change);\n this._checkValidation();\n });\n\n this._ngControl.valueChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(value => {\n if (this._status() === 'INVALID' && this._ngControl!.errors) {\n this._checkValidation(); // Recheck validation errors\n }\n });\n }\n }\n\n private _checkValidation() {\n if (!this._ngControl || !this._ngControl.touched) {\n return;\n }\n\n let elm = this._ngControlElement!.nativeElement;\n let invalid = this._status() === 'INVALID';\n let errorText = invalid ?\n this._localizationService.get()?.translateFirstError(this._ngControl!.errors, 'Invalid')?.text :\n undefined;\n\n this._errorText.set(errorText);\n this._renderer.addClass(elm, invalid ? 'is-invalid' : 'is-valid');\n this._renderer.removeClass(elm, invalid ? 'is-valid' : 'is-invalid');\n }\n\n private _isControlRequired(): boolean {\n const validator = this._ngControl?.validator || this._ngControl?.control?.validator;\n const errors = validator && validator(new FormControl(null));\n return errors != null && errors['required'] === true;\n }\n\n @HostListener('focusout')\n private _onFocusOut() {\n this._checkValidation();\n }\n}\n","@let errorText = _errorText();\n@let showRequiredIndicator = showRequired();\n\n@if(label()) {\n<label class=\"ng0-form-field-label\">\n {{label()}}\n @if((showRequiredIndicator === true || (showRequiredIndicator == undefined && _hasRequiredControl()))) {\n <span class=\"ng0-form-field-required-indicator\">*</span>\n }\n</label>\n}\n\n@if(inputGroup()) {\n<div class=\"input-group\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n</div>\n}@else {\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n\n@if(showSubscripts()) {\n<div class=\"ng0-form-field-subscript\">\n @if(showErrors() && errorText && _ngControl?.touched) {\n <small class=\"ng0-form-field-error text-danger\" animate.enter=\"ng0-form-field-fadein\">\n {{errorText}}\n </small>\n }@else if(hint()) {\n <small class=\"ng0-form-field-hint\">\n {{hint()}}\n </small>\n }\n</div>\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormFieldComponent } from './form-field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormFieldComponent,\n ],\n exports: [\n FormFieldComponent,\n ]\n})\nexport class FormFieldModule { }\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":"bootkit-ng0-components-form-field.mjs","sources":["../../../projects/ng0/components/form-field/form-field.component.ts","../../../projects/ng0/components/form-field/form-field.component.html","../../../projects/ng0/components/form-field/form-field.module.ts","../../../projects/ng0/components/form-field/bootkit-ng0-components-form-field.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, DestroyRef, ElementRef, HostListener, inject, input, Renderer2, signal, ViewEncapsulation } from '@angular/core';\nimport { Component, ContentChild, AfterContentInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, NgControl } from '@angular/forms';\nimport { LocalizationService } from '@bootkit/ng0/localization';\n\n@Component({\n selector: 'ng0-form-field, ng0-field',\n exportAs: 'ng0FormField',\n templateUrl: './form-field.component.html',\n styleUrls: ['./form-field.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule],\n host: {\n '[class.ng0-form-field-required]': '_hasRequiredControl()',\n }\n})\nexport class FormFieldComponent implements AfterContentInit {\n @ContentChild(NgControl, { static: true, read: ElementRef }) private _ngControlElement?: ElementRef;\n private _destroyRef = inject(DestroyRef);\n private _renderer = inject(Renderer2);\n private _localizationService = inject(LocalizationService);\n // private _form = inject(NgForm, { optional: true });\n @ContentChild(NgControl) protected _ngControl?: NgControl;\n protected _status = signal<string | null>('');\n protected _hasRequiredControl = signal(false);\n protected _errorText = signal<string | undefined>(undefined);\n\n /**\n * The label text for the form field.\n */\n public readonly label = input<string>();\n\n /**\n * The hint text to display below the form field.\n */\n public readonly hint = input<string>();\n\n /**\n * If true, the form-field will show validation errors.\n */\n public readonly showErrors = input(true, { transform: booleanAttribute });\n\n /**\n * If undefined, the indicator will be shown based on the control's required state.\n * If true, the form-field will show a required indicator (*) next to the label (regardless of the control's required state).\n * If false, the required indicator will not be shown (regardless of the control's required state).\n */\n public readonly showRequired = input<boolean | undefined>(undefined);\n\n /**\n * If true, the form-field will show subscripts (e.g. hints, errors) for the field label.\n */\n public readonly showSubscripts = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the form-field will be rendered inside a \".input-group\" element.\n */\n public readonly inputGroup = input(true, { transform: booleanAttribute });\n\n ngAfterContentInit(): void {\n this._hasRequiredControl.set(this._isControlRequired());\n\n if (this._ngControl) {\n this._status.set(this._ngControl.status);\n\n this._ngControl.statusChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(change => {\n this._status.set(change);\n this._checkValidation();\n });\n\n this._ngControl.valueChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(value => {\n if (this._status() === 'INVALID' && this._ngControl!.errors) {\n this._checkValidation(); // Recheck validation errors\n }\n });\n }\n }\n\n private _checkValidation() {\n if (!this._ngControl || !this._ngControl.touched) {\n return;\n }\n\n let elm = this._ngControlElement!.nativeElement;\n let invalid = this._status() === 'INVALID';\n let errorText = invalid ?\n this._localizationService.get()?.translateFirstError(this._ngControl!.errors, 'Invalid')?.text :\n undefined;\n\n this._errorText.set(errorText);\n this._renderer.addClass(elm, invalid ? 'is-invalid' : 'is-valid');\n this._renderer.removeClass(elm, invalid ? 'is-valid' : 'is-invalid');\n }\n\n private _isControlRequired(): boolean {\n const validator = this._ngControl?.validator || this._ngControl?.control?.validator;\n const errors = validator && validator(new FormControl(null));\n return errors != null && errors['required'] === true;\n }\n\n @HostListener('focusout')\n protected _onFocusOut() {\n this._checkValidation();\n }\n}\n","@let errorText = _errorText();\n@let showRequiredIndicator = showRequired();\n\n@if(label()) {\n<label class=\"ng0-form-field-label\">\n {{label()}}\n @if((showRequiredIndicator === true || (showRequiredIndicator == undefined && _hasRequiredControl()))) {\n <span class=\"ng0-form-field-required-indicator\">*</span>\n }\n</label>\n}\n\n@if(inputGroup()) {\n<div class=\"input-group\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n</div>\n}@else {\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n\n@if(showSubscripts()) {\n<div class=\"ng0-form-field-subscript\">\n @if(showErrors() && errorText && _ngControl?.touched) {\n <small class=\"ng0-form-field-error text-danger\" animate.enter=\"ng0-form-field-fadein\">\n {{errorText}}\n </small>\n }@else if(hint()) {\n <small class=\"ng0-form-field-hint\">\n {{hint()}}\n </small>\n }\n</div>\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormFieldComponent } from './form-field.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormFieldComponent,\n ],\n exports: [\n FormFieldComponent,\n ]\n})\nexport class FormFieldModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -13,9 +13,9 @@ class PaginationComponent {
|
|
|
13
13
|
*/
|
|
14
14
|
pageSize = input(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Zero-based index of the selected page.
|
|
17
17
|
*/
|
|
18
|
-
selectedPage = input(
|
|
18
|
+
selectedPage = input(0, ...(ngDevMode ? [{ debugName: "selectedPage" }] : []));
|
|
19
19
|
/**
|
|
20
20
|
* Maximum number of visible pages.
|
|
21
21
|
* Default is 10.
|
|
@@ -44,7 +44,7 @@ class PaginationComponent {
|
|
|
44
44
|
itemClick = new EventEmitter();
|
|
45
45
|
_totalPagesCount;
|
|
46
46
|
_visiblePages = computed(() => {
|
|
47
|
-
let selectedPage = this.selectedPage()
|
|
47
|
+
let selectedPage = this.selectedPage();
|
|
48
48
|
let totalRecords = this.totalRecords();
|
|
49
49
|
let pageSize = this.pageSize();
|
|
50
50
|
if (!Number.isInteger(totalRecords) || totalRecords < 0) {
|
|
@@ -55,22 +55,22 @@ class PaginationComponent {
|
|
|
55
55
|
}
|
|
56
56
|
this._totalPagesCount = Math.ceil(totalRecords / pageSize);
|
|
57
57
|
if (selectedPage < 0 || selectedPage > this._totalPagesCount) {
|
|
58
|
-
throw new Error(`Selected page must be between 0 and ${this._totalPagesCount}.`);
|
|
58
|
+
throw new Error(`Selected page index must be between 0 and ${this._totalPagesCount - 1}.`);
|
|
59
59
|
}
|
|
60
60
|
let indices = [];
|
|
61
61
|
let firstVisiblePage = selectedPage;
|
|
62
62
|
let lastVisiblePage = firstVisiblePage;
|
|
63
63
|
let maxVisiblePages = this.maxVisiblePages();
|
|
64
64
|
indices.push(firstVisiblePage);
|
|
65
|
-
for (let i =
|
|
66
|
-
if (lastVisiblePage < this._totalPagesCount) {
|
|
65
|
+
for (let i = 0; i < maxVisiblePages; i++) {
|
|
66
|
+
if (lastVisiblePage < this._totalPagesCount - 1) {
|
|
67
67
|
lastVisiblePage++;
|
|
68
68
|
indices.push(lastVisiblePage);
|
|
69
69
|
}
|
|
70
70
|
if (indices.length >= maxVisiblePages) {
|
|
71
71
|
break;
|
|
72
72
|
}
|
|
73
|
-
if (firstVisiblePage >
|
|
73
|
+
if (firstVisiblePage > 0) {
|
|
74
74
|
firstVisiblePage--;
|
|
75
75
|
indices.unshift(firstVisiblePage);
|
|
76
76
|
}
|
|
@@ -83,14 +83,14 @@ class PaginationComponent {
|
|
|
83
83
|
this.itemClick.emit(pageIndex);
|
|
84
84
|
}
|
|
85
85
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
86
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.11", type: PaginationComponent, isStandalone: true, selector: "ng0-pagination", inputs: { totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: true, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, selectedPage: { classPropertyName: "selectedPage", publicName: "selectedPage", isSignal: true, isRequired: false, transformFunction: null }, maxVisiblePages: { classPropertyName: "maxVisiblePages", publicName: "maxVisiblePages", isSignal: true, isRequired: false, transformFunction: null }, showNextPreviousButtons: { classPropertyName: "showNextPreviousButtons", publicName: "showNextPreviousButtons", isSignal: true, isRequired: false, transformFunction: null }, showFirstLastButtons: { classPropertyName: "showFirstLastButtons", publicName: "showFirstLastButtons", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, exportAs: ["ng0Pagination"], ngImport: i0, template: "@let _selectedPage = selectedPage();\n\n<nav>\n <ul class=\"pagination\">\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(1)\">\n <ng-content select=\"first\">\n {{'first' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! - 1)\">\n <ng-content select=\"previous\">\n {{'previous' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @for (page of _visiblePages(); track page) {\n <li class=\"page-item\" [class.active]=\"_selectedPage === page\">\n <button class=\"page-link\" (click)=\"itemClick.emit(page)\">\n {{page}}\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! + 1)\">\n <ng-content select=\"next\">\n {{'next' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_totalPagesCount)\">\n <ng-content select=\"last\">\n {{'last' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n </ul>\n</nav>\n\n<style>\n .pagination {\n margin: 0;\n }\n</style>", styles: [".pagination{margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: TranslatePipe, name: "ng0Translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
86
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.11", type: PaginationComponent, isStandalone: true, selector: "ng0-pagination", inputs: { totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: true, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, selectedPage: { classPropertyName: "selectedPage", publicName: "selectedPage", isSignal: true, isRequired: false, transformFunction: null }, maxVisiblePages: { classPropertyName: "maxVisiblePages", publicName: "maxVisiblePages", isSignal: true, isRequired: false, transformFunction: null }, showNextPreviousButtons: { classPropertyName: "showNextPreviousButtons", publicName: "showNextPreviousButtons", isSignal: true, isRequired: false, transformFunction: null }, showFirstLastButtons: { classPropertyName: "showFirstLastButtons", publicName: "showFirstLastButtons", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, exportAs: ["ng0Pagination"], ngImport: i0, template: "@let _selectedPage = selectedPage();\n\n<nav>\n <ul class=\"pagination\">\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(1)\">\n <ng-content select=\"first\">\n {{'first' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! - 1)\">\n <ng-content select=\"previous\">\n {{'previous' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @for (page of _visiblePages(); track page) {\n <li class=\"page-item\" [class.active]=\"_selectedPage === page\">\n <button class=\"page-link\" (click)=\"itemClick.emit(page)\">\n {{page + 1}}\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount - 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! + 1)\">\n <ng-content select=\"next\">\n {{'next' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount - 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_totalPagesCount)\">\n <ng-content select=\"last\">\n {{'last' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n </ul>\n</nav>\n\n<style>\n .pagination {\n margin: 0;\n }\n</style>", styles: [".pagination{margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: TranslatePipe, name: "ng0Translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
87
87
|
}
|
|
88
88
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: PaginationComponent, decorators: [{
|
|
89
89
|
type: Component,
|
|
90
90
|
args: [{ selector: 'ng0-pagination', exportAs: 'ng0Pagination', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
91
91
|
CommonModule,
|
|
92
92
|
TranslatePipe
|
|
93
|
-
], template: "@let _selectedPage = selectedPage();\n\n<nav>\n <ul class=\"pagination\">\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(1)\">\n <ng-content select=\"first\">\n {{'first' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! - 1)\">\n <ng-content select=\"previous\">\n {{'previous' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @for (page of _visiblePages(); track page) {\n <li class=\"page-item\" [class.active]=\"_selectedPage === page\">\n <button class=\"page-link\" (click)=\"itemClick.emit(page)\">\n {{page}}\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! + 1)\">\n <ng-content select=\"next\">\n {{'next' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_totalPagesCount)\">\n <ng-content select=\"last\">\n {{'last' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n </ul>\n</nav>\n\n<style>\n .pagination {\n margin: 0;\n }\n</style>" }]
|
|
93
|
+
], template: "@let _selectedPage = selectedPage();\n\n<nav>\n <ul class=\"pagination\">\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(1)\">\n <ng-content select=\"first\">\n {{'first' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! - 1)\">\n <ng-content select=\"previous\">\n {{'previous' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @for (page of _visiblePages(); track page) {\n <li class=\"page-item\" [class.active]=\"_selectedPage === page\">\n <button class=\"page-link\" (click)=\"itemClick.emit(page)\">\n {{page + 1}}\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount - 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! + 1)\">\n <ng-content select=\"next\">\n {{'next' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount - 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_totalPagesCount)\">\n <ng-content select=\"last\">\n {{'last' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n </ul>\n</nav>\n\n<style>\n .pagination {\n margin: 0;\n }\n</style>" }]
|
|
94
94
|
}], propDecorators: { totalRecords: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalRecords", required: true }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], selectedPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedPage", required: false }] }], maxVisiblePages: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisiblePages", required: false }] }], showNextPreviousButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNextPreviousButtons", required: false }] }], showFirstLastButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFirstLastButtons", required: false }] }], itemClick: [{
|
|
95
95
|
type: Output
|
|
96
96
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-pagination.mjs","sources":["../../../projects/ng0/components/pagination/pagination.component.ts","../../../projects/ng0/components/pagination/pagination.component.html","../../../projects/ng0/components/pagination/pagination.module.ts","../../../projects/ng0/components/pagination/bootkit-ng0-components-pagination.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, ChangeDetectionStrategy, input, computed, Output, EventEmitter } from '@angular/core';\nimport { TranslatePipe } from '@bootkit/ng0/localization';\n\n@Component({\n selector: 'ng0-pagination',\n exportAs: 'ng0Pagination',\n templateUrl: './pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n TranslatePipe\n ]\n})\nexport class PaginationComponent {\n /**\n * Total number of records.\n */\n public totalRecords = input.required<number>();\n\n /**\n * Page size. Number of items in each page.\n */\n public pageSize = input<number>(10);\n\n /** \n *
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-pagination.mjs","sources":["../../../projects/ng0/components/pagination/pagination.component.ts","../../../projects/ng0/components/pagination/pagination.component.html","../../../projects/ng0/components/pagination/pagination.module.ts","../../../projects/ng0/components/pagination/bootkit-ng0-components-pagination.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, ChangeDetectionStrategy, input, computed, Output, EventEmitter } from '@angular/core';\nimport { TranslatePipe } from '@bootkit/ng0/localization';\n\n@Component({\n selector: 'ng0-pagination',\n exportAs: 'ng0Pagination',\n templateUrl: './pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n TranslatePipe\n ]\n})\nexport class PaginationComponent {\n /**\n * Total number of records.\n */\n public totalRecords = input.required<number>();\n\n /**\n * Page size. Number of items in each page.\n */\n public pageSize = input<number>(10);\n\n /** \n * Zero-based index of the selected page.\n */\n public selectedPage = input<number>(0);\n\n /**\n * Maximum number of visible pages.\n * Default is 10.\n */\n public maxVisiblePages = input<number>(10);\n\n /**\n * Show first and last buttons.\n * Default is true.\n */\n public showNextPreviousButtons = input<boolean | undefined>(true);\n\n /**\n * Show first and last buttons.\n * Default is true.\n */\n public showFirstLastButtons = input<boolean | undefined>(true);\n\n /**\n * Total number of pages.\n * This is a computed property based on totalRecords and pageSize.\n * It is not an input property.\n */\n public get totalPagesCount() { return this._totalPagesCount; }\n\n /** \n * Emits the selected page index when a page is clicked.\n * The index starts from 1.\n */\n @Output() public itemClick = new EventEmitter<number>();\n\n protected _totalPagesCount!: number;\n\n protected _visiblePages = computed(() => {\n let selectedPage = this.selectedPage();\n let totalRecords = this.totalRecords();\n let pageSize = this.pageSize();\n\n if (!Number.isInteger(totalRecords) || totalRecords < 0) {\n throw new Error('Total items must be a posotive integer.');\n }\n\n if (!Number.isInteger(pageSize) || pageSize <= 0) {\n throw new Error('Page size must be a posotive integer.');\n }\n\n this._totalPagesCount = Math.ceil(totalRecords / pageSize);\n\n if (selectedPage < 0 || selectedPage > this._totalPagesCount) {\n throw new Error(`Selected page index must be between 0 and ${this._totalPagesCount - 1}.`);\n }\n\n let indices = [];\n let firstVisiblePage = selectedPage;\n let lastVisiblePage = firstVisiblePage;\n let maxVisiblePages = this.maxVisiblePages();\n indices.push(firstVisiblePage);\n\n for (let i = 0; i < maxVisiblePages; i++) {\n if (lastVisiblePage < this._totalPagesCount - 1) {\n lastVisiblePage++;\n indices.push(lastVisiblePage);\n }\n\n if (indices.length >= maxVisiblePages) {\n break;\n }\n\n if (firstVisiblePage > 0) {\n firstVisiblePage--;\n indices.unshift(firstVisiblePage);\n }\n }\n\n return indices;\n });\n\n public _onPageChange(pageIndex: number) {\n debugger\n console.log('click')\n this.itemClick.emit(pageIndex);\n }\n\n}\n","@let _selectedPage = selectedPage();\n\n<nav>\n <ul class=\"pagination\">\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(1)\">\n <ng-content select=\"first\">\n {{'first' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage <= 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! - 1)\">\n <ng-content select=\"previous\">\n {{'previous' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @for (page of _visiblePages(); track page) {\n <li class=\"page-item\" [class.active]=\"_selectedPage === page\">\n <button class=\"page-link\" (click)=\"itemClick.emit(page)\">\n {{page + 1}}\n </button>\n </li>\n }\n\n @if(showNextPreviousButtons() || showNextPreviousButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount - 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_selectedPage! + 1)\">\n <ng-content select=\"next\">\n {{'next' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n\n @if(showFirstLastButtons() || showFirstLastButtons() == undefined) {\n <li class=\"page-item\" [class.disabled]=\"_selectedPage == undefined || _selectedPage >= _totalPagesCount - 1\">\n <button class=\"page-link\" (click)=\"itemClick.emit(_totalPagesCount)\">\n <ng-content select=\"last\">\n {{'last' | ng0Translate}}\n </ng-content>\n </button>\n </li>\n }\n </ul>\n</nav>\n\n<style>\n .pagination {\n margin: 0;\n }\n</style>","import { NgModule } from '@angular/core';\nimport { PaginationComponent } from './pagination.component';\n\n@NgModule({\n imports: [\n PaginationComponent\n ],\n exports: [\n PaginationComponent\n ]\n})\nexport class PaginationModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -326,9 +326,8 @@ class TableComponent {
|
|
|
326
326
|
}
|
|
327
327
|
if (this.pageable()) {
|
|
328
328
|
page = {
|
|
329
|
-
index: pageIndex || this._lastRequest?.page?.index ||
|
|
329
|
+
index: pageIndex || this._lastRequest?.page?.index || 0,
|
|
330
330
|
size: this._lastRequest?.page?.size || 10,
|
|
331
|
-
zeroBased: false
|
|
332
331
|
};
|
|
333
332
|
}
|
|
334
333
|
if (this.sortable()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-table.mjs","sources":["../../../projects/ng0/components/table/table-column.directive.ts","../../../projects/ng0/components/table/table-detail-row.directive.ts","../../../projects/ng0/components/table/table.component.ts","../../../projects/ng0/components/table/table.component.html","../../../projects/ng0/components/table/table.module.ts","../../../projects/ng0/components/table/bootkit-ng0-components-table.ts"],"sourcesContent":["import { booleanAttribute, ContentChild, Directive, input, model, OnInit, signal, TemplateRef } from '@angular/core';\nimport { TableCellType } from './types';\n\n@Directive({\n selector: 'ng0-table-col',\n standalone: true,\n})\nexport class TableColumnDirective implements OnInit {\n /**\n * The field in the data source to bind to. If not set, the column will not display any data.\n */\n field = input<string>();\n\n /**\n * The title of the column. This will be displayed in the header row.\n */\n title = input<string>();\n\n /**\n * Text to display in the cell if the value is null or undefined.\n */\n emptyCellText = input<string>();\n\n /**\n * Type of the table cell.\n */\n type = input<TableCellType>('text');\n\n /**\n * CSS class(es) to apply to the table cell.\n */\n cellClass = input<string | string[] | { [klass: string]: any; } | null>();\n\n /** \n * @deprecated Use `cellClass` instead.\n */\n bold = input(false, { transform: booleanAttribute });\n\n /** \n * @deprecated Use `cellClass` instead.\n */\n shrink = input(false, { transform: booleanAttribute });\n\n /**\n * If true, the column will support filtering.\n */\n filterable = input(false, { transform: booleanAttribute });\n\n /**\n * The current filter value of the column.\n */\n filterValue = model<any>();\n\n /**\n * The field to use for filtering. If not set, the `field` property will be used.\n * @deprecated Use `fieldName` instead.\n */\n filterField = input<string>();\n\n /**\n * The current filter operator of the column.\n */\n filterOperator = model<string>();\n\n /**\n * The list of filter operators to show in the filter dropdown. If not set, a default list will be used based on the column type.\n */\n filterOperators = input<string[]>();\n\n /**\n * If true, the filter operators dropdown will be shown.\n */\n showFilterOperators = signal(false);\n\n /**\n * The name of the field in the data source. If not set, the `field` property will be used.\n */\n fieldName = input<string>();\n\n /**\n * If true, the column will support sorting.\n */\n public sortable = input(false, { transform: booleanAttribute });\n\n /**\n * The current sort direction of the column.\n */\n public sortDirection = model<'none' | 'asc' | 'desc'>('none');\n\n @ContentChild(TemplateRef) template?: TemplateRef<any>;\n\n constructor() {\n }\n\n ngOnInit(): void {\n if (this.filterOperator() == undefined) {\n this.filterOperator.set(this.type() == 'text' ? 'contains' : 'eq');\n }\n }\n\n /**\n * Get the list of filter operators to show in the filter dropdown.\n */\n public getFilterOperators(): string[] {\n let op = this.filterOperators();\n if (op && op.length > 0)\n return op;\n\n let type = this.type();\n if (type == 'number' || type == 'currency' || type == 'date' || type == 'time') {\n return ['eq', 'ne', 'gt', 'gte', 'lt', 'lte',]\n } else if (type == 'text') {\n return ['contains', 'startsWith', 'endsWith', 'eq', 'ne']\n } else {\n return []\n }\n }\n\n /**\n * Toggle the sort direction of the column.\n * @returns void\n */\n public toggleSortDirection(): void {\n if (!this.sortable()) {\n return;\n }\n\n let dir = this.sortDirection();\n if (dir === 'none') {\n this.sortDirection.set('asc');\n } else if (dir === 'asc') {\n this.sortDirection.set('desc');\n } else {\n this.sortDirection.set('none');\n }\n }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n\n@Directive({\n selector: '[ng0-table-detail-row]',\n standalone: true,\n})\nexport class TableDetailRowDirective {\n @Input() showCallback?: (row: any) => boolean;\n\n constructor(public readonly templateRef: TemplateRef<any>) {\n }\n}\n","import { AfterContentInit, booleanAttribute, ChangeDetectionStrategy, Component, computed, ContentChild, ContentChildren, DestroyRef, HostBinding, input, model, OnDestroy, OnInit, QueryList, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { formatString } from '@bootkit/ng0/common';\nimport { LocalizationModule, LocalizationService, TableComponentPagingFormatter } from '@bootkit/ng0/localization';\nimport { DataRequest, DataRequestFilter, DataRequestPage, DataRequestSort, DataResult, DataSource, dataSourceAttribute, DataSourceLike, LogicalOperator } from '@bootkit/ng0/data';\nimport { PaginationComponent } from '@bootkit/ng0/components/pagination';\nimport { TablePagingOptions } from './types';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NumberDirective } from '@bootkit/ng0/form';\n\n/**\n * A generic table component that can display data in a tabular format.\n * It supports features like pagination, sorting, filtering, and row details.\n * It can be used with any data source that implements the DataSource interface.\n */\n@Component({\n selector: 'ng0-table',\n exportAs: 'ng0Table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n LocalizationModule,\n PaginationComponent,\n NumberDirective,\n OverlayModule\n ]\n})\nexport class TableComponent implements OnInit, AfterContentInit, OnDestroy {\n /**\n * The data source for the table.\n * This can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\n public source = input.required<DataSourceLike<any>>();\n\n /**\n * If true, the table will automatically load data when initialized.\n * This is useful for tables that need to display data immediately without user interaction.\n */\n public autoLoad = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will show row numbers.\n * This will add a column to the left of the table with the row numbers.\n */\n public showRowNumbers = input(false, { transform: booleanAttribute });\n\n /** \n * If true, the table will show the header row.\n */\n public showHeader = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will support pagination.\n * If false, the table will load all records at once.\n */\n public pageable = input<TablePagingOptions | undefined, TablePagingOptions | boolean>(undefined, {\n transform: v => {\n if (v === undefined || v === null || v === false) {\n return undefined;\n }\n\n if (v === true) {\n v = {};\n }\n\n v.pageIndex = v.pageIndex ?? 1;\n v.pageSize = v.pageSize ?? 10;\n v.maxVisiblePages = v.maxVisiblePages ?? 10;\n v.showPagingControls = v.showPagingControls ?? true;\n return v;\n }\n });\n\n /**\n * If true, the table will support sorting.\n * This will add a sort icon to each column header.\n */\n public sortable = input(true, { transform: booleanAttribute });\n\n /**\n * The CSS class to apply to the table element.\n * This can be used to apply custom styles to the table.\n */\n public tableClass = input<string | string[]>();\n\n /**\n * The CSS class to apply to the header element.\n */\n public headerClass = input<string>();\n\n /**\n * The caption of the table.\n */\n public caption = input<string>();\n\n /**\n * The height of the table in pixels.\n * This can be used to set a fixed height for the table.\n */\n public height = input<number>();\n\n /**\n * If true, the table will support filtering.\n * This will add a filter input to each column header.\n */\n public filterable = input(false, { transform: booleanAttribute });\n\n /**\n * The indicator to show while the table is loading data for the first time.\n */\n public loadingIndicator = input<'none' | 'simple' | 'spinner', boolean | 'none' | 'simple' | 'spinner'>('spinner', {\n transform: v => {\n if (typeof v === 'boolean') {\n return v ? 'spinner' : 'none';\n }\n return v;\n }\n });\n\n /** If true, the table will show a loading cover while data is being loaded.\n * This can be used to prevent user interaction with the table while loading.\n * This cover is not displayed when the table is loading for the first time.\n * Instead, the table will show a loading based on loadingIndicator settings.\n */\n public loadingCover = input<'none' | 'simple' | 'spinner', boolean | 'none' | 'simple' | 'spinner'>('spinner', {\n transform: v => {\n if (typeof v === 'boolean') {\n return v ? 'spinner' : 'none';\n }\n return v;\n }\n });\n\n // @Input() rowColor?: (row: any) => BootstrapColor;\n\n @ContentChildren(TableColumnDirective)\n protected _columns!: QueryList<TableColumnDirective>;\n\n @ContentChild(TableDetailRowDirective)\n protected _detailRow?: TableDetailRowDirective;\n\n protected _dataResult = signal<DataResult | undefined>(undefined);\n protected _lastRequest?: DataRequest; // The last data request made to the data source\n protected _loadingRequest?: DataRequest; // The current data request being processed\n protected _rowStates = new Map<any, { expanded: boolean }>();\n protected _formatString = formatString;\n private _changeSubscription?: Subscription;\n protected _dataSource!: DataSource;\n protected _pagingFormatter!: TableComponentPagingFormatter;\n protected _lastError?: any;\n\n\n constructor(protected _ls: LocalizationService, private _destroyRef: DestroyRef) {\n }\n\n ngOnInit(): void {\n\n }\n\n ngAfterContentInit(): void {\n this._dataSource = dataSourceAttribute(this.source());\n const locale = this._ls.get();\n this._pagingFormatter = locale?.definition.components?.table?.pagingInfo ??\n ((o) => `Showing ${o.firstRecord}-${o.lastRecord} of ${o.totalRecords} records`);\n\n // this._changeSubscription = this.dataSource().change.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(result => {\n // this.reload();\n // });\n\n if (this.autoLoad()) {\n this.load(this.pageable()?.pageIndex);\n }\n }\n\n /**\n * Load data for the specified page index (optional).\n * @param pageIndex The page index to load.\n */\n public load(pageIndex?: number) {\n let page: DataRequestPage | undefined;\n let filters: DataRequestFilter[] = [];\n let sort: DataRequestSort | undefined;\n\n if (this.filterable()) {\n this._columns.forEach(col => {\n if (col.filterable() && col.filterValue() != '' && col.filterValue() != undefined) {\n filters.push({ field: col.fieldName() ?? col.filterField() ?? col.field(), value: col.filterValue(), operator: col.filterOperator() });\n }\n });\n }\n\n if (this.pageable()) {\n page = {\n index: pageIndex || this._lastRequest?.page?.index || 1,\n size: this._lastRequest?.page?.size || 10,\n zeroBased: false\n };\n }\n\n if (this.sortable()) {\n let col = this._columns.find(c => c.sortable() && c.sortDirection() != 'none' && (c.field() != '' || c.fieldName() != ''));\n if (col) {\n sort = { \n field: col.fieldName() ?? col.field()!, \n asc: col.sortDirection() === 'asc' \n }\n }\n }\n\n this._loadingRequest = new DataRequest({ page, filters, sort, select: [], computeTotal: true });\n\n this._dataSource.load(this._loadingRequest)\n .pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n next: result => {\n this._dataResult.set(result);\n this._lastRequest = this._loadingRequest;\n this._loadingRequest = undefined;\n this._lastError = undefined;\n }, error: err => {\n this._lastError = err;\n this._lastRequest = this._loadingRequest;\n this._loadingRequest = undefined;\n }\n });\n }\n\n /**\n * Determines if the table is currently loading data.\n */\n @HostBinding('class.ng0-loading')\n public get isLoading() {\n return this._dataSource.isLoading;\n }\n\n protected _getCellValue(row: any, col: TableColumnDirective) {\n var subFields = col.field()!.split('.');\n let value = row[subFields[0]];\n for (let i = 1; i < subFields.length; i++) {\n if (value == null) break;\n value = value[subFields[i]];\n }\n\n return value;\n }\n\n\n protected _onPageChange(pageIndex: number) {\n this.load(pageIndex);\n }\n\n protected _onToggleRowDetailClick(row: any) {\n var state = this._rowStates.get(row)\n if (!state) {\n this._rowStates.set(row, { expanded: true });\n } else {\n state.expanded = !state.expanded;\n }\n }\n\n protected isRowExpanded(row: any) {\n var state = this._rowStates.get(row)\n return state == undefined ? false : state.expanded;\n }\n\n protected _onToggleFilterOperator(col: TableColumnDirective) {\n if (col.showFilterOperators()) {\n col.showFilterOperators.set(false)\n } else {\n this._columns.forEach(x => x.showFilterOperators.set(false));\n col.showFilterOperators.set(true)\n }\n }\n\n protected _onSelectFilterOperator(col: TableColumnDirective, filterOperator: string) {\n col.filterOperator.set(filterOperator);\n this._columns.forEach(x => x.showFilterOperators.set(false));\n this.load(0);\n }\n\n ngOnDestroy(): void {\n this._changeSubscription?.unsubscribe();\n }\n}\n","@let $dataResult = _dataResult();\n@let $pageable = pageable();\n@let $pageIndex = _lastRequest?.page?.index ?? 1;\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecord = $pageable ? ($pageable.pageSize! * ($pageIndex - 1) + 1) : 1;\n@let $lastRecord = $data ? $firstRecord + $data.length - 1 : 1;\n@let $isLoading = _dataSource.isLoading();\n@let $isFirstLoad = $dataResult == undefined;\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <caption>{{caption()}}</caption>\n }\n\n @if (showHeader()) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n }\n\n @if (filterable()) {\n <ng-container *ngTemplateOutlet=\"filtersTemplate\"></ng-container>\n }\n\n <tbody>\n @if ($isLoading && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n <ng-container *ngTemplateOutlet=\"dataRowsTemplate\"></ng-container>\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_lastError) {\n <ng-container *ngTemplateOutlet=\"nowDataTemplate\"></ng-container>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n\n@if ($isLoading && !$isFirstLoad && loadingCover()) {\n<div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n</div>\n}\n\n<ng-template #filtersTemplate>\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <th>\n @if(col.filterable() && (col.field() || col.filterValue())) {\n\n <div class=\"input-group\">\n @switch (col.type()) {\n @case ('text') {\n <input [name]=\"'filter-' + col.field\"\n type=\"search\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n @case ('number') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"search\"\n ng0Number\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n }\n\n <button class=\"btn btn-outline-light\"\n style=\"border-color: var(--bs-border-color);\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"_onToggleFilterOperator(col)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19 3H5C3.58579 3 2.87868 3 2.43934 3.4122C2 3.8244 2 4.48782 2 5.81466V6.50448C2 7.54232 2 8.06124 2.2596 8.49142C2.5192 8.9216 2.99347 9.18858 3.94202 9.72255L6.85504 11.3624C7.49146 11.7206 7.80967 11.8998 8.03751 12.0976C8.51199 12.5095 8.80408 12.9935 8.93644 13.5872C9 13.8722 9 14.2058 9 14.8729L9 17.5424C9 18.452 9 18.9067 9.25192 19.2613C9.50385 19.6158 9.95128 19.7907 10.8462 20.1406C12.7248 20.875 13.6641 21.2422 14.3321 20.8244C15 20.4066 15 19.4519 15 17.5424V14.8729C15 14.2058 15 13.8722 15.0636 13.5872C15.1959 12.9935 15.488 12.5095 15.9625 12.0976C16.1903 11.8998 16.5085 11.7206 17.145 11.3624L20.058 9.72255C21.0065 9.18858 21.4808 8.9216 21.7404 8.49142C22 8.06124 22 7.54232 22 6.50448V5.81466C22 4.48782 22 3.8244 21.5607 3.4122C21.1213 3 20.4142 3 19 3Z\"\n stroke=\"#1C274C\" stroke-width=\"1.5\" />\n </svg>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"col.showFilterOperators()\"\n (overlayOutsideClick)=\"col.showFilterOperators.set(false)\"\n (detach)=\"col.showFilterOperators.set(false)\">\n <ul class=\"dropdown-menu show\" animate.enter=\"fade-in\">\n @for (item of col.getFilterOperators(); track $index) {\n <li>\n <button class=\"dropdown-item\" [class.active]=\"item == col.filterOperator()\"\n (click)=\"_onSelectFilterOperator(col, item)\">\n {{_ls.get()?.definition?.data?.logicalOperators?.[item] ?? item }}\n </button>\n </li>\n }\n </ul>\n </ng-template>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #headerTemplate>\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th\n (click)=\"col.toggleSortDirection(); load()\"\n [class.sortable]=\"sortable() && col.sortable()\"\n [ngClass]=\"{ \n 'sort-asc': col.sortDirection() == 'asc', \n 'sort-desc': col.sortDirection() == 'desc',\n 'sort-none': col.sortDirection() == 'none'\n }\">\n {{ col.title() }}\n\n @if(sortable() && col.sortable()) {\n <svg class=\"ng0-table-sort-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 7L12 16\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M8 13L12 17L16 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #dataRowsTemplate>\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecord + $index }}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass()\"\n [class.shrinked]=\"col.shrink()\"\n [class.fw-bold]=\"col.bold()\">\n @if (col.template) {\n <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row }\">\n </ng-container>\n } @else if (col.field()) {\n @let cellValue = _getCellValue(row, col);\n\n @if ((cellValue === null || cellValue === undefined) && col.emptyCellText()) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\") {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\") {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n }@else {\n {{ cellValue }}\n }\n }\n }\n }\n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\">\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"></ng-container>\n </td>\n </tr>\n }\n }\n</ng-template>\n\n<ng-template #footerTemplate>\n @if ($pageable && $pageable.showPagingControls && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"$pageable.showFirstLastButtons == true\"\n [showNextPreviousButtons]=\"$pageable.showNextPreviousButtons == true\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"$pageable.pageSize!\"\n [selectedPage]=\"$pageIndex\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"$pageable.maxVisiblePages!\">\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if ($pageable.showPageSizeOptions || $pageable.showPageSizeOptions == undefined) {\n <div class=\"ng0-table-paging-options\">\n <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select>\n </div>\n }\n\n @if ($pageable.showPagingInfo == undefined || $pageable.showPagingInfo) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecord, lastRecord: $lastRecord, totalRecords: $totalRecordsCount!,\n currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</ng-template>\n\n<ng-template #nowDataTemplate>\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n</ng-template>","import { NgModule } from '@angular/core';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableComponent } from './table.component';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\n\n@NgModule({\n imports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective,\n ],\n exports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective\n ],\n})\nexport class TableModule { }\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":"bootkit-ng0-components-table.mjs","sources":["../../../projects/ng0/components/table/table-column.directive.ts","../../../projects/ng0/components/table/table-detail-row.directive.ts","../../../projects/ng0/components/table/table.component.ts","../../../projects/ng0/components/table/table.component.html","../../../projects/ng0/components/table/table.module.ts","../../../projects/ng0/components/table/bootkit-ng0-components-table.ts"],"sourcesContent":["import { booleanAttribute, ContentChild, Directive, input, model, OnInit, signal, TemplateRef } from '@angular/core';\nimport { TableCellType } from './types';\n\n@Directive({\n selector: 'ng0-table-col',\n standalone: true,\n})\nexport class TableColumnDirective implements OnInit {\n /**\n * The field in the data source to bind to. If not set, the column will not display any data.\n */\n field = input<string>();\n\n /**\n * The title of the column. This will be displayed in the header row.\n */\n title = input<string>();\n\n /**\n * Text to display in the cell if the value is null or undefined.\n */\n emptyCellText = input<string>();\n\n /**\n * Type of the table cell.\n */\n type = input<TableCellType>('text');\n\n /**\n * CSS class(es) to apply to the table cell.\n */\n cellClass = input<string | string[] | { [klass: string]: any; } | null>();\n\n /** \n * @deprecated Use `cellClass` instead.\n */\n bold = input(false, { transform: booleanAttribute });\n\n /** \n * @deprecated Use `cellClass` instead.\n */\n shrink = input(false, { transform: booleanAttribute });\n\n /**\n * If true, the column will support filtering.\n */\n filterable = input(false, { transform: booleanAttribute });\n\n /**\n * The current filter value of the column.\n */\n filterValue = model<any>();\n\n /**\n * The field to use for filtering. If not set, the `field` property will be used.\n * @deprecated Use `fieldName` instead.\n */\n filterField = input<string>();\n\n /**\n * The current filter operator of the column.\n */\n filterOperator = model<string>();\n\n /**\n * The list of filter operators to show in the filter dropdown. If not set, a default list will be used based on the column type.\n */\n filterOperators = input<string[]>();\n\n /**\n * If true, the filter operators dropdown will be shown.\n */\n showFilterOperators = signal(false);\n\n /**\n * The name of the field in the data source. If not set, the `field` property will be used.\n */\n fieldName = input<string>();\n\n /**\n * If true, the column will support sorting.\n */\n public sortable = input(false, { transform: booleanAttribute });\n\n /**\n * The current sort direction of the column.\n */\n public sortDirection = model<'none' | 'asc' | 'desc'>('none');\n\n @ContentChild(TemplateRef) template?: TemplateRef<any>;\n\n constructor() {\n }\n\n ngOnInit(): void {\n if (this.filterOperator() == undefined) {\n this.filterOperator.set(this.type() == 'text' ? 'contains' : 'eq');\n }\n }\n\n /**\n * Get the list of filter operators to show in the filter dropdown.\n */\n public getFilterOperators(): string[] {\n let op = this.filterOperators();\n if (op && op.length > 0)\n return op;\n\n let type = this.type();\n if (type == 'number' || type == 'currency' || type == 'date' || type == 'time') {\n return ['eq', 'ne', 'gt', 'gte', 'lt', 'lte',]\n } else if (type == 'text') {\n return ['contains', 'startsWith', 'endsWith', 'eq', 'ne']\n } else {\n return []\n }\n }\n\n /**\n * Toggle the sort direction of the column.\n * @returns void\n */\n public toggleSortDirection(): void {\n if (!this.sortable()) {\n return;\n }\n\n let dir = this.sortDirection();\n if (dir === 'none') {\n this.sortDirection.set('asc');\n } else if (dir === 'asc') {\n this.sortDirection.set('desc');\n } else {\n this.sortDirection.set('none');\n }\n }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n\n@Directive({\n selector: '[ng0-table-detail-row]',\n standalone: true,\n})\nexport class TableDetailRowDirective {\n @Input() showCallback?: (row: any) => boolean;\n\n constructor(public readonly templateRef: TemplateRef<any>) {\n }\n}\n","import { AfterContentInit, booleanAttribute, ChangeDetectionStrategy, Component, computed, ContentChild, ContentChildren, DestroyRef, HostBinding, input, model, OnDestroy, OnInit, QueryList, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { formatString } from '@bootkit/ng0/common';\nimport { LocalizationModule, LocalizationService, TableComponentPagingFormatter } from '@bootkit/ng0/localization';\nimport { DataRequest, DataRequestFilter, DataRequestPage, DataRequestSort, DataResult, DataSource, dataSourceAttribute, DataSourceLike, LogicalOperator } from '@bootkit/ng0/data';\nimport { PaginationComponent } from '@bootkit/ng0/components/pagination';\nimport { TablePagingOptions } from './types';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NumberDirective } from '@bootkit/ng0/form';\n\n/**\n * A generic table component that can display data in a tabular format.\n * It supports features like pagination, sorting, filtering, and row details.\n * It can be used with any data source that implements the DataSource interface.\n */\n@Component({\n selector: 'ng0-table',\n exportAs: 'ng0Table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n LocalizationModule,\n PaginationComponent,\n NumberDirective,\n OverlayModule\n ]\n})\nexport class TableComponent implements OnInit, AfterContentInit, OnDestroy {\n /**\n * The data source for the table.\n * This can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\n public source = input.required<DataSourceLike<any>>();\n\n /**\n * If true, the table will automatically load data when initialized.\n * This is useful for tables that need to display data immediately without user interaction.\n */\n public autoLoad = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will show row numbers.\n * This will add a column to the left of the table with the row numbers.\n */\n public showRowNumbers = input(false, { transform: booleanAttribute });\n\n /** \n * If true, the table will show the header row.\n */\n public showHeader = input(true, { transform: booleanAttribute });\n\n /**\n * If true, the table will support pagination.\n * If false, the table will load all records at once.\n */\n public pageable = input<TablePagingOptions | undefined, TablePagingOptions | boolean>(undefined, {\n transform: v => {\n if (v === undefined || v === null || v === false) {\n return undefined;\n }\n\n if (v === true) {\n v = {};\n }\n\n v.pageIndex = v.pageIndex ?? 1;\n v.pageSize = v.pageSize ?? 10;\n v.maxVisiblePages = v.maxVisiblePages ?? 10;\n v.showPagingControls = v.showPagingControls ?? true;\n return v;\n }\n });\n\n /**\n * If true, the table will support sorting.\n * This will add a sort icon to each column header.\n */\n public sortable = input(true, { transform: booleanAttribute });\n\n /**\n * The CSS class to apply to the table element.\n * This can be used to apply custom styles to the table.\n */\n public tableClass = input<string | string[]>();\n\n /**\n * The CSS class to apply to the header element.\n */\n public headerClass = input<string>();\n\n /**\n * The caption of the table.\n */\n public caption = input<string>();\n\n /**\n * The height of the table in pixels.\n * This can be used to set a fixed height for the table.\n */\n public height = input<number>();\n\n /**\n * If true, the table will support filtering.\n * This will add a filter input to each column header.\n */\n public filterable = input(false, { transform: booleanAttribute });\n\n /**\n * The indicator to show while the table is loading data for the first time.\n */\n public loadingIndicator = input<'none' | 'simple' | 'spinner', boolean | 'none' | 'simple' | 'spinner'>('spinner', {\n transform: v => {\n if (typeof v === 'boolean') {\n return v ? 'spinner' : 'none';\n }\n return v;\n }\n });\n\n /** If true, the table will show a loading cover while data is being loaded.\n * This can be used to prevent user interaction with the table while loading.\n * This cover is not displayed when the table is loading for the first time.\n * Instead, the table will show a loading based on loadingIndicator settings.\n */\n public loadingCover = input<'none' | 'simple' | 'spinner', boolean | 'none' | 'simple' | 'spinner'>('spinner', {\n transform: v => {\n if (typeof v === 'boolean') {\n return v ? 'spinner' : 'none';\n }\n return v;\n }\n });\n\n // @Input() rowColor?: (row: any) => BootstrapColor;\n\n @ContentChildren(TableColumnDirective)\n protected _columns!: QueryList<TableColumnDirective>;\n\n @ContentChild(TableDetailRowDirective)\n protected _detailRow?: TableDetailRowDirective;\n\n protected _dataResult = signal<DataResult | undefined>(undefined);\n protected _lastRequest?: DataRequest; // The last data request made to the data source\n protected _loadingRequest?: DataRequest; // The current data request being processed\n protected _rowStates = new Map<any, { expanded: boolean }>();\n protected _formatString = formatString;\n private _changeSubscription?: Subscription;\n protected _dataSource!: DataSource;\n protected _pagingFormatter!: TableComponentPagingFormatter;\n protected _lastError?: any;\n\n\n constructor(protected _ls: LocalizationService, private _destroyRef: DestroyRef) {\n }\n\n ngOnInit(): void {\n\n }\n\n ngAfterContentInit(): void {\n this._dataSource = dataSourceAttribute(this.source());\n const locale = this._ls.get();\n this._pagingFormatter = locale?.definition.components?.table?.pagingInfo ??\n ((o) => `Showing ${o.firstRecord}-${o.lastRecord} of ${o.totalRecords} records`);\n\n // this._changeSubscription = this.dataSource().change.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(result => {\n // this.reload();\n // });\n\n if (this.autoLoad()) {\n this.load(this.pageable()?.pageIndex);\n }\n }\n\n /**\n * Load data for the specified page index (optional).\n * @param pageIndex The page index to load.\n */\n public load(pageIndex?: number) {\n let page: DataRequestPage | undefined;\n let filters: DataRequestFilter[] = [];\n let sort: DataRequestSort | undefined;\n\n if (this.filterable()) {\n this._columns.forEach(col => {\n if (col.filterable() && col.filterValue() != '' && col.filterValue() != undefined) {\n filters.push({ field: col.fieldName() ?? col.filterField() ?? col.field(), value: col.filterValue(), operator: col.filterOperator() });\n }\n });\n }\n\n if (this.pageable()) {\n page = {\n index: pageIndex || this._lastRequest?.page?.index || 0,\n size: this._lastRequest?.page?.size || 10,\n };\n }\n\n if (this.sortable()) {\n let col = this._columns.find(c => c.sortable() && c.sortDirection() != 'none' && (c.field() != '' || c.fieldName() != ''));\n if (col) {\n sort = { \n field: col.fieldName() ?? col.field()!, \n asc: col.sortDirection() === 'asc' \n }\n }\n }\n\n this._loadingRequest = new DataRequest({ page, filters, sort, select: [], computeTotal: true });\n\n this._dataSource.load(this._loadingRequest)\n .pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n next: result => {\n this._dataResult.set(result);\n this._lastRequest = this._loadingRequest;\n this._loadingRequest = undefined;\n this._lastError = undefined;\n }, error: err => {\n this._lastError = err;\n this._lastRequest = this._loadingRequest;\n this._loadingRequest = undefined;\n }\n });\n }\n\n /**\n * Determines if the table is currently loading data.\n */\n @HostBinding('class.ng0-loading')\n public get isLoading() {\n return this._dataSource.isLoading;\n }\n\n protected _getCellValue(row: any, col: TableColumnDirective) {\n var subFields = col.field()!.split('.');\n let value = row[subFields[0]];\n for (let i = 1; i < subFields.length; i++) {\n if (value == null) break;\n value = value[subFields[i]];\n }\n\n return value;\n }\n\n\n protected _onPageChange(pageIndex: number) {\n this.load(pageIndex);\n }\n\n protected _onToggleRowDetailClick(row: any) {\n var state = this._rowStates.get(row)\n if (!state) {\n this._rowStates.set(row, { expanded: true });\n } else {\n state.expanded = !state.expanded;\n }\n }\n\n protected isRowExpanded(row: any) {\n var state = this._rowStates.get(row)\n return state == undefined ? false : state.expanded;\n }\n\n protected _onToggleFilterOperator(col: TableColumnDirective) {\n if (col.showFilterOperators()) {\n col.showFilterOperators.set(false)\n } else {\n this._columns.forEach(x => x.showFilterOperators.set(false));\n col.showFilterOperators.set(true)\n }\n }\n\n protected _onSelectFilterOperator(col: TableColumnDirective, filterOperator: string) {\n col.filterOperator.set(filterOperator);\n this._columns.forEach(x => x.showFilterOperators.set(false));\n this.load(0);\n }\n\n ngOnDestroy(): void {\n this._changeSubscription?.unsubscribe();\n }\n}\n","@let $dataResult = _dataResult();\n@let $pageable = pageable();\n@let $pageIndex = _lastRequest?.page?.index ?? 1;\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecord = $pageable ? ($pageable.pageSize! * ($pageIndex - 1) + 1) : 1;\n@let $lastRecord = $data ? $firstRecord + $data.length - 1 : 1;\n@let $isLoading = _dataSource.isLoading();\n@let $isFirstLoad = $dataResult == undefined;\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <caption>{{caption()}}</caption>\n }\n\n @if (showHeader()) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n }\n\n @if (filterable()) {\n <ng-container *ngTemplateOutlet=\"filtersTemplate\"></ng-container>\n }\n\n <tbody>\n @if ($isLoading && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n <ng-container *ngTemplateOutlet=\"dataRowsTemplate\"></ng-container>\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_lastError) {\n <ng-container *ngTemplateOutlet=\"nowDataTemplate\"></ng-container>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n\n@if ($isLoading && !$isFirstLoad && loadingCover()) {\n<div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n</div>\n}\n\n<ng-template #filtersTemplate>\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <th>\n @if(col.filterable() && (col.field() || col.filterValue())) {\n\n <div class=\"input-group\">\n @switch (col.type()) {\n @case ('text') {\n <input [name]=\"'filter-' + col.field\"\n type=\"search\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n @case ('number') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"search\"\n ng0Number\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n }\n\n <button class=\"btn btn-outline-light\"\n style=\"border-color: var(--bs-border-color);\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"_onToggleFilterOperator(col)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19 3H5C3.58579 3 2.87868 3 2.43934 3.4122C2 3.8244 2 4.48782 2 5.81466V6.50448C2 7.54232 2 8.06124 2.2596 8.49142C2.5192 8.9216 2.99347 9.18858 3.94202 9.72255L6.85504 11.3624C7.49146 11.7206 7.80967 11.8998 8.03751 12.0976C8.51199 12.5095 8.80408 12.9935 8.93644 13.5872C9 13.8722 9 14.2058 9 14.8729L9 17.5424C9 18.452 9 18.9067 9.25192 19.2613C9.50385 19.6158 9.95128 19.7907 10.8462 20.1406C12.7248 20.875 13.6641 21.2422 14.3321 20.8244C15 20.4066 15 19.4519 15 17.5424V14.8729C15 14.2058 15 13.8722 15.0636 13.5872C15.1959 12.9935 15.488 12.5095 15.9625 12.0976C16.1903 11.8998 16.5085 11.7206 17.145 11.3624L20.058 9.72255C21.0065 9.18858 21.4808 8.9216 21.7404 8.49142C22 8.06124 22 7.54232 22 6.50448V5.81466C22 4.48782 22 3.8244 21.5607 3.4122C21.1213 3 20.4142 3 19 3Z\"\n stroke=\"#1C274C\" stroke-width=\"1.5\" />\n </svg>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"col.showFilterOperators()\"\n (overlayOutsideClick)=\"col.showFilterOperators.set(false)\"\n (detach)=\"col.showFilterOperators.set(false)\">\n <ul class=\"dropdown-menu show\" animate.enter=\"fade-in\">\n @for (item of col.getFilterOperators(); track $index) {\n <li>\n <button class=\"dropdown-item\" [class.active]=\"item == col.filterOperator()\"\n (click)=\"_onSelectFilterOperator(col, item)\">\n {{_ls.get()?.definition?.data?.logicalOperators?.[item] ?? item }}\n </button>\n </li>\n }\n </ul>\n </ng-template>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #headerTemplate>\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th\n (click)=\"col.toggleSortDirection(); load()\"\n [class.sortable]=\"sortable() && col.sortable()\"\n [ngClass]=\"{ \n 'sort-asc': col.sortDirection() == 'asc', \n 'sort-desc': col.sortDirection() == 'desc',\n 'sort-none': col.sortDirection() == 'none'\n }\">\n {{ col.title() }}\n\n @if(sortable() && col.sortable()) {\n <svg class=\"ng0-table-sort-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 7L12 16\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M8 13L12 17L16 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #dataRowsTemplate>\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecord + $index }}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass()\"\n [class.shrinked]=\"col.shrink()\"\n [class.fw-bold]=\"col.bold()\">\n @if (col.template) {\n <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row }\">\n </ng-container>\n } @else if (col.field()) {\n @let cellValue = _getCellValue(row, col);\n\n @if ((cellValue === null || cellValue === undefined) && col.emptyCellText()) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\") {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\") {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n }@else {\n {{ cellValue }}\n }\n }\n }\n }\n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\">\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"></ng-container>\n </td>\n </tr>\n }\n }\n</ng-template>\n\n<ng-template #footerTemplate>\n @if ($pageable && $pageable.showPagingControls && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"$pageable.showFirstLastButtons == true\"\n [showNextPreviousButtons]=\"$pageable.showNextPreviousButtons == true\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"$pageable.pageSize!\"\n [selectedPage]=\"$pageIndex\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"$pageable.maxVisiblePages!\">\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if ($pageable.showPageSizeOptions || $pageable.showPageSizeOptions == undefined) {\n <div class=\"ng0-table-paging-options\">\n <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select>\n </div>\n }\n\n @if ($pageable.showPagingInfo == undefined || $pageable.showPagingInfo) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecord, lastRecord: $lastRecord, totalRecords: $totalRecordsCount!,\n currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</ng-template>\n\n<ng-template #nowDataTemplate>\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n</ng-template>","import { NgModule } from '@angular/core';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableComponent } from './table.component';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\n\n@NgModule({\n imports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective,\n ],\n exports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective\n ],\n})\nexport class TableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -105,7 +105,7 @@ class LocalDataSource extends DataSource {
|
|
|
105
105
|
// }
|
|
106
106
|
// Pagination
|
|
107
107
|
if (request.page) {
|
|
108
|
-
let startItemIndex =
|
|
108
|
+
let startItemIndex = request.page.index * request.page.size;
|
|
109
109
|
result = filteredValues.slice(startItemIndex, startItemIndex + request.page.size);
|
|
110
110
|
}
|
|
111
111
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-data.mjs","sources":["../../../projects/ng0/data/data-request.ts","../../../projects/ng0/data/data-result.ts","../../../projects/ng0/data/data-source.ts","../../../projects/ng0/data/local-data-source.ts","../../../projects/ng0/data/remote-data-source.ts","../../../projects/ng0/data/data-source-attribute.ts","../../../projects/ng0/data/data-result-operator.ts","../../../projects/ng0/data/bootkit-ng0-data.ts"],"sourcesContent":["import { FilterPredicate } from \"@bootkit/ng0/common\";\n\n/**\n * DataRequest class represents a request for data with pagination, filtering, sorting, and field selection.\n * It is used to encapsulate the parameters needed to fetch data from a data source.\n * It can be used with various data sources such as HTTP services, in-memory arrays, etc.\n * \n */\nexport class DataRequest {\n public page?: DataRequestPage;\n public filters?: DataRequestFilter[];\n public sort?: DataRequestSort;\n public select?: string[];\n public computeTotal?: boolean;\n\n constructor(options?: {\n page?: DataRequestPage,\n filters?: DataRequestFilter[],\n sort?: DataRequestSort,\n select?: string[],\n computeTotal?: boolean,\n }) {\n this.page = options?.page;\n this.filters = options?.filters;\n this.sort = options?.sort;\n this.select = options?.select;\n this.computeTotal = options?.computeTotal;\n }\n}\n\n/**\n * Represents a data request page.\n */\nexport interface DataRequestPage {\n /**\n * Index of the page.\n * If zeroBased is true, the index starts from 0.\n */\n index: number;\n\n /**\n * Size of the page, i.e., number of items in each page.\n */\n size: number;\n\n /**\n * Indicates if the index is zero-based.\n */\n zeroBased: boolean;\n}\n\n/**\n * Represents a sorting option in a DataRequest.\n * @property field The field to sort by.\n * @property asc Whether to sort in ascending order.\n */\nexport interface DataRequestSort {\n field: string;\n asc?: boolean\n}\n\n/**\n * Represents a filter in a DataRequest.\n */\nexport interface DataRequestFilter {\n /**\n * The field to filter by.\n * It can be a string representing the property name of the data items.\n */\n field?: string;\n\n /**\n * The value to filter by.\n * It can be a string, number, or any other type depending on the field.\n */\n value?: string;\n\n /**\n * The operator to use for filtering.\n * It can be one of the standard filter operators like Contains, StartsWith, EndsWith, Equals, etc.\n */\n operator?: string;\n\n /**\n * Indicates if the filter is case-sensitive. only for text columns.\n * Default is false.\n */\n caseSensitive?: boolean;\n\n /**\n * A custom filter function to apply for filtering.\n */\n filterBy?: FilterPredicate;\n}\n\n// export enum DataRequestFilterOperator {\n// EQ = 0,\n// NEQ = 1,\n// LT = 2,\n// LTE = 3,\n// GT = 4,\n// GTE = 5,\n// LI = 6,\n// SW = 7,\n// }\n","export class DataResult<T = any> {\n constructor(\n public readonly data: T[],\n public readonly total?: number) {\n }\n}\n","import { Observable } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { signal } from \"@angular/core\";\n\n/**\n * DataLoader is a function that takes a DataRequest and returns an Observable of DataResult.\n * It is used by RemoteDataSource to load data asynchronously.\n */\nexport type DataLoader<T = any> = (request: DataRequest) => Observable<DataResult<T>>;\n\n\n/**\n * Abstract base class for data sources.\n * This class provides a common interface for loading data from various sources.\n */\nexport abstract class DataSource<T = any> {\n public abstract readonly type: 'local' | 'remote';\n protected _isLoading = signal(false);\n\n /**\n * Indicates whether the data source is currently loading data.\n */\n public isLoading = this._isLoading.asReadonly();\n\n constructor() {\n }\n\n /**\n * Loads data from the data source.\n * @param request The data request object containing pagination, sorting, and filtering information.\n */\n abstract load(request: DataRequest): Observable<DataResult>;\n}\n\n/**\n * DataSourceLike is a type that can be used to represent any data source\n * that can be used with the table, autocomplete, dropdown and any component that requires data.\n * It can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\nexport type DataSourceLike<T = any> =\n Array<any> |\n DataLoader<T> |\n DataSource<T> |\n Record<string, string | number> | // enum: extract enum or object values\n undefined |\n null;\n","import { of } from \"rxjs\";\nimport { DataRequest, DataRequestFilter } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { DataSource } from \"./data-source\";\nimport { getEnumValues } from \"@bootkit/ng0/common\";\n\n/**\n * An implementation of DataSource that uses an array as the data source.\n * This is useful for static data or when you want to manage the data manually.\n */\nexport class LocalDataSource extends DataSource {\n readonly type = 'local';\n\n /**\n * Creates a new LocalDataSource.\n * @param items The array of items to be used as the data source. \n */\n constructor(private items: any[]) {\n super();\n }\n\n /**\n * Creates a LocalDataSource from enum values.\n * @param enumClass The enum class to extract values from.\n * @returns A LocalDataSource containing the enum values.\n */\n public static fromEnum(enumClass: Record<string, string | number>): LocalDataSource {\n return new LocalDataSource(getEnumValues(enumClass));\n }\n\n /**\n * Loads data from the local array based on the provided DataRequest.\n * @param request The DataRequest containing filtering, sorting, and pagination information.\n * @returns An observable of DataResult containing the requested data. \n */\n load(request: DataRequest) {\n let filteredValues = [...this.items];\n let result: any[];\n\n // Filtering\n // if (Array.isArray(request.filters) && request.filters.length > 0) {\n // request.filters.forEach(filter => {\n // if (!filter.filterBy) {\n // throw Error('A filterBy function must be provided for LocalDataSource filters.');\n // }\n\n // let isPassedByFilter = getFilterFunction(filter);\n\n // for (let i = 0; i < filteredValues.length; i++) {\n // let row = filteredValues[i];\n // if (!isPassedByFilter(row[filter.field], filter.value)) {\n // filteredValues.splice(i, 1);\n // i--; // Adjust index after removal\n // }\n // }\n // });\n // }\n\n // Pagination\n if (request.page) {\n let startItemIndex = (request.page.zeroBased ? request.page.index : request.page.index - 1) * request.page.size;\n result = filteredValues.slice(startItemIndex, startItemIndex + request.page.size);\n } else {\n result = filteredValues;\n }\n\n // Sorting\n if (request.sort) {\n\n }\n\n let dataResult = new DataResult(result, filteredValues.length);\n\n // this._loading = true;\n // return of(result).pipe(\n // delay(5000),\n // tap(x => this._loading = false)\n // );\n return of(dataResult);\n }\n}\n\nfunction getFilterFunction(requestfilter: DataRequestFilter): (cellValue: any, filterValue: any) => boolean {\n let operator = requestfilter.operator || 'contains';\n let caseSensitive = requestfilter.caseSensitive || false;\n\n // if (requestfilter.value === undefined || requestfilter.value === null) {\n // return (item: any) => true; // No filter applied\n // }\n\n switch (requestfilter.operator) {\n case 'contains':\n return caseSensitive ?\n (item: string, filter: string) => item.includes(filter) :\n (item: string, filter: string) => item.toLowerCase().includes(filter.toLowerCase());\n\n case 'startsWith':\n return caseSensitive ?\n (item: string, filter: string) => item.startsWith(filter) :\n (item: string, filter: string) => item.toLowerCase().startsWith(filter.toLowerCase());\n\n case 'endsWith':\n return caseSensitive ?\n (item: string, filter: string) => item.endsWith(filter) :\n (item: string, filter: string) => item.toLowerCase().endsWith(filter.toLowerCase());\n\n case 'eq':\n if (typeof requestfilter.value === 'string') {\n return caseSensitive ?\n (item: string, filter: string) => item == filter :\n (item: string, filter: string) => item.toString().toLowerCase() === filter.toLowerCase();\n } else {\n return (item: any, filter: any) => item === filter;\n }\n\n case 'lt':\n return (item: any, filter: any) => item < filter;\n\n case 'lte':\n return (item: any, filter: any) => item <= filter;\n\n case 'gt':\n return (item: any, filter: any) => item > filter;\n\n case 'gte':\n return (item: any, filter: any) => item >= filter;\n\n case 'ne':\n return (item: any, filter: any) => item !== filter;\n\n default:\n throw new Error(`filter operator: ${operator} is not implemented in ArrayDataSource.`);\n }\n}","import { catchError, Observable, tap } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataLoader, DataSource } from \"./data-source\";\n\n\n/**\n * RemoteDataSource is a DataSource that loads data asynchronously using a DataLoader function.\n * It is used to fetch data from a remote source, such as an API.\n */\nexport class RemoteDataSource extends DataSource {\n readonly type = 'remote';\n\n constructor(private readonly loader: DataLoader) {\n super();\n\n if (typeof loader !== 'function') {\n throw 'Invalid data loader';\n }\n }\n\n load(request: DataRequest) {\n this._isLoading.set(true);\n\n return this.loader(request).pipe(\n catchError(err => {\n this._isLoading.set(false);\n throw err;\n }),\n tap(res => {\n this._isLoading.set(false);\n })\n )\n }\n}\n","import { LocalDataSource } from \"./local-data-source\";\nimport { RemoteDataSource } from \"./remote-data-source\";\nimport { DataSource, DataSourceLike } from \"./data-source\";\n\n/**\n * Converts a DataSourceLike to a DataSource instance.\n * @param source The data source to convert.\n * @returns A DataSource instance.\n */\nexport function dataSourceAttribute<T>(source: DataSourceLike): DataSource<T> {\n if (Array.isArray(source)) {\n return new LocalDataSource(source);\n } else if (typeof source == 'function') {\n return new RemoteDataSource(source);\n } else if (source instanceof DataSource) {\n return source;\n } else if (source === undefined || source === null) {\n return new LocalDataSource([]);\n } else if (typeof source === 'object') {\n return LocalDataSource.fromEnum(source);\n } else {\n throw new Error('Invalid data source.');\n }\n}\n","import { Observable } from \"rxjs\";\nimport { DataResult } from \"./data-result\";\nimport { DataRequest } from \"./data-request\";\n\nexport function toDataResult<T=any>(dr: DataRequest) {\n return function (source: Observable<any>): Observable<DataResult<T>> {\n return new Observable(subscriber => {\n source.subscribe({\n next(event) {\n subscriber.next(new DataResult(event));\n },\n error(error) {\n subscriber.error(error);\n },\n complete() {\n subscriber.complete();\n }\n });\n });\n }\n}\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":"bootkit-ng0-data.mjs","sources":["../../../projects/ng0/data/data-request.ts","../../../projects/ng0/data/data-result.ts","../../../projects/ng0/data/data-source.ts","../../../projects/ng0/data/local-data-source.ts","../../../projects/ng0/data/remote-data-source.ts","../../../projects/ng0/data/data-source-attribute.ts","../../../projects/ng0/data/data-result-operator.ts","../../../projects/ng0/data/bootkit-ng0-data.ts"],"sourcesContent":["import { FilterPredicate } from \"@bootkit/ng0/common\";\n\n/**\n * DataRequest class represents a request for data with pagination, filtering, sorting, and field selection.\n * It is used to encapsulate the parameters needed to fetch data from a data source.\n * It can be used with various data sources such as HTTP services, in-memory arrays, etc.\n * \n */\nexport class DataRequest {\n public page?: DataRequestPage;\n public filters?: DataRequestFilter[];\n public sort?: DataRequestSort;\n public select?: string[];\n public computeTotal?: boolean;\n\n constructor(options?: {\n page?: DataRequestPage,\n filters?: DataRequestFilter[],\n sort?: DataRequestSort,\n select?: string[],\n computeTotal?: boolean,\n }) {\n this.page = options?.page;\n this.filters = options?.filters;\n this.sort = options?.sort;\n this.select = options?.select;\n this.computeTotal = options?.computeTotal;\n }\n}\n\n/**\n * Represents a data request page.\n */\nexport interface DataRequestPage {\n /**\n * Zero-based index of the page.\n */\n index: number;\n\n /**\n * Size of the page, i.e., number of items in each page.\n */\n size: number;\n}\n\n/**\n * Represents a sorting option in a DataRequest.\n * @property field The field to sort by.\n * @property asc Whether to sort in ascending order.\n */\nexport interface DataRequestSort {\n field: string;\n asc?: boolean\n}\n\n/**\n * Represents a filter in a DataRequest.\n */\nexport interface DataRequestFilter {\n /**\n * The field to filter by.\n * It can be a string representing the property name of the data items.\n */\n field?: string;\n\n /**\n * The value to filter by.\n * It can be a string, number, or any other type depending on the field.\n */\n value?: string;\n\n /**\n * The operator to use for filtering.\n * It can be one of the standard filter operators like Contains, StartsWith, EndsWith, Equals, etc.\n */\n operator?: string;\n\n /**\n * Indicates if the filter is case-sensitive. only for text columns.\n * Default is false.\n */\n caseSensitive?: boolean;\n\n /**\n * A custom filter function to apply for filtering.\n */\n filterBy?: FilterPredicate;\n}\n\n// export enum DataRequestFilterOperator {\n// EQ = 0,\n// NEQ = 1,\n// LT = 2,\n// LTE = 3,\n// GT = 4,\n// GTE = 5,\n// LI = 6,\n// SW = 7,\n// }\n","export class DataResult<T = any> {\n constructor(\n public readonly data: T[],\n public readonly total?: number) {\n }\n}\n","import { Observable } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { signal } from \"@angular/core\";\n\n/**\n * DataLoader is a function that takes a DataRequest and returns an Observable of DataResult.\n * It is used by RemoteDataSource to load data asynchronously.\n */\nexport type DataLoader<T = any> = (request: DataRequest) => Observable<DataResult<T>>;\n\n\n/**\n * Abstract base class for data sources.\n * This class provides a common interface for loading data from various sources.\n */\nexport abstract class DataSource<T = any> {\n public abstract readonly type: 'local' | 'remote';\n protected _isLoading = signal(false);\n\n /**\n * Indicates whether the data source is currently loading data.\n */\n public isLoading = this._isLoading.asReadonly();\n\n constructor() {\n }\n\n /**\n * Loads data from the data source.\n * @param request The data request object containing pagination, sorting, and filtering information.\n */\n abstract load(request: DataRequest): Observable<DataResult>;\n}\n\n/**\n * DataSourceLike is a type that can be used to represent any data source\n * that can be used with the table, autocomplete, dropdown and any component that requires data.\n * It can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\nexport type DataSourceLike<T = any> =\n Array<any> |\n DataLoader<T> |\n DataSource<T> |\n Record<string, string | number> | // enum: extract enum or object values\n undefined |\n null;\n","import { of } from \"rxjs\";\nimport { DataRequest, DataRequestFilter } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { DataSource } from \"./data-source\";\nimport { getEnumValues } from \"@bootkit/ng0/common\";\n\n/**\n * An implementation of DataSource that uses an array as the data source.\n * This is useful for static data or when you want to manage the data manually.\n */\nexport class LocalDataSource extends DataSource {\n readonly type = 'local';\n\n /**\n * Creates a new LocalDataSource.\n * @param items The array of items to be used as the data source. \n */\n constructor(private items: any[]) {\n super();\n }\n\n /**\n * Creates a LocalDataSource from enum values.\n * @param enumClass The enum class to extract values from.\n * @returns A LocalDataSource containing the enum values.\n */\n public static fromEnum(enumClass: Record<string, string | number>): LocalDataSource {\n return new LocalDataSource(getEnumValues(enumClass));\n }\n\n /**\n * Loads data from the local array based on the provided DataRequest.\n * @param request The DataRequest containing filtering, sorting, and pagination information.\n * @returns An observable of DataResult containing the requested data. \n */\n load(request: DataRequest) {\n let filteredValues = [...this.items];\n let result: any[];\n\n // Filtering\n // if (Array.isArray(request.filters) && request.filters.length > 0) {\n // request.filters.forEach(filter => {\n // if (!filter.filterBy) {\n // throw Error('A filterBy function must be provided for LocalDataSource filters.');\n // }\n\n // let isPassedByFilter = getFilterFunction(filter);\n\n // for (let i = 0; i < filteredValues.length; i++) {\n // let row = filteredValues[i];\n // if (!isPassedByFilter(row[filter.field], filter.value)) {\n // filteredValues.splice(i, 1);\n // i--; // Adjust index after removal\n // }\n // }\n // });\n // }\n\n // Pagination\n if (request.page) {\n let startItemIndex = request.page.index * request.page.size;\n result = filteredValues.slice(startItemIndex, startItemIndex + request.page.size);\n } else {\n result = filteredValues;\n }\n\n // Sorting\n if (request.sort) {\n\n }\n\n let dataResult = new DataResult(result, filteredValues.length);\n\n // this._loading = true;\n // return of(result).pipe(\n // delay(5000),\n // tap(x => this._loading = false)\n // );\n return of(dataResult);\n }\n}\n\nfunction getFilterFunction(requestfilter: DataRequestFilter): (cellValue: any, filterValue: any) => boolean {\n let operator = requestfilter.operator || 'contains';\n let caseSensitive = requestfilter.caseSensitive || false;\n\n // if (requestfilter.value === undefined || requestfilter.value === null) {\n // return (item: any) => true; // No filter applied\n // }\n\n switch (requestfilter.operator) {\n case 'contains':\n return caseSensitive ?\n (item: string, filter: string) => item.includes(filter) :\n (item: string, filter: string) => item.toLowerCase().includes(filter.toLowerCase());\n\n case 'startsWith':\n return caseSensitive ?\n (item: string, filter: string) => item.startsWith(filter) :\n (item: string, filter: string) => item.toLowerCase().startsWith(filter.toLowerCase());\n\n case 'endsWith':\n return caseSensitive ?\n (item: string, filter: string) => item.endsWith(filter) :\n (item: string, filter: string) => item.toLowerCase().endsWith(filter.toLowerCase());\n\n case 'eq':\n if (typeof requestfilter.value === 'string') {\n return caseSensitive ?\n (item: string, filter: string) => item == filter :\n (item: string, filter: string) => item.toString().toLowerCase() === filter.toLowerCase();\n } else {\n return (item: any, filter: any) => item === filter;\n }\n\n case 'lt':\n return (item: any, filter: any) => item < filter;\n\n case 'lte':\n return (item: any, filter: any) => item <= filter;\n\n case 'gt':\n return (item: any, filter: any) => item > filter;\n\n case 'gte':\n return (item: any, filter: any) => item >= filter;\n\n case 'ne':\n return (item: any, filter: any) => item !== filter;\n\n default:\n throw new Error(`filter operator: ${operator} is not implemented in ArrayDataSource.`);\n }\n}","import { catchError, Observable, tap } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataLoader, DataSource } from \"./data-source\";\n\n\n/**\n * RemoteDataSource is a DataSource that loads data asynchronously using a DataLoader function.\n * It is used to fetch data from a remote source, such as an API.\n */\nexport class RemoteDataSource extends DataSource {\n readonly type = 'remote';\n\n constructor(private readonly loader: DataLoader) {\n super();\n\n if (typeof loader !== 'function') {\n throw 'Invalid data loader';\n }\n }\n\n load(request: DataRequest) {\n this._isLoading.set(true);\n\n return this.loader(request).pipe(\n catchError(err => {\n this._isLoading.set(false);\n throw err;\n }),\n tap(res => {\n this._isLoading.set(false);\n })\n )\n }\n}\n","import { LocalDataSource } from \"./local-data-source\";\nimport { RemoteDataSource } from \"./remote-data-source\";\nimport { DataSource, DataSourceLike } from \"./data-source\";\n\n/**\n * Converts a DataSourceLike to a DataSource instance.\n * @param source The data source to convert.\n * @returns A DataSource instance.\n */\nexport function dataSourceAttribute<T>(source: DataSourceLike): DataSource<T> {\n if (Array.isArray(source)) {\n return new LocalDataSource(source);\n } else if (typeof source == 'function') {\n return new RemoteDataSource(source);\n } else if (source instanceof DataSource) {\n return source;\n } else if (source === undefined || source === null) {\n return new LocalDataSource([]);\n } else if (typeof source === 'object') {\n return LocalDataSource.fromEnum(source);\n } else {\n throw new Error('Invalid data source.');\n }\n}\n","import { Observable } from \"rxjs\";\nimport { DataResult } from \"./data-result\";\nimport { DataRequest } from \"./data-request\";\n\nexport function toDataResult<T=any>(dr: DataRequest) {\n return function (source: Observable<any>): Observable<DataResult<T>> {\n return new Observable(subscriber => {\n source.subscribe({\n next(event) {\n subscriber.next(new DataResult(event));\n },\n error(error) {\n subscriber.error(error);\n },\n complete() {\n subscriber.complete();\n }\n });\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bootkit/ng0",
|
|
3
|
-
"version": "0.0.0-alpha.
|
|
3
|
+
"version": "0.0.0-alpha.42",
|
|
4
4
|
"description": "Angular+Bootstrap Component Library",
|
|
5
5
|
"homepage": "https://bootkitlib.github.io/",
|
|
6
6
|
"author": "BootKit",
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
"types": "./index.d.ts",
|
|
36
36
|
"default": "./fesm2022/bootkit-ng0.mjs"
|
|
37
37
|
},
|
|
38
|
-
"./data": {
|
|
39
|
-
"types": "./data/index.d.ts",
|
|
40
|
-
"default": "./fesm2022/bootkit-ng0-data.mjs"
|
|
41
|
-
},
|
|
42
38
|
"./common": {
|
|
43
39
|
"types": "./common/index.d.ts",
|
|
44
40
|
"default": "./fesm2022/bootkit-ng0-common.mjs"
|
|
45
41
|
},
|
|
42
|
+
"./data": {
|
|
43
|
+
"types": "./data/index.d.ts",
|
|
44
|
+
"default": "./fesm2022/bootkit-ng0-data.mjs"
|
|
45
|
+
},
|
|
46
46
|
"./date": {
|
|
47
47
|
"types": "./date/index.d.ts",
|
|
48
48
|
"default": "./fesm2022/bootkit-ng0-date.mjs"
|