@posiwise/admin-module 0.0.253 → 0.0.255

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@posiwise/admin-module",
3
- "version": "0.0.253",
3
+ "version": "0.0.255",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^22.2.0",
6
6
  "@angular/core": "^22.2.0",
@@ -1,53 +1,55 @@
1
1
  import * as i0 from "@angular/core";
2
- import { AfterViewInit, ChangeDetectorRef, EventEmitter, Injector, OnDestroy, OnInit, PipeTransform, QueryList, TemplateRef } from "@angular/core";
2
+ import { AfterViewInit, ChangeDetectorRef, DestroyRef, EventEmitter, Injector, OnDestroy, OnInit, PipeTransform, QueryList, TemplateRef } from "@angular/core";
3
3
  import { AhoyService, AuthService, CommonService, CustomToastService, FeatureFlagService, GroupService, NgbDateCustomParserFormatter, PermissionService, ProductService, SubscriptionService, TagService, TipsService, UserService, WindowService } from "@posiwise/common-services";
4
4
  import { LazyLoadEvent, MenuItem, SelectItem } from "primeng/api";
5
5
  import { AppBaseComponent } from "@posiwise/app-base-component";
6
- import { AdminDataService, AdminService, AmbassadorPayoutDetail, AmbassadorPayoutListResponse, AmbassadorPayoutService, AmbassadorPayoutStatus, McpOauthClient, McpOauthClientService, PayoutProvider, SubscriptionInvoice, SubscriptionInvoiceListResponse, SubscriptionInvoicePaymentType, SubscriptionInvoiceService } from "@posiwise/admin-module-utils";
7
- import * as i132 from "@posiwise/shared-components";
6
+ import { AdminDataService, AdminService, AmbassadorPayoutDetail, AmbassadorPayoutListResponse, AmbassadorPayoutService, AmbassadorPayoutStatus, McpOauthClient, McpOauthClientService, OnboardingAdminService, OnboardingAdminStep, OnboardingCatalogue, OnboardingCatalogueSource, OnboardingFamily, PayoutProvider, SubscriptionInvoice, SubscriptionInvoiceListResponse, SubscriptionInvoicePaymentType, SubscriptionInvoiceService } from "@posiwise/admin-module-utils";
7
+ import * as i134 from "@posiwise/shared-components";
8
8
  import { CollapsibleSidebarService, ConfirmDialogService, PasswordValidationComponent, PermissionTreeComponent } from "@posiwise/shared-components";
9
- import * as i139 from "@angular/forms";
9
+ import * as i141 from "@angular/forms";
10
10
  import { FormArray, FormBuilder, FormGroup, NgForm, UntypedFormArray, UntypedFormBuilder, UntypedFormGroup } from "@angular/forms";
11
11
  import { FAQ, Paging, Plotly, Product, ResourceInsightResponse, ResourcePost, Role, Subscription, SubscriptionMember, User } from "@posiwise/common-utilities";
12
12
  import { CdkDragDrop } from "@angular/cdk/drag-drop";
13
13
  import { CustomUploaderComponent } from "@posiwise/utils";
14
- import * as i128 from "@ng-bootstrap/ng-bootstrap";
15
- import { NgbDateParserFormatter, NgbDatepickerConfig, NgbModal } from "@ng-bootstrap/ng-bootstrap";
14
+ import * as i130 from "@ng-bootstrap/ng-bootstrap";
15
+ import { NgbActiveModal, NgbDateParserFormatter, NgbDatepickerConfig, NgbModal } from "@ng-bootstrap/ng-bootstrap";
16
+ import { HasUnsavedChanges, UnsavedChangesService } from "@posiwise/core-guards";
16
17
  import { Observable } from "rxjs";
17
- import * as i130 from "@angular/common";
18
+ import { TranslocoService } from "@jsverse/transloco";
19
+ import * as i132 from "@angular/common";
18
20
  import { DatePipe } from "@angular/common";
19
21
  import { DomSanitizer, SafeHtml } from "@angular/platform-browser";
20
- import * as i133 from "@angular-magic/ngx-gp-autocomplete";
22
+ import * as i135 from "@angular-magic/ngx-gp-autocomplete";
21
23
  import { NgxGpAutocompleteDirective } from "@angular-magic/ngx-gp-autocomplete";
22
- import * as i116 from "primeng/autocomplete";
24
+ import * as i118 from "primeng/autocomplete";
23
25
  import { AutoComplete } from "primeng/autocomplete";
24
26
  import moment$1 from "moment";
25
- import * as i113 from "primeng/table";
27
+ import * as i115 from "primeng/table";
26
28
  import { Table } from "primeng/table";
27
- import * as i118 from "primeng/multiselect";
29
+ import * as i120 from "primeng/multiselect";
28
30
  import { MultiSelect } from "primeng/multiselect";
29
- import * as i129 from "ngx-uploader";
31
+ import * as i131 from "ngx-uploader";
30
32
  import { UploadFile, UploadInput, UploadOutput, UploaderOptions, humanizeBytes } from "ngx-uploader";
