@verisoft/ui-core 19.0.0-rc001 → 20.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/.eslintrc.json +48 -0
  2. package/README.md +314 -3
  3. package/jest.config.ts +21 -0
  4. package/ng-package.json +11 -0
  5. package/package.json +16 -31
  6. package/project.json +36 -0
  7. package/{index.d.ts → src/index.ts} +1 -1
  8. package/src/lib/common/angular-helper.ts +44 -0
  9. package/src/lib/common/constants.ts +5 -0
  10. package/src/lib/common/control.models.ts +80 -0
  11. package/src/lib/common/datasource-component.model.spec.ts +42 -0
  12. package/src/lib/common/datasource-component.model.ts +43 -0
  13. package/{lib/common/deactivate-guard.model.d.ts → src/lib/common/deactivate-guard.model.ts} +2 -1
  14. package/src/lib/common/download-file.ts +20 -0
  15. package/src/lib/common/filter.ts +7 -0
  16. package/{lib/common/icons.d.ts → src/lib/common/icons.ts} +34 -34
  17. package/{lib/common/index.d.ts → src/lib/common/index.ts} +10 -10
  18. package/{lib/common/notificable-property.model.d.ts → src/lib/common/notificable-property.model.ts} +5 -4
  19. package/src/lib/common/rxjs.spec.ts +58 -0
  20. package/src/lib/common/rxjs.ts +21 -0
  21. package/src/lib/components/action-button-group/action-button-group.model.ts +15 -0
  22. package/src/lib/components/action-button-group/action-button.model.ts +15 -0
  23. package/{lib/components/action-button-group/index.d.ts → src/lib/components/action-button-group/index.ts} +2 -2
  24. package/src/lib/components/base-form/base-form-input.component.ts +120 -0
  25. package/src/lib/components/base-form/base-form.component.ts +236 -0
  26. package/src/lib/components/base-form/directives/detail-store.directive.ts +219 -0
  27. package/{lib/components/base-form/index.d.ts → src/lib/components/base-form/index.ts} +2 -2
  28. package/src/lib/components/base-form/models/base-form-input.models.ts +11 -0
  29. package/src/lib/components/base-form/models/base-form.models.ts +31 -0
  30. package/{lib/components/base-form/models/index.d.ts → src/lib/components/base-form/models/index.ts} +1 -1
  31. package/{lib/components/breadcrumb/breadcrumb.model.d.ts → src/lib/components/breadcrumb/breadcrumb.model.ts} +6 -1
  32. package/src/lib/components/breadcrumb/breadcrumb.service.ts +9 -0
  33. package/src/lib/components/breadcrumb/breadcrumbcore.component.ts +117 -0
  34. package/src/lib/components/breadcrumb/index.ts +3 -0
  35. package/{lib/components/button/button.model.d.ts → src/lib/components/button/button.model.ts} +5 -1
  36. package/src/lib/components/button/index.ts +1 -0
  37. package/{lib/components/calendar/calendar.model.d.ts → src/lib/components/calendar/calendar.model.ts} +6 -2
  38. package/src/lib/components/calendar/index.ts +1 -0
  39. package/{lib/components/checkbox/checkbox.model.d.ts → src/lib/components/checkbox/checkbox.model.ts} +5 -1
  40. package/src/lib/components/checkbox/index.ts +1 -0
  41. package/src/lib/components/confirm-dialog/confirm-dialog.model.ts +31 -0
  42. package/src/lib/components/confirm-dialog/index.ts +1 -0
  43. package/{lib/components/dropdown/dropdown.model.d.ts → src/lib/components/dropdown/dropdown.model.ts} +5 -1
  44. package/src/lib/components/dropdown/index.ts +1 -0
  45. package/{lib/components/dropdown-button/dropdown-button.model.d.ts → src/lib/components/dropdown-button/dropdown-button.model.ts} +18 -14
  46. package/src/lib/components/dropdown-button/index.ts +1 -0
  47. package/src/lib/components/dynamic-component/dynamic-component.model.ts +2 -0
  48. package/src/lib/components/dynamic-component/index.ts +1 -0
  49. package/src/lib/components/filter/filter.model.ts +17 -0
  50. package/{lib/components/filter/index.d.ts → src/lib/components/filter/index.ts} +1 -1
  51. package/{lib/components/form-field/form-field.model.d.ts → src/lib/components/form-field/form-field.model.ts} +6 -2
  52. package/src/lib/components/form-field/index.ts +1 -0
  53. package/{lib/components/generic-field/generic-field.model.d.ts → src/lib/components/generic-field/generic-field.model.ts} +5 -1
  54. package/src/lib/components/generic-field/index.ts +1 -0
  55. package/src/lib/components/generic-form/generic-form.component.ts +33 -0
  56. package/{lib/components/generic-form/index.d.ts → src/lib/components/generic-form/index.ts} +1 -1
  57. package/{lib/components/header/header.model.d.ts → src/lib/components/header/header.model.ts} +9 -2
  58. package/src/lib/components/header/index.ts +1 -0
  59. package/src/lib/components/icons/icons.component.ts +22 -0
  60. package/src/lib/components/icons/icons.model.ts +16 -0
  61. package/src/lib/components/icons/index.ts +2 -0
  62. package/{lib/components/index.d.ts → src/lib/components/index.ts} +2 -0
  63. package/src/lib/components/input-group/index.ts +1 -0
  64. package/{lib/components/input-group/input-group.model.d.ts → src/lib/components/input-group/input-group.model.ts} +7 -2
  65. package/src/lib/components/loader/index.ts +1 -0
  66. package/src/lib/components/loader/loader.model.ts +7 -0
  67. package/src/lib/components/multiselect/index.ts +1 -0
  68. package/{lib/components/multiselect/mutiselect.model.d.ts → src/lib/components/multiselect/mutiselect.model.ts} +6 -2
  69. package/src/lib/components/number-input/index.ts +1 -0
  70. package/{lib/components/number-input/number-input.model.d.ts → src/lib/components/number-input/number-input.model.ts} +6 -2
  71. package/{lib/components/page-header/index.d.ts → src/lib/components/page-header/index.ts} +1 -1
  72. package/{lib/components/page-header/page-header.model.d.ts → src/lib/components/page-header/page-header.model.ts} +5 -1
  73. package/src/lib/components/page-header/page-header.service.ts +9 -0
  74. package/src/lib/components/page-header/page-headercore.component.ts +42 -0
  75. package/src/lib/components/password/index.ts +1 -0
  76. package/{lib/components/password/password.model.d.ts → src/lib/components/password/password.model.ts} +9 -3
  77. package/src/lib/components/radiobutton/index.ts +1 -0
  78. package/{lib/components/radiobutton/radiobutton.model.d.ts → src/lib/components/radiobutton/radiobutton.model.ts} +8 -3
  79. package/src/lib/components/section/index.ts +1 -0
  80. package/{lib/components/section/section.model.d.ts → src/lib/components/section/section.model.ts} +6 -2
  81. package/src/lib/components/side-menu/directives/side-menu-service.directive.ts +31 -0
  82. package/{lib/components/side-menu/index.d.ts → src/lib/components/side-menu/index.ts} +1 -1
  83. package/src/lib/components/side-menu/services/side-menu-provider.service.ts +13 -0
  84. package/src/lib/components/side-menu/services/side-menu.service.ts +62 -0
  85. package/src/lib/components/side-menu/side-menu.model.ts +67 -0
  86. package/src/lib/components/slider/index.ts +1 -0
  87. package/{lib/components/slider/slider.model.d.ts → src/lib/components/slider/slider.model.ts} +6 -2
  88. package/src/lib/components/snackbar/index.ts +1 -0
  89. package/src/lib/components/snackbar/snackbar.model.ts +7 -0
  90. package/src/lib/components/stepper/index.ts +1 -0
  91. package/{lib/components/stepper/stepper.model.d.ts → src/lib/components/stepper/stepper.model.ts} +10 -5
  92. package/src/lib/components/switch/index.ts +1 -0
  93. package/src/lib/components/switch/switch.model.ts +8 -0
  94. package/src/lib/components/tab-view/index.ts +1 -0
  95. package/{lib/components/tab-view/tab-view.model.d.ts → src/lib/components/tab-view/tab-view.model.ts} +8 -3
  96. package/src/lib/components/table/column-configuration.ts +38 -0
  97. package/src/lib/components/table/table-builder.ts +93 -0
  98. package/src/lib/components/table/table-column.directive.ts +62 -0
  99. package/src/lib/components/table/table.models.ts +261 -0
  100. package/src/lib/components/table-filter/index.ts +1 -0
  101. package/{lib/components/table-filter/table-filter.model.d.ts → src/lib/components/table-filter/table-filter.model.ts} +6 -1
  102. package/src/lib/components/tag/index.ts +1 -0
  103. package/src/lib/components/tag/tag.model.ts +13 -0
  104. package/src/lib/components/textarea/index.ts +1 -0
  105. package/{lib/components/textarea/textarea.model.d.ts → src/lib/components/textarea/textarea.model.ts} +5 -1
  106. package/src/lib/components/textfield/index.ts +1 -0
  107. package/{lib/components/textfield/textfield.model.d.ts → src/lib/components/textfield/textfield.model.ts} +6 -2
  108. package/src/lib/components/tooltip/index.ts +1 -0
  109. package/src/lib/components/tooltip/tooltip.model.ts +13 -0
  110. package/src/lib/components/unsubscribe.component.ts +12 -0
  111. package/src/lib/directives/datasource.directive.ts +275 -0
  112. package/{lib/directives/index.d.ts → src/lib/directives/index.ts} +4 -4
  113. package/src/lib/directives/shortcut.directive.ts +37 -0
  114. package/src/lib/directives/table-datasource.directive.ts +184 -0
  115. package/src/lib/directives/table-filter.directive.ts +69 -0
  116. package/src/lib/format/format.ts +74 -0
  117. package/src/lib/pipes/error/error.codes.ts +11 -0
  118. package/src/lib/pipes/error/error.models.ts +27 -0
  119. package/src/lib/pipes/error/error.pipe.ts +27 -0
  120. package/src/lib/pipes/error/warning.codes.ts +5 -0
  121. package/src/lib/pipes/error/warning.pipe.ts +27 -0
  122. package/src/lib/pipes/helper/enumToList.pipe.ts +16 -0
  123. package/{lib/pipes/index.d.ts → src/lib/pipes/index.ts} +1 -1
  124. package/src/lib/pipes/keyOrFn/keyOrFn.pipe.ts +23 -0
  125. package/src/lib/services/confirm-dialog.service.ts +44 -0
  126. package/{lib/services/index.d.ts → src/lib/services/index.ts} +4 -4
  127. package/src/lib/services/leave-form.service.ts +53 -0
  128. package/src/lib/services/screen-size.service.ts +25 -0
  129. package/src/lib/services/table.service.ts +22 -0
  130. package/src/test-setup.ts +8 -0
  131. package/tsconfig.json +28 -0
  132. package/tsconfig.lib.json +17 -0
  133. package/tsconfig.lib.prod.json +9 -0
  134. package/tsconfig.spec.json +16 -0
  135. package/fesm2022/verisoft-ui-core.mjs +0 -2013
  136. package/fesm2022/verisoft-ui-core.mjs.map +0 -1
  137. package/lib/common/angular-helper.d.ts +0 -1
  138. package/lib/common/constants.d.ts +0 -3
  139. package/lib/common/control.models.d.ts +0 -62
  140. package/lib/common/datasource-component.model.d.ts +0 -19
  141. package/lib/common/download-file.d.ts +0 -2
  142. package/lib/common/filter.d.ts +0 -1
  143. package/lib/common/rxjs.d.ts +0 -2
  144. package/lib/components/action-button-group/action-button-group.model.d.ts +0 -12
  145. package/lib/components/action-button-group/action-button.model.d.ts +0 -14
  146. package/lib/components/base-form/base-form-input.component.d.ts +0 -30
  147. package/lib/components/base-form/base-form.component.d.ts +0 -50
  148. package/lib/components/base-form/directives/detail-store.directive.d.ts +0 -35
  149. package/lib/components/base-form/models/base-form-input.models.d.ts +0 -7
  150. package/lib/components/base-form/models/base-form.models.d.ts +0 -18
  151. package/lib/components/breadcrumb/breadcrumb.service.d.ts +0 -8
  152. package/lib/components/breadcrumb/breadcrumbcore.component.d.ts +0 -30
  153. package/lib/components/breadcrumb/index.d.ts +0 -3
  154. package/lib/components/button/index.d.ts +0 -1
  155. package/lib/components/calendar/index.d.ts +0 -1
  156. package/lib/components/checkbox/index.d.ts +0 -1
  157. package/lib/components/confirm-dialog/confirm-dialog.model.d.ts +0 -25
  158. package/lib/components/confirm-dialog/index.d.ts +0 -1
  159. package/lib/components/dropdown/index.d.ts +0 -1
  160. package/lib/components/dropdown-button/index.d.ts +0 -1
  161. package/lib/components/dynamic-component/dynamic-component.model.d.ts +0 -3
  162. package/lib/components/dynamic-component/index.d.ts +0 -1
  163. package/lib/components/filter/filter.model.d.ts +0 -13
  164. package/lib/components/form-field/index.d.ts +0 -1
  165. package/lib/components/generic-field/index.d.ts +0 -1
  166. package/lib/components/generic-form/generic-form.component.d.ts +0 -30
  167. package/lib/components/header/index.d.ts +0 -1
  168. package/lib/components/icons/icons.component.d.ts +0 -6
  169. package/lib/components/icons/icons.model.d.ts +0 -6
  170. package/lib/components/icons/index.d.ts +0 -2
  171. package/lib/components/input-group/index.d.ts +0 -1
  172. package/lib/components/loader/index.d.ts +0 -1
  173. package/lib/components/loader/loader.model.d.ts +0 -3
  174. package/lib/components/multiselect/index.d.ts +0 -1
  175. package/lib/components/number-input/index.d.ts +0 -1
  176. package/lib/components/page-header/page-header.service.d.ts +0 -8
  177. package/lib/components/page-header/page-headercore.component.d.ts +0 -20
  178. package/lib/components/password/index.d.ts +0 -1
  179. package/lib/components/radiobutton/index.d.ts +0 -1
  180. package/lib/components/section/index.d.ts +0 -1
  181. package/lib/components/side-menu/directives/side-menu-service.directive.d.ts +0 -11
  182. package/lib/components/side-menu/services/side-menu-provider.service.d.ts +0 -10
  183. package/lib/components/side-menu/services/side-menu.service.d.ts +0 -15
  184. package/lib/components/side-menu/side-menu.model.d.ts +0 -42
  185. package/lib/components/slider/index.d.ts +0 -1
  186. package/lib/components/snackbar/index.d.ts +0 -1
  187. package/lib/components/snackbar/snackbar.model.d.ts +0 -3
  188. package/lib/components/stepper/index.d.ts +0 -1
  189. package/lib/components/switch/index.d.ts +0 -1
  190. package/lib/components/switch/switch.model.d.ts +0 -4
  191. package/lib/components/tab-view/index.d.ts +0 -1
  192. package/lib/components/table/column-configuration.d.ts +0 -12
  193. package/lib/components/table/table-builder.d.ts +0 -15
  194. package/lib/components/table/table-column.directive.d.ts +0 -25
  195. package/lib/components/table/table.models.d.ts +0 -132
  196. package/lib/components/table-filter/index.d.ts +0 -1
  197. package/lib/components/textarea/index.d.ts +0 -1
  198. package/lib/components/textfield/index.d.ts +0 -1
  199. package/lib/components/unsubscribe.component.d.ts +0 -9
  200. package/lib/directives/datasource.directive.d.ts +0 -32
  201. package/lib/directives/shortcut.directive.d.ts +0 -11
  202. package/lib/directives/table-datasource.directive.d.ts +0 -29
  203. package/lib/directives/table-filter.directive.d.ts +0 -17
  204. package/lib/format/format.d.ts +0 -9
  205. package/lib/pipes/error/error.codes.d.ts +0 -5
  206. package/lib/pipes/error/error.models.d.ts +0 -8
  207. package/lib/pipes/error/error.pipe.d.ts +0 -8
  208. package/lib/pipes/error/warning.codes.d.ts +0 -5
  209. package/lib/pipes/error/warning.pipe.d.ts +0 -8
  210. package/lib/pipes/helper/enumToList.pipe.d.ts +0 -7
  211. package/lib/pipes/keyOrFn/keyOrFn.pipe.d.ts +0 -7
  212. package/lib/services/confirm-dialog.service.d.ts +0 -12
  213. package/lib/services/leave-form.service.d.ts +0 -13
  214. package/lib/services/screen-size.service.d.ts +0 -10
  215. package/lib/services/table.service.d.ts +0 -13
  216. /package/{lib/components/table/index.d.ts → src/lib/components/table/index.ts} +0 -0
