@bootkit/ng0 0.0.0-alpha.4 → 0.0.0-alpha.40

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.
Files changed (100) hide show
  1. package/common/index.d.ts +263 -7
  2. package/components/accordion/index.d.ts +13 -3
  3. package/components/backdrop/index.d.ts +12 -0
  4. package/components/dropdown/index.d.ts +156 -0
  5. package/components/form-field/index.d.ts +24 -41
  6. package/components/list/index.d.ts +260 -0
  7. package/components/modal/index.d.ts +21 -3
  8. package/components/nav/index.d.ts +23 -19
  9. package/components/offcanvas/index.d.ts +13 -5
  10. package/components/pagination/index.d.ts +34 -8
  11. package/components/select/index.d.ts +160 -0
  12. package/components/sidenav/index.d.ts +125 -0
  13. package/components/table/index.d.ts +191 -59
  14. package/components/vertical-menu/index.d.ts +61 -0
  15. package/data/index.d.ts +103 -38
  16. package/date/index.d.ts +34 -0
  17. package/fesm2022/bootkit-ng0-common.mjs +289 -12
  18. package/fesm2022/bootkit-ng0-common.mjs.map +1 -1
  19. package/fesm2022/bootkit-ng0-components-accordion.mjs +33 -26
  20. package/fesm2022/bootkit-ng0-components-accordion.mjs.map +1 -1
  21. package/fesm2022/bootkit-ng0-components-backdrop.mjs +46 -0
  22. package/fesm2022/bootkit-ng0-components-backdrop.mjs.map +1 -0
  23. package/fesm2022/bootkit-ng0-components-button.mjs +12 -12
  24. package/fesm2022/bootkit-ng0-components-button.mjs.map +1 -1
  25. package/fesm2022/bootkit-ng0-components-card.mjs +12 -12
  26. package/fesm2022/bootkit-ng0-components-card.mjs.map +1 -1
  27. package/fesm2022/bootkit-ng0-components-code.mjs +10 -10
  28. package/fesm2022/bootkit-ng0-components-code.mjs.map +1 -1
  29. package/fesm2022/bootkit-ng0-components-collapse.mjs +16 -16
  30. package/fesm2022/bootkit-ng0-components-collapse.mjs.map +1 -1
  31. package/fesm2022/bootkit-ng0-components-confirmation.mjs +13 -13
  32. package/fesm2022/bootkit-ng0-components-confirmation.mjs.map +1 -1
  33. package/fesm2022/bootkit-ng0-components-dropdown.mjs +308 -0
  34. package/fesm2022/bootkit-ng0-components-dropdown.mjs.map +1 -0
  35. package/fesm2022/bootkit-ng0-components-form-field.mjs +62 -84
  36. package/fesm2022/bootkit-ng0-components-form-field.mjs.map +1 -1
  37. package/fesm2022/bootkit-ng0-components-list.mjs +564 -0
  38. package/fesm2022/bootkit-ng0-components-list.mjs.map +1 -0
  39. package/fesm2022/bootkit-ng0-components-modal.mjs +41 -24
  40. package/fesm2022/bootkit-ng0-components-modal.mjs.map +1 -1
  41. package/fesm2022/bootkit-ng0-components-nav.mjs +59 -60
  42. package/fesm2022/bootkit-ng0-components-nav.mjs.map +1 -1
  43. package/fesm2022/bootkit-ng0-components-offcanvas.mjs +20 -13
  44. package/fesm2022/bootkit-ng0-components-offcanvas.mjs.map +1 -1
  45. package/fesm2022/bootkit-ng0-components-overlay.mjs.map +1 -1
  46. package/fesm2022/bootkit-ng0-components-pagination.mjs +59 -24
  47. package/fesm2022/bootkit-ng0-components-pagination.mjs.map +1 -1
  48. package/fesm2022/bootkit-ng0-components-popover.mjs +11 -11
  49. package/fesm2022/bootkit-ng0-components-popover.mjs.map +1 -1
  50. package/fesm2022/bootkit-ng0-components-select.mjs +447 -0
  51. package/fesm2022/bootkit-ng0-components-select.mjs.map +1 -0
  52. package/fesm2022/bootkit-ng0-components-sidenav.mjs +290 -0
  53. package/fesm2022/bootkit-ng0-components-sidenav.mjs.map +1 -0
  54. package/fesm2022/bootkit-ng0-components-stepper.mjs +14 -14
  55. package/fesm2022/bootkit-ng0-components-stepper.mjs.map +1 -1
  56. package/fesm2022/bootkit-ng0-components-table.mjs +303 -159
  57. package/fesm2022/bootkit-ng0-components-table.mjs.map +1 -1
  58. package/fesm2022/bootkit-ng0-components-toast.mjs +6 -6
  59. package/fesm2022/bootkit-ng0-components-toast.mjs.map +1 -1
  60. package/fesm2022/bootkit-ng0-components-tooltip.mjs +9 -9
  61. package/fesm2022/bootkit-ng0-components-tooltip.mjs.map +1 -1
  62. package/fesm2022/bootkit-ng0-components-vertical-menu.mjs +161 -0
  63. package/fesm2022/bootkit-ng0-components-vertical-menu.mjs.map +1 -0
  64. package/fesm2022/bootkit-ng0-data.mjs +152 -39
  65. package/fesm2022/bootkit-ng0-data.mjs.map +1 -1
  66. package/fesm2022/bootkit-ng0-date.mjs +50 -0
  67. package/fesm2022/bootkit-ng0-date.mjs.map +1 -0
  68. package/fesm2022/bootkit-ng0-file.mjs.map +1 -1
  69. package/fesm2022/bootkit-ng0-form.mjs +336 -264
  70. package/fesm2022/bootkit-ng0-form.mjs.map +1 -1
  71. package/fesm2022/bootkit-ng0-http.mjs +40 -5
  72. package/fesm2022/bootkit-ng0-http.mjs.map +1 -1
  73. package/fesm2022/bootkit-ng0-layouts-layout1.mjs +317 -0
  74. package/fesm2022/bootkit-ng0-layouts-layout1.mjs.map +1 -0
  75. package/fesm2022/bootkit-ng0-localization-locales.mjs +101 -0
  76. package/fesm2022/bootkit-ng0-localization-locales.mjs.map +1 -0
  77. package/fesm2022/bootkit-ng0-localization.mjs +431 -105
  78. package/fesm2022/bootkit-ng0-localization.mjs.map +1 -1
  79. package/fesm2022/bootkit-ng0-platform-browser.mjs +179 -0
  80. package/fesm2022/bootkit-ng0-platform-browser.mjs.map +1 -0
  81. package/fesm2022/bootkit-ng0-routing.mjs +80 -0
  82. package/fesm2022/bootkit-ng0-routing.mjs.map +1 -0
  83. package/fesm2022/bootkit-ng0-script.mjs +3 -3
  84. package/fesm2022/bootkit-ng0-script.mjs.map +1 -1
  85. package/fesm2022/bootkit-ng0-security.mjs +16 -16
  86. package/fesm2022/bootkit-ng0-security.mjs.map +1 -1
  87. package/fesm2022/bootkit-ng0-utils.mjs +75 -0
  88. package/fesm2022/bootkit-ng0-utils.mjs.map +1 -0
  89. package/fesm2022/bootkit-ng0.mjs +2 -2
  90. package/fesm2022/bootkit-ng0.mjs.map +1 -1
  91. package/form/index.d.ts +94 -62
  92. package/http/index.d.ts +35 -4
  93. package/index.d.ts +2 -2
  94. package/layouts/layout1/index.d.ts +201 -0
  95. package/localization/index.d.ts +231 -42
  96. package/localization/locales/index.d.ts +7 -0
  97. package/package.json +66 -18
  98. package/platform/browser/index.d.ts +88 -0
  99. package/routing/index.d.ts +124 -0
  100. package/utils/index.d.ts +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootkit-ng0-components-vertical-menu.mjs","sources":["../../../projects/ng0/components/vertical-menu/item-arrow.directive.ts","../../../projects/ng0/components/vertical-menu/vertical-menu.component.ts","../../../projects/ng0/components/vertical-menu/vertical-menu.component.html","../../../projects/ng0/components/vertical-menu/item-children.component.ts","../../../projects/ng0/components/vertical-menu/item-children.component.html","../../../projects/ng0/components/vertical-menu/item.component.ts","../../../projects/ng0/components/vertical-menu/item.component.html","../../../projects/ng0/components/vertical-menu/item-content.component.ts","../../../projects/ng0/components/vertical-menu/item-content.component.html","../../../projects/ng0/components/vertical-menu/vertical-menu.module.ts","../../../projects/ng0/components/vertical-menu/bootkit-ng0-components-vertical-menu.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[ng0VerticalMenuArrow], [ng0VmenuArrow]',\r\n exportAs: 'ng0VerticalMenuArrow',\r\n standalone: true,\r\n})\r\nexport class VerticalMenuArrowDirective {\r\n constructor(public readonly templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Component, ContentChild, input } from '@angular/core';\r\nimport { VerticalMenuArrowDirective } from './item-arrow.directive';\r\n\r\n@Component({\r\n selector: 'ng0-vertical-menu, ng0-vmenu',\r\n templateUrl: './vertical-menu.component.html',\r\n standalone: true,\r\n styles: `:host {display: block}`,\r\n imports: [],\r\n})\r\nexport class VerticalMenuComponent {\r\n public toggleByItemClick = input(true);\r\n \r\n public collapseTimings = input<string | number>('0.15s');\r\n\r\n @ContentChild(VerticalMenuArrowDirective, { descendants: false }) public readonly arrowDirective?: VerticalMenuArrowDirective;\r\n\r\n constructor() {\r\n }\r\n}\r\n\r\n","<ng-content></ng-content>","import { Component, ContentChild, model } from '@angular/core';\r\nimport { VerticalMenuItemComponent } from './item.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { VerticalMenuComponent } from './vertical-menu.component';\r\nimport { CollapseDirective } from '@bootkit/ng0/components/collapse';\r\n\r\n@Component({\r\n selector: 'ng0-vertical-menu-item-children, ng0-vmenu-item-children, ng0-vmenu-children',\r\n templateUrl: './item-children.component.html',\r\n exportAs: 'ng0VmenuItemChildren',\r\n standalone: true,\r\n styles: `:host {display: block}`,\r\n imports: [CommonModule, CollapseDirective],\r\n host: {\r\n '[class.isc-expanded]': 'expanded()'\r\n }\r\n})\r\nexport class VerticalMenuItemChildrenComponent {\r\n public expanded = model(false);\r\n\r\n @ContentChild(VerticalMenuItemComponent, { descendants: false }) protected _items?: VerticalMenuItemComponent;\r\n\r\n constructor(public menuItem: VerticalMenuItemComponent, protected _menu: VerticalMenuComponent,) { }\r\n}\r\n","<div ng0Collapse\r\n [collapsed]=\"!expanded()\"\r\n [timings]=\"_menu.collapseTimings()\">\r\n <ng-content></ng-content>\r\n</div>\r\n","import { Component, ContentChild, ElementRef, HostBinding, input, model, Renderer2 } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { VerticalMenuItemChildrenComponent } from './item-children.component';\r\nimport { VerticalMenuComponent } from './vertical-menu.component';\r\n\r\n@Component({\r\n selector: 'ng0-vertical-menu-item, ng0-vmenu-item',\r\n templateUrl: './item.component.html',\r\n standalone: true,\r\n styles: `:host {display: block}`,\r\n imports: [CommonModule],\r\n host: {\r\n }\r\n})\r\nexport class VerticalMenuItemComponent {\r\n public toggleByClick = input(true);\r\n public active = model(false);\r\n\r\n @ContentChild(VerticalMenuItemChildrenComponent, { descendants: false }) public readonly children?: VerticalMenuItemChildrenComponent;\r\n\r\n constructor(private _renderer: Renderer2, private _el: ElementRef, protected _menu: VerticalMenuComponent) {\r\n }\r\n\r\n @HostBinding('class.ng0-has-children')\r\n public get hasChildren(): boolean {\r\n return this.children != null;\r\n }\r\n\r\n @HostBinding('class.ng0-expanded')\r\n public get isExpanded(): boolean {\r\n return this.children != null && this.children.expanded();\r\n }\r\n}\r\n\r\n","<ng-content></ng-content>","import { Component, ElementRef, HostListener, Renderer2 } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { VerticalMenuComponent } from './vertical-menu.component';\r\nimport { VerticalMenuItemComponent } from './item.component';\r\n\r\n@Component({\r\n selector: 'ng0-vertical-menu-item-content, ng0-vmenu-item-content, ng0-vmenu-content',\r\n templateUrl: './item-content.component.html',\r\n standalone: true,\r\n styles: `:host {display: flex; align-items: center; }`,\r\n imports: [CommonModule]\r\n})\r\nexport class VerticalMenuItemContentComponent {\r\n constructor(\r\n public menuItem: VerticalMenuItemComponent,\r\n private _renderer: Renderer2,\r\n private _el: ElementRef,\r\n protected _menu: VerticalMenuComponent,\r\n ) {\r\n // _renderer.addClass(_el.nativeElement, '')\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n private _onClick() {\r\n if (this._menu.toggleByItemClick() && this.menuItem.hasChildren) {\r\n this.menuItem.children?.expanded.update(x => !x);\r\n }\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n\r\n@defer {\r\n@if(_menu.arrowDirective && menuItem.hasChildren) {\r\n<ng-container *ngTemplateOutlet=\"_menu.arrowDirective?.templateRef!; context: {$implicit: menuItem}\"></ng-container>\r\n}\r\n}","import { NgModule } from '@angular/core';\r\nimport { VerticalMenuItemComponent } from './item.component';\r\nimport { VerticalMenuComponent } from './vertical-menu.component';\r\nimport { VerticalMenuItemChildrenComponent } from './item-children.component';\r\nimport { VerticalMenuArrowDirective } from './item-arrow.directive';\r\nimport { VerticalMenuItemContentComponent } from './item-content.component';\r\n\r\nconst items = [\r\n VerticalMenuComponent,\r\n VerticalMenuItemComponent,\r\n VerticalMenuItemChildrenComponent,\r\n VerticalMenuItemContentComponent,\r\n VerticalMenuArrowDirective,\r\n];\r\n\r\n@NgModule({\r\n imports: items,\r\n exports: items\r\n})\r\nexport class VerticalMenuModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.VerticalMenuItemComponent","i2.VerticalMenuComponent","i1.VerticalMenuComponent"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- import { tap, Subject, of, Observable } from 'rxjs';
