@bootkit/ng0 0.0.0-alpha.11 → 0.0.0-alpha.14

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 (62) hide show
  1. package/README.md +2 -2
  2. package/common/index.d.ts +5 -21
  3. package/components/backdrop/index.d.ts +4 -0
  4. package/components/sidenav/index.d.ts +17 -4
  5. package/fesm2022/bootkit-ng0-common.mjs.map +1 -1
  6. package/fesm2022/bootkit-ng0-components-accordion.mjs +11 -11
  7. package/fesm2022/bootkit-ng0-components-accordion.mjs.map +1 -1
  8. package/fesm2022/bootkit-ng0-components-backdrop.mjs +10 -5
  9. package/fesm2022/bootkit-ng0-components-backdrop.mjs.map +1 -1
  10. package/fesm2022/bootkit-ng0-components-button.mjs +7 -7
  11. package/fesm2022/bootkit-ng0-components-button.mjs.map +1 -1
  12. package/fesm2022/bootkit-ng0-components-card.mjs +11 -11
  13. package/fesm2022/bootkit-ng0-components-card.mjs.map +1 -1
  14. package/fesm2022/bootkit-ng0-components-code.mjs +6 -6
  15. package/fesm2022/bootkit-ng0-components-code.mjs.map +1 -1
  16. package/fesm2022/bootkit-ng0-components-collapse.mjs +10 -10
  17. package/fesm2022/bootkit-ng0-components-collapse.mjs.map +1 -1
  18. package/fesm2022/bootkit-ng0-components-confirmation.mjs +14 -14
  19. package/fesm2022/bootkit-ng0-components-confirmation.mjs.map +1 -1
  20. package/fesm2022/bootkit-ng0-components-form-field.mjs +8 -8
  21. package/fesm2022/bootkit-ng0-components-form-field.mjs.map +1 -1
  22. package/fesm2022/bootkit-ng0-components-modal.mjs +8 -8
  23. package/fesm2022/bootkit-ng0-components-modal.mjs.map +1 -1
  24. package/fesm2022/bootkit-ng0-components-nav.mjs +20 -20
  25. package/fesm2022/bootkit-ng0-components-nav.mjs.map +1 -1
  26. package/fesm2022/bootkit-ng0-components-offcanvas.mjs +7 -7
  27. package/fesm2022/bootkit-ng0-components-offcanvas.mjs.map +1 -1
  28. package/fesm2022/bootkit-ng0-components-overlay.mjs.map +1 -1
  29. package/fesm2022/bootkit-ng0-components-pagination.mjs +8 -8
  30. package/fesm2022/bootkit-ng0-components-pagination.mjs.map +1 -1
  31. package/fesm2022/bootkit-ng0-components-popover.mjs +7 -7
  32. package/fesm2022/bootkit-ng0-components-popover.mjs.map +1 -1
  33. package/fesm2022/bootkit-ng0-components-sidenav.mjs +58 -37
  34. package/fesm2022/bootkit-ng0-components-sidenav.mjs.map +1 -1
  35. package/fesm2022/bootkit-ng0-components-stepper.mjs +11 -11
  36. package/fesm2022/bootkit-ng0-components-stepper.mjs.map +1 -1
  37. package/fesm2022/bootkit-ng0-components-table.mjs +14 -14
  38. package/fesm2022/bootkit-ng0-components-table.mjs.map +1 -1
  39. package/fesm2022/bootkit-ng0-components-toast.mjs +7 -7
  40. package/fesm2022/bootkit-ng0-components-toast.mjs.map +1 -1
  41. package/fesm2022/bootkit-ng0-components-tooltip.mjs +7 -7
  42. package/fesm2022/bootkit-ng0-components-tooltip.mjs.map +1 -1
  43. package/fesm2022/bootkit-ng0-components-vertical-menu.mjs +21 -21
  44. package/fesm2022/bootkit-ng0-components-vertical-menu.mjs.map +1 -1
  45. package/fesm2022/bootkit-ng0-data.mjs.map +1 -1
  46. package/fesm2022/bootkit-ng0-date.mjs.map +1 -1
  47. package/fesm2022/bootkit-ng0-file.mjs.map +1 -1
  48. package/fesm2022/bootkit-ng0-form.mjs +19 -19
  49. package/fesm2022/bootkit-ng0-form.mjs.map +1 -1
  50. package/fesm2022/bootkit-ng0-http.mjs +3 -3
  51. package/fesm2022/bootkit-ng0-http.mjs.map +1 -1
  52. package/fesm2022/bootkit-ng0-localization-locales.mjs.map +1 -1
  53. package/fesm2022/bootkit-ng0-localization.mjs +31 -31
  54. package/fesm2022/bootkit-ng0-localization.mjs.map +1 -1
  55. package/fesm2022/bootkit-ng0-platform-browser.mjs +6 -6
  56. package/fesm2022/bootkit-ng0-platform-browser.mjs.map +1 -1
  57. package/fesm2022/bootkit-ng0-script.mjs +3 -3
  58. package/fesm2022/bootkit-ng0-script.mjs.map +1 -1
  59. package/fesm2022/bootkit-ng0-security.mjs +13 -13
  60. package/fesm2022/bootkit-ng0-security.mjs.map +1 -1
  61. package/fesm2022/bootkit-ng0.mjs.map +1 -1
  62. package/package.json +5 -5