@@ -1 +1 @@
1
- export * from './generic-form.component';
1
+ export * from './generic-form.component';
@@ -1,7 +1,14 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { MenuItem } from '../side-menu/side-menu.model';
3
- export declare const HEADER_COMPONENT_TOKEN: InjectionToken<HeaderCore>;
4
- export declare const SETTINGS_MENU: InjectionToken<MenuItem[]>;
3
+
4
+ export const HEADER_COMPONENT_TOKEN = new InjectionToken<HeaderCore>(
5
+ 'HeaderComponentToken'
6
+ );
7
+
8
+ export const SETTINGS_MENU = new InjectionToken<MenuItem[]>(
9
+ 'SETTINGS_MENU'
10
+ );
11
+
5
12
  export interface HeaderCore {
6
13
  title: string;
7
14
  userName: string;
@@ -0,0 +1 @@
1
+ export * from './header.model';
@@ -0,0 +1,22 @@
1
+ import { Component, input } from "@angular/core";
2
+ import { ControlSeverityType, FieldSizeType } from "../../common";
3
+ import { IconLibraryType, ICONS_COMPONENT_TOKEN, IconsCore } from "./icons.model";
4
+
5
+ @Component({
6
+ standalone: true,
7
+ template: '',
8
+ providers: [
9
+ {
10
+ provide: ICONS_COMPONENT_TOKEN,
11
+ useExisting: IconsComponent
12
+ }
13
+ ]
14
+ })
15
+
16
+ export abstract class IconsComponent implements IconsCore {
17
+ library = input<IconLibraryType>('native');
18
+ name = input.required<string>();
19
+ size = input<FieldSizeType | undefined>();
20
+ severity = input<ControlSeverityType | undefined>();
21
+ class = input<string>();
22
+ }
@@ -0,0 +1,16 @@
1
+ import { InjectionToken, InputSignal } from "@angular/core";
2
+ import { ControlSeverityType, FieldSizeType } from "../../common";
3
+
4
+ export const ICONS_COMPONENT_TOKEN = new InjectionToken<IconsCore>(
5
+ 'IconsComponentToken'
6
+ );
7
+
8
+ export type IconLibraryType = 'native' | 'bootstrap';
9
+
10
+ export interface IconsCore {
11
+ library: InputSignal<IconLibraryType>;
12
+ name: InputSignal<string>;
13
+ size: InputSignal<FieldSizeType | undefined>;
14
+ severity: InputSignal<ControlSeverityType | undefined>;
15
+ class: InputSignal<string | undefined>;
16
+ }
@@ -0,0 +1,2 @@
1
+ export * from './icons.model';
2
+ export * from './icons.component';
@@ -31,5 +31,7 @@ export * from './table';
31
31
  export * from './table-filter';
32
32
  export * from './textarea';
33
33
  export * from './textfield';
34
+ export * from './tooltip';
34
35
  export * from './unsubscribe.component';
35
36
  export * from './icons';
37
+ export * from './tag';
@@ -0,0 +1 @@
1
+ export * from './input-group.model'
@@ -1,12 +1,17 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { IconPositionType } from '../../common';
3
3
  import { BaseFormCore } from '../base-form';
4
- export declare const INPUT_GROUP_COMPONENT_TOKEN: InjectionToken<InputGroupCore>;
4
+
5
+ export const INPUT_GROUP_COMPONENT_TOKEN = new InjectionToken<InputGroupCore>(
6
+ 'HeaderComponentToken'
7
+ );
8
+
5
9
  export interface InputGroupItem {
6
10
  icon?: string;
7
11
  text?: string;
8
12
  position: IconPositionType;
9
13
  }
14
+
10
15
  export interface InputGroupCore extends BaseFormCore {
11
16
  items: InputGroupItem[];
12
- }
17
+ }
@@ -0,0 +1 @@
1
+ export * from './loader.model'
@@ -0,0 +1,7 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ export const LOADER_COMPONENT_TOKEN = new InjectionToken<LoaderCore>(
4
+ 'LoaderComponentToken'
5
+ );
6
+
7
+ export type LoaderCore = object
@@ -0,0 +1 @@
1
+ export * from './mutiselect.model';
@@ -1,9 +1,13 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { DataSourceComponentModel } from '../../common';
3
3
  import { BaseFormCore } from '../base-form';
