@unifylib/ui-lib 1.0.3

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 (129) hide show
  1. package/README.md +0 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +12 -0
  4. package/src/lib/base-model/SearchStrConfig.ts +12 -0
  5. package/src/lib/base-model/api-response.ts +23 -0
  6. package/src/lib/base-model/audit-log-entry.ts +7 -0
  7. package/src/lib/base-model/button-action-settings.ts +25 -0
  8. package/src/lib/base-model/column-def.model.ts +34 -0
  9. package/src/lib/base-model/do-action-request.ts +11 -0
  10. package/src/lib/base-model/field-action.ts +7 -0
  11. package/src/lib/base-model/field-filter.model.ts +14 -0
  12. package/src/lib/base-model/field-info.ts +98 -0
  13. package/src/lib/base-model/field-predicate.model.ts +7 -0
  14. package/src/lib/base-model/filter-request.ts +27 -0
  15. package/src/lib/base-model/filter.model.ts +49 -0
  16. package/src/lib/base-model/get-items-list.ts +24 -0
  17. package/src/lib/base-model/index.ts +11 -0
  18. package/src/lib/base-model/lookupItem.ts +21 -0
  19. package/src/lib/base-model/null-snackmessage.ts +9 -0
  20. package/src/lib/base-model/page-info.ts +51 -0
  21. package/src/lib/base-model/report-request.model.ts +33 -0
  22. package/src/lib/base-model/response-envelop.model.ts +15 -0
  23. package/src/lib/base-model/snack-message.model.ts +14 -0
  24. package/src/lib/base-model/snackmessage-interface.ts +7 -0
  25. package/src/lib/base-model/table-column.interface.ts +29 -0
  26. package/src/lib/base-model/table-page-user-action.interface.ts +33 -0
  27. package/src/lib/base-model/workflow/workflow-steps.model.ts +9 -0
  28. package/src/lib/base-model/workflow/workflow.model.ts +52 -0
  29. package/src/lib/components/action-confirmation/action-confirmation.component.css +34 -0
  30. package/src/lib/components/action-confirmation/action-confirmation.component.html +18 -0
  31. package/src/lib/components/action-confirmation/action-confirmation.component.spec.ts +23 -0
  32. package/src/lib/components/action-confirmation/action-confirmation.component.ts +58 -0
  33. package/src/lib/components/activity-report-form/activity-report-form.component.html +109 -0
  34. package/src/lib/components/activity-report-form/activity-report-form.component.scss +0 -0
  35. package/src/lib/components/activity-report-form/activity-report-form.component.spec.ts +25 -0
  36. package/src/lib/components/activity-report-form/activity-report-form.component.ts +605 -0
  37. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.css +51 -0
  38. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.html +23 -0
  39. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.spec.ts +23 -0
  40. package/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.ts +69 -0
  41. package/src/lib/components/audit-log-list/audit-log.component.html +23 -0
  42. package/src/lib/components/audit-log-list/audit-log.component.scss +0 -0
  43. package/src/lib/components/audit-log-list/audit-log.component.spec.ts +25 -0
  44. package/src/lib/components/audit-log-list/audit-log.component.ts +116 -0
  45. package/src/lib/components/auto-complete/auto-complete.component.css +14 -0
  46. package/src/lib/components/auto-complete/auto-complete.component.html +29 -0
  47. package/src/lib/components/auto-complete/auto-complete.component.spec.ts +23 -0
  48. package/src/lib/components/auto-complete/auto-complete.component.ts +330 -0
  49. package/src/lib/components/base-form/base-form.component.html +58 -0
  50. package/src/lib/components/base-form/base-form.component.scss +0 -0
  51. package/src/lib/components/base-form/base-form.component.spec.ts +25 -0
  52. package/src/lib/components/base-form/base-form.component.ts +305 -0
  53. package/src/lib/components/base-form-canvas/base-form-canvas.component.css +22 -0
  54. package/src/lib/components/base-form-canvas/base-form-canvas.component.html +1006 -0
  55. package/src/lib/components/base-form-canvas/base-form-canvas.component.spec.ts +23 -0
  56. package/src/lib/components/base-form-canvas/base-form-canvas.component.ts +573 -0
  57. package/src/lib/components/base-input-dialog/base-input-dialog.component.css +0 -0
  58. package/src/lib/components/base-input-dialog/base-input-dialog.component.html +42 -0
  59. package/src/lib/components/base-input-dialog/base-input-dialog.component.spec.ts +23 -0
  60. package/src/lib/components/base-input-dialog/base-input-dialog.component.ts +78 -0
  61. package/src/lib/components/base-table/base-table.component.html +242 -0
  62. package/src/lib/components/base-table/base-table.component.scss +31 -0
  63. package/src/lib/components/base-table/base-table.component.spec.ts +25 -0
  64. package/src/lib/components/base-table/base-table.component.ts +568 -0
  65. package/src/lib/components/button-actions/button-actions.component.html +28 -0
  66. package/src/lib/components/button-actions/button-actions.component.scss +6 -0
  67. package/src/lib/components/button-actions/button-actions.component.spec.ts +23 -0
  68. package/src/lib/components/button-actions/button-actions.component.ts +72 -0
  69. package/src/lib/components/editable-base-table/editable-base-table.component.html +372 -0
  70. package/src/lib/components/editable-base-table/editable-base-table.component.scss +44 -0
  71. package/src/lib/components/editable-base-table/editable-base-table.component.spec.ts +25 -0
  72. package/src/lib/components/editable-base-table/editable-base-table.component.ts +570 -0
  73. package/src/lib/components/equation-builder/equation-builder.component.css +0 -0
  74. package/src/lib/components/equation-builder/equation-builder.component.html +31 -0
  75. package/src/lib/components/equation-builder/equation-builder.component.spec.ts +23 -0
  76. package/src/lib/components/equation-builder/equation-builder.component.ts +121 -0
  77. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.css +11 -0
  78. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.html +38 -0
  79. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.spec.ts +23 -0
  80. package/src/lib/components/multi-auto-complete/multi-auto-complete.component.ts +317 -0
  81. package/src/lib/components/paginator/paginator.component.css +25 -0
  82. package/src/lib/components/paginator/paginator.component.html +34 -0
  83. package/src/lib/components/paginator/paginator.component.ts +94 -0
  84. package/src/lib/components/rejection-comment/action-comment.component.css +33 -0
  85. package/src/lib/components/rejection-comment/action-comment.component.html +46 -0
  86. package/src/lib/components/rejection-comment/action-comment.component.spec.ts +23 -0
  87. package/src/lib/components/rejection-comment/action-comment.component.ts +86 -0
  88. package/src/lib/components/report-details-dialog/report-details-dialog.component.css +17 -0
  89. package/src/lib/components/report-details-dialog/report-details-dialog.component.html +16 -0
  90. package/src/lib/components/report-details-dialog/report-details-dialog.component.spec.ts +23 -0
  91. package/src/lib/components/report-details-dialog/report-details-dialog.component.ts +113 -0
  92. package/src/lib/components/report-form/report-form.component.html +94 -0
  93. package/src/lib/components/report-form/report-form.component.scss +0 -0
  94. package/src/lib/components/report-form/report-form.component.spec.ts +25 -0
  95. package/src/lib/components/report-form/report-form.component.ts +588 -0
  96. package/src/lib/components/search-bar/search-bar.component.html +62 -0
  97. package/src/lib/components/search-bar/search-bar.component.scss +8 -0
  98. package/src/lib/components/search-bar/search-bar.component.spec.ts +25 -0
  99. package/src/lib/components/search-bar/search-bar.component.ts +70 -0
  100. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.css +54 -0
  101. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.html +22 -0
  102. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.spec.ts +23 -0
  103. package/src/lib/components/shared/attachment-uploader/attachment-uploader.component.ts +45 -0
  104. package/src/lib/components/shared-list/shared-list.component.css +0 -0
  105. package/src/lib/components/shared-list/shared-list.component.html +17 -0
  106. package/src/lib/components/shared-list/shared-list.component.spec.ts +23 -0
  107. package/src/lib/components/shared-list/shared-list.component.ts +53 -0
  108. package/src/lib/components/title-bar/title-bar.component.css +0 -0
  109. package/src/lib/components/title-bar/title-bar.component.css.map +1 -0
  110. package/src/lib/components/title-bar/title-bar.component.html +31 -0
  111. package/src/lib/components/title-bar/title-bar.component.scss +23 -0
  112. package/src/lib/components/title-bar/title-bar.component.spec.ts +23 -0
  113. package/src/lib/components/title-bar/title-bar.component.ts +119 -0
  114. package/src/lib/services/backend-service.ts +286 -0
  115. package/src/lib/services/index.ts +3 -0
  116. package/src/lib/services/top-panel.ts +17 -0
  117. package/src/lib/services/trigger-form.service.ts +11 -0
  118. package/src/lib/share-module/shared-module.ts +10 -0
  119. package/src/lib/styles/invoiceq-theme.scss +252 -0
  120. package/src/lib/styles/styles.scss +1723 -0
  121. package/src/lib/utils/base-utils.ts +102 -0
  122. package/src/lib/validators/date-range-validator.ts +31 -0
  123. package/src/lib/validators/index.ts +3 -0
  124. package/src/lib/validators/match-list.validator.ts +10 -0
  125. package/src/lib/validators/multi-email-validator.ts +15 -0
  126. package/src/public-api.ts +21 -0
  127. package/tsconfig.lib.json +15 -0
  128. package/tsconfig.lib.prod.json +11 -0
  129. package/tsconfig.spec.json +15 -0