31
- import * as i114 from "primeng/tooltip";
32
- import * as i115 from "primeng/accordion";
33
- import * as i117 from "primeng/select";
34
- import * as i119 from "primeng/inputtext";
35
- import * as i120 from "primeng/iconfield";
36
- import * as i121 from "primeng/inputicon";
37
- import * as i122 from "@posiwise/app-loader";
38
- import * as i123 from "ngx-daterangepicker-material";
39
- import * as i124 from "ngx-json-viewer";
40
- import * as i125 from "primeng/datepicker";
41
- import * as i126 from "angular-plotly.js";
42
- import * as i127 from "primeng/fileupload";
43
- import * as i131 from "ngx-ui-switch";
44
- import * as i134 from "@posiwise/core-transloco";
45
- import * as i135 from "@posiwise/pipes";
46
- import * as i137 from "@posiwise/directives";
33
+ import * as i116 from "primeng/tooltip";
34
+ import * as i117 from "primeng/accordion";
35
+ import * as i119 from "primeng/select";
36
+ import * as i121 from "primeng/inputtext";
37
+ import * as i122 from "primeng/iconfield";
38
+ import * as i123 from "primeng/inputicon";
39
+ import * as i124 from "@posiwise/app-loader";
40
+ import * as i125 from "ngx-daterangepicker-material";
41
+ import * as i126 from "ngx-json-viewer";
42
+ import * as i127 from "primeng/datepicker";
43
+ import * as i128 from "angular-plotly.js";
44
+ import * as i129 from "primeng/fileupload";
45
+ import * as i133 from "ngx-ui-switch";
46
+ import * as i136 from "@posiwise/core-transloco";
47
+ import * as i137 from "@posiwise/pipes";
48
+ import * as i139 from "@posiwise/directives";
47
49
  import * as i1 from "@angular/router";
48
50
  import { ActivatedRouteSnapshot, Route, Router, RouterStateSnapshot } from "@angular/router";
49
- import * as i140 from "ngx-pagination";
50
- import * as i141 from "ngx-quill";
51
+ import * as i142 from "ngx-pagination";
52
+ import * as i143 from "ngx-quill";
51
53
  declare namespace users_tabs_component_d_exports {
52
54
  export { UserTabComponent };
53
55
  }
@@ -1312,13 +1314,15 @@ export declare class LoginNotificationsListComponent extends AppBaseComponent im
1312
1314
  declare namespace login_notification_details_component_d_exports {
1313
1315
  export { LoginNotificationDetailsComponent };
1314
1316
  }