4
- export declare const MULTISELECT_COMPONENT_TOKEN: InjectionToken<MultiselectCore<any>>;
4
+
5
+ export const MULTISELECT_COMPONENT_TOKEN = new InjectionToken<MultiselectCore<any>>(
6
+ 'MultiselectComponentToken'
7
+ );
8
+
5
9
  export interface MultiselectCore<T> extends DataSourceComponentModel<T>, BaseFormCore {
6
10
  dropdownIcon?: string;
7
11
  floatLabel?: string;
8
12
  editable: boolean;
9
- }
13
+ }
@@ -0,0 +1 @@
1
+ export * from './number-input.model';
@@ -1,10 +1,14 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { BaseFormCore } from '../base-form';
3
- export declare const NUMBER_INPUT_COMPONENT_TOKEN: InjectionToken<NumberInputCore>;
3
+
4
+ export const NUMBER_INPUT_COMPONENT_TOKEN = new InjectionToken<NumberInputCore>(
5
+ 'NumberInputComponentToken'
6
+ );
7
+
4
8
  export interface NumberInputCore extends BaseFormCore {
5
9
  mode: string;
6
10
  currency: string;
7
11
  min: number;
8
12
  max: number;
9
13
  step: number;
10
- }
14
+ }
@@ -1,3 +1,3 @@
1
1
  export * from './page-header.model';
