tin-spa 20.7.0 → 20.8.1

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.
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, EnvironmentProviders, OnInit, OnDestroy, TemplateRef, ViewContainerRef, OnChanges, SimpleChanges, EventEmitter, AfterViewInit, PipeTransform, ElementRef, AfterViewChecked, ChangeDetectorRef } from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders, NgZone, OnInit, OnDestroy, TemplateRef, ViewContainerRef, OnChanges, SimpleChanges, EventEmitter, AfterViewInit, PipeTransform, ElementRef, AfterViewChecked, ChangeDetectorRef } from '@angular/core';
3
3
  import * as i12 from '@angular/material/snack-bar';
4
4
  import { MatSnackBar } from '@angular/material/snack-bar';
5
5
  import * as i11 from '@angular/material/dialog';
@@ -8,7 +8,7 @@ import * as rxjs from 'rxjs';
8
8
  import { Observable, BehaviorSubject, Subject } from 'rxjs';
9
9
  import * as i1 from '@angular/router';
10
10
  import { Router, ActivatedRoute, CanActivateFn } from '@angular/router';
11
- import * as i62 from '@angular/common/http';
11
+ import * as i64 from '@angular/common/http';
12
12
  import { HttpClient, HttpErrorResponse } from '@angular/common/http';
13
13
  import * as i7$1 from '@abacritt/angularx-social-login';
14
14
  import { SocialUser, SocialAuthService } from '@abacritt/angularx-social-login';
@@ -32,7 +32,9 @@ import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
32
32
  import * as i17 from '@angular/material/chips';
33
33
  import { MatChipInputEvent } from '@angular/material/chips';
34
34
  import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
35
- import * as i66 from '@angular/cdk/drag-drop';
35
+ import * as i67 from '@kolkov/angular-editor';
36
+ import { AngularEditorConfig } from '@kolkov/angular-editor';
37
+ import * as i69 from '@angular/cdk/drag-drop';
36
38
  import { CdkDragEnter, CdkDragExit, CdkDragDrop } from '@angular/cdk/drag-drop';
37
39
  import * as i3$1 from '@angular/material/menu';
38
40
  import * as i4$1 from '@angular/material/slider';
@@ -56,8 +58,8 @@ import * as i28 from '@angular/material/progress-bar';
56
58
  import * as i29 from '@angular/material/sidenav';
57
59
  import * as i30 from '@angular/material/toolbar';
58
60
  import * as i32 from '@angular/material/expansion';
59
- import * as i64 from 'ngx-doc-viewer';
60
- import * as i65 from 'ng2-charts';
61
+ import * as i66 from 'ngx-doc-viewer';
62
+ import * as i68 from 'ng2-charts';
61
63
  import { MsalService } from '@azure/msal-angular';
62
64
 
63
65
  declare class TinSpaService {
@@ -483,6 +485,9 @@ interface TinSpaRuntimeConfig {
483
485
  pathRouting: boolean;
484
486
  /** Enable real-time (SignalR) features. Default false (disabled). */
485
487
  realTime: boolean;
488
+ /** Enable offline capability (TinSync: read cache + outbox + sync tray + connectivity indicator). Default false —
489
+ * apps that never use offline tables should leave this off so none of the offline machinery ever runs for them. */
490
+ offline?: boolean;
486
491
  /** Enable Microsoft SSO (MSAL). Only activates in a secure context (HTTPS/localhost). Default false. */
487
492
  microsoftAuth: boolean;
488
493
  /** MSAL credentials — required only when microsoftAuth is used. */
@@ -532,8 +537,19 @@ declare class SignalRService {
532
537
  constructor(runtimeConfig: TinSpaRuntimeConfig | null);
533
538
  /** Effective real-time enablement: legacy E2E kill-switch wins, else the configured runtime flag. */
534
539
  private realTimeEnabled;
540
+ /** Public: whether SignalR is the authoritative connection signal (used by OfflineService to pick SignalR vs ping). */
541
+ get isRealTime(): boolean;
535
542
  startConnection(hubUrl: string, token: string): void;
536
543
  updateToken(token: string): void;
544
+ private forcingReconnect;
545
+ /**
546
+ * Reconnect the hub NOW if real-time is enabled and the connection isn't up. Driven by OfflineService
547
+ * connectivity (the ping heartbeat) so the real-time indicator recovers on the SAME signal that flips the
548
+ * offline indicator back to online — they stay married "hand in glove". Handles both states the built-in
549
+ * auto-reconnect leaves us in: Reconnecting (stuck waiting on a long backoff interval → interrupt and connect
550
+ * now) and Disconnected (auto-reconnect exhausted after a long outage → start fresh). Safe to call repeatedly.
551
+ */
552
+ reconnectIfNeeded(): void;
537
553
  stopConnection(): void;
538
554
  static ɵfac: i0.ɵɵFactoryDeclaration<SignalRService, [{ optional: true; }]>;
539
555
  static ɵprov: i0.ɵɵInjectableDeclaration<SignalRService>;
@@ -677,6 +693,20 @@ declare class CacheConfig {
677
693
  getDuration(url: string): number | null;
678
694
  private matchesPattern;
679
695
  }
696
+ type OfflineOpStatus = 'pending' | 'syncing' | 'synced' | 'failed' | 'conflict' | 'stale';
697
+ interface OfflineConfig {
698
+ enabled: boolean;
699
+ cacheRows?: number;
700
+ cacheLookups?: boolean | string[];
701
+ lookupMaxAgeHours?: number;
702
+ queue?: {
703
+ create?: boolean;
704
+ edit?: boolean;
705
+ delete?: boolean;
706
+ };
707
+ maxQueueAgeHours?: number;
708
+ readOnly?: boolean;
709
+ }
680
710
  interface SearchField extends Field {
681
711
  show?: boolean;
682
712
  }
@@ -702,7 +732,7 @@ interface AutoRefreshConfig {
702
732
  interface Field {
703
733
  securityConfig?: SecurityConfig;
704
734
  name: string;
705
- type: 'text' | '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';
735
+ type: 'text' | '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';
706
736
  alias?: string;
707
737
  options?: any[];
708
738
  optionDisplay?: string;
@@ -754,6 +784,7 @@ interface Field {
754
784
  collapsed?: boolean;
755
785
  collapsedCondition?: (value: any) => boolean;
756
786
  maxHeight?: string;
787
+ editorConfig?: any;
757
788
  valueCalculation?: (value: any) => any;
758
789
  regex?: {
759
790
  pattern: string;
@@ -1044,6 +1075,7 @@ declare class TableConfig {
1044
1075
  };
1045
1076
  realTime?: boolean;
1046
1077
  entityName?: string;
1078
+ offline?: OfflineConfig | boolean;
1047
1079
  allowUserKeepOpen?: boolean;
1048
1080
  keepOpenBehavior?: 'reset' | 'edit';
1049
1081
  }
@@ -1118,12 +1150,132 @@ declare class AppConfig {
1118
1150
  keepSignedIn: boolean;
1119
1151
  }
1120
1152
 
1153
+ interface ResolvedOfflineConfig {
1154
+ enabled: boolean;
1155
+ cacheRows: number;
1156
+ cacheLookups: boolean | string[];
1157
+ lookupMaxAgeHours: number;
1158
+ queue: {
1159
+ create: boolean;
1160
+ edit: boolean;
1161
+ delete: boolean;
1162
+ };
1163
+ maxQueueAgeHours: number;
1164
+ readOnly: boolean;
1165
+ }
1166
+ interface OfflineEntry {
1167
+ entity: string;
1168
+ entityName: string;
1169
+ idField: string;
1170
+ config: ResolvedOfflineConfig;
1171
+ }
1172
+ interface OutboxOp {
1173
+ seq?: number;
1174
+ opId: string;
1175
+ entity: string;
1176
+ entityName: string;
1177
+ url: string;
1178
+ opAction: 'create' | 'edit' | 'delete';
1179
+ payload: any;
1180
+ clientRef?: string;
1181
+ targetId?: any;
1182
+ targetClientRef?: string;
1183
+ refMap?: {
1184
+ [field: string]: string;
1185
+ };
1186
+ status: OfflineOpStatus;
1187
+ attempts: number;
1188
+ lastError?: string;
1189
+ serverRecord?: any;
1190
+ maxAgeHours: number;
1191
+ userId: string;
1192
+ enqueuedAt: number;
1193
+ syncedAt?: number;
1194
+ }
1195
+ declare class OfflineService {
1196
+ private httpService;
1197
+ private authService;
1198
+ private storage;
1199
+ private messageService;
1200
+ private signalR;
1201
+ private zone;
1202
+ private runtimeConfig;
1203
+ online$: BehaviorSubject<boolean>;
1204
+ drained$: Subject<string[]>;
1205
+ private db;
1206
+ private reads;
1207
+ private outbox;
1208
+ private meta;
1209
+ private entries;
1210
+ private readUrls;
1211
+ private readPrefixes;
1212
+ registered$: BehaviorSubject<boolean>;
1213
+ private connectivityStarted;
1214
+ private syncStarted;
1215
+ private draining;
1216
+ private backoffTimer;
1217
+ private periodicTimer;
1218
+ private recoveryTimer;
1219
+ constructor(httpService: HttpService, authService: AuthService, storage: StorageService, messageService: MessageService, signalR: SignalRService, zone: NgZone, runtimeConfig: TinSpaRuntimeConfig | null);
1220
+ /** App-level gate: offline capability only runs when the app opts in via provideTinSpaRuntime({ offline: true }).
1221
+ * When off, register()/ensureConnectivity() no-op, so a consumer that never uses offline runs none of this. */
1222
+ get enabled(): boolean;
1223
+ get hasAny(): boolean;
1224
+ get online(): boolean;
1225
+ outboxView$(): Observable<any[]>;
1226
+ private summarize;
1227
+ private statusLabel;
1228
+ register(config: TableConfig): OfflineEntry | null;
1229
+ private registerLookups;
1230
+ matchRead(url: string): OfflineEntry | null;
1231
+ matchMutation(url: string): OfflineEntry | null;
1232
+ suppressesUrl(absoluteUrl: string): boolean;
1233
+ private resolveConfig;
1234
+ private ensureOpen;
1235
+ putRead(url: string, entity: string, data: any, maxRows: number): Promise<any>;
1236
+ private getRead;
1237
+ handleOfflineRead(action: Action, entry: OfflineEntry, networkCall: () => Observable<ApiResponse>): Observable<ApiResponse>;
1238
+ private serveCachedRead;
1239
+ enqueueOffline(action: Action, data: any, entry: OfflineEntry): Observable<ApiResponse>;
1240
+ private enqueueMutation;
1241
+ pendingOpsFor$(entity: string): Observable<OutboxOp[]>;
1242
+ activeOps$(): Observable<OutboxOp[]>;
1243
+ private pendingCreates;
1244
+ private hasPending;
1245
+ ensureConnectivity(): void;
1246
+ reportNetworkFailure(): void;
1247
+ private verify;
1248
+ private setOnline;
1249
+ private setOffline;
1250
+ private startRecoveryPolling;
1251
+ private stopRecoveryPolling;
1252
+ private startSync;
1253
+ drain(): Promise<void>;
1254
+ private drainLoop;
1255
+ private sendOp;
1256
+ private finishOp;
1257
+ private nextAutoOp;
1258
+ private resetOrphans;
1259
+ private cascadeFailure;
1260
+ private scheduleBackoff;
1261
+ retryOp(opId: string): Promise<void>;
1262
+ discardOp(opId: string): Promise<any>;
1263
+ resolveConflict(opId: string, choice: 'keepServer' | 'keepMine'): Promise<void>;
1264
+ private getOp;
1265
+ private parseAction;
1266
+ private hash;
1267
+ private sanitize;
1268
+ static ɵfac: i0.ɵɵFactoryDeclaration<OfflineService, [null, null, null, null, null, null, { optional: true; }]>;
1269
+ static ɵprov: i0.ɵɵInjectableDeclaration<OfflineService>;
1270
+ }
1271
+
1121
1272
  declare class DataServiceLib {
1122
1273
  private httpService;
1123
1274
  router: Router;
1124
1275
  private route;
1125
1276
  private authService;
1126
- constructor(httpService: HttpService, router: Router, route: ActivatedRoute, authService: AuthService);
1277
+ private offline;
1278
+ constructor(httpService: HttpService, router: Router, route: ActivatedRoute, authService: AuthService, offline: OfflineService);
1127
1279
  appConfig: AppConfig;
1128
1280
  private appConfigSource;
1129
1281
  appConfigObserv: Observable<AppConfig>;
@@ -1317,6 +1469,27 @@ declare class LoaderService {
1317
1469
  static ɵprov: i0.ɵɵInjectableDeclaration<LoaderService>;
1318
1470
  }
1319
1471
 
1472
+ declare class viewerDialog implements OnInit {
1473
+ private httpService;
1474
+ private dataServiceLib;
1475
+ data: any;
1476
+ constructor(httpService: HttpService, dataServiceLib: DataServiceLib, data: any);
1477
+ ngOnInit(): void;
1478
+ isProcessing: boolean;
1479
+ fullPath: string;
1480
+ fileNames: any[];
1481
+ fileName: string;
1482
+ currIndex: number;
1483
+ currentFileUrl: string;
1484
+ previous(): void;
1485
+ next(): void;
1486
+ imageDoc: boolean;
1487
+ setURL(): void;
1488
+ change(fileName: any): void;
1489
+ static ɵfac: i0.ɵɵFactoryDeclaration<viewerDialog, never>;
1490
+ static ɵcmp: i0.ɵɵComponentDeclaration<viewerDialog, "app-editRequest", never, {}, {}, never, never, false, never>;
1491
+ }
1492
+
1320
1493
  declare class DialogService {
1321
1494
  private dialog;
1322
1495
  private breakpointObserver;
@@ -1335,6 +1508,7 @@ declare class DialogService {
1335
1508
  inputChange: Observable<any>;
1336
1509
  dialogRef: MatDialogRef<any>;
1337
1510
  };
1511
+ openViewerDialog(fileName: string, fileNames: string[] | string, path: string): MatDialogRef<viewerDialog>;
1338
1512
  openPrintDialog(htmlContent: any): void;
1339
1513
  static ɵfac: i0.ɵɵFactoryDeclaration<DialogService, [null, null, { optional: true; }]>;
1340
1514
  static ɵprov: i0.ɵɵInjectableDeclaration<DialogService>;
@@ -1783,6 +1957,48 @@ declare class AnalyticsService {
1783
1957
  static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsService>;
1784
1958
  }
1785
1959
 
1960
+ declare class OfflineIndicatorComponent {
1961
+ private offline;
1962
+ private router;
1963
+ state$: Observable<{
1964
+ online: boolean;
1965
+ pending: number;
1966
+ attention: number;
1967
+ badge: number;
1968
+ }>;
1969
+ enabled: boolean;
1970
+ constructor(offline: OfflineService, router: Router);
1971
+ tooltip(s: {
1972
+ online: boolean;
1973
+ pending: number;
1974
+ attention: number;
1975
+ badge: number;
1976
+ }): string;
1977
+ openSyncPage(): void;
1978
+ static ɵfac: i0.ɵɵFactoryDeclaration<OfflineIndicatorComponent, never>;
1979
+ static ɵcmp: i0.ɵɵComponentDeclaration<OfflineIndicatorComponent, "spa-offline-indicator", never, {}, {}, never, never, false, never>;
1980
+ }
1981
+
1982
+ declare class SyncComponent implements OnInit, OnDestroy {
1983
+ private offline;
1984
+ private messageService;
1985
+ ops: OutboxOp[];
1986
+ alertConfig: AlertConfig | null;
1987
+ private sub;
1988
+ private retryButton;
1989
+ private keepServerButton;
1990
+ private keepMineButton;
1991
+ private discardButton;
1992
+ private syncNowButton;
1993
+ tableConfig: TableConfig;
1994
+ ngOnInit(): void;
1995
+ ngOnDestroy(): void;
1996
+ private discard;
1997
+ private updateAlert;
1998
+ static ɵfac: i0.ɵɵFactoryDeclaration<SyncComponent, never>;
1999
+ static ɵcmp: i0.ɵɵComponentDeclaration<SyncComponent, "spa-sync", never, {}, {}, never, never, false, never>;
2000
+ }
2001
+
1786
2002
  declare const authGuard: CanActivateFn;
1787
2003
 
1788
2004
  declare const featureGuard: (featureKey: string) => CanActivateFn;
@@ -2300,6 +2516,7 @@ declare class OptionComponent implements OnInit {
2300
2516
  infoMessage: string;
2301
2517
  copyContent: boolean;
2302
2518
  suffix: string;
2519
+ editorConfig: any;
2303
2520
  loadAction: Action;
2304
2521
  valueChange: EventEmitter<any>;
2305
2522
  enterPress: EventEmitter<any>;
@@ -2309,7 +2526,7 @@ declare class OptionComponent implements OnInit {
2309
2526
  resetValue(): void;
2310
2527
  onInfoClick(event: MouseEvent): void;
2311
2528
  static ɵfac: i0.ɵɵFactoryDeclaration<OptionComponent, never>;
2312
- static ɵcmp: i0.ɵɵComponentDeclaration<OptionComponent, "spa-option", never, { "options": { "alias": "options"; "required": false; }; "optionValue": { "alias": "optionValue"; "required": false; }; "optionDisplay": { "alias": "optionDisplay"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "type": { "alias": "type"; "required": false; }; "value": { "alias": "value"; "required": false; }; "display": { "alias": "display"; "required": false; }; "show": { "alias": "show"; "required": false; }; "required": { "alias": "required"; "required": false; }; "infoMessage": { "alias": "infoMessage"; "required": false; }; "copyContent": { "alias": "copyContent"; "required": false; }; "suffix": { "alias": "suffix"; "required": false; }; "loadAction": { "alias": "loadAction"; "required": false; }; }, { "valueChange": "valueChange"; "enterPress": "enterPress"; }, never, never, false, never>;
2529
+ static ɵcmp: i0.ɵɵComponentDeclaration<OptionComponent, "spa-option", never, { "options": { "alias": "options"; "required": false; }; "optionValue": { "alias": "optionValue"; "required": false; }; "optionDisplay": { "alias": "optionDisplay"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "type": { "alias": "type"; "required": false; }; "value": { "alias": "value"; "required": false; }; "display": { "alias": "display"; "required": false; }; "show": { "alias": "show"; "required": false; }; "required": { "alias": "required"; "required": false; }; "infoMessage": { "alias": "infoMessage"; "required": false; }; "copyContent": { "alias": "copyContent"; "required": false; }; "suffix": { "alias": "suffix"; "required": false; }; "editorConfig": { "alias": "editorConfig"; "required": false; }; "loadAction": { "alias": "loadAction"; "required": false; }; }, { "valueChange": "valueChange"; "enterPress": "enterPress"; }, never, never, false, never>;
2313
2530
  }
2314
2531
 
2315
2532
  declare class TilesComponent implements OnInit {
@@ -2487,7 +2704,9 @@ declare class TableComponent implements OnInit, AfterViewInit, OnDestroy {
2487
2704
  private conditionService;
2488
2705
  private authService;
2489
2706
  private signalRService;
2490
- constructor(dataService: DataServiceLib, messageService: MessageService, breakpointObserver: BreakpointObserver, dialog: MatDialog, buttonService: ButtonService, dialogService: DialogService, tableConfigService: TableConfigService, conditionService: ConditionService, authService: AuthService, signalRService: SignalRService);
2707
+ private offline;
2708
+ constructor(dataService: DataServiceLib, messageService: MessageService, breakpointObserver: BreakpointObserver, dialog: MatDialog, buttonService: ButtonService, dialogService: DialogService, tableConfigService: TableConfigService, conditionService: ConditionService, authService: AuthService, signalRService: SignalRService, // Changed: Added SignalRService
2709
+ offline: OfflineService);
2491
2710
  ngOnInit(): void;
2492
2711
  ngAfterViewInit(): void;
2493
2712
  ngOnChanges(changes: SimpleChanges): void;
@@ -2522,6 +2741,10 @@ declare class TableComponent implements OnInit, AfterViewInit, OnDestroy {
2522
2741
  private realTimeSubs;
2523
2742
  private realTimeEntityName;
2524
2743
  isSignalRConnected: boolean;
2744
+ private offlineEntry;
2745
+ private pendingOps;
2746
+ private rawRows;
2747
+ private offlineSubs;
2525
2748
  private initializeComponent;
2526
2749
  private updateTableConfiguration;
2527
2750
  private setupDataLoading;
@@ -2558,7 +2781,14 @@ declare class TableComponent implements OnInit, AfterViewInit, OnDestroy {
2558
2781
  execAction(button: Button, row: any): void;
2559
2782
  private getElevationClass;
2560
2783
  private realTimeRefreshOrFallback;
2784
+ private setupOffline;
2785
+ private placeStatusIcons;
2786
+ private applyOfflineOverlay;
2787
+ private computeOverlay;
2788
+ private reapplyOverlay;
2561
2789
  private setupRealTimeSubscriptions;
2790
+ private realTimeBaseRows;
2791
+ private applyRealTimeData;
2562
2792
  private deriveEntityName;
2563
2793
  private findIdKey;
2564
2794
  ngOnDestroy(): void;
@@ -2764,27 +2994,6 @@ declare class ViewerComponent implements OnInit {
2764
2994
  static ɵcmp: i0.ɵɵComponentDeclaration<ViewerComponent, "spa-viewer", never, { "fileAction": { "alias": "fileAction"; "required": false; }; "path": { "alias": "path"; "required": false; }; "folderName": { "alias": "folderName"; "required": false; }; "fileNames": { "alias": "fileNames"; "required": false; }; "removable": { "alias": "removable"; "required": false; }; "display": { "alias": "display"; "required": false; }; "title": { "alias": "title"; "required": false; }; }, { "remove": "remove"; }, never, never, false, never>;
2765
2995
  }
2766
2996
 
2767
- declare class viewerDialog implements OnInit {
2768
- private httpService;
2769
- private dataServiceLib;
2770
- data: any;
2771
- constructor(httpService: HttpService, dataServiceLib: DataServiceLib, data: any);
2772
- ngOnInit(): void;
2773
- isProcessing: boolean;
2774
- fullPath: string;
2775
- fileNames: any[];
2776
- fileName: string;
2777
- currIndex: number;
2778
- currentFileUrl: string;
2779
- previous(): void;
2780
- next(): void;
2781
- imageDoc: boolean;
2782
- setURL(): void;
2783
- change(fileName: any): void;
2784
- static ɵfac: i0.ɵɵFactoryDeclaration<viewerDialog, never>;
2785
- static ɵcmp: i0.ɵɵComponentDeclaration<viewerDialog, "app-editRequest", never, {}, {}, never, never, false, never>;
2786
- }
2787
-
2788
2997
  declare class ListDialogComponent implements OnInit {
2789
2998
  private dataService;
2790
2999
  private dialogRef;
@@ -3175,6 +3384,30 @@ declare class HtmlComponent implements OnInit {
3175
3384
  static ɵcmp: i0.ɵɵComponentDeclaration<HtmlComponent, "spa-html", never, { "value": { "alias": "value"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "display": { "alias": "display"; "required": false; }; }, {}, never, never, false, never>;
3176
3385
  }
3177
3386
 
3387
+ declare class EditorComponent implements OnInit {
3388
+ constructor();
3389
+ ngOnInit(): void;
3390
+ ngOnChanges(): void;
3391
+ display: string;
3392
+ value: string;
3393
+ readonly: boolean;
3394
+ required: boolean;
3395
+ hint: string;
3396
+ infoMessage: string;
3397
+ placeholder: string;
3398
+ width: string;
3399
+ height: string;
3400
+ minHeight: string;
3401
+ defaultFontName: string;
3402
+ editorConfig: AngularEditorConfig;
3403
+ valueChange: EventEmitter<any>;
3404
+ config: AngularEditorConfig;
3405
+ private buildConfig;
3406
+ changed(val: any): void;
3407
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditorComponent, never>;
3408
+ static ɵcmp: i0.ɵɵComponentDeclaration<EditorComponent, "spa-editor", never, { "display": { "alias": "display"; "required": false; }; "value": { "alias": "value"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "required": { "alias": "required"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "infoMessage": { "alias": "infoMessage"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "minHeight": { "alias": "minHeight"; "required": false; }; "defaultFontName": { "alias": "defaultFontName"; "required": false; }; "editorConfig": { "alias": "editorConfig"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, false, never>;
3409
+ }
3410
+
3178
3411
  declare class NotesComponent implements OnInit {
3179
3412
  private dataService;
3180
3413
  constructor(dataService: DataServiceLib);
@@ -3721,7 +3954,7 @@ declare class CurrencyInputModule {
3721
3954
 
3722
3955
  declare class TinSpaModule {
3723
3956
  static ɵfac: i0.ɵɵFactoryDeclaration<TinSpaModule, never>;
3724
- static ɵmod: i0.ɵɵNgModuleDeclaration<TinSpaModule, [typeof TinSpaComponent, typeof TextComponent, typeof TextMaskComponent, typeof TextAreaComponent, typeof TextSingleComponent, typeof CheckComponent, typeof DateComponent, typeof DatetimeComponent, typeof LabelComponent, typeof SelectComponent, typeof ActivityComponent, typeof FilterComponent, typeof messageDialog, typeof MoneyComponent, typeof OptionComponent, typeof TilesComponent, typeof StepsComponent, typeof AttachComponent, typeof ChipsComponent, typeof LoaderComponent, typeof NavMenuComponent, typeof TableComponent, typeof DetailsDialog, typeof FormComponent, typeof CamelToWordsPipe, typeof NumberComponent, typeof SearchComponent, typeof ViewerComponent, typeof viewerDialog, typeof ListDialogComponent, typeof InvitationsTableComponent, typeof TableHeaderComponent, typeof TableRowComponent, typeof TableActionComponent, typeof AlertComponent, typeof EmailComponent, typeof PageComponent, typeof SelectCommonComponent, typeof SuffixComponent, typeof SelectContextDirective, typeof SelectLiteComponent, typeof TextMultiComponent, typeof SelectMultiComponent, typeof SelectBitwiseComponent, typeof HtmlComponent, typeof NotesComponent, typeof CapsulesComponent, typeof CardsComponent, typeof TabsComponent, typeof StatusesComponent, typeof GroupsComponent, typeof TitleActionsComponent, typeof WelcomeComponent, typeof TermsDialogComponent, typeof PrivacyDialogComponent, typeof ChartsComponent, typeof FeatureDirective, typeof SpaLandingComponent, typeof ToastComponent, typeof AgentComponent], [typeof SpaMatModule, typeof i62.HttpClientModule, typeof CurrencyInputModule, typeof i64.NgxDocViewerModule, typeof i65.BaseChartDirective, typeof i66.DragDropModule], [typeof TinSpaComponent, typeof SpaMatModule, typeof AlertComponent, typeof TextComponent, typeof TextMaskComponent, typeof TextAreaComponent, typeof TextSingleComponent, typeof TextMultiComponent, typeof messageDialog, typeof NavMenuComponent, typeof LoaderComponent, typeof TilesComponent, typeof DateComponent, typeof SelectComponent, typeof SelectBitwiseComponent, typeof SelectMultiComponent, typeof DatetimeComponent, typeof CheckComponent, typeof AttachComponent, typeof MoneyComponent, typeof ChipsComponent, typeof ActivityComponent, typeof OptionComponent, typeof LabelComponent, typeof StepsComponent, typeof FilterComponent, typeof TableComponent, typeof DetailsDialog, typeof FormComponent, typeof NumberComponent, typeof SearchComponent, typeof ViewerComponent, typeof viewerDialog, typeof ListDialogComponent, typeof ListDialogComponent, typeof EmailComponent, typeof PageComponent, typeof HtmlComponent, typeof NotesComponent, typeof CapsulesComponent, typeof TabsComponent, typeof StatusesComponent, typeof GroupsComponent, typeof TitleActionsComponent, typeof WelcomeComponent, typeof InvitationsTableComponent, typeof TermsDialogComponent, typeof PrivacyDialogComponent, typeof SelectLiteComponent, typeof ChartsComponent, typeof FeatureDirective, typeof SpaLandingComponent, typeof AgentComponent]>;
3957
+ static ɵmod: i0.ɵɵNgModuleDeclaration<TinSpaModule, [typeof TinSpaComponent, typeof TextComponent, typeof TextMaskComponent, typeof TextAreaComponent, typeof TextSingleComponent, typeof CheckComponent, typeof DateComponent, typeof DatetimeComponent, typeof LabelComponent, typeof SelectComponent, typeof ActivityComponent, typeof FilterComponent, typeof messageDialog, typeof MoneyComponent, typeof OptionComponent, typeof TilesComponent, typeof StepsComponent, typeof AttachComponent, typeof ChipsComponent, typeof LoaderComponent, typeof NavMenuComponent, typeof TableComponent, typeof DetailsDialog, typeof FormComponent, typeof CamelToWordsPipe, typeof NumberComponent, typeof SearchComponent, typeof ViewerComponent, typeof viewerDialog, typeof ListDialogComponent, typeof InvitationsTableComponent, typeof TableHeaderComponent, typeof TableRowComponent, typeof TableActionComponent, typeof AlertComponent, typeof EmailComponent, typeof PageComponent, typeof SelectCommonComponent, typeof SuffixComponent, typeof SelectContextDirective, typeof SelectLiteComponent, typeof TextMultiComponent, typeof SelectMultiComponent, typeof SelectBitwiseComponent, typeof HtmlComponent, typeof EditorComponent, typeof NotesComponent, typeof CapsulesComponent, typeof CardsComponent, typeof TabsComponent, typeof StatusesComponent, typeof GroupsComponent, typeof TitleActionsComponent, typeof WelcomeComponent, typeof TermsDialogComponent, typeof PrivacyDialogComponent, typeof ChartsComponent, typeof FeatureDirective, typeof SpaLandingComponent, typeof ToastComponent, typeof AgentComponent, typeof OfflineIndicatorComponent], [typeof SpaMatModule, typeof i64.HttpClientModule, typeof CurrencyInputModule, typeof i66.NgxDocViewerModule, typeof i67.AngularEditorModule, typeof i68.BaseChartDirective, typeof i69.DragDropModule], [typeof TinSpaComponent, typeof SpaMatModule, typeof AlertComponent, typeof TextComponent, typeof TextMaskComponent, typeof TextAreaComponent, typeof TextSingleComponent, typeof TextMultiComponent, typeof messageDialog, typeof NavMenuComponent, typeof LoaderComponent, typeof TilesComponent, typeof DateComponent, typeof SelectComponent, typeof SelectBitwiseComponent, typeof SelectMultiComponent, typeof DatetimeComponent, typeof CheckComponent, typeof AttachComponent, typeof MoneyComponent, typeof ChipsComponent, typeof ActivityComponent, typeof OptionComponent, typeof LabelComponent, typeof StepsComponent, typeof FilterComponent, typeof TableComponent, typeof DetailsDialog, typeof FormComponent, typeof NumberComponent, typeof SearchComponent, typeof ViewerComponent, typeof viewerDialog, typeof ListDialogComponent, typeof ListDialogComponent, typeof EmailComponent, typeof PageComponent, typeof HtmlComponent, typeof EditorComponent, typeof NotesComponent, typeof CapsulesComponent, typeof TabsComponent, typeof StatusesComponent, typeof GroupsComponent, typeof TitleActionsComponent, typeof WelcomeComponent, typeof InvitationsTableComponent, typeof TermsDialogComponent, typeof PrivacyDialogComponent, typeof SelectLiteComponent, typeof ChartsComponent, typeof FeatureDirective, typeof SpaLandingComponent, typeof AgentComponent, typeof OfflineIndicatorComponent]>;
3725
3958
  static ɵinj: i0.ɵɵInjectorDeclaration<TinSpaModule>;
3726
3959
  }
3727
3960
 
@@ -4839,7 +5072,7 @@ declare class NotificationsConfigComponent implements OnInit {
4839
5072
 
4840
5073
  declare class WorkflowModule {
4841
5074
  static ɵfac: i0.ɵɵFactoryDeclaration<WorkflowModule, never>;
4842
- static ɵmod: i0.ɵɵNgModuleDeclaration<WorkflowModule, [typeof ApprovalsComponent, typeof ApprovalsConfigComponent, typeof NotificationsComponent, typeof AppModelsComponent, typeof NotificationsConfigComponent], [typeof i4.CommonModule, typeof SpaAdminModule], never>;
5075
+ static ɵmod: i0.ɵɵNgModuleDeclaration<WorkflowModule, [typeof ApprovalsComponent, typeof ApprovalsConfigComponent, typeof NotificationsComponent, typeof AppModelsComponent, typeof NotificationsConfigComponent, typeof SyncComponent], [typeof i4.CommonModule, typeof SpaAdminModule], never>;
4843
5076
  static ɵinj: i0.ɵɵInjectorDeclaration<WorkflowModule>;
4844
5077
  }
4845
5078
 
@@ -4891,5 +5124,5 @@ declare class SpaHomeModule {
4891
5124
  static ɵinj: i0.ɵɵInjectorDeclaration<SpaHomeModule>;
4892
5125
  }
4893
5126
 
4894
- export { ALSQUARE_SVG_DARK, ALSQUARE_SVG_WHITE, Account, AccountsComponent as AccountingAccountsComponent, AggregatesComponent as AccountingAggregatesComponent, AgingComponent as AccountingAgingComponent, CurrenciesComponent as AccountingCurrenciesComponent, AccountingDashboardComponent, InvoicesComponent as AccountingInvoicesComponent, AccountingModule, ReportsComponent as AccountingReportsComponent, AccountingService, StatementComponent as AccountingStatementComponent, TransactionTypesComponent as AccountingTransactionTypesComponent, TransactionsComponent as AccountingTransactionsComponent, Action, ActivityComponent, AdminModule, AgentComponent, AgentService, AlertComponent, AlertConfig, AlertMessage, AnalyticsService, ApiResponse, AppConfig, AppModelsComponent, AssetStatus, AssetsService, AttachComponent, AuthService, BillingPageComponent, BrandsComponent, CacheConfig, CapItem, CapsulesComponent, CategoriesComponent, ChangePasswordComponent, ChangeUserPassword, ChartConfig, ChartsComponent, CheckComponent, ChipsComponent, Constants, Core, CreateAccountComponent, CustomersComponent, DataServiceLib, DateComponent, DatetimeComponent, DepartmentsComponent, DetailsDialog, DetailsDialogConfig, DetailsDialogProcessor, DetailsSource, DialogService, EmailComponent, EmployeesComponent, ExportService, FeatureDirective, FilterComponent, FormComponent, FormConfig, GeneralModule, GeneralService, GradesComponent, GroupsComponent, HRModule, HtmlComponent, HttpService, IndexModule, InventoryDashboardComponent, InventoryModule, InventoryService, InvitationsTableComponent, InvoiceDashboardComponent, InvoiceItemType, InvoiceStatus, LabelComponent, ListDialogComponent, ListDialogConfig, LoaderComponent, LoaderService, LoanPaymentsComponent, LoanProductsComponent, LoansComponent, LoansModule, LoansService, LogLevel, LogService, LoginComponent, LogsComponent, ManufacturingModule, MembershipComponent, MessageService, MoneyComponent, MovementType, NavMenuComponent, NotesComponent, NotesConfig, NotificationsService, NumberComponent, OnboardingComponent, OptionComponent, OverviewDashboardComponent, OverviewModule, PageComponent, PageConfig, PayrollDashboardComponent, PayrollModule, PlansComponent, PositionsComponent, PreferencesComponent, PrivacyDialogComponent, Profile, ProfileComponent, PurchaseStatus, PurchasingDashboardComponent, PurchasingModule, PushNotificationService, ReceiptStatus, RecoverAccountComponent, Register, Role, RoleAccess, RolesComponent, SalesDashboardComponent, SalesModule, SearchComponent, SearchConfig, SecurityConfig, SelectBitwiseComponent, SelectComponent, SelectLiteComponent, SelectMultiComponent, SettingsComponent, SignupComponent, SignupData, SpaAdminModule, SpaHomeModule, SpaIndexModule, SpaLandingComponent, SpaMatModule, SpaUserModule, StatusesComponent, Step, StepConfig, StepsComponent, StorageService, SubCategoriesComponent, SubscriptionPageComponent, SubscriptionService, SuppliersComponent, TIN_SPA_RUNTIME_CONFIG, TabService, TableComponent, TableConfig, TabsComponent, TasksComponent, TenancyModule, TenantsComponent, TermsDialogComponent, TextAreaComponent, TextComponent, TextMaskComponent, TextMultiComponent, TextSingleComponent, TileConfig, TilesComponent, TinSpaComponent, TinSpaModule, TinSpaService, TitleActionsComponent, TransactionTiming, UnitOfMeasure, UpdateService, User, UserModule, UsersComponent, ViewerComponent, WelcomeComponent, WorkflowModule, authGuard, dialogOptions, featureGuard, loginConfig, messageDialog, provideTinSpaRuntime, tinSpaLocationStrategyFactory, tinSpaMsalInstanceFactory, viewerDialog };
4895
- export type { AgentMessage, AutoRefreshConfig, BitwiseOption, Button, CacheRule, CapsuleConfig, CardConfig, ChartItem, ChildField, CloseOptions, Color, Column, Confirm, ConversationSummary, Field, GroupConfig, GroupData, Icon, LandingBrandOverride, LandingColors, LandingConfig, LandingFeature, LandingFooterColumn, LandingFooterLink, LandingMetric, LandingModuleGroup, LandingModuleTile, LandingNavLink, LandingPricingPlan, LandingSecurityItem, LandingStep, LandingTestimonial, SearchField, SpaChartType, StatusConfig, StatusItem, StatusState, TableViewType, Tile, TileChartConfig, TileChartType, TileStyle, TinSpaMsalConfig, TinSpaRuntimeConfig, VisibleTab };
5127
+ export { ALSQUARE_SVG_DARK, ALSQUARE_SVG_WHITE, Account, AccountsComponent as AccountingAccountsComponent, AggregatesComponent as AccountingAggregatesComponent, AgingComponent as AccountingAgingComponent, CurrenciesComponent as AccountingCurrenciesComponent, AccountingDashboardComponent, InvoicesComponent as AccountingInvoicesComponent, AccountingModule, ReportsComponent as AccountingReportsComponent, AccountingService, StatementComponent as AccountingStatementComponent, TransactionTypesComponent as AccountingTransactionTypesComponent, TransactionsComponent as AccountingTransactionsComponent, Action, ActivityComponent, AdminModule, AgentComponent, AgentService, AlertComponent, AlertConfig, AlertMessage, AnalyticsService, ApiResponse, AppConfig, AppModelsComponent, AssetStatus, AssetsService, AttachComponent, AuthService, BillingPageComponent, BrandsComponent, CacheConfig, CapItem, CapsulesComponent, CategoriesComponent, ChangePasswordComponent, ChangeUserPassword, ChartConfig, ChartsComponent, CheckComponent, ChipsComponent, Constants, Core, CreateAccountComponent, CustomersComponent, DataServiceLib, DateComponent, DatetimeComponent, DepartmentsComponent, DetailsDialog, DetailsDialogConfig, DetailsDialogProcessor, DetailsSource, DialogService, EditorComponent, EmailComponent, EmployeesComponent, ExportService, FeatureDirective, FilterComponent, FormComponent, FormConfig, GeneralModule, GeneralService, GradesComponent, GroupsComponent, HRModule, HtmlComponent, HttpService, IndexModule, InventoryDashboardComponent, InventoryModule, InventoryService, InvitationsTableComponent, InvoiceDashboardComponent, InvoiceItemType, InvoiceStatus, LabelComponent, ListDialogComponent, ListDialogConfig, LoaderComponent, LoaderService, LoanPaymentsComponent, LoanProductsComponent, LoansComponent, LoansModule, LoansService, LogLevel, LogService, LoginComponent, LogsComponent, ManufacturingModule, MembershipComponent, MessageService, MoneyComponent, MovementType, NavMenuComponent, NotesComponent, NotesConfig, NotificationsService, NumberComponent, OfflineIndicatorComponent, OfflineService, OnboardingComponent, OptionComponent, OverviewDashboardComponent, OverviewModule, PageComponent, PageConfig, PayrollDashboardComponent, PayrollModule, PlansComponent, PositionsComponent, PreferencesComponent, PrivacyDialogComponent, Profile, ProfileComponent, PurchaseStatus, PurchasingDashboardComponent, PurchasingModule, PushNotificationService, ReceiptStatus, RecoverAccountComponent, Register, Role, RoleAccess, RolesComponent, SalesDashboardComponent, SalesModule, SearchComponent, SearchConfig, SecurityConfig, SelectBitwiseComponent, SelectComponent, SelectLiteComponent, SelectMultiComponent, SettingsComponent, SignupComponent, SignupData, SpaAdminModule, SpaHomeModule, SpaIndexModule, SpaLandingComponent, SpaMatModule, SpaUserModule, StatusesComponent, Step, StepConfig, StepsComponent, StorageService, SubCategoriesComponent, SubscriptionPageComponent, SubscriptionService, SuppliersComponent, SyncComponent, TIN_SPA_RUNTIME_CONFIG, TabService, TableComponent, TableConfig, TabsComponent, TasksComponent, TenancyModule, TenantsComponent, TermsDialogComponent, TextAreaComponent, TextComponent, TextMaskComponent, TextMultiComponent, TextSingleComponent, TileConfig, TilesComponent, TinSpaComponent, TinSpaModule, TinSpaService, TitleActionsComponent, TransactionTiming, UnitOfMeasure, UpdateService, User, UserModule, UsersComponent, ViewerComponent, WelcomeComponent, WorkflowModule, authGuard, dialogOptions, featureGuard, loginConfig, messageDialog, provideTinSpaRuntime, tinSpaLocationStrategyFactory, tinSpaMsalInstanceFactory, viewerDialog };
5128
+ export type { AgentMessage, AutoRefreshConfig, BitwiseOption, Button, CacheRule, CapsuleConfig, CardConfig, ChartItem, ChildField, CloseOptions, Color, Column, Confirm, ConversationSummary, Field, GroupConfig, GroupData, Icon, LandingBrandOverride, LandingColors, LandingConfig, LandingFeature, LandingFooterColumn, LandingFooterLink, LandingMetric, LandingModuleGroup, LandingModuleTile, LandingNavLink, LandingPricingPlan, LandingSecurityItem, LandingStep, LandingTestimonial, OfflineConfig, OfflineEntry, OfflineOpStatus, OutboxOp, SearchField, SpaChartType, StatusConfig, StatusItem, StatusState, TableViewType, Tile, TileChartConfig, TileChartType, TileStyle, TinSpaMsalConfig, TinSpaRuntimeConfig, VisibleTab };
package/package.json CHANGED
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "name": "tin-spa",
3
- "version": "20.7.0",
3
+ "version": "20.8.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0",
7
7
  "@azure/msal-angular": "^4.0.0",
8
- "@azure/msal-browser": "^4.0.0"
8
+ "@azure/msal-browser": "^4.0.0",
9
+ "@kolkov/angular-editor": "^3.0.5"
9
10
  },
10
11
  "dependencies": {
11
- "tslib": "^2.3.0"
12
+ "tslib": "^2.3.0",
13
+ "dexie": "^4.0.0"
12
14
  },
13
15
  "publishConfig": {
14
16
  "registry": "https://registry.npmjs.org/"