@@ -1 +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
+ {"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';\n\n@Directive({\n selector: '[ng0VerticalMenuArrow], [ng0VmenuArrow]',\n exportAs: 'ng0VerticalMenuArrow',\n standalone: true,\n})\nexport class VerticalMenuArrowDirective {\n constructor(public readonly templateRef: TemplateRef<any>) { }\n}\n","import { Component, ContentChild, input } from '@angular/core';\nimport { VerticalMenuArrowDirective } from './item-arrow.directive';\n\n@Component({\n selector: 'ng0-vertical-menu, ng0-vmenu',\n templateUrl: './vertical-menu.component.html',\n standalone: true,\n styles: `:host {display: block}`,\n imports: [],\n})\nexport class VerticalMenuComponent {\n public toggleByItemClick = input(true);\n \n public collapseTimings = input<string | number>('0.15s');\n\n @ContentChild(VerticalMenuArrowDirective, { descendants: false }) public readonly arrowDirective?: VerticalMenuArrowDirective;\n\n constructor() {\n }\n}\n\n","<ng-content></ng-content>","import { Component, ContentChild, model } from '@angular/core';\nimport { VerticalMenuItemComponent } from './item.component';\nimport { CommonModule } from '@angular/common';\nimport { VerticalMenuComponent } from './vertical-menu.component';\nimport { CollapseDirective } from '@bootkit/ng0/components/collapse';\n\n@Component({\n selector: 'ng0-vertical-menu-item-children, ng0-vmenu-item-children, ng0-vmenu-children',\n templateUrl: './item-children.component.html',\n exportAs: 'ng0VmenuItemChildren',\n standalone: true,\n styles: `:host {display: block}`,\n imports: [CommonModule, CollapseDirective],\n host: {\n '[class.isc-expanded]': 'expanded()'\n }\n})\nexport class VerticalMenuItemChildrenComponent {\n public expanded = model(false);\n\n @ContentChild(VerticalMenuItemComponent, { descendants: false }) protected _items?: VerticalMenuItemComponent;\n\n constructor(public menuItem: VerticalMenuItemComponent, protected _menu: VerticalMenuComponent,) { }\n}\n","<div ng0Collapse\n [collapsed]=\"!expanded()\"\n [timings]=\"_menu.collapseTimings()\">\n <ng-content></ng-content>\n</div>\n","import { Component, ContentChild, ElementRef, HostBinding, input, model, Renderer2 } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VerticalMenuItemChildrenComponent } from './item-children.component';\nimport { VerticalMenuComponent } from './vertical-menu.component';\n\n@Component({\n selector: 'ng0-vertical-menu-item, ng0-vmenu-item',\n templateUrl: './item.component.html',\n standalone: true,\n styles: `:host {display: block}`,\n imports: [CommonModule],\n host: {\n }\n})\nexport class VerticalMenuItemComponent {\n public toggleByClick = input(true);\n public active = model(false);\n\n @ContentChild(VerticalMenuItemChildrenComponent, { descendants: false }) public readonly children?: VerticalMenuItemChildrenComponent;\n\n constructor(private _renderer: Renderer2, private _el: ElementRef, protected _menu: VerticalMenuComponent) {\n }\n\n @HostBinding('class.ng0-has-children')\n public get hasChildren(): boolean {\n return this.children != null;\n }\n\n @HostBinding('class.ng0-expanded')\n public get isExpanded(): boolean {\n return this.children != null && this.children.expanded();\n }\n}\n\n","<ng-content></ng-content>","import { Component, ElementRef, HostListener, Renderer2 } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VerticalMenuComponent } from './vertical-menu.component';\nimport { VerticalMenuItemComponent } from './item.component';\n\n@Component({\n selector: 'ng0-vertical-menu-item-content, ng0-vmenu-item-content, ng0-vmenu-content',\n templateUrl: './item-content.component.html',\n standalone: true,\n styles: `:host {display: flex; align-items: center; }`,\n imports: [CommonModule]\n})\nexport class VerticalMenuItemContentComponent {\n constructor(\n public menuItem: VerticalMenuItemComponent,\n private _renderer: Renderer2,\n private _el: ElementRef,\n protected _menu: VerticalMenuComponent,\n ) {\n // _renderer.addClass(_el.nativeElement, '')\n }\n\n @HostListener('click', ['$event'])\n private _onClick() {\n if (this._menu.toggleByItemClick() && this.menuItem.hasChildren) {\n this.menuItem.children?.expanded.update(x => !x);\n }\n }\n}\n","<ng-content></ng-content>\n\n@defer {\n@if(_menu.arrowDirective && menuItem.hasChildren) {\n<ng-container *ngTemplateOutlet=\"_menu.arrowDirective?.templateRef!; context: {$implicit: menuItem}\"></ng-container>\n}\n}","import { NgModule } from '@angular/core';\nimport { VerticalMenuItemComponent } from './item.component';\nimport { VerticalMenuComponent } from './vertical-menu.component';\nimport { VerticalMenuItemChildrenComponent } from './item-children.component';\nimport { VerticalMenuArrowDirective } from './item-arrow.directive';\nimport { VerticalMenuItemContentComponent } from './item-content.component';\n\nconst items = [\n VerticalMenuComponent,\n VerticalMenuItemComponent,\n VerticalMenuItemChildrenComponent,\n VerticalMenuItemContentComponent,\n VerticalMenuArrowDirective,\n];\n\n@NgModule({\n imports: items,\n exports: items\n})\nexport class VerticalMenuModule {\n}\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 +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/types.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 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.\r\n * Default is false.\r\n */\r\n caseSensitive?: boolean;\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, Subject } 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 * 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 protected loading = signal(false);\r\n\r\n constructor() {\r\n }\r\n\r\n /**\r\n * Indicates whether the data source is currently loading data.\r\n */\r\n public isLoading = this.loading.asReadonly();\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","import { catchError, 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<T=any> = (request: DataRequest) => Observable<DataResult<T>>;\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.loading.set(true);\r\n\r\n return this.loader(request).pipe(\r\n catchError(err => {\r\n this.loading.set(false);\r\n throw err;\r\n }),\r\n tap(res => {\r\n this.loading.set(false);\r\n })\r\n )\r\n }\r\n}\r\n","import { ArrayDataSource } from \"./array-data-source\";\r\nimport { AsyncDataSource, DataLoader } from \"./async-data-source\";\r\nimport { DataSource } from \"./data-source\";\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> = Array<any> | DataLoader<T> | DataSource<T> | undefined | null;\r\n\r\n\r\n/**\r\n * Converts a data source like an array, function, or DataSource into a DataSource instance.\r\n * @param source The data source to convert.\r\n * @returns A DataSource instance.\r\n */\r\nexport function convertToDataSource<T>(source: DataSourceLike): DataSource<T> {\r\n if (Array.isArray(source)) {\r\n return new ArrayDataSource(source);\r\n } else if (typeof source == 'function') {\r\n return new AsyncDataSource(source);\r\n } else if (source instanceof DataSource) {\r\n return source;\r\n } else if (source === undefined || source === null) {\r\n return new ArrayDataSource([]);\r\n } else {\r\n throw new Error('Invalid source parameter.');\r\n }\r\n}\r\n\r\n/**\r\n * StandardFilterOperators is an enumeration of standard filter operators\r\n * that can be used in data requests to filter data.\r\n * It includes operators like Contains, StartsWith, EndsWith, and Equals.\r\n */\r\nexport enum StandardFilterOperators {\r\n /**\r\n * A filter that matches items that contain the specified value.\r\n */\r\n Contains = 'contains',\r\n\r\n /**\r\n * A filter that matches items that start with the specified value.\r\n */\r\n StartsWith = 'startsWith',\r\n\r\n /**\r\n * A filter that matches items that end with the specified value.\r\n */\r\n EndsWith = 'endsWith',\r\n\r\n /**\r\n * A filter that matches items that are equal to the specified value.\r\n */\r\n Equals = 'equals',\r\n\r\n /**\r\n * A filter that matches items that are not equal to the specified value.\r\n */\r\n NotEquals = 'notEquals',\r\n\r\n /**\r\n * A filter that matches items that are greater than the specified value.\r\n */\r\n GreaterThan = 'greaterThan',\r\n\r\n /**\r\n * A filter that matches items that are greater than or equal to the specified value.\r\n */\r\n GreaterThanOrEqual = 'greaterThanOrEqual',\r\n\r\n /**\r\n * A filter that matches items that are less than the specified value.\r\n */\r\n LessThan = 'lessThan',\r\n\r\n /**\r\n * A filter that matches items that are less than or equal to the specified value.\r\n */\r\n LessThanOrEqual = 'lessThanOrEqual',\r\n\r\n \r\n}","import { delay, of, Subject, tap } from \"rxjs\";\r\nimport { DataRequest, DataRequestFilter } from \"./data-request\";\r\nimport { DataResult } from \"./data-result\";\r\nimport { DataSource } from \"./data-source\";\r\nimport { StandardFilterOperators } from \"./types\";\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 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 items: Array<any>;\r\n\r\n if (request.page) {\r\n let startItemIndex = (request.page.zeroBased ? request.page.index : request.page.index - 1) * request.page.size;\r\n items = this.items.slice(startItemIndex, startItemIndex + request.page.size);\r\n } else {\r\n items = [...this.items];\r\n }\r\n\r\n if (Array.isArray(request.filters) && request.filters.length > 0) {\r\n // Apply filters\r\n\r\n request.filters.forEach(filter => {\r\n let filterFunction = getFilterFunction(filter);\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n let value = filter.field ? item[filter.field] : item;\r\n if (!filterFunction(value, filter.value)) {\r\n items.splice(i, 1);\r\n i--; // Adjust index after removal\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (request.sort) {\r\n // Apply sorting\r\n }\r\n\r\n let result = new DataResult(items, this.items.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(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\r\nfunction getFilterFunction(filter: DataRequestFilter): (item: any, filter: any) => boolean {\r\n let operator = filter.operator || StandardFilterOperators.Contains;\r\n let caseSensitive = filter.caseSensitive || false;\r\n\r\n if(filter.value === undefined || filter.value === null) {\r\n return (item: any) => true; // No filter applied\r\n }\r\n\r\n switch (filter.operator) {\r\n case StandardFilterOperators.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 StandardFilterOperators.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 StandardFilterOperators.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 StandardFilterOperators.Equals:\r\n if (typeof filter.value === 'string') {\r\n return caseSensitive ?\r\n (item: string, filter: string) => item === filter :\r\n (item: string, filter: string) => item.toLowerCase() === filter.toLowerCase();\r\n } else {\r\n return (item: any, filter: any) => item === filter.value;\r\n }\r\n\r\n default:\r\n throw new Error(`filter operator: ${operator} is not implemented in ArrayDataSource.`);\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/async-data-source.ts","../../../projects/ng0/data/types.ts","../../../projects/ng0/data/array-data-source.ts","../../../projects/ng0/data/data-result-operator.ts","../../../projects/ng0/data/bootkit-ng0-data.ts"],"sourcesContent":["/**\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.\n * Default is false.\n */\n caseSensitive?: boolean;\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, Subject } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { signal } from \"@angular/core\";\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 protected loading = signal(false);\n\n constructor() {\n }\n\n /**\n * Indicates whether the data source is currently loading data.\n */\n public isLoading = this.loading.asReadonly();\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","import { catchError, Observable, tap } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { DataSource } from \"./data-source\";\n\n/**\n * DataLoader is a function that takes a DataRequest and returns an Observable of DataResult.\n * It is used by AsyncDataSource to load data asynchronously.\n */\nexport type DataLoader<T=any> = (request: DataRequest) => Observable<DataResult<T>>;\n\n\n/**\n * AsyncDataSource 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 AsyncDataSource extends DataSource {\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.loading.set(true);\n\n return this.loader(request).pipe(\n catchError(err => {\n this.loading.set(false);\n throw err;\n }),\n tap(res => {\n this.loading.set(false);\n })\n )\n }\n}\n","import { ArrayDataSource } from \"./array-data-source\";\nimport { AsyncDataSource, DataLoader } from \"./async-data-source\";\nimport { DataSource } from \"./data-source\";\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> = Array<any> | DataLoader<T> | DataSource<T> | undefined | null;\n\n\n/**\n * Converts a data source like an array, function, or DataSource into a DataSource instance.\n * @param source The data source to convert.\n * @returns A DataSource instance.\n */\nexport function convertToDataSource<T>(source: DataSourceLike): DataSource<T> {\n if (Array.isArray(source)) {\n return new ArrayDataSource(source);\n } else if (typeof source == 'function') {\n return new AsyncDataSource(source);\n } else if (source instanceof DataSource) {\n return source;\n } else if (source === undefined || source === null) {\n return new ArrayDataSource([]);\n } else {\n throw new Error('Invalid source parameter.');\n }\n}\n\n/**\n * StandardFilterOperators is an enumeration of standard filter operators\n * that can be used in data requests to filter data.\n * It includes operators like Contains, StartsWith, EndsWith, and Equals.\n */\nexport enum StandardFilterOperators {\n /**\n * A filter that matches items that contain the specified value.\n */\n Contains = 'contains',\n\n /**\n * A filter that matches items that start with the specified value.\n */\n StartsWith = 'startsWith',\n\n /**\n * A filter that matches items that end with the specified value.\n */\n EndsWith = 'endsWith',\n\n /**\n * A filter that matches items that are equal to the specified value.\n */\n Equals = 'equals',\n\n /**\n * A filter that matches items that are not equal to the specified value.\n */\n NotEquals = 'notEquals',\n\n /**\n * A filter that matches items that are greater than the specified value.\n */\n GreaterThan = 'greaterThan',\n\n /**\n * A filter that matches items that are greater than or equal to the specified value.\n */\n GreaterThanOrEqual = 'greaterThanOrEqual',\n\n /**\n * A filter that matches items that are less than the specified value.\n */\n LessThan = 'lessThan',\n\n /**\n * A filter that matches items that are less than or equal to the specified value.\n */\n LessThanOrEqual = 'lessThanOrEqual',\n\n \n}","import { delay, of, Subject, tap } from \"rxjs\";\nimport { DataRequest, DataRequestFilter } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { DataSource } from \"./data-source\";\nimport { StandardFilterOperators } from \"./types\";\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 ArrayDataSource extends DataSource {\n private _insertSubject = new Subject<{ items: any[] }>();\n private _updateSubject = new Subject<{ item: any, index: number }>();\n private _removeSubject = new Subject<{ item: any, index: number }>();\n\n public readonly inserted = this._insertSubject.asObservable();\n public readonly removed = this._removeSubject.asObservable();\n public readonly updated = this._updateSubject.asObservable();\n\n constructor(private items: any[]) {\n super();\n }\n\n load(request: DataRequest) {\n let items: Array<any>;\n\n if (request.page) {\n let startItemIndex = (request.page.zeroBased ? request.page.index : request.page.index - 1) * request.page.size;\n items = this.items.slice(startItemIndex, startItemIndex + request.page.size);\n } else {\n items = [...this.items];\n }\n\n if (Array.isArray(request.filters) && request.filters.length > 0) {\n // Apply filters\n\n request.filters.forEach(filter => {\n let filterFunction = getFilterFunction(filter);\n\n for (let i = 0; i < items.length; i++) {\n let item = items[i];\n let value = filter.field ? item[filter.field] : item;\n if (!filterFunction(value, filter.value)) {\n items.splice(i, 1);\n i--; // Adjust index after removal\n }\n }\n });\n }\n\n if (request.sort) {\n // Apply sorting\n }\n\n let result = new DataResult(items, this.items.length);\n\n // this._loading = true;\n // return of(result).pipe(\n // delay(5000),\n // tap(x => this._loading = false)\n // );\n return of(result);\n }\n\n public remove(item: any) {\n let index = this.items!.findIndex(x => x === item);\n if (index > -1) {\n this.items.splice(index, 1);\n this._removeSubject.next({ item, index });\n }\n }\n\n public insert(...items: any[]) {\n this.items.push(items);\n this._insertSubject.next({ items });\n }\n\n // public set(items: any[]) {\n // this.items = items;\n // // this._removeSubject.next(0);\n // }\n}\n\nfunction getFilterFunction(filter: DataRequestFilter): (item: any, filter: any) => boolean {\n let operator = filter.operator || StandardFilterOperators.Contains;\n let caseSensitive = filter.caseSensitive || false;\n\n if(filter.value === undefined || filter.value === null) {\n return (item: any) => true; // No filter applied\n }\n\n switch (filter.operator) {\n case StandardFilterOperators.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 StandardFilterOperators.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 StandardFilterOperators.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 StandardFilterOperators.Equals:\n if (typeof filter.value === 'string') {\n return caseSensitive ?\n (item: string, filter: string) => item === filter :\n (item: string, filter: string) => item.toLowerCase() === filter.toLowerCase();\n } else {\n return (item: any, filter: any) => item === filter.value;\n }\n\n default:\n throw new Error(`filter operator: ${operator} is not implemented in ArrayDataSource.`);\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 +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;;AAG9B;;;;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;;;;AC9C5E;;AAEG;;;;"}
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;\n\n/**\n * Represents a time span in months, days, hours, minutes, seconds, and milliseconds.\n * Provides methods to create a TimeSpan from a total number of milliseconds.\n * @example\n * const span = TimeSpan.fromMilliseconds(123456789);\n * console.log(span); // TimeSpan { months: 0, days: 1, hours: 10, minutes: 17, seconds: 36, milliseconds: 789 }\n */\nexport class TimeSpan {\n /** Milliseconds per second */\n public static readonly msPerSecond = 1000;\n\n /** Milliseconds per minute */\n public static readonly msPerMinute = this.msPerSecond * 60;\n\n /** Milliseconds per hour */\n public static readonly msPerHour = this.msPerMinute * 60;\n\n /** Milliseconds per day */\n public static readonly msPerDay = this.msPerHour * 24;\n\n /** Milliseconds per month */\n public static readonly msPerMonth = this.msPerDay * 30;\n\n constructor(\n public readonly months: number = 0,\n public readonly days: number = 0,\n public readonly hours: number = 0,\n public readonly minutes: number = 0,\n public readonly seconds: number = 0,\n public readonly milliseconds: number = 0) {\n }\n\n /**\n * Creates a TimeSpan from a total number of milliseconds.\n * @param ms The total number of milliseconds.\n * @returns A TimeSpan representing the equivalent time span.\n */\n static fromMilliseconds(ms: number): TimeSpan {\n const months = f(ms / TimeSpan.msPerMonth),\n days = f((ms % TimeSpan.msPerMonth) / TimeSpan.msPerDay),\n hours = f((ms % TimeSpan.msPerDay) / TimeSpan.msPerHour),\n minutes = f((ms % TimeSpan.msPerHour) / TimeSpan.msPerMinute),\n seconds = f((ms % TimeSpan.msPerMinute) / TimeSpan.msPerSecond),\n milliseconds = (ms % TimeSpan.msPerSecond);\n return new TimeSpan(months, days, hours, minutes, seconds, milliseconds);\n }\n}\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;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,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":["\n/**\n * Saves a Blob as a file in the user's browser.\n * This function is only available in browsers that support the Blob API.\n * @param blob \n * @param fileName \n * \n */\nexport function saveBlob(blob: Blob, fileName: string): void {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n a.remove();\n window.URL.revokeObjectURL(url);\n}\n\n/**\n * Triggers downloading a file from a given URL.\n * @param url \n * @param fileName \n */\nexport function downloadFile(url: string, fileName: string): void {\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n a.remove();\n}\n\n/**\n * Converts a File object to a Base64 string.\n * @param file The File object to convert.\n * @return A Promise that resolves to the Base64 string representation of the file.\n */\nexport function convertFileToBase64(file: File): Promise<string | ArrayBuffer | null> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n });\n}\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;;;;"}
@@ -24,12 +24,12 @@ class EqualWithValidatorDirective {
24
24
  validate(control) {
25
25
  return equalWithValidator(this.targetValue, this.inequalityMessage)(control);
26
26
  }
27
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: EqualWithValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.6", type: EqualWithValidatorDirective, isStandalone: true, selector: "[ng0EqualWith]", inputs: { targetValue: ["ng0EqualWith", "targetValue"], inequalityMessage: "inequalityMessage" }, providers: [
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: EqualWithValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.1", type: EqualWithValidatorDirective, isStandalone: true, selector: "[ng0EqualWith]", inputs: { targetValue: ["ng0EqualWith", "targetValue"], inequalityMessage: "inequalityMessage" }, providers: [
29
29
  { provide: NG_VALIDATORS, useExisting: EqualWithValidatorDirective, multi: true }
30
30
  ], exportAs: ["ng0EqualWith"], ngImport: i0 });
