tin-spa 14.0.1 → 14.4.2

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 (166) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/classes/Classes.mjs +32 -57
  3. package/esm2020/lib/classes/LibClasses.mjs +1 -2
  4. package/esm2020/lib/classes/TinCore.mjs +48 -206
  5. package/esm2020/lib/components/alert/alert.component.mjs +7 -21
  6. package/esm2020/lib/components/attach/attach.component.mjs +33 -49
  7. package/esm2020/lib/components/date/date.component.mjs +6 -8
  8. package/esm2020/lib/components/email/email.component.mjs +17 -19
  9. package/esm2020/lib/components/form/form.component.mjs +56 -144
  10. package/esm2020/lib/components/label/label.component.mjs +3 -9
  11. package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +3 -3
  12. package/esm2020/lib/components/money/money.component.mjs +9 -26
  13. package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +27 -31
  14. package/esm2020/lib/components/number/number.component.mjs +8 -23
  15. package/esm2020/lib/components/option/option.component.mjs +14 -36
  16. package/esm2020/lib/components/search/search.component.mjs +5 -10
  17. package/esm2020/lib/components/select/select.component.mjs +129 -56
  18. package/esm2020/lib/components/steps/steps.component.mjs +61 -83
  19. package/esm2020/lib/components/table/detailsDialog.component.mjs +41 -205
  20. package/esm2020/lib/components/table/table.component.mjs +111 -136
  21. package/esm2020/lib/components/table-action/table-action.component.mjs +8 -42
  22. package/esm2020/lib/components/table-header/table-header.component.mjs +10 -14
  23. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +39 -205
  24. package/esm2020/lib/components/table-internal/table-internal.component.mjs +112 -138
  25. package/esm2020/lib/components/table-row/table-row.component.mjs +4 -23
  26. package/esm2020/lib/components/text/text.component.mjs +46 -110
  27. package/esm2020/lib/components/tiles/tiles.component.mjs +20 -32
  28. package/esm2020/lib/components/viewer/viewer.component.mjs +3 -7
  29. package/esm2020/lib/components/viewer/viewerDialog.component.mjs +13 -20
  30. package/esm2020/lib/modules/admin/admin-routing.module.mjs +1 -11
  31. package/esm2020/lib/pages/accounts/accountDialog.component.mjs +1 -1
  32. package/esm2020/lib/pages/bug/bug.component.mjs +3 -3
  33. package/esm2020/lib/pages/change-password/change-password.component.mjs +1 -1
  34. package/esm2020/lib/pages/create-account/create-account.component.mjs +1 -1
  35. package/esm2020/lib/pages/customers/customers.component.mjs +48 -9
  36. package/esm2020/lib/pages/departments/departments.component.mjs +4 -2
  37. package/esm2020/lib/pages/employees/employees.component.mjs +4 -3
  38. package/esm2020/lib/pages/grades/grades.component.mjs +3 -3
  39. package/esm2020/lib/pages/inventory/inventory.component.mjs +3 -3
  40. package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +1 -1
  41. package/esm2020/lib/pages/invitations/invitations.component.mjs +14 -0
  42. package/esm2020/lib/pages/invitations-table/invitations-table.component.mjs +10 -11
  43. package/esm2020/lib/pages/login/login.component.mjs +14 -52
  44. package/esm2020/lib/pages/logs/logs.component.mjs +22 -27
  45. package/esm2020/lib/pages/membership/membership.component.mjs +19 -15
  46. package/esm2020/lib/pages/notifications/notifications.component.mjs +6 -82
  47. package/esm2020/lib/pages/plans/plans.component.mjs +19 -16
  48. package/esm2020/lib/pages/positions/positions.component.mjs +4 -4
  49. package/esm2020/lib/pages/profile/profile.component.mjs +3 -4
  50. package/esm2020/lib/pages/recover-account/recover-account.component.mjs +1 -1
  51. package/esm2020/lib/pages/roles/addRoleDialog.component.mjs +2 -2
  52. package/esm2020/lib/pages/roles/roles.component.mjs +17 -77
  53. package/esm2020/lib/pages/settings/settings.component.mjs +13 -5
  54. package/esm2020/lib/pages/signup/signup.component.mjs +1 -1
  55. package/esm2020/lib/pages/suppliers/suppliers.component.mjs +31 -3
  56. package/esm2020/lib/pages/tasks/tasks.component.mjs +9 -9
  57. package/esm2020/lib/pages/tenant-settings/inviteDialog.component.mjs +60 -0
  58. package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +72 -145
  59. package/esm2020/lib/pages/tenants/tenants.component.mjs +10 -10
  60. package/esm2020/lib/pages/transactions/transactDialog.component.mjs +1 -1
  61. package/esm2020/lib/pages/transactions/transactions.component.mjs +3 -3
  62. package/esm2020/lib/pages/users/users.component.mjs +92 -141
  63. package/esm2020/lib/pages/welcome/welcome.component.mjs +9 -9
  64. package/esm2020/lib/services/button.service.mjs +32 -92
  65. package/esm2020/lib/services/csv.service.mjs +1 -1
  66. package/esm2020/lib/services/datalib.service.mjs +78 -551
  67. package/esm2020/lib/services/dialog.service.mjs +7 -51
  68. package/esm2020/lib/services/table-config.service.mjs +7 -55
  69. package/esm2020/lib/tin-spa.module.mjs +11 -48
  70. package/esm2020/public-api.mjs +1 -10
  71. package/fesm2015/tin-spa.mjs +2605 -6538
  72. package/fesm2015/tin-spa.mjs.map +1 -1
  73. package/fesm2020/tin-spa.mjs +2501 -6482
  74. package/fesm2020/tin-spa.mjs.map +1 -1
  75. package/lib/classes/Classes.d.ts +129 -267
  76. package/lib/classes/LibClasses.d.ts +0 -1
  77. package/lib/classes/TinCore.d.ts +4 -13
  78. package/lib/components/alert/alert.component.d.ts +3 -4
  79. package/lib/components/attach/attach.component.d.ts +6 -13
  80. package/lib/components/date/date.component.d.ts +1 -1
  81. package/lib/components/email/email.component.d.ts +3 -4
  82. package/lib/components/form/form.component.d.ts +11 -20
  83. package/lib/components/label/label.component.d.ts +1 -3
  84. package/lib/components/money/money.component.d.ts +1 -8
  85. package/lib/components/nav-menu/nav-menu.component.d.ts +2 -6
  86. package/lib/components/number/number.component.d.ts +1 -7
  87. package/lib/components/option/option.component.d.ts +2 -10
  88. package/lib/components/search/search.component.d.ts +1 -3
  89. package/lib/components/select/select.component.d.ts +37 -16
  90. package/lib/components/steps/steps.component.d.ts +9 -18
  91. package/lib/components/table/detailsDialog.component.d.ts +7 -29
  92. package/lib/components/table/table.component.d.ts +9 -15
  93. package/lib/components/table-action/table-action.component.d.ts +1 -4
  94. package/lib/components/table-header/table-header.component.d.ts +1 -3
  95. package/lib/components/table-internal/detailsDialog-internal.component.d.ts +7 -29
  96. package/lib/components/table-internal/table-internal.component.d.ts +9 -15
  97. package/lib/components/table-row/table-row.component.d.ts +1 -4
  98. package/lib/components/text/text.component.d.ts +8 -21
  99. package/lib/components/tiles/tiles.component.d.ts +3 -4
  100. package/lib/components/viewer/viewerDialog.component.d.ts +1 -3
  101. package/lib/pages/customers/customers.component.d.ts +8 -2
  102. package/lib/pages/invitations/invitations.component.d.ts +8 -0
  103. package/lib/pages/invitations-table/invitations-table.component.d.ts +1 -1
  104. package/lib/pages/login/login.component.d.ts +1 -7
  105. package/lib/pages/logs/logs.component.d.ts +6 -2
  106. package/lib/pages/membership/membership.component.d.ts +6 -2
  107. package/lib/pages/notifications/notifications.component.d.ts +1 -9
  108. package/lib/pages/plans/plans.component.d.ts +6 -2
  109. package/lib/pages/roles/roles.component.d.ts +2 -14
  110. package/lib/pages/suppliers/suppliers.component.d.ts +4 -1
  111. package/lib/pages/tasks/tasks.component.d.ts +1 -1
  112. package/lib/pages/tenant-settings/inviteDialog.component.d.ts +28 -0
  113. package/lib/pages/tenant-settings/tenant-settings.component.d.ts +7 -12
  114. package/lib/pages/tenants/tenants.component.d.ts +2 -2
  115. package/lib/pages/users/users.component.d.ts +16 -8
  116. package/lib/services/button.service.d.ts +8 -11
  117. package/lib/services/datalib.service.d.ts +10 -57
  118. package/lib/services/dialog.service.d.ts +2 -3
  119. package/lib/services/table-config.service.d.ts +1 -9
  120. package/lib/tin-spa.module.d.ts +33 -52
  121. package/package.json +1 -1
  122. package/public-api.d.ts +0 -9
  123. package/esm2020/lib/components/capsules/capsules.component.mjs +0 -63
  124. package/esm2020/lib/components/cards/cards.component.mjs +0 -103
  125. package/esm2020/lib/components/html/html.component.mjs +0 -34
  126. package/esm2020/lib/components/multi-select/multi-select.component.mjs +0 -165
  127. package/esm2020/lib/components/multi-text/multi-text.component.mjs +0 -208
  128. package/esm2020/lib/components/notes/notes.component.mjs +0 -62
  129. package/esm2020/lib/components/page/page.component.mjs +0 -101
  130. package/esm2020/lib/components/select-bitwise/select-bitwise.component.mjs +0 -87
  131. package/esm2020/lib/components/select-common/select-common.component.mjs +0 -206
  132. package/esm2020/lib/components/select-internal/select-internal.component.mjs +0 -75
  133. package/esm2020/lib/components/select-lite/select-lite.component.mjs +0 -18
  134. package/esm2020/lib/components/statuses/statuses.component.mjs +0 -44
  135. package/esm2020/lib/components/suffix/suffix.component.mjs +0 -70
  136. package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +0 -404
  137. package/esm2020/lib/components/table-lite/table-lite.component.mjs +0 -441
  138. package/esm2020/lib/components/tabs/tabs.component.mjs +0 -74
  139. package/esm2020/lib/pages/app-models/app-models.component.mjs +0 -56
  140. package/esm2020/lib/pages/approvals/approvals.component.mjs +0 -19
  141. package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +0 -165
  142. package/esm2020/lib/pages/notifications-config/notifications-config.component.mjs +0 -113
  143. package/esm2020/lib/select-context.directive.mjs +0 -23
  144. package/esm2020/lib/services/notifications.service.mjs +0 -33
  145. package/lib/components/capsules/capsules.component.d.ts +0 -26
  146. package/lib/components/cards/cards.component.d.ts +0 -39
  147. package/lib/components/html/html.component.d.ts +0 -16
  148. package/lib/components/multi-select/multi-select.component.d.ts +0 -47
  149. package/lib/components/multi-text/multi-text.component.d.ts +0 -56
  150. package/lib/components/notes/notes.component.d.ts +0 -19
  151. package/lib/components/page/page.component.d.ts +0 -38
  152. package/lib/components/select-bitwise/select-bitwise.component.d.ts +0 -31
  153. package/lib/components/select-common/select-common.component.d.ts +0 -53
  154. package/lib/components/select-internal/select-internal.component.d.ts +0 -23
  155. package/lib/components/select-lite/select-lite.component.d.ts +0 -8
  156. package/lib/components/statuses/statuses.component.d.ts +0 -12
  157. package/lib/components/suffix/suffix.component.d.ts +0 -23
  158. package/lib/components/table-lite/detailsDialog-lite.component.d.ts +0 -86
  159. package/lib/components/table-lite/table-lite.component.d.ts +0 -91
  160. package/lib/components/tabs/tabs.component.d.ts +0 -32
  161. package/lib/pages/app-models/app-models.component.d.ts +0 -15
  162. package/lib/pages/approvals/approvals.component.d.ts +0 -10
  163. package/lib/pages/approvals-config/approvals-config.component.d.ts +0 -24
  164. package/lib/pages/notifications-config/notifications-config.component.d.ts +0 -17
  165. package/lib/select-context.directive.d.ts +0 -10
  166. package/lib/services/notifications.service.d.ts +0 -12