2
2
  export * from './page-header.service';
3
- export * from './page-headercore.component';
3
+ export * from './page-headercore.component';
@@ -1,5 +1,9 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- export declare const PAGE_HEADER_COMPONENT_TOKEN: InjectionToken<PageHeaderCore>;
2
+
3
+ export const PAGE_HEADER_COMPONENT_TOKEN = new InjectionToken<PageHeaderCore>(
4
+ 'PageHeaderComponentToken'
5
+ );
6
+
3
7
  export interface PageHeaderCore {
4
8
  title: string;
5
9
  subtitle: string | undefined;
@@ -0,0 +1,9 @@
1
+ import { EventEmitter, Injectable, Output } from '@angular/core';
2
+ import { PageHeaderCore } from './page-header.model';
3
+
4
+ @Injectable({
5
+ providedIn: 'root',
6
+ })
7
+ export class PageHeaderService {
8
+ @Output() pageHeader = new EventEmitter<PageHeaderCore>();
9
+ }
@@ -0,0 +1,42 @@
1
+ import { ChangeDetectorRef, Directive, Input, OnInit } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { takeUntil } from 'rxjs';
4
+ import { FieldSize, FieldSizeType } from '../../common';
5
+ import { UnsubscribeComponent } from '../unsubscribe.component';
6
+ import { PageHeaderService } from './page-header.service';
7
+
8
+ @Directive({
9
+
10
+ })
11
+ export class PageHeaderCoreComponent
12
+ extends UnsubscribeComponent
13
+ implements OnInit
14
+ {
15
+ @Input() title!: string;
16
+ @Input() subtitle: string | undefined;
17
+ @Input() showBackButton!: boolean;
18
+ @Input() size: FieldSizeType = FieldSize.small;
19
+
20
+ constructor(
21
+ readonly router: Router,
22
+ readonly cdr: ChangeDetectorRef,
23
+ readonly headerService: PageHeaderService
24
+ ) {
25
+ super();
26
+ }
27
+
28
+ ngOnInit(): void {
29
+ this.headerService.pageHeader
30
+ .pipe(takeUntil(this.destroyed$))
31
+ .subscribe((x: any) => {
32
+ this.title = x.title;
33
+ this.subtitle = x.subtitle;
34
+ this.showBackButton = x.showBackButton ?? false;
35
+ this.cdr.detectChanges();
36
+ });
37
+ }
38
+
39
+ protected locationBack() {
40
+ history.back();
41
+ }
42
+ }
@@ -0,0 +1 @@
1
+ export * from './password.model';
@@ -1,19 +1,25 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { BaseFormCore } from '../base-form';
3
- export declare const PASSWORD_COMPONENT_TOKEN: InjectionToken<PasswordCore>;
4
- export declare enum PasswordStrength {
3
+
4
+ export const PASSWORD_COMPONENT_TOKEN = new InjectionToken<PasswordCore>(
5
+ 'PasswordComponentToken'
6
+ );
7
+
8
+ export enum PasswordStrength {
5
9
  None = 0,
6
10
  Low = 1,
7
11
  Medium = 2,
8
12
  High = 3,
9
13
  Superb = 4
10
14
  }
15
+
11
16
  export interface PasswordCore extends BaseFormCore {
12
17
  toggleMask: boolean;
13
18
  feedback: boolean;
14
19
  }
20
+
15
21
  export interface PasswordValidationItem {
16
22
  severity: 'success' | 'error';
17
23
  validationLabel: string;
18
24
  validationFn: (x: string) => boolean;
19
- }
25
+ }
@@ -0,0 +1 @@
1
+ export * from './radiobutton.model';
@@ -1,11 +1,16 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { BaseFormCore } from '../base-form';
3
- export declare const RADIOBUTTON_COMPONENT_TOKEN: InjectionToken<RadiobuttonCore<any>>;
3
+
4
+ export const RADIOBUTTON_COMPONENT_TOKEN = new InjectionToken<RadiobuttonCore<any>>(
5
+ 'RadiobuttonComponentToken'
6
+ );
7
+
4
8
  export interface RadioButtonItem<T> {
5
9
  id: string;
6
- value: T;
10
+ value: T;
7
11
  }
12
+
8
13
  export interface RadiobuttonCore<T> extends BaseFormCore {
9
14
  radioGroupName: string;
10
15
  items: RadioButtonItem<T>[];
11
- }
16
+ }
@@ -0,0 +1 @@
1
+ export * from './section.model';
@@ -1,7 +1,11 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- export declare const SECTION_COMPONENT_TOKEN: InjectionToken<SectionCore>;
2
+
3
+ export const SECTION_COMPONENT_TOKEN = new InjectionToken<SectionCore>(
4
+ 'SectionComponentToken'
5
+ );
6
+
3
7
  export interface SectionCore {
4
8
  title: string;
5
9
  showContent: boolean;
6
10
  backgroundColor: string;
7
- }
11
+ }
@@ -0,0 +1,31 @@
1
+ import { AfterViewInit, ChangeDetectorRef, Directive, inject } from "@angular/core";
2
+ import { takeUntil } from "rxjs";
3
+ import { UnsubscribeComponent } from "../../unsubscribe.component";
4
+ import { SideMenuService } from "../services/side-menu.service";
5
+ import { SIDE_MENU_COMPONENT_TOKEN } from "../side-menu.model";
6
+
7
+ @Directive({
8
+ // eslint-disable-next-line @angular-eslint/directive-selector
9
+ selector: 'v-side-menu[useMenuService]',
10
+ exportAs: 'useMenuService',
11
+ standalone: true,
12
+ })
13
+ export class MenuServiceDirective
14
+ extends UnsubscribeComponent
15
+ implements AfterViewInit
16
+ {
17
+ private readonly menuService = inject(SideMenuService);
18
+ private readonly cdr = inject(ChangeDetectorRef);
19
+ private readonly sideMenu = inject(SIDE_MENU_COMPONENT_TOKEN);
20
+
21
+ ngAfterViewInit() {
22
+ this.menuService.menuItems$.pipe(takeUntil(this.destroyed$)).subscribe((items) => {
23
+
24
+ if (this.sideMenu) {
25
+ this.sideMenu.items = items;
26
+ }
27
+ });
28
+
29
+ this.cdr.detectChanges();
30
+ }
31
+ }
@@ -1,4 +1,4 @@
1
1
  export * from './side-menu.model';