31
31
  }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: EqualWithValidatorDirective, decorators: [{
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: EqualWithValidatorDirective, decorators: [{
33
33
  type: Directive,
34
34
  args: [{
35
35
  selector: '[ng0EqualWith]',
@@ -69,10 +69,10 @@ class UrlValidatorDirective {
69
69
  validate(control) {
70
70
  return urlValidator()(control);
71
71
  }
72
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: UrlValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
73
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.6", type: UrlValidatorDirective, isStandalone: true, selector: "input[ng0Url]", inputs: { iscUrl: "iscUrl" }, providers: [{ provide: NG_VALIDATORS, useExisting: UrlValidatorDirective, multi: true }], exportAs: ["ng0Url"], ngImport: i0 });
72
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: UrlValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
73
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.1", type: UrlValidatorDirective, isStandalone: true, selector: "input[ng0Url]", inputs: { iscUrl: "iscUrl" }, providers: [{ provide: NG_VALIDATORS, useExisting: UrlValidatorDirective, multi: true }], exportAs: ["ng0Url"], ngImport: i0 });
74
74
  }
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: UrlValidatorDirective, decorators: [{
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: UrlValidatorDirective, decorators: [{
76
76
  type: Directive,
77
77
  args: [{
78
78
  selector: 'input[ng0Url]',
@@ -90,12 +90,12 @@ class CustomValidatorDirective {
90
90
  validate(control) {
91
91
  return this.validator()(control);
92
92
  }
93
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: CustomValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
94
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.6", type: CustomValidatorDirective, isStandalone: true, selector: "[ng0CustomValidator]", inputs: { validator: { classPropertyName: "validator", publicName: "ng0CustomValidator", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
93
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: CustomValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
94
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.1", type: CustomValidatorDirective, isStandalone: true, selector: "[ng0CustomValidator]", inputs: { validator: { classPropertyName: "validator", publicName: "ng0CustomValidator", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
95
95
  { provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true }
96
96
  ], exportAs: ["ng0CustomValidator"], ngImport: i0 });
97
97
  }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: CustomValidatorDirective, decorators: [{
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: CustomValidatorDirective, decorators: [{
99
99
  type: Directive,
100
100
  args: [{
101
101
  selector: '[ng0CustomValidator]',
@@ -116,8 +116,8 @@ const items = [
116
116
  CustomValidatorDirective,
117
117
  ];
118
118
  class ValidationModule {
119
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ValidationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
120
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.6", ngImport: i0, type: ValidationModule, imports: [
119
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ValidationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
120
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.2.1", ngImport: i0, type: ValidationModule, imports: [
121
121
  // ErrorDirective,
122
122
  // FirstErrorDirective,
123
123
  // Validators
@@ -130,9 +130,9 @@ class ValidationModule {
130
130
  EqualWithValidatorDirective,
131
131
  UrlValidatorDirective,
132
132
  CustomValidatorDirective] });
133
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ValidationModule });
133
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ValidationModule });
134
134
  }
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ValidationModule, decorators: [{
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ValidationModule, decorators: [{
136
136
  type: NgModule,
137
137
  args: [{
138
138
  imports: items,
@@ -167,10 +167,10 @@ class FocusDirective {
167
167
  }
168
168
  }
169
169
  }
170
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: FocusDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
171
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.6", type: FocusDirective, isStandalone: true, selector: "[ng0Focus]", inputs: { focusOnLoad: "focusOnLoad", focusWhen: "focusWhen" }, exportAs: ["ng0Focus"], usesOnChanges: true, ngImport: i0 });
170
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: FocusDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
171
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.1", type: FocusDirective, isStandalone: true, selector: "[ng0Focus]", inputs: { focusOnLoad: "focusOnLoad", focusWhen: "focusWhen" }, exportAs: ["ng0Focus"], usesOnChanges: true, ngImport: i0 });
172
172
  }
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: FocusDirective, decorators: [{
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: FocusDirective, decorators: [{
174
174
  type: Directive,
175
175
  args: [{
176
176
  selector: '[ng0Focus]',
@@ -377,8 +377,8 @@ class NumberDirective {
377
377
  }
378
378
  return false;
379
379
  }
380
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NumberDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
381
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.6", type: NumberDirective, isStandalone: true, selector: "[ng0Number]", inputs: { minFractionDigits: { classPropertyName: "minFractionDigits", publicName: "minFractionDigits", isSignal: true, isRequired: false, transformFunction: null }, maxFractionDigits: { classPropertyName: "maxFractionDigits", publicName: "maxFractionDigits", isSignal: true, isRequired: false, transformFunction: null }, useGrouping: { classPropertyName: "useGrouping", publicName: "useGrouping", isSignal: true, isRequired: false, transformFunction: null }, numberType: { classPropertyName: "numberType", publicName: "numberType", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeyDown($event)", "input": "onInput($event.target.value)", "blur": "onBlur()", "paste": "onPaste($event)" } }, providers: [
380
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: NumberDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
381
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.1", type: NumberDirective, isStandalone: true, selector: "[ng0Number]", inputs: { minFractionDigits: { classPropertyName: "minFractionDigits", publicName: "minFractionDigits", isSignal: true, isRequired: false, transformFunction: null }, maxFractionDigits: { classPropertyName: "maxFractionDigits", publicName: "maxFractionDigits", isSignal: true, isRequired: false, transformFunction: null }, useGrouping: { classPropertyName: "useGrouping", publicName: "useGrouping", isSignal: true, isRequired: false, transformFunction: null }, numberType: { classPropertyName: "numberType", publicName: "numberType", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeyDown($event)", "input": "onInput($event.target.value)", "blur": "onBlur()", "paste": "onPaste($event)" } }, providers: [
382
382
  {
383
383
  provide: NG_VALUE_ACCESSOR,
384
384
  useExisting: forwardRef(() => NumberDirective),
@@ -386,7 +386,7 @@ class NumberDirective {
386
386
  }
387
387
  ], ngImport: i0 });
388
388
  }
389
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NumberDirective, decorators: [{
389
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: NumberDirective, decorators: [{
390
390
  type: Directive,
391
391
  args: [{
392
392
  selector: '[ng0Number]',
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-form.mjs","sources":["../../../projects/ng0/form/validation/validators/equal-with/equal-with-validator.ts","../../../projects/ng0/form/validation/validators/equal-with/equal-with.directive.ts","../../../projects/ng0/form/validation/validators/url/url-validator.ts","../../../projects/ng0/form/validation/validators/url/url-validator.directive.ts","../../../projects/ng0/form/validation/validators/custom/custom-validator.directive.ts","../../../projects/ng0/form/validation/validation.module.ts","../../../projects/ng0/form/focus.directive.ts","../../../projects/ng0/form/number.directive.ts","../../../projects/ng0/form/bootkit-ng0-form.ts"],"sourcesContent":["import { AbstractControl, ValidatorFn } from '@angular/forms';\r\n\r\nexport function equalWithValidator(targetValue?: string, inequalityMessage?: string): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const isValid = control.value === targetValue;\r\n\r\n return isValid ? null :\r\n {\r\n equalWith: {\r\n value: control.value,\r\n message: inequalityMessage\r\n }\r\n };\r\n };\r\n}\r\n","import { Directive, Input } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\r\nimport { equalWithValidator } from './equal-with-validator';\r\n\r\n@Directive({\r\n selector: '[ng0EqualWith]',\r\n exportAs: 'ng0EqualWith',\r\n standalone: true,\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: EqualWithValidatorDirective, multi: true }\r\n ]\r\n})\r\nexport class EqualWithValidatorDirective implements Validator {\r\n @Input('ng0EqualWith') targetValue?: string;\r\n @Input() inequalityMessage?: string;\r\n\r\n constructor() {\r\n }\r\n\r\n validate(control: AbstractControl): { [key: string]: any } | null {\r\n return equalWithValidator(this.targetValue, this.inequalityMessage)(control);\r\n }\r\n}\r\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\r\nconst urlRegEx = new RegExp('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?');\r\n\r\nexport function urlValidator(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const value = (control.value as string);\r\n if (!value || urlRegEx.test(value)) {\r\n return null;\r\n } else {\r\n return {\r\n 'url': {\r\n value\r\n }\r\n };\r\n }\r\n };\r\n}","import { Directive, Input } from '@angular/core';\r\nimport { FormControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\r\nimport { urlValidator } from './url-validator';\r\n\r\n@Directive({\r\n selector: 'input[ng0Url]',\r\n exportAs: 'ng0Url',\r\n standalone: true,\r\n providers: [{ provide: NG_VALIDATORS, useExisting: UrlValidatorDirective, multi: true }]\r\n})\r\nexport class UrlValidatorDirective implements Validator {\r\n /** Directive is enabled or disabled */\r\n @Input() iscUrl?: boolean | string = true;\r\n\r\n validate(control: FormControl): ValidationErrors | null {\r\n return urlValidator()(control);\r\n }\r\n}\r\n","import { Directive, input, Input } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[ng0CustomValidator]',\r\n exportAs: 'ng0CustomValidator',\r\n standalone: true,\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true }\r\n ]\r\n})\r\nexport class CustomValidatorDirective implements Validator {\r\n validator = input.required<(value: any) => ValidationErrors | null>({alias: 'ng0CustomValidator'});\r\n\r\n constructor() { }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.validator()(control);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { EqualWithValidatorDirective } from './validators/equal-with/equal-with.directive';\r\nimport { UrlValidatorDirective } from './validators/url/url-validator.directive';\r\nimport { CustomValidatorDirective } from './validators/custom/custom-validator.directive';\r\n\r\nconst items = [\r\n // ErrorDirective,\r\n // FirstErrorDirective,\r\n\r\n // Validators\r\n EqualWithValidatorDirective,\r\n UrlValidatorDirective,\r\n CustomValidatorDirective,\r\n];\r\n\r\n@NgModule({\r\n imports: items,\r\n exports: items,\r\n})\r\nexport class ValidationModule { }\r\n","import { Directive, ElementRef, Input, OnChanges, SimpleChanges, OnInit } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[ng0Focus]',\r\n exportAs: 'ng0Focus',\r\n standalone: true\r\n})\r\nexport class FocusDirective implements OnInit, OnChanges {\r\n /** \r\n * \r\n */\r\n @Input() focusOnLoad = true;\r\n @Input() focusWhen?: boolean;\r\n private focused = false;\r\n\r\n constructor(private elementRef: ElementRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.focusOnLoad) {\r\n setTimeout(() => {\r\n this.elementRef.nativeElement.focus();\r\n });\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['focusWhen']) {\r\n if (this.focusWhen) {\r\n setTimeout(() => {\r\n this.elementRef.nativeElement.focus();\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","import { Directive, HostListener, forwardRef, ElementRef, Renderer2, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { formatNumber } from '@angular/common';\r\n\r\nconst addThousandsSeparator = (str: string) => str.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\nconst isValidNumber = (str: string) => str.trim() !== '' && !isNaN(Number(str));\r\nconst removeChar = (str: string, charToRemove: string) => str.split(charToRemove).join('');\r\n\r\nconst Keys = {\r\n backspace: 'Backspace',\r\n tab: 'Tab',\r\n arrowLeft: 'ArrowLeft',\r\n arrowRight: 'ArrowRight',\r\n delete: 'Delete',\r\n home: 'Home',\r\n end: 'End'\r\n}\r\n\r\n@Directive({\r\n selector: '[ng0Number]',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NumberDirective),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class NumberDirective implements ControlValueAccessor {\r\n /** */\r\n minFractionDigits = input<number | undefined>(3);\r\n maxFractionDigits = input<number| undefined>(10);\r\n useGrouping = input<boolean>(false);\r\n numberType = input<'decimal' | 'integer'>('integer');\r\n private onChange = (_: any) => { };\r\n private onTouched = () => { };\r\n private decimalSeparator!: string;\r\n private thousandsSeparator: string = ',';\r\n private selectionStart: number = 0;\r\n private selectionEnd: number = 0;\r\n private isCursorInsideIntegerPart: boolean = false;\r\n private decimalSeparatorPosition = -1;\r\n private value?: number;\r\n private setProperty = (prop: string, value: any) => this.renderer.setProperty(this.el.nativeElement, prop, value);\r\n\r\n constructor(\r\n private el: ElementRef<HTMLInputElement>,\r\n private renderer: Renderer2,\r\n // private locale: Locale,\r\n ) { }\r\n\r\n ngOnInit() {\r\n // Use Intl.NumberFormat to find decimal separator for locale\r\n const formatted = formatNumber(1.1, 'en', '1.1-1');\r\n this.decimalSeparator = formatted.replace(/\\d/g, '') || '.';\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.setProperty('disabled', isDisabled);\r\n }\r\n\r\n writeValue(value: any): void {\r\n var inputValue: string;\r\n\r\n if (value === undefined || value === null) {\r\n inputValue = '';\r\n this.value = undefined;\r\n } else if (typeof value === 'number') {\r\n inputValue = this.formatNumber(value);\r\n this.value = value;\r\n }\r\n else if (typeof value === 'string') {\r\n const parsedValue = this.value = Number.parseFloat(value);\r\n inputValue = this.formatNumber(parsedValue);\r\n } else {\r\n console.error('NumberDirective: Unsupported value type', value);\r\n inputValue = 'Invalid';\r\n }\r\n\r\n this.setProperty('value', inputValue);\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n private onKeyDown(event: KeyboardEvent) {\r\n this.updateCursorInfo();\r\n\r\n if (!this.isKeyAllowed(event.key)) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n const key = event.key;\r\n\r\n if (key == Keys.backspace) {\r\n if (this.selectionStart > 1 && (this.selectionStart === this.selectionEnd)) {\r\n let value = this.el.nativeElement.value;\r\n let beforeSelection = value.charAt(this.selectionStart - 1);\r\n if (beforeSelection === ',') {\r\n // If the character before the cursor is a comma, we need to skip it\r\n this.setProperty('selectionStart', this.selectionStart - 2);\r\n }\r\n }\r\n }\r\n }\r\n\r\n @HostListener('input', ['$event.target.value'])\r\n private onInput(s: string) {\r\n if (s === '') {\r\n this.value = undefined;\r\n this.onChange(undefined);\r\n return;\r\n }\r\n\r\n this.updateCursorInfo();\r\n\r\n if (this.isCursorInsideIntegerPart) {\r\n this.formatIntegerPart(s);\r\n }\r\n\r\n var number = Number(removeChar(this.el.nativeElement.value, this.thousandsSeparator));\r\n this.value = isNaN(number) ? undefined : number;\r\n this.onChange(this.value);\r\n }\r\n\r\n private formatIntegerPart(value: string) {\r\n // Format the input value\r\n const integerPart = value.split(this.decimalSeparator)[0];\r\n const decimalPart = value.split(this.decimalSeparator)[1];\r\n\r\n if (integerPart.length <= 3) {\r\n return;\r\n }\r\n\r\n let normalizedIntegerPart = removeChar(integerPart, this.thousandsSeparator); // Remove commas\r\n\r\n let formattedValue = addThousandsSeparator(normalizedIntegerPart);\r\n if (decimalPart !== undefined) {\r\n formattedValue += this.decimalSeparator + decimalPart;\r\n }\r\n\r\n this.setProperty('value', formattedValue);\r\n let newSelectionStart: number;\r\n\r\n // fix the cursor position after formatting\r\n if (value.length == 1) {\r\n newSelectionStart = 1;\r\n } else {\r\n const newValueLength = formattedValue.length;\r\n const cursorJump = newValueLength - value.length;\r\n newSelectionStart = Math.max(0, this.selectionStart + cursorJump);\r\n }\r\n\r\n this.setProperty('selectionStart', newSelectionStart);\r\n this.setProperty('selectionEnd', newSelectionStart);\r\n\r\n // return formattedValue;\r\n }\r\n\r\n @HostListener('blur')\r\n private onBlur() {\r\n if (this.value !== undefined) {\r\n let formattedValue = this.formatNumber(this.value);\r\n this.setProperty('value', formattedValue);\r\n }\r\n\r\n this.onTouched();\r\n }\r\n\r\n @HostListener('paste', ['$event'])\r\n private onPaste(event: ClipboardEvent) {\r\n // event.\r\n // value = value.trim();\r\n }\r\n\r\n private updateCursorInfo() {\r\n let value = this.el.nativeElement.value;\r\n this.selectionStart = this.el.nativeElement.selectionStart || 0;\r\n this.selectionEnd = this.el.nativeElement.selectionEnd || 0;\r\n\r\n this.decimalSeparatorPosition = value.indexOf(this.decimalSeparator);\r\n if (this.decimalSeparatorPosition > -1) {\r\n this.isCursorInsideIntegerPart = (this.selectionStart <= this.decimalSeparatorPosition);\r\n } else {\r\n this.isCursorInsideIntegerPart = true;\r\n }\r\n }\r\n\r\n private formatNumber(n: number): string {\r\n var isInteger = this.numberType() == 'integer';\r\n return new Intl.NumberFormat('en-US', {\r\n useGrouping: this.useGrouping(),\r\n minimumFractionDigits: isInteger ? 0 : this.minFractionDigits(),\r\n maximumFractionDigits: isInteger ? 0 : this.maxFractionDigits(),\r\n style: 'decimal',\r\n }).format(n);\r\n }\r\n\r\n private isKeyAllowed(key: string) {\r\n const allowedKeys = [Keys.backspace, Keys.tab, Keys.arrowLeft, Keys.arrowRight, Keys.delete, Keys.home, Keys.end];\r\n const input = this.el.nativeElement;\r\n const value = input.value;\r\n\r\n if (allowedKeys.includes(key)) {\r\n return true; // allow control/navigation keys\r\n }\r\n\r\n // Allow one leading minus\r\n if (key === '-') {\r\n return (input.selectionStart === 0 || input.selectionEnd === 0) && value.charAt(0) !== '-';\r\n }\r\n\r\n // Allow one dot for decimal\r\n if (key === this.decimalSeparator) {\r\n return (this.numberType() == 'decimal') &&\r\n (!value.includes(this.decimalSeparator)) &&\r\n (this.selectionStart == input.value.length);\r\n }\r\n\r\n // Allow numbers only\r\n if (/^\\d$/.test(key)) {\r\n if (this.isCursorInsideIntegerPart) {\r\n return true;\r\n } else {\r\n var decimalPart = value.split(this.decimalSeparator)[1];\r\n var maxFractionDigits = this.maxFractionDigits();\r\n if (maxFractionDigits != undefined && decimalPart.length < maxFractionDigits) {\r\n return true;\r\n } else {\r\n return this.selectionStart !== this.selectionEnd; // allow a new digit if a substring is selected\r\n }\r\n }\r\n }\r\n\r\n return false;\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-form.mjs","sources":["../../../projects/ng0/form/validation/validators/equal-with/equal-with-validator.ts","../../../projects/ng0/form/validation/validators/equal-with/equal-with.directive.ts","../../../projects/ng0/form/validation/validators/url/url-validator.ts","../../../projects/ng0/form/validation/validators/url/url-validator.directive.ts","../../../projects/ng0/form/validation/validators/custom/custom-validator.directive.ts","../../../projects/ng0/form/validation/validation.module.ts","../../../projects/ng0/form/focus.directive.ts","../../../projects/ng0/form/number.directive.ts","../../../projects/ng0/form/bootkit-ng0-form.ts"],"sourcesContent":["import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function equalWithValidator(targetValue?: string, inequalityMessage?: string): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n const isValid = control.value === targetValue;\n\n return isValid ? null :\n {\n equalWith: {\n value: control.value,\n message: inequalityMessage\n }\n };\n };\n}\n","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\nimport { equalWithValidator } from './equal-with-validator';\n\n@Directive({\n selector: '[ng0EqualWith]',\n exportAs: 'ng0EqualWith',\n standalone: true,\n providers: [\n { provide: NG_VALIDATORS, useExisting: EqualWithValidatorDirective, multi: true }\n ]\n})\nexport class EqualWithValidatorDirective implements Validator {\n @Input('ng0EqualWith') targetValue?: string;\n @Input() inequalityMessage?: string;\n\n constructor() {\n }\n\n validate(control: AbstractControl): { [key: string]: any } | null {\n return equalWithValidator(this.targetValue, this.inequalityMessage)(control);\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\nconst urlRegEx = new RegExp('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?');\n\nexport function urlValidator(): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } | null => {\n const value = (control.value as string);\n if (!value || urlRegEx.test(value)) {\n return null;\n } else {\n return {\n 'url': {\n value\n }\n };\n }\n };\n}","import { Directive, Input } from '@angular/core';\nimport { FormControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { urlValidator } from './url-validator';\n\n@Directive({\n selector: 'input[ng0Url]',\n exportAs: 'ng0Url',\n standalone: true,\n providers: [{ provide: NG_VALIDATORS, useExisting: UrlValidatorDirective, multi: true }]\n})\nexport class UrlValidatorDirective implements Validator {\n /** Directive is enabled or disabled */\n @Input() iscUrl?: boolean | string = true;\n\n validate(control: FormControl): ValidationErrors | null {\n return urlValidator()(control);\n }\n}\n","import { Directive, input, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\n@Directive({\n selector: '[ng0CustomValidator]',\n exportAs: 'ng0CustomValidator',\n standalone: true,\n providers: [\n { provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true }\n ]\n})\nexport class CustomValidatorDirective implements Validator {\n validator = input.required<(value: any) => ValidationErrors | null>({alias: 'ng0CustomValidator'});\n\n constructor() { }\n\n validate(control: AbstractControl): ValidationErrors | null {\n return this.validator()(control);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { EqualWithValidatorDirective } from './validators/equal-with/equal-with.directive';\nimport { UrlValidatorDirective } from './validators/url/url-validator.directive';\nimport { CustomValidatorDirective } from './validators/custom/custom-validator.directive';\n\nconst items = [\n // ErrorDirective,\n // FirstErrorDirective,\n\n // Validators\n EqualWithValidatorDirective,\n UrlValidatorDirective,\n CustomValidatorDirective,\n];\n\n@NgModule({\n imports: items,\n exports: items,\n})\nexport class ValidationModule { }\n","import { Directive, ElementRef, Input, OnChanges, SimpleChanges, OnInit } from '@angular/core';\n\n@Directive({\n selector: '[ng0Focus]',\n exportAs: 'ng0Focus',\n standalone: true\n})\nexport class FocusDirective implements OnInit, OnChanges {\n /** \n * \n */\n @Input() focusOnLoad = true;\n @Input() focusWhen?: boolean;\n private focused = false;\n\n constructor(private elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n if (this.focusOnLoad) {\n setTimeout(() => {\n this.elementRef.nativeElement.focus();\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['focusWhen']) {\n if (this.focusWhen) {\n setTimeout(() => {\n this.elementRef.nativeElement.focus();\n });\n }\n }\n }\n}\n","import { Directive, HostListener, forwardRef, ElementRef, Renderer2, input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { formatNumber } from '@angular/common';\n\nconst addThousandsSeparator = (str: string) => str.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nconst isValidNumber = (str: string) => str.trim() !== '' && !isNaN(Number(str));\nconst removeChar = (str: string, charToRemove: string) => str.split(charToRemove).join('');\n\nconst Keys = {\n backspace: 'Backspace',\n tab: 'Tab',\n arrowLeft: 'ArrowLeft',\n arrowRight: 'ArrowRight',\n delete: 'Delete',\n home: 'Home',\n end: 'End'\n}\n\n@Directive({\n selector: '[ng0Number]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberDirective),\n multi: true\n }\n ]\n})\nexport class NumberDirective implements ControlValueAccessor {\n /** */\n minFractionDigits = input<number | undefined>(3);\n maxFractionDigits = input<number| undefined>(10);\n useGrouping = input<boolean>(false);\n numberType = input<'decimal' | 'integer'>('integer');\n private onChange = (_: any) => { };\n private onTouched = () => { };\n private decimalSeparator!: string;\n private thousandsSeparator: string = ',';\n private selectionStart: number = 0;\n private selectionEnd: number = 0;\n private isCursorInsideIntegerPart: boolean = false;\n private decimalSeparatorPosition = -1;\n private value?: number;\n private setProperty = (prop: string, value: any) => this.renderer.setProperty(this.el.nativeElement, prop, value);\n\n constructor(\n private el: ElementRef<HTMLInputElement>,\n private renderer: Renderer2,\n // private locale: Locale,\n ) { }\n\n ngOnInit() {\n // Use Intl.NumberFormat to find decimal separator for locale\n const formatted = formatNumber(1.1, 'en', '1.1-1');\n this.decimalSeparator = formatted.replace(/\\d/g, '') || '.';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.setProperty('disabled', isDisabled);\n }\n\n writeValue(value: any): void {\n var inputValue: string;\n\n if (value === undefined || value === null) {\n inputValue = '';\n this.value = undefined;\n } else if (typeof value === 'number') {\n inputValue = this.formatNumber(value);\n this.value = value;\n }\n else if (typeof value === 'string') {\n const parsedValue = this.value = Number.parseFloat(value);\n inputValue = this.formatNumber(parsedValue);\n } else {\n console.error('NumberDirective: Unsupported value type', value);\n inputValue = 'Invalid';\n }\n\n this.setProperty('value', inputValue);\n }\n\n @HostListener('keydown', ['$event'])\n private onKeyDown(event: KeyboardEvent) {\n this.updateCursorInfo();\n\n if (!this.isKeyAllowed(event.key)) {\n event.preventDefault();\n return;\n }\n\n const key = event.key;\n\n if (key == Keys.backspace) {\n if (this.selectionStart > 1 && (this.selectionStart === this.selectionEnd)) {\n let value = this.el.nativeElement.value;\n let beforeSelection = value.charAt(this.selectionStart - 1);\n if (beforeSelection === ',') {\n // If the character before the cursor is a comma, we need to skip it\n this.setProperty('selectionStart', this.selectionStart - 2);\n }\n }\n }\n }\n\n @HostListener('input', ['$event.target.value'])\n private onInput(s: string) {\n if (s === '') {\n this.value = undefined;\n this.onChange(undefined);\n return;\n }\n\n this.updateCursorInfo();\n\n if (this.isCursorInsideIntegerPart) {\n this.formatIntegerPart(s);\n }\n\n var number = Number(removeChar(this.el.nativeElement.value, this.thousandsSeparator));\n this.value = isNaN(number) ? undefined : number;\n this.onChange(this.value);\n }\n\n private formatIntegerPart(value: string) {\n // Format the input value\n const integerPart = value.split(this.decimalSeparator)[0];\n const decimalPart = value.split(this.decimalSeparator)[1];\n\n if (integerPart.length <= 3) {\n return;\n }\n\n let normalizedIntegerPart = removeChar(integerPart, this.thousandsSeparator); // Remove commas\n\n let formattedValue = addThousandsSeparator(normalizedIntegerPart);\n if (decimalPart !== undefined) {\n formattedValue += this.decimalSeparator + decimalPart;\n }\n\n this.setProperty('value', formattedValue);\n let newSelectionStart: number;\n\n // fix the cursor position after formatting\n if (value.length == 1) {\n newSelectionStart = 1;\n } else {\n const newValueLength = formattedValue.length;\n const cursorJump = newValueLength - value.length;\n newSelectionStart = Math.max(0, this.selectionStart + cursorJump);\n }\n\n this.setProperty('selectionStart', newSelectionStart);\n this.setProperty('selectionEnd', newSelectionStart);\n\n // return formattedValue;\n }\n\n @HostListener('blur')\n private onBlur() {\n if (this.value !== undefined) {\n let formattedValue = this.formatNumber(this.value);\n this.setProperty('value', formattedValue);\n }\n\n this.onTouched();\n }\n\n @HostListener('paste', ['$event'])\n private onPaste(event: ClipboardEvent) {\n // event.\n // value = value.trim();\n }\n\n private updateCursorInfo() {\n let value = this.el.nativeElement.value;\n this.selectionStart = this.el.nativeElement.selectionStart || 0;\n this.selectionEnd = this.el.nativeElement.selectionEnd || 0;\n\n this.decimalSeparatorPosition = value.indexOf(this.decimalSeparator);\n if (this.decimalSeparatorPosition > -1) {\n this.isCursorInsideIntegerPart = (this.selectionStart <= this.decimalSeparatorPosition);\n } else {\n this.isCursorInsideIntegerPart = true;\n }\n }\n\n private formatNumber(n: number): string {\n var isInteger = this.numberType() == 'integer';\n return new Intl.NumberFormat('en-US', {\n useGrouping: this.useGrouping(),\n minimumFractionDigits: isInteger ? 0 : this.minFractionDigits(),\n maximumFractionDigits: isInteger ? 0 : this.maxFractionDigits(),\n style: 'decimal',\n }).format(n);\n }\n\n private isKeyAllowed(key: string) {\n const allowedKeys = [Keys.backspace, Keys.tab, Keys.arrowLeft, Keys.arrowRight, Keys.delete, Keys.home, Keys.end];\n const input = this.el.nativeElement;\n const value = input.value;\n\n if (allowedKeys.includes(key)) {\n return true; // allow control/navigation keys\n }\n\n // Allow one leading minus\n if (key === '-') {\n return (input.selectionStart === 0 || input.selectionEnd === 0) && value.charAt(0) !== '-';\n }\n\n // Allow one dot for decimal\n if (key === this.decimalSeparator) {\n return (this.numberType() == 'decimal') &&\n (!value.includes(this.decimalSeparator)) &&\n (this.selectionStart == input.value.length);\n }\n\n // Allow numbers only\n if (/^\\d$/.test(key)) {\n if (this.isCursorInsideIntegerPart) {\n return true;\n } else {\n var decimalPart = value.split(this.decimalSeparator)[1];\n var maxFractionDigits = this.maxFractionDigits();\n if (maxFractionDigits != undefined && decimalPart.length < maxFractionDigits) {\n return true;\n } else {\n return this.selectionStart !== this.selectionEnd; // allow a new digit if a substring is selected\n }\n }\n }\n\n return false;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -196,10 +196,10 @@ class HttpService {
196
196
  }
197
197
  return { found: false, data: undefined };
198
198
  }
199
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i0.TransferState }, { token: i0.Injector }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
200
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: HttpService });
199
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i0.TransferState }, { token: i0.Injector }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
200
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: HttpService });
201
201
  }
202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: HttpService, decorators: [{
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: HttpService, decorators: [{
203
203
  type: Injectable
204
204
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i0.TransferState }, { type: i0.Injector }, { type: undefined, decorators: [{
205
205
  type: Inject,
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-http.mjs","sources":["../../../projects/ng0/http/provide.ts","../../../projects/ng0/http/http.service.ts","../../../projects/ng0/http/types.ts","../../../projects/ng0/http/data-request-resolvers/http-data-request-resolver-1.ts","../../../projects/ng0/http/bootkit-ng0-http.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Provider } from \"@angular/core\";\r\nimport { HttpDataRequestResolver } from \"./types\";\r\nimport { HttpService } from \"./http.service\";\r\n\r\nexport const HTTP_SERVICE_CONFIG = new InjectionToken<HttpServiceConfig>('HttpServiceConfig');\r\n\r\n/**\r\n * Configuration for the HttpService.\r\n */\r\nexport interface HttpServiceConfig {\r\n /**\r\n * Base URL for the HTTP requests.\r\n * This is prepended to all request URLs.\r\n */\r\n baseUrl?: string;\r\n\r\n /**\r\n * A Resolver function to convert DataRequest to DataResult.\r\n */\r\n dataRequestResolver?: HttpDataRequestResolver;\r\n}\r\n\r\nexport interface HttpServiceFeature { \r\n ɵproviders: Array<Provider | EnvironmentProviders>;\r\n}\r\n\r\n/**\r\n * Provides the configuration for the HttpService.\r\n * @param config \r\n * @returns \r\n */\r\nexport function provideHttpService(config?: HttpServiceConfig, ...features: Partial<HttpServiceFeature>[]) {\r\n // const mergedfeatures = Object.assign({}, ...features);\r\n return makeEnvironmentProviders([\r\n HttpService,\r\n { provide: HTTP_SERVICE_CONFIG, useValue: config || {} },\r\n features.map((feature) => feature.ɵproviders),\r\n ]);\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable, of, Subject, tap } from 'rxjs';\r\nimport { HttpRequestOptions, HttpRequestEvent } from './types';\r\nimport { inject, Inject, Injectable, Injector, makeStateKey, PLATFORM_ID, runInInjectionContext, TransferState } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\r\nimport { HTTP_SERVICE_CONFIG } from './provide';\r\n\r\n/**\r\n * HttpService provides a simple HTTP client for making requests.\r\n * It supports GET, POST, PUT, DELETE methods and can handle DataRequest objects.\r\n * It also supports transfer state for server-side rendering.\r\n * It emits events for request lifecycle: Send, Progress, Complete and Error.\r\n * It can be configured with a base URL and a default DataRequest resolver.\r\n * It can also handle multipart/form-data requests.\r\n */\r\n@Injectable()\r\nexport class HttpService {\r\n private _eventsSubject = new Subject<HttpRequestEvent>();\r\n private _baseUrl?: string;\r\n\r\n public events = this._eventsSubject.asObservable();\r\n public defaultHeaders?: HttpHeaders;\r\n\r\n private readonly _config = inject(HTTP_SERVICE_CONFIG);\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private transferState: TransferState,\r\n private injector: Injector,\r\n @Inject(PLATFORM_ID) private platformId: object,\r\n ) {\r\n this._baseUrl = this._config.baseUrl ?? '';\r\n }\r\n\r\n /**\r\n * Sends a GET request to the specified URL.\r\n * @param url The URL to send the request to.\r\n * @param options The options for the request.\r\n * @returns An observable of the response.\r\n */\r\n public get<T>(url: string, options?: HttpRequestOptions): Observable<T> {\r\n this._verifyOptions(options);\r\n const transferStateData = this._findInTransferState<T>(options);\r\n if (transferStateData.found) {\r\n return of(transferStateData.data!);\r\n }\r\n\r\n this._eventsSubject.next({ type: 'Send', url, options });\r\n let obs = this.http.get<T>(this._makeUrl(url, options), options as any).pipe(\r\n tap(result => {\r\n if (isPlatformServer(this.platformId) && options?.transferState) {\r\n const key = makeStateKey<T>(options.id);\r\n this.transferState.set(key, result as T);\r\n }\r\n })\r\n );\r\n return this._handleEvents<T>(obs, url, options);\r\n }\r\n\r\n\r\n /**\r\n * Sends a DataRequest to the specified URL and returns a DataResult.\r\n * This method is used for paginated or filtered data requests.\r\n * It uses the configured DataRequestResolver to handle the request. \r\n * @param url The URL to send the request to.\r\n * @param request The DataRequest object containing the request parameters.\r\n * @param options The options for the request.\r\n * @returns An observable of DataResult<T>.\r\n */\r\n public getDataResult<T>(url: string, request: DataRequest, options?: HttpRequestOptions): Observable<DataResult<T>> {\r\n this._verifyOptions(options);\r\n const transferStateData = this._findInTransferState<DataResult<T>>(options);\r\n if (transferStateData.found) {\r\n return of(transferStateData.data!);\r\n }\r\n\r\n this._eventsSubject.next({ type: 'Send', url, options });\r\n let resolver = this._config.dataRequestResolver;\r\n if (!resolver) {\r\n throw new Error('No HttpDataRequestResolver provided.');\r\n }\r\n\r\n const URL = this._makeUrl(url, options);\r\n let obs = runInInjectionContext<Observable<DataResult<T>>>(this.injector, resolver.bind(null, URL, request, options));\r\n if (!(obs instanceof Observable)) {\r\n throw Error('HttpDataRequestResolver should return an observable.');\r\n }\r\n\r\n return this._handleEvents(obs, url, options);\r\n }\r\n\r\n /**\r\n * Sends a POST request to the specified URL with the given body.\r\n * @param url The URL to send the request to.\r\n * @param body The body of the request.\r\n * @param options The options for the request.\r\n * @returns An observable of the response.\r\n */\r\n public post<T>(url: string, body: any, options?: HttpRequestOptions): Observable<T> {\r\n this._verifyOptions(options);\r\n this._eventsSubject.next({ type: 'Send', url, options });\r\n const BODY = this._makeBody(body, options);\r\n let obs = this.http.post(this._makeUrl(url, options), BODY, options as any) as Observable<T>;\r\n return this._handleEvents<T>(obs, url, options);\r\n }\r\n\r\n /**\r\n * Sends a PUT request to the specified URL with the given body.\r\n * @param url The URL to send the request to.\r\n * @param body The body of the request.\r\n * @param options The options for the request.\r\n * @returns An observable of the response.\r\n */\r\n public put<T>(url: string, body: any, options?: HttpRequestOptions): Observable<T> {\r\n this._verifyOptions(options);\r\n this._eventsSubject.next({ type: 'Send', url, options });\r\n const BODY = this._makeBody(body, options);\r\n let obs = this.http.put(this._makeUrl(url, options), BODY, options as any) as Observable<T>;\r\n return this._handleEvents<T>(obs, url, options);\r\n }\r\n\r\n /**\r\n * Sends a DELETE request to the specified URL.\r\n * @param url The URL to send the request to.\r\n * @param options The options for the request.\r\n * @returns An observable of the response.\r\n */\r\n public delete<T>(url: string, options?: HttpRequestOptions): Observable<T> {\r\n this._verifyOptions(options);\r\n this._eventsSubject.next({ type: 'Send', url, options });\r\n let obs = this.http.delete(this._makeUrl(url, options), options as any)\r\n return this._handleEvents<T>(obs, url, options);\r\n }\r\n\r\n private _makeUrl(url: string, options?: HttpRequestOptions) {\r\n return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);\r\n }\r\n\r\n private _makeBody(body: any, options?: HttpRequestOptions) {\r\n if (options?.contentType === 'multipart/form-data') {\r\n const formData = new FormData();\r\n for (const key in body) {\r\n if (body.hasOwnProperty(key)) {\r\n const field = body[key];\r\n let value;\r\n\r\n if (typeof field === 'string' || field instanceof File) {\r\n value = field;\r\n } else if (typeof field === 'number') {\r\n value = field.toString();\r\n } else if (typeof field === 'object') {\r\n value = JSON.stringify(field);\r\n }\r\n\r\n if (value) {\r\n formData.append(key, value);\r\n }\r\n }\r\n }\r\n\r\n return formData;\r\n }\r\n\r\n return body;\r\n }\r\n\r\n private _handleEvents<T>(o: Observable<any>, url: string, options?: HttpRequestOptions): Observable<T> {\r\n return o.pipe(\r\n tap({\r\n next: r => {\r\n this._eventsSubject.next({ type: 'Complete', url, options, response: r });\r\n },\r\n error: e => {\r\n this._eventsSubject.next({ type: 'Error', url, options, error: e });\r\n }\r\n })\r\n )\r\n }\r\n\r\n private _verifyOptions(options?: HttpRequestOptions) {\r\n if (options) {\r\n if (options.transferState && !options.id) {\r\n throw Error('To use transferState, set request id')\r\n }\r\n\r\n if (this.transferState && (options.observe == 'events' || options.observe == 'response')) {\r\n throw Error('TransferState is only supported with observe == body.');\r\n }\r\n }\r\n }\r\n\r\n private _findInTransferState<T>(options?: HttpRequestOptions): { found: boolean, data: T | undefined } {\r\n if (!options?.transferState || isPlatformServer(this.platformId)) {\r\n return { found: false, data: undefined };\r\n }\r\n\r\n const key = makeStateKey<T>(options.id);\r\n if (this.transferState.hasKey(key)) {\r\n const data = this.transferState.get<T>(key, null!);\r\n if ((options.transferState as any)?.['clearAfterUse']) {\r\n this.transferState.remove(key); // Free memory\r\n }\r\n\r\n return { found: true, data: data };\r\n }\r\n\r\n return { found: false, data: undefined };\r\n }\r\n}\r\n","import { HttpClient, HttpHeaders, HttpParams, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport interface HttpRequestOptions {\r\n /** Http request ID */\r\n id?: any;\r\n params?: HttpParams | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\r\n headers?: HttpHeaders | Record<string, string | string[]>;\r\n pathType?: 'relative' | 'absolute';\r\n responseType?: 'json' | 'blob' | 'text';\r\n contentType?: 'json' | 'multipart/form-data';\r\n reportProgress?: boolean;\r\n observe?: 'response' | 'body' | 'events';\r\n\r\n /**\r\n * Additional data to associate with this object.\r\n */\r\n tag?: Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\r\n\r\n /** \r\n * Save response in transfer state \r\n * \r\n */\r\n transferState?: boolean | {\r\n /**\r\n * Clear transfer state after first read.\r\n */\r\n clearAfterUse?: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * HttpDataRequestResolver is a function that takes a URL, a DataRequest, and options,\r\n * and returns an Observable that emits a DataResult.\r\n * This is used to convert a DataRequest into query parameters or request body for an HTTP request.\r\n * @param url The URL to send the request to.\r\n * @param dataRequest The DataRequest to convert.\r\n * @param options Additional options for the request, such as headers.\r\n */\r\nexport type HttpDataRequestResolver<T = any> = (url: string, dataRequest: DataRequest, options?: HttpRequestOptions) => Observable<DataResult<T>>;\r\n\r\nexport interface HttpRequestEventBase {\r\n type: 'Send' | 'Complete' | 'Progress' | 'Error';\r\n url: string;\r\n options?: HttpRequestOptions\r\n}\r\n\r\nexport interface HttpRequestSendEvent extends HttpRequestEventBase {\r\n type: 'Send';\r\n}\r\n\r\nexport interface HttpRequestCompleteEvent extends HttpRequestEventBase {\r\n type: 'Complete';\r\n response?: any;\r\n}\r\n\r\nexport interface HttpRequestProgressEvent extends HttpRequestEventBase {\r\n type: 'Progress';\r\n}\r\n\r\nexport interface HttpRequestErrorEvent extends HttpRequestEventBase {\r\n type: 'Error';\r\n error: any;\r\n}\r\n\r\nexport type HttpRequestEvent = HttpRequestSendEvent | HttpRequestCompleteEvent | HttpRequestProgressEvent | HttpRequestErrorEvent;\r\n\r\n/**\r\n * HttpDataRequestWriter is a function that takes an HTTP request and a DataRequest\r\n * and writes the DataRequest parameters to the HTTP request.\r\n * This is used to convert a DataRequest into query parameters or request body.\r\n * @param url The URL to send the request to.\r\n * @param dataRequest The DataRequest to convert.\r\n * @param httpClient The HttpClient to use for the request.\r\n * @param options Additional options for the request, such as headers.\r\n * @template T data item type\r\n * @returns An Observable that emits the DataResult.\r\n */\r\n","import { DataRequest, DataResult } from \"@bootkit/ng0/data\";\r\nimport { HttpRequestOptions } from \"../types\";\r\nimport { map, Observable } from \"rxjs\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { inject } from \"@angular/core\";\r\n\r\n/**\r\n * Default implementation of httpDataRequestResolver1.\r\n * It adds DataRequest parameters as query string to the HTTP request.\r\n * @param url \r\n * @param dataRequest \r\n * @param options\r\n * @template T data item type\r\n * @returns \r\n */\r\nexport function httpDataRequestResolver1<T = any>(\r\n url: string,\r\n dataRequest: DataRequest,\r\n options?: HttpRequestOptions): Observable<DataResult<T>> {\r\n var query: Record<string, any> = {};\r\n\r\n const httpClient = inject(HttpClient);\r\n\r\n if (dataRequest.page) {\r\n query['page[size]'] = dataRequest.page.size;\r\n query['page[index]'] = dataRequest.page.index;\r\n }\r\n\r\n if (dataRequest.sort) {\r\n query['sort[field]'] = dataRequest.sort.field;\r\n query['sort[asc]'] = dataRequest.sort.asc;\r\n }\r\n\r\n if (Array.isArray(dataRequest.filters)) {\r\n for (let i = 0; i < dataRequest.filters.length; i++) {\r\n const filter = dataRequest.filters[i];\r\n query[`filters[${i}].field`] = filter.field;\r\n query[`filters[${i}].operator`] = filter.operator;\r\n query[`filters[${i}].value`] = filter.value;\r\n }\r\n }\r\n\r\n if (typeof dataRequest.computeTotal == 'boolean') {\r\n query['computeTotal'] = dataRequest.computeTotal;\r\n }\r\n\r\n return httpClient.get<{ data: T[], total?: number }>(url, {\r\n params: query,\r\n headers: options?.headers,\r\n }).pipe(\r\n map(result => {\r\n return new DataResult<T>(result.data, result.total)\r\n })\r\n );\r\n}\r\n\r\n// /**\r\n// * Provides httpDataRequestResolver1.\r\n// * This is used to convert a DataRequest into query parameters for the HTTP (GET) request.\r\n// * @returns \r\n// */\r\n// export function withHttpDataRequestResolver1(): HttpServiceFeature {\r\n// return {\r\n// ɵproviders: [\r\n// { provide: DEFAULT_DATA_REQUEST_RESOLVER, useValue: HttpDataRequestResolver1 }\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-http.mjs","sources":["../../../projects/ng0/http/provide.ts","../../../projects/ng0/http/http.service.ts","../../../projects/ng0/http/types.ts","../../../projects/ng0/http/data-request-resolvers/http-data-request-resolver-1.ts","../../../projects/ng0/http/bootkit-ng0-http.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Provider } from \"@angular/core\";\nimport { HttpDataRequestResolver } from \"./types\";\nimport { HttpService } from \"./http.service\";\n\nexport const HTTP_SERVICE_CONFIG = new InjectionToken<HttpServiceConfig>('HttpServiceConfig');\n\n/**\n * Configuration for the HttpService.\n */\nexport interface HttpServiceConfig {\n /**\n * Base URL for the HTTP requests.\n * This is prepended to all request URLs.\n */\n baseUrl?: string;\n\n /**\n * A Resolver function to convert DataRequest to DataResult.\n */\n dataRequestResolver?: HttpDataRequestResolver;\n}\n\nexport interface HttpServiceFeature { \n ɵproviders: Array<Provider | EnvironmentProviders>;\n}\n\n/**\n * Provides the configuration for the HttpService.\n * @param config \n * @returns \n */\nexport function provideHttpService(config?: HttpServiceConfig, ...features: Partial<HttpServiceFeature>[]) {\n // const mergedfeatures = Object.assign({}, ...features);\n return makeEnvironmentProviders([\n HttpService,\n { provide: HTTP_SERVICE_CONFIG, useValue: config || {} },\n features.map((feature) => feature.ɵproviders),\n ]);\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable, of, Subject, tap } from 'rxjs';\nimport { HttpRequestOptions, HttpRequestEvent } from './types';\nimport { inject, Inject, Injectable, Injector, makeStateKey, PLATFORM_ID, runInInjectionContext, TransferState } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\nimport { HTTP_SERVICE_CONFIG } from './provide';\n\n/**\n * HttpService provides a simple HTTP client for making requests.\n * It supports GET, POST, PUT, DELETE methods and can handle DataRequest objects.\n * It also supports transfer state for server-side rendering.\n * It emits events for request lifecycle: Send, Progress, Complete and Error.\n * It can be configured with a base URL and a default DataRequest resolver.\n * It can also handle multipart/form-data requests.\n */\n@Injectable()\nexport class HttpService {\n private _eventsSubject = new Subject<HttpRequestEvent>();\n private _baseUrl?: string;\n\n public events = this._eventsSubject.asObservable();\n public defaultHeaders?: HttpHeaders;\n\n private readonly _config = inject(HTTP_SERVICE_CONFIG);\n\n constructor(\n private http: HttpClient,\n private transferState: TransferState,\n private injector: Injector,\n @Inject(PLATFORM_ID) private platformId: object,\n ) {\n this._baseUrl = this._config.baseUrl ?? '';\n }\n\n /**\n * Sends a GET request to the specified URL.\n * @param url The URL to send the request to.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public get<T>(url: string, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n const transferStateData = this._findInTransferState<T>(options);\n if (transferStateData.found) {\n return of(transferStateData.data!);\n }\n\n this._eventsSubject.next({ type: 'Send', url, options });\n let obs = this.http.get<T>(this._makeUrl(url, options), options as any).pipe(\n tap(result => {\n if (isPlatformServer(this.platformId) && options?.transferState) {\n const key = makeStateKey<T>(options.id);\n this.transferState.set(key, result as T);\n }\n })\n );\n return this._handleEvents<T>(obs, url, options);\n }\n\n\n /**\n * Sends a DataRequest to the specified URL and returns a DataResult.\n * This method is used for paginated or filtered data requests.\n * It uses the configured DataRequestResolver to handle the request. \n * @param url The URL to send the request to.\n * @param request The DataRequest object containing the request parameters.\n * @param options The options for the request.\n * @returns An observable of DataResult<T>.\n */\n public getDataResult<T>(url: string, request: DataRequest, options?: HttpRequestOptions): Observable<DataResult<T>> {\n this._verifyOptions(options);\n const transferStateData = this._findInTransferState<DataResult<T>>(options);\n if (transferStateData.found) {\n return of(transferStateData.data!);\n }\n\n this._eventsSubject.next({ type: 'Send', url, options });\n let resolver = this._config.dataRequestResolver;\n if (!resolver) {\n throw new Error('No HttpDataRequestResolver provided.');\n }\n\n const URL = this._makeUrl(url, options);\n let obs = runInInjectionContext<Observable<DataResult<T>>>(this.injector, resolver.bind(null, URL, request, options));\n if (!(obs instanceof Observable)) {\n throw Error('HttpDataRequestResolver should return an observable.');\n }\n\n return this._handleEvents(obs, url, options);\n }\n\n /**\n * Sends a POST request to the specified URL with the given body.\n * @param url The URL to send the request to.\n * @param body The body of the request.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public post<T>(url: string, body: any, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n this._eventsSubject.next({ type: 'Send', url, options });\n const BODY = this._makeBody(body, options);\n let obs = this.http.post(this._makeUrl(url, options), BODY, options as any) as Observable<T>;\n return this._handleEvents<T>(obs, url, options);\n }\n\n /**\n * Sends a PUT request to the specified URL with the given body.\n * @param url The URL to send the request to.\n * @param body The body of the request.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public put<T>(url: string, body: any, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n this._eventsSubject.next({ type: 'Send', url, options });\n const BODY = this._makeBody(body, options);\n let obs = this.http.put(this._makeUrl(url, options), BODY, options as any) as Observable<T>;\n return this._handleEvents<T>(obs, url, options);\n }\n\n /**\n * Sends a DELETE request to the specified URL.\n * @param url The URL to send the request to.\n * @param options The options for the request.\n * @returns An observable of the response.\n */\n public delete<T>(url: string, options?: HttpRequestOptions): Observable<T> {\n this._verifyOptions(options);\n this._eventsSubject.next({ type: 'Send', url, options });\n let obs = this.http.delete(this._makeUrl(url, options), options as any)\n return this._handleEvents<T>(obs, url, options);\n }\n\n private _makeUrl(url: string, options?: HttpRequestOptions) {\n return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);\n }\n\n private _makeBody(body: any, options?: HttpRequestOptions) {\n if (options?.contentType === 'multipart/form-data') {\n const formData = new FormData();\n for (const key in body) {\n if (body.hasOwnProperty(key)) {\n const field = body[key];\n let value;\n\n if (typeof field === 'string' || field instanceof File) {\n value = field;\n } else if (typeof field === 'number') {\n value = field.toString();\n } else if (typeof field === 'object') {\n value = JSON.stringify(field);\n }\n\n if (value) {\n formData.append(key, value);\n }\n }\n }\n\n return formData;\n }\n\n return body;\n }\n\n private _handleEvents<T>(o: Observable<any>, url: string, options?: HttpRequestOptions): Observable<T> {\n return o.pipe(\n tap({\n next: r => {\n this._eventsSubject.next({ type: 'Complete', url, options, response: r });\n },\n error: e => {\n this._eventsSubject.next({ type: 'Error', url, options, error: e });\n }\n })\n )\n }\n\n private _verifyOptions(options?: HttpRequestOptions) {\n if (options) {\n if (options.transferState && !options.id) {\n throw Error('To use transferState, set request id')\n }\n\n if (this.transferState && (options.observe == 'events' || options.observe == 'response')) {\n throw Error('TransferState is only supported with observe == body.');\n }\n }\n }\n\n private _findInTransferState<T>(options?: HttpRequestOptions): { found: boolean, data: T | undefined } {\n if (!options?.transferState || isPlatformServer(this.platformId)) {\n return { found: false, data: undefined };\n }\n\n const key = makeStateKey<T>(options.id);\n if (this.transferState.hasKey(key)) {\n const data = this.transferState.get<T>(key, null!);\n if ((options.transferState as any)?.['clearAfterUse']) {\n this.transferState.remove(key); // Free memory\n }\n\n return { found: true, data: data };\n }\n\n return { found: false, data: undefined };\n }\n}\n","import { HttpClient, HttpHeaders, HttpParams, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\nimport { Observable } from 'rxjs';\n\nexport interface HttpRequestOptions {\n /** Http request ID */\n id?: any;\n params?: HttpParams | Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n headers?: HttpHeaders | Record<string, string | string[]>;\n pathType?: 'relative' | 'absolute';\n responseType?: 'json' | 'blob' | 'text';\n contentType?: 'json' | 'multipart/form-data';\n reportProgress?: boolean;\n observe?: 'response' | 'body' | 'events';\n\n /**\n * Additional data to associate with this object.\n */\n tag?: Record<string, string | number | boolean | ReadonlyArray<string | number | boolean>>;\n\n /** \n * Save response in transfer state \n * \n */\n transferState?: boolean | {\n /**\n * Clear transfer state after first read.\n */\n clearAfterUse?: boolean;\n };\n}\n\n/**\n * HttpDataRequestResolver is a function that takes a URL, a DataRequest, and options,\n * and returns an Observable that emits a DataResult.\n * This is used to convert a DataRequest into query parameters or request body for an HTTP request.\n * @param url The URL to send the request to.\n * @param dataRequest The DataRequest to convert.\n * @param options Additional options for the request, such as headers.\n */\nexport type HttpDataRequestResolver<T = any> = (url: string, dataRequest: DataRequest, options?: HttpRequestOptions) => Observable<DataResult<T>>;\n\nexport interface HttpRequestEventBase {\n type: 'Send' | 'Complete' | 'Progress' | 'Error';\n url: string;\n options?: HttpRequestOptions\n}\n\nexport interface HttpRequestSendEvent extends HttpRequestEventBase {\n type: 'Send';\n}\n\nexport interface HttpRequestCompleteEvent extends HttpRequestEventBase {\n type: 'Complete';\n response?: any;\n}\n\nexport interface HttpRequestProgressEvent extends HttpRequestEventBase {\n type: 'Progress';\n}\n\nexport interface HttpRequestErrorEvent extends HttpRequestEventBase {\n type: 'Error';\n error: any;\n}\n\nexport type HttpRequestEvent = HttpRequestSendEvent | HttpRequestCompleteEvent | HttpRequestProgressEvent | HttpRequestErrorEvent;\n\n/**\n * HttpDataRequestWriter is a function that takes an HTTP request and a DataRequest\n * and writes the DataRequest parameters to the HTTP request.\n * This is used to convert a DataRequest into query parameters or request body.\n * @param url The URL to send the request to.\n * @param dataRequest The DataRequest to convert.\n * @param httpClient The HttpClient to use for the request.\n * @param options Additional options for the request, such as headers.\n * @template T data item type\n * @returns An Observable that emits the DataResult.\n */\n","import { DataRequest, DataResult } from \"@bootkit/ng0/data\";\nimport { HttpRequestOptions } from \"../types\";\nimport { map, Observable } from \"rxjs\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { inject } from \"@angular/core\";\n\n/**\n * Default implementation of httpDataRequestResolver1.\n * It adds DataRequest parameters as query string to the HTTP request.\n * @param url \n * @param dataRequest \n * @param options\n * @template T data item type\n * @returns \n */\nexport function httpDataRequestResolver1<T = any>(\n url: string,\n dataRequest: DataRequest,\n options?: HttpRequestOptions): Observable<DataResult<T>> {\n var query: Record<string, any> = {};\n\n const httpClient = inject(HttpClient);\n\n if (dataRequest.page) {\n query['page[size]'] = dataRequest.page.size;\n query['page[index]'] = dataRequest.page.index;\n }\n\n if (dataRequest.sort) {\n query['sort[field]'] = dataRequest.sort.field;\n query['sort[asc]'] = dataRequest.sort.asc;\n }\n\n if (Array.isArray(dataRequest.filters)) {\n for (let i = 0; i < dataRequest.filters.length; i++) {\n const filter = dataRequest.filters[i];\n query[`filters[${i}].field`] = filter.field;\n query[`filters[${i}].operator`] = filter.operator;\n query[`filters[${i}].value`] = filter.value;\n }\n }\n\n if (typeof dataRequest.computeTotal == 'boolean') {\n query['computeTotal'] = dataRequest.computeTotal;\n }\n\n return httpClient.get<{ data: T[], total?: number }>(url, {\n params: query,\n headers: options?.headers,\n }).pipe(\n map(result => {\n return new DataResult<T>(result.data, result.total)\n })\n );\n}\n\n// /**\n// * Provides httpDataRequestResolver1.\n// * This is used to convert a DataRequest into query parameters for the HTTP (GET) request.\n// * @returns \n// */\n// export function withHttpDataRequestResolver1(): HttpServiceFeature {\n// return {\n// ɵproviders: [\n// { provide: DEFAULT_DATA_REQUEST_RESOLVER, useValue: HttpDataRequestResolver1 }\n// ]\n// };\n// }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}