1
+ import { signal } from '@angular/core';
2
+ import { of, catchError, tap, Observable } from 'rxjs';
3
+ import { getEnumValues } from '@bootkit/ng0/common';
2
4
 
3
5
  /**
4
6
  * DataRequest class represents a request for data with pagination, filtering, sorting, and field selection.
@@ -13,9 +15,7 @@ class DataRequest {
13
15
  select;
14
16
  computeTotal;
15
17
  constructor(options) {
16
- if (Number.isInteger(options?.pageIndex) && Number.isInteger(options?.pageSize)) {
17
- this.page = { index: options.pageIndex, size: options.pageSize };
18
- }
18
+ this.page = options?.page;
19
19
  this.filters = options?.filters;
20
20
  this.sort = options?.sort;
21
21
  this.select = options?.select;
@@ -42,22 +42,137 @@ class DataResult {
42
42
  }
43
43
  }
44
44
 
45
+ /**
46
+ * Abstract base class for data sources.
47
+ * This class provides a common interface for loading data from various sources.
48
+ */
45
49
  class DataSource {
46
- _loading = false;
50
+ _isLoading = signal(false, ...(ngDevMode ? [{ debugName: "_isLoading" }] : []));
51
+ /**
52
+ * Indicates whether the data source is currently loading data.
53
+ */
54
+ isLoading = this._isLoading.asReadonly();
47
55
  constructor() {
48
56
  }
49
- get loading() { return this._loading; }
50
- setLoading(value) {
51
- this._loading = value;
57
+ }
58
+
59
+ /**
60
+ * An implementation of DataSource that uses an array as the data source.
61
+ * This is useful for static data or when you want to manage the data manually.
62
+ */
63
+ class LocalDataSource extends DataSource {
64
+ items;
65
+ type = 'local';
66
+ /**
67
+ * Creates a new LocalDataSource.
68
+ * @param items The array of items to be used as the data source.
69
+ */
70
+ constructor(items) {
71
+ super();
72
+ this.items = items;
73
+ }
74
+ /**
75
+ * Creates a LocalDataSource from enum values.
76
+ * @param enumClass The enum class to extract values from.
77
+ * @returns A LocalDataSource containing the enum values.
78
+ */
79
+ static fromEnum(enumClass) {
80
+ return new LocalDataSource(getEnumValues(enumClass));
81
+ }
82
+ /**
83
+ * Loads data from the local array based on the provided DataRequest.
84
+ * @param request The DataRequest containing filtering, sorting, and pagination information.
85
+ * @returns An observable of DataResult containing the requested data.
86
+ */
87
+ load(request) {
88
+ let filteredValues = [...this.items];
89
+ let result;
90
+ // Filtering
91
+ // if (Array.isArray(request.filters) && request.filters.length > 0) {
92
+ // request.filters.forEach(filter => {
93
+ // if (!filter.filterBy) {
94
+ // throw Error('A filterBy function must be provided for LocalDataSource filters.');
95
+ // }
96
+ // let isPassedByFilter = getFilterFunction(filter);
97
+ // for (let i = 0; i < filteredValues.length; i++) {
98
+ // let row = filteredValues[i];
99
+ // if (!isPassedByFilter(row[filter.field], filter.value)) {
100
+ // filteredValues.splice(i, 1);
101
+ // i--; // Adjust index after removal
102
+ // }
103
+ // }
104
+ // });
105
+ // }
106
+ // Pagination
107
+ if (request.page) {
108
+ let startItemIndex = (request.page.zeroBased ? request.page.index : request.page.index - 1) * request.page.size;
109
+ result = filteredValues.slice(startItemIndex, startItemIndex + request.page.size);
110
+ }
111
+ else {
112
+ result = filteredValues;
113
+ }
114
+ // Sorting
115
+ if (request.sort) {
116
+ }
117
+ let dataResult = new DataResult(result, filteredValues.length);
118
+ // this._loading = true;
119
+ // return of(result).pipe(
120
+ // delay(5000),
121
+ // tap(x => this._loading = false)
122
+ // );
123
+ return of(dataResult);
124
+ }
125
+ }
126
+ function getFilterFunction(requestfilter) {
127
+ let operator = requestfilter.operator || 'contains';
128
+ let caseSensitive = requestfilter.caseSensitive || false;
129
+ // if (requestfilter.value === undefined || requestfilter.value === null) {
130
+ // return (item: any) => true; // No filter applied
131
+ // }
132
+ switch (requestfilter.operator) {
133
+ case 'contains':
134
+ return caseSensitive ?
135
+ (item, filter) => item.includes(filter) :
136
+ (item, filter) => item.toLowerCase().includes(filter.toLowerCase());
137
+ case 'startsWith':
138
+ return caseSensitive ?
139
+ (item, filter) => item.startsWith(filter) :
140
+ (item, filter) => item.toLowerCase().startsWith(filter.toLowerCase());
141
+ case 'endsWith':
142
+ return caseSensitive ?
143
+ (item, filter) => item.endsWith(filter) :
144
+ (item, filter) => item.toLowerCase().endsWith(filter.toLowerCase());
145
+ case 'eq':
146
+ if (typeof requestfilter.value === 'string') {
147
+ return caseSensitive ?
148
+ (item, filter) => item == filter :
149
+ (item, filter) => item.toString().toLowerCase() === filter.toLowerCase();
150
+ }
151
+ else {
152
+ return (item, filter) => item === filter;
153
+ }
154
+ case 'lt':
155
+ return (item, filter) => item < filter;
156
+ case 'lte':
157
+ return (item, filter) => item <= filter;
158
+ case 'gt':
159
+ return (item, filter) => item > filter;
160
+ case 'gte':
161
+ return (item, filter) => item >= filter;
162
+ case 'ne':
163
+ return (item, filter) => item !== filter;
164
+ default:
165
+ throw new Error(`filter operator: ${operator} is not implemented in ArrayDataSource.`);
52
166
  }
53
167
  }
54
168
 
55
169
  /**
56
- * AsyncDataSource is a DataSource that loads data asynchronously using a DataLoader function.
170
+ * RemoteDataSource is a DataSource that loads data asynchronously using a DataLoader function.
57
171
  * It is used to fetch data from a remote source, such as an API.
58
172
  */
59
- class AsyncDataSource extends DataSource {
173
+ class RemoteDataSource extends DataSource {
60
174
  loader;
175
+ type = 'remote';
61
176
  constructor(loader) {
62
177
  super();
63
178
  this.loader = loader;
@@ -66,41 +181,39 @@ class AsyncDataSource extends DataSource {
66
181
  }
67
182
  }
68
183
  load(request) {
69
- this.setLoading(true);
70
- return this.loader(request).pipe(tap(res => {
71
- this.setLoading(false);
184
+ this._isLoading.set(true);
185
+ return this.loader(request).pipe(catchError(err => {
186
+ this._isLoading.set(false);
187
+ throw err;
188
+ }), tap(res => {
189
+ this._isLoading.set(false);
72
190
  }));
73
191
  }
74
192
  }
75
193
 
76
- class ArrayDataSource extends DataSource {
77
- items;
78
- _insertSubject = new Subject();
79
- _updateSubject = new Subject();
80
- _removeSubject = new Subject();
81
- inserted = this._insertSubject.asObservable();
82
- removed = this._removeSubject.asObservable();
83
- updated = this._updateSubject.asObservable();
84
- constructor(items) {
85
- super();
86
- this.items = items;
194
+ /**
195
+ * Converts a DataSourceLike to a DataSource instance.
196
+ * @param source The data source to convert.
197
+ * @returns A DataSource instance.
198
+ */
199
+ function dataSourceAttribute(source) {
200
+ if (Array.isArray(source)) {
201
+ return new LocalDataSource(source);
87
202
  }
88
- load(request) {
89
- let startItem = request.page.index * request.page.size;
90
- let resultArray = this.items.slice(startItem, startItem + request.page.size);
91
- let result = new DataResult(resultArray, this.items.length);
92
- return of(result);
203
+ else if (typeof source == 'function') {
204
+ return new RemoteDataSource(source);
93
205
  }
94
- remove(item) {
95
- let index = this.items.findIndex(x => x === item);
96
- if (index > -1) {
97
- this.items.splice(index, 1);
98
- this._removeSubject.next({ item, index });
99
- }
206
+ else if (source instanceof DataSource) {
207
+ return source;
208
+ }
209
+ else if (source === undefined || source === null) {
210
+ return new LocalDataSource([]);
211
+ }
212
+ else if (typeof source === 'object') {
213
+ return LocalDataSource.fromEnum(source);
100
214
  }
101
- insert(...items) {
102
- this.items.push(items);
103
- this._insertSubject.next({ items });
215
+ else {
216
+ throw new Error('Invalid data source.');
104
217
  }
105
218
  }
106
219
 
@@ -126,5 +239,5 @@ function toDataResult(dr) {
126
239
  * Generated bundle index. Do not edit.
127
240
  */
128
241
 
129
- export { ArrayDataSource, AsyncDataSource, DataRequest, DataResult, DataSource, toDataResult };
242
+ export { DataRequest, DataResult, DataSource, LocalDataSource, RemoteDataSource, dataSourceAttribute, toDataResult };
130
243
  //# sourceMappingURL=bootkit-ng0-data.mjs.map
@@ -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/async-data-source.ts","../../../projects/ng0/data/array-data-source.ts","../../../projects/ng0/data/data-result-operator.ts","../../../projects/ng0/data/bootkit-ng0-data.ts"],"sourcesContent":["/**\r\n * DataRequest class represents a request for data with pagination, filtering, sorting, and field selection.\r\n * It is used to encapsulate the parameters needed to fetch data from a data source.\r\n * It can be used with various data sources such as HTTP services, in-memory arrays, etc.\r\n * \r\n */\r\nexport class DataRequest {\r\n public page?: DataRequestPage;\r\n public filters?: DataRequestFilter[];\r\n public sort?: DataRequestSort;\r\n public select?: string[];\r\n public computeTotal?: boolean;\r\n\r\n constructor(options?: {\r\n pageIndex?: number,\r\n pageSize?: number,\r\n filters?: DataRequestFilter[],\r\n sort?: DataRequestSort,\r\n select?: string[],\r\n computeTotal?: boolean,\r\n }) {\r\n if (Number.isInteger(options?.pageIndex) && Number.isInteger(options?.pageSize)) {\r\n this.page = { index: options!.pageIndex!, size: options!.pageSize! };\r\n }\r\n\r\n this.filters = options?.filters;\r\n this.sort = options?.sort;\r\n this.select = options?.select;\r\n this.computeTotal = options?.computeTotal;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a page in a DataRequest.\r\n * @property index The index of the page (0-based).\r\n * @property size The size of the page (number of items per page).\r\n */\r\nexport interface DataRequestPage {\r\n index: number;\r\n size: number;\r\n}\r\n\r\n/**\r\n * Represents a sorting option in a DataRequest.\r\n * @property field The field to sort by.\r\n * @property asc Whether to sort in ascending order.\r\n */\r\nexport interface DataRequestSort {\r\n field: string;\r\n asc?: boolean\r\n}\r\n\r\n/**\r\n * Represents a filter in a DataRequest.\r\n * @property field The field to filter by.\r\n * @property value The value to filter by.\r\n * @property operator The operator to use for filtering.\r\n */\r\nexport interface DataRequestFilter {\r\n field: string;\r\n value?: string;\r\n operator: any;\r\n}\r\n\r\n// export enum DataRequestFilterOperator {\r\n// EQ = 0,\r\n// NEQ = 1,\r\n// LT = 2,\r\n// LTE = 3,\r\n// GT = 4,\r\n// GTE = 5,\r\n// LI = 6,\r\n// SW = 7,\r\n// }\r\n","import { DataRequest } from \"./data-request\";\r\n\r\nexport class DataResult<T = any> {\r\n constructor(\r\n public readonly data: T[],\r\n public readonly total?: number) {\r\n }\r\n}\r\n","import { Observable, Subject } from \"rxjs\";\r\nimport { DataRequest } from \"./data-request\";\r\nimport { DataResult } from \"./data-result\";\r\n\r\nexport abstract class DataSource<T=any> {\r\n protected _loading = false;\r\n\r\n constructor() {\r\n }\r\n\r\n get loading() { return this._loading; }\r\n protected setLoading(value: boolean) {\r\n this._loading = value;\r\n }\r\n\r\n // get data() { return this._data; }\r\n // protected set data(value: any[] | undefined) {\r\n // this._data = value;\r\n // }\r\n\r\n // get totallRecords() { return this._totallRecords; }\r\n // protected set totallRecords(value: number | undefined) {\r\n // this._totallRecords= value;\r\n // }\r\n\r\n abstract load(request: DataRequest): Observable<DataResult>;\r\n}\r\n","import { Observable, tap } from \"rxjs\";\r\nimport { DataRequest } from \"./data-request\";\r\nimport { DataResult } from \"./data-result\";\r\nimport { DataSource } from \"./data-source\";\r\n\r\n/**\r\n * DataLoader is a function that takes a DataRequest and returns an Observable of DataResult.\r\n * It is used by AsyncDataSource to load data asynchronously.\r\n */\r\nexport type DataLoader = (request: DataRequest) => Observable<DataResult>;\r\n\r\n\r\n/**\r\n * AsyncDataSource is a DataSource that loads data asynchronously using a DataLoader function.\r\n * It is used to fetch data from a remote source, such as an API.\r\n */\r\nexport class AsyncDataSource extends DataSource {\r\n constructor(private readonly loader: DataLoader) {\r\n super();\r\n\r\n if (typeof loader !== 'function') {\r\n throw 'Invalid data loader';\r\n }\r\n }\r\n\r\n load(request: DataRequest) {\r\n this.setLoading(true);\r\n\r\n return this.loader(request).pipe(\r\n tap(res => {\r\n this.setLoading(false);\r\n })\r\n )\r\n }\r\n}\r\n","import { of, Subject } from \"rxjs\";\r\nimport { DataRequest } from \"./data-request\";\r\nimport { DataResult } from \"./data-result\";\r\nimport { DataSource } from \"./data-source\";\r\n\r\nexport class ArrayDataSource extends DataSource {\r\n private _insertSubject = new Subject<{ items: any[] }>();\r\n private _updateSubject = new Subject<{ item: any, index: number }>();\r\n private _removeSubject = new Subject<{ item: any, index: number }>();\r\n\r\n public readonly inserted = this._insertSubject.asObservable();\r\n public readonly removed = this._removeSubject.asObservable();\r\n public readonly updated = this._updateSubject.asObservable();\r\n\r\n constructor(private items: any[]) {\r\n super();\r\n }\r\n\r\n load(request: DataRequest) {\r\n let startItem = request.page!.index * request.page!.size;\r\n let resultArray = this.items.slice(startItem, startItem + request.page!.size);\r\n let result = new DataResult(resultArray, this.items.length);\r\n return of(result);\r\n }\r\n\r\n public remove(item: any) {\r\n let index = this.items!.findIndex(x => x === item);\r\n if (index > -1) {\r\n this.items.splice(index, 1);\r\n this._removeSubject.next({ item, index });\r\n }\r\n }\r\n\r\n public insert(...items: any[]) {\r\n this.items.push(items);\r\n this._insertSubject.next({ items });\r\n }\r\n\r\n // public set(items: any[]) {\r\n // this.items = items;\r\n // // this._removeSubject.next(0);\r\n // }\r\n}\r\n","import { Observable } from \"rxjs\";\r\nimport { DataResult } from \"./data-result\";\r\nimport { DataRequest } from \"./data-request\";\r\n\r\nexport function toDataResult<T=any>(dr: DataRequest) {\r\n return function (source: Observable<any>): Observable<DataResult<T>> {\r\n return new Observable(subscriber => {\r\n source.subscribe({\r\n next(event) {\r\n subscriber.next(new DataResult(event));\r\n },\r\n error(error) {\r\n subscriber.error(error);\r\n },\r\n complete() {\r\n subscriber.complete();\r\n }\r\n });\r\n });\r\n }\r\n}\r\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\";\r\n\r\n/**\r\n * DataRequest class represents a request for data with pagination, filtering, sorting, and field selection.\r\n * It is used to encapsulate the parameters needed to fetch data from a data source.\r\n * It can be used with various data sources such as HTTP services, in-memory arrays, etc.\r\n * \r\n */\r\nexport class DataRequest {\r\n public page?: DataRequestPage;\r\n public filters?: DataRequestFilter[];\r\n public sort?: DataRequestSort;\r\n public select?: string[];\r\n public computeTotal?: boolean;\r\n\r\n constructor(options?: {\r\n page?: DataRequestPage,\r\n filters?: DataRequestFilter[],\r\n sort?: DataRequestSort,\r\n select?: string[],\r\n computeTotal?: boolean,\r\n }) {\r\n this.page = options?.page;\r\n this.filters = options?.filters;\r\n this.sort = options?.sort;\r\n this.select = options?.select;\r\n this.computeTotal = options?.computeTotal;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a data request page.\r\n */\r\nexport interface DataRequestPage {\r\n /**\r\n * Index of the page.\r\n * If zeroBased is true, the index starts from 0.\r\n */\r\n index: number;\r\n\r\n /**\r\n * Size of the page, i.e., number of items in each page.\r\n */\r\n size: number;\r\n\r\n /**\r\n * Indicates if the index is zero-based.\r\n */\r\n zeroBased: boolean;\r\n}\r\n\r\n/**\r\n * Represents a sorting option in a DataRequest.\r\n * @property field The field to sort by.\r\n * @property asc Whether to sort in ascending order.\r\n */\r\nexport interface DataRequestSort {\r\n field: string;\r\n asc?: boolean\r\n}\r\n\r\n/**\r\n * Represents a filter in a DataRequest.\r\n */\r\nexport interface DataRequestFilter {\r\n /**\r\n * The field to filter by.\r\n * It can be a string representing the property name of the data items.\r\n */\r\n field?: string;\r\n\r\n /**\r\n * The value to filter by.\r\n * It can be a string, number, or any other type depending on the field.\r\n */\r\n value?: string;\r\n\r\n /**\r\n * The operator to use for filtering.\r\n * It can be one of the standard filter operators like Contains, StartsWith, EndsWith, Equals, etc.\r\n */\r\n operator?: string;\r\n\r\n /**\r\n * Indicates if the filter is case-sensitive. only for text columns.\r\n * Default is false.\r\n */\r\n caseSensitive?: boolean;\r\n\r\n /**\r\n * A custom filter function to apply for filtering.\r\n */\r\n filterBy?: FilterPredicate;\r\n}\r\n\r\n// export enum DataRequestFilterOperator {\r\n// EQ = 0,\r\n// NEQ = 1,\r\n// LT = 2,\r\n// LTE = 3,\r\n// GT = 4,\r\n// GTE = 5,\r\n// LI = 6,\r\n// SW = 7,\r\n// }\r\n","export class DataResult<T = any> {\r\n constructor(\r\n public readonly data: T[],\r\n public readonly total?: number) {\r\n }\r\n}\r\n","import { Observable } from \"rxjs\";\r\nimport { DataRequest } from \"./data-request\";\r\nimport { DataResult } from \"./data-result\";\r\nimport { signal } from \"@angular/core\";\r\n\r\n/**\r\n * DataLoader is a function that takes a DataRequest and returns an Observable of DataResult.\r\n * It is used by RemoteDataSource to load data asynchronously.\r\n */\r\nexport type DataLoader<T = any> = (request: DataRequest) => Observable<DataResult<T>>;\r\n\r\n\r\n/**\r\n * Abstract base class for data sources.\r\n * This class provides a common interface for loading data from various sources.\r\n */\r\nexport abstract class DataSource<T = any> {\r\n public abstract readonly type: 'local' | 'remote';\r\n protected _isLoading = signal(false);\r\n\r\n /**\r\n * Indicates whether the data source is currently loading data.\r\n */\r\n public isLoading = this._isLoading.asReadonly();\r\n\r\n constructor() {\r\n }\r\n\r\n /**\r\n * Loads data from the data source.\r\n * @param request The data request object containing pagination, sorting, and filtering information.\r\n */\r\n abstract load(request: DataRequest): Observable<DataResult>;\r\n}\r\n\r\n/**\r\n * DataSourceLike is a type that can be used to represent any data source\r\n * that can be used with the table, autocomplete, dropdown and any component that requires data.\r\n * It can be an array of data, a function that returns an observable of data,\r\n * or an instance of DataSource.\r\n */\r\nexport type DataSourceLike<T = any> =\r\n Array<any> |\r\n DataLoader<T> |\r\n DataSource<T> |\r\n Record<string, string | number> | // enum: extract enum or object values\r\n undefined |\r\n null;\r\n","import { of } from \"rxjs\";\r\nimport { DataRequest, DataRequestFilter } from \"./data-request\";\r\nimport { DataResult } from \"./data-result\";\r\nimport { DataSource } from \"./data-source\";\r\nimport { getEnumValues } from \"@bootkit/ng0/common\";\r\n\r\n/**\r\n * An implementation of DataSource that uses an array as the data source.\r\n * This is useful for static data or when you want to manage the data manually.\r\n */\r\nexport class LocalDataSource extends DataSource {\r\n readonly type = 'local';\r\n\r\n /**\r\n * Creates a new LocalDataSource.\r\n * @param items The array of items to be used as the data source. \r\n */\r\n constructor(private items: any[]) {\r\n super();\r\n }\r\n\r\n /**\r\n * Creates a LocalDataSource from enum values.\r\n * @param enumClass The enum class to extract values from.\r\n * @returns A LocalDataSource containing the enum values.\r\n */\r\n public static fromEnum(enumClass: Record<string, string | number>): LocalDataSource {\r\n return new LocalDataSource(getEnumValues(enumClass));\r\n }\r\n\r\n /**\r\n * Loads data from the local array based on the provided DataRequest.\r\n * @param request The DataRequest containing filtering, sorting, and pagination information.\r\n * @returns An observable of DataResult containing the requested data. \r\n */\r\n load(request: DataRequest) {\r\n let filteredValues = [...this.items];\r\n let result: any[];\r\n\r\n // Filtering\r\n // if (Array.isArray(request.filters) && request.filters.length > 0) {\r\n // request.filters.forEach(filter => {\r\n // if (!filter.filterBy) {\r\n // throw Error('A filterBy function must be provided for LocalDataSource filters.');\r\n // }\r\n\r\n // let isPassedByFilter = getFilterFunction(filter);\r\n\r\n // for (let i = 0; i < filteredValues.length; i++) {\r\n // let row = filteredValues[i];\r\n // if (!isPassedByFilter(row[filter.field], filter.value)) {\r\n // filteredValues.splice(i, 1);\r\n // i--; // Adjust index after removal\r\n // }\r\n // }\r\n // });\r\n // }\r\n\r\n // Pagination\r\n if (request.page) {\r\n let startItemIndex = (request.page.zeroBased ? request.page.index : request.page.index - 1) * request.page.size;\r\n result = filteredValues.slice(startItemIndex, startItemIndex + request.page.size);\r\n } else {\r\n result = filteredValues;\r\n }\r\n\r\n // Sorting\r\n if (request.sort) {\r\n\r\n }\r\n\r\n let dataResult = new DataResult(result, filteredValues.length);\r\n\r\n // this._loading = true;\r\n // return of(result).pipe(\r\n // delay(5000),\r\n // tap(x => this._loading = false)\r\n // );\r\n return of(dataResult);\r\n }\r\n}\r\n\r\nfunction getFilterFunction(requestfilter: DataRequestFilter): (cellValue: any, filterValue: any) => boolean {\r\n let operator = requestfilter.operator || 'contains';\r\n let caseSensitive = requestfilter.caseSensitive || false;\r\n\r\n // if (requestfilter.value === undefined || requestfilter.value === null) {\r\n // return (item: any) => true; // No filter applied\r\n // }\r\n\r\n switch (requestfilter.operator) {\r\n case 'contains':\r\n return caseSensitive ?\r\n (item: string, filter: string) => item.includes(filter) :\r\n (item: string, filter: string) => item.toLowerCase().includes(filter.toLowerCase());\r\n\r\n case 'startsWith':\r\n return caseSensitive ?\r\n (item: string, filter: string) => item.startsWith(filter) :\r\n (item: string, filter: string) => item.toLowerCase().startsWith(filter.toLowerCase());\r\n\r\n case 'endsWith':\r\n return caseSensitive ?\r\n (item: string, filter: string) => item.endsWith(filter) :\r\n (item: string, filter: string) => item.toLowerCase().endsWith(filter.toLowerCase());\r\n\r\n case 'eq':\r\n if (typeof requestfilter.value === 'string') {\r\n return caseSensitive ?\r\n (item: string, filter: string) => item == filter :\r\n (item: string, filter: string) => item.toString().toLowerCase() === filter.toLowerCase();\r\n } else {\r\n return (item: any, filter: any) => item === filter;\r\n }\r\n\r\n case 'lt':\r\n return (item: any, filter: any) => item < filter;\r\n\r\n case 'lte':\r\n return (item: any, filter: any) => item <= filter;\r\n\r\n case 'gt':\r\n return (item: any, filter: any) => item > filter;\r\n\r\n case 'gte':\r\n return (item: any, filter: any) => item >= filter;\r\n\r\n case 'ne':\r\n return (item: any, filter: any) => item !== filter;\r\n\r\n default:\r\n throw new Error(`filter operator: ${operator} is not implemented in ArrayDataSource.`);\r\n }\r\n}","import { catchError, Observable, tap } from \"rxjs\";\r\nimport { DataRequest } from \"./data-request\";\r\nimport { DataLoader, DataSource } from \"./data-source\";\r\n\r\n\r\n/**\r\n * RemoteDataSource is a DataSource that loads data asynchronously using a DataLoader function.\r\n * It is used to fetch data from a remote source, such as an API.\r\n */\r\nexport class RemoteDataSource extends DataSource {\r\n readonly type = 'remote';\r\n\r\n constructor(private readonly loader: DataLoader) {\r\n super();\r\n\r\n if (typeof loader !== 'function') {\r\n throw 'Invalid data loader';\r\n }\r\n }\r\n\r\n load(request: DataRequest) {\r\n this._isLoading.set(true);\r\n\r\n return this.loader(request).pipe(\r\n catchError(err => {\r\n this._isLoading.set(false);\r\n throw err;\r\n }),\r\n tap(res => {\r\n this._isLoading.set(false);\r\n })\r\n )\r\n }\r\n}\r\n","import { LocalDataSource } from \"./local-data-source\";\r\nimport { RemoteDataSource } from \"./remote-data-source\";\r\nimport { DataSource, DataSourceLike } from \"./data-source\";\r\n\r\n/**\r\n * Converts a DataSourceLike to a DataSource instance.\r\n * @param source The data source to convert.\r\n * @returns A DataSource instance.\r\n */\r\nexport function dataSourceAttribute<T>(source: DataSourceLike): DataSource<T> {\r\n if (Array.isArray(source)) {\r\n return new LocalDataSource(source);\r\n } else if (typeof source == 'function') {\r\n return new RemoteDataSource(source);\r\n } else if (source instanceof DataSource) {\r\n return source;\r\n } else if (source === undefined || source === null) {\r\n return new LocalDataSource([]);\r\n } else if (typeof source === 'object') {\r\n return LocalDataSource.fromEnum(source);\r\n } else {\r\n throw new Error('Invalid data source.');\r\n }\r\n}\r\n","import { Observable } from \"rxjs\";\r\nimport { DataResult } from \"./data-result\";\r\nimport { DataRequest } from \"./data-request\";\r\n\r\nexport function toDataResult<T=any>(dr: DataRequest) {\r\n return function (source: Observable<any>): Observable<DataResult<T>> {\r\n return new Observable(subscriber => {\r\n source.subscribe({\r\n next(event) {\r\n subscriber.next(new DataResult(event));\r\n },\r\n error(error) {\r\n subscriber.error(error);\r\n },\r\n complete() {\r\n subscriber.complete();\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ const f = Math.floor;
2
+ /**
3
+ * Represents a time span in months, days, hours, minutes, seconds, and milliseconds.
4
+ * Provides methods to create a TimeSpan from a total number of milliseconds.
5
+ * @example
6
+ * const span = TimeSpan.fromMilliseconds(123456789);
7
+ * console.log(span); // TimeSpan { months: 0, days: 1, hours: 10, minutes: 17, seconds: 36, milliseconds: 789 }
8
+ */
9
+ class TimeSpan {
10
+ months;
11
+ days;
12
+ hours;
13
+ minutes;
14
+ seconds;
15
+ milliseconds;
16
+ /** Milliseconds per second */
17
+ static msPerSecond = 1000;
18
+ /** Milliseconds per minute */
19
+ static msPerMinute = this.msPerSecond * 60;
20
+ /** Milliseconds per hour */
21
+ static msPerHour = this.msPerMinute * 60;
22
+ /** Milliseconds per day */
23
+ static msPerDay = this.msPerHour * 24;
24
+ /** Milliseconds per month */
25
+ static msPerMonth = this.msPerDay * 30;
26
+ constructor(months = 0, days = 0, hours = 0, minutes = 0, seconds = 0, milliseconds = 0) {
27
+ this.months = months;
28
+ this.days = days;
29
+ this.hours = hours;
30
+ this.minutes = minutes;
31
+ this.seconds = seconds;
32
+ this.milliseconds = milliseconds;
33
+ }
34
+ /**
35
+ * Creates a TimeSpan from a total number of milliseconds.
36
+ * @param ms The total number of milliseconds.
37
+ * @returns A TimeSpan representing the equivalent time span.
38
+ */
39
+ static fromMilliseconds(ms) {
40
+ const months = f(ms / TimeSpan.msPerMonth), days = f((ms % TimeSpan.msPerMonth) / TimeSpan.msPerDay), hours = f((ms % TimeSpan.msPerDay) / TimeSpan.msPerHour), minutes = f((ms % TimeSpan.msPerHour) / TimeSpan.msPerMinute), seconds = f((ms % TimeSpan.msPerMinute) / TimeSpan.msPerSecond), milliseconds = (ms % TimeSpan.msPerSecond);
41
+ return new TimeSpan(months, days, hours, minutes, seconds, milliseconds);
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Generated bundle index. Do not edit.
47
+ */
48
+
49
+ export { TimeSpan };
50
+ //# sourceMappingURL=bootkit-ng0-date.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootkit-ng0-date.mjs","sources":["../../../projects/ng0/date/time-span.ts","../../../projects/ng0/date/bootkit-ng0-date.ts"],"sourcesContent":["const f = Math.floor;\r\n\r\n/**\r\n * Represents a time span in months, days, hours, minutes, seconds, and milliseconds.\r\n * Provides methods to create a TimeSpan from a total number of milliseconds.\r\n * @example\r\n * const span = TimeSpan.fromMilliseconds(123456789);\r\n * console.log(span); // TimeSpan { months: 0, days: 1, hours: 10, minutes: 17, seconds: 36, milliseconds: 789 }\r\n */\r\nexport class TimeSpan {\r\n /** Milliseconds per second */\r\n public static readonly msPerSecond = 1000;\r\n\r\n /** Milliseconds per minute */\r\n public static readonly msPerMinute = this.msPerSecond * 60;\r\n\r\n /** Milliseconds per hour */\r\n public static readonly msPerHour = this.msPerMinute * 60;\r\n\r\n /** Milliseconds per day */\r\n public static readonly msPerDay = this.msPerHour * 24;\r\n\r\n /** Milliseconds per month */\r\n public static readonly msPerMonth = this.msPerDay * 30;\r\n\r\n constructor(\r\n public readonly months: number = 0,\r\n public readonly days: number = 0,\r\n public readonly hours: number = 0,\r\n public readonly minutes: number = 0,\r\n public readonly seconds: number = 0,\r\n public readonly milliseconds: number = 0) {\r\n }\r\n\r\n /**\r\n * Creates a TimeSpan from a total number of milliseconds.\r\n * @param ms The total number of milliseconds.\r\n * @returns A TimeSpan representing the equivalent time span.\r\n */\r\n static fromMilliseconds(ms: number): TimeSpan {\r\n const months = f(ms / TimeSpan.msPerMonth),\r\n days = f((ms % TimeSpan.msPerMonth) / TimeSpan.msPerDay),\r\n hours = f((ms % TimeSpan.msPerDay) / TimeSpan.msPerHour),\r\n minutes = f((ms % TimeSpan.msPerHour) / TimeSpan.msPerMinute),\r\n seconds = f((ms % TimeSpan.msPerMinute) / TimeSpan.msPerSecond),\r\n milliseconds = (ms % TimeSpan.msPerSecond);\r\n return new TimeSpan(months, days, hours, minutes, seconds, milliseconds);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK;AAEpB;;;;;;AAMG;MACU,QAAQ,CAAA;AAiBD,IAAA,MAAA;AACA,IAAA,IAAA;AACA,IAAA,KAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,YAAA;;AApBX,IAAA,OAAgB,WAAW,GAAG,IAAI;;IAGlC,OAAgB,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE;;IAGnD,OAAgB,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE;;IAGjD,OAAgB,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE;;IAG9C,OAAgB,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;AAEtD,IAAA,WAAA,CACkB,SAAiB,CAAC,EAClB,IAAA,GAAe,CAAC,EAChB,KAAA,GAAgB,CAAC,EACjB,OAAA,GAAkB,CAAC,EACnB,OAAA,GAAkB,CAAC,EACnB,eAAuB,CAAC,EAAA;QALxB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,YAAY,GAAZ,YAAY;IAC9B;AAEA;;;;AAIG;IACH,OAAO,gBAAgB,CAAC,EAAU,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,EACxC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,EACxD,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,EACxD,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,WAAW,CAAC,EAC7D,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,EAC/D,YAAY,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;AAC5C,QAAA,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC;IAC1E;;;AC/CF;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-file.mjs","sources":["../../../projects/ng0/file/utils.ts","../../../projects/ng0/file/bootkit-ng0-file.ts"],"sourcesContent":["\r\n/**\r\n * Saves a Blob as a file in the user's browser.\r\n * This function is only available in browsers that support the Blob API.\r\n * @param blob \r\n * @param fileName \r\n * \r\n */\r\nexport function saveBlob(blob: Blob, fileName: string): void {\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = fileName;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n window.URL.revokeObjectURL(url);\r\n}\r\n\r\n/**\r\n * Triggers downloading a file from a given URL.\r\n * @param url \r\n * @param fileName \r\n */\r\nexport function downloadFile(url: string, fileName: string): void {\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = fileName;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n}\r\n\r\n/**\r\n * Converts a File object to a Base64 string.\r\n * @param file The File object to convert.\r\n * @return A Promise that resolves to the Base64 string representation of the file.\r\n */\r\nexport function convertFileToBase64(file: File): Promise<string | ArrayBuffer | null> {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AACA;;;;;;AAMG;AACa,SAAA,QAAQ,CAAC,IAAU,EAAE,QAAgB,EAAA;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACrB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;IACT,CAAC,CAAC,MAAM,EAAE;AACV,IAAA,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AACjC;AAEA;;;;AAIG;AACa,SAAA,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAA;IACxD,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACrB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;IACT,CAAC,CAAC,MAAM,EAAE;AACZ;AAEA;;;;AAIG;AACG,SAAU,mBAAmB,CAAC,IAAU,EAAA;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,MAAM,CAAC,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;AACzC,KAAC,CAAC;AACJ;;AC7CA;;AAEG;;;;"}
1
+ {"version":3,"file":"bootkit-ng0-file.mjs","sources":["../../../projects/ng0/file/utils.ts","../../../projects/ng0/file/bootkit-ng0-file.ts"],"sourcesContent":["\r\n/**\r\n * Saves a Blob as a file in the user's browser.\r\n * This function is only available in browsers that support the Blob API.\r\n * @param blob \r\n * @param fileName \r\n * \r\n */\r\nexport function saveBlob(blob: Blob, fileName: string): void {\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = fileName;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n window.URL.revokeObjectURL(url);\r\n}\r\n\r\n/**\r\n * Triggers downloading a file from a given URL.\r\n * @param url \r\n * @param fileName \r\n */\r\nexport function downloadFile(url: string, fileName: string): void {\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = fileName;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n}\r\n\r\n/**\r\n * Converts a File object to a Base64 string.\r\n * @param file The File object to convert.\r\n * @return A Promise that resolves to the Base64 string representation of the file.\r\n */\r\nexport function convertFileToBase64(file: File): Promise<string | ArrayBuffer | null> {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AACA;;;;;;AAMG;AACG,SAAU,QAAQ,CAAC,IAAU,EAAE,QAAgB,EAAA;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACrB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;IACT,CAAC,CAAC,MAAM,EAAE;AACV,IAAA,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AACjC;AAEA;;;;AAIG;AACG,SAAU,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAA;IACxD,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AACZ,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACrB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,KAAK,EAAE;IACT,CAAC,CAAC,MAAM,EAAE;AACZ;AAEA;;;;AAIG;AACG,SAAU,mBAAmB,CAAC,IAAU,EAAA;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,MAAM,CAAC,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;AACzC,IAAA,CAAC,CAAC;AACJ;;AC7CA;;AAEG;;;;"}