2
2
  export * from './services/side-menu-provider.service';
3
3
  export * from './services/side-menu.service';
4
- export * from './directives/side-menu-service.directive';
4
+ export * from './directives/side-menu-service.directive';
@@ -0,0 +1,13 @@
1
+ import { Injectable, Optional, Inject } from '@angular/core';
2
+ import { MENU_TOKEN, MenuItem } from '../side-menu.model';
3
+ import { SideMenuService } from './side-menu.service';
4
+
5
+ @Injectable()
6
+ export class SideMenuProviderService {
7
+ constructor(
8
+ @Optional() @Inject(MENU_TOKEN) readonly menu: MenuItem[] = [],
9
+ readonly menuService: SideMenuService
10
+ ) {
11
+ menuService.setMenu(menu);
12
+ }
13
+ }
@@ -0,0 +1,62 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { BehaviorSubject, Observable } from 'rxjs';
3
+ import { MenuItem, SIDE_MENU_STATE_TOKEN } from '../side-menu.model';
4
+
5
+ @Injectable({ providedIn: 'root' })
6
+ export class SideMenuService {
7
+ private _menuItems = new BehaviorSubject<MenuItem[]>([]);
8
+ private stateToken = inject(SIDE_MENU_STATE_TOKEN);
9
+
10
+ menuItems$: Observable<MenuItem[]> = this._menuItems.asObservable();
11
+ menuMinimalized = false;
12
+
13
+ setMenu(items: MenuItem[]): void {
14
+ this.resetSidemenuState(items);
15
+ this._menuItems.next(items);
16
+ }
17
+
18
+ saveMinimalizedState(minimalized: boolean): void {
19
+ this.stateToken.minimalized = minimalized;
20
+ localStorage.setItem('SideMenuStateToken', JSON.stringify(this.stateToken));
21
+ }
22
+
23
+ saveExpandedState(item: MenuItem): void {
24
+ const expanded = this.stateToken.expanded?.find(
25
+ (i: string) => i === item.label
26
+ );
27
+
28
+ if (!expanded) {
29
+ this.stateToken.expanded?.push(item.label!);
30
+ localStorage.setItem(
31
+ 'SideMenuStateToken',
32
+ JSON.stringify(this.stateToken)
33
+ );
34
+ return;
35
+ }
36
+
37
+ this.stateToken.expanded = this.stateToken.expanded?.filter(
38
+ (i: string) => i !== item.label
39
+ );
40
+
41
+ localStorage.setItem('SideMenuStateToken', JSON.stringify(this.stateToken));
42
+ }
43
+
44
+ private resetSidemenuState(items: MenuItem[]) {
45
+ if (typeof this.stateToken === 'string') {
46
+ this.stateToken = JSON.parse(this.stateToken);
47
+ }
48
+
49
+ this.menuMinimalized = this.stateToken.minimalized;
50
+ const localStorageValue = this.stateToken.expanded;
51
+
52
+ if (!localStorageValue) return;
53
+ if (items) {
54
+ for (let index = 0; index < items.length; index++) {
55
+ const element = items[index];
56
+ element.expanded = !!localStorageValue.find(
57
+ (i: string) => i === element.label
58
+ );
59
+ }
60
+ }
61
+ }
62
+ }
@@ -0,0 +1,67 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+
4
+ export const MENU_TOKEN = new InjectionToken<MenuItem[]>(
5
+ 'MENU'
6
+ );
7
+
8
+ export const LOGO_ROUTER_ROUTE = new InjectionToken<string>(
9
+ 'LOGO_ROUTER_ROUTE'
10
+ );
11
+
12
+ export const SIDE_MENU_COMPONENT_TOKEN = new InjectionToken<SideMenuCore>(
13
+ 'SideMenuComponentToken'
14
+ );
15
+
16
+ export const SIDE_MENU_STATE_TOKEN = new InjectionToken<SideMenuState>(
17
+ 'SideMenuStateToken'
18
+ );
19
+
20
+ export interface SideMenuState {
21
+ expanded: string[];
22
+ minimalized: boolean;
23
+ }
24
+
25
+ export interface MenuItem {
26
+ id?: string;
27
+ label?: string | undefined;
28
+ icon?: string;
29
+ expanded?: boolean;
30
+ data?: MenuItemData;
31
+ tooltip?: string;
32
+ url?: string;
33
+ visible?: boolean | Observable<boolean>;
34
+ type?: string;
35
+ children?: MenuItem[];
36
+ routerLink?: any;
37
+ class?: string;
38
+ // eslint-disable-next-line @typescript-eslint/ban-types
39
+ command?: Function;
40
+ }
41
+
42
+ type ExtendableType = {
43
+ [key: string]:
44
+ | string
45
+ | number
46
+ | boolean
47
+ | string[]
48
+ | number[]
49
+ | boolean[]
50
+ | undefined;
51
+ };
52
+
53
+ export interface MenuItemData extends ExtendableType {
54
+ roles?: string[];
55
+ permissions?: string[];
56
+ }
57
+
58
+ export interface SideMenuModuleConfig {
59
+ items?: MenuItem[];
60
+ }
61
+
62
+ export interface SideMenuCore {
63
+ items: MenuItem[];
64
+ logoUrl: string;
65
+ userName: string;
66
+ userRole: any | any[] | undefined;
67
+ }
@@ -0,0 +1 @@
1
+ export * from './slider.model';
@@ -1,9 +1,13 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { BaseFormCore } from '../base-form';
3
- export declare const SLIDER_COMPONENT_TOKEN: InjectionToken<SliderCore>;
3
+
4
+ export const SLIDER_COMPONENT_TOKEN = new InjectionToken<SliderCore>(
5
+ 'SliderComponentToken'
6
+ );
7
+
4
8
  export interface SliderCore extends BaseFormCore {
5
9
  step: number;
6
10
  min: number;
7
11
  max: number;
8
12
  range: boolean;
9
- }
13
+ }
@@ -0,0 +1 @@
1
+ export * from './snackbar.model';
@@ -0,0 +1,7 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ export const SNACKBAR_COMPONENT_TOKEN = new InjectionToken<SnackbarCore>(
4
+ 'SnackbarComponentToken'
5
+ );
6
+
7
+ export type SnackbarCore = object
@@ -0,0 +1 @@
1
+ export * from './stepper.model';
@@ -1,19 +1,24 @@
1
1
  import { EventEmitter, InjectionToken, TemplateRef } from "@angular/core";