@@ -1,21 +1,18 @@
1
- import { Action, AppConfig, Button, CapItem, DetailsDialogConfig, FormConfig, TableConfig } from '../classes/Classes';
1
+ import { Action, AppConfig, Button, CapItem, FormConfig, TableConfig } from '../classes/Classes';
2
2
  import { Observable } from 'rxjs';
3
3
  import { HttpService } from './http.service';
4
4
  import { ActivatedRoute, Router } from '@angular/router';
5
5
  import { User } from '../classes/LibClasses';
6
- import { AuthService } from './auth.service';
7
6
  import * as i0 from "@angular/core";
8
7
  export declare class DataServiceLib {
9
8
  private httpService;
10
9
  router: Router;
11
10
  private route;
12
- private authService;
13
- constructor(httpService: HttpService, router: Router, route: ActivatedRoute, authService: AuthService);
11
+ constructor(httpService: HttpService, router: Router, route: ActivatedRoute);
14
12
  appConfig: AppConfig;
15
13
  private appConfigSource;
16
14
  appConfigObserv: Observable<AppConfig>;
17
15
  UpdateAppConfig(config: AppConfig): void;
18
- myRole: any;
19
16
  capHome: CapItem;
20
17
  capAdmin: CapItem;
21
18
  capUsers: CapItem;
@@ -37,67 +34,23 @@ export declare class DataServiceLib {
37
34
  capDepartments: CapItem;
38
35
  capPositions: CapItem;
39
36
  capGrades: CapItem;
40
- capApprovals: CapItem;
41
- capApprovalsConfig: CapItem;
42
- capNotifications: CapItem;
43
- capSelfApproval: CapItem;
44
- capAppModels: CapItem;
45
- capNotificationsConfig: CapItem;
46
37
  tmpProfileuserName: string;
47
38
  isProcessing: boolean;
48
- departmentFormConfig: FormConfig;
49
- editDepartmentButton: Button;
50
- departmentDetailsConfig: DetailsDialogConfig;
51
- positionFormConfig: FormConfig;
52
- editPositionButton: Button;
53
- positionDetailsConfig: DetailsDialogConfig;
39
+ loadEmployeesMeta(): void;
54
40
  genders: {
55
41
  name: string;
56
42
  value: number;
57
43
  }[];
58
44
  employeeFormConfig: FormConfig;
59
- employeesTableConfig: TableConfig;
60
- positionsTableConfig: TableConfig;
45
+ employeeTableConfig: TableConfig;
46
+ loadPositionMeta(): void;
47
+ positionFormConfig: FormConfig;
48
+ editPositionButton: Button;
49
+ positionTableConfig: TableConfig;
50
+ departmentFormConfig: FormConfig;
51
+ editDepartmentButton: Button;
61
52
  departmentTableConfig: TableConfig;
62
- contactPersonFormConfig: FormConfig;
63
- contactPersonTableConfig: TableConfig;
64
- customerFormConfig: FormConfig;
65
- customerCreateButton: Button;
66
- customerEditButton: Button;
67
- customerDetailsConfig: DetailsDialogConfig;
68
- customersTableConfig: TableConfig;
69
- supplierFormConfig: FormConfig;
70
- supplierCreateButton: Button;
71
- supplierEditButton: Button;
72
- supplierDetailsConfig: DetailsDialogConfig;
73
- suppliersTableConfig: TableConfig;
74
- notificationOptions: {
75
- name: string;
76
- value: number;
77
- }[];
78
- approvalHistoryFormConfig: FormConfig;
79
- approvalHistoryTableConfig: TableConfig;
80
- approvalFormConfig: FormConfig;
81
- approvalActionFormConfig: FormConfig;
82
- approveActionDetailsConfig: DetailsDialogConfig;
83
- declineActionDetailsConfig: DetailsDialogConfig;
84
- approveButton: Button;
85
- declineButton: Button;
86
- cancelButton: Button;
87
- approvalDetailsConfig: DetailsDialogConfig;
88
- viewApprovalButton: Button;
89
- receivedApprovalsTableConfig: TableConfig;
90
- sentApprovalsTableConfig: TableConfig;
91
- private listCache;
92
- private cacheTimestamps;
93
- private ongoingRequests;
94
53
  CallApi(action: Action, data?: any): Observable<any>;
95
- private handleCachedCall;
96
- private generateCacheKey;
97
- private isCacheValid;
98
- private getCacheDuration;
99
- ClearCache(): void;
100
- invalidateListCache(entityUrl: string): void;
101
54
  CheckWelcomed(path?: string): void;
102
55
  Navigate(path: string): void;
103
56
  NavigateWithValue(path: string, value: string): void;
@@ -1,6 +1,6 @@
1
1
  import { MatDialog, MatDialogRef } from '@angular/material/dialog';
2
2
  import { Observable } from 'rxjs';
3
- import { Button, DetailsDialogConfig } from '../classes/Classes';
3
+ import { Column, DetailsDialogConfig, TableConfig } from '../classes/Classes';
4
4
  import { BreakpointObserver } from '@angular/cdk/layout';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class DialogService {
@@ -13,8 +13,7 @@ export declare class DialogService {
13
13
  inputChange: Observable<any>;
14
14
  dialogRef: MatDialogRef<T>;
15
15
  };
16
- openConfiguredDetailsDialog<T>(button: Button, row: any, dialogComponent: new (...args: any[]) => T): Observable<any>;
17
- openPrintDialog(htmlContent: any): void;
16
+ openConfiguredDetailsDialog<T>(buttonName: string, row: any, config: TableConfig | DetailsDialogConfig, dialogComponent: new (...args: any[]) => T, column?: Column): Observable<any>;
18
17
  static ɵfac: i0.ɵɵFactoryDeclaration<DialogService, never>;
19
18
  static ɵprov: i0.ɵɵInjectableDeclaration<DialogService>;
20
19
  }
@@ -1,17 +1,9 @@
1
1
  import { Button, Column, TableConfig } from '../classes/Classes';
2
- import { DataServiceLib } from './datalib.service';
3
- import { AuthService } from './auth.service';
4
2
  import * as i0 from "@angular/core";
5
3
  export declare class TableConfigService {
6
- private dataService;
7
- private authService;
8
- constructor(dataService: DataServiceLib, authService: AuthService);
9
4
  setColumns(config: TableConfig, smallScreen: boolean): string[];
10
5
  getVisibleColumns(config: TableConfig): Column[];
11
- getActionsWidth(buttons: Button[], smallScreen: boolean, config: TableConfig): string;
12
- getDisplayedButtons(buttons: Button[], isSmallScreen: boolean, config: TableConfig): Button[];
13
- hasTableAccess(config: TableConfig): boolean;
14
- getVisibleTableConfigs(tableConfigs: TableConfig[]): TableConfig[];
6
+ getActionsWidth(buttons: Button[]): string;
15
7
  static ɵfac: i0.ɵɵFactoryDeclaration<TableConfigService, never>;
16
8
  static ɵprov: i0.ɵɵInjectableDeclaration<TableConfigService>;
17
9
  }
@@ -28,59 +28,40 @@ import * as i26 from "./components/search/search.component";
28
28
  import * as i27 from "./components/viewer/viewer.component";
29
29
  import * as i28 from "./components/viewer/viewerDialog.component";
30
30
  import * as i29 from "./pages/tenant-settings/tenant-settings.component";
31
- import * as i30 from "./pages/tenants/tenants.component";
32
- import * as i31 from "./pages/bug/bug.component";
33
- import * as i32 from "./pages/membership/membership.component";
34
- import * as i33 from "./pages/plans/plans.component";
35
- import * as i34 from "./pages/customers/customers.component";
36
- import * as i35 from "./pages/inventory/inventory.component";
37
- import * as i36 from "./pages/inventory/quantityDialog.component";
38
- import * as i37 from "./pages/accounts/accounts.component";
39
- import * as i38 from "./pages/accounts/accountDialog.component";
40
- import * as i39 from "./pages/suppliers/suppliers.component";
41
- import * as i40 from "./pages/transactions/transactions.component";
42
- import * as i41 from "./pages/transactions/transactDialog.component";
43
- import * as i42 from "./components/list-dialog/list-dialog.component";
44
- import * as i43 from "./pages/tasks/tasks.component";
45
- import * as i44 from "./pages/departments/departments.component";
46
- import * as i45 from "./pages/employees/employees.component";
47
- import * as i46 from "./pages/positions/positions.component";
48
- import * as i47 from "./pages/grades/grades.component";
49
- import * as i48 from "./pages/welcome/welcome.component";
50
- import * as i49 from "./pages/notifications/notifications.component";
51
- import * as i50 from "./pages/invitations-table/invitations-table.component";
52
- import * as i51 from "./components/table-header/table-header.component";
53
- import * as i52 from "./components/table-row/table-row.component";
54
- import * as i53 from "./components/table-action/table-action.component";
55
- import * as i54 from "./components/alert/alert.component";
56
- import * as i55 from "./components/email/email.component";
57
- import * as i56 from "./components/page/page.component";
58
- import * as i57 from "./components/select-common/select-common.component";
59
- import * as i58 from "./components/select-internal/select-internal.component";
60
- import * as i59 from "./components/suffix/suffix.component";
61
- import * as i60 from "./select-context.directive";
62
- import * as i61 from "./components/select-lite/select-lite.component";
63
- import * as i62 from "./components/table-lite/table-lite.component";
64
- import * as i63 from "./components/table-lite/detailsDialog-lite.component";
65
- import * as i64 from "./pages/approvals/approvals.component";
66
- import * as i65 from "./pages/approvals-config/approvals-config.component";
67
- import * as i66 from "./components/multi-text/multi-text.component";
68
- import * as i67 from "./components/multi-select/multi-select.component";
69
- import * as i68 from "./components/select-bitwise/select-bitwise.component";
70
- import * as i69 from "./pages/app-models/app-models.component";
71
- import * as i70 from "./pages/notifications-config/notifications-config.component";
72
- import * as i71 from "./components/html/html.component";
73
- import * as i72 from "./components/notes/notes.component";
74
- import * as i73 from "./components/capsules/capsules.component";
75
- import * as i74 from "./components/cards/cards.component";
76
- import * as i75 from "./components/tabs/tabs.component";
77
- import * as i76 from "./components/statuses/statuses.component";
78
- import * as i77 from "./modules/spa-mat.module";
79
- import * as i78 from "@angular/common/http";
80
- import * as i79 from "./components/money/currency-input-mask.module";
81
- import * as i80 from "ngx-doc-viewer";
31
+ import * as i30 from "./pages/tenant-settings/inviteDialog.component";
32
+ import * as i31 from "./pages/tenants/tenants.component";
33
+ import * as i32 from "./pages/bug/bug.component";
34
+ import * as i33 from "./pages/membership/membership.component";
35
+ import * as i34 from "./pages/plans/plans.component";
36
+ import * as i35 from "./pages/customers/customers.component";
37
+ import * as i36 from "./pages/inventory/inventory.component";
38
+ import * as i37 from "./pages/inventory/quantityDialog.component";
39
+ import * as i38 from "./pages/accounts/accounts.component";
40
+ import * as i39 from "./pages/accounts/accountDialog.component";
41
+ import * as i40 from "./pages/suppliers/suppliers.component";
42
+ import * as i41 from "./pages/transactions/transactions.component";
43
+ import * as i42 from "./pages/transactions/transactDialog.component";
44
+ import * as i43 from "./components/list-dialog/list-dialog.component";
45
+ import * as i44 from "./pages/tasks/tasks.component";
46
+ import * as i45 from "./pages/departments/departments.component";
47
+ import * as i46 from "./pages/employees/employees.component";
48
+ import * as i47 from "./pages/positions/positions.component";
49
+ import * as i48 from "./pages/grades/grades.component";
50
+ import * as i49 from "./pages/welcome/welcome.component";
51
+ import * as i50 from "./pages/invitations/invitations.component";
52
+ import * as i51 from "./pages/notifications/notifications.component";
53
+ import * as i52 from "./pages/invitations-table/invitations-table.component";
54
+ import * as i53 from "./components/table-header/table-header.component";
55
+ import * as i54 from "./components/table-row/table-row.component";
56
+ import * as i55 from "./components/table-action/table-action.component";
57
+ import * as i56 from "./components/alert/alert.component";
58
+ import * as i57 from "./components/email/email.component";
59
+ import * as i58 from "./modules/spa-mat.module";
60
+ import * as i59 from "@angular/common/http";
61
+ import * as i60 from "./components/money/currency-input-mask.module";
62
+ import * as i61 from "ngx-doc-viewer";
82
63
  export declare class TinSpaModule {
83
64
  static ɵfac: i0.ɵɵFactoryDeclaration<TinSpaModule, never>;
84
- static ɵmod: i0.ɵɵNgModuleDeclaration<TinSpaModule, [typeof i1.TinSpaComponent, typeof i2.TextComponent, typeof i3.CheckComponent, typeof i4.DateComponent, typeof i5.DatetimeComponent, typeof i6.LabelComponent, typeof i7.SelectComponent, typeof i8.ActivityComponent, typeof i9.FilterComponent, typeof i10.messageDialog, typeof i11.MoneyComponent, typeof i12.OptionComponent, typeof i13.TilesComponent, typeof i14.StepsComponent, typeof i15.AttachComponent, typeof i16.ChipsComponent, typeof i17.LoaderComponent, typeof i18.NavMenuComponent, typeof i19.TableComponent, typeof i20.TableInternalComponent, typeof i21.DetailsDialog, typeof i22.DetailsDialogInternal, typeof i23.FormComponent, typeof i24.CamelToWordsPipe, typeof i25.NumberComponent, typeof i26.SearchComponent, typeof i27.ViewerComponent, typeof i28.viewerDialog, typeof i29.TenantSettingsComponent, typeof i30.TenantsComponent, typeof i31.BugComponent, typeof i32.MembershipComponent, typeof i33.PlansComponent, typeof i34.CustomersComponent, typeof i35.InventoryComponent, typeof i36.quantityDialog, typeof i37.AccountsComponent, typeof i38.accountDialog, typeof i39.SuppliersComponent, typeof i40.TransactionsComponent, typeof i41.transactDialog, typeof i42.ListDialogComponent, typeof i43.TasksComponent, typeof i44.DepartmentsComponent, typeof i45.EmployeesComponent, typeof i46.PositionsComponent, typeof i47.GradesComponent, typeof i48.WelcomeComponent, typeof i49.NotificationsComponent, typeof i50.InvitationsTableComponent, typeof i51.TableHeaderComponent, typeof i52.TableRowComponent, typeof i53.TableActionComponent, typeof i54.AlertComponent, typeof i55.EmailComponent, typeof i56.PageComponent, typeof i57.SelectCommonComponent, typeof i58.SelectInternalComponent, typeof i59.SuffixComponent, typeof i60.SelectContextDirective, typeof i61.SelectLiteComponent, typeof i62.TableLiteComponent, typeof i63.DetailsDialogLite, typeof i64.ApprovalsComponent, typeof i65.ApprovalsConfigComponent, typeof i66.MultiTextComponent, typeof i67.MultiSelectComponent, typeof i68.SelectBitwiseComponent, typeof i69.AppModelsComponent, typeof i70.NotificationsConfigComponent, typeof i71.HtmlComponent, typeof i72.NotesComponent, typeof i73.CapsulesComponent, typeof i74.CardsComponent, typeof i75.TabsComponent, typeof i76.StatusesComponent], [typeof i77.SpaMatModule, typeof i78.HttpClientModule, typeof i79.CurrencyInputModule, typeof i80.NgxDocViewerModule], [typeof i1.TinSpaComponent, typeof i77.SpaMatModule, typeof i54.AlertComponent, typeof i2.TextComponent, typeof i66.MultiTextComponent, typeof i10.messageDialog, typeof i18.NavMenuComponent, typeof i17.LoaderComponent, typeof i13.TilesComponent, typeof i4.DateComponent, typeof i7.SelectComponent, typeof i68.SelectBitwiseComponent, typeof i67.MultiSelectComponent, typeof i5.DatetimeComponent, typeof i3.CheckComponent, typeof i15.AttachComponent, typeof i11.MoneyComponent, typeof i16.ChipsComponent, typeof i8.ActivityComponent, typeof i12.OptionComponent, typeof i6.LabelComponent, typeof i14.StepsComponent, typeof i9.FilterComponent, typeof i19.TableComponent, typeof i21.DetailsDialog, typeof i23.FormComponent, typeof i25.NumberComponent, typeof i26.SearchComponent, typeof i27.ViewerComponent, typeof i28.viewerDialog, typeof i42.ListDialogComponent, typeof i34.CustomersComponent, typeof i37.AccountsComponent, typeof i35.InventoryComponent, typeof i39.SuppliersComponent, typeof i40.TransactionsComponent, typeof i42.ListDialogComponent, typeof i43.TasksComponent, typeof i44.DepartmentsComponent, typeof i45.EmployeesComponent, typeof i46.PositionsComponent, typeof i47.GradesComponent, typeof i48.WelcomeComponent, typeof i55.EmailComponent, typeof i56.PageComponent, typeof i71.HtmlComponent, typeof i72.NotesComponent, typeof i73.CapsulesComponent, typeof i75.TabsComponent, typeof i76.StatusesComponent]>;
65
+ static ɵmod: i0.ɵɵNgModuleDeclaration<TinSpaModule, [typeof i1.TinSpaComponent, typeof i2.TextComponent, typeof i3.CheckComponent, typeof i4.DateComponent, typeof i5.DatetimeComponent, typeof i6.LabelComponent, typeof i7.SelectComponent, typeof i8.ActivityComponent, typeof i9.FilterComponent, typeof i10.messageDialog, typeof i11.MoneyComponent, typeof i12.OptionComponent, typeof i13.TilesComponent, typeof i14.StepsComponent, typeof i15.AttachComponent, typeof i16.ChipsComponent, typeof i17.LoaderComponent, typeof i18.NavMenuComponent, typeof i19.TableComponent, typeof i20.TableInternalComponent, typeof i21.DetailsDialog, typeof i22.DetailsDialogInternal, typeof i23.FormComponent, typeof i24.CamelToWordsPipe, typeof i25.NumberComponent, typeof i26.SearchComponent, typeof i27.ViewerComponent, typeof i28.viewerDialog, typeof i29.TenantSettingsComponent, typeof i30.inviteDialog, typeof i31.TenantsComponent, typeof i32.BugComponent, typeof i33.MembershipComponent, typeof i34.PlansComponent, typeof i35.CustomersComponent, typeof i36.InventoryComponent, typeof i37.quantityDialog, typeof i38.AccountsComponent, typeof i39.accountDialog, typeof i40.SuppliersComponent, typeof i41.TransactionsComponent, typeof i42.transactDialog, typeof i43.ListDialogComponent, typeof i44.TasksComponent, typeof i45.DepartmentsComponent, typeof i46.EmployeesComponent, typeof i47.PositionsComponent, typeof i48.GradesComponent, typeof i49.WelcomeComponent, typeof i50.InvitationsComponent, typeof i51.NotificationsComponent, typeof i52.InvitationsTableComponent, typeof i53.TableHeaderComponent, typeof i54.TableRowComponent, typeof i55.TableActionComponent, typeof i56.AlertComponent, typeof i57.EmailComponent], [typeof i58.SpaMatModule, typeof i59.HttpClientModule, typeof i60.CurrencyInputModule, typeof i61.NgxDocViewerModule], [typeof i1.TinSpaComponent, typeof i58.SpaMatModule, typeof i56.AlertComponent, typeof i2.TextComponent, typeof i10.messageDialog, typeof i18.NavMenuComponent, typeof i17.LoaderComponent, typeof i13.TilesComponent, typeof i4.DateComponent, typeof i7.SelectComponent, typeof i5.DatetimeComponent, typeof i3.CheckComponent, typeof i15.AttachComponent, typeof i11.MoneyComponent, typeof i16.ChipsComponent, typeof i8.ActivityComponent, typeof i12.OptionComponent, typeof i6.LabelComponent, typeof i14.StepsComponent, typeof i9.FilterComponent, typeof i19.TableComponent, typeof i21.DetailsDialog, typeof i23.FormComponent, typeof i25.NumberComponent, typeof i26.SearchComponent, typeof i27.ViewerComponent, typeof i28.viewerDialog, typeof i43.ListDialogComponent, typeof i35.CustomersComponent, typeof i38.AccountsComponent, typeof i36.InventoryComponent, typeof i40.SuppliersComponent, typeof i41.TransactionsComponent, typeof i43.ListDialogComponent, typeof i44.TasksComponent, typeof i45.DepartmentsComponent, typeof i46.EmployeesComponent, typeof i47.PositionsComponent, typeof i48.GradesComponent, typeof i49.WelcomeComponent, typeof i57.EmailComponent]>;
85
66
  static ɵinj: i0.ɵɵInjectorDeclaration<TinSpaModule>;
86
67
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tin-spa",
3
- "version": "14.0.1",
3
+ "version": "14.4.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.2.0",
6
6
  "@angular/core": "^14.2.0"
package/public-api.d.ts CHANGED
@@ -23,12 +23,9 @@ export * from './lib/components/tiles/tiles.component';
23
23
  export * from './lib/components/alert/alert.component';
24
24
  export * from './lib/components/date/date.component';
25
25
  export * from './lib/components/text/text.component';
26
- export * from './lib/components/multi-text/multi-text.component';
27
26
  export * from './lib/components/label/label.component';
28
27
  export * from './lib/components/datetime/datetime.component';
29
28
  export * from './lib/components/select/select.component';
30
- export * from './lib/components/multi-select/multi-select.component';
31
- export * from './lib/components/select-bitwise/select-bitwise.component';
32
29
  export * from './lib/components/attach/attach.component';
33
30
  export * from './lib/components/check/check.component';
34
31
  export * from './lib/components/money/money.component';
@@ -49,12 +46,6 @@ export * from './lib/components/viewer/viewerDialog.component';
49
46
  export * from './lib/components/nav-menu/nav-menu.component';
50
47
  export * from './lib/components/list-dialog/list-dialog.component';
51
48
  export * from './lib/components/email/email.component';
52
- export * from './lib/components/page/page.component';
53
- export * from './lib/components/html/html.component';
54
- export * from './lib/components/notes/notes.component';
55
- export * from './lib/components/capsules/capsules.component';
56
- export * from './lib/components/tabs/tabs.component';
57
- export * from './lib/components/statuses/statuses.component';
58
49
  export * from './lib/pages/transactions/transactions.component';
59
50
  export * from './lib/pages/tasks/tasks.component';
60
51
  export * from './lib/pages/departments/departments.component';
@@ -1,63 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../services/button.service";
4
- import * as i2 from "../../services/condition.service";
5
- import * as i3 from "@angular/common";
6
- import * as i4 from "@angular/material/menu";
7
- import * as i5 from "@angular/material/icon";
8
- import * as i6 from "@angular/material/chips";
9
- export class CapsulesComponent {
10
- constructor(buttonService, conditionService) {
11
- this.buttonService = buttonService;
12
- this.conditionService = conditionService;
13
- this.displayedButtons = [];
14
- this.actionClick = new EventEmitter();
15
- }
16
- // Extract display value based on config
17
- getDisplayValue(row) {
18
- if (!this.config?.capsuleConfig?.displayField) {
19
- return '';
20
- }
21
- return row[this.config.capsuleConfig.displayField];
22
- }
23
- // Check icon visibility condition
24
- testIconCondition(row, icon) {
25
- return this.conditionService.testIconCondition(icon, row);
26
- }
27
- // Handle button click from menu
28
- onActionClick(buttonName, row) {
29
- this.actionClick.emit({ name: buttonName, row });
30
- }
31
- // Get button color using service
32
- getButtonColor(button, row) {
33
- return this.buttonService.getButtonColor(button, row);
34
- }
35
- // Get icon for button using service
36
- getIcon(buttonName) {
37
- return this.buttonService.getIcon(this.getButton(buttonName), this.config);
38
- }
39
- // Test if button should be disabled
40
- testDisabled(row, buttonName) {
41
- const button = this.getButton(buttonName);
42
- return this.buttonService.testDisabled(button, row, this.config);
43
- }
44
- // Get button by name
45
- getButton(name) {
46
- return this.displayedButtons?.find(x => x.name === name) || null;
47
- }
48
- }
49
- CapsulesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CapsulesComponent, deps: [{ token: i1.ButtonService }, { token: i2.ConditionService }], target: i0.ɵɵFactoryTarget.Component });
50
- CapsulesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CapsulesComponent, selector: "spa-capsules", inputs: { config: "config", dataSource: "dataSource", displayedButtons: "displayedButtons" }, outputs: { actionClick: "actionClick" }, ngImport: i0, template: "<mat-chip-list>\r\n <mat-chip *ngFor=\"let row of dataSource\" [matMenuTriggerFor]=\"itemMenu\" [matMenuTriggerData]=\"{item: row}\">\r\n <!-- Left icons -->\r\n <ng-container *ngFor=\"let icon of config.capsuleConfig?.leftIcons\">\r\n <mat-icon *ngIf=\"testIconCondition(row, icon)\" \r\n [ngStyle]=\"{'color': icon?.color}\" \r\n style=\"font-size: 18px; padding-top: 3px; margin-right: 5px;\">\r\n {{icon.name}}\r\n </mat-icon>\r\n </ng-container>\r\n \r\n <!-- Display text -->\r\n <label style=\"margin-right: 5px;\">{{getDisplayValue(row)}}</label>\r\n \r\n <!-- Right icons -->\r\n <ng-container *ngFor=\"let icon of config.capsuleConfig?.rightIcons\">\r\n <mat-icon *ngIf=\"testIconCondition(row, icon)\" \r\n [ngStyle]=\"{'color': icon?.color}\" \r\n style=\"font-size: 18px; padding-top: 3px; margin-left: 5px;\">\r\n {{icon.name}}\r\n </mat-icon>\r\n </ng-container>\r\n </mat-chip>\r\n</mat-chip-list>\r\n \r\n <!-- Context menu -->\r\n<mat-menu #itemMenu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item *ngFor=\"let button of buttonService.getVisibleButtons(displayedButtons, item, config)\" \r\n [disabled]=\"testDisabled(item, button.name)\"\r\n (click)=\"onActionClick(button.name, item)\">\r\n <mat-icon [ngStyle]=\"{'color': getButtonColor(button, item)}\">\r\n {{getIcon(button.name)}}\r\n </mat-icon>\r\n <span>{{button.display || (button.name | titlecase)}}</span>\r\n </button>\r\n </ng-template>\r\n</mat-menu>", styles: ["mat-chip{cursor:pointer;margin:4px}mat-chip:hover{opacity:.8}mat-icon{vertical-align:middle}label{vertical-align:middle;margin:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i4.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i6.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }] });
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CapsulesComponent, decorators: [{
52
- type: Component,
53
- args: [{ selector: 'spa-capsules', template: "<mat-chip-list>\r\n <mat-chip *ngFor=\"let row of dataSource\" [matMenuTriggerFor]=\"itemMenu\" [matMenuTriggerData]=\"{item: row}\">\r\n <!-- Left icons -->\r\n <ng-container *ngFor=\"let icon of config.capsuleConfig?.leftIcons\">\r\n <mat-icon *ngIf=\"testIconCondition(row, icon)\" \r\n [ngStyle]=\"{'color': icon?.color}\" \r\n style=\"font-size: 18px; padding-top: 3px; margin-right: 5px;\">\r\n {{icon.name}}\r\n </mat-icon>\r\n </ng-container>\r\n \r\n <!-- Display text -->\r\n <label style=\"margin-right: 5px;\">{{getDisplayValue(row)}}</label>\r\n \r\n <!-- Right icons -->\r\n <ng-container *ngFor=\"let icon of config.capsuleConfig?.rightIcons\">\r\n <mat-icon *ngIf=\"testIconCondition(row, icon)\" \r\n [ngStyle]=\"{'color': icon?.color}\" \r\n style=\"font-size: 18px; padding-top: 3px; margin-left: 5px;\">\r\n {{icon.name}}\r\n </mat-icon>\r\n </ng-container>\r\n </mat-chip>\r\n</mat-chip-list>\r\n \r\n <!-- Context menu -->\r\n<mat-menu #itemMenu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item *ngFor=\"let button of buttonService.getVisibleButtons(displayedButtons, item, config)\" \r\n [disabled]=\"testDisabled(item, button.name)\"\r\n (click)=\"onActionClick(button.name, item)\">\r\n <mat-icon [ngStyle]=\"{'color': getButtonColor(button, item)}\">\r\n {{getIcon(button.name)}}\r\n </mat-icon>\r\n <span>{{button.display || (button.name | titlecase)}}</span>\r\n </button>\r\n </ng-template>\r\n</mat-menu>", styles: ["mat-chip{cursor:pointer;margin:4px}mat-chip:hover{opacity:.8}mat-icon{vertical-align:middle}label{vertical-align:middle;margin:0}\n"] }]
54
- }], ctorParameters: function () { return [{ type: i1.ButtonService }, { type: i2.ConditionService }]; }, propDecorators: { config: [{
55
- type: Input
56
- }], dataSource: [{
57
- type: Input
58
- }], displayedButtons: [{
59
- type: Input
60
- }], actionClick: [{
61
- type: Output
62
- }] } });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fwc3VsZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvY2Fwc3VsZXMvY2Fwc3VsZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvY2Fwc3VsZXMvY2Fwc3VsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFVdkUsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUNTLGFBQTRCLEVBQzNCLGdCQUFrQztRQURuQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBS25DLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUUvQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBTmxFLENBQUM7SUFRSix3Q0FBd0M7SUFDeEMsZUFBZSxDQUFDLEdBQVE7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRTtZQUM3QyxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxpQkFBaUIsQ0FBQyxHQUFRLEVBQUUsSUFBUztRQUNuQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxhQUFhLENBQUMsVUFBa0IsRUFBRSxHQUFRO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsY0FBYyxDQUFDLE1BQWMsRUFBRSxHQUFRO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsT0FBTyxDQUFDLFVBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxZQUFZLENBQUMsR0FBUSxFQUFFLFVBQWtCO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQscUJBQXFCO0lBQ2IsU0FBUyxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDbkUsQ0FBQzs7OEdBakRVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDJMQ1Y5QixpckRBcUNXOzJGRDNCRSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsY0FBYzttSUFVZixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbiwgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25kaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZGl0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtY2Fwc3VsZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXBzdWxlcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2Fwc3VsZXMuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXBzdWxlc0NvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgYnV0dG9uU2VydmljZTogQnV0dG9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZGl0aW9uU2VydmljZTogQ29uZGl0aW9uU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgQElucHV0KCkgY29uZmlnOiBUYWJsZUNvbmZpZztcclxuICBASW5wdXQoKSBkYXRhU291cmNlOiBhbnlbXTtcclxuICBASW5wdXQoKSBkaXNwbGF5ZWRCdXR0b25zOiBCdXR0b25bXSA9IFtdO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtuYW1lOiBzdHJpbmcsIHJvdzogYW55fT4oKTtcclxuXHJcbiAgLy8gRXh0cmFjdCBkaXNwbGF5IHZhbHVlIGJhc2VkIG9uIGNvbmZpZ1xyXG4gIGdldERpc3BsYXlWYWx1ZShyb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnPy5jYXBzdWxlQ29uZmlnPy5kaXNwbGF5RmllbGQpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvd1t0aGlzLmNvbmZpZy5jYXBzdWxlQ29uZmlnLmRpc3BsYXlGaWVsZF07XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpY29uIHZpc2liaWxpdHkgY29uZGl0aW9uXHJcbiAgdGVzdEljb25Db25kaXRpb24ocm93OiBhbnksIGljb246IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU2VydmljZS50ZXN0SWNvbkNvbmRpdGlvbihpY29uLCByb3cpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGJ1dHRvbiBjbGljayBmcm9tIG1lbnVcclxuICBvbkFjdGlvbkNsaWNrKGJ1dHRvbk5hbWU6IHN0cmluZywgcm93OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7IG5hbWU6IGJ1dHRvbk5hbWUsIHJvdyB9KTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBidXR0b24gY29sb3IgdXNpbmcgc2VydmljZVxyXG4gIGdldEJ1dHRvbkNvbG9yKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLmdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBpY29uIGZvciBidXR0b24gdXNpbmcgc2VydmljZVxyXG4gIGdldEljb24oYnV0dG9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UuZ2V0SWNvbih0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKSwgdGhpcy5jb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLy8gVGVzdCBpZiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkXHJcbiAgdGVzdERpc2FibGVkKHJvdzogYW55LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3csIHRoaXMuY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBidXR0b24gYnkgbmFtZVxyXG4gIHByaXZhdGUgZ2V0QnV0dG9uKG5hbWU6IHN0cmluZyk6IEJ1dHRvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQnV0dG9ucz8uZmluZCh4ID0+IHgubmFtZSA9PT0gbmFtZSkgfHwgbnVsbDtcclxuICB9XHJcbn0iLCI8bWF0LWNoaXAtbGlzdD5cclxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFTb3VyY2VcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiaXRlbU1lbnVcIiBbbWF0TWVudVRyaWdnZXJEYXRhXT1cIntpdGVtOiByb3d9XCI+XHJcbiAgICAgIDwhLS0gTGVmdCBpY29ucyAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb25maWcuY2Fwc3VsZUNvbmZpZz8ubGVmdEljb25zXCI+XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwidGVzdEljb25Db25kaXRpb24ocm93LCBpY29uKVwiIFxyXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2NvbG9yJzogaWNvbj8uY29sb3J9XCIgXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4OyBwYWRkaW5nLXRvcDogM3B4OyBtYXJnaW4tcmlnaHQ6IDVweDtcIj5cclxuICAgICAgICAgIHt7aWNvbi5uYW1lfX1cclxuICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICBcclxuICAgICAgPCEtLSBEaXNwbGF5IHRleHQgLS0+XHJcbiAgICAgIDxsYWJlbCBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPnt7Z2V0RGlzcGxheVZhbHVlKHJvdyl9fTwvbGFiZWw+XHJcbiAgXHJcbiAgICAgIDwhLS0gUmlnaHQgaWNvbnMgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29uZmlnLmNhcHN1bGVDb25maWc/LnJpZ2h0SWNvbnNcIj5cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnY29sb3InOiBpY29uPy5jb2xvcn1cIiBcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7IHBhZGRpbmctdG9wOiAzcHg7IG1hcmdpbi1sZWZ0OiA1cHg7XCI+XHJcbiAgICAgICAgICB7e2ljb24ubmFtZX19XHJcbiAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC1jaGlwPlxyXG48L21hdC1jaGlwLWxpc3Q+XHJcbiAgXHJcbiAgPCEtLSBDb250ZXh0IG1lbnUgLS0+XHJcbjxtYXQtbWVudSAjaXRlbU1lbnU9XCJtYXRNZW51XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvblNlcnZpY2UuZ2V0VmlzaWJsZUJ1dHRvbnMoZGlzcGxheWVkQnV0dG9ucywgaXRlbSwgY29uZmlnKVwiIFxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXN0RGlzYWJsZWQoaXRlbSwgYnV0dG9uLm5hbWUpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb25DbGljayhidXR0b24ubmFtZSwgaXRlbSlcIj5cclxuICAgICAgICA8bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6IGdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgaXRlbSl9XCI+XHJcbiAgICAgICAgICB7e2dldEljb24oYnV0dG9uLm5hbWUpfX1cclxuICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPnt7YnV0dG9uLmRpc3BsYXkgfHwgKGJ1dHRvbi5uYW1lIHwgdGl0bGVjYXNlKX19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvbWF0LW1lbnU+Il19
@@ -1,103 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../services/button.service";
4
- import * as i2 from "../../services/condition.service";
5
- import * as i3 from "@angular/common";
6
- import * as i4 from "@angular/material/button";
7
- import * as i5 from "@angular/material/icon";
8
- import * as i6 from "@angular/material/card";
9
- import * as i7 from "@angular/material/tooltip";
10
- export class CardsComponent {
11
- constructor(buttonService, conditionService) {
12
- this.buttonService = buttonService;
13
- this.conditionService = conditionService;
14
- this.displayedButtons = [];
15
- this.smallScreen = false;
16
- this.actionClick = new EventEmitter();
17
- this.columnClick = new EventEmitter();
18
- this.showBannerEvent = new EventEmitter();
19
- }
20
- // Get title value for a card
21
- getTitleValue(row) {
22
- const titleField = this.config?.cardConfig?.titleField;
23
- return titleField ? row[titleField] : '';
24
- }
25
- // Get subtitle value for a card
26
- getSubtitleValue(row) {
27
- const subtitleField = this.config?.cardConfig?.subtitleField;
28
- return subtitleField ? row[subtitleField] : '';
29
- }
30
- // Get content values for a card
31
- getContentValues(row) {
32
- const contentFields = this.config?.cardConfig?.contentFields || [];
33
- return contentFields.map(field => {
34
- const column = this.config.columns.find(col => col.name === field);
35
- return {
36
- label: column?.alias || field,
37
- value: row[field]
38
- };
39
- });
40
- }
41
- // Handle button click from menu
42
- onActionClick(buttonName, row) {
43
- this.actionClick.emit({ name: buttonName, row });
44
- }
45
- // Get color for button
46
- getButtonColor(button, row) {
47
- return this.buttonService.getButtonColor(button, row);
48
- }
49
- // Get icon for button
50
- getIcon(buttonName) {
51
- return this.buttonService.getIcon(this.getButton(buttonName), this.config);
52
- }
53
- // Test if button should be disabled
54
- testDisabled(row, buttonName) {
55
- const button = this.getButton(buttonName);
56
- return this.buttonService.testDisabled(button, row, this.config);
57
- }
58
- // Test if button should be visible
59
- testVisible(row, buttonName) {
60
- const button = this.getButton(buttonName);
61
- return this.buttonService.testVisible(button, row, this.config);
62
- }
63
- // Get elevation class based on config
64
- getElevationClass() {
65
- const elevation = this.config?.cardConfig?.elevation || 'medium';
66
- switch (elevation) {
67
- case 'low': return 'mat-elevation-z1';
68
- case 'high': return 'mat-elevation-z8';
69
- default: return 'mat-elevation-z4';
70
- }
71
- }
72
- // Get number of columns for grid
73
- getColumnCount() {
74
- if (this.smallScreen)
75
- return 1;
76
- return this.config?.cardConfig?.columns || 3;
77
- }
78
- // Get button by name
79
- getButton(name) {
80
- return this.displayedButtons?.find(x => x.name === name) || null;
81
- }
82
- }
83
- CardsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardsComponent, deps: [{ token: i1.ButtonService }, { token: i2.ConditionService }], target: i0.ɵɵFactoryTarget.Component });
84
- CardsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardsComponent, selector: "spa-cards", inputs: { config: "config", dataSource: "dataSource", displayedButtons: "displayedButtons", smallScreen: "smallScreen" }, outputs: { actionClick: "actionClick", columnClick: "columnClick", showBannerEvent: "showBannerEvent" }, ngImport: i0, template: "<div class=\"cards-container\" [style.grid-template-columns]=\"'repeat(' + getColumnCount() + ', 1fr)'\">\r\n <mat-card *ngFor=\"let row of dataSource\" [class]=\"getElevationClass()\" class=\"card-item\">\r\n <mat-card-header>\r\n <mat-card-title>{{getTitleValue(row)}}</mat-card-title>\r\n <mat-card-subtitle *ngIf=\"getSubtitleValue(row)\">{{getSubtitleValue(row)}}</mat-card-subtitle>\r\n </mat-card-header>\r\n \r\n <mat-card-content>\r\n <div class=\"content-item\" *ngFor=\"let content of getContentValues(row)\">\r\n <span class=\"label\">{{content.label}}:</span>\r\n <span class=\"value\">{{content.value}}</span>\r\n </div>\r\n </mat-card-content>\r\n \r\n <mat-card-actions align=\"end\">\r\n <ng-container *ngFor=\"let button of displayedButtons\">\r\n <button *ngIf=\"!config.flatButtons && testVisible(row, button.name)\" \r\n mat-mini-fab\r\n [matTooltip]=\"button.tip ?? button.name | titlecase\"\r\n matTooltipPosition=\"above\"\r\n [ngStyle]=\"{'background-color': getButtonColor(button, row)}\"\r\n [disabled]=\"testDisabled(row, button.name)\"\r\n (click)=\"onActionClick(button.name, row)\">\r\n <mat-icon>{{getIcon(button.name)}}</mat-icon>\r\n </button>\r\n \r\n <button *ngIf=\"config.flatButtons && testVisible(row, button.name)\"\r\n mat-icon-button \r\n [matTooltip]=\"button.tip ?? button.name | titlecase\"\r\n matTooltipPosition=\"above\"\r\n [disabled]=\"testDisabled(row, button.name)\"\r\n (click)=\"onActionClick(button.name, row)\">\r\n <mat-icon [ngStyle]=\"{'color': getButtonColor(button, row)}\">{{getIcon(button.name)}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </mat-card-actions>\r\n </mat-card>\r\n </div>", styles: [".cards-container{display:grid;gap:20px;padding:20px}.card-item{height:100%;transition:transform .2s}.card-item:hover{transform:translateY(-5px)}.content-item{margin:8px 0;display:grid;grid-template-columns:minmax(33%,1fr) minmax(67%,2fr);gap:8px;align-items:baseline}.label{font-weight:500;color:#000000b3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.value{text-align:left;word-break:break-word}mat-card-actions{padding:16px;display:flex;gap:8px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i6.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i6.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }] });
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardsComponent, decorators: [{
86
- type: Component,
87
- args: [{ selector: 'spa-cards', template: "<div class=\"cards-container\" [style.grid-template-columns]=\"'repeat(' + getColumnCount() + ', 1fr)'\">\r\n <mat-card *ngFor=\"let row of dataSource\" [class]=\"getElevationClass()\" class=\"card-item\">\r\n <mat-card-header>\r\n <mat-card-title>{{getTitleValue(row)}}</mat-card-title>\r\n <mat-card-subtitle *ngIf=\"getSubtitleValue(row)\">{{getSubtitleValue(row)}}</mat-card-subtitle>\r\n </mat-card-header>\r\n \r\n <mat-card-content>\r\n <div class=\"content-item\" *ngFor=\"let content of getContentValues(row)\">\r\n <span class=\"label\">{{content.label}}:</span>\r\n <span class=\"value\">{{content.value}}</span>\r\n </div>\r\n </mat-card-content>\r\n \r\n <mat-card-actions align=\"end\">\r\n <ng-container *ngFor=\"let button of displayedButtons\">\r\n <button *ngIf=\"!config.flatButtons && testVisible(row, button.name)\" \r\n mat-mini-fab\r\n [matTooltip]=\"button.tip ?? button.name | titlecase\"\r\n matTooltipPosition=\"above\"\r\n [ngStyle]=\"{'background-color': getButtonColor(button, row)}\"\r\n [disabled]=\"testDisabled(row, button.name)\"\r\n (click)=\"onActionClick(button.name, row)\">\r\n <mat-icon>{{getIcon(button.name)}}</mat-icon>\r\n </button>\r\n \r\n <button *ngIf=\"config.flatButtons && testVisible(row, button.name)\"\r\n mat-icon-button \r\n [matTooltip]=\"button.tip ?? button.name | titlecase\"\r\n matTooltipPosition=\"above\"\r\n [disabled]=\"testDisabled(row, button.name)\"\r\n (click)=\"onActionClick(button.name, row)\">\r\n <mat-icon [ngStyle]=\"{'color': getButtonColor(button, row)}\">{{getIcon(button.name)}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </mat-card-actions>\r\n </mat-card>\r\n </div>", styles: [".cards-container{display:grid;gap:20px;padding:20px}.card-item{height:100%;transition:transform .2s}.card-item:hover{transform:translateY(-5px)}.content-item{margin:8px 0;display:grid;grid-template-columns:minmax(33%,1fr) minmax(67%,2fr);gap:8px;align-items:baseline}.label{font-weight:500;color:#000000b3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.value{text-align:left;word-break:break-word}mat-card-actions{padding:16px;display:flex;gap:8px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}\n"] }]
88
- }], ctorParameters: function () { return [{ type: i1.ButtonService }, { type: i2.ConditionService }]; }, propDecorators: { config: [{
89
- type: Input
90
- }], dataSource: [{
91
- type: Input
92
- }], displayedButtons: [{
93
- type: Input
94
- }], smallScreen: [{
95
- type: Input
96
- }], actionClick: [{
97
- type: Output
98
- }], columnClick: [{
99
- type: Output
100
- }], showBannerEvent: [{
101
- type: Output
102
- }] } });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZHMvY2FyZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZHMvY2FyZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBVXZFLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ1MsYUFBNEIsRUFDM0IsZ0JBQWtDO1FBRG5DLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFLbkMscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUMxRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFUcEQsQ0FBQztJQVdKLDZCQUE2QjtJQUM3QixhQUFhLENBQUMsR0FBUTtRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDdkQsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsZ0JBQWdCLENBQUMsR0FBUTtRQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUM7UUFDN0QsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsZ0JBQWdCLENBQUMsR0FBUTtRQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ25FLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQ25FLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksS0FBSztnQkFDN0IsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUM7YUFDbEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxhQUFhLENBQUMsVUFBa0IsRUFBRSxHQUFRO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsY0FBYyxDQUFDLE1BQWMsRUFBRSxHQUFRO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsT0FBTyxDQUFDLFVBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxZQUFZLENBQUMsR0FBUSxFQUFFLFVBQWtCO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLFdBQVcsQ0FBQyxHQUFRLEVBQUUsVUFBa0I7UUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsaUJBQWlCO1FBQ2YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxJQUFJLFFBQVEsQ0FBQztRQUNqRSxRQUFPLFNBQVMsRUFBRTtZQUNoQixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUM7WUFDdEMsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLGtCQUFrQixDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sa0JBQWtCLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxxQkFBcUI7SUFDYixTQUFTLENBQUMsSUFBWTtRQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNuRSxDQUFDOzsyR0FyRlUsY0FBYzsrRkFBZCxjQUFjLG9SQ1YzQixtOURBcUNROzJGRDNCSyxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVc7bUlBVVosTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCdXR0b24sIFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQnV0dG9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1dHRvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZGl0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmRpdGlvbi5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWNhcmRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NhcmRzLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FyZHNDb21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGJ1dHRvblNlcnZpY2U6IEJ1dHRvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmRpdGlvblNlcnZpY2U6IENvbmRpdGlvblNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZzogVGFibGVDb25maWc7XHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZTogYW55W107XHJcbiAgQElucHV0KCkgZGlzcGxheWVkQnV0dG9uczogQnV0dG9uW10gPSBbXTtcclxuICBASW5wdXQoKSBzbWFsbFNjcmVlbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtuYW1lOiBzdHJpbmcsIHJvdzogYW55fT4oKTtcclxuICBAT3V0cHV0KCkgY29sdW1uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtjb2x1bW46IGFueSwgcm93OiBhbnl9PigpO1xyXG4gIEBPdXRwdXQoKSBzaG93QmFubmVyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgLy8gR2V0IHRpdGxlIHZhbHVlIGZvciBhIGNhcmRcclxuICBnZXRUaXRsZVZhbHVlKHJvdzogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRpdGxlRmllbGQgPSB0aGlzLmNvbmZpZz8uY2FyZENvbmZpZz8udGl0bGVGaWVsZDtcclxuICAgIHJldHVybiB0aXRsZUZpZWxkID8gcm93W3RpdGxlRmllbGRdIDogJyc7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgc3VidGl0bGUgdmFsdWUgZm9yIGEgY2FyZFxyXG4gIGdldFN1YnRpdGxlVmFsdWUocm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3VidGl0bGVGaWVsZCA9IHRoaXMuY29uZmlnPy5jYXJkQ29uZmlnPy5zdWJ0aXRsZUZpZWxkO1xyXG4gICAgcmV0dXJuIHN1YnRpdGxlRmllbGQgPyByb3dbc3VidGl0bGVGaWVsZF0gOiAnJztcclxuICB9XHJcblxyXG4gIC8vIEdldCBjb250ZW50IHZhbHVlcyBmb3IgYSBjYXJkXHJcbiAgZ2V0Q29udGVudFZhbHVlcyhyb3c6IGFueSk6IHtsYWJlbDogc3RyaW5nLCB2YWx1ZTogYW55fVtdIHtcclxuICAgIGNvbnN0IGNvbnRlbnRGaWVsZHMgPSB0aGlzLmNvbmZpZz8uY2FyZENvbmZpZz8uY29udGVudEZpZWxkcyB8fCBbXTtcclxuICAgIHJldHVybiBjb250ZW50RmllbGRzLm1hcChmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLm5hbWUgPT09IGZpZWxkKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBsYWJlbDogY29sdW1uPy5hbGlhcyB8fCBmaWVsZCxcclxuICAgICAgICB2YWx1ZTogcm93W2ZpZWxkXVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBIYW5kbGUgYnV0dG9uIGNsaWNrIGZyb20gbWVudVxyXG4gIG9uQWN0aW9uQ2xpY2soYnV0dG9uTmFtZTogc3RyaW5nLCByb3c6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KHsgbmFtZTogYnV0dG9uTmFtZSwgcm93IH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IGNvbG9yIGZvciBidXR0b25cclxuICBnZXRCdXR0b25Db2xvcihidXR0b246IEJ1dHRvbiwgcm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgaWNvbiBmb3IgYnV0dG9uXHJcbiAgZ2V0SWNvbihidXR0b25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uU2VydmljZS5nZXRJY29uKHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpLCB0aGlzLmNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvLyBUZXN0IGlmIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWRcclxuICB0ZXN0RGlzYWJsZWQocm93OiBhbnksIGJ1dHRvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSk7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25TZXJ2aWNlLnRlc3REaXNhYmxlZChidXR0b24sIHJvdywgdGhpcy5jb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLy8gVGVzdCBpZiBidXR0b24gc2hvdWxkIGJlIHZpc2libGVcclxuICB0ZXN0VmlzaWJsZShyb3c6IGFueSwgYnV0dG9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvblNlcnZpY2UudGVzdFZpc2libGUoYnV0dG9uLCByb3csIHRoaXMuY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBlbGV2YXRpb24gY2xhc3MgYmFzZWQgb24gY29uZmlnXHJcbiAgZ2V0RWxldmF0aW9uQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGVsZXZhdGlvbiA9IHRoaXMuY29uZmlnPy5jYXJkQ29uZmlnPy5lbGV2YXRpb24gfHwgJ21lZGl1bSc7XHJcbiAgICBzd2l0Y2goZWxldmF0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ2xvdyc6IHJldHVybiAnbWF0LWVsZXZhdGlvbi16MSc7XHJcbiAgICAgIGNhc2UgJ2hpZ2gnOiByZXR1cm4gJ21hdC1lbGV2YXRpb24tejgnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ21hdC1lbGV2YXRpb24tejQnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gR2V0IG51bWJlciBvZiBjb2x1bW5zIGZvciBncmlkXHJcbiAgZ2V0Q29sdW1uQ291bnQoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLnNtYWxsU2NyZWVuKSByZXR1cm4gMTtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uY2FyZENvbmZpZz8uY29sdW1ucyB8fCAzO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IGJ1dHRvbiBieSBuYW1lXHJcbiAgcHJpdmF0ZSBnZXRCdXR0b24obmFtZTogc3RyaW5nKTogQnV0dG9uIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRCdXR0b25zPy5maW5kKHggPT4geC5uYW1lID09PSBuYW1lKSB8fCBudWxsO1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIiBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cIidyZXBlYXQoJyArIGdldENvbHVtbkNvdW50KCkgKyAnLCAxZnIpJ1wiPlxyXG4gICAgPG1hdC1jYXJkICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVNvdXJjZVwiIFtjbGFzc109XCJnZXRFbGV2YXRpb25DbGFzcygpXCIgY2xhc3M9XCJjYXJkLWl0ZW1cIj5cclxuICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgICA8bWF0LWNhcmQtdGl0bGU+e3tnZXRUaXRsZVZhbHVlKHJvdyl9fTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgPG1hdC1jYXJkLXN1YnRpdGxlICpuZ0lmPVwiZ2V0U3VidGl0bGVWYWx1ZShyb3cpXCI+e3tnZXRTdWJ0aXRsZVZhbHVlKHJvdyl9fTwvbWF0LWNhcmQtc3VidGl0bGU+XHJcbiAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gIFxyXG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1pdGVtXCIgKm5nRm9yPVwibGV0IGNvbnRlbnQgb2YgZ2V0Q29udGVudFZhbHVlcyhyb3cpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3tjb250ZW50LmxhYmVsfX06PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7Y29udGVudC52YWx1ZX19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgXHJcbiAgICAgIDxtYXQtY2FyZC1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGRpc3BsYXllZEJ1dHRvbnNcIj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhY29uZmlnLmZsYXRCdXR0b25zICYmIHRlc3RWaXNpYmxlKHJvdywgYnV0dG9uLm5hbWUpXCIgXHJcbiAgICAgICAgICAgICAgICAgIG1hdC1taW5pLWZhYlxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udGlwID8/IGJ1dHRvbi5uYW1lIHwgdGl0bGVjYXNlXCJcclxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOiBnZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyl9XCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRlc3REaXNhYmxlZChyb3csIGJ1dHRvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGJ1dHRvbi5uYW1lLCByb3cpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj57e2dldEljb24oYnV0dG9uLm5hbWUpfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgXHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLmZsYXRCdXR0b25zICYmIHRlc3RWaXNpYmxlKHJvdywgYnV0dG9uLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udGlwID8/IGJ1dHRvbi5uYW1lIHwgdGl0bGVjYXNlXCJcclxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGVzdERpc2FibGVkKHJvdywgYnV0dG9uLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soYnV0dG9uLm5hbWUsIHJvdylcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIFtuZ1N0eWxlXT1cInsnY29sb3InOiBnZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyl9XCI+e3tnZXRJY29uKGJ1dHRvbi5uYW1lKX19PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICA8L21hdC1jYXJkPlxyXG4gIDwvZGl2PiJdfQ==
@@ -1,34 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/platform-browser";
4
- import * as i2 from "@angular/common";
5
- export class HtmlComponent {
6
- constructor(sanitizer) {
7
- this.sanitizer = sanitizer;
8
- this.value = '';
9
- this.maxHeight = '500px'; // Default maximum height
10
- this.display = ''; // For consistency with other components
11
- }
12
- ngOnInit() {
13
- this.sanitizeHtml();
14
- }
15
- ngOnChanges() {
16
- this.sanitizeHtml();
17
- }
18
- sanitizeHtml() {
19
- this.sanitizedHtml = this.sanitizer.bypassSecurityTrustHtml(this.value);
20
- }
21
- }
22
- HtmlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HtmlComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
23
- HtmlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HtmlComponent, selector: "spa-html", inputs: { value: "value", maxHeight: "maxHeight", display: "display" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"display\" class=\"html-label\">{{display}}</div>\r\n<div class=\"html-container\" [ngStyle]=\"{'max-height': maxHeight}\">\r\n <div class=\"html-content\" [innerHTML]=\"sanitizedHtml\"></div>\r\n</div>", styles: [".html-container{width:100%;overflow-y:auto;border:1px solid #e0e0e0;border-radius:4px;padding:8px;background-color:#fafafa}.html-content{width:100%}.html-label{font-weight:500;margin-bottom:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HtmlComponent, decorators: [{
25
- type: Component,
26
- args: [{ selector: 'spa-html', template: "<div *ngIf=\"display\" class=\"html-label\">{{display}}</div>\r\n<div class=\"html-container\" [ngStyle]=\"{'max-height': maxHeight}\">\r\n <div class=\"html-content\" [innerHTML]=\"sanitizedHtml\"></div>\r\n</div>", styles: [".html-container{width:100%;overflow-y:auto;border:1px solid #e0e0e0;border-radius:4px;padding:8px;background-color:#fafafa}.html-content{width:100%}.html-label{font-weight:500;margin-bottom:5px}\n"] }]
27
- }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { value: [{
28
- type: Input
29
- }], maxHeight: [{
30
- type: Input
31
- }], display: [{
32
- type: Input
33
- }] } });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvY29tcG9uZW50cy9odG1sL2h0bWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvaHRtbC9odG1sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7O0FBUXpELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQW9CLFNBQXVCO1FBQXZCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFVbEMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyx5QkFBeUI7UUFDOUMsWUFBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHdDQUF3QztJQVpoQixDQUFDO0lBRWhELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQVFPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRSxDQUFDOzswR0FuQlUsYUFBYTs4RkFBYixhQUFhLDZJQ1IxQix5TkFHTTsyRkRLTyxhQUFhO2tCQUx6QixTQUFTOytCQUNFLFVBQVU7bUdBZVgsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWh0bWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9odG1sLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9odG1sLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSHRtbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zYW5pdGl6ZUh0bWwoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zYW5pdGl6ZUh0bWwoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XHJcbiAgQElucHV0KCkgbWF4SGVpZ2h0ID0gJzUwMHB4JzsgLy8gRGVmYXVsdCBtYXhpbXVtIGhlaWdodFxyXG4gIEBJbnB1dCgpIGRpc3BsYXkgPSAnJzsgLy8gRm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgY29tcG9uZW50c1xyXG5cclxuICBzYW5pdGl6ZWRIdG1sOiBTYWZlSHRtbDtcclxuXHJcbiAgcHJpdmF0ZSBzYW5pdGl6ZUh0bWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNhbml0aXplZEh0bWwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLnZhbHVlKTtcclxuICB9XHJcbn0iLCI8ZGl2ICpuZ0lmPVwiZGlzcGxheVwiIGNsYXNzPVwiaHRtbC1sYWJlbFwiPnt7ZGlzcGxheX19PC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJodG1sLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsnbWF4LWhlaWdodCc6IG1heEhlaWdodH1cIj5cclxuICA8ZGl2IGNsYXNzPVwiaHRtbC1jb250ZW50XCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRIdG1sXCI+PC9kaXY+XHJcbjwvZGl2PiJdfQ==