tin-spa 20.14.99 → 20.14.113

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 (51) hide show
  1. package/core/index.d.ts +3033 -0
  2. package/fesm2022/tin-spa-accounting.module-Cg4vWaJE.mjs +2231 -0
  3. package/fesm2022/tin-spa-accounting.module-Cg4vWaJE.mjs.map +1 -0
  4. package/fesm2022/tin-spa-agent-page.component-DJvMPjCQ.mjs +39 -0
  5. package/fesm2022/tin-spa-agent-page.component-DJvMPjCQ.mjs.map +1 -0
  6. package/fesm2022/tin-spa-agent.component-D0CGGnGZ.mjs +1379 -0
  7. package/fesm2022/tin-spa-agent.component-D0CGGnGZ.mjs.map +1 -0
  8. package/fesm2022/tin-spa-assets.module-qIWNwJ2E.mjs +167 -0
  9. package/fesm2022/tin-spa-assets.module-qIWNwJ2E.mjs.map +1 -0
  10. package/fesm2022/tin-spa-core.mjs +13628 -0
  11. package/fesm2022/tin-spa-core.mjs.map +1 -0
  12. package/fesm2022/tin-spa-general-erp.module-CoYxceLj.mjs +138 -0
  13. package/fesm2022/tin-spa-general-erp.module-CoYxceLj.mjs.map +1 -0
  14. package/fesm2022/tin-spa-hr.module-CKPZ9ZOj.mjs +134 -0
  15. package/fesm2022/tin-spa-hr.module-CKPZ9ZOj.mjs.map +1 -0
  16. package/fesm2022/tin-spa-http.mjs +117 -0
  17. package/fesm2022/tin-spa-http.mjs.map +1 -0
  18. package/fesm2022/tin-spa-inventory.module-DRKAcNau.mjs +338 -0
  19. package/fesm2022/tin-spa-inventory.module-DRKAcNau.mjs.map +1 -0
  20. package/fesm2022/tin-spa-keys.mjs +14 -0
  21. package/fesm2022/tin-spa-keys.mjs.map +1 -0
  22. package/fesm2022/tin-spa-landing.mjs +189 -0
  23. package/fesm2022/tin-spa-landing.mjs.map +1 -0
  24. package/fesm2022/tin-spa-loans.module-BTDmgrWo.mjs +115 -0
  25. package/fesm2022/tin-spa-loans.module-BTDmgrWo.mjs.map +1 -0
  26. package/fesm2022/tin-spa-login.mjs +719 -0
  27. package/fesm2022/tin-spa-login.mjs.map +1 -0
  28. package/fesm2022/tin-spa-manufacturing.module-CHta6oV_.mjs +96 -0
  29. package/fesm2022/tin-spa-manufacturing.module-CHta6oV_.mjs.map +1 -0
  30. package/fesm2022/tin-spa-map.mjs +750 -0
  31. package/fesm2022/tin-spa-map.mjs.map +1 -0
  32. package/fesm2022/tin-spa-payroll.module-CZ_GO1jF.mjs +847 -0
  33. package/fesm2022/tin-spa-payroll.module-CZ_GO1jF.mjs.map +1 -0
  34. package/fesm2022/tin-spa-purchasing.module-NCdwquaF.mjs +161 -0
  35. package/fesm2022/tin-spa-purchasing.module-NCdwquaF.mjs.map +1 -0
  36. package/fesm2022/tin-spa-sales.module-D0uEGJW7.mjs +1346 -0
  37. package/fesm2022/tin-spa-sales.module-D0uEGJW7.mjs.map +1 -0
  38. package/fesm2022/tin-spa-tenancy-erp.module-GwIv8Wbc.mjs +932 -0
  39. package/fesm2022/tin-spa-tenancy-erp.module-GwIv8Wbc.mjs.map +1 -0
  40. package/fesm2022/tin-spa-tin-spa-Cqe5hYTr.mjs +22576 -0
  41. package/fesm2022/tin-spa-tin-spa-Cqe5hYTr.mjs.map +1 -0
  42. package/fesm2022/tin-spa.mjs +2 -42079
  43. package/fesm2022/tin-spa.mjs.map +1 -1
  44. package/http/index.d.ts +16 -0
  45. package/index.d.ts +588 -4687
  46. package/keys/index.d.ts +4 -0
  47. package/landing/index.d.ts +175 -0
  48. package/login/index.d.ts +141 -0
  49. package/map/index.d.ts +148 -0
  50. package/package.json +25 -1
  51. package/src/tin-styles.css +81 -2