2
2
  import { FieldSizeType, LayoutTypeType } from "../../common";
3
- export declare const STEPPER_COMPONENT_TOKEN: InjectionToken<StepperCore>;
3
+
4
+ export const STEPPER_COMPONENT_TOKEN = new InjectionToken<StepperCore>(
5
+ 'StepperComponentToken'
6
+ );
7
+
4
8
  export interface StepperItem {
5
9
  header: string;
6
10
  template?: TemplateRef<any>;
7
11
  annotation?: string;
8
12
  prefix?: string;
9
13
  }
14
+
10
15
  export interface StepperCore {
11
- items: StepperItem[];
12
- layout: LayoutTypeType;
13
- activeIndexChange: EventEmitter<number>;
16
+ items: StepperItem[]
17
+ layout: LayoutTypeType
18
+ activeIndexChange: EventEmitter<number>
14
19
  size: FieldSizeType | undefined;
15
20
  icon: string;
16
21
  prefix: string;
17
22
  annotation: string;
18
23
  label: string;
19
- }
24
+ }
@@ -0,0 +1 @@
1
+ export * from './switch.model'
@@ -0,0 +1,8 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ import { BaseFormCore } from "../base-form";
3
+
4
+ export const SWITCH_COMPONENT_TOKEN = new InjectionToken<SwitchCore>(
5
+ 'SwitchComponentToken'
6
+ );
7
+
8
+ export type SwitchCore = BaseFormCore
@@ -0,0 +1 @@
1
+ export * from './tab-view.model'
@@ -1,17 +1,22 @@
1
1
  import { EventEmitter, InjectionToken, TemplateRef } from "@angular/core";