1315
- export declare class LoginNotificationDetailsComponent extends AppBaseComponent implements OnInit {
1317
+ export declare class LoginNotificationDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy, HasUnsavedChanges {
1316
1318
  private readonly cdr;
1317
1319
  private readonly adminService;
1318
1320
  private readonly productService;
1321
+ private readonly unsavedChanges;
1319
1322
  form: UntypedFormGroup;
1320
1323
  submitted: boolean;
1321
1324
  buttonBusy: boolean;
1325
+ saved: boolean;
1322
1326
  id: number;
1323
1327
  routers: {
1324
1328
  globalConfigDetails: string;
@@ -1369,8 +1373,11 @@ export declare class LoginNotificationDetailsComponent extends AppBaseComponent
1369
1373
  loginNotificationTypes$: Observable<string>;
1370
1374
  isLoading: boolean;
1371
1375
  featureKeys: any[];
1372
- constructor(injector: Injector, cdr: ChangeDetectorRef, adminService: AdminService, productService: ProductService);
1376
+ private unregisterUnsaved;
1377
+ constructor(injector: Injector, cdr: ChangeDetectorRef, adminService: AdminService, productService: ProductService, unsavedChanges: UnsavedChangesService);
1373
1378
  ngOnInit(): void;
1379
+ ngOnDestroy(): void;
1380
+ hasUnsavedChanges(): boolean;
1374
1381
  get f(): {
1375
1382
  [key: string]: import("@angular/forms").AbstractControl<any, any, any>;
1376
1383
  };
@@ -1535,6 +1542,7 @@ declare namespace feature_flags_list_component_d_exports {
1535
1542
  declare class FeatureFlagsListComponent extends AppBaseComponent {
1536
1543
  private readonly adminService;
1537
1544
  private readonly confirmDialog;
1545
+ private readonly cdr;
1538
1546
  readonly PAGE_SIZE = 50;
1539
1547
  routers: {
1540
1548
  globalConfigDetails: string;
@@ -1588,7 +1596,7 @@ declare class FeatureFlagsListComponent extends AppBaseComponent {
1588
1596
  featureFlags: any[];
1589
1597
  totalRecords: number;
1590
1598
  private page;
1591
- constructor(injector: Injector, adminService: AdminService, confirmDialog: ConfirmDialogService);
1599
+ constructor(injector: Injector, adminService: AdminService, confirmDialog: ConfirmDialogService, cdr: ChangeDetectorRef);
1592
1600
  private nonEmpty;
1593
1601
  onLazyLoad(event: LazyLoadEvent): void;
1594
1602
  loadFeatureFlags(paging?: any): void;
@@ -1601,8 +1609,9 @@ declare class FeatureFlagsListComponent extends AppBaseComponent {
1601
1609
  declare namespace feature_flag_details_component_d_exports {
1602
1610
  export { FeatureFlagDetailsComponent };
1603
1611
  }
1604
- declare class FeatureFlagDetailsComponent extends AppBaseComponent implements OnInit {
1612
+ declare class FeatureFlagDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy, HasUnsavedChanges {
1605
1613
  private readonly adminService;
1614
+ private readonly unsavedChanges;
1606
1615
  form: import("@angular/forms").UntypedFormGroup;
1607
1616
  routers: {
1608
1617
  globalConfigDetails: string;
@@ -1653,13 +1662,17 @@ declare class FeatureFlagDetailsComponent extends AppBaseComponent implements On
1653
1662
  isLoading: boolean;
1654
1663
  submitted: boolean;
1655
1664
  buttonBusy: boolean;
1665
+ saved: boolean;
1656
1666
  flagTypeOptions: any[];
1657
1667
  statusOptions: any[];
1658
1668
  allUsers: any[];
1659
1669
  filteredUsers: any[];
1660
1670
  subscriptionId: number;
1661
- constructor(injector: Injector, adminService: AdminService);
1671
+ private unregisterUnsaved;
1672
+ constructor(injector: Injector, adminService: AdminService, unsavedChanges: UnsavedChangesService);
1662
1673
  ngOnInit(): void;
1674
+ ngOnDestroy(): void;
1675
+ hasUnsavedChanges(): boolean;
1663
1676
  loadSupportedOptions(): void;
1664
1677
  loadOwners(): void;
1665
1678
  searchOwners(event: any): void;
@@ -1811,7 +1824,8 @@ declare namespace products_tabs_component_d_exports {
1811
1824
  }
1812
1825
  export declare class ProductsTabComponent {
1813
1826
  items: MenuItem[];
1814
- constructor();
1827
+ constructor(transloco: TranslocoService, destroyRef: DestroyRef);
1828
+ private tabs;
1815
1829
  static ɵfac: i0.ɵɵFactoryDeclaration<ProductsTabComponent, never>;
1816
1830
  static ɵcmp: i0.ɵɵComponentDeclaration<ProductsTabComponent, "pw-products-tabs", never, {}, {}, never, never, false, never>;
1817
1831
  }
@@ -2490,12 +2504,19 @@ declare abstract class UsersListBaseComponent extends AppBaseComponent {
2490
2504
  value: string;
2491
2505
  }[];
2492
2506
  constructor(adminService: AdminService, productService: ProductService, injector: Injector, cdr: ChangeDetectorRef, sidebarService: CollapsibleSidebarService);
2493
- getTableState(): void;
2494
- private initializeSearchText;
2495
- private initializeSelectedOption;
2496
- private initializeSearchDataSource;
2497
- private initializeCriteria;
2498
- private initializeFilters;
2507
+ onTableStateRestore(event: {
2508
+ filters?: Record<string, {
2509
+ value: unknown;
2510
+ }>;
2511
+ }): void;
2512
+ /**
2513
+ * Rebuild `searchDataSource` from the dataset that matches `selectedOption.value`.
2514
+ * Called from `onTableStateRestore` (so a restored criteria multiselect has its
2515
+ * options back) and from `getRoles`/`getProducts` resolution (so a late data
2516
+ * fetch after restore still populates the multiselect). Mirrors the mapping in
2517
+ * the concrete `onSearchOptionChange`.
2518
+ */
2519
+ protected refreshSearchDataSource(): void;
2499
2520
  onLazyLoad(event: LazyLoadEvent): void;
2500
2521
  protected getRoles(): void;
2501
2522
  protected getProducts(): void;
@@ -2747,15 +2768,17 @@ export declare class SubscriptionsListComponent extends AppBaseComponent impleme
2747
2768
  ngOnInit(): void;
2748
2769
  openRecoverSubscriptionModal(item: any): void;
2749
2770
  onRecoverConfirmed(): void;
2750
- getTableState(): void;
2771
+ onStateRestore(event: {
2772
+ filters?: Record<string, {
2773
+ value: unknown;
2774
+ }>;
2775
+ }): void;
2751
2776
  onLazyLoad(event: LazyLoadEvent): void;
2752
2777
  getSupportedCurrency(): void;
2753
2778
  getMinMaxUnits(): void;
2754
2779
  private getData;
2755
2780
  onDelete(item: any): void;
2756
2781
  private getProductsList;
2757
- onSearchOptionChange(event: any): void;
2758
- filterByStatus(value: string): void;
2759
2782
  sortObj(obj: any): {};
2760
2783
  searchProduct(event: any): void;
2761
2784
  onProductChange(event: any): void;
@@ -2772,7 +2795,7 @@ export declare class SubscriptionsListComponent extends AppBaseComponent impleme
2772
2795
  declare namespace invite_users_component_d_exports {
2773
2796
  export { InviteUsersComponent };
2774
2797
  }
2775
- declare class InviteUsersComponent extends AppBaseComponent implements OnInit, OnDestroy {
2798
+ declare class InviteUsersComponent extends AppBaseComponent implements OnInit {
2776
2799
  private readonly fb;
2777
2800
  private readonly adminService;
2778
2801
  private readonly productService;
@@ -2857,7 +2880,6 @@ declare class InviteUsersComponent extends AppBaseComponent implements OnInit, O
2857
2880
  subscriptionInsights: FeatureKey[];
2858
2881
  constructor(fb: UntypedFormBuilder, adminService: AdminService, productService: ProductService, injector: Injector, commonService: CommonService, cdr: ChangeDetectorRef);
2859
2882
  ngOnInit(): void;
2860
- getTableState(): void;
2861
2883
  onLazyLoad(event: LazyLoadEvent): void;
2862
2884
  getSupportedCurrency(): void;
2863
2885
  getMinMaxUnits(): void;
@@ -2873,7 +2895,6 @@ declare class InviteUsersComponent extends AppBaseComponent implements OnInit, O
2873
2895
  'text-danger fw-bold': boolean;
2874
2896
  'text-warning text-bold-700': boolean;
2875
2897
  };
2876
- ngOnDestroy(): void;
2877
2898
  static ɵfac: i0.ɵɵFactoryDeclaration<InviteUsersComponent, never>;
2878
2899
  static ɵcmp: i0.ɵɵComponentDeclaration<InviteUsersComponent, "pw-invite-users", never, {}, {}, never, never, false, never>;
2879
2900
  }
@@ -3238,6 +3259,117 @@ export declare class ProductInsightComponent extends AppBaseComponent implements
3238
3259
  static ɵfac: i0.ɵɵFactoryDeclaration<ProductInsightComponent, never>;
3239
3260
  static ɵcmp: i0.ɵɵComponentDeclaration<ProductInsightComponent, "pw-admin-product-insight", never, {}, {}, never, never, false, never>;
3240
3261
  }
3262
+ declare namespace onboarding_steps_component_d_exports {
3263
+ export { OnboardingStepsComponent };
3264
+ }
3265
+ /**
3266
+ * Admin → Products → Onboarding (cloudolive-api#441): the master subscription admin edits each product family's
3267
+ * onboarding checklist. Only families this app registered a catalogue for appear (ONBOARDING_CATALOGUES):
3268
+ * the catalogue says which checks the product can run, so a family without one could not be checked.
3269
+ */
3270
+ declare class OnboardingStepsComponent extends AppBaseComponent implements OnInit {
3271
+ private readonly onboarding;
3272
+ private readonly commonService;
3273
+ private readonly confirmDialog;
3274
+ private readonly modal;
3275
+ private readonly cdr;
3276
+ private readonly sources;
3277
+ families: (OnboardingFamily & {
3278
+ label: string;
3279
+ })[];
3280
+ permissionKey: string | null;
3281
+ /** The product (plan) the list is filtered to; null = every product of the family. */
3282
+ planFilter: string | null;
3283
+ steps: OnboardingAdminStep[];
3284
+ catalogue: OnboardingCatalogue;
3285
+ faqs: {
3286
+ slug: string;
3287
+ question: string;
3288
+ }[];
3289
+ loading: boolean;
3290
+ loadFailed: boolean;
3291
+ busy: boolean;
3292
+ constructor(injector: Injector, onboarding: OnboardingAdminService, commonService: CommonService, confirmDialog: ConfirmDialogService, modal: NgbModal, cdr: ChangeDetectorRef, sources: OnboardingCatalogueSource[] | null);
3293
+ /** The selected master subscription, read on every request — never a snapshot (TEN2). */
3294
+ get subscriptionId(): number;
3295
+ ngOnInit(): void;
3296
+ get plans(): {
3297
+ feature_key: string;
3298
+ name: string;
3299
+ }[];
3300
+ /** The steps a customer of the filtered product sees. */
3301
+ get visibleSteps(): OnboardingAdminStep[];
3302
+ selectFamily(permissionKey: string | null): void;
3303
+ completedBy(step: OnboardingAdminStep): string | null;
3304
+ planNames(step: OnboardingAdminStep): string | null;
3305
+ install(): void;
3306
+ /** Swaps a step with its neighbour in the visible (possibly filtered) list. */
3307
+ move(index: number, offset: number): void;
3308
+ toggle(step: OnboardingAdminStep, enabled: boolean): void;
3309
+ remove(step: OnboardingAdminStep): Promise<void>;
3310
+ edit(step: OnboardingAdminStep | null): void;
3311
+ private save;
3312
+ /** Runs a change, then shows the list it answers with, or reloads the list when it answers with none. */
3313
+ private run;
3314
+ private source;
3315
+ private refresh;
3316
+ static ɵfac: i0.ɵɵFactoryDeclaration<OnboardingStepsComponent, [null, null, null, null, null, null, {
3317
+ optional: true;
3318
+ }]>;
3319
+ static ɵcmp: i0.ɵɵComponentDeclaration<OnboardingStepsComponent, "pw-onboarding-steps", never, {}, {}, never, never, false, never>;
3320
+ }
3321
+ declare namespace onboarding_step_form_component_d_exports {
3322
+ export { OnboardingStepFormComponent };
3323
+ }
3324
+ /**
3325
+ * Add / edit one onboarding step (cloudolive-api#441), opened as a modal by OnboardingStepsComponent. Closes with
3326
+ * the step's attributes; the parent saves them. "How it's completed" offers the product's checks plus Manual
3327
+ * (the customer ticks it).
3328
+ */
3329
+ declare class OnboardingStepFormComponent {
3330
+ plans: {
3331
+ feature_key: string;
3332
+ name: string;
3333
+ }[];
3334
+ checks: OnboardingCatalogue['checks'];
3335
+ faqs: {
3336
+ slug: string;
3337
+ question: string;
3338
+ }[];
3339
+ otherSteps: OnboardingAdminStep[];
3340
+ submitted: boolean;
3341
+ readonly kinds: string[];
3342
+ readonly modal: NgbActiveModal;
3343
+ private readonly fb;
3344
+ readonly form: import("@angular/forms").FormGroup<{
3345
+ title: import("@angular/forms").FormControl<string>;
3346
+ description: import("@angular/forms").FormControl<string>;
3347
+ kind: import("@angular/forms").FormControl<string>;
3348
+ check_key: import("@angular/forms").FormControl<string>;
3349
+ feature_keys: import("@angular/forms").FormControl<string[]>;
3350
+ depends_on: import("@angular/forms").FormControl<string[]>;
3351
+ route: import("@angular/forms").FormControl<string>;
3352
+ faq_slug: import("@angular/forms").FormControl<string>;
3353
+ activation: import("@angular/forms").FormControl<boolean>;
3354
+ admin_only: import("@angular/forms").FormControl<boolean>;
3355
+ enabled: import("@angular/forms").FormControl<boolean>;
3356
+ }>;
3357
+ private current;
3358
+ /**
3359
+ * The step being edited (null = a new one). A setter, not ngOnInit: the parent assigns it after
3360
+ * NgbModal.open() has already created the component, so the form is filled on assignment.
3361
+ */
3362
+ get step(): OnboardingAdminStep | null;
3363
+ set step(value: OnboardingAdminStep | null);
3364
+ get checkOptions(): {
3365
+ check_key: string;
3366
+ title: string;
3367
+ description?: string;
3368
+ }[];
3369
+ save(): void;
3370
+ static ɵfac: i0.ɵɵFactoryDeclaration<OnboardingStepFormComponent, never>;
3371
+ static ɵcmp: i0.ɵɵComponentDeclaration<OnboardingStepFormComponent, "pw-onboarding-step-form", never, {}, {}, never, never, false, never>;
3372
+ }
3241
3373
  declare namespace resources_admin_tabs_component_d_exports {
3242
3374
  export { ResourcesAdminIndexComponent };
3243
3375
  }
@@ -4164,17 +4296,21 @@ export declare class TermsOfServiceTabsComponent {
4164
4296
  declare namespace terms_of_service_details_component_d_exports {
4165
4297
  export { TermsOfServiceDetailsComponent };
4166
4298
  }
4167
- export declare class TermsOfServiceDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy, AfterViewInit {
4299
+ export declare class TermsOfServiceDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy, AfterViewInit, HasUnsavedChanges {
4168
4300
  private readonly adminService;
4169
4301
  private readonly cdr;
4302
+ private readonly unsavedChanges;
4170
4303
  form: UntypedFormGroup;
4171
4304
  id: number;
4172
4305
  data: PrivacyTos;
4173
4306
  isLoading: boolean;
4174
4307
  submitted: boolean;
4308
+ saved: boolean;
4175
4309
  editorConfig: any;
4176
- constructor(adminService: AdminService, injector: Injector, cdr: ChangeDetectorRef);
4310
+ private unregisterUnsaved;
4311
+ constructor(adminService: AdminService, injector: Injector, cdr: ChangeDetectorRef, unsavedChanges: UnsavedChangesService);
4177
4312
  ngOnInit(): void;
4313
+ hasUnsavedChanges(): boolean;
4178
4314
  ngAfterViewInit(): void;
4179
4315
  onSave(): void;
4180
4316
  get f(): {
@@ -4750,12 +4886,14 @@ declare class OauthClientsComponent extends AppBaseComponent implements OnInit {
4750
4886
  declare namespace oauth_clients_details_component_d_exports {
4751
4887
  export { OauthClientsDetailsComponent };
4752
4888
  }
4753
- declare class OauthClientsDetailsComponent extends AppBaseComponent implements OnInit {
4889
+ declare class OauthClientsDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy, HasUnsavedChanges {
4754
4890
  private readonly fb;
4755
4891
  private readonly oauthClientService;
4756
4892
  private readonly cdr;
4893
+ private readonly unsavedChanges;
4757
4894
  form: FormGroup;
4758
4895
  submitting: boolean;
4896
+ saved: boolean;
4759
4897
  /** Set in edit mode — the record being edited. null while creating. */
4760
4898
  editId: number | null;
4761
4899
  /** Gates the form in edit mode until the client is fetched (AI54). */
@@ -4807,8 +4945,11 @@ declare class OauthClientsDetailsComponent extends AppBaseComponent implements O
4807
4945
  posts: string;
4808
4946
  resourcesList: string;
4809
4947
  };
4810
- constructor(fb: FormBuilder, oauthClientService: McpOauthClientService, injector: Injector, cdr: ChangeDetectorRef);
4948
+ private unregisterUnsaved;
4949
+ constructor(fb: FormBuilder, oauthClientService: McpOauthClientService, injector: Injector, cdr: ChangeDetectorRef, unsavedChanges: UnsavedChangesService);
4811
4950
  ngOnInit(): void;
4951
+ ngOnDestroy(): void;
4952
+ hasUnsavedChanges(): boolean;
4812
4953
  /** In edit mode the client_id is immutable and is not part of the editable form. */
4813
4954
  private loadClient;
4814
4955
  onSubmit(): void;
@@ -4816,6 +4957,12 @@ declare class OauthClientsDetailsComponent extends AppBaseComponent implements O
4816
4957
  private updateClient;
4817
4958
  copy(value: string): void;
4818
4959
  backToList(): void;
4960
+ /**
4961
+ * Clear the dirty state so a programmatic post-save navigation (or the
4962
+ * secret-shown confirmation screen that follows a create) never trips
4963
+ * the unsaved-changes prompt.
4964
+ */
4965
+ private markClean;
4819
4966
  static ɵfac: i0.ɵɵFactoryDeclaration<OauthClientsDetailsComponent, never>;
4820
4967
  static ɵcmp: i0.ɵɵComponentDeclaration<OauthClientsDetailsComponent, "pw-oauth-clients-details", never, {}, {}, never, never, false, never>;
4821
4968
  }
@@ -5658,6 +5805,7 @@ declare class SubscriptionInvoicesComponent extends AppBaseComponent implements
5658
5805
  */
5659
5806
  download(invoice: SubscriptionInvoice): void;
5660
5807
  amount(cents: number | null): number;
5808
+ isUnrecorded(cents?: number | null): boolean;
5661
5809
  private getInvoices;
5662
5810
  static ɵfac: i0.ɵɵFactoryDeclaration<SubscriptionInvoicesComponent, never>;
5663
5811
  static ɵcmp: i0.ɵɵComponentDeclaration<SubscriptionInvoicesComponent, "pw-subscription-invoices", never, {}, {}, never, never, false, never>;
@@ -6009,7 +6157,7 @@ export declare class AdminRoutingModule {
6009
6157
  }
6010
6158
  export declare class AdminModule {
6011
6159
  static ɵfac: i0.ɵɵFactoryDeclaration<AdminModule, never>;
6012
- static ɵmod: i0.ɵɵNgModuleDeclaration<AdminModule, [typeof UserTabComponent, typeof SubscriptionComponent, typeof MailerComponent, typeof MailerListComponent, typeof MailerDetailsComponent, typeof NewsletterComponent, typeof FaqListComponent, typeof DomainConfigListComponent, typeof DomainConfigDetailsComponent, typeof DomainConfigBuildComponent, typeof DomainConfigCoreComponent, typeof DomainConfigOrganizationComponent, typeof DomainConfigSecurityComponent, typeof DomainConfigSocialComponent, typeof DomainConfigIntegrationsComponent, typeof DomainConfigInterfaceComponent, typeof DomainConfigTabsComponent, typeof LoginNotificationTabsComponent, typeof LoginNotificationsListComponent, typeof LoginNotificationDetailsComponent, typeof FeedbackQuestionsListComponent, typeof FeedbackQuestionsDetailsComponent, typeof FeatureFlagsListComponent, typeof FeatureFlagDetailsComponent, typeof FeatureFlagRulesComponent, typeof FeatureFlagsTabsComponent, typeof UserDetailsComponent, typeof ProductsTabComponent, typeof SubscriptionDetailsComponent, typeof NewsletterDetailsComponent, typeof NewsletterItemDetailsComponent, typeof NewsLetterItemViewComponent, typeof ProductDetailsComponent, typeof ProductBackupCardComponent, typeof RoleDetailsComponent, typeof TagsTabsComponent, typeof TipComponent, typeof TipsComponent, typeof AgentDetailsComponent, typeof UserListComponent, typeof RolesListComponent, typeof SubscriptionsListComponent, typeof InviteUsersComponent, typeof SubscriptionProductDetailsComponent, typeof InsightComponent, typeof SubscriptionInsightNpsComponent, typeof SubscriptionInsightAveragePriceComponent, typeof SubscriptionInsightProcuctSessionComponent, typeof SubscriptionInsightUserSessionComponent, typeof SubscriptionInsightAverageUserComponent, typeof SubscriptionInsightRevenueComponent, typeof SubscriptionInsightChurnComponent, typeof ProductsListComponent, typeof ProductInsightComponent, typeof ResourcesAdminIndexComponent, typeof ResourceAdminDetailsComponent, typeof TagDetailsComponent, typeof ResourcesIndexComponent, typeof ResourcesInsightComponent, typeof ResourcesListsInsightComponent, typeof NewslettersListComponent, typeof NewslettersItemsComponent, typeof NewsletterInsightComponent, typeof UserInsightComponent, typeof TagsCategoryComponent, typeof TagsListComponent, typeof TipsTabsComponent, typeof GenericMiscComponent, typeof GenericInsightComponent, typeof FaqTabsComponent, typeof ContactUsTabsComponent, typeof GeneralTabsComponent, typeof PermissionsListComponent, typeof PermissionsDetailsComponent, typeof PermissionsTabsComponent, typeof TermsOfServiceComponent, typeof TermsOfServiceTabsComponent, typeof TermsOfServiceDetailsComponent, typeof CredentialsComponent, typeof SubscriptionCredentialsComponent, typeof SubscriptionCredentialsDetailsComponent, typeof CredentialsDetailsComponent, typeof CredentialsTabComponent, typeof AmbassadorPayoutsTabsComponent, typeof AmbassadorPayoutsListComponent, typeof AmbassadorPayoutDetailsComponent, typeof OauthClientsTabsComponent, typeof OauthClientsComponent, typeof OauthClientsDetailsComponent, typeof AhoyEventsComponent, typeof TrackingComponent, typeof AhoyMessagesComponent, typeof AhoyVisitsComponent, typeof EventsComponent, typeof VersionsComponent, typeof UsersListForProductComponent, typeof NewsletterUsersListComponent, typeof GlobalConfigListComponent, typeof GlobalConfigDetailsComponent, typeof GlobalConfigTabsComponent, typeof SubscriptionProductsComponent, typeof SubscriptionUsersComponent, typeof AddMembersComponent, typeof SubscriptionAgentsListComponent, typeof SubscriptionInvoicesComponent, typeof SubscriptionInsightTabsComponent, typeof ContactUsListComponent, typeof IncidentListComponent, typeof IncidentTabsComponent, typeof AddEditIncidentComponent, typeof AddEditFaqComponent, typeof UsersInformationSidebarComponent], [typeof i113.TableModule, typeof i114.TooltipModule, typeof i115.AccordionModule, typeof i116.AutoCompleteModule, typeof i117.SelectModule, typeof i118.MultiSelectModule, typeof i119.InputTextModule, typeof i120.IconFieldModule, typeof i121.InputIconModule, typeof i122.AppLoaderModule, typeof i123.NgxDaterangepickerMd, typeof i124.NgxJsonViewerModule, typeof i125.DatePickerModule, typeof i126.PlotlyViaCDNModule, typeof i127.FileUploadModule, typeof i128.NgbTooltipModule, typeof i129.NgxUploaderModule, typeof i130.CommonModule, typeof i131.UiSwitchModule, typeof i132.SharedComponentsModule, typeof i132.CollapsibleSidebarTriggerDirective, typeof i133.NgxGpAutocompleteModule, typeof i134.CoreTranslocoModule, typeof i135.PipesModule, typeof KpiInsightPipe, typeof i137.DirectivesModule, typeof AdminRoutingModule, typeof i128.NgbModalModule, typeof i139.FormsModule, typeof i139.ReactiveFormsModule, typeof i140.NgxPaginationModule, typeof i128.NgbNavModule, typeof i128.NgbDatepickerModule, typeof i141.QuillModule], never>;
6160
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AdminModule, [typeof UserTabComponent, typeof SubscriptionComponent, typeof MailerComponent, typeof MailerListComponent, typeof MailerDetailsComponent, typeof NewsletterComponent, typeof FaqListComponent, typeof DomainConfigListComponent, typeof DomainConfigDetailsComponent, typeof DomainConfigBuildComponent, typeof DomainConfigCoreComponent, typeof DomainConfigOrganizationComponent, typeof DomainConfigSecurityComponent, typeof DomainConfigSocialComponent, typeof DomainConfigIntegrationsComponent, typeof DomainConfigInterfaceComponent, typeof DomainConfigTabsComponent, typeof LoginNotificationTabsComponent, typeof LoginNotificationsListComponent, typeof LoginNotificationDetailsComponent, typeof FeedbackQuestionsListComponent, typeof FeedbackQuestionsDetailsComponent, typeof FeatureFlagsListComponent, typeof FeatureFlagDetailsComponent, typeof FeatureFlagRulesComponent, typeof FeatureFlagsTabsComponent, typeof UserDetailsComponent, typeof ProductsTabComponent, typeof SubscriptionDetailsComponent, typeof NewsletterDetailsComponent, typeof NewsletterItemDetailsComponent, typeof NewsLetterItemViewComponent, typeof ProductDetailsComponent, typeof ProductBackupCardComponent, typeof RoleDetailsComponent, typeof TagsTabsComponent, typeof TipComponent, typeof TipsComponent, typeof AgentDetailsComponent, typeof UserListComponent, typeof RolesListComponent, typeof SubscriptionsListComponent, typeof InviteUsersComponent, typeof SubscriptionProductDetailsComponent, typeof InsightComponent, typeof SubscriptionInsightNpsComponent, typeof SubscriptionInsightAveragePriceComponent, typeof SubscriptionInsightProcuctSessionComponent, typeof SubscriptionInsightUserSessionComponent, typeof SubscriptionInsightAverageUserComponent, typeof SubscriptionInsightRevenueComponent, typeof SubscriptionInsightChurnComponent, typeof ProductsListComponent, typeof ProductInsightComponent, typeof OnboardingStepsComponent, typeof OnboardingStepFormComponent, typeof ResourcesAdminIndexComponent, typeof ResourceAdminDetailsComponent, typeof TagDetailsComponent, typeof ResourcesIndexComponent, typeof ResourcesInsightComponent, typeof ResourcesListsInsightComponent, typeof NewslettersListComponent, typeof NewslettersItemsComponent, typeof NewsletterInsightComponent, typeof UserInsightComponent, typeof TagsCategoryComponent, typeof TagsListComponent, typeof TipsTabsComponent, typeof GenericMiscComponent, typeof GenericInsightComponent, typeof FaqTabsComponent, typeof ContactUsTabsComponent, typeof GeneralTabsComponent, typeof PermissionsListComponent, typeof PermissionsDetailsComponent, typeof PermissionsTabsComponent, typeof TermsOfServiceComponent, typeof TermsOfServiceTabsComponent, typeof TermsOfServiceDetailsComponent, typeof CredentialsComponent, typeof SubscriptionCredentialsComponent, typeof SubscriptionCredentialsDetailsComponent, typeof CredentialsDetailsComponent, typeof CredentialsTabComponent, typeof AmbassadorPayoutsTabsComponent, typeof AmbassadorPayoutsListComponent, typeof AmbassadorPayoutDetailsComponent, typeof OauthClientsTabsComponent, typeof OauthClientsComponent, typeof OauthClientsDetailsComponent, typeof AhoyEventsComponent, typeof TrackingComponent, typeof AhoyMessagesComponent, typeof AhoyVisitsComponent, typeof EventsComponent, typeof VersionsComponent, typeof UsersListForProductComponent, typeof NewsletterUsersListComponent, typeof GlobalConfigListComponent, typeof GlobalConfigDetailsComponent, typeof GlobalConfigTabsComponent, typeof SubscriptionProductsComponent, typeof SubscriptionUsersComponent, typeof AddMembersComponent, typeof SubscriptionAgentsListComponent, typeof SubscriptionInvoicesComponent, typeof SubscriptionInsightTabsComponent, typeof ContactUsListComponent, typeof IncidentListComponent, typeof IncidentTabsComponent, typeof AddEditIncidentComponent, typeof AddEditFaqComponent, typeof UsersInformationSidebarComponent], [typeof i115.TableModule, typeof i116.TooltipModule, typeof i117.AccordionModule, typeof i118.AutoCompleteModule, typeof i119.SelectModule, typeof i120.MultiSelectModule, typeof i121.InputTextModule, typeof i122.IconFieldModule, typeof i123.InputIconModule, typeof i124.AppLoaderModule, typeof i125.NgxDaterangepickerMd, typeof i126.NgxJsonViewerModule, typeof i127.DatePickerModule, typeof i128.PlotlyViaCDNModule, typeof i129.FileUploadModule, typeof i130.NgbTooltipModule, typeof i131.NgxUploaderModule, typeof i132.CommonModule, typeof i133.UiSwitchModule, typeof i134.SharedComponentsModule, typeof i134.CollapsibleSidebarTriggerDirective, typeof i135.NgxGpAutocompleteModule, typeof i136.CoreTranslocoModule, typeof i137.PipesModule, typeof KpiInsightPipe, typeof i139.DirectivesModule, typeof AdminRoutingModule, typeof i130.NgbModalModule, typeof i141.FormsModule, typeof i141.ReactiveFormsModule, typeof i142.NgxPaginationModule, typeof i130.NgbNavModule, typeof i130.NgbDatepickerModule, typeof i143.QuillModule], never>;
6013
6161
  static ɵinj: i0.ɵɵInjectorDeclaration<AdminModule>;
6014
6162
  }
6015
6163
  export declare class AdminGuardService {