@@ -0,0 +1,3033 @@
1
+ import * as rxjs from 'rxjs';
2
+ import { BehaviorSubject, Observable, Subject } from 'rxjs';
3
+ import * as tin_spa_core from 'tin-spa/core';
4
+ import * as i0 from '@angular/core';
5
+ import { InjectionToken, EnvironmentProviders, Injector, NgZone, OnInit, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
6
+ import * as i11 from '@angular/material/dialog';
7
+ import { MatDialog, MatDialogRef } from '@angular/material/dialog';
8
+ import { HttpClient, HttpContext, HttpResponse, HttpErrorResponse, HttpContextToken } from '@angular/common/http';
9
+ import * as i31 from '@angular/router';
10
+ import { Router, ActivatedRoute } from '@angular/router';
11
+ import * as i12 from '@angular/material/snack-bar';
12
+ import { MatSnackBar } from '@angular/material/snack-bar';
13
+ import { SocialUser, SocialAuthService } from '@abacritt/angularx-social-login';
14
+ import * as signalR from '@microsoft/signalr';
15
+ import * as i1 from '@angular/common';
16
+ import { PlatformLocation, LocationStrategy } from '@angular/common';
17
+ import { IPublicClientApplication } from '@azure/msal-browser';
18
+ import * as i2 from '@angular/forms';
19
+ import { FormControl } from '@angular/forms';
20
+ import * as i3 from '@angular/material/menu';
21
+ import * as i4 from '@angular/material/slider';
22
+ import * as i5 from '@angular/material/table';
23
+ import * as i6 from '@angular/material/paginator';
24
+ import * as i7 from '@angular/material/checkbox';
25
+ import * as i8 from '@angular/material/badge';
26
+ import * as i9 from '@angular/material/button';
27
+ import * as i10 from '@angular/material/icon';
28
+ import * as i13 from '@angular/material/tabs';
29
+ import * as i14 from '@angular/material/form-field';
30
+ import * as i15 from '@angular/material/input';
31
+ import * as i16 from '@angular/material/card';
32
+ import * as i17 from '@angular/material/chips';
33
+ import * as i18 from '@angular/material/select';
34
+ import * as i19 from '@angular/material/core';
35
+ import * as i20 from '@angular/material/progress-spinner';
36
+ import * as i21 from '@angular/material/list';
37
+ import * as i22 from '@angular/material/autocomplete';
38
+ import * as i23 from '@angular/material/tooltip';
39
+ import * as i24 from '@angular/material/sort';
40
+ import * as i25 from '@angular/material/datepicker';
41
+ import * as i26 from '@angular/material/stepper';
42
+ import * as i27 from '@angular/material/radio';
43
+ import * as i28 from '@angular/material/progress-bar';
44
+ import * as i29 from '@angular/material/sidenav';
45
+ import * as i30 from '@angular/material/toolbar';
46
+ import * as i32 from '@angular/material/expansion';
47
+
48
+ interface DocumentSource {
49
+ listAction: Action;
50
+ streamUrl: string;
51
+ downloadable?: boolean;
52
+ allowedExtensions?: string[];
53
+ }
54
+ type DocumentKind = 'pdf' | 'image' | 'word' | 'excel' | 'text' | 'unsupported';
55
+ interface LoadedDocument {
56
+ fileName: string;
57
+ kind: DocumentKind;
58
+ contentType: string;
59
+ size: number;
60
+ objectUrl: string;
61
+ blob: Blob;
62
+ }
63
+ interface DocumentViewerData {
64
+ documents: string[];
65
+ fileName?: string;
66
+ streamUrl: string;
67
+ values?: {
68
+ [key: string]: any;
69
+ };
70
+ downloadable?: boolean;
71
+ title?: string;
72
+ }
73
+ interface DocumentError {
74
+ status: number;
75
+ reason: 'denied' | 'missing' | 'unauthenticated' | 'network' | 'failed';
76
+ message: string;
77
+ fileName: string;
78
+ }
79
+
80
+ declare enum InvoiceStatus {
81
+ Draft = 0,
82
+ Submitted = 1,
83
+ Paid = 2,
84
+ Discarded = 3,
85
+ Paying = 4,
86
+ WrittenOff = 5
87
+ }
88
+ declare enum CreditNoteStatus {
89
+ Draft = 0,
90
+ Submitted = 1,
91
+ Applied = 2,
92
+ Discarded = 3
93
+ }
94
+ declare enum FiscalPeriodStatus {
95
+ Open = 0,
96
+ Closed = 1,
97
+ Locked = 2
98
+ }
99
+ declare enum QuoteStatus {
100
+ Draft = 0,
101
+ Sent = 1,
102
+ Accepted = 2,
103
+ Rejected = 3,
104
+ Expired = 4,
105
+ Converted = 5
106
+ }
107
+ declare enum InvoiceItemType {
108
+ General = 0,
109
+ Product = 1,
110
+ Service = 2
111
+ }
112
+ declare enum AssetStatus {
113
+ Draft = 0,
114
+ Active = 1,
115
+ FullyDepreciated = 2,
116
+ Disposed = 3
117
+ }
118
+ declare enum TransactionTiming {
119
+ Immediate = 0,// Payment occurs now - no AR/AP created
120
+ Deferred = 1
121
+ }
122
+ declare enum PurchaseStatus {
123
+ Draft = 0,
124
+ Confirmed = 1,// Changed: Receiving → Confirmed (same int=1)
125
+ Completed = 2
126
+ }
127
+ declare enum ReceiptStatus {
128
+ Draft = 0,
129
+ Completed = 1
130
+ }
131
+ declare enum UnitOfMeasure {
132
+ Piece = 0,
133
+ Box = 1,
134
+ Case = 2,
135
+ Carton = 3,
136
+ Pallet = 4,
137
+ Kilogram = 5,
138
+ Gram = 6,
139
+ Litre = 7,
140
+ Millilitre = 8,
141
+ Meter = 9,
142
+ Pack = 10,
143
+ Set = 11,
144
+ Dozen = 12
145
+ }
146
+ declare class loginConfig {
147
+ constructor();
148
+ appName: string;
149
+ selfService: boolean;
150
+ logo: string;
151
+ logoSize: string;
152
+ }
153
+ declare class Account {
154
+ user: User;
155
+ profile: Profile;
156
+ }
157
+ declare class User {
158
+ constructor();
159
+ userName: string;
160
+ password: string;
161
+ tries: string;
162
+ locked: string;
163
+ logged: string;
164
+ disabled: string;
165
+ changepassword: string;
166
+ dateCreated: string;
167
+ dateUpdated: string;
168
+ dateExpire: string;
169
+ token: string;
170
+ tokenExpire: string;
171
+ authType: string;
172
+ rememberMe: boolean;
173
+ }
174
+ declare class ChangeUserPassword {
175
+ constructor();
176
+ userName: string;
177
+ currentPassword: string;
178
+ newPassword: string;
179
+ confirmPassword: string;
180
+ }
181
+ declare class Register {
182
+ constructor();
183
+ userName: string;
184
+ roleID: number;
185
+ firstName: string;
186
+ lastName: string;
187
+ email: string;
188
+ authType: string;
189
+ password: string;
190
+ }
191
+ declare class Profile {
192
+ constructor();
193
+ profileID: string;
194
+ userName: string;
195
+ roleID: number;
196
+ firstName: string;
197
+ lastName: string;
198
+ email: string;
199
+ empID: string;
200
+ arID: string;
201
+ authType: string;
202
+ password: string;
203
+ role: Role;
204
+ code: string;
205
+ }
206
+ declare class Role {
207
+ constructor();
208
+ roleID: number;
209
+ roleName: string;
210
+ cap1: boolean;
211
+ cap2: boolean;
212
+ cap3: boolean;
213
+ cap4: boolean;
214
+ cap5: boolean;
215
+ cap6: boolean;
216
+ cap7: boolean;
217
+ cap8: boolean;
218
+ cap9: boolean;
219
+ cap10: boolean;
220
+ cap11: boolean;
221
+ cap12: boolean;
222
+ cap13: boolean;
223
+ cap14: boolean;
224
+ cap15: boolean;
225
+ cap16: boolean;
226
+ cap17: boolean;
227
+ cap18: boolean;
228
+ cap19: boolean;
229
+ cap20: boolean;
230
+ cap21: boolean;
231
+ cap22: boolean;
232
+ cap23: boolean;
233
+ cap24: boolean;
234
+ cap25: boolean;
235
+ cap26: boolean;
236
+ cap27: boolean;
237
+ cap28: boolean;
238
+ cap29: boolean;
239
+ cap30: boolean;
240
+ cap31: boolean;
241
+ cap32: boolean;
242
+ cap33: boolean;
243
+ cap34: boolean;
244
+ cap35: boolean;
245
+ cap36: boolean;
246
+ cap37: boolean;
247
+ cap38: boolean;
248
+ cap39: boolean;
249
+ cap40: boolean;
250
+ cap41: boolean;
251
+ cap42: boolean;
252
+ cap43: boolean;
253
+ cap44: boolean;
254
+ cap45: boolean;
255
+ cap46: boolean;
256
+ cap47: boolean;
257
+ cap48: boolean;
258
+ cap49: boolean;
259
+ cap50: boolean;
260
+ cap51: boolean;
261
+ cap52: boolean;
262
+ cap53: boolean;
263
+ cap54: boolean;
264
+ cap55: boolean;
265
+ cap56: boolean;
266
+ cap57: boolean;
267
+ cap58: boolean;
268
+ cap59: boolean;
269
+ cap60: boolean;
270
+ cap61: boolean;
271
+ cap62: boolean;
272
+ cap63: boolean;
273
+ cap64: boolean;
274
+ cap65: boolean;
275
+ cap66: boolean;
276
+ cap67: boolean;
277
+ cap68: boolean;
278
+ cap69: boolean;
279
+ cap70: boolean;
280
+ cap71: boolean;
281
+ cap72: boolean;
282
+ cap73: boolean;
283
+ cap74: boolean;
284
+ cap75: boolean;
285
+ cap76: boolean;
286
+ cap77: boolean;
287
+ cap78: boolean;
288
+ cap79: boolean;
289
+ cap80: boolean;
290
+ cap81: boolean;
291
+ cap82: boolean;
292
+ cap83: boolean;
293
+ cap84: boolean;
294
+ cap85: boolean;
295
+ cap86: boolean;
296
+ cap87: boolean;
297
+ cap88: boolean;
298
+ cap89: boolean;
299
+ cap90: boolean;
300
+ cap91: boolean;
301
+ cap92: boolean;
302
+ cap93: boolean;
303
+ cap94: boolean;
304
+ cap95: boolean;
305
+ cap96: boolean;
306
+ cap97: boolean;
307
+ cap98: boolean;
308
+ cap99: boolean;
309
+ cap100: boolean;
310
+ cap101: boolean;
311
+ cap102: boolean;
312
+ cap103: boolean;
313
+ cap104: boolean;
314
+ cap105: boolean;
315
+ cap106: boolean;
316
+ cap107: boolean;
317
+ cap108: boolean;
318
+ cap109: boolean;
319
+ cap110: boolean;
320
+ cap111: boolean;
321
+ cap112: boolean;
322
+ cap113: boolean;
323
+ cap114: boolean;
324
+ cap115: boolean;
325
+ cap116: boolean;
326
+ cap117: boolean;
327
+ cap118: boolean;
328
+ cap119: boolean;
329
+ cap120: boolean;
330
+ cap121: boolean;
331
+ cap122: boolean;
332
+ cap123: boolean;
333
+ cap124: boolean;
334
+ cap125: boolean;
335
+ cap126: boolean;
336
+ cap127: boolean;
337
+ cap128: boolean;
338
+ cap129: boolean;
339
+ cap130: boolean;
340
+ cap131: boolean;
341
+ cap132: boolean;
342
+ cap133: boolean;
343
+ cap134: boolean;
344
+ cap135: boolean;
345
+ cap136: boolean;
346
+ cap137: boolean;
347
+ cap138: boolean;
348
+ cap139: boolean;
349
+ cap140: boolean;
350
+ cap141: boolean;
351
+ cap142: boolean;
352
+ cap143: boolean;
353
+ cap144: boolean;
354
+ cap145: boolean;
355
+ cap146: boolean;
356
+ cap147: boolean;
357
+ cap148: boolean;
358
+ cap149: boolean;
359
+ cap150: boolean;
360
+ cap151: boolean;
361
+ cap152: boolean;
362
+ cap153: boolean;
363
+ cap154: boolean;
364
+ cap155: boolean;
365
+ cap156: boolean;
366
+ cap157: boolean;
367
+ cap158: boolean;
368
+ cap159: boolean;
369
+ cap160: boolean;
370
+ cap161: boolean;
371
+ cap162: boolean;
372
+ cap163: boolean;
373
+ cap164: boolean;
374
+ cap165: boolean;
375
+ cap166: boolean;
376
+ cap167: boolean;
377
+ cap168: boolean;
378
+ cap169: boolean;
379
+ cap170: boolean;
380
+ cap171: boolean;
381
+ cap172: boolean;
382
+ cap173: boolean;
383
+ cap174: boolean;
384
+ cap175: boolean;
385
+ cap176: boolean;
386
+ cap177: boolean;
387
+ cap178: boolean;
388
+ cap179: boolean;
389
+ cap180: boolean;
390
+ cap181: boolean;
391
+ cap182: boolean;
392
+ cap183: boolean;
393
+ cap184: boolean;
394
+ cap185: boolean;
395
+ cap186: boolean;
396
+ cap187: boolean;
397
+ cap188: boolean;
398
+ cap189: boolean;
399
+ cap190: boolean;
400
+ cap191: boolean;
401
+ cap192: boolean;
402
+ cap193: boolean;
403
+ cap194: boolean;
404
+ cap195: boolean;
405
+ cap196: boolean;
406
+ cap197: boolean;
407
+ cap198: boolean;
408
+ cap199: boolean;
409
+ cap200: boolean;
410
+ }
411
+ declare class SignupData {
412
+ token: string;
413
+ authType: string;
414
+ firstName: string;
415
+ lastName: string;
416
+ email: string;
417
+ orgName: string;
418
+ termsAccepted: boolean;
419
+ invitations: any[];
420
+ acceptedInvitationIds: number[];
421
+ }
422
+ declare enum LogLevel {
423
+ All = 0,
424
+ Debug = 1,
425
+ Info = 2,
426
+ Warn = 3,
427
+ Error = 4,
428
+ Fatal = 5,
429
+ Off = 6
430
+ }
431
+
432
+ interface BitwiseOption {
433
+ name?: string;
434
+ value: number;
435
+ selected: boolean;
436
+ icon?: Icon;
437
+ }
438
+ declare enum RoleAccess {
439
+ None = 0,
440
+ View = 1,
441
+ Edit = 2,
442
+ Create = 3,
443
+ Full = 4
444
+ }
445
+ declare enum MovementType {
446
+ In = 0,
447
+ Out = 1
448
+ }
449
+ declare enum DetailsSource {
450
+ Row = 0,
451
+ Url = 1
452
+ }
453
+ declare class dialogOptions {
454
+ width?: string;
455
+ height?: string;
456
+ }
457
+ interface CloseOptions {
458
+ position?: 'top' | 'bottom';
459
+ text?: string;
460
+ }
461
+ declare class DetailsDialogConfig {
462
+ stepConfig?: StepConfig;
463
+ statusConfig?: StatusConfig;
464
+ formConfig: FormConfig;
465
+ tableConfig?: TableConfig;
466
+ tableConfigs?: TableConfig[];
467
+ buttons?: Button[];
468
+ details?: any;
469
+ heroField?: any;
470
+ heroValue?: any;
471
+ mode?: 'create' | 'edit' | 'view';
472
+ detailsSource?: DetailsSource;
473
+ options?: dialogOptions;
474
+ autoRefreshConfig?: AutoRefreshConfig;
475
+ refreshOnClose?: boolean;
476
+ refreshOnCloseIfActioned?: boolean;
477
+ causeTableRefresh?: boolean;
478
+ closeOptions?: CloseOptions;
479
+ initAction?: Action;
480
+ hideTablesInCreateMode?: boolean;
481
+ disableFloatingTabs?: boolean;
482
+ allowUserKeepOpen?: boolean;
483
+ keepOpenBehavior?: 'reset' | 'edit';
484
+ nestingLevel?: number;
485
+ localMode?: boolean;
486
+ quietLoading?: boolean;
487
+ seedDefaults?: boolean;
488
+ createButtonContext?: any;
489
+ drillIn?: boolean;
490
+ }
491
+ declare class Action {
492
+ method?: 'get' | 'post';
493
+ url: string;
494
+ params?: any[];
495
+ successMessage?: string;
496
+ isFormData?: boolean;
497
+ skipCache?: boolean;
498
+ cacheDurationMinutes?: number;
499
+ silent?: boolean;
500
+ }
501
+ interface CacheRule {
502
+ pattern: string;
503
+ durationMinutes: number;
504
+ }
505
+ declare class CacheConfig {
506
+ rules: CacheRule[];
507
+ addRule(pattern: string, durationMinutes: number): void;
508
+ getDuration(url: string): number | null;
509
+ private matchesPattern;
510
+ }
511
+ type OfflineOpStatus = 'pending' | 'syncing' | 'synced' | 'failed' | 'conflict' | 'stale';
512
+ interface OfflineConfig {
513
+ enabled: boolean;
514
+ cacheRows?: number;
515
+ cacheLookups?: boolean | string[];
516
+ lookupMaxAgeHours?: number;
517
+ queue?: {
518
+ create?: boolean;
519
+ edit?: boolean;
520
+ delete?: boolean;
521
+ };
522
+ maxQueueAgeHours?: number;
523
+ readOnly?: boolean;
524
+ }
525
+ interface SearchField extends Field {
526
+ show?: boolean;
527
+ }
528
+ declare class SearchConfig {
529
+ fields: SearchField[];
530
+ searchAction?: Action;
531
+ emailResults?: boolean;
532
+ tileConfig?: TileConfig;
533
+ }
534
+ declare class SecurityConfig {
535
+ allow?: CapItem[];
536
+ deny?: CapItem[];
537
+ }
538
+ interface NoAccessInfo {
539
+ entity: string;
540
+ capDisplay: string;
541
+ capName: string;
542
+ }
543
+ interface ChildField {
544
+ childField?: string;
545
+ childValueField?: string;
546
+ }
547
+ interface AutoRefreshConfig {
548
+ interval?: number;
549
+ stopCondition?: (data: any) => boolean;
550
+ defaultOn?: boolean;
551
+ }
552
+ type VisibilityValue = boolean | ((value: any) => boolean);
553
+ interface Field {
554
+ securityConfig?: SecurityConfig;
555
+ name: string;
556
+ placeholder?: string;
557
+ type: 'text' | 'email-single' | 'text-area' | 'text-single' | 'text-multi' | 'text-mask' | 'date' | 'date-short' | 'datetime' | 'datetimesec' | 'checkbox' | 'select' | 'select-multi' | 'money' | 'number' | 'section' | 'blank' | 'chip' | 'file' | 'file-view' | 'icon' | 'spinner' | 'button' | 'label' | 'email' | 'composite' | 'string' | 'html' | 'editor';
558
+ alias?: string;
559
+ options?: any[];
560
+ optionDisplay?: string;
561
+ optionValue?: string;
562
+ masterOptionValue?: string;
563
+ defaultValue?: any;
564
+ defaultFirstValue?: boolean;
565
+ required?: boolean;
566
+ requiredCondition?: (value: any) => boolean;
567
+ min?: any;
568
+ max?: any;
569
+ rows?: number;
570
+ span?: boolean;
571
+ width?: string;
572
+ size?: string;
573
+ readonly?: boolean;
574
+ hidden?: VisibilityValue;
575
+ visible?: VisibilityValue;
576
+ preserveOnHide?: boolean;
577
+ serverOwned?: boolean;
578
+ readonlyAlways?: boolean;
579
+ strict?: boolean;
580
+ path?: string;
581
+ keyField?: string;
582
+ hint?: string;
583
+ masterField?: string;
584
+ masterValueField?: string;
585
+ masterDefaultValueField?: string;
586
+ children?: ChildField[];
587
+ masterOptions?: any[];
588
+ optionsUnavailableOffline?: boolean;
589
+ nullable?: boolean;
590
+ noDefault?: boolean;
591
+ copyContent?: boolean;
592
+ clearContent?: boolean;
593
+ selectAll?: boolean;
594
+ refetchOnChange?: boolean;
595
+ format?: 'text' | 'money' | 'date' | 'datetime' | 'number';
596
+ hideOnCreate?: boolean;
597
+ hideOnExists?: boolean;
598
+ readonlyCondition?: (value: any) => boolean;
599
+ detailsConfig?: DetailsDialogConfig;
600
+ loadAction?: Action;
601
+ loadIDField?: string;
602
+ infoMessage?: string;
603
+ suffix?: string;
604
+ subfields?: Field[];
605
+ optionsSubject?: BehaviorSubject<any[]>;
606
+ section?: string;
607
+ fileOptions?: {
608
+ allowedExtensions?: string[];
609
+ maxSizeMB?: number;
610
+ compressImages?: boolean;
611
+ };
612
+ documentSource?: DocumentSource;
613
+ collapsed?: boolean;
614
+ collapsedCondition?: (value: any) => boolean;
615
+ collapseOnView?: boolean;
616
+ maxHeight?: string;
617
+ editorConfig?: any;
618
+ valueCalculation?: (value: any) => any;
619
+ regex?: {
620
+ pattern: string;
621
+ message: string;
622
+ };
623
+ onSelectChange?: (value: any, data: any, option?: any, config?: any) => void;
624
+ icon?: Icon;
625
+ color?: string;
626
+ onChange?: (value: any, allValues: any, config?: any) => void;
627
+ }
628
+ interface StatusState {
629
+ condition: (data: any) => boolean;
630
+ icon: string;
631
+ color: string;
632
+ }
633
+ interface StatusItem {
634
+ name: string;
635
+ hidden?: VisibilityValue;
636
+ visible?: VisibilityValue;
637
+ states: StatusState[];
638
+ }
639
+ interface StatusConfig {
640
+ items: StatusItem[];
641
+ sticky?: boolean;
642
+ hidden?: VisibilityValue;
643
+ visible?: VisibilityValue;
644
+ }
645
+ declare class AlertMessage {
646
+ type?: 'success' | 'info' | 'warn' | 'critical';
647
+ message?: string;
648
+ messageField?: string;
649
+ hidden?: VisibilityValue;
650
+ visible?: VisibilityValue;
651
+ }
652
+ declare class AlertConfig {
653
+ subject?: string;
654
+ compact?: boolean;
655
+ sticky?: boolean;
656
+ messages: AlertMessage[];
657
+ }
658
+ declare class NotesConfig {
659
+ title?: string;
660
+ loadAction?: Action;
661
+ loadIDField?: string;
662
+ notes?: any[];
663
+ nameField?: string;
664
+ dateField?: string;
665
+ commentField?: string;
666
+ }
667
+ declare class FormConfig {
668
+ title?: string;
669
+ fixedTitle?: boolean;
670
+ alertConfig?: AlertConfig;
671
+ fields: Field[];
672
+ mode?: 'create' | 'edit' | 'view';
673
+ button?: Button;
674
+ multiColumn?: boolean;
675
+ reset?: boolean;
676
+ loadAction?: Action;
677
+ heroField?: any;
678
+ heroValue?: any;
679
+ security?: SecurityConfig;
680
+ includeAudit?: boolean;
681
+ notesConfig?: NotesConfig;
682
+ preserveHiddenValues?: boolean;
683
+ }
684
+ interface Confirm {
685
+ message?: string;
686
+ func?: (data: any) => string;
687
+ confirmLabel?: string;
688
+ cancelLabel?: string;
689
+ destructive?: boolean;
690
+ requirePhrase?: string;
691
+ }
692
+ interface Button {
693
+ name: string;
694
+ visible?: VisibilityValue;
695
+ hidden?: VisibilityValue;
696
+ display?: string | ((data: any) => string);
697
+ icon?: Icon;
698
+ disabled?: (value: any) => boolean;
699
+ color?: string;
700
+ tip?: string;
701
+ dialog?: boolean;
702
+ action?: Action;
703
+ confirm?: Confirm;
704
+ inDialog?: boolean;
705
+ inHeader?: boolean;
706
+ emitOwnName?: boolean;
707
+ detailsConfig?: DetailsDialogConfig;
708
+ setHeroField?: boolean;
709
+ ignorePendingApproval?: boolean;
710
+ keepOpen?: boolean;
711
+ onSuccess?: (response: ApiResponse, details: any) => void;
712
+ onClick?: (details: any, reload?: () => void) => void;
713
+ editOnSuccess?: boolean;
714
+ onSuccessButton?: Button;
715
+ skipValidation?: boolean;
716
+ resetMode?: 'create' | 'edit';
717
+ rowDataMap?: Record<string, string | ((data: any) => any)>;
718
+ capability?: CapItem | string;
719
+ requiredAccess?: RoleAccess;
720
+ }
721
+ interface CapsuleConfig {
722
+ displayField: string;
723
+ leftIcons?: Icon[];
724
+ rightIcons?: Icon[];
725
+ loadAction?: Action;
726
+ }
727
+ interface CardConfig {
728
+ imageField?: string;
729
+ titleField: string;
730
+ subtitleField?: string;
731
+ contentFields: string[];
732
+ columns?: number;
733
+ elevation?: 'low' | 'medium' | 'high';
734
+ }
735
+ type TileStyle = 'basic' | 'icon' | 'chart';
736
+ type TileChartType = 'line' | 'bar' | 'pie' | 'doughnut';
737
+ interface TileChartConfig {
738
+ type: TileChartType;
739
+ dataField?: string;
740
+ data?: any;
741
+ color?: string;
742
+ colors?: string[];
743
+ height?: number;
744
+ gaugeValue?: number;
745
+ gaugeColor?: string;
746
+ }
747
+ interface Tile {
748
+ name: string;
749
+ alias?: string;
750
+ value?: string;
751
+ color?: string | ((data: any) => string);
752
+ format?: 'money' | 'number';
753
+ selectedTile?: string;
754
+ hidden?: VisibilityValue;
755
+ visible?: VisibilityValue;
756
+ info?: string;
757
+ prefix?: string;
758
+ suffix?: string;
759
+ action?: Action;
760
+ style?: TileStyle;
761
+ icon?: string;
762
+ footer?: string;
763
+ footerIcon?: string;
764
+ badge?: string;
765
+ badgeColor?: string;
766
+ chart?: TileChartConfig;
767
+ filter?: (row: any) => boolean;
768
+ data?: any;
769
+ }
770
+ interface FilterChip {
771
+ key: string;
772
+ label: string;
773
+ icon?: string;
774
+ count?: number;
775
+ action?: Action;
776
+ filter?: (row: any) => boolean;
777
+ data?: any;
778
+ hidden?: VisibilityValue;
779
+ visible?: VisibilityValue;
780
+ }
781
+ declare class FilterChipConfig {
782
+ chips?: FilterChip[];
783
+ loadAction?: Action;
784
+ chipAction?: Action;
785
+ chipFilter?: (row: any, chip: FilterChip) => boolean;
786
+ valueField?: string;
787
+ labelField?: string;
788
+ icon?: string;
789
+ showAll?: boolean;
790
+ allLabel?: string;
791
+ allIcon?: string;
792
+ default?: string;
793
+ layout?: 'wrap' | 'carousel';
794
+ remember?: string;
795
+ orderable?: OrderableConfig | boolean;
796
+ }
797
+ declare class TileConfig {
798
+ tiles: Tile[];
799
+ loadAction?: Action;
800
+ loadInit?: boolean;
801
+ clickable?: boolean;
802
+ headerPosition?: 'top' | 'middle';
803
+ quietLoading?: boolean;
804
+ layout?: 'auto' | 'wrap' | 'carousel';
805
+ minTileWidth?: number;
806
+ maxPerRow?: number;
807
+ hideValueOnMobile?: boolean;
808
+ }
809
+ type SpaChartType = 'line' | 'bar' | 'pie' | 'doughnut';
810
+ interface ChartItem {
811
+ name: string;
812
+ title?: string;
813
+ subtitle?: string;
814
+ footer?: string;
815
+ footerIcon?: string;
816
+ type: SpaChartType;
817
+ loadAction?: Action;
818
+ data?: any;
819
+ colors?: string[];
820
+ height?: string;
821
+ showLegend?: boolean;
822
+ showPoints?: boolean;
823
+ tension?: number;
824
+ gaugeValue?: number;
825
+ gaugeColor?: string;
826
+ hidden?: VisibilityValue;
827
+ visible?: VisibilityValue;
828
+ options?: any;
829
+ }
830
+ declare class ChartConfig {
831
+ charts: ChartItem[];
832
+ loadAction?: Action;
833
+ loadInit?: boolean;
834
+ columns?: number;
835
+ }
836
+ declare class Step {
837
+ name: string;
838
+ value?: any;
839
+ icon?: string;
840
+ hidden?: VisibilityValue;
841
+ visible?: VisibilityValue;
842
+ }
843
+ declare class StepConfig {
844
+ steps: Step[];
845
+ valueField?: string;
846
+ loadAction?: Action;
847
+ loadIDField?: string;
848
+ sticky?: boolean;
849
+ }
850
+ interface Icon {
851
+ name: string;
852
+ color?: string;
853
+ tip?: string;
854
+ tipField?: string;
855
+ bannerField?: string;
856
+ condition?: (value: any) => boolean;
857
+ }
858
+ interface Color {
859
+ name: string;
860
+ condition?: (value: any) => boolean;
861
+ }
862
+ interface GroupData {
863
+ groupValue: any;
864
+ displayName: string;
865
+ icon?: string;
866
+ color?: string;
867
+ items: any[];
868
+ order: number;
869
+ source?: any;
870
+ }
871
+ interface GroupConfig {
872
+ groupValueField?: string;
873
+ displayNameField?: string;
874
+ iconField?: string;
875
+ colorField?: string;
876
+ orderField?: string;
877
+ itemsField?: string;
878
+ itemTextField: string;
879
+ itemIcon?: Icon;
880
+ itemIcons?: Icon[];
881
+ itemAdditionalIcons?: Icon[];
882
+ groupIcons?: Icon[];
883
+ showGroupCount?: boolean;
884
+ emptyGroupMessage?: string;
885
+ showEmptyGroups?: boolean;
886
+ headerButtons?: Button[];
887
+ contextMenuEnabled?: boolean;
888
+ filterEnabled?: boolean;
889
+ dragEnabled?: boolean;
890
+ dropAction?: Action;
891
+ groupOrderable?: OrderableConfig | boolean;
892
+ }
893
+ interface Column {
894
+ name: string;
895
+ type?: 'text' | 'date' | 'date-short' | 'datetime' | 'datetimesec' | 'checkbox' | 'select' | 'money' | 'number' | 'chip' | 'chips' | 'icon' | 'spinner' | 'button' | 'monogram';
896
+ alias?: string;
897
+ keyField?: string;
898
+ listField?: string;
899
+ idField?: string;
900
+ maxLength?: number;
901
+ icon?: Icon;
902
+ color?: Color;
903
+ colors?: Color[];
904
+ icons?: Icon[];
905
+ options?: any[];
906
+ optionDisplay?: string;
907
+ optionValue?: string;
908
+ detailsConfig?: DetailsDialogConfig;
909
+ hidden?: VisibilityValue;
910
+ visible?: VisibilityValue;
911
+ }
912
+ interface InlineEditConfig {
913
+ fields?: string[];
914
+ }
915
+ interface CreateTabConfig {
916
+ navigationProperty: string;
917
+ }
918
+ declare class PaginationConfig {
919
+ pageSize?: number;
920
+ }
921
+ interface OrderableConfig {
922
+ scopeField?: string;
923
+ scopeValue?: any;
924
+ action?: Action;
925
+ handle?: boolean;
926
+ idField?: string;
927
+ scopeMixedReason?: string;
928
+ }
929
+ type TableViewType = 'table' | 'capsule' | 'card' | 'grouped';
930
+ declare class TableConfig {
931
+ viewType?: TableViewType;
932
+ capsuleConfig?: CapsuleConfig;
933
+ cardConfig?: CardConfig;
934
+ groupConfig?: GroupConfig;
935
+ tabTitle?: string;
936
+ tabTemplate?: any;
937
+ noDataMessage?: string;
938
+ columns?: Column[];
939
+ minColumns?: string[];
940
+ identityColumn?: string | false;
941
+ showFilter?: boolean;
942
+ showFilterButton?: boolean;
943
+ holdFilterSpace?: boolean;
944
+ holdHeaderButtonSpace?: boolean;
945
+ elevation?: 'none' | 'low' | 'medium' | 'high';
946
+ formConfig?: FormConfig;
947
+ searchConfig?: SearchConfig;
948
+ tileConfig?: TileConfig;
949
+ chipConfig?: FilterChipConfig;
950
+ stepConfig?: StepConfig;
951
+ buttons?: Button[];
952
+ minButtons?: string[];
953
+ loadAction?: Action;
954
+ countAction?: Action;
955
+ loadIDField?: string;
956
+ loadCriteria?: string;
957
+ lazyLoad?: boolean;
958
+ causeFormRefresh?: boolean;
959
+ logResponse?: boolean;
960
+ flatButtons?: boolean;
961
+ greyOut?: (value: any) => boolean;
962
+ heroField?: any;
963
+ heroValue?: any;
964
+ collapseButtons?: boolean;
965
+ parentData?: any;
966
+ pageSizes?: number[];
967
+ maxButtonsCount?: number;
968
+ hidden?: VisibilityValue;
969
+ visible?: VisibilityValue;
970
+ download?: {
971
+ columns: string[];
972
+ fileName?: string;
973
+ hidden?: VisibilityValue;
974
+ visible?: VisibilityValue;
975
+ };
976
+ upload?: {
977
+ action: Action;
978
+ messages?: AlertMessage[];
979
+ hidden?: VisibilityValue;
980
+ visible?: VisibilityValue;
981
+ };
982
+ import?: ImportConfig;
983
+ realTime?: boolean;
984
+ realTimeFallbackMs?: number;
985
+ entityName?: string;
986
+ offline?: OfflineConfig | boolean;
987
+ pagination?: PaginationConfig;
988
+ orderable?: OrderableConfig | boolean;
989
+ allowUserKeepOpen?: boolean;
990
+ keepOpenBehavior?: 'reset' | 'edit';
991
+ inlineEdit?: boolean | InlineEditConfig;
992
+ createConfig?: CreateTabConfig;
993
+ quietLoading?: boolean;
994
+ inlineErrors?: boolean;
995
+ sectionConfig?: TableSectionConfig;
996
+ caption?: string | ((parent: any) => string);
997
+ hideColumnHeaders?: boolean;
998
+ hideSinglePagePaginator?: boolean;
999
+ }
1000
+ interface TableSectionChip {
1001
+ text?: string;
1002
+ color?: string;
1003
+ hidden?: VisibilityValue;
1004
+ visible?: VisibilityValue;
1005
+ }
1006
+ interface TableSectionConfig {
1007
+ title: string;
1008
+ icon?: string;
1009
+ caption?: string;
1010
+ showCount?: boolean;
1011
+ chips?: TableSectionChip[];
1012
+ buttons?: Button[];
1013
+ collapsible?: boolean;
1014
+ collapsed?: boolean;
1015
+ hideWhenEmpty?: boolean;
1016
+ }
1017
+ declare class PageConfig {
1018
+ title?: string;
1019
+ tableConfig?: TableConfig;
1020
+ searchTableConfig?: TableConfig;
1021
+ titleActions?: Field[];
1022
+ }
1023
+ interface ImportConfig {
1024
+ entity: string;
1025
+ title?: string;
1026
+ securityConfig?: SecurityConfig;
1027
+ hidden?: VisibilityValue;
1028
+ visible?: VisibilityValue;
1029
+ onComplete?: (summary: any) => void;
1030
+ }
1031
+ declare class ApiResponse {
1032
+ success: boolean;
1033
+ message: string;
1034
+ data: any;
1035
+ total?: number;
1036
+ reason?: string;
1037
+ rowVersion?: string;
1038
+ fileMessage?: string;
1039
+ }
1040
+ declare class Constants {
1041
+ static readonly AUTH_USER = "a";
1042
+ static readonly AUTH_NAME = "b";
1043
+ static readonly AUTH_ROLES = "c";
1044
+ static readonly AUTH_TOKEN = "d";
1045
+ static readonly AUTH_TOKEN_EXPIRE = "e";
1046
+ static readonly AUTH_TENANT_NAME = "f";
1047
+ static readonly AUTH_REFRESH_TOKEN = "g";
1048
+ static readonly AUTH_REFRESH_TOKEN_EXPIRE = "h";
1049
+ static readonly AUTH_REMEMBER_ME = "r";
1050
+ static readonly AUTH_TYPE = "i";
1051
+ static readonly LAST_ROUTE = "lr";
1052
+ }
1053
+ declare class ListDialogConfig {
1054
+ name: string;
1055
+ title: string;
1056
+ listName: string;
1057
+ }
1058
+ interface TableDialogConfig {
1059
+ title: string;
1060
+ subtitle?: string;
1061
+ config: TableConfig;
1062
+ }
1063
+ declare class CapItem {
1064
+ constructor();
1065
+ name: string;
1066
+ display: string;
1067
+ enabled: boolean;
1068
+ showMenu: boolean;
1069
+ ignoreSubsDisplay: boolean;
1070
+ type: string;
1071
+ newLine: boolean;
1072
+ link: string;
1073
+ icon: string;
1074
+ capSubItems: CapItem[];
1075
+ color: string;
1076
+ isBool: boolean;
1077
+ featureKey: string;
1078
+ moduleKey: string;
1079
+ }
1080
+ declare class BottomTab {
1081
+ constructor();
1082
+ name: string;
1083
+ display: string;
1084
+ icon: string;
1085
+ link: string;
1086
+ badge?: 'notifications' | '';
1087
+ moduleKey?: string;
1088
+ requires?: 'dayBook';
1089
+ }
1090
+ declare class AppConfig {
1091
+ constructor();
1092
+ appName: string;
1093
+ logo: string;
1094
+ logoSize: string;
1095
+ ADAuth: boolean;
1096
+ localAuth: boolean;
1097
+ googleAuth: boolean;
1098
+ microsoftAuth: boolean;
1099
+ microsoftAuthMessage: string;
1100
+ selfService: boolean;
1101
+ capItems: CapItem[];
1102
+ multitenant: boolean;
1103
+ private navigationValue;
1104
+ private static navigationWarned;
1105
+ set navigation(value: 'top' | 'side' | 'side-modern' | 'top-modern');
1106
+ get navigation(): 'top' | 'side-modern' | 'top-modern';
1107
+ docsBaseUrl?: string;
1108
+ loginStyle: string;
1109
+ dialogStyle: string;
1110
+ loginTitle: string;
1111
+ loginMessage: string;
1112
+ termsUrl: string;
1113
+ privacyUrl: string;
1114
+ siteUrl: string;
1115
+ navWidth: string;
1116
+ navColor: string;
1117
+ navImage: string;
1118
+ keepSignedIn: boolean;
1119
+ resumeLastRoute: boolean;
1120
+ quietLoading: boolean;
1121
+ namedDestructiveActions: boolean;
1122
+ setupConfig: SetupConfig;
1123
+ dayBookConfig: DayBookConfig;
1124
+ appConfigurationConfig: AppConfigurationConfig;
1125
+ bottomTabs: BottomTab[];
1126
+ }
1127
+ interface SetupStepAction {
1128
+ button?: Button;
1129
+ link?: string;
1130
+ linkDisplay?: string;
1131
+ import?: ImportConfig;
1132
+ roleTemplates?: boolean;
1133
+ seed?: boolean;
1134
+ view?: TableConfig;
1135
+ }
1136
+ interface SetupConfig {
1137
+ enabled: boolean;
1138
+ title?: string;
1139
+ stepActions: {
1140
+ [key: string]: SetupStepAction;
1141
+ };
1142
+ demoData?: boolean;
1143
+ }
1144
+ interface SetupStep {
1145
+ key: string;
1146
+ title: string;
1147
+ description: string;
1148
+ category: string;
1149
+ order: number;
1150
+ required: boolean;
1151
+ target: number;
1152
+ current: number;
1153
+ complete: boolean;
1154
+ link: string;
1155
+ icon: string;
1156
+ module?: string;
1157
+ }
1158
+ interface SetupStatus {
1159
+ steps: SetupStep[];
1160
+ completed: number;
1161
+ total: number;
1162
+ percent: number;
1163
+ pending: number;
1164
+ requiredTotal?: number;
1165
+ requiredCompleted?: number;
1166
+ modules?: SetupModule[];
1167
+ }
1168
+ interface SetupModule {
1169
+ key: string;
1170
+ title: string;
1171
+ description: string;
1172
+ icon: string;
1173
+ group?: string;
1174
+ order: number;
1175
+ core: boolean;
1176
+ enabled: boolean;
1177
+ }
1178
+ interface SetupRoleTemplate {
1179
+ key: string;
1180
+ name: string;
1181
+ description: string;
1182
+ icon: string;
1183
+ module?: string;
1184
+ exists: boolean;
1185
+ }
1186
+ interface SetupSeedOffer {
1187
+ key: string;
1188
+ stepKey: string;
1189
+ name: string;
1190
+ description: string;
1191
+ effect: string;
1192
+ sampleNotice: string;
1193
+ icon: string;
1194
+ module?: string;
1195
+ includes: string[];
1196
+ wouldCreate: number;
1197
+ existing: number;
1198
+ applied: boolean;
1199
+ }
1200
+ interface SetupPreset {
1201
+ key: string;
1202
+ name: string;
1203
+ description: string;
1204
+ effect: string;
1205
+ icon: string;
1206
+ group: string;
1207
+ module?: string;
1208
+ modelName: string;
1209
+ preferredRoleKeys: string[];
1210
+ exists: boolean;
1211
+ roleID?: number;
1212
+ }
1213
+ interface SetupNotificationPreset extends SetupPreset {
1214
+ operationType: number;
1215
+ }
1216
+ interface SetupApprovalPreset extends SetupPreset {
1217
+ createApprovalRequired: boolean;
1218
+ editApprovalRequired: boolean;
1219
+ deleteApprovalRequired: boolean;
1220
+ levelName: string;
1221
+ }
1222
+ interface SetupPresetSelection {
1223
+ key: string;
1224
+ roleID: number;
1225
+ roleIDs?: number[];
1226
+ }
1227
+ interface SetupPresetRole {
1228
+ name: string;
1229
+ value: number;
1230
+ }
1231
+ interface SetupPresetCatalog<T> {
1232
+ presets: T[];
1233
+ roles: SetupPresetRole[];
1234
+ }
1235
+ interface DayBookLane {
1236
+ key: string;
1237
+ label: string;
1238
+ icon?: string;
1239
+ valueField?: string | ((book: any) => number);
1240
+ hidden?: VisibilityValue;
1241
+ visible?: VisibilityValue;
1242
+ }
1243
+ interface DayBookStage {
1244
+ key: string;
1245
+ lane?: string;
1246
+ label: string;
1247
+ icon?: string;
1248
+ countField: string;
1249
+ valueField?: string | ((book: any) => number);
1250
+ hint?: string;
1251
+ alert?: VisibilityValue;
1252
+ hidden?: VisibilityValue;
1253
+ visible?: VisibilityValue;
1254
+ }
1255
+ type DayBookPresentation = Pick<Button, 'display' | 'icon' | 'color' | 'tip'>;
1256
+ interface DayBookButtonView extends DayBookPresentation {
1257
+ button: string;
1258
+ prefill?: Record<string, string | ((data: any) => any)>;
1259
+ }
1260
+ type DayBookColumnPresentation = Pick<Column, 'alias' | 'icon' | 'color'>;
1261
+ interface DayBookColumnView extends DayBookColumnPresentation {
1262
+ column: string;
1263
+ }
1264
+ type DayBookTableView = Pick<TableConfig, 'minColumns' | 'elevation' | 'sectionConfig' | 'flatButtons' | 'collapseButtons' | 'maxButtonsCount' | 'showFilter' | 'showFilterButton' | 'noDataMessage' | 'identityColumn' | 'hideColumnHeaders'>;
1265
+ interface DayBookSection {
1266
+ key: string;
1267
+ lane?: string;
1268
+ listField: string;
1269
+ collapsed?: boolean;
1270
+ tableConfig?: TableConfig;
1271
+ columns?: (string | DayBookColumnView)[];
1272
+ omitColumns?: string[];
1273
+ extraColumns?: Column[];
1274
+ buttons?: (string | DayBookButtonView)[];
1275
+ extraButtons?: Button[];
1276
+ overrides?: DayBookTableView;
1277
+ label?: string;
1278
+ icon?: string;
1279
+ caption?: string | ((book: any) => string);
1280
+ tone?: 'alert' | 'quiet';
1281
+ pageSize?: number;
1282
+ hidden?: VisibilityValue;
1283
+ visible?: VisibilityValue;
1284
+ }
1285
+ interface DayBookStageTiles {
1286
+ layout?: 'wrap' | 'carousel';
1287
+ minTileWidth?: number;
1288
+ maxPerRow?: number;
1289
+ }
1290
+ interface DayBookConfig {
1291
+ title?: string;
1292
+ subtitle?: string;
1293
+ loadAction: Action;
1294
+ lanes?: DayBookLane[];
1295
+ stages: DayBookStage[];
1296
+ sections: DayBookSection[];
1297
+ actions?: Button[];
1298
+ stageTiles?: DayBookStageTiles;
1299
+ booksFromField?: string;
1300
+ owedField?: string | ((book: any) => number);
1301
+ allClearMessage?: string;
1302
+ loadingMessage?: string;
1303
+ pageSize?: number;
1304
+ groupLanes?: boolean;
1305
+ expandedGroups?: number;
1306
+ }
1307
+ interface AppConfigSection {
1308
+ key: string;
1309
+ title: string;
1310
+ icon?: string;
1311
+ hint?: string;
1312
+ collapsible?: boolean;
1313
+ collapsed?: boolean;
1314
+ toggleField?: string;
1315
+ fields: Field[];
1316
+ hidden?: VisibilityValue;
1317
+ visible?: VisibilityValue;
1318
+ summary?: (data: any, fields: Field[]) => string;
1319
+ }
1320
+ interface AppConfigurationConfig {
1321
+ title?: string;
1322
+ loadAction?: Action;
1323
+ saveAction?: Action;
1324
+ resetAction?: Action;
1325
+ security?: SecurityConfig;
1326
+ sections: AppConfigSection[];
1327
+ }
1328
+ interface ChecklistAction {
1329
+ type?: 'create' | 'import' | 'link' | 'view' | 'seed' | 'custom';
1330
+ display?: string;
1331
+ icon?: string;
1332
+ primary?: boolean;
1333
+ disabled?: (item: ChecklistItem) => boolean;
1334
+ onClick: (item: ChecklistItem) => void;
1335
+ }
1336
+ interface ChecklistItem {
1337
+ key: string;
1338
+ title: string;
1339
+ description?: string;
1340
+ complete?: boolean;
1341
+ optional?: boolean;
1342
+ progressText?: string;
1343
+ actions?: ChecklistAction[];
1344
+ data?: any;
1345
+ hidden?: VisibilityValue;
1346
+ visible?: VisibilityValue;
1347
+ section?: string;
1348
+ }
1349
+ interface ChecklistConfig {
1350
+ items: ChecklistItem[];
1351
+ expandedKey?: string;
1352
+ itemTemplate?: any;
1353
+ }
1354
+
1355
+ declare class DateBounds {
1356
+ private static readonly TODAY;
1357
+ static resolve(bound: any, edge: 'start' | 'end', context?: any): Date | null;
1358
+ static isDynamic(bound: any): boolean;
1359
+ static toLocalInput(d: Date): string;
1360
+ static toLocalDate(d: Date): string;
1361
+ private static startOfDay;
1362
+ private static endOfDay;
1363
+ }
1364
+
1365
+ declare class Core {
1366
+ static deepClone(obj: any): any;
1367
+ static deepClone2(obj: any): any;
1368
+ static camelToWords(value: string): string;
1369
+ static generateObject(fields: Field[]): {};
1370
+ static resetObject(fields: Field[], data: any): void;
1371
+ static checkSecurity(security: SecurityConfig, currentRole: any): boolean;
1372
+ static hasFormAccess(formConfig: FormConfig, currentRole: any): boolean;
1373
+ static getFormAccess(formConfig: FormConfig, currentRole: any): RoleAccess;
1374
+ static describeFormAccess(formConfig: FormConfig, currentRole: any): NoAccessInfo | null;
1375
+ static noAccessTitle(entity?: string | null): string;
1376
+ static noAccessHint(capDisplay?: string | null): string;
1377
+ private static getRoleAccess;
1378
+ static resolveVisibility(v: VisibilityValue | undefined, data: any): boolean | undefined;
1379
+ static isItemVisible(item: {
1380
+ visible?: VisibilityValue;
1381
+ hidden?: VisibilityValue;
1382
+ }, data: any): boolean;
1383
+ static testVisible(config: FormConfig, data: any, field: Field, currentRole: any): boolean;
1384
+ static isPredicateHidden(config: FormConfig, data: any, field: Field): boolean;
1385
+ static buildSubmitPayload(config: FormConfig, data: any): any;
1386
+ static testReadOnly(config: FormConfig, data: any, field: Field): boolean;
1387
+ static buttonDisplay(button: {
1388
+ display?: string | ((data: any) => string);
1389
+ } | null | undefined, item?: any): string | undefined;
1390
+ static testVisibleHeaderButton(data: any, btn: any): boolean;
1391
+ static getVisibleSubfields(config: FormConfig, data: any, field: Field, currentRole: any): Field[];
1392
+ static validateObject(fields: Field[], data: any, onInvalid?: (field: Field) => void): string;
1393
+ private static validateField;
1394
+ static testRequired(config: FormConfig, data: any, field: Field): boolean;
1395
+ static getInitialValue(field: Field): any;
1396
+ static getClone(x: any): any;
1397
+ static getNumber(value: string): string | 0;
1398
+ static parseMultiValue(raw: any): string[];
1399
+ static getFirstDayOfMonth(): Date;
1400
+ static emailIsValid(email: any): boolean;
1401
+ static isValidUNCPath(path: string): boolean;
1402
+ static isValidDate(date: any): boolean;
1403
+ static isValidEmailList(list: string): boolean;
1404
+ static nullDate: string;
1405
+ static isNumber(value: string | number): boolean;
1406
+ static getDiff(startDate: any, endDate?: string): string;
1407
+ static nowDate(NoTime?: boolean): string;
1408
+ static getFormatedDate(dateString: string, NoTime?: boolean): string;
1409
+ static getFormatedDate2(d: Date, NoTime?: boolean): string;
1410
+ static getBusinessDatesCount(startDate: string, endDate: string): number;
1411
+ static optionLabel(fields: Field[] | undefined, name: string, value: any): string;
1412
+ }
1413
+ declare class DetailsDialogProcessor {
1414
+ static processDetailsConfig(detailsConfig: DetailsDialogConfig, row: any): DetailsDialogConfig;
1415
+ static initializeConfigs(detailsConfig: DetailsDialogConfig): {
1416
+ tableConfig: tin_spa_core.TableConfig;
1417
+ tableConfigs: tin_spa_core.TableConfig[];
1418
+ formConfig: FormConfig;
1419
+ stepConfig: tin_spa_core.StepConfig;
1420
+ statusConfig: tin_spa_core.StatusConfig;
1421
+ buttons: tin_spa_core.Button[];
1422
+ };
1423
+ static setHeroValue(detailsConfig: DetailsDialogConfig, details: any): void;
1424
+ static handleFormMode(detailsConfig: DetailsDialogConfig, formConfig: FormConfig): {
1425
+ details: any;
1426
+ loadByAction: boolean;
1427
+ action: any;
1428
+ };
1429
+ private static loadDetailsData;
1430
+ private static loadDetailsFromUrl;
1431
+ static setFileField(formConfig: FormConfig): Field;
1432
+ static setupButtons(buttons: any): {
1433
+ extraButtons: any;
1434
+ createButton: any;
1435
+ editButton: any;
1436
+ deleteButton: any;
1437
+ };
1438
+ }
1439
+
1440
+ declare class HttpService {
1441
+ private httpClient;
1442
+ private router;
1443
+ constructor(httpClient: HttpClient, router: Router);
1444
+ private apiUrlValue;
1445
+ get apiUrl(): string;
1446
+ set apiUrl(value: string);
1447
+ get apiUrlConfigured(): boolean;
1448
+ Post(service: string, data: any, context?: HttpContext): Observable<any>;
1449
+ Put(service: string, data: any): Observable<any>;
1450
+ Post_Raw(url: string, data: any): Observable<any>;
1451
+ Post_WithFile(service: string, data: any, file: File): Observable<Object>;
1452
+ Post_FormData(service: string, formData: FormData, context?: HttpContext): Observable<Object>;
1453
+ Get(service: string, context?: HttpContext): Observable<any>;
1454
+ Get_Raw(url: string): Observable<any>;
1455
+ Get_Blob(service: string, context?: HttpContext): Observable<HttpResponse<Blob>>;
1456
+ Error(error: HttpErrorResponse): "Unauthorized" | "Connection failed";
1457
+ private withContext;
1458
+ private httpOptions_Legacy;
1459
+ private httpOptions_Files;
1460
+ static ɵfac: i0.ɵɵFactoryDeclaration<HttpService, never>;
1461
+ static ɵprov: i0.ɵɵInjectableDeclaration<HttpService>;
1462
+ }
1463
+
1464
+ declare class MessageService {
1465
+ private snackBar;
1466
+ dialog: MatDialog;
1467
+ constructor(snackBar: MatSnackBar, dialog: MatDialog);
1468
+ toast(msg: string): void;
1469
+ info(details: string): void;
1470
+ infoWithSubject(subject: string, details: string): void;
1471
+ error(details: string): void;
1472
+ errorWithSubject(subject: string, details: string, reference?: string): void;
1473
+ warning(details: string, subject?: string): void;
1474
+ success(details: string, subject?: string): void;
1475
+ confirm(msg: string, confirmLabel?: string, cancelLabel?: string, destructive?: boolean, requirePhrase?: string): Observable<any>;
1476
+ static ɵfac: i0.ɵɵFactoryDeclaration<MessageService, never>;
1477
+ static ɵprov: i0.ɵɵInjectableDeclaration<MessageService>;
1478
+ }
1479
+
1480
+ declare class StorageService {
1481
+ private useSession;
1482
+ constructor();
1483
+ setSessionMode(useSession: boolean): void;
1484
+ private getStorage;
1485
+ store(storageKey: string, value: any): Promise<void>;
1486
+ get(storageKey: string): Promise<any>;
1487
+ removeStorageItem(storageKey: string): Promise<void>;
1488
+ clear(): Promise<void>;
1489
+ storePersistent(storageKey: string, value: any): void;
1490
+ getPersistent(storageKey: string): any;
1491
+ removePersistent(storageKey: string): void;
1492
+ clearAll(): void;
1493
+ clearSessionData(): void;
1494
+ hasKey(storageKey: string): boolean;
1495
+ static ɵfac: i0.ɵɵFactoryDeclaration<StorageService, never>;
1496
+ static ɵprov: i0.ɵɵInjectableDeclaration<StorageService>;
1497
+ }
1498
+
1499
+ declare class LogService {
1500
+ constructor();
1501
+ level: LogLevel;
1502
+ logToConsole: boolean;
1503
+ logToApi: boolean;
1504
+ debug(msg: string, ...optionalParams: any[]): void;
1505
+ info(msg: string, ...optionalParams: any[]): void;
1506
+ warn(msg: string, ...optionalParams: any[]): void;
1507
+ error(msg: string, ...optionalParams: any[]): void;
1508
+ fatal(msg: string, ...optionalParams: any[]): void;
1509
+ log(msg: string, ...optionalParams: any[]): void;
1510
+ private writeToLog;
1511
+ private formatParams;
1512
+ private shouldLog;
1513
+ static ɵfac: i0.ɵɵFactoryDeclaration<LogService, never>;
1514
+ static ɵprov: i0.ɵɵInjectableDeclaration<LogService>;
1515
+ }
1516
+
1517
+ interface TinSpaMsalConfig {
1518
+ clientId: string;
1519
+ authority: string;
1520
+ redirectUri: string;
1521
+ }
1522
+ interface TinSpaTableDefaults {
1523
+ /** Default for TableConfig.realTime. */
1524
+ realTime?: boolean;
1525
+ /** Default for TableConfig.realTimeFallbackMs — the wait before a real-time table falls back to a refresh. Library default 3000. */
1526
+ realTimeFallbackMs?: number;
1527
+ /** Default for TableConfig.offline. `true` is shorthand for { enabled: true }. */
1528
+ offline?: any;
1529
+ /** Default for TableConfig.pagination. `true` is shorthand for the library's default page size. */
1530
+ pagination?: any;
1531
+ }
1532
+ interface TinSpaRuntimeConfig {
1533
+ /** Use path routing (/home) instead of hash routing (/#/home). Default false (hash). */
1534
+ pathRouting: boolean;
1535
+ /** Enable real-time (SignalR) features. Default false (disabled). */
1536
+ realTime: boolean;
1537
+ /** Enable offline capability (TinSync: read cache + outbox + sync tray + connectivity indicator). Default false —
1538
+ * apps that never use offline tables should leave this off so none of the offline machinery ever runs for them. */
1539
+ offline?: boolean;
1540
+ /** Enable Microsoft SSO (MSAL). Only activates in a secure context (HTTPS/localhost). Default false. */
1541
+ microsoftAuth: boolean;
1542
+ /** MSAL credentials — required only when microsoftAuth is used. */
1543
+ msal?: TinSpaMsalConfig;
1544
+ /** Added: app-wide defaults applied to every spa-table that does not state its own value. */
1545
+ tableDefaults?: TinSpaTableDefaults;
1546
+ }
1547
+ declare const TIN_SPA_RUNTIME_CONFIG: InjectionToken<TinSpaRuntimeConfig>;
1548
+ declare function tinSpaLocationStrategyFactory(platformLocation: PlatformLocation, baseHref: string, config: TinSpaRuntimeConfig): LocationStrategy;
1549
+ /** Overlays assets/appsettings.json values (when the app loaded one) onto the code-declared config. */
1550
+ declare function tinSpaRuntimeConfigFactory(codeConfig: TinSpaRuntimeConfig): TinSpaRuntimeConfig;
1551
+ declare function tinSpaMsalInstanceFactory(config: TinSpaRuntimeConfig): IPublicClientApplication;
1552
+ /**
1553
+ * Wires up tin-spa runtime behaviours (routing strategy, real-time, MSAL) from a single config.
1554
+ * Add the result to your AppModule (or bootstrap) providers.
1555
+ */
1556
+ declare function provideTinSpaRuntime(config: Partial<TinSpaRuntimeConfig>): EnvironmentProviders;
1557
+
1558
+ declare class RedactingSignalRLogger implements signalR.ILogger {
1559
+ private minimumLevel;
1560
+ constructor(minimumLevel?: signalR.LogLevel);
1561
+ log(logLevel: signalR.LogLevel, message: string): void;
1562
+ }
1563
+ interface EntityChangeEvent {
1564
+ entityName: string;
1565
+ data: any;
1566
+ }
1567
+ interface NotificationEvent {
1568
+ message: string;
1569
+ category: string;
1570
+ type: string;
1571
+ sender: string;
1572
+ }
1573
+ interface VehiclePositionFrame {
1574
+ vehicleID: number;
1575
+ lat: number;
1576
+ lng: number;
1577
+ at: string;
1578
+ speed?: number | null;
1579
+ heading?: number | null;
1580
+ }
1581
+ declare class SignalRService {
1582
+ private runtimeConfig;
1583
+ private hubConnection;
1584
+ private notificationCount;
1585
+ notificationCount$: rxjs.Observable<number>;
1586
+ private entityCreated;
1587
+ private entityUpdated;
1588
+ private entityDeleted;
1589
+ entityCreated$: rxjs.Observable<EntityChangeEvent>;
1590
+ entityUpdated$: rxjs.Observable<EntityChangeEvent>;
1591
+ entityDeleted$: rxjs.Observable<EntityChangeEvent>;
1592
+ private vehiclePosition;
1593
+ vehiclePosition$: rxjs.Observable<VehiclePositionFrame>;
1594
+ private notificationReceived;
1595
+ notificationReceived$: rxjs.Observable<NotificationEvent>;
1596
+ private agentMessage;
1597
+ private agentTyping;
1598
+ agentMessage$: rxjs.Observable<any>;
1599
+ agentTyping$: rxjs.Observable<boolean>;
1600
+ onReconnected: (() => void) | null;
1601
+ onDataReconnected: (() => void) | null;
1602
+ private dataHubConnected;
1603
+ dataHubConnected$: rxjs.Observable<boolean>;
1604
+ private currentToken;
1605
+ constructor(runtimeConfig: TinSpaRuntimeConfig | null);
1606
+ /** Effective real-time enablement: legacy E2E kill-switch wins, else the configured runtime flag. */
1607
+ private realTimeEnabled;
1608
+ /** Public: whether SignalR is the authoritative connection signal (used by OfflineService to pick SignalR vs ping). */
1609
+ get isRealTime(): boolean;
1610
+ private buildingConnection;
1611
+ private connectionGeneration;
1612
+ startConnection(hubUrl: string, token: string): void;
1613
+ private buildConnection;
1614
+ updateToken(token: string): void;
1615
+ private forcingReconnect;
1616
+ /**
1617
+ * Reconnect the hub NOW if real-time is enabled and the connection isn't up. Driven by OfflineService
1618
+ * connectivity (the ping heartbeat) so the real-time indicator recovers on the SAME signal that flips the
1619
+ * offline indicator back to online — they stay married "hand in glove". Handles both states the built-in
1620
+ * auto-reconnect leaves us in: Reconnecting (stuck waiting on a long backoff interval → interrupt and connect
1621
+ * now) and Disconnected (auto-reconnect exhausted after a long outage → start fresh). Safe to call repeatedly.
1622
+ */
1623
+ reconnectIfNeeded(): void;
1624
+ stopConnection(): void;
1625
+ static ɵfac: i0.ɵɵFactoryDeclaration<SignalRService, [{ optional: true; }]>;
1626
+ static ɵprov: i0.ɵɵInjectableDeclaration<SignalRService>;
1627
+ }
1628
+
1629
+ type RefreshResult = 'success' | 'rejected' | 'network' | 'absent';
1630
+ declare class AuthService {
1631
+ private _route;
1632
+ private socialService;
1633
+ private storage;
1634
+ router: Router;
1635
+ private httpService;
1636
+ private messageService;
1637
+ private logService;
1638
+ private signalRService;
1639
+ private injector;
1640
+ private googleAuthInitialized;
1641
+ private refreshPromise;
1642
+ private refreshTimer;
1643
+ private socialUserSource;
1644
+ socialUserObserv: rxjs.Observable<SocialUser>;
1645
+ constructor(_route: ActivatedRoute, socialService: SocialAuthService, storage: StorageService, router: Router, httpService: HttpService, messageService: MessageService, logService: LogService, signalRService: SignalRService, injector: Injector);
1646
+ private initializeGoogleAuth;
1647
+ clearSession(revokeOnServer?: boolean): void;
1648
+ sessionExpired(): void;
1649
+ logoff(): void;
1650
+ private loggedin;
1651
+ private loggedinSource;
1652
+ loggedinObserv: rxjs.Observable<boolean>;
1653
+ Updateloggedin(loggedin: boolean): void;
1654
+ private autoLogin;
1655
+ private autoLoginSource;
1656
+ autoLoginObserv: rxjs.Observable<boolean>;
1657
+ UpdateAutoLogin(autoLogin: boolean): void;
1658
+ private token;
1659
+ tokenSource: BehaviorSubject<string>;
1660
+ tokenObserv: rxjs.Observable<string>;
1661
+ UpdateToken(newToken: string): void;
1662
+ private tokenExpire;
1663
+ tokenExpireSource: BehaviorSubject<string>;
1664
+ tokenExpireObserv: rxjs.Observable<string>;
1665
+ UpdateTokenExpire(newTokenExpire: string): void;
1666
+ currentUser: string;
1667
+ private currentUserSource;
1668
+ currentUserObserv: rxjs.Observable<string>;
1669
+ UpdateCurrentUser(newUser: string): void;
1670
+ private islineManager;
1671
+ private isLineManagerSource;
1672
+ isLineManagerObserv: rxjs.Observable<boolean>;
1673
+ UpdateIsLineManager(manager: boolean): void;
1674
+ private currentRole;
1675
+ currentRoleSource: BehaviorSubject<Role>;
1676
+ myRoleObserv: rxjs.Observable<Role>;
1677
+ UpdateRole(role: any): void;
1678
+ private loggedUserSource;
1679
+ loggedUserFullName: rxjs.Observable<string>;
1680
+ updateLoggedUserFullName(userName: string): void;
1681
+ private tenantNameSource;
1682
+ tenantNameObserv: rxjs.Observable<string>;
1683
+ updateTenantName(tenantName: string): void;
1684
+ currentAuthType: string;
1685
+ private authTypeSource;
1686
+ authTypeObserv: rxjs.Observable<string>;
1687
+ UpdateAuthType(authType: string): void;
1688
+ isLocalAuth(): boolean;
1689
+ isAuthorised(capName: string): boolean;
1690
+ isValidToken(): boolean;
1691
+ applyLoginResponse(data: any, rememberMe: boolean): void;
1692
+ private scheduleTokenRefresh;
1693
+ private scheduleRetry;
1694
+ private initVisibilityRefresh;
1695
+ hasValidSession(): boolean;
1696
+ hasRefreshToken(): boolean;
1697
+ tryRestoreSession(): Promise<boolean>;
1698
+ silentRefresh(): Promise<RefreshResult>;
1699
+ checkAuthentication(): Promise<boolean>;
1700
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthService, never>;
1701
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthService>;
1702
+ }
1703
+
1704
+ type ApiErrorKind = 'network' | 'timeout' | 'ratelimited' | 'badrequest' | 'forbidden' | 'notfound' | 'server' | 'unavailable' | 'unknown' | 'appfailure' | 'appfailure-submit';
1705
+ type AppFailureClass = 'opaque' | 'business';
1706
+ type AppFailureContext = 'submit' | 'load' | 'action';
1707
+ interface ApiErrorInfo {
1708
+ kind: ApiErrorKind;
1709
+ title: string;
1710
+ message: string;
1711
+ reference?: string;
1712
+ }
1713
+ declare class ApiErrorService {
1714
+ private messageService;
1715
+ private lastShownAt;
1716
+ /** How long a given kind stays suppressed after being shown. The user described "the same 10 seconds or so". */
1717
+ suppressWindowMs: number;
1718
+ submitSuppressWindowMs: number;
1719
+ constructor(messageService: MessageService);
1720
+ classify(error: HttpErrorResponse): ApiErrorInfo;
1721
+ private retryAfterText;
1722
+ retryAfterSeconds(error: HttpErrorResponse): number;
1723
+ /** True when this kind was already shown inside the suppression window — i.e. the user has already been told. */
1724
+ private isSuppressed;
1725
+ present(error: HttpErrorResponse): ApiErrorInfo;
1726
+ private opaqueMarkers;
1727
+ classifyMessage(message: string | null | undefined): AppFailureClass;
1728
+ extractReference(message: string | null | undefined): string | null;
1729
+ stripReference(message: string | null | undefined): string;
1730
+ presentAppFailure(response: {
1731
+ message?: string;
1732
+ } | null | undefined, context?: AppFailureContext, url?: string): AppFailureClass;
1733
+ /** Clears suppression so the next failure speaks up again — call after a successful request or reconnect. */
1734
+ reset(): void;
1735
+ static ɵfac: i0.ɵɵFactoryDeclaration<ApiErrorService, never>;
1736
+ static ɵprov: i0.ɵɵInjectableDeclaration<ApiErrorService>;
1737
+ }
1738
+
1739
+ interface ResolvedOfflineConfig {
1740
+ enabled: boolean;
1741
+ cacheRows: number;
1742
+ cacheLookups: boolean | string[];
1743
+ lookupMaxAgeHours: number;
1744
+ queue: {
1745
+ create: boolean;
1746
+ edit: boolean;
1747
+ delete: boolean;
1748
+ };
1749
+ maxQueueAgeHours: number;
1750
+ readOnly: boolean;
1751
+ }
1752
+ interface OfflineEntry {
1753
+ entity: string;
1754
+ entityName: string;
1755
+ idField: string;
1756
+ config: ResolvedOfflineConfig;
1757
+ }
1758
+ interface OutboxOp {
1759
+ seq?: number;
1760
+ opId: string;
1761
+ entity: string;
1762
+ entityName: string;
1763
+ url: string;
1764
+ opAction: 'create' | 'edit' | 'delete';
1765
+ payload: any;
1766
+ clientRef?: string;
1767
+ targetId?: any;
1768
+ targetClientRef?: string;
1769
+ refMap?: {
1770
+ [field: string]: string;
1771
+ };
1772
+ status: OfflineOpStatus;
1773
+ attempts: number;
1774
+ lastError?: string;
1775
+ serverRecord?: any;
1776
+ maxAgeHours: number;
1777
+ userId: string;
1778
+ enqueuedAt: number;
1779
+ syncedAt?: number;
1780
+ }
1781
+ declare class OfflineService {
1782
+ private httpService;
1783
+ private authService;
1784
+ private storage;
1785
+ private messageService;
1786
+ private apiErrorService;
1787
+ private signalR;
1788
+ private zone;
1789
+ private runtimeConfig;
1790
+ online$: BehaviorSubject<boolean>;
1791
+ drained$: Subject<string[]>;
1792
+ private db;
1793
+ private reads;
1794
+ private outbox;
1795
+ private meta;
1796
+ private dexie;
1797
+ private opening;
1798
+ private entries;
1799
+ private readUrls;
1800
+ private readPrefixes;
1801
+ registered$: BehaviorSubject<boolean>;
1802
+ private connectivityStarted;
1803
+ private syncStarted;
1804
+ private draining;
1805
+ private backoffTimer;
1806
+ private serverRetryAfterMs;
1807
+ private retryNotBefore;
1808
+ private periodicTimer;
1809
+ private recoveryTimer;
1810
+ constructor(httpService: HttpService, authService: AuthService, storage: StorageService, messageService: MessageService, apiErrorService: ApiErrorService, // Added: shares ONE Retry-After parser with the dialog/toast path
1811
+ signalR: SignalRService, zone: NgZone, runtimeConfig: TinSpaRuntimeConfig | null);
1812
+ /** App-level gate: offline capability only runs when the app opts in via provideTinSpaRuntime({ offline: true }).
1813
+ * When off, register()/ensureConnectivity() no-op, so a consumer that never uses offline runs none of this. */
1814
+ get enabled(): boolean;
1815
+ get hasAny(): boolean;
1816
+ get online(): boolean;
1817
+ get knownOffline(): boolean;
1818
+ outboxView$(): Observable<any[]>;
1819
+ private summarize;
1820
+ private statusLabel;
1821
+ register(config: TableConfig): OfflineEntry | null;
1822
+ private registerReads;
1823
+ private addReadPrefix;
1824
+ private addReadUrl;
1825
+ private registerLookups;
1826
+ private registerButtonLookups;
1827
+ cacheKey(url: string): string;
1828
+ isPagedRead(url: string): boolean;
1829
+ matchRead(url: string): OfflineEntry | null;
1830
+ matchMutation(url: string): OfflineEntry | null;
1831
+ suppressesUrl(absoluteUrl: string): boolean;
1832
+ private resolveConfig;
1833
+ pendingCount(): Promise<number>;
1834
+ clearCacheKeepOutbox(): Promise<void>;
1835
+ deleteLocalData(): Promise<void>;
1836
+ private loadDexie;
1837
+ private ensureOpen;
1838
+ private openStore;
1839
+ putRead(url: string, entity: string, data: any, maxRows: number): Promise<any>;
1840
+ private static readonly DYNAMIC_READS_PER_PREFIX;
1841
+ private pruneDynamicReads;
1842
+ private getRead;
1843
+ handleOfflineRead(action: Action, entry: OfflineEntry, networkCall: () => Observable<ApiResponse>): Observable<ApiResponse>;
1844
+ private serveCachedRead;
1845
+ enqueueOffline(action: Action, data: any, entry: OfflineEntry): Observable<ApiResponse>;
1846
+ private enqueueMutation;
1847
+ pendingOpsFor$(entity: string): Observable<OutboxOp[]>;
1848
+ activeOps$(): Observable<OutboxOp[]>;
1849
+ private pendingCreates;
1850
+ private hasPending;
1851
+ ensureConnectivity(): void;
1852
+ reportNetworkFailure(): void;
1853
+ private static readonly GATEWAY_UNREACHABLE_STATUSES;
1854
+ private verify;
1855
+ private setOnline;
1856
+ private setOffline;
1857
+ private static readonly RECOVERY_BACKOFF_MS;
1858
+ private recoveryStep;
1859
+ private startRecoveryPolling;
1860
+ private scheduleRecoveryTick;
1861
+ private stopRecoveryPolling;
1862
+ private startSync;
1863
+ resumeQueue(): Promise<void>;
1864
+ drain(auto?: boolean): Promise<void>;
1865
+ private drainLoop;
1866
+ private sendOp;
1867
+ private finishOp;
1868
+ private nextAutoOp;
1869
+ private resetOrphans;
1870
+ private cascadeFailure;
1871
+ private scheduleBackoff;
1872
+ retryOp(opId: string): Promise<void>;
1873
+ discardOp(opId: string): Promise<any>;
1874
+ resolveConflict(opId: string, choice: 'keepServer' | 'keepMine'): Promise<void>;
1875
+ private getOp;
1876
+ private parseAction;
1877
+ private hash;
1878
+ private sanitize;
1879
+ static ɵfac: i0.ɵɵFactoryDeclaration<OfflineService, [null, null, null, null, null, null, null, { optional: true; }]>;
1880
+ static ɵprov: i0.ɵɵInjectableDeclaration<OfflineService>;
1881
+ }
1882
+
1883
+ declare class DataServiceLib {
1884
+ private httpService;
1885
+ router: Router;
1886
+ private route;
1887
+ private authService;
1888
+ private offline;
1889
+ private injector;
1890
+ constructor(httpService: HttpService, router: Router, route: ActivatedRoute, authService: AuthService, offline: OfflineService);
1891
+ appConfig: AppConfig;
1892
+ private appConfigSource;
1893
+ appConfigObserv: Observable<AppConfig>;
1894
+ UpdateAppConfig(config: AppConfig): void;
1895
+ get modernDialogs(): boolean;
1896
+ get namedDestructiveActions(): boolean;
1897
+ get dialogPanelClass(): string[];
1898
+ cacheConfig: CacheConfig;
1899
+ configMonthOptions: any[];
1900
+ configDayOptions: any[];
1901
+ configSectionFinancial: AppConfigSection;
1902
+ configBaseSections: AppConfigSection[];
1903
+ get libraryStepActions(): {
1904
+ [key: string]: SetupStepAction;
1905
+ };
1906
+ private libraryStepActionsCache;
1907
+ get libraryDayBookLanes(): DayBookLane[];
1908
+ get libraryDayBookSections(): DayBookSection[];
1909
+ private libraryDayBookSectionsCache;
1910
+ libraryDayBookSection(key: string, overrides?: Partial<DayBookSection>): DayBookSection | undefined;
1911
+ libraryDayBookInvoiceView: (string | DayBookColumnView)[];
1912
+ libraryDayBookChrome: DayBookTableView;
1913
+ get libraryDayBookReceiptsConfig(): TableConfig;
1914
+ get libraryDayBookApprovalsConfig(): TableConfig;
1915
+ get libraryDayBookTasksConfig(): TableConfig;
1916
+ myRole: any;
1917
+ capHome: CapItem;
1918
+ capAdmin: CapItem;
1919
+ capUsers: CapItem;
1920
+ capRoles: CapItem;
1921
+ capLogs: CapItem;
1922
+ capSettings: CapItem;
1923
+ capPasswordPolicy: CapItem;
1924
+ capTenantReset: CapItem;
1925
+ capMultitenant: CapItem;
1926
+ capTenants: CapItem;
1927
+ capMembership: CapItem;
1928
+ capPlans: CapItem;
1929
+ capFeatures: CapItem;
1930
+ capPlanFeatures: CapItem;
1931
+ capSubscription: CapItem;
1932
+ capBilling: CapItem;
1933
+ capGeneral: CapItem;
1934
+ capCustomers: CapItem;
1935
+ capCategories: CapItem;
1936
+ capSubCategories: CapItem;
1937
+ capBrands: CapItem;
1938
+ capGPTCaches: CapItem;
1939
+ capSuppliers: CapItem;
1940
+ capTasks: CapItem;
1941
+ capHR: CapItem;
1942
+ capEmployees: CapItem;
1943
+ capDepartments: CapItem;
1944
+ capPositions: CapItem;
1945
+ capUnlock: CapItem;
1946
+ capReferenceData: CapItem;
1947
+ capGrades: CapItem;
1948
+ capPayroll: CapItem;
1949
+ capSalaryStructures: CapItem;
1950
+ capStatutoryDeductions: CapItem;
1951
+ capPayrollRuns: CapItem;
1952
+ capCommissionConfigs: CapItem;
1953
+ capCommissionEntries: CapItem;
1954
+ capCommissionStatement: CapItem;
1955
+ capSalaryAdvances: CapItem;
1956
+ capOvertimeEntries: CapItem;
1957
+ capApprovals: CapItem;
1958
+ capApprovalsConfig: CapItem;
1959
+ capNotifications: CapItem;
1960
+ capSelfApproval: CapItem;
1961
+ capAppModels: CapItem;
1962
+ capNotificationsConfig: CapItem;
1963
+ capAccountingOutstandingInvoices: CapItem;
1964
+ capAccounting: CapItem;
1965
+ capAccounts: CapItem;
1966
+ capAggregates: CapItem;
1967
+ capReports: CapItem;
1968
+ capBudgets: CapItem;
1969
+ capBudgetVsActual: CapItem;
1970
+ capAging: CapItem;
1971
+ capTaxRates: CapItem;
1972
+ capStandingOrders: CapItem;
1973
+ capTenantTransfers: CapItem;
1974
+ capFixedAssetsModule: CapItem;
1975
+ capFixedAssetsDashboard: CapItem;
1976
+ capFixedAssets: CapItem;
1977
+ capFixedAssetCategories: CapItem;
1978
+ capCurrencies: CapItem;
1979
+ capTransactionTypes: CapItem;
1980
+ capTransactions: CapItem;
1981
+ capAccountingInvoices: CapItem;
1982
+ capCreditNotes: CapItem;
1983
+ capVatReturn: CapItem;
1984
+ capFiscalPeriods: CapItem;
1985
+ capReceipts: CapItem;
1986
+ capBankReconciliation: CapItem;
1987
+ capRevenueSchedules: CapItem;
1988
+ capQuotes: CapItem;
1989
+ capRateCard: CapItem;
1990
+ capInvoicing: CapItem;
1991
+ capLoans: CapItem;
1992
+ capLoanProducts: CapItem;
1993
+ capLoansMain: CapItem;
1994
+ capLoanPayments: CapItem;
1995
+ capInventory: CapItem;
1996
+ capInventoryDashboard: CapItem;
1997
+ capInventoryStock: CapItem;
1998
+ capProducts: CapItem;
1999
+ capServiceItems: CapItem;
2000
+ capBundleProducts: CapItem;
2001
+ capInventoryItems: CapItem;
2002
+ capSupplierPurchaseOrders: CapItem;
2003
+ capInventoryReceipts: CapItem;
2004
+ capSalesOrders: CapItem;
2005
+ capSales: CapItem;
2006
+ capPointOfSale: CapItem;
2007
+ capRequisitions: CapItem;
2008
+ capInventoryAdjustments: CapItem;
2009
+ capInventoryReturns: CapItem;
2010
+ capInventoryTransactions: CapItem;
2011
+ capProductionRecipes: CapItem;
2012
+ capProductionOrders: CapItem;
2013
+ capManufacturing: CapItem;
2014
+ capSalesModule: CapItem;
2015
+ capPurchasingModule: CapItem;
2016
+ capAccountingDashboard: CapItem;
2017
+ capSalesDashboard: CapItem;
2018
+ capPurchasingDashboard: CapItem;
2019
+ capSupplierAging: CapItem;
2020
+ capInvoiceDashboard: CapItem;
2021
+ capPayrollDashboard: CapItem;
2022
+ tmpProfileuserName: string;
2023
+ isProcessing: boolean;
2024
+ departmentFormConfig: FormConfig;
2025
+ editDepartmentButton: Button;
2026
+ resetTenantButton: Button;
2027
+ unlockDepartmentButton: Button;
2028
+ departmentDetailsConfig: DetailsDialogConfig;
2029
+ positionFormConfig: FormConfig;
2030
+ editPositionButton: Button;
2031
+ unlockPositionButton: Button;
2032
+ positionDetailsConfig: DetailsDialogConfig;
2033
+ genders: {
2034
+ name: string;
2035
+ value: number;
2036
+ }[];
2037
+ employeeFormConfig: FormConfig;
2038
+ editEmployeeButton: Button;
2039
+ employeesTableConfig: TableConfig;
2040
+ positionsTableConfig: TableConfig;
2041
+ departmentTableConfig: TableConfig;
2042
+ contactPersonFormConfig: FormConfig;
2043
+ contactPersonTableConfig: TableConfig;
2044
+ customerFormConfig: FormConfig;
2045
+ customerCreateButton: Button;
2046
+ customerEditButton: Button;
2047
+ customerDetailsConfig: DetailsDialogConfig;
2048
+ customerCreateWithContactsButton: Button;
2049
+ customersTableConfig: TableConfig;
2050
+ customerPurchaseOrderFormConfig: FormConfig;
2051
+ customerPurchaseOrdersTableConfig: TableConfig;
2052
+ supplierFormConfig: FormConfig;
2053
+ supplierCreateButton: Button;
2054
+ supplierEditButton: Button;
2055
+ supplierDetailsConfig: DetailsDialogConfig;
2056
+ supplierCreateWithContactsButton: Button;
2057
+ suppliersTableConfig: TableConfig;
2058
+ gptCachesFormConfig: FormConfig;
2059
+ gptCachesTableConfig: TableConfig;
2060
+ notificationOptions: {
2061
+ name: string;
2062
+ value: number;
2063
+ }[];
2064
+ approvalHistoryFormConfig: FormConfig;
2065
+ approvalHistoryTableConfig: TableConfig;
2066
+ approvalFormConfig: FormConfig;
2067
+ approvalActionFormConfig: FormConfig;
2068
+ approveActionDetailsConfig: DetailsDialogConfig;
2069
+ declineActionDetailsConfig: DetailsDialogConfig;
2070
+ approveButton: Button;
2071
+ declineButton: Button;
2072
+ cancelButton: Button;
2073
+ approvalDetailsConfig: DetailsDialogConfig;
2074
+ viewApprovalButton: Button;
2075
+ receivedApprovalsTableConfig: TableConfig;
2076
+ sentApprovalsTableConfig: TableConfig;
2077
+ private listCache;
2078
+ private cacheTimestamps;
2079
+ private ongoingRequests;
2080
+ CallApi(action: Action, data?: any, options?: {
2081
+ silent?: boolean;
2082
+ inlineErrors?: boolean;
2083
+ }): Observable<any>;
2084
+ private isCrudAction;
2085
+ private extractEntityName;
2086
+ private handleCachedCall;
2087
+ private generateCacheKey;
2088
+ private isCacheValid;
2089
+ private getCacheDuration;
2090
+ ClearCache(): void;
2091
+ invalidateListCache(entityUrl: string): void;
2092
+ CheckWelcomed(path?: string): void;
2093
+ Navigate(path: string): void;
2094
+ NavigateWithValue(path: string, value: string): void;
2095
+ GetNavigationValue(): any;
2096
+ tmpAccountID: any;
2097
+ GetUser(): Observable<any>;
2098
+ RegisterAccount(u: any): Observable<any>;
2099
+ GetUserByID(val: string): Observable<any>;
2100
+ UpdateUser(profile: any): Observable<any>;
2101
+ UnlockUser(user: any): Observable<any>;
2102
+ LockUser(user: any): Observable<any>;
2103
+ DeleteUser(user: any): Observable<any>;
2104
+ Login(u: User): Observable<any>;
2105
+ private pendingSignupSource;
2106
+ pendingSignup$: Observable<SignupData>;
2107
+ SetPendingSignup(data: SignupData): void;
2108
+ ClearPendingSignup(): void;
2109
+ Signup(data: SignupData): Observable<any>;
2110
+ ChangePassword(u: any): Observable<any>;
2111
+ ChangePasswordAdmin(u: any): Observable<any>;
2112
+ SelfReset(u: User): Observable<any>;
2113
+ PostRole(role: any, action: string): Observable<any>;
2114
+ PutRole(role: any): Observable<any>;
2115
+ GetRole(by: string, val: string): Observable<any>;
2116
+ GetLog(by: string, val: string): Observable<any>;
2117
+ GetSetting(by: string, val: string): Observable<any>;
2118
+ UpdateSetting(setting: any, action: string): Observable<any>;
2119
+ static ɵfac: i0.ɵɵFactoryDeclaration<DataServiceLib, never>;
2120
+ static ɵprov: i0.ɵɵInjectableDeclaration<DataServiceLib>;
2121
+ }
2122
+
2123
+ declare function phraseSatisfied(typed: any, required: any): boolean;
2124
+ declare class messageDialog implements OnInit {
2125
+ private dialogRef;
2126
+ data: any;
2127
+ private dataService;
2128
+ constructor(dialogRef: MatDialogRef<messageDialog>, data: any, dataService: DataServiceLib);
2129
+ ngOnInit(): void;
2130
+ messageType: any;
2131
+ _messageSubject: any;
2132
+ _messageDetails: any;
2133
+ _messageReference: any;
2134
+ modern: boolean;
2135
+ destructive: boolean;
2136
+ get iconName(): string;
2137
+ private static readonly TYPES;
2138
+ private get spec();
2139
+ get title(): string;
2140
+ private paragraphSource;
2141
+ private paragraphCache;
2142
+ get paragraphs(): string[];
2143
+ get reference(): string | null;
2144
+ get isConfirm(): boolean;
2145
+ _confirmLabel: any;
2146
+ _cancelLabel: any;
2147
+ _okLabel: any;
2148
+ private label;
2149
+ get confirmLabel(): string;
2150
+ get cancelLabel(): string;
2151
+ get okLabel(): string;
2152
+ private static readonly CLASSIC_HEADINGS;
2153
+ get classicHeading(): string;
2154
+ _requirePhrase: any;
2155
+ typedPhrase: string;
2156
+ get requiresPhrase(): boolean;
2157
+ get requiredPhrase(): string;
2158
+ get confirmDisabled(): boolean;
2159
+ onPhraseInput(event: any): void;
2160
+ response(resp: string): void;
2161
+ static ɵfac: i0.ɵɵFactoryDeclaration<messageDialog, [null, null, { optional: true; }]>;
2162
+ static ɵcmp: i0.ɵɵComponentDeclaration<messageDialog, "lib-app-message", never, {}, {}, never, never, false, never>;
2163
+ }
2164
+
2165
+ declare class PrivacyDialogComponent {
2166
+ private dialogRef;
2167
+ constructor(dialogRef: MatDialogRef<PrivacyDialogComponent>);
2168
+ close(): void;
2169
+ static ɵfac: i0.ɵɵFactoryDeclaration<PrivacyDialogComponent, never>;
2170
+ static ɵcmp: i0.ɵɵComponentDeclaration<PrivacyDialogComponent, "spa-privacy-dialog", never, {}, {}, never, never, false, never>;
2171
+ }
2172
+
2173
+ declare class SuffixComponent implements OnInit {
2174
+ private messageService;
2175
+ constructor(messageService: MessageService);
2176
+ ngOnInit(): void;
2177
+ label: string;
2178
+ infoMessage: string;
2179
+ copyContent: boolean;
2180
+ isHovered: boolean;
2181
+ clearContent: boolean;
2182
+ readonly: boolean;
2183
+ value: any;
2184
+ infoClick: EventEmitter<void>;
2185
+ copyClick: EventEmitter<string>;
2186
+ clearClick: EventEmitter<void>;
2187
+ valueChange: EventEmitter<any>;
2188
+ onInfoClick(event: MouseEvent): void;
2189
+ onCopyClick(event: MouseEvent): void;
2190
+ onClearClick(event: MouseEvent): void;
2191
+ static ɵfac: i0.ɵɵFactoryDeclaration<SuffixComponent, never>;
2192
+ static ɵcmp: i0.ɵɵComponentDeclaration<SuffixComponent, "spa-suffix", never, { "label": { "alias": "label"; "required": false; }; "infoMessage": { "alias": "infoMessage"; "required": false; }; "copyContent": { "alias": "copyContent"; "required": false; }; "isHovered": { "alias": "isHovered"; "required": false; }; "clearContent": { "alias": "clearContent"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "infoClick": "infoClick"; "copyClick": "copyClick"; "clearClick": "clearClick"; "valueChange": "valueChange"; }, never, never, false, never>;
2193
+ }
2194
+
2195
+ declare class TermsDialogComponent {
2196
+ private dialogRef;
2197
+ constructor(dialogRef: MatDialogRef<TermsDialogComponent>);
2198
+ close(): void;
2199
+ static ɵfac: i0.ɵɵFactoryDeclaration<TermsDialogComponent, never>;
2200
+ static ɵcmp: i0.ɵɵComponentDeclaration<TermsDialogComponent, "spa-terms-dialog", never, {}, {}, never, never, false, never>;
2201
+ }
2202
+
2203
+ declare class TextMaskComponent implements OnInit, OnChanges {
2204
+ constructor();
2205
+ ngOnChanges(changes: SimpleChanges): void;
2206
+ ngOnInit(): void;
2207
+ ngAfterViewInit(): void;
2208
+ hide: boolean;
2209
+ appearance: 'fill' | 'outline';
2210
+ readonly: boolean;
2211
+ hint: string;
2212
+ display: string;
2213
+ placeholder: string;
2214
+ get computedPlaceholder(): string;
2215
+ value: string;
2216
+ valueChange: EventEmitter<any>;
2217
+ leave: EventEmitter<any>;
2218
+ enterPress: EventEmitter<any>;
2219
+ width: string;
2220
+ required: boolean;
2221
+ min: number;
2222
+ max: number;
2223
+ regex?: {
2224
+ pattern: string;
2225
+ message: string;
2226
+ };
2227
+ infoMessage: string;
2228
+ initControl(): void;
2229
+ leaved(): void;
2230
+ enterPressed(): void;
2231
+ control: FormControl<string>;
2232
+ private getValidators;
2233
+ validate(control: FormControl): string;
2234
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextMaskComponent, never>;
2235
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextMaskComponent, "spa-text-mask", never, { "appearance": { "alias": "appearance"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "display": { "alias": "display"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "value": { "alias": "value"; "required": false; }; "width": { "alias": "width"; "required": false; }; "required": { "alias": "required"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "regex": { "alias": "regex"; "required": false; }; "infoMessage": { "alias": "infoMessage"; "required": false; }; }, { "valueChange": "valueChange"; "leave": "leave"; "enterPress": "enterPress"; }, never, never, false, never>;
2236
+ }
2237
+
2238
+ declare class TextComponent implements OnInit, OnChanges {
2239
+ constructor();
2240
+ ngOnChanges(changes: SimpleChanges): void;
2241
+ ngOnInit(): void;
2242
+ ngAfterViewInit(): void;
2243
+ appearance: 'fill' | 'outline';
2244
+ readonly: boolean;
2245
+ hint: string;
2246
+ display: string;
2247
+ placeholder: string;
2248
+ get computedPlaceholder(): string;
2249
+ value: string;
2250
+ valueChange: EventEmitter<any>;
2251
+ format: string;
2252
+ type: string;
2253
+ leave: EventEmitter<any>;
2254
+ enterPress: EventEmitter<any>;
2255
+ width: string;
2256
+ copyContent: boolean;
2257
+ clearContent: boolean;
2258
+ required: boolean;
2259
+ min: number;
2260
+ max: number;
2261
+ regex?: {
2262
+ pattern: string;
2263
+ message: string;
2264
+ };
2265
+ suffix: string;
2266
+ infoMessage: string;
2267
+ isHovered: boolean;
2268
+ onMouseEnter(): void;
2269
+ onMouseLeave(): void;
2270
+ initControl(): void;
2271
+ leaved(): void;
2272
+ clear(): void;
2273
+ enterPressed(): void;
2274
+ control: FormControl<string>;
2275
+ private getValidators;
2276
+ validate(control: FormControl): string;
2277
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextComponent, never>;
2278
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextComponent, "spa-text", never, { "appearance": { "alias": "appearance"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "display": { "alias": "display"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "value": { "alias": "value"; "required": false; }; "format": { "alias": "format"; "required": false; }; "type": { "alias": "type"; "required": false; }; "width": { "alias": "width"; "required": false; }; "copyContent": { "alias": "copyContent"; "required": false; }; "clearContent": { "alias": "clearContent"; "required": false; }; "required": { "alias": "required"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "regex": { "alias": "regex"; "required": false; }; "suffix": { "alias": "suffix"; "required": false; }; "infoMessage": { "alias": "infoMessage"; "required": false; }; }, { "valueChange": "valueChange"; "leave": "leave"; "enterPress": "enterPress"; }, never, never, false, never>;
2279
+ }
2280
+
2281
+ declare class SpaMatModule {
2282
+ static ɵfac: i0.ɵɵFactoryDeclaration<SpaMatModule, never>;
2283
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SpaMatModule, never, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof i2.ReactiveFormsModule, typeof i3.MatMenuModule, typeof i4.MatSliderModule, typeof i5.MatTableModule, typeof i6.MatPaginatorModule, typeof i7.MatCheckboxModule, typeof i8.MatBadgeModule, typeof i9.MatButtonModule, typeof i10.MatIconModule, typeof i11.MatDialogModule, typeof i12.MatSnackBarModule, typeof i13.MatTabsModule, typeof i14.MatFormFieldModule, typeof i15.MatInputModule, typeof i16.MatCardModule, typeof i17.MatChipsModule, typeof i18.MatSelectModule, typeof i19.MatNativeDateModule, typeof i20.MatProgressSpinnerModule, typeof i21.MatListModule, typeof i22.MatAutocompleteModule, typeof i23.MatTooltipModule, typeof i24.MatSortModule, typeof i25.MatDatepickerModule, typeof i26.MatStepperModule, typeof i27.MatRadioModule, typeof i28.MatProgressBarModule, typeof i29.MatSidenavModule, typeof i30.MatToolbarModule, typeof i31.RouterModule, typeof i32.MatExpansionModule]>;
2284
+ static ɵinj: i0.ɵɵInjectorDeclaration<SpaMatModule>;
2285
+ }
2286
+
2287
+ declare class ReceiptDialogComponent implements OnInit {
2288
+ dialogRef: MatDialogRef<any, any>;
2289
+ data: any;
2290
+ private httpService;
2291
+ private http;
2292
+ private messageService;
2293
+ customerID: number | null;
2294
+ receiptDate: string;
2295
+ amount: number;
2296
+ method: number;
2297
+ reference: string;
2298
+ customers: any[];
2299
+ openInvoices: any[];
2300
+ get allocateMode(): boolean;
2301
+ get available(): number;
2302
+ get totalAllocated(): number;
2303
+ get overAllocated(): boolean;
2304
+ get canSave(): boolean;
2305
+ ngOnInit(): void;
2306
+ loadOpenInvoices(): void;
2307
+ autoAllocate(): void;
2308
+ save(): void;
2309
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReceiptDialogComponent, never>;
2310
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReceiptDialogComponent, "spa-receipt-dialog", never, {}, {}, never, never, true, never>;
2311
+ }
2312
+
2313
+ /** "Msal" section — PascalCase keys to match backend appsettings conventions. */
2314
+ interface TinSpaMsalSettings {
2315
+ ClientId?: string;
2316
+ Authority?: string;
2317
+ /** Optional — when omitted or empty, tin-spa falls back to `${window.location.origin}/login`. */
2318
+ RedirectUri?: string;
2319
+ }
2320
+ interface TinSpaAppSettings {
2321
+ /** Selects the overlay file, exactly like ASPNETCORE_ENVIRONMENT selects
2322
+ * appsettings.{Environment}.json on the backend. Set per server, e.g. "SIT", "UAT", "Production". */
2323
+ Environment?: string;
2324
+ /** Enable/disable Microsoft SSO per environment (overrides the code-declared runtime flag). */
2325
+ MicrosoftAuth?: boolean;
2326
+ /** Enable/disable Google sign-in per environment. */
2327
+ GoogleAuth?: boolean;
2328
+ /** Routing strategy per environment: true = path routing (/home), false = hash routing (/#/home).
2329
+ * Overrides the code-declared `pathRouting`. Path routing needs a server rewrite rule (IIS
2330
+ * URL Rewrite / SPA fallback) so deep links resolve to index.html — which is exactly why this
2331
+ * has to be per-environment: the same build is promoted to servers configured differently. */
2332
+ PathRouting?: boolean;
2333
+ /** SignalR/real-time on or off per environment (overrides the code-declared `realTime`). */
2334
+ RealTime?: boolean;
2335
+ /** Offline capability on or off per environment (overrides the code-declared `offline`). */
2336
+ Offline?: boolean;
2337
+ /** Added: app-wide per-table defaults, tunable per environment without a rebuild. A table's own
2338
+ * TableConfig value always wins over these; these only fill in what a table did not state.
2339
+ * PageSize is offered as a number because tuning it per server is the main reason to expose it —
2340
+ * e.g. a slow-link deployment dropping every unstated table to 10 rows a page. */
2341
+ TableDefaults?: {
2342
+ RealTime?: boolean;
2343
+ RealTimeFallbackMs?: number;
2344
+ Offline?: boolean;
2345
+ Pagination?: boolean;
2346
+ PageSize?: number;
2347
+ };
2348
+ Msal?: TinSpaMsalSettings;
2349
+ /** Same key name the backend reads for token validation — the two MUST hold the same value,
2350
+ * since the backend validates the Google id-token audience against its own GoogleClientID. */
2351
+ GoogleClientID?: string;
2352
+ /** Apps may add their own environment-specific sections. */
2353
+ [key: string]: any;
2354
+ }
2355
+ /** The settings loaded by loadTinSpaAppSettings(), or null when no file was found / loading failed. */
2356
+ declare function getTinSpaAppSettings(): TinSpaAppSettings | null;
2357
+ /**
2358
+ * Loads assets/appsettings.json (+ the appsettings.{Environment}.json overlay when the base file
2359
+ * declares an Environment) and caches the merged result for getTinSpaAppSettings().
2360
+ * Never rejects — a missing or broken file logs to the console and resolves null so the app
2361
+ * still boots with its code-declared configuration.
2362
+ */
2363
+ declare function loadTinSpaAppSettings(): Promise<TinSpaAppSettings | null>;
2364
+
2365
+ type PlaceholderKind = 'enter' | 'enter-or-select' | 'select' | 'pick';
2366
+ declare function derivePlaceholder(kind: PlaceholderKind, display: string, explicit?: string, readonly?: boolean): string;
2367
+
2368
+ declare const TIN_INLINE_ERRORS: HttpContextToken<boolean>;
2369
+ declare function tinRequestContext(options?: {
2370
+ silent?: boolean;
2371
+ inlineErrors?: boolean;
2372
+ }, context?: HttpContext): HttpContext | undefined;
2373
+ declare function isInlineErrorRequest(context: HttpContext | undefined | null): boolean;
2374
+ interface InlineLoadError {
2375
+ status: number;
2376
+ endpoint: string;
2377
+ detail?: string;
2378
+ }
2379
+
2380
+ declare const TIN_LOGIN_TIER_HTTP_PROVIDERS: EnvironmentProviders;
2381
+
2382
+ declare const TIN_SILENT_REQUEST: HttpContextToken<boolean>;
2383
+ declare function silentContext(silent?: boolean, context?: HttpContext): HttpContext | undefined;
2384
+ declare function isSilentRequest(context: HttpContext | undefined | null): boolean;
2385
+
2386
+ declare class AccountingService {
2387
+ private dataService;
2388
+ private inventoryService;
2389
+ private dialog;
2390
+ private httpService;
2391
+ private authService;
2392
+ private http;
2393
+ accountFormConfig: FormConfig;
2394
+ accountCreateButton: Button;
2395
+ finAccounEditButton: Button;
2396
+ accountBaseDetailsConfig: DetailsDialogConfig;
2397
+ invoicePaymentFormConfig: FormConfig;
2398
+ invoicePaymentCreateButton: Button;
2399
+ invoicePaymentsCreateDetailsDialogConfig: DetailsDialogConfig;
2400
+ invoicePaymentsTableConfig: TableConfig;
2401
+ invoiceFormConfig: FormConfig;
2402
+ invoiceItemsFormConfig: FormConfig;
2403
+ invoiceItemEditButton: Button;
2404
+ invoiceItemDetailsConfig: DetailsDialogConfig;
2405
+ invoiceMoveItemFormConfig: FormConfig;
2406
+ invoiceMoveItemDetailsConfig: DetailsDialogConfig;
2407
+ invoiceItemsTableConfig: TableConfig;
2408
+ invoiceRecordPaymentButton: Button;
2409
+ invoiceDiscardButton: Button;
2410
+ invoiceReturnButton: Button;
2411
+ invoiceWriteOffButton: Button;
2412
+ invoiceSubmitButton: Button;
2413
+ invoiceEditButton: Button;
2414
+ invoiceDownloadButton: Button;
2415
+ invoiceDetailsDialogConfig: DetailsDialogConfig;
2416
+ invoiceViewButton: Button;
2417
+ invoicesTileConfig: TileConfig;
2418
+ invoicesTableConfig: TableConfig;
2419
+ agingTileConfig: TileConfig;
2420
+ agingBaseTableConfig: TableConfig;
2421
+ customerInvoiceFormConfig: FormConfig;
2422
+ customerInvoiceItemsTableConfig: TableConfig;
2423
+ customerInvoicePaymentsTableConfig: TableConfig;
2424
+ customerInvoiceDetailsDialogConfig: DetailsDialogConfig;
2425
+ customerInvoicesTableConfig: TableConfig;
2426
+ statementFormConfig: FormConfig;
2427
+ statementTableConfig: TableConfig;
2428
+ statementSearchTableConfig: TableConfig;
2429
+ customerStatementTileConfig: TileConfig;
2430
+ supplierStatementTileConfig: TileConfig;
2431
+ statementLinesTableConfig: TableConfig;
2432
+ taxRateFormConfig: FormConfig;
2433
+ taxRateCreateButton: Button;
2434
+ taxRateEditButton: Button;
2435
+ taxRateDeleteButton: Button;
2436
+ taxRateDetailsConfig: DetailsDialogConfig;
2437
+ taxRatesTableConfig: TableConfig;
2438
+ currencyFormConfig: FormConfig;
2439
+ currencyCreateButton: Button;
2440
+ currencyEditButton: Button;
2441
+ currencyDeleteButton: Button;
2442
+ currencyDetailsConfig: DetailsDialogConfig;
2443
+ currenciesTableConfig: TableConfig;
2444
+ transactionTypeFormConfig: FormConfig;
2445
+ transactionTypeCreateButton: Button;
2446
+ transactionTypeEditButton: Button;
2447
+ transactionTypeDetailsConfig: DetailsDialogConfig;
2448
+ transactionTypesTableConfig: TableConfig;
2449
+ transactionFormConfig: FormConfig;
2450
+ transactionEditButton: Button;
2451
+ transactionVoidButton: Button;
2452
+ transactionDetailsConfig: DetailsDialogConfig;
2453
+ private journalTotals;
2454
+ private journalOutBy;
2455
+ private journalMoney;
2456
+ private journalAccountOptions;
2457
+ private journalAccountOptionsSubject;
2458
+ private journalAccountsLoaded;
2459
+ journalLineFormConfig: FormConfig;
2460
+ journalLinesTableConfig: TableConfig;
2461
+ journalFormConfig: FormConfig;
2462
+ journalPostButton: Button;
2463
+ journalDetailsConfig: DetailsDialogConfig;
2464
+ journalCreateButton: Button;
2465
+ transactionsTableConfig: TableConfig;
2466
+ transactionSearchTableConfig: TableConfig;
2467
+ accountTransactionsTableConfig: TableConfig;
2468
+ transactionTemplateFormConfig: FormConfig;
2469
+ transactionTemplateProcessFormConfig: FormConfig;
2470
+ transactionTemplateCreateButton: Button;
2471
+ transactionTemplateEditButton: Button;
2472
+ transactionTemplateDetailsConfig: DetailsDialogConfig;
2473
+ transactionTemplateProcessDetailsConfig: DetailsDialogConfig;
2474
+ transactionTemplatesTableConfig: TableConfig;
2475
+ standingOrderFormConfig: FormConfig;
2476
+ standingOrderExecutionsTableConfig: TableConfig;
2477
+ standingOrderCreateButton: Button;
2478
+ standingOrderEditButton: Button;
2479
+ standingOrderDeleteButton: Button;
2480
+ standingOrderExecuteButton: Button;
2481
+ standingOrderPauseButton: Button;
2482
+ standingOrderResumeButton: Button;
2483
+ standingOrderDetailsConfig: DetailsDialogConfig;
2484
+ standingOrdersTableConfig: TableConfig;
2485
+ accountDetailsConfig: DetailsDialogConfig;
2486
+ accountsTableConfig: TableConfig;
2487
+ trialBalanceTableConfig: TableConfig;
2488
+ pnlTableConfig: TableConfig;
2489
+ balanceSheetReportTableConfig: TableConfig;
2490
+ aggregatesTableConfig: TableConfig;
2491
+ cumulativeAggregatesTableConfig: TableConfig;
2492
+ cashFlowAggregatesTableConfig: TableConfig;
2493
+ balanceSheetAggregatesTableConfig: TableConfig;
2494
+ budgetFormConfig: FormConfig;
2495
+ budgetLineFormConfig: FormConfig;
2496
+ budgetLinesTableConfig: TableConfig;
2497
+ budgetPublishButton: Button;
2498
+ budgetSetActiveButton: Button;
2499
+ budgetCopyButton: Button;
2500
+ budgetEditButton: Button;
2501
+ budgetDetailsConfig: DetailsDialogConfig;
2502
+ budgetsTableConfig: TableConfig;
2503
+ budgetVsActualByPeriodTableConfig: TableConfig;
2504
+ budgetVsActualByAccountTableConfig: TableConfig;
2505
+ budgetSummaryTileConfig: TileConfig;
2506
+ generalLedgerTableConfig: TableConfig;
2507
+ creditNoteItemsFormConfig: FormConfig;
2508
+ creditNoteItemEditButton: Button;
2509
+ creditNoteItemsTableConfig: TableConfig;
2510
+ creditNoteFormConfig: FormConfig;
2511
+ creditNoteSubmitButton: Button;
2512
+ creditNoteApplyButton: Button;
2513
+ creditNoteReturnButton: Button;
2514
+ creditNoteDiscardButton: Button;
2515
+ creditNoteEditButton: Button;
2516
+ creditNoteDetailsDialogConfig: DetailsDialogConfig;
2517
+ creditNoteViewButton: Button;
2518
+ creditNoteCreateButton: Button;
2519
+ invoiceCreditNoteButton: Button;
2520
+ creditNotesTableConfig: TableConfig;
2521
+ receiptAllocateButton: Button;
2522
+ receiptUnallocated(row: any): number;
2523
+ openReceiptAllocation(row: any, reload?: () => void): void;
2524
+ receiptPdfButton: Button;
2525
+ downloadReceiptPdf(row: any): void;
2526
+ customerReceiptsTableConfig: TableConfig;
2527
+ quoteItemsFormConfig: FormConfig;
2528
+ quoteItemEditButton: Button;
2529
+ quoteItemsTableConfig: TableConfig;
2530
+ quoteFormConfig: FormConfig;
2531
+ quoteSendButton: Button;
2532
+ quoteAcceptButton: Button;
2533
+ quoteRejectButton: Button;
2534
+ quoteConvertButton: Button;
2535
+ quoteEditButton: Button;
2536
+ quoteDownloadButton: Button;
2537
+ quoteDetailsDialogConfig: DetailsDialogConfig;
2538
+ quoteViewButton: Button;
2539
+ quoteCreateButton: Button;
2540
+ quotesTableConfig: TableConfig;
2541
+ quotableServiceRateFormConfig: FormConfig;
2542
+ quotableServiceRateCreateButton: Button;
2543
+ quotableServiceRateEditButton: Button;
2544
+ quotableServiceRatesTableConfig: TableConfig;
2545
+ quotableServiceFormConfig: FormConfig;
2546
+ quotableServiceEditButton: Button;
2547
+ quotableServiceDetailsConfig: DetailsDialogConfig;
2548
+ quotableServiceViewButton: Button;
2549
+ quotableServiceCreateButton: Button;
2550
+ quotableServicesTableConfig: TableConfig;
2551
+ revenueSchedulesTableConfig: TableConfig;
2552
+ cashFlowTableConfig: TableConfig;
2553
+ equityChangesTableConfig: TableConfig;
2554
+ bankReconcileButton: Button;
2555
+ bankStatementImportsTableConfig: TableConfig;
2556
+ fiscalPeriodFormConfig: FormConfig;
2557
+ fiscalPeriodCloseButton: Button;
2558
+ fiscalPeriodReopenButton: Button;
2559
+ fiscalPeriodLockButton: Button;
2560
+ fiscalPeriodsTableConfig: TableConfig;
2561
+ constructor();
2562
+ private clearJournalAccounts;
2563
+ private setJournalAccountOptions;
2564
+ private loadJournalAccounts;
2565
+ static ɵfac: i0.ɵɵFactoryDeclaration<AccountingService, never>;
2566
+ static ɵprov: i0.ɵɵInjectableDeclaration<AccountingService>;
2567
+ }
2568
+
2569
+ declare class ConfigService {
2570
+ private dataService;
2571
+ private config;
2572
+ config$: rxjs.Observable<any>;
2573
+ get value(): any;
2574
+ private loaded;
2575
+ private inFlight;
2576
+ private failedAttempts;
2577
+ private static readonly maxFailedAttempts;
2578
+ constructor(dataService: DataServiceLib);
2579
+ load(force?: boolean): void;
2580
+ refresh(): void;
2581
+ clear(): void;
2582
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfigService, never>;
2583
+ static ɵprov: i0.ɵɵInjectableDeclaration<ConfigService>;
2584
+ }
2585
+
2586
+ declare class GeneralService {
2587
+ private dataService;
2588
+ categoryFormConfig: FormConfig;
2589
+ categoryCreateButton: Button;
2590
+ categoryEditButton: Button;
2591
+ categoryDeleteButton: Button;
2592
+ categoryDetailsConfig: DetailsDialogConfig;
2593
+ categoriesTableConfig: TableConfig;
2594
+ subCategoryFormConfig: FormConfig;
2595
+ subCategoryCreateButton: Button;
2596
+ subCategoryEditButton: Button;
2597
+ subCategoryDeleteButton: Button;
2598
+ subCategoryDetailsConfig: DetailsDialogConfig;
2599
+ subCategoriesTableConfig: TableConfig;
2600
+ brandFormConfig: FormConfig;
2601
+ brandCreateButton: Button;
2602
+ brandEditButton: Button;
2603
+ brandDeleteButton: Button;
2604
+ brandDetailsConfig: DetailsDialogConfig;
2605
+ brandsTableConfig: TableConfig;
2606
+ listItemFormConfig: FormConfig;
2607
+ listItemCreateButton: Button;
2608
+ listItemEditButton: Button;
2609
+ listItemDeleteButton: Button;
2610
+ listItemDetailsConfig: DetailsDialogConfig;
2611
+ listItemsTableConfig: TableConfig;
2612
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeneralService, never>;
2613
+ static ɵprov: i0.ɵɵInjectableDeclaration<GeneralService>;
2614
+ }
2615
+
2616
+ declare class InventoryService {
2617
+ private dataService;
2618
+ private generalService;
2619
+ productDetailsConfig: DetailsDialogConfig;
2620
+ constructor();
2621
+ productFormConfig: FormConfig;
2622
+ productViewButton: Button;
2623
+ productCreateButton: Button;
2624
+ productEditButton: Button;
2625
+ productDeleteButton: Button;
2626
+ productsTableConfig: TableConfig;
2627
+ productComponentFormConfig: FormConfig;
2628
+ productComponentsTableConfig: TableConfig;
2629
+ bundleProductFormConfig: FormConfig;
2630
+ bundleProductDetailsConfig: DetailsDialogConfig;
2631
+ bundleProductViewButton: Button;
2632
+ bundleProductCreateButton: Button;
2633
+ bundleProductsTableConfig: TableConfig;
2634
+ serviceItemFormConfig: FormConfig;
2635
+ serviceItemCreateButton: Button;
2636
+ serviceItemEditButton: Button;
2637
+ serviceItemDeleteButton: Button;
2638
+ serviceItemDetailsConfig: DetailsDialogConfig;
2639
+ serviceItemsTableConfig: TableConfig;
2640
+ requisitionItemFormConfig: FormConfig;
2641
+ requisitionItemsTableConfig: TableConfig;
2642
+ requisitionFormConfig: FormConfig;
2643
+ requisitionEditButton: Button;
2644
+ requisitionSubmitButton: Button;
2645
+ requisitionIssueButton: Button;
2646
+ requisitionCancelButton: Button;
2647
+ requisitionDetailsConfig: DetailsDialogConfig;
2648
+ requisitionViewButton: Button;
2649
+ requisitionsTableConfig: TableConfig;
2650
+ inventoryItemFormConfig: FormConfig;
2651
+ inventoryItemDetailsConfig: DetailsDialogConfig;
2652
+ inventoryItemsTableConfig: TableConfig;
2653
+ inventoryAdjustmentFormConfig: FormConfig;
2654
+ inventoryAdjustmentCreateButton: Button;
2655
+ inventoryAdjustmentEditButton: Button;
2656
+ inventoryAdjustmentDeleteButton: Button;
2657
+ inventoryAdjustmentDetailsConfig: DetailsDialogConfig;
2658
+ inventoryAdjustmentsTableConfig: TableConfig;
2659
+ inventoryReturnItemFormConfig: FormConfig;
2660
+ inventoryReturnItemsTableConfig: TableConfig;
2661
+ inventoryReturnFormConfig: FormConfig;
2662
+ inventoryReturnEditButton: Button;
2663
+ inventoryReturnDeleteButton: Button;
2664
+ inventoryReturnRejectButton: Button;
2665
+ inventoryReturnDetailsConfig: DetailsDialogConfig;
2666
+ inventoryReturnViewButton: Button;
2667
+ inventoryReturnCreateButton: Button;
2668
+ inventoryReturnsTableConfig: TableConfig;
2669
+ inventoryTransactionFormConfig: FormConfig;
2670
+ inventoryTransactionDetailsConfig: DetailsDialogConfig;
2671
+ inventoryTransactionsTableConfig: TableConfig;
2672
+ inventoryStockItemsTableConfig: TableConfig;
2673
+ inventoryStockProductFormConfig: FormConfig;
2674
+ inventoryStockDetailsConfig: DetailsDialogConfig;
2675
+ inventoryStockTileConfig: TileConfig;
2676
+ inventoryStockTableConfig: TableConfig;
2677
+ static ɵfac: i0.ɵɵFactoryDeclaration<InventoryService, never>;
2678
+ static ɵprov: i0.ɵɵInjectableDeclaration<InventoryService>;
2679
+ }
2680
+
2681
+ declare class LastRouteService {
2682
+ private router;
2683
+ private storage;
2684
+ private dataService;
2685
+ private started;
2686
+ private excluded;
2687
+ constructor(router: Router, storage: StorageService, dataService: DataServiceLib);
2688
+ get enabled(): boolean;
2689
+ private user;
2690
+ start(): void;
2691
+ resolve(): Promise<string | null>;
2692
+ navigateTo(target: string, fallback?: string): Promise<void>;
2693
+ clear(): Promise<void>;
2694
+ private save;
2695
+ private normalize;
2696
+ private strip;
2697
+ private isResumable;
2698
+ private role;
2699
+ private allowed;
2700
+ private flatten;
2701
+ static ɵfac: i0.ɵɵFactoryDeclaration<LastRouteService, never>;
2702
+ static ɵprov: i0.ɵɵInjectableDeclaration<LastRouteService>;
2703
+ }
2704
+
2705
+ declare class LoansService {
2706
+ private dataService;
2707
+ loanProductCreateButton: Button;
2708
+ loanProductEditButton: Button;
2709
+ loanProductDeleteButton: Button;
2710
+ loanProductFormConfig: FormConfig;
2711
+ loanProductTableConfig: TableConfig;
2712
+ loanCreateButton: Button;
2713
+ loanEditButton: Button;
2714
+ loanDisburseButton: Button;
2715
+ loanFormConfig: FormConfig;
2716
+ loanScheduleTableConfig: TableConfig;
2717
+ loanDetailsConfig: DetailsDialogConfig;
2718
+ loanViewButton: Button;
2719
+ loanTableConfig: TableConfig;
2720
+ loanPaymentCreateButton: Button;
2721
+ loanPaymentFormConfig: FormConfig;
2722
+ loanPaymentTableConfig: TableConfig;
2723
+ static ɵfac: i0.ɵɵFactoryDeclaration<LoansService, never>;
2724
+ static ɵprov: i0.ɵɵInjectableDeclaration<LoansService>;
2725
+ }
2726
+
2727
+ declare const REDACTED = "[REDACTED]";
2728
+ /**
2729
+ * Strip tokens, keys and credentials out of a string that is about to be written to the console.
2730
+ *
2731
+ * It redacts VALUES and keeps structure: a URL stays recognisable (`/hubs/app?id=abc&access_token=[REDACTED]`)
2732
+ * so it is still worth logging, while the secret is gone. Non-string input is returned untouched — callers
2733
+ * must not hand this an object and assume it was cleaned; stringify first, or better, do not log the object.
2734
+ */
2735
+ declare function redactSecrets<T>(input: T): T;
2736
+ /**
2737
+ * Reduce an error to a one-line, secret-free string. This exists because logging an HttpErrorResponse as an
2738
+ * OBJECT is the second-biggest leak shape in the library after the SignalR URL: devtools renders it
2739
+ * expandable, and `err.error` is the server's response BODY — the very data the directive says must never
2740
+ * reach the console. Status and message are the whole diagnostic value; the body is not.
2741
+ */
2742
+ declare function describeError(err: any): string;
2743
+ /**
2744
+ * Reduce an arbitrary value to a one-line SHAPE description that carries no field values — the safe thing
2745
+ * to log when you want to say "a response came back and here is roughly what it was". Used in place of the
2746
+ * `console.log(apiResponse)` dumps that used to sit behind `config.logResponse`.
2747
+ */
2748
+ declare function describeShape(value: any): string;
2749
+
2750
+ declare class SetupService {
2751
+ private dataService;
2752
+ private apiErrorService;
2753
+ private pendingCount;
2754
+ pendingCount$: Observable<number>;
2755
+ private status;
2756
+ status$: Observable<SetupStatus>;
2757
+ private modules;
2758
+ modules$: Observable<SetupModule[]>;
2759
+ private modulesLoaded;
2760
+ private modulesInFlight;
2761
+ constructor(dataService: DataServiceLib, apiErrorService: ApiErrorService);
2762
+ get enabled(): boolean;
2763
+ loadCount(): void;
2764
+ loadStatus(): void;
2765
+ loadModules(): void;
2766
+ ensureModules(): Observable<boolean>;
2767
+ moduleTitle(key: string): string;
2768
+ isModuleEnabled(key: string): boolean;
2769
+ setModule(key: string, enabled: boolean): Observable<ApiResponse>;
2770
+ loadRoleTemplates(): Observable<ApiResponse>;
2771
+ createRoles(keys: string[]): Observable<ApiResponse>;
2772
+ loadNotificationPresets(): Observable<ApiResponse>;
2773
+ applyNotificationPresets(items: SetupPresetSelection[], includeEmail: boolean): Observable<ApiResponse>;
2774
+ loadApprovalPresets(): Observable<ApiResponse>;
2775
+ applyApprovalPresets(items: SetupPresetSelection[]): Observable<ApiResponse>;
2776
+ loadSeedOffers(): Observable<ApiResponse>;
2777
+ applySeedOffer(key: string): Observable<ApiResponse>;
2778
+ applySeedAll(): Observable<ApiResponse>;
2779
+ refresh(): void;
2780
+ static ɵfac: i0.ɵɵFactoryDeclaration<SetupService, never>;
2781
+ static ɵprov: i0.ɵɵInjectableDeclaration<SetupService>;
2782
+ }
2783
+
2784
+ declare class SubscriptionService {
2785
+ private httpService;
2786
+ private authService;
2787
+ private enabledFeaturesSource;
2788
+ enabledFeatures$: rxjs.Observable<string[]>;
2789
+ private featuresLoaded;
2790
+ constructor(httpService: HttpService, authService: AuthService);
2791
+ loadFeatures(): void;
2792
+ isFeatureEnabled(featureKey: string): boolean;
2793
+ isModuleEnabled(featureKey: string): boolean;
2794
+ clearFeatures(): void;
2795
+ get loaded(): boolean;
2796
+ static ɵfac: i0.ɵɵFactoryDeclaration<SubscriptionService, never>;
2797
+ static ɵprov: i0.ɵɵInjectableDeclaration<SubscriptionService>;
2798
+ }
2799
+
2800
+ interface MenuSection {
2801
+ name: string;
2802
+ display: string;
2803
+ icon: string;
2804
+ cap: CapItem;
2805
+ standalone: boolean;
2806
+ items: CapItem[];
2807
+ }
2808
+ declare class MenuSourceService {
2809
+ private authService;
2810
+ private dataService;
2811
+ private setupService;
2812
+ private subscriptionService;
2813
+ private storage;
2814
+ constructor(authService: AuthService, dataService: DataServiceLib, setupService: SetupService, subscriptionService: SubscriptionService, storage: StorageService);
2815
+ isFeatureAllowed(cap: CapItem): boolean;
2816
+ private subItemCache;
2817
+ subItemsOf(capItem: CapItem): CapItem[];
2818
+ private role;
2819
+ private roleSubscribed;
2820
+ private watchRole;
2821
+ primeRole(): Promise<void>;
2822
+ private static readonly roleMetadata;
2823
+ private hasAnyCapability;
2824
+ isVisible(cap: CapItem): boolean;
2825
+ sections(): MenuSection[];
2826
+ visibleItems(): CapItem[];
2827
+ matchLink(route: string, items: CapItem[]): CapItem | null;
2828
+ static ɵfac: i0.ɵɵFactoryDeclaration<MenuSourceService, never>;
2829
+ static ɵprov: i0.ɵɵInjectableDeclaration<MenuSourceService>;
2830
+ }
2831
+
2832
+ declare class NotificationsService {
2833
+ private dataService;
2834
+ private signalRService;
2835
+ private messageService;
2836
+ private notificationCount;
2837
+ notificationCount$: rxjs.Observable<number>;
2838
+ constructor(dataService: DataServiceLib, signalRService: SignalRService, messageService: MessageService);
2839
+ private listenForPushMessages;
2840
+ loadNotifications(): void;
2841
+ refreshCount(): void;
2842
+ static ɵfac: i0.ɵɵFactoryDeclaration<NotificationsService, never>;
2843
+ static ɵprov: i0.ɵɵInjectableDeclaration<NotificationsService>;
2844
+ }
2845
+
2846
+ declare class PayrollService {
2847
+ private dataService;
2848
+ salaryComponentFormConfig: FormConfig;
2849
+ salaryComponentsTableConfig: TableConfig;
2850
+ editSalaryStructureButton: Button;
2851
+ salaryStructureFormConfig: FormConfig;
2852
+ salaryStructuresTableConfig: TableConfig;
2853
+ statutoryDeductionBandFormConfig: FormConfig;
2854
+ statutoryDeductionBandsTableConfig: TableConfig;
2855
+ editStatutoryDeductionTypeButton: Button;
2856
+ statutoryDeductionTypeFormConfig: FormConfig;
2857
+ statutoryDeductionTypesTableConfig: TableConfig;
2858
+ payslipLineFormConfig: FormConfig;
2859
+ payslipLinesTableConfig: TableConfig;
2860
+ payslipFormConfig: FormConfig;
2861
+ payslipsChildTableConfig: TableConfig;
2862
+ employeePayslipHistoryTableConfig: TableConfig;
2863
+ employeeSalaryComponentFormConfig: FormConfig;
2864
+ employeeSalaryComponentsTableConfig: TableConfig;
2865
+ editCommissionConfigButton: Button;
2866
+ commissionConfigFormConfig: FormConfig;
2867
+ commissionConfigTierFormConfig: FormConfig;
2868
+ commissionConfigTiersTableConfig: TableConfig;
2869
+ commissionConfigDetailsConfig: DetailsDialogConfig;
2870
+ viewCommissionConfigButton: Button;
2871
+ createCommissionConfigButton: Button;
2872
+ commissionConfigsTableConfig: TableConfig;
2873
+ employeeCommissionConfigsTableConfig: TableConfig;
2874
+ approveCommissionEntryButton: Button;
2875
+ returnCommissionEntryButton: Button;
2876
+ commissionEntryFormConfig: FormConfig;
2877
+ commissionEntryLinesTableConfig: TableConfig;
2878
+ commissionEntryDetailsConfig: DetailsDialogConfig;
2879
+ viewCommissionEntryButton: Button;
2880
+ commissionEntriesTableConfig: TableConfig;
2881
+ employeeCommissionEntriesTableConfig: TableConfig;
2882
+ salaryAdvanceFormConfig: FormConfig;
2883
+ salaryAdvancesTableConfig: TableConfig;
2884
+ employeeSalaryAdvancesTableConfig: TableConfig;
2885
+ overtimeEntryFormConfig: FormConfig;
2886
+ overtimeEntriesTableConfig: TableConfig;
2887
+ employeeOvertimeHistoryTableConfig: TableConfig;
2888
+ submitPayrollButton: Button;
2889
+ postPayrollButton: Button;
2890
+ markPaidButton: Button;
2891
+ recalculatePayrollButton: Button;
2892
+ payrollRunFormConfig: FormConfig;
2893
+ payrollRunsTableConfig: TableConfig;
2894
+ static ɵfac: i0.ɵɵFactoryDeclaration<PayrollService, never>;
2895
+ static ɵprov: i0.ɵɵInjectableDeclaration<PayrollService>;
2896
+ }
2897
+
2898
+ interface UserPreferences {
2899
+ userName: string;
2900
+ mobileTabs: string;
2901
+ defaultPage: string;
2902
+ }
2903
+ declare const GRID_MENU_ROUTE = "home/menu";
2904
+ declare const GRID_MENU_TAB: BottomTab;
2905
+ declare class PreferencesService {
2906
+ private dataService;
2907
+ private menuSource;
2908
+ private authService;
2909
+ private readonly empty;
2910
+ private source;
2911
+ preferences$: Observable<UserPreferences>;
2912
+ private loaded;
2913
+ constructor(dataService: DataServiceLib, menuSource: MenuSourceService, authService: AuthService);
2914
+ get current(): UserPreferences;
2915
+ load(force?: boolean): Observable<UserPreferences>;
2916
+ save(preferences: UserPreferences): Observable<ApiResponse>;
2917
+ reset(): void;
2918
+ resolveMobileTabs(): BottomTab[] | null;
2919
+ tabNames(): string[];
2920
+ resolveDefaultPage(): string;
2921
+ resolveLandingPage(): Promise<string>;
2922
+ availablePages(): CapItem[];
2923
+ static ɵfac: i0.ɵɵFactoryDeclaration<PreferencesService, never>;
2924
+ static ɵprov: i0.ɵɵInjectableDeclaration<PreferencesService>;
2925
+ }
2926
+
2927
+ declare class ProductionService {
2928
+ private dataService;
2929
+ private inventoryService;
2930
+ recipeItemFormConfig: FormConfig;
2931
+ recipeItemsTableConfig: TableConfig;
2932
+ recipeFormConfig: FormConfig;
2933
+ recipeDetailsConfig: DetailsDialogConfig;
2934
+ recipeViewButton: Button;
2935
+ recipeCreateButton: Button;
2936
+ recipesTableConfig: TableConfig;
2937
+ orderItemFormConfig: FormConfig;
2938
+ orderItemsTableConfig: TableConfig;
2939
+ orderFormConfig: FormConfig;
2940
+ orderDetailsConfig: DetailsDialogConfig;
2941
+ orderViewButton: Button;
2942
+ orderCreateButton: Button;
2943
+ ordersTableConfig: TableConfig;
2944
+ static ɵfac: i0.ɵɵFactoryDeclaration<ProductionService, never>;
2945
+ static ɵprov: i0.ɵɵInjectableDeclaration<ProductionService>;
2946
+ }
2947
+
2948
+ declare class PurchasingService {
2949
+ private dataService;
2950
+ private inventoryService;
2951
+ private accountingService;
2952
+ constructor();
2953
+ private paymentTypeOptions;
2954
+ supplierPurchaseOrderItemFormConfig: FormConfig;
2955
+ supplierPurchaseOrderItemsTableConfig: TableConfig;
2956
+ supplierPurchaseOrderFormConfig: FormConfig;
2957
+ receiveGoodsFormConfig: FormConfig;
2958
+ receiveGoodsDetailsConfig: DetailsDialogConfig;
2959
+ supplierPurchaseOrderEditButton: Button;
2960
+ supplierPurchaseOrderConfirmButton: Button;
2961
+ supplierPurchaseOrderCancelButton: Button;
2962
+ supplierPurchaseOrderReceiveButton: Button;
2963
+ supplierPurchaseOrderDetailsConfig: DetailsDialogConfig;
2964
+ supplierPurchaseOrderViewButton: Button;
2965
+ supplierPurchaseOrdersTableConfig: TableConfig;
2966
+ purchaseItemFormConfig: FormConfig;
2967
+ purchaseItemsTableConfig: TableConfig;
2968
+ purchaseFormConfig: FormConfig;
2969
+ purchaseEditButton: Button;
2970
+ purchaseCompleteButton: Button;
2971
+ purchaseStepConfig: StepConfig;
2972
+ purchaseDetailsConfig: DetailsDialogConfig;
2973
+ purchaseViewButton: Button;
2974
+ quickPurchaseButton: Button;
2975
+ purchasesTableConfig: TableConfig;
2976
+ receiptItemFormConfig: FormConfig;
2977
+ receiptItemsTableConfig: TableConfig;
2978
+ receiptFormConfig: FormConfig;
2979
+ receiptCompleteButton: Button;
2980
+ receiptEditButton: Button;
2981
+ receiptDetailsConfig: DetailsDialogConfig;
2982
+ receiptViewButton: Button;
2983
+ receiptsTableConfig: TableConfig;
2984
+ supplierPaymentFormConfig: FormConfig;
2985
+ supplierPaymentCreateButton: Button;
2986
+ supplierPaymentCreateDetailsConfig: DetailsDialogConfig;
2987
+ supplierRecordPaymentButton: Button;
2988
+ supplierPaymentsTableConfig: TableConfig;
2989
+ apAgingTileConfig: TileConfig;
2990
+ apAgingBaseTableConfig: TableConfig;
2991
+ static ɵfac: i0.ɵɵFactoryDeclaration<PurchasingService, never>;
2992
+ static ɵprov: i0.ɵɵInjectableDeclaration<PurchasingService>;
2993
+ }
2994
+
2995
+ declare class SalesService {
2996
+ private dataService;
2997
+ private inventoryService;
2998
+ private accountingService;
2999
+ salesOrderItemFormConfig: FormConfig;
3000
+ salesOrderItemsTableConfig: TableConfig;
3001
+ salesOrderFormConfig: FormConfig;
3002
+ salesOrderEditButton: Button;
3003
+ salesOrderConfirmButton: Button;
3004
+ salesOrderDeliverButton: Button;
3005
+ salesOrderDetailsConfig: DetailsDialogConfig;
3006
+ salesOrderViewButton: Button;
3007
+ salesOrdersTableConfig: TableConfig;
3008
+ saleItemFormConfig: FormConfig;
3009
+ saleItemsTableConfig: TableConfig;
3010
+ saleFormConfig: FormConfig;
3011
+ saleStepConfig: StepConfig;
3012
+ salePaymentFormConfig: FormConfig;
3013
+ salePaymentCreateButton: Button;
3014
+ salePaymentDetailsConfig: DetailsDialogConfig;
3015
+ saleRecordPaymentButton: Button;
3016
+ salePaymentsTableConfig: TableConfig;
3017
+ saleDetailsConfig: DetailsDialogConfig;
3018
+ saleViewButton: Button;
3019
+ saleCreateButton: Button;
3020
+ saleVoidButton: Button;
3021
+ salesTableConfig: TableConfig;
3022
+ static ɵfac: i0.ɵɵFactoryDeclaration<SalesService, never>;
3023
+ static ɵprov: i0.ɵɵInjectableDeclaration<SalesService>;
3024
+ }
3025
+
3026
+ declare class SpaCoreModule {
3027
+ static ɵfac: i0.ɵɵFactoryDeclaration<SpaCoreModule, never>;
3028
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SpaCoreModule, [typeof TextComponent, typeof TextMaskComponent, typeof SuffixComponent, typeof messageDialog, typeof TermsDialogComponent, typeof PrivacyDialogComponent], [typeof i1.CommonModule, typeof i2.FormsModule, typeof i2.ReactiveFormsModule, typeof SpaMatModule], [typeof SpaMatModule, typeof TextComponent, typeof TextMaskComponent, typeof SuffixComponent, typeof messageDialog, typeof TermsDialogComponent, typeof PrivacyDialogComponent]>;
3029
+ static ɵinj: i0.ɵɵInjectorDeclaration<SpaCoreModule>;
3030
+ }
3031
+
3032
+ export { Account, AccountingService, Action, AlertConfig, AlertMessage, ApiErrorService, ApiResponse, AppConfig, AssetStatus, AuthService, BottomTab, CacheConfig, CapItem, ChangeUserPassword, ChartConfig, ConfigService, Constants, Core, CreditNoteStatus, DataServiceLib, DateBounds, DetailsDialogConfig, DetailsDialogProcessor, DetailsSource, FilterChipConfig, FiscalPeriodStatus, FormConfig, GRID_MENU_ROUTE, GRID_MENU_TAB, GeneralService, HttpService, InventoryService, InvoiceItemType, InvoiceStatus, LastRouteService, ListDialogConfig, LoansService, LogLevel, LogService, MenuSourceService, MessageService, MovementType, NotesConfig, NotificationsService, OfflineService, PageConfig, PaginationConfig, PayrollService, PreferencesService, PrivacyDialogComponent, ProductionService, Profile, PurchaseStatus, PurchasingService, QuoteStatus, REDACTED, ReceiptDialogComponent, ReceiptStatus, RedactingSignalRLogger, Register, Role, RoleAccess, SalesService, SearchConfig, SecurityConfig, SetupService, SignalRService, SignupData, SpaCoreModule, SpaMatModule, Step, StepConfig, StorageService, SubscriptionService, SuffixComponent, TIN_INLINE_ERRORS, TIN_LOGIN_TIER_HTTP_PROVIDERS, TIN_SILENT_REQUEST, TIN_SPA_RUNTIME_CONFIG, TableConfig, TermsDialogComponent, TextComponent, TextMaskComponent, TileConfig, TransactionTiming, UnitOfMeasure, User, derivePlaceholder, describeError, describeShape, dialogOptions, getTinSpaAppSettings, isInlineErrorRequest, isSilentRequest, loadTinSpaAppSettings, loginConfig, messageDialog, phraseSatisfied, provideTinSpaRuntime, redactSecrets, silentContext, tinRequestContext, tinSpaLocationStrategyFactory, tinSpaMsalInstanceFactory, tinSpaRuntimeConfigFactory };
3033
+ export type { ApiErrorInfo, ApiErrorKind, AppConfigSection, AppConfigurationConfig, AppFailureClass, AppFailureContext, AutoRefreshConfig, BitwiseOption, Button, CacheRule, CapsuleConfig, CardConfig, ChartItem, ChecklistAction, ChecklistConfig, ChecklistItem, ChildField, CloseOptions, Color, Column, Confirm, CreateTabConfig, DayBookButtonView, DayBookColumnPresentation, DayBookColumnView, DayBookConfig, DayBookLane, DayBookPresentation, DayBookSection, DayBookStage, DayBookStageTiles, DayBookTableView, DocumentError, DocumentKind, DocumentSource, DocumentViewerData, EntityChangeEvent, Field, FilterChip, GroupConfig, GroupData, Icon, ImportConfig, InlineEditConfig, InlineLoadError, LoadedDocument, MenuSection, NoAccessInfo, NotificationEvent, OfflineConfig, OfflineEntry, OfflineOpStatus, OrderableConfig, OutboxOp, PlaceholderKind, RefreshResult, SearchField, SetupApprovalPreset, SetupConfig, SetupModule, SetupNotificationPreset, SetupPreset, SetupPresetCatalog, SetupPresetRole, SetupPresetSelection, SetupRoleTemplate, SetupSeedOffer, SetupStatus, SetupStep, SetupStepAction, SpaChartType, StatusConfig, StatusItem, StatusState, TableDialogConfig, TableSectionChip, TableSectionConfig, TableViewType, Tile, TileChartConfig, TileChartType, TileStyle, TinSpaAppSettings, TinSpaMsalConfig, TinSpaMsalSettings, TinSpaRuntimeConfig, TinSpaTableDefaults, UserPreferences, VehiclePositionFrame, VisibilityValue };