2
- export declare const TAB_VIEW_COMPONENT_TOKEN: InjectionToken<TabViewCore>;
2
+
3
+ export const TAB_VIEW_COMPONENT_TOKEN = new InjectionToken<TabViewCore>(
4
+ 'TabVIewComponentToken'
5
+ );
6
+
3
7
  export interface TabViewItemCore {
4
8
  title: string;
5
9
  url?: string;
6
10
  icon?: string;
7
11
  disabled?: boolean;
8
12
  content?: string;
9
- contentTemplate?: TemplateRef<unknown>;
13
+ contentTemplate?: TemplateRef<unknown>;
10
14
  }
15
+
11
16
  export interface TabViewCore {
12
17
  items: TabViewItemCore[];
13
18
  useRouting: boolean;
14
19
  activeIndex: number;
15
20
  activeIndexChange: EventEmitter<number>;
16
21
  url?: string;
17
- }
22
+ }
@@ -0,0 +1,38 @@
1
+ import { ColumnDefinition } from "./table.models";
2
+
3
+ export class ColumnConfiguration<TEntity> {
4
+ private column: Partial<ColumnDefinition<TEntity>> = {};
5
+
6
+ constructor(private id: string | keyof TEntity) {
7
+ this.column.id = id as string;
8
+ }
9
+
10
+ headerName(headerName: string | ((columnId: string, index?: number) => string)): this {
11
+ this.column.headerName = headerName;
12
+ return this;
13
+ }
14
+
15
+ sortable(sortable: boolean): this {
16
+ this.column.sortable = sortable;
17
+ return this;
18
+ }
19
+
20
+ columnClass(columnClass: string): this {
21
+ this.column.columnClass = columnClass;
22
+ return this;
23
+ }
24
+
25
+ valueFunction(value: (row: TEntity, index?: number) => string): this {
26
+ this.column.value = value;
27
+ return this;
28
+ }
29
+
30
+ type(type: string): this {
31
+ this.column.type = type;
32
+ return this;
33
+ }
34
+
35
+ build(): ColumnDefinition<TEntity> {
36
+ return this.column as ColumnDefinition<TEntity>;
37
+ }
38
+ }