@@ -0,0 +1,286 @@
1
+ import {Inject, Injectable} from "@angular/core";
2
+ import {HttpClient, HttpErrorResponse, HttpHeaders, HttpParams} from "@angular/common/http";
3
+ import {Observable, of, Subject} from "rxjs";
4
+ import {catchError, distinctUntilChanged} from "rxjs/operators";
5
+ import {SnackMessage} from "../base-model/snack-message.model";
6
+ import {PageInfo} from "../base-model/page-info";
7
+ import {TranslateService} from "@ngx-translate/core";
8
+ import {ColumnDef} from "../base-model/column-def.model";
9
+ import {TableColumn} from "../base-model/table-column.interface";
10
+ import {GetItemsList} from "../base-model/get-items-list";
11
+ import {FieldAction} from "../base-model/field-action";
12
+ import {Workflow} from "../base-model/workflow/workflow.model";
13
+ import {ReportRequest} from "../base-model/report-request.model";
14
+ import {FilterRequest} from "../base-model/filter-request";
15
+ import {ResponseEnvelop} from "../base-model/response-envelop.model";
16
+ import {FormGroup} from "@angular/forms";
17
+ import { ActivatedRoute } from "@angular/router";
18
+ import {TopPanel} from "./top-panel";
19
+ import {DoActionRequest} from "../base-model/do-action-request";
20
+ import {MatDialog} from "@angular/material/dialog";
21
+ import {ActionConfirmationComponent} from "../components/action-confirmation/action-confirmation.component";
22
+
23
+ const WORKFLOW_STATES_MAP: Record<number, string> = {
24
+ 1: 'New',
25
+ 2: 'Pending',
26
+ 3: 'Terminated',
27
+ 4: 'Completed',
28
+ 5: 'Updated',
29
+ 6: 'Default'
30
+ };
31
+
32
+ const EXCLUDED_REPORT_COLUMNS = ['listAction','button', 'checkbox'];
33
+ @Injectable({
34
+ providedIn: 'root'
35
+ })
36
+ export class BackendService {
37
+ public topPanelMessage$ = new Subject<SnackMessage>();
38
+ // @ts-ignore
39
+ public parentForm: FormGroup;
40
+ public fieldAction$ = new Subject<FieldAction>();
41
+ public isEmptyItems: boolean = true;
42
+
43
+ constructor(private http: HttpClient,
44
+ private topPanel: TopPanel,
45
+ private translateService: TranslateService,
46
+ private route: ActivatedRoute,
47
+ private dialog: MatDialog,
48
+ @Inject('config') private config: any,
49
+ @Inject('secretsManager') private secretsManager: any) {
50
+
51
+ this.topPanelMessage$.subscribe(msg => {
52
+ this.topPanel.topPanelMessage$.next(msg);
53
+ })
54
+ }
55
+
56
+ set defaults(value: any | undefined) {
57
+ }
58
+
59
+ get defaults(): any | undefined {
60
+ return {};
61
+ }
62
+
63
+ getStatusDescription(element: any, workflow: Workflow) {
64
+ if (element?.stepId) {
65
+
66
+ let index = workflow?.workflowSteps?.findIndex(s => s.stepId === element.stepId);
67
+ if (index > -1) {
68
+ return this.translateService.getDefaultLang() === 'ar' ?
69
+ workflow?.workflowSteps[index].stepNameAr || workflow?.workflowSteps[index].stepName:
70
+ workflow?.workflowSteps[index].stepName;
71
+ // return this.translateService.instant(workflow?.workflowSteps[index].stepName);
72
+ } else {
73
+ return this.translateService.instant('INVENTORY.inprocessStatus');
74
+ }
75
+ } else {
76
+ if (element.statusId === 4 && element.statusDescription) {
77
+ return element.statusDescription;
78
+ } else if (element.statusId) {
79
+ return this.translateService.instant(WORKFLOW_STATES_MAP[element.statusId]);
80
+ } else {
81
+ return "unknown";
82
+ }
83
+ }
84
+ }
85
+ //sss
86
+ getItemsByFilter(reportRequest: any, apiUrl: string): Observable<any> {
87
+ const url = `${this.getApiBasePath()}/api/v1${apiUrl}/list`;
88
+ return this.http.post(url, reportRequest, { headers: this.buildSecuredHeader()}).pipe(
89
+ distinctUntilChanged(),
90
+ catchError(err => of(err.message || err)));
91
+ }
92
+
93
+ getItemAuditLog(reportRequest: any, apiUrl: string): Observable<any> {
94
+ const url = `${this.getApiBasePath()}/api/v1${apiUrl}/audit-log`;
95
+ return this.http.post(url, reportRequest, { headers: this.buildSecuredHeader()}).pipe(
96
+ distinctUntilChanged(),
97
+ catchError(err => of(err.message || err)));
98
+ }
99
+
100
+
101
+ private buildSecuredHeader() {
102
+ const headers = new HttpHeaders({
103
+ 'Content-Type': 'application/json',
104
+ Authorization: this.config.getAuthToken()
105
+ });
106
+ return headers;
107
+ }
108
+
109
+ public buildFormSecuredHeader() {
110
+ const headers = new HttpHeaders({
111
+ Authorization: this.config.getAuthToken()
112
+ });
113
+ return headers;
114
+ }
115
+
116
+ labelKey(column: any, pageInfo: PageInfo) {
117
+ const configuredKey = column.label ? column.label : column.property;
118
+
119
+ if (configuredKey && configuredKey.trim() !== '' && configuredKey.startsWith(pageInfo.labelsSection)) {
120
+ return configuredKey;
121
+ }
122
+
123
+ return `${pageInfo.labelsSection}.${configuredKey}`;
124
+ }
125
+
126
+
127
+ private buildReportColumn(columns: TableColumn<any>[], pageInfo: PageInfo): ColumnDef[] {
128
+ let columnDef: ColumnDef[] = [];
129
+
130
+ columns.filter(x => !EXCLUDED_REPORT_COLUMNS.includes(x.type)).forEach((c, index) => {
131
+ let transLabel = this.translateService.instant(this.labelKey(c,pageInfo));
132
+ let transGroup = pageInfo.supportGroupingInExport ?
133
+ c.group.trim() ? this.translateService.instant(c.group) : ' ' : null;
134
+ if (c.type === 'workflowStatus') {
135
+ transLabel = this.translateService.instant('workflowStatus');
136
+ }
137
+ if ((c.reportVisible === true) || (c.visible === true && c.reportVisible !== false)) {
138
+ columnDef.push(new ColumnDef(c, index, transLabel, this.translateService.getDefaultLang(),transGroup));
139
+ }
140
+ });
141
+ return columnDef;
142
+ }
143
+
144
+ private base64ToArrayBuffer(base64: string) {
145
+ const binaryString = window.atob(base64); // Comment this if not using base64
146
+ const bytes = new Uint8Array(binaryString.length);
147
+ return bytes.map((byte, i) => binaryString.charCodeAt(i));
148
+ }
149
+
150
+ buildReportRequest(columns: TableColumn<any>[], title: string | string[], filterRequest: FilterRequest, reportType: any, pageInfo: PageInfo, searchStr: string ,orientation='PORTRAIT'): ReportRequest {
151
+ const columnDef = this.buildReportColumn(columns, pageInfo);
152
+ const reportRequest = new ReportRequest({
153
+ dataset: [], filter: "",
154
+ columns: columnDef,
155
+ // sessionId: this.topPanel.userSession().sessionId,
156
+ sessionId: this.config.getAuthToken(),
157
+ title: this.translateService.instant(title),
158
+ prefLang: this.translateService.getDefaultLang(),
159
+ reportType: reportType,
160
+ searchStr: searchStr,
161
+ filterRequest: filterRequest,
162
+ orientation: orientation});
163
+ return reportRequest;
164
+ }
165
+
166
+ getLookupItemsByMultiFilter(listItems: GetItemsList, filterRequest?: FilterRequest): Observable<any> {
167
+ listItems.pageSize = 100;
168
+ filterRequest.pageSize = 100;
169
+ const params = new HttpParams().set('searchStr', listItems.searchStr);
170
+ let url = `${this.getApiBasePath()}/api/v1/${listItems.apiUri}`;
171
+ return this.http.post(url, filterRequest, { headers: this.buildSecuredHeader(), params: params}).pipe(
172
+ distinctUntilChanged(),
173
+ catchError(err => of(err.message || err)));
174
+ }
175
+ getLookupItemsByFilter(listItems: GetItemsList, cascadedId?: any): Observable<any> {
176
+ listItems.pageSize = 500;
177
+ const params = new HttpParams().set('searchStr', listItems.searchStr);
178
+ let url = `${this.getApiBasePath()}/api/v1/${listItems.apiUri}`;
179
+ if (cascadedId) {
180
+ url = url + `/${cascadedId}`
181
+ }
182
+
183
+ return this.http.post(url, listItems,{ headers: this.buildSecuredHeader()}).pipe(
184
+ distinctUntilChanged(),
185
+ catchError(err => of(err.message || err)));
186
+ }
187
+
188
+
189
+
190
+ downloadReport(reportRequest: ReportRequest, pageApiPath : string, readyPath? : boolean ) {
191
+ const s = readyPath === true ? `/api/v1${pageApiPath}` : `/api/v1${pageApiPath}/extractAndDownloadListReport`;
192
+ return this.http.post<ResponseEnvelop>(this.getApiBasePath() + s, reportRequest, {headers: this.buildSecuredHeader()}).subscribe(
193
+ (resp:ResponseEnvelop) => {
194
+ if (resp.valid) {
195
+ if (resp.body) {
196
+ const filename = reportRequest.title + "." + reportRequest.reportType;
197
+ const blob = new Blob([this.base64ToArrayBuffer(resp.body)]);
198
+ if (navigator.msSaveBlob) {
199
+ navigator.msSaveBlob(blob, filename);
200
+ } else {
201
+ const link = document.createElement('a');
202
+ // Browsers that support HTML5 download attribute
203
+ if (link.download !== undefined) {
204
+ const url = URL.createObjectURL(blob);
205
+ link.setAttribute('href', url);
206
+ link.setAttribute('download', filename);
207
+ link.style.visibility = 'hidden';
208
+ document.body.appendChild(link);
209
+ link.click();
210
+ document.body.removeChild(link);
211
+ }
212
+ }
213
+ } else {
214
+ this.topPanel.topPanelMessage$.next(new SnackMessage(resp.message.toString(), true, 'info'));
215
+ }
216
+ } else {
217
+ this.topPanel.topPanelMessage$.next(new SnackMessage(resp.message.toString(), false, 'error'));
218
+ }
219
+ }
220
+ );
221
+
222
+ }
223
+
224
+ private getApiBasePath(){
225
+ return this.config.getBaseApi();
226
+ }
227
+
228
+ doActionWithAttachments(request: DoActionRequest, param2: any[], pageInfo: PageInfo) {
229
+ const url = `${this.getApiBasePath()}/api/v1${pageInfo.apiUri}/doActionWithAttachments`;
230
+ const formData: FormData = new FormData();
231
+ formData.set('doActionRequest', new Blob([JSON.stringify(request)], {
232
+ type: "application/json"
233
+ }));
234
+
235
+ return this.http.post(url, formData, { headers: this.buildFormSecuredHeader() }).pipe(
236
+ distinctUntilChanged(),
237
+ catchError((error: HttpErrorResponse) => {
238
+ return of(error.error);
239
+ })
240
+ );
241
+
242
+ }
243
+ doActionWithAttachment(request: DoActionRequest, file: File, pageInfo: PageInfo) {
244
+ const url = `${this.getApiBasePath()}/api/v1${pageInfo.apiUri}/doActionWithAttachments`;
245
+ const formData: FormData = new FormData();
246
+
247
+ formData.append('files', file);
248
+ formData.set('doActionRequest', new Blob([JSON.stringify(request)], {
249
+ type: "application/json"
250
+ }));
251
+
252
+ return this.http.post<any>(url, formData, {
253
+ headers: this.buildFormSecuredHeader()
254
+ }).pipe(
255
+ distinctUntilChanged(),
256
+ catchError((error: HttpErrorResponse) => {
257
+ // Transform the error into a fake success-like response
258
+ return of(error.error); // This will now be passed to `next` in subscribe()
259
+ })
260
+ );
261
+ }
262
+
263
+ encrypt(message: any) {
264
+ return this.secretsManager.encryptSecret(message);
265
+ }
266
+
267
+ decrypt(secret: any) {
268
+ return this.secretsManager.decryptSecret(secret);
269
+ }
270
+
271
+ public getConfirmation(): Observable<any> {
272
+ const dialogRef = this.dialog.open(ActionConfirmationComponent, {
273
+ data: {acceptActionLabel: 'accept',rejectActionLabel:'return', warningMsg: 'confirmation_message'},
274
+ width: '600px',
275
+ height: 'auto'
276
+ });
277
+ return dialogRef.afterClosed();
278
+ }
279
+
280
+ }
281
+
282
+ declare global {
283
+ interface Navigator {
284
+ msSaveBlob: (blobOrBase64: Blob | string, filename: string) => void
285
+ }
286
+ }
@@ -0,0 +1,3 @@
1
+ export * from './backend-service';
2
+ export * from './top-panel';
3
+ export * from './trigger-form.service'
@@ -0,0 +1,17 @@
1
+ import {Injectable} from "@angular/core";
2
+ import {BehaviorSubject} from "rxjs";
3
+ import {SnackMessage} from "../base-model/snack-message.model";
4
+
5
+ @Injectable({
6
+ providedIn: 'root'
7
+ })
8
+ export class TopPanel {
9
+
10
+ public topPanelMessage$ = new BehaviorSubject<SnackMessage>({
11
+ message: '',
12
+ translate: false,
13
+ type: 'info',
14
+ translateParams: {}
15
+ });
16
+
17
+ }
@@ -0,0 +1,11 @@
1
+ import {Injectable, signal} from '@angular/core';
2
+
3
+ @Injectable({
4
+ providedIn: 'root'
5
+ })
6
+
7
+
8
+ export class ShareDataService {
9
+ trigger = signal<boolean>(true);
10
+ enableTrigger = (() => (() => this.trigger.update((val) => val = !val)))
11
+ }
@@ -0,0 +1,10 @@
1
+ // projects/your-lib/src/lib/shared/shared.module.ts
2
+ import { NgModule } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ // Import other shared modules (e.g., Angular Material modules)
5
+
6
+ @NgModule({
7
+ imports: [CommonModule],
8
+ exports: [CommonModule]
9
+ })
10
+ export class SharedModule { }
@@ -0,0 +1,252 @@
1
+ @use '@angular/material' as mat;
2
+
3
+ @include mat.core();
4
+
5
+ //@import url('https://fonts.googleapis.com/css2?family=Cairo:wght@200..1000&display=swap');
6
+
7
+ // Define a custom typography config that overrides the font-family as well as the
8
+ // `headlines` and `body-1` levels.
9
+
10
+ $custom-typography: mat.define-typography-config(
11
+ $font-family: 'Cairo',
12
+ $headline-1: mat.define-typography-level(112px, 112px, 300),
13
+ $headline-2: mat.define-typography-level(56px, 56px, 400),
14
+ $headline-3: mat.define-typography-level(45px, 48px, 400),
15
+ $headline-4: mat.define-typography-level(34px, 40px, 400),
16
+ $headline-5: mat.define-typography-level(24px, 32px, 400),
17
+ $headline-6: mat.define-typography-level(20px, 32px, 500),
18
+ $subtitle-2: mat.define-typography-level(16px, 28px, 400),
19
+ $subtitle-1: mat.define-typography-level(15px, 24px, 400),
20
+ $body-2: mat.define-typography-level(14px, 24px, 500),
21
+ $body-1: mat.define-typography-level(14px, 20px, 400),
22
+ $caption: mat.define-typography-level(12px, 20px, 400),
23
+ $button: mat.define-typography-level(14px, 14px, 500),
24
+ $overline: mat.define-typography-level(inherit, 1.125, 400)
25
+ );
26
+
27
+ @include mat.all-component-themes($custom-typography);
28
+ // Override typography for all Angular Material, including mat-base-typography and all components.
29
+ @include mat.all-component-typographies($custom-typography);
30
+
31
+ @include mat.core-theme($custom-typography);
32
+
33
+ /* For use in src/lib/core/theming/_palette.scss */
34
+ $md-primary: (
35
+ 50 : #e3f4f5,
36
+ 100 : #b8e4e6,
37
+ 200 : #89d2d5,
38
+ 300 : #59bfc4,
39
+ 400 : #36b2b8,
40
+ 500 : var(--primary-color),
41
+ 600 : #109ca4,
42
+ 700 : #0d929a,
43
+ 800 : #0a8991,
44
+ 900 : #057880,
45
+ A100 : #aef9ff,
46
+ A200 : #7bf4ff,
47
+ A400 : #48f0ff,
48
+ A700 : #2feeff,
49
+ contrast: (
50
+ 50 : #000000,
51
+ 100 : #000000,
52
+ 200 : #000000,
53
+ 300 : #000000,
54
+ 400 : #000000,
55
+ 500 : #ffffff,
56
+ 600 : #ffffff,
57
+ 700 : #ffffff,
58
+ 800 : #ffffff,
59
+ 900 : #ffffff,
60
+ A100 : #000000,
61
+ A200 : #000000,
62
+ A400 : #000000,
63
+ A700 : #000000,
64
+ )
65
+ );
66
+
67
+ $md-accent: (
68
+ 50 : #e0e0e0,
69
+ 100 : #b3b3b3,
70
+ 200 : #808080,
71
+ 300 : #4d4d4d,
72
+ 400 : #262626,
73
+ 500 : var(--accent-color),
74
+ 600 : #000000,
75
+ 700 : #000000,
76
+ 800 : #000000,
77
+ 900 : #000000,
78
+ A100 : #a6a6a6,
79
+ A200 : #8c8c8c,
80
+ A400 : #737373,
81
+ A700 : #666666,
82
+ contrast: (
83
+ 50 : #000000,
84
+ 100 : #000000,
85
+ 200 : #000000,
86
+ 300 : #ffffff,
87
+ 400 : #ffffff,
88
+ 500 : #ffffff,
89
+ 600 : #ffffff,
90
+ 700 : #ffffff,
91
+ 800 : #ffffff,
92
+ 900 : #ffffff,
93
+ A100 : #000000,
94
+ A200 : #000000,
95
+ A400 : #ffffff,
96
+ A700 : #ffffff,
97
+ )
98
+ );
99
+
100
+ $md-warn: (
101
+ 50 : #f9e0e0,
102
+ 100 : #f0b3b3,
103
+ 200 : #e68080,
104
+ 300 : #db4d4d,
105
+ 400 : #d42626,
106
+ 500 : #cc0000,
107
+ 600 : #c70000,
108
+ 700 : #c00000,
109
+ 800 : #b90000,
110
+ 900 : #ad0000,
111
+ A100 : #ffd7d7,
112
+ A200 : #ffa4a4,
113
+ A400 : #ff7171,
114
+ A700 : #ff5858,
115
+ contrast: (
116
+ 50 : #000000,
117
+ 100 : #000000,
118
+ 200 : #000000,
119
+ 300 : #ffffff,
120
+ 400 : #ffffff,
121
+ 500 : #ffffff,
122
+ 600 : #ffffff,
123
+ 700 : #ffffff,
124
+ 800 : #ffffff,
125
+ 900 : #ffffff,
126
+ A100 : #000000,
127
+ A200 : #000000,
128
+ A400 : #000000,
129
+ A700 : #000000,
130
+ )
131
+ );
132
+
133
+
134
+ $my-theme-primary: mat.define-palette($md-primary);
135
+ $my-theme-accent: mat.define-palette($md-accent);
136
+ //the third, for the warn color, is the predefined material red palette
137
+ $my-theme-warn: mat.define-palette(mat.$red-palette);
138
+
139
+ $invoiceq-theme: mat.define-light-theme($my-theme-primary, $my-theme-accent, $my-theme-warn);
140
+
141
+ @include mat.all-component-themes($invoiceq-theme);
142
+
143
+ :root {
144
+ --primary-color: #00A8C4;
145
+ --background-color: white;
146
+ --accent-color: #222222;
147
+ --primary-color-2nd: #1C355E;
148
+ }
149
+
150
+ .primpary-color-a40 {
151
+ background-color: rgba(var(--primary-color), 0.4);
152
+ }
153
+
154
+ .mat-button-toggle {
155
+ background-color: mat.get-color-from-palette($md-primary);
156
+ color: mat.get-color-from-palette($md-primary, default-contrast);
157
+ }
158
+
159
+ .mat-sort-header-arrow {
160
+ color: white !important;
161
+ }
162
+ .mat-button-toggle-checked {
163
+ background-color: mat.get-color-from-palette($md-accent);
164
+ color: mat.get-color-from-palette($md-accent, default-contrast);
165
+ }
166
+
167
+ .mat-checkbox-layout { white-space: normal !important; }
168
+ .mat-form-field-wrapper {
169
+ padding-bottom: 0.25em;
170
+ }
171
+
172
+ .mat-form-field-prefix {
173
+ align-self: center;
174
+ margin-top: -2px;
175
+ font-weight: bold;
176
+ }
177
+
178
+ .mat-form-field {
179
+ font-size: 14px;
180
+ //font-weight: bold;
181
+ //border-radius: 12px !important;
182
+ }
183
+
184
+ .mat-form-field-appearance-outline .mat-form-field-outline {
185
+ background-color: white;
186
+ border-radius: 5px;
187
+ }
188
+
189
+ .mat-list-option[aria-selected="true"] {
190
+ background: transparent !important;
191
+ color: var(--primary-color);
192
+ }
193
+ .mat-list-option {
194
+ background: transparent !important;
195
+ margin-top: 1px;
196
+ }
197
+ .mat-select-panel {
198
+ font-size: 18px;
199
+ width: 50%;
200
+ }
201
+ .mat-list-option:hover {
202
+ font-weight: bold;
203
+ background-color: transparent !important;
204
+ }
205
+
206
+ .mat-drawer-container {
207
+ background-color: transparent !important;
208
+ }
209
+
210
+ tr.mat-row:hover {
211
+ font-weight: bold;
212
+ box-shadow: 1px 3px 3px rgba(0,0,0,0.25);
213
+
214
+ transform: scale(1);
215
+ }
216
+ .mat-flat-button.mat-accent, .mat-raised-button.mat-accent, .mat-fab.mat-accent, .mat-mini-fab.mat-accent {
217
+ background-color: var(--accent-color);
218
+ }
219
+
220
+ .no-data {
221
+ pointer-events: none;
222
+ }
223
+ .allow-no-data {
224
+ color: red;
225
+ }
226
+
227
+
228
+ .iq_loading {
229
+ position: absolute;
230
+ top: 0;
231
+ left: 0;
232
+ right: 0;
233
+ background: rgba(0, 0, 0, 0.15);
234
+ z-index: 1000;
235
+ display: flex;
236
+ align-items: center;
237
+ justify-content: center;
238
+ width: 100%;
239
+ height: 100%;
240
+ }
241
+
242
+ .primary-chip {
243
+ background-color: var(--primary-color);
244
+ }
245
+
246
+ .accent-chip {
247
+ background-color: var(--accent-color);
248
+ }
249
+
250
+
251
+
252
+ //.mat-sidenav-container { background-color: transparent!important; }