tin-spa 20.8.0 → 20.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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, Injector, 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 i63 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,9 +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 '@kolkov/angular-editor';
35
+ import * as i67 from '@kolkov/angular-editor';
36
36
  import { AngularEditorConfig } from '@kolkov/angular-editor';
37
- import * as i68 from '@angular/cdk/drag-drop';
37
+ import * as i69 from '@angular/cdk/drag-drop';
38
38
  import { CdkDragEnter, CdkDragExit, CdkDragDrop } from '@angular/cdk/drag-drop';
39
39
  import * as i3$1 from '@angular/material/menu';
40
40
  import * as i4$1 from '@angular/material/slider';
@@ -58,8 +58,8 @@ import * as i28 from '@angular/material/progress-bar';
58
58
  import * as i29 from '@angular/material/sidenav';
59
59
  import * as i30 from '@angular/material/toolbar';
60
60
  import * as i32 from '@angular/material/expansion';
61
- import * as i65 from 'ngx-doc-viewer';
62
- import * as i67 from 'ng2-charts';
61
+ import * as i66 from 'ngx-doc-viewer';
62
+ import * as i68 from 'ng2-charts';
63
63
  import { MsalService } from '@azure/msal-angular';
64
64
 
65
65
  declare class TinSpaService {
@@ -485,6 +485,9 @@ interface TinSpaRuntimeConfig {
485
485
  pathRouting: boolean;
486
486
  /** Enable real-time (SignalR) features. Default false (disabled). */
487
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;
488
491
  /** Enable Microsoft SSO (MSAL). Only activates in a secure context (HTTPS/localhost). Default false. */
489
492
  microsoftAuth: boolean;
490
493
  /** MSAL credentials — required only when microsoftAuth is used. */
@@ -534,8 +537,19 @@ declare class SignalRService {
534
537
  constructor(runtimeConfig: TinSpaRuntimeConfig | null);
535
538
  /** Effective real-time enablement: legacy E2E kill-switch wins, else the configured runtime flag. */
536
539
  private realTimeEnabled;
540
+ /** Public: whether SignalR is the authoritative connection signal (used by OfflineService to pick SignalR vs ping). */
541
+ get isRealTime(): boolean;
537
542
  startConnection(hubUrl: string, token: string): void;
538
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;
539
553
  stopConnection(): void;
540
554
  static ɵfac: i0.ɵɵFactoryDeclaration<SignalRService, [{ optional: true; }]>;
541
555
  static ɵprov: i0.ɵɵInjectableDeclaration<SignalRService>;
@@ -550,12 +564,13 @@ declare class AuthService {
550
564
  private messageService;
551
565
  private logService;
552
566
  private signalRService;
567
+ private injector;
553
568
  private googleAuthInitialized;
554
569
  private isRefreshing;
555
570
  private refreshTimer;
556
571
  private socialUserSource;
557
572
  socialUserObserv: rxjs.Observable<SocialUser>;
558
- constructor(_route: ActivatedRoute, socialService: SocialAuthService, storage: StorageService, router: Router, httpService: HttpService, messageService: MessageService, logService: LogService, signalRService: SignalRService);
573
+ constructor(_route: ActivatedRoute, socialService: SocialAuthService, storage: StorageService, router: Router, httpService: HttpService, messageService: MessageService, logService: LogService, signalRService: SignalRService, injector: Injector);
559
574
  private initializeGoogleAuth;
560
575
  clearSession(revokeOnServer?: boolean): void;
561
576
  sessionExpired(): void;
@@ -679,6 +694,20 @@ declare class CacheConfig {
679
694
  getDuration(url: string): number | null;
680
695
  private matchesPattern;
681
696
  }
697
+ type OfflineOpStatus = 'pending' | 'syncing' | 'synced' | 'failed' | 'conflict' | 'stale';
698
+ interface OfflineConfig {
699
+ enabled: boolean;
700
+ cacheRows?: number;
701
+ cacheLookups?: boolean | string[];
702
+ lookupMaxAgeHours?: number;
703
+ queue?: {
704
+ create?: boolean;
705
+ edit?: boolean;
706
+ delete?: boolean;
707
+ };
708
+ maxQueueAgeHours?: number;
709
+ readOnly?: boolean;
710
+ }
682
711
  interface SearchField extends Field {
683
712
  show?: boolean;
684
713
  }
@@ -1047,6 +1076,7 @@ declare class TableConfig {
1047
1076
  };
1048
1077
  realTime?: boolean;
1049
1078
  entityName?: string;
1079
+ offline?: OfflineConfig | boolean;
1050
1080
  allowUserKeepOpen?: boolean;
1051
1081
  keepOpenBehavior?: 'reset' | 'edit';
1052
1082
  }
@@ -1121,12 +1151,133 @@ declare class AppConfig {
1121
1151
  keepSignedIn: boolean;
1122
1152
  }
1123
1153
 
1154
+ interface ResolvedOfflineConfig {
1155
+ enabled: boolean;
1156
+ cacheRows: number;
1157
+ cacheLookups: boolean | string[];
1158
+ lookupMaxAgeHours: number;
1159
+ queue: {
1160
+ create: boolean;
1161
+ edit: boolean;
1162
+ delete: boolean;
1163
+ };
1164
+ maxQueueAgeHours: number;
1165
+ readOnly: boolean;
1166
+ }
1167
+ interface OfflineEntry {
1168
+ entity: string;
1169
+ entityName: string;
1170
+ idField: string;
1171
+ config: ResolvedOfflineConfig;
1172
+ }
1173
+ interface OutboxOp {
1174
+ seq?: number;
1175
+ opId: string;
1176
+ entity: string;
1177
+ entityName: string;
1178
+ url: string;
1179
+ opAction: 'create' | 'edit' | 'delete';
1180
+ payload: any;
1181
+ clientRef?: string;
1182
+ targetId?: any;
1183
+ targetClientRef?: string;
1184
+ refMap?: {
1185
+ [field: string]: string;
1186
+ };
1187
+ status: OfflineOpStatus;
1188
+ attempts: number;
1189
+ lastError?: string;
1190
+ serverRecord?: any;
1191
+ maxAgeHours: number;
1192
+ userId: string;
1193
+ enqueuedAt: number;
1194
+ syncedAt?: number;
1195
+ }
1196
+ declare class OfflineService {
1197
+ private httpService;
1198
+ private authService;
1199
+ private storage;
1200
+ private messageService;
1201
+ private signalR;
1202
+ private zone;
1203
+ private runtimeConfig;
1204
+ online$: BehaviorSubject<boolean>;
1205
+ drained$: Subject<string[]>;
1206
+ private db;
1207
+ private reads;
1208
+ private outbox;
1209
+ private meta;
1210
+ private entries;
1211
+ private readUrls;
1212
+ private readPrefixes;
1213
+ registered$: BehaviorSubject<boolean>;
1214
+ private connectivityStarted;
1215
+ private syncStarted;
1216
+ private draining;
1217
+ private backoffTimer;
1218
+ private periodicTimer;
1219
+ private recoveryTimer;
1220
+ constructor(httpService: HttpService, authService: AuthService, storage: StorageService, messageService: MessageService, signalR: SignalRService, zone: NgZone, runtimeConfig: TinSpaRuntimeConfig | null);
1221
+ /** App-level gate: offline capability only runs when the app opts in via provideTinSpaRuntime({ offline: true }).
1222
+ * When off, register()/ensureConnectivity() no-op, so a consumer that never uses offline runs none of this. */
1223
+ get enabled(): boolean;
1224
+ get hasAny(): boolean;
1225
+ get online(): boolean;
1226
+ outboxView$(): Observable<any[]>;
1227
+ private summarize;
1228
+ private statusLabel;
1229
+ register(config: TableConfig): OfflineEntry | null;
1230
+ private registerLookups;
1231
+ matchRead(url: string): OfflineEntry | null;
1232
+ matchMutation(url: string): OfflineEntry | null;
1233
+ suppressesUrl(absoluteUrl: string): boolean;
1234
+ private resolveConfig;
1235
+ deleteLocalData(): Promise<void>;
1236
+ private ensureOpen;
1237
+ putRead(url: string, entity: string, data: any, maxRows: number): Promise<any>;
1238
+ private getRead;
1239
+ handleOfflineRead(action: Action, entry: OfflineEntry, networkCall: () => Observable<ApiResponse>): Observable<ApiResponse>;
1240
+ private serveCachedRead;
1241
+ enqueueOffline(action: Action, data: any, entry: OfflineEntry): Observable<ApiResponse>;
1242
+ private enqueueMutation;
1243
+ pendingOpsFor$(entity: string): Observable<OutboxOp[]>;
1244
+ activeOps$(): Observable<OutboxOp[]>;
1245
+ private pendingCreates;
1246
+ private hasPending;
1247
+ ensureConnectivity(): void;
1248
+ reportNetworkFailure(): void;
1249
+ private verify;
1250
+ private setOnline;
1251
+ private setOffline;
1252
+ private startRecoveryPolling;
1253
+ private stopRecoveryPolling;
1254
+ private startSync;
1255
+ drain(): Promise<void>;
1256
+ private drainLoop;
1257
+ private sendOp;
1258
+ private finishOp;
1259
+ private nextAutoOp;
1260
+ private resetOrphans;
1261
+ private cascadeFailure;
1262
+ private scheduleBackoff;
1263
+ retryOp(opId: string): Promise<void>;
1264
+ discardOp(opId: string): Promise<any>;
1265
+ resolveConflict(opId: string, choice: 'keepServer' | 'keepMine'): Promise<void>;
1266
+ private getOp;
1267
+ private parseAction;
1268
+ private hash;
1269
+ private sanitize;
1270
+ static ɵfac: i0.ɵɵFactoryDeclaration<OfflineService, [null, null, null, null, null, null, { optional: true; }]>;
1271
+ static ɵprov: i0.ɵɵInjectableDeclaration<OfflineService>;
1272
+ }
1273
+
1124
1274
  declare class DataServiceLib {
1125
1275
  private httpService;
1126
1276
  router: Router;
1127
1277
  private route;
1128
1278
  private authService;
1129
- constructor(httpService: HttpService, router: Router, route: ActivatedRoute, authService: AuthService);
1279
+ private offline;
1280
+ constructor(httpService: HttpService, router: Router, route: ActivatedRoute, authService: AuthService, offline: OfflineService);
1130
1281
  appConfig: AppConfig;
1131
1282
  private appConfigSource;
1132
1283
  appConfigObserv: Observable<AppConfig>;
@@ -1808,6 +1959,48 @@ declare class AnalyticsService {
1808
1959
  static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsService>;
1809
1960
  }
1810
1961
 
1962
+ declare class OfflineIndicatorComponent {
1963
+ private offline;
1964
+ private router;
1965
+ state$: Observable<{
1966
+ online: boolean;
1967
+ pending: number;
1968
+ attention: number;
1969
+ badge: number;
1970
+ }>;
1971
+ enabled: boolean;
1972
+ constructor(offline: OfflineService, router: Router);
1973
+ tooltip(s: {
1974
+ online: boolean;
1975
+ pending: number;
1976
+ attention: number;
1977
+ badge: number;
1978
+ }): string;
1979
+ openSyncPage(): void;
1980
+ static ɵfac: i0.ɵɵFactoryDeclaration<OfflineIndicatorComponent, never>;
1981
+ static ɵcmp: i0.ɵɵComponentDeclaration<OfflineIndicatorComponent, "spa-offline-indicator", never, {}, {}, never, never, false, never>;
1982
+ }
1983
+
1984
+ declare class SyncComponent implements OnInit, OnDestroy {
1985
+ private offline;
1986
+ private messageService;
1987
+ ops: OutboxOp[];
1988
+ alertConfig: AlertConfig | null;
1989
+ private sub;
1990
+ private retryButton;
1991
+ private keepServerButton;
1992
+ private keepMineButton;
1993
+ private discardButton;
1994
+ private syncNowButton;
1995
+ tableConfig: TableConfig;
1996
+ ngOnInit(): void;
1997
+ ngOnDestroy(): void;
1998
+ private discard;
1999
+ private updateAlert;
2000
+ static ɵfac: i0.ɵɵFactoryDeclaration<SyncComponent, never>;
2001
+ static ɵcmp: i0.ɵɵComponentDeclaration<SyncComponent, "spa-sync", never, {}, {}, never, never, false, never>;
2002
+ }
2003
+
1811
2004
  declare const authGuard: CanActivateFn;
1812
2005
 
1813
2006
  declare const featureGuard: (featureKey: string) => CanActivateFn;
@@ -2513,7 +2706,9 @@ declare class TableComponent implements OnInit, AfterViewInit, OnDestroy {
2513
2706
  private conditionService;
2514
2707
  private authService;
2515
2708
  private signalRService;
2516
- constructor(dataService: DataServiceLib, messageService: MessageService, breakpointObserver: BreakpointObserver, dialog: MatDialog, buttonService: ButtonService, dialogService: DialogService, tableConfigService: TableConfigService, conditionService: ConditionService, authService: AuthService, signalRService: SignalRService);
2709
+ private offline;
2710
+ constructor(dataService: DataServiceLib, messageService: MessageService, breakpointObserver: BreakpointObserver, dialog: MatDialog, buttonService: ButtonService, dialogService: DialogService, tableConfigService: TableConfigService, conditionService: ConditionService, authService: AuthService, signalRService: SignalRService, // Changed: Added SignalRService
2711
+ offline: OfflineService);
2517
2712
  ngOnInit(): void;
2518
2713
  ngAfterViewInit(): void;
2519
2714
  ngOnChanges(changes: SimpleChanges): void;
@@ -2548,6 +2743,10 @@ declare class TableComponent implements OnInit, AfterViewInit, OnDestroy {
2548
2743
  private realTimeSubs;
2549
2744
  private realTimeEntityName;
2550
2745
  isSignalRConnected: boolean;
2746
+ private offlineEntry;
2747
+ private pendingOps;
2748
+ private rawRows;
2749
+ private offlineSubs;
2551
2750
  private initializeComponent;
2552
2751
  private updateTableConfiguration;
2553
2752
  private setupDataLoading;
@@ -2584,7 +2783,14 @@ declare class TableComponent implements OnInit, AfterViewInit, OnDestroy {
2584
2783
  execAction(button: Button, row: any): void;
2585
2784
  private getElevationClass;
2586
2785
  private realTimeRefreshOrFallback;
2786
+ private setupOffline;
2787
+ private placeStatusIcons;
2788
+ private applyOfflineOverlay;
2789
+ private computeOverlay;
2790
+ private reapplyOverlay;
2587
2791
  private setupRealTimeSubscriptions;
2792
+ private realTimeBaseRows;
2793
+ private applyRealTimeData;
2588
2794
  private deriveEntityName;
2589
2795
  private findIdKey;
2590
2796
  ngOnDestroy(): void;
@@ -3174,7 +3380,7 @@ declare class HtmlComponent implements OnInit {
3174
3380
  value: string;
3175
3381
  maxHeight: string;
3176
3382
  display: string;
3177
- sanitizedHtml: SafeHtml;
3383
+ sanitizedHtml: string;
3178
3384
  private sanitizeHtml;
3179
3385
  static ɵfac: i0.ɵɵFactoryDeclaration<HtmlComponent, never>;
3180
3386
  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>;
@@ -3750,7 +3956,7 @@ declare class CurrencyInputModule {
3750
3956
 
3751
3957
  declare class TinSpaModule {
3752
3958
  static ɵfac: i0.ɵɵFactoryDeclaration<TinSpaModule, never>;
3753
- 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 SpaMatModule, typeof i63.HttpClientModule, typeof CurrencyInputModule, typeof i65.NgxDocViewerModule, typeof i66.AngularEditorModule, typeof i67.BaseChartDirective, typeof i68.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]>;
3959
+ 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]>;
3754
3960
  static ɵinj: i0.ɵɵInjectorDeclaration<TinSpaModule>;
3755
3961
  }
3756
3962
 
@@ -4868,7 +5074,7 @@ declare class NotificationsConfigComponent implements OnInit {
4868
5074
 
4869
5075
  declare class WorkflowModule {
4870
5076
  static ɵfac: i0.ɵɵFactoryDeclaration<WorkflowModule, never>;
4871
- static ɵmod: i0.ɵɵNgModuleDeclaration<WorkflowModule, [typeof ApprovalsComponent, typeof ApprovalsConfigComponent, typeof NotificationsComponent, typeof AppModelsComponent, typeof NotificationsConfigComponent], [typeof i4.CommonModule, typeof SpaAdminModule], never>;
5077
+ static ɵmod: i0.ɵɵNgModuleDeclaration<WorkflowModule, [typeof ApprovalsComponent, typeof ApprovalsConfigComponent, typeof NotificationsComponent, typeof AppModelsComponent, typeof NotificationsConfigComponent, typeof SyncComponent], [typeof i4.CommonModule, typeof SpaAdminModule], never>;
4872
5078
  static ɵinj: i0.ɵɵInjectorDeclaration<WorkflowModule>;
4873
5079
  }
4874
5080
 
@@ -4920,5 +5126,5 @@ declare class SpaHomeModule {
4920
5126
  static ɵinj: i0.ɵɵInjectorDeclaration<SpaHomeModule>;
4921
5127
  }
4922
5128
 
4923
- 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, 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 };
4924
- 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 };
5129
+ 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 };
5130
+ 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,6 +1,6 @@
1
1
  {
2
2
  "name": "tin-spa",
3
- "version": "20.8.0",
3
+ "version": "20.8.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0",
@@ -9,7 +9,8 @@
9
9
  "@kolkov/angular-editor": "^3.0.5"
10
10
  },
11
11
  "dependencies": {
12
- "tslib": "^2.3.0"
12
+ "tslib": "^2.3.0",
13
+ "dexie": "^4.0.0"
13
14
  },
14
15
  "publishConfig": {
15
16
  "registry": "https://registry.npmjs.org/"