@dereekb/dbx-firebase 13.2.2 → 13.3.0

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.
@@ -461,6 +461,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
461
461
  */
462
462
  const DBX_FIREBASE_LOGIN_TERMS_OF_SERVICE_URLS_CONFIG = new InjectionToken('DBX_FIREBASE_LOGIN_TERMS_OF_SERVICE_URLS_CONFIG');
463
463
 
464
+ /** Default terms of service display component with links to Terms and Privacy Policy URLs. */
464
465
  class DbxFirebaseLoginTermsSimpleComponent {
465
466
  dbxFirebaseLoginTermsConfig = inject(DBX_FIREBASE_LOGIN_TERMS_OF_SERVICE_URLS_CONFIG);
466
467
  tosAnchor = {
@@ -495,6 +496,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
495
496
  }]
496
497
  }] });
497
498
 
499
+ /** Default password config requiring a minimum of 6 characters (Firebase Auth minimum). */
498
500
  const DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG = {
499
501
  minLength: 6
500
502
  };
@@ -613,7 +615,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
613
615
  type: Injectable
614
616
  }], ctorParameters: () => [] });
615
617
 
618
+ /** Category for built-in login methods (email, phone, anonymous). */
616
619
  const DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY = 'default';
620
+ /** Category for OAuth-based login methods (Google, Facebook, etc.). */
617
621
  const OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY = 'oauth';
618
622
 
619
623
  /**
@@ -623,7 +627,9 @@ class DbxFirebaseLoginContext extends DbxInjectionContext {
623
627
  }
624
628
 
625
629
  /**
626
- * Login button and action.
630
+ * Renders a styled login button that triggers a login action handler on click.
631
+ *
632
+ * Displays a logo image or icon alongside the login text with configurable colors.
627
633
  */
628
634
  class DbxFirebaseLoginButtonComponent {
629
635
  config = model(null, ...(ngDevMode ? [{ debugName: "config" }] : []));
@@ -696,6 +702,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
696
702
  changeDetection: ChangeDetectionStrategy.OnPush
697
703
  }]
698
704
  }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }, { type: i0.Output, args: ["configChange"] }] } });
705
+ /** Container component that wraps login button content with consistent spacing. */
699
706
  class DbxFirebaseLoginButtonContainerComponent {
700
707
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DbxFirebaseLoginButtonContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
701
708
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: DbxFirebaseLoginButtonContainerComponent, isStandalone: true, selector: "dbx-firebase-login-button-container", ngImport: i0, template: `
@@ -716,16 +723,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
716
723
  standalone: true
717
724
  }]
718
725
  }] });
726
+ /** Default template for configured login button components. */
719
727
  const DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE = `
720
728
  <dbx-firebase-login-button-container>
721
729
  <dbx-firebase-login-button [config]="configSignal()"></dbx-firebase-login-button>
722
730
  </dbx-firebase-login-button-container>
723
731
  `;
732
+ /** Shared component configuration for OAuth-style login button components. */
724
733
  const DBX_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_COMPONENT_CONFIGURATION = {
725
734
  template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE,
726
735
  imports: [DbxFirebaseLoginButtonComponent, DbxFirebaseLoginButtonContainerComponent],
727
736
  changeDetection: ChangeDetectionStrategy.OnPush
728
737
  };
738
+ /**
739
+ * Abstract base directive for login provider buttons that auto-configures appearance
740
+ * from the registered provider assets and delegates login handling to subclasses.
741
+ */
729
742
  class AbstractConfiguredDbxFirebaseLoginButtonDirective {
730
743
  dbxFirebaseAuthService = inject(DbxFirebaseAuthService);
731
744
  dbxFirebaseAuthLoginService = inject(DbxFirebaseAuthLoginService);
@@ -760,6 +773,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
760
773
  type: Directive
761
774
  }] });
762
775
 
776
+ /** Login button component for anonymous (guest) authentication. */
763
777
  class DbxFirebaseLoginAnonymousComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {
764
778
  loginProvider = 'anonymous';
765
779
  handleLogin() {
@@ -779,6 +793,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
779
793
  }]
780
794
  }] });
781
795
 
796
+ /** Formly-based form component for password recovery, containing a single email field. */
782
797
  class DbxFirebaseEmailRecoveryFormComponent extends AbstractSyncFormlyFormDirective {
783
798
  fields = [emailField({ required: true })];
784
799
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DbxFirebaseEmailRecoveryFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
@@ -796,6 +811,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
796
811
  }]
797
812
  }] });
798
813
 
814
+ /**
815
+ * Formly-based email/password login form that adapts fields based on login vs. register mode.
816
+ *
817
+ * In register mode, includes a password verification field.
818
+ */
799
819
  class DbxFirebaseEmailFormComponent extends AbstractConfigAsyncFormlyFormDirective {
800
820
  fields$ = this.currentConfig$.pipe(map((config) => {
801
821
  const loginMode = config?.loginMode ?? 'login';
@@ -818,6 +838,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
818
838
  }]
819
839
  }] });
820
840
 
841
+ /**
842
+ * Full email login/registration flow component with login form, password recovery, and recovery confirmation states.
843
+ *
844
+ * Opened via the {@link DbxFirebaseLoginContext} injection context from the email login button.
845
+ */
821
846
  class DbxFirebaseLoginEmailContentComponent {
822
847
  dbxFirebaseAuthService = inject(DbxFirebaseAuthService);
823
848
  config = inject(DBX_INJECTION_COMPONENT_DATA);
@@ -906,6 +931,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
906
931
  args: [{ imports: [NgTemplateOutlet, DbxErrorComponent, DbxLinkComponent, DbxActionErrorDirective, DbxActionFormDirective, MatButtonModule, DbxActionModule, DbxButtonComponent, DbxButtonSpacerDirective, DbxFirebaseEmailFormComponent, DbxFirebaseEmailRecoveryFormComponent, DbxFormSourceDirective], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<div class=\"dbx-firebase-login-email-content\">\n @switch (emailModeSignal()) {\n @case ('login') {\n <ng-container *ngTemplateOutlet=\"loginView\"></ng-container>\n }\n @case ('recover') {\n <ng-container *ngTemplateOutlet=\"resetPassword\"></ng-container>\n }\n @case ('recoversent') {\n <ng-container *ngTemplateOutlet=\"resetPasswordSent\"></ng-container>\n }\n }\n</div>\n\n<!-- Login View -->\n<ng-template #loginView>\n <ng-container dbxAction [dbxActionHandler]=\"handleLoginAction\">\n <dbx-firebase-email-form [config]=\"formConfig\" dbxActionForm [dbxFormSource]=\"emailFormValueSignal()\"></dbx-firebase-email-form>\n @if (isLoginMode) {\n <div class=\"dbx-firebase-login-email-forgot-prompt\">\n <dbx-link [anchor]=\"forgotAnchor\">Forgot Password?</dbx-link>\n </div>\n }\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-button-wide\" [text]=\"buttonText\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancel()\">Cancel</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </ng-container>\n</ng-template>\n\n<!-- Reset Password View -->\n<ng-template #resetPassword>\n <div class=\"dbx-firebase-login-email-content-recovery\" dbxAction [dbxActionHandler]=\"handleRecoveryAction\" [dbxActionSuccessHandler]=\"handleRecoverySuccess\">\n <dbx-firebase-email-recovery-form dbxActionForm [dbxFormSource]=\"recoveryFormValueSignal()\"></dbx-firebase-email-recovery-form>\n <p class=\"dbx-hint\">An email will be sent to the above address to help you reset your password.</p>\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-button-wide\" text=\"Send Recovery Email\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancelReset()\">Cancel Recovery</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </div>\n</ng-template>\n\n<!-- Reset Password Sent -->\n<ng-template #resetPasswordSent>\n <div class=\"dbx-firebase-login-email-content-recovery-sent\">\n <p class=\"dbx-hint\">A recovery email was sent to the specified address. Please check your email for next steps.</p>\n <button mat-raised-button (click)=\"clickedRecoveryAcknowledged()\">Ok</button>\n </div>\n</ng-template>\n" }]
907
932
  }] });
908
933
 
934
+ /** Login button component for email/password authentication. Opens the email login context on click. */
909
935
  class DbxFirebaseLoginEmailComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {
910
936
  loginProvider = 'email';
911
937
  handleLogin() {
@@ -925,6 +951,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
925
951
  }]
926
952
  }] });
927
953
 
954
+ /** Login button component for Facebook OAuth authentication. */
928
955
  class DbxFirebaseLoginFacebookComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {
929
956
  loginProvider = 'facebook';
930
957
  handleLogin() {
@@ -944,6 +971,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
944
971
  }]
945
972
  }] });
946
973
 
974
+ /** Login button component for GitHub OAuth authentication. */
947
975
  class DbxFirebaseLoginGitHubComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {
948
976
  loginProvider = 'github';
949
977
  handleLogin() {
@@ -963,6 +991,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
963
991
  }]
964
992
  }] });
965
993
 
994
+ /** Login button component for Google OAuth authentication. */
966
995
  class DbxFirebaseLoginGoogleComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {
967
996
  loginProvider = 'google';
968
997
  handleLogin() {
@@ -982,6 +1011,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
982
1011
  }]
983
1012
  }] });
984
1013
 
1014
+ /** Login button component for Twitter OAuth authentication. */
985
1015
  class DbxFirebaseLoginTwitterComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {
986
1016
  loginProvider = 'twitter';
987
1017
  handleLogin() {
@@ -1001,6 +1031,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1001
1031
  }]
1002
1032
  }] });
1003
1033
 
1034
+ /** Registration button component for email/password. Opens the email login context in register mode. */
1004
1035
  class DbxFirebaseRegisterEmailComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {
1005
1036
  loginProvider = 'email';
1006
1037
  handleLogin() {
@@ -1168,6 +1199,7 @@ function provideDbxFirebaseLogin(config) {
1168
1199
  return makeEnvironmentProviders(providers);
1169
1200
  }
1170
1201
 
1202
+ /** Login button component for Apple OAuth authentication. */
1171
1203
  class DbxFirebaseLoginAppleComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {
1172
1204
  loginProvider = 'apple';
1173
1205
  handleLogin() {
@@ -1188,7 +1220,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1188
1220
  }] });
1189
1221
 
1190
1222
  /**
1191
- * Pre-configured login component that displays all configured login types.
1223
+ * Renders a list of login provider buttons, filtered by enabled types and categories.
1224
+ *
1225
+ * Switches between login and registration component classes based on the current login mode.
1192
1226
  */
1193
1227
  class DbxFirebaseLoginListComponent {
1194
1228
  dbxFirebaseAuthLoginService = inject(DbxFirebaseAuthLoginService);
@@ -1254,7 +1288,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1254
1288
  }], propDecorators: { loginMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "loginMode", required: false }] }], providerTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "providerTypes", required: false }] }], omitProviderTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "omitProviderTypes", required: false }] }], providerCategories: [{ type: i0.Input, args: [{ isSignal: true, alias: "providerCategories", required: false }] }] } });
1255
1289
 
1256
1290
  /**
1257
- * DbxFirebaseLoginContext implementation.
1291
+ * Directive providing a {@link DbxFirebaseLoginContext} for login component injection.
1292
+ *
1293
+ * Apply to a host element to establish a login context scope for child login components.
1258
1294
  */
1259
1295
  class DbxFirebaseLoginContextDirective extends AbstractForwardDbxInjectionContextDirective {
1260
1296
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DbxFirebaseLoginContextDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
@@ -1313,6 +1349,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1313
1349
  }]
1314
1350
  }], propDecorators: { loginMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "loginMode", required: false }] }], providerTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "providerTypes", required: false }] }], omitProviderTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "omitProviderTypes", required: false }] }], providerCategories: [{ type: i0.Input, args: [{ isSignal: true, alias: "providerCategories", required: false }] }] } });
1315
1351
 
1352
+ /** Navigation component that allows users to return to the login method selection list. */
1316
1353
  class DbxFirebaseLoginContextBackButtonComponent {
1317
1354
  cancelLogin = output();
1318
1355
  anchor = {
@@ -1335,6 +1372,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1335
1372
  }]
1336
1373
  }], propDecorators: { cancelLogin: [{ type: i0.Output, args: ["cancelLogin"] }] } });
1337
1374
 
1375
+ /** Login button component for Microsoft OAuth authentication. */
1338
1376
  class DbxFirebaseLoginMicrosoftComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {
1339
1377
  loginProvider = 'microsoft';
1340
1378
  handleLogin() {
@@ -1354,6 +1392,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
1354
1392
  }]
1355
1393
  }] });
1356
1394
 
1395
+ /** Renders the configured terms of service component via dynamic injection from the login service. */
1357
1396
  class DbxFirebaseLoginTermsComponent {
1358
1397
  dbxFirebaseAuthLoginService = inject(DbxFirebaseAuthLoginService);
1359
1398
  config = {
@@ -3369,6 +3408,10 @@ function dbxFirebaseModelEntityWidgetInjectionConfigFactory(injector) {
3369
3408
  };
3370
3409
  }
3371
3410
 
3411
+ /**
3412
+ * Renders a single model entity as an expansion panel with display info, widget injection,
3413
+ * and loading state from the entity's document store.
3414
+ */
3372
3415
  class DbxFirebaseModelEntitiesEntityComponent {
3373
3416
  widgetInjectionConfigFactory = dbxFirebaseModelEntityWidgetInjectionConfigFactory();
3374
3417
  entitiesWidgetService = inject(DbxFirebaseModelEntitiesWidgetService);
@@ -3431,6 +3474,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
3431
3474
  args: [{ selector: 'dbx-firebase-model-entities-entity', imports: [DbxInjectionComponent, DbxLoadingComponent, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelContent, MatIcon], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n @if (displayInfoSignal(); as displayInfo) {\n <div class=\"dbx-list-two-line-item\">\n <div class=\"item-left\">\n <span class=\"dbx-pb2 dbx-flex-bar\">\n @if (displayInfo.icon) {\n <mat-icon class=\"dbx-button-spacer\">{{ displayInfo.icon }}</mat-icon>\n }\n <span>{{ displayInfo.title }}</span>\n </span>\n <span>\n <span class=\"dbx-hint dbx-small\">{{ modelTypeSignal() }}</span>\n @if (displayNameSignal(); as displayName) {\n <span class=\"dbx-small dbx-u dbx-pl2\">{{ displayName }}</span>\n }\n </span>\n </div>\n </div>\n }\n </mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div class=\"dbx-firebase-model-entities-entity-panel-content\">\n <dbx-loading [context]=\"loadingContext\">\n @if (entityWidgetConfigSignal(); as config) {\n <div class=\"dbx-pb3 dbx-firebase-model-entities-entity-content\">\n <dbx-injection [config]=\"config\"></dbx-injection>\n </div>\n }\n @if (commonWidgetConfigSignal(); as config) {\n <div class=\"dbx-pb3 dbx-firebase-model-entities-common-content\">\n <dbx-injection [config]=\"config\"></dbx-injection>\n </div>\n }\n @if (debugWidgetConfigSignal(); as config) {\n <div class=\"dbx-pb3 dbx-firebase-model-entities-debug-content\">\n <dbx-injection [config]=\"config\"></dbx-injection>\n </div>\n }\n </dbx-loading>\n </div>\n </ng-template>\n</mat-expansion-panel>\n" }]
3432
3475
  }], propDecorators: { entity: [{ type: i0.Input, args: [{ isSignal: true, alias: "entity", required: true }] }] } });
3433
3476
 
3477
+ /**
3478
+ * Renders a list of model entities as an expandable accordion.
3479
+ *
3480
+ * Groups entities by registration status (registered vs unregistered) and sorts
3481
+ * by widget priority. Supports toggling visibility of unregistered entity types.
3482
+ */
3434
3483
  class DbxFirebaseModelEntitiesComponent {
3435
3484
  entitiesWidgetService = inject(DbxFirebaseModelEntitiesWidgetService);
3436
3485
  /**
@@ -3541,6 +3590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
3541
3590
  }], propDecorators: { multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }], onlyShowRegisteredTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "onlyShowRegisteredTypes", required: false }] }], entities: [{ type: i0.Input, args: [{ isSignal: true, alias: "entities", required: false }] }] } });
3542
3591
 
3543
3592
  const DEFAULT_DBX_FIREBASE_MODEL_ENTITIES_COMPONENT_POPOVER_KEY = 'entities';
3593
+ /** Popover component that displays model entities in a scrollable panel with configurable header and empty text. */
3544
3594
  class DbxFirebaseModelEntitiesPopoverComponent extends AbstractPopoverDirective {
3545
3595
  entities$ = this.popover.data?.entities$;
3546
3596
  static openPopover(popupService, config, popoverKey) {
@@ -3578,6 +3628,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
3578
3628
  args: [{ imports: [DbxPopoverContentComponent, DbxPopoverHeaderComponent, DbxPopoverScrollContentDirective, DbxFirebaseModelEntitiesComponent], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<dbx-popover-content>\n <!-- Header -->\n <dbx-popover-header [icon]=\"icon\" [header]=\"header\"></dbx-popover-header>\n <!-- Content -->\n <dbx-popover-scroll-content>\n <dbx-firebase-model-entities [entities]=\"entities$\" [onlyShowRegisteredTypes]=\"onlyShowRegisteredTypes\">\n <p empty>{{ emptyText }}</p>\n </dbx-firebase-model-entities>\n </dbx-popover-scroll-content>\n</dbx-popover-content>\n" }]
3579
3629
  }] });
3580
3630
 
3631
+ /** Button component that opens an entities popover showing model entities from the injected source. */
3581
3632
  class DbxFirebaseModelEntitiesPopoverButtonComponent extends AbstractPopoverRefDirective {
3582
3633
  _dbxPopoverService = inject(DbxPopoverService);
3583
3634
  entitiesSource = inject(DbxFirebaseModelEntitiesSource);
@@ -3720,6 +3771,10 @@ function removeStore(state, store) {
3720
3771
  return nextState;
3721
3772
  }
3722
3773
 
3774
+ /**
3775
+ * Factory that creates a {@link DbxFirebaseModelEntitiesSource} from a {@link DbxFirebaseDocumentStoreContextStore},
3776
+ * mapping its entries into model entities grouped by identity.
3777
+ */
3723
3778
  const dbxFirebaseDocumentStoreContextModelEntitiesSourceFactory = (storeContextStore) => {
3724
3779
  const entities$ = storeContextStore.entriesGroupedByIdentity$.pipe(map((entries) => entries.map((entry) => ({ store: entry.store, modelIdentity: entry.modelIdentity }))));
3725
3780
  const source = {
@@ -3727,6 +3782,7 @@ const dbxFirebaseDocumentStoreContextModelEntitiesSourceFactory = (storeContextS
3727
3782
  };
3728
3783
  return source;
3729
3784
  };
3785
+ /** Directive that provides a {@link DbxFirebaseModelEntitiesSource} from the current document store context. */
3730
3786
  class DbxFirebaseDocumentStoreContextModelEntitiesSourceDirective {
3731
3787
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DbxFirebaseDocumentStoreContextModelEntitiesSourceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3732
3788
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: DbxFirebaseDocumentStoreContextModelEntitiesSourceDirective, isStandalone: true, selector: "[dbxFirebaseDocumentStoreContextModelEntitiesSource]", providers: [
@@ -3803,7 +3859,7 @@ class DbxFirebaseModelKeyComponent {
3803
3859
  sref$ = this.modelTypeInstance$.pipe(switchMap((x) => x?.segueRef$ ?? of(undefined)));
3804
3860
  srefSignal = toSignal(this.sref$);
3805
3861
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DbxFirebaseModelKeyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3806
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: DbxFirebaseModelKeyComponent, isStandalone: true, selector: "dbx-firebase-model-key", inputs: { modelKey: { classPropertyName: "modelKey", publicName: "modelKey", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"dbx-firebase-model-key\">\n @if (modelKey(); as key) {\n <!-- Key Data -->\n <dbx-detail-block icon=\"key\" header=\"Model Key\">\n <dbx-click-to-copy-text [highlighted]=\"true\" class=\"dbx-block\">{{ key }}</dbx-click-to-copy-text>\n <dbx-click-to-copy-text [highlighted]=\"true\" class=\"dbx-block\">{{ modelKeyIdSignal() }}</dbx-click-to-copy-text>\n <dbx-click-to-copy-text [highlighted]=\"true\" class=\"dbx-block\" [copyText]=\"oneWayFlatModelKeySignal()\">(Flat) {{ oneWayFlatModelKeySignal() }}</dbx-click-to-copy-text>\n <dbx-click-to-copy-text [highlighted]=\"true\" class=\"dbx-block\" [copyText]=\"twoWayFlatModelKeySignal()\">(Encoded Flat) {{ twoWayFlatModelKeySignal() }}</dbx-click-to-copy-text>\n </dbx-detail-block>\n\n <!-- Type Info -->\n @if (typeInfoSignal(); as typeInfo) {\n <!-- Model Meta Data -->\n <div>\n <dbx-detail-block [icon]=\"typeInfo.icon\" header=\"Model Type\">\n <dbx-click-to-copy-text class=\"dbx-block\">{{ typeInfo.modelType }}</dbx-click-to-copy-text>\n @if (typeInfo.icon) {\n <dbx-click-to-copy-text [copyText]=\"typeInfo.icon\" class=\"dbx-block\">\n Icon:\n <span class=\"dbx-u\">{{ typeInfo.icon }}</span>\n </dbx-click-to-copy-text>\n } @else {\n <span class=\"dbx-notice\">No Icon For Type</span>\n }\n </dbx-detail-block>\n <dbx-detail-block icon=\"dataset\" header=\"Collection Name\">\n <dbx-click-to-copy-text class=\"dbx-block\">{{ typeInfo.identity.collectionName }}</dbx-click-to-copy-text>\n </dbx-detail-block>\n </div>\n\n <!-- Segue Info -->\n @if (typeCanSegueToView()) {\n <dbx-detail-block icon=\"arrow_forward\" header=\"Segue To View\">\n <div class=\"dbx-hint dbx-small\">This model has a unique view within the app.</div>\n <dbx-anchor [anchor]=\"srefSignal()\"><dbx-button text=\"Go To View\"></dbx-button></dbx-anchor>\n </dbx-detail-block>\n } @else {\n <dbx-detail-block class=\"dbx-warn\" icon=\"warning\" header=\"No Segue View\">\n <span>This type provides no information for segue directly.</span>\n </dbx-detail-block>\n }\n } @else {\n <dbx-detail-block class=\"dbx-warn\" icon=\"warning\" header=\"No Type Info\">\n <span>There is no type info registered for this model type.</span>\n </dbx-detail-block>\n }\n } @else {\n <div class=\"dbx-firebase-model-key-empty\">No model key provided</div>\n }\n</div>\n", dependencies: [{ kind: "component", type: DbxDetailBlockComponent, selector: "dbx-detail-block", inputs: ["icon", "header", "alignHeader", "bigHeader"] }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "tonal", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "component", type: DbxClickToCopyTextComponent, selector: "dbx-click-to-copy-text", inputs: ["copyText", "highlighted", "clipboardSnackbarMessagesConfig", "clipboardSnackbarMessagesEnabled", "clickToCopyIcon", "clickIconToCopyOnly"] }, { kind: "component", type: DbxAnchorComponent, selector: "dbx-anchor, [dbx-anchor]", inputs: ["block"] }] });
3862
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: DbxFirebaseModelKeyComponent, isStandalone: true, selector: "dbx-firebase-model-key", inputs: { modelKey: { classPropertyName: "modelKey", publicName: "modelKey", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"dbx-firebase-model-key\">\n @if (modelKey(); as key) {\n <!-- Key Data -->\n <dbx-detail-block icon=\"key\" header=\"Model Key\">\n <dbx-click-to-copy-text [highlighted]=\"true\" class=\"dbx-block\">{{ key }}</dbx-click-to-copy-text>\n <dbx-click-to-copy-text [highlighted]=\"true\" class=\"dbx-block\">{{ modelKeyIdSignal() }}</dbx-click-to-copy-text>\n <dbx-click-to-copy-text [highlighted]=\"true\" class=\"dbx-block\" [copyText]=\"oneWayFlatModelKeySignal()\">(Flat) {{ oneWayFlatModelKeySignal() }}</dbx-click-to-copy-text>\n <dbx-click-to-copy-text [highlighted]=\"true\" class=\"dbx-block\" [copyText]=\"twoWayFlatModelKeySignal()\">(Encoded Flat) {{ twoWayFlatModelKeySignal() }}</dbx-click-to-copy-text>\n </dbx-detail-block>\n\n <!-- Type Info -->\n @if (typeInfoSignal(); as typeInfo) {\n <!-- Model Meta Data -->\n <div>\n <dbx-detail-block [icon]=\"typeInfo.icon\" header=\"Model Type\">\n <dbx-click-to-copy-text class=\"dbx-block\">{{ typeInfo.modelType }}</dbx-click-to-copy-text>\n @if (typeInfo.icon) {\n <dbx-click-to-copy-text [copyText]=\"typeInfo.icon\" class=\"dbx-block\">\n Icon:\n <span class=\"dbx-u\">{{ typeInfo.icon }}</span>\n </dbx-click-to-copy-text>\n } @else {\n <span class=\"dbx-notice\">No Icon For Type</span>\n }\n </dbx-detail-block>\n <dbx-detail-block icon=\"dataset\" header=\"Collection Name\">\n <dbx-click-to-copy-text class=\"dbx-block\">{{ typeInfo.identity.collectionName }}</dbx-click-to-copy-text>\n </dbx-detail-block>\n </div>\n\n <!-- Segue Info -->\n @if (typeCanSegueToView()) {\n <dbx-detail-block icon=\"arrow_forward\" header=\"Segue To View\">\n <div class=\"dbx-hint dbx-small\">This model has a unique view within the app.</div>\n <dbx-anchor [anchor]=\"srefSignal()\"><dbx-button text=\"Go To View\"></dbx-button></dbx-anchor>\n </dbx-detail-block>\n } @else {\n <dbx-detail-block class=\"dbx-warn\" icon=\"warning\" header=\"No Segue View\">\n <span>This type provides no information for segue directly.</span>\n </dbx-detail-block>\n }\n } @else {\n <dbx-detail-block class=\"dbx-warn\" icon=\"warning\" header=\"No Type Info\">\n <span>There is no type info registered for this model type.</span>\n </dbx-detail-block>\n }\n } @else {\n <div class=\"dbx-firebase-model-key-empty\">No model key provided</div>\n }\n</div>\n", dependencies: [{ kind: "component", type: DbxDetailBlockComponent, selector: "dbx-detail-block", inputs: ["icon", "header", "alignHeader", "bigHeader"] }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "tonal", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "component", type: DbxClickToCopyTextComponent, selector: "dbx-click-to-copy-text", inputs: ["copyText", "showIcon", "highlighted", "clipboardSnackbarMessagesConfig", "clipboardSnackbarMessagesEnabled", "clickToCopyIcon", "clickIconToCopyOnly"] }, { kind: "component", type: DbxAnchorComponent, selector: "dbx-anchor, [dbx-anchor]", inputs: ["block"] }] });
3807
3863
  }
3808
3864
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DbxFirebaseModelKeyComponent, decorators: [{
3809
3865
  type: Component,
@@ -4565,15 +4621,17 @@ AbstractRootSingleItemDbxFirebaseDocument = __decorate([
4565
4621
  *
4566
4622
  * @param store
4567
4623
  * @param fn
4624
+ * @param config - Optional config with an `onResult` callback.
4568
4625
  * @returns
4569
4626
  */
4570
- function firebaseDocumentStoreCreateFunction(store, fn) {
4627
+ function firebaseDocumentStoreCreateFunction(store, fn, config) {
4571
4628
  return (params) => loadingStateFromObs(lazyFrom(() => fn(params).then((result) => {
4572
4629
  const modelKeys = result.modelKeys;
4573
4630
  const firstKey = firstValue(modelKeys);
4574
4631
  if (firstKey) {
4575
4632
  store.setKey(firstKey);
4576
4633
  }
4634
+ config?.onResult?.(params, result);
4577
4635
  return result;
4578
4636
  })));
4579
4637
  }
@@ -4611,10 +4669,13 @@ function firebaseDocumentStoreReadFunction(store, fn) {
4611
4669
  * @param fn
4612
4670
  * @returns
4613
4671
  */
4614
- function firebaseDocumentStoreUpdateFunction(store, fn) {
4672
+ function firebaseDocumentStoreUpdateFunction(store, fn, config) {
4615
4673
  return (params) => loadingStateFromObs(store.key$.pipe(first(), exhaustMap((key) => fn({
4616
4674
  ...params,
4617
4675
  key // inject key into the parameters.
4676
+ }).then((result) => {
4677
+ config?.onResult?.(params, result);
4678
+ return result;
4618
4679
  })), shareReplay(1)));
4619
4680
  }
4620
4681
  // MARK: Delete
@@ -4875,6 +4936,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
4875
4936
  }]
4876
4937
  }] });
4877
4938
 
4939
+ /** Collection store for querying SystemState documents. */
4878
4940
  class SystemStateCollectionStore extends AbstractDbxFirebaseCollectionStore {
4879
4941
  constructor() {
4880
4942
  super({ firestoreCollection: inject(SystemStateFirestoreCollections).systemStateCollection });
@@ -4886,6 +4948,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
4886
4948
  type: Injectable
4887
4949
  }], ctorParameters: () => [] });
4888
4950
 
4951
+ /** Directive providing a {@link SystemStateCollectionStore} for querying system state documents. */
4889
4952
  class DbxFirebaseSystemStateCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective {
4890
4953
  constructor() {
4891
4954
  super(inject(SystemStateCollectionStore));
@@ -4901,6 +4964,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
4901
4964
  }]
4902
4965
  }], ctorParameters: () => [] });
4903
4966
 
4967
+ /** Document store for a single typed SystemState document. */
4904
4968
  class SystemStateDocumentStore extends AbstractDbxFirebaseDocumentStore {
4905
4969
  constructor() {
4906
4970
  super({ firestoreCollection: inject(SystemStateFirestoreCollections).systemStateCollection });
@@ -4938,6 +5002,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
4938
5002
  type: Optional
4939
5003
  }] }] });
4940
5004
 
5005
+ /** Directive providing a {@link SystemStateDocumentStore} for accessing a single system state document. */
4941
5006
  class DbxFirebaseSystemStateDocumentStoreDirective extends DbxFirebaseDocumentStoreDirective {
4942
5007
  constructor() {
4943
5008
  super(inject((SystemStateDocumentStore)));
@@ -4990,6 +5055,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
4990
5055
  type: Injectable
4991
5056
  }] });
4992
5057
 
5058
+ /** Selection list wrapper for notification items with view-only default selection mode. */
4993
5059
  class DbxFirebaseNotificationItemListComponent extends AbstractDbxSelectionListWrapperDirective {
4994
5060
  constructor() {
4995
5061
  super({
@@ -5011,6 +5077,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5011
5077
  standalone: true
5012
5078
  }]
5013
5079
  }], ctorParameters: () => [] });
5080
+ /** List view component that renders notification items using the selection list pattern. */
5014
5081
  class DbxFirebaseNotificationItemListViewComponent extends AbstractDbxSelectionListViewDirective {
5015
5082
  config = {
5016
5083
  componentClass: DbxFirebaseNotificationItemListViewItemComponent,
@@ -5030,6 +5097,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5030
5097
  standalone: true
5031
5098
  }]
5032
5099
  }] });
5100
+ /** Individual list view item component rendering a notification's subject, message, and date. */
5033
5101
  class DbxFirebaseNotificationItemListViewItemComponent extends AbstractDbxValueListViewItemComponent {
5034
5102
  dbxFirebaseNotificationTemplateService = inject(DbxFirebaseNotificationTemplateService);
5035
5103
  pairGetter = cachedGetter(() => this.dbxFirebaseNotificationTemplateService.notificationItemSubjectMessagePairForNotificationSummaryItem(this.itemValue));
@@ -5071,6 +5139,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5071
5139
  }]
5072
5140
  }] });
5073
5141
 
5142
+ /** Presentational component for notification item content, displaying subject, message, and date. */
5074
5143
  class DbxFirebaseNotificationItemContentComponent {
5075
5144
  subject = input(...(ngDevMode ? [undefined, { debugName: "subject" }] : []));
5076
5145
  message = input(...(ngDevMode ? [undefined, { debugName: "message" }] : []));
@@ -5144,6 +5213,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5144
5213
  type: Injectable
5145
5214
  }] });
5146
5215
 
5216
+ /**
5217
+ * Renders a notification item using the widget system, resolving the appropriate
5218
+ * display component based on the notification's template type.
5219
+ */
5147
5220
  class DbxFirebaseNotificationItemViewComponent {
5148
5221
  item = input(...(ngDevMode ? [undefined, { debugName: "item" }] : []));
5149
5222
  configSignal = computed(() => {
@@ -5177,6 +5250,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5177
5250
  }]
5178
5251
  }], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: false }] }] } });
5179
5252
 
5253
+ /**
5254
+ * Abstract base directive for notification item widget display components.
5255
+ *
5256
+ * Provides typed access to the {@link NotificationItem} data for custom rendering.
5257
+ */
5180
5258
  class AbstractDbxFirebaseNotificationItemWidgetComponent extends AbstractDbxWidgetComponent {
5181
5259
  get notificationItem() {
5182
5260
  return this.data;
@@ -5188,6 +5266,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5188
5266
  type: Directive
5189
5267
  }] });
5190
5268
 
5269
+ /** Default notification item view component that renders subject, message, and creation date. */
5191
5270
  class DbxFirebaseNotificationItemDefaultViewComponent extends AbstractDbxFirebaseNotificationItemWidgetComponent {
5192
5271
  get subject() {
5193
5272
  return this.notificationItem.s;
@@ -5309,6 +5388,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5309
5388
  }]
5310
5389
  }], propDecorators: { buttonElement: [{ type: i0.ViewChild, args: ['button', { ...{ read: ElementRef }, isSignal: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }] } });
5311
5390
 
5391
+ /** Document store for a single NotificationBox, providing derived observables for creation date, recipients, and update functions. */
5312
5392
  class NotificationBoxDocumentStore extends AbstractDbxFirebaseDocumentStore {
5313
5393
  notificationFunctions = inject(NotificationFunctions);
5314
5394
  constructor() {
@@ -5325,6 +5405,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5325
5405
  type: Injectable
5326
5406
  }], ctorParameters: () => [] });
5327
5407
 
5408
+ /** Document store for a single Notification, providing derived observables for creation date, send state, and update functions. */
5328
5409
  class NotificationDocumentStore extends AbstractDbxFirebaseDocumentWithParentStore {
5329
5410
  notificationFunctions = inject(NotificationFunctions);
5330
5411
  constructor() {
@@ -5347,6 +5428,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5347
5428
  type: Injectable
5348
5429
  }], ctorParameters: () => [] });
5349
5430
 
5431
+ /** Directive providing a {@link NotificationDocumentStore} for accessing a single notification document. */
5350
5432
  class DbxFirebaseNotificationDocumentStoreDirective extends DbxFirebaseDocumentStoreDirective {
5351
5433
  constructor() {
5352
5434
  super(inject(NotificationDocumentStore));
@@ -5363,6 +5445,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5363
5445
  }]
5364
5446
  }], ctorParameters: () => [] });
5365
5447
 
5448
+ /** Collection store for Notification documents, scoped to a parent NotificationBox when available. */
5366
5449
  class NotificationCollectionStore extends AbstractDbxFirebaseCollectionWithParentStore {
5367
5450
  constructor() {
5368
5451
  super({ collectionFactory: inject(NotificationFirestoreCollections).notificationCollectionFactory, collectionGroup: inject(NotificationFirestoreCollections).notificationCollectionGroup });
@@ -5378,6 +5461,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5378
5461
  type: Injectable
5379
5462
  }], ctorParameters: () => [] });
5380
5463
 
5464
+ /** Directive providing a {@link NotificationCollectionStore} for querying notifications within a template. */
5381
5465
  class DbxFirebaseNotificationCollectionStoreDirective extends DbxFirebaseCollectionWithParentStoreDirective {
5382
5466
  constructor() {
5383
5467
  super(inject(NotificationCollectionStore));
@@ -5394,6 +5478,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5394
5478
  }]
5395
5479
  }], ctorParameters: () => [] });
5396
5480
 
5481
+ /** Directive providing a {@link NotificationBoxDocumentStore} for accessing a single notification box document. */
5397
5482
  class DbxFirebaseNotificationBoxDocumentStoreDirective extends DbxFirebaseDocumentStoreDirective {
5398
5483
  constructor() {
5399
5484
  super(inject(NotificationBoxDocumentStore));
@@ -5410,6 +5495,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5410
5495
  }]
5411
5496
  }], ctorParameters: () => [] });
5412
5497
 
5498
+ /** Collection store for querying NotificationBox documents. */
5413
5499
  class NotificationBoxCollectionStore extends AbstractDbxFirebaseCollectionStore {
5414
5500
  constructor() {
5415
5501
  super({ firestoreCollection: inject(NotificationFirestoreCollections).notificationBoxCollection });
@@ -5421,6 +5507,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5421
5507
  type: Injectable
5422
5508
  }], ctorParameters: () => [] });
5423
5509
 
5510
+ /** Directive providing a {@link NotificationBoxCollectionStore} for querying notification boxes. */
5424
5511
  class DbxFirebaseNotificationBoxCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective {
5425
5512
  constructor() {
5426
5513
  super(inject(NotificationBoxCollectionStore));
@@ -5437,6 +5524,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5437
5524
  }]
5438
5525
  }], ctorParameters: () => [] });
5439
5526
 
5527
+ /** Collection store for querying NotificationSummary documents. */
5440
5528
  class NotificationSummaryCollectionStore extends AbstractDbxFirebaseCollectionStore {
5441
5529
  constructor() {
5442
5530
  super({ firestoreCollection: inject(NotificationFirestoreCollections).notificationSummaryCollection });
@@ -5448,6 +5536,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5448
5536
  type: Injectable
5449
5537
  }], ctorParameters: () => [] });
5450
5538
 
5539
+ /** Directive providing a {@link NotificationSummaryCollectionStore} for querying notification summaries. */
5451
5540
  class DbxFirebaseNotificationSummaryCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective {
5452
5541
  constructor() {
5453
5542
  super(inject(NotificationSummaryCollectionStore));
@@ -5464,6 +5553,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5464
5553
  }]
5465
5554
  }], ctorParameters: () => [] });
5466
5555
 
5556
+ /** Document store for a single NotificationSummary, providing derived observables for items, timestamps, sync state, and update functions. */
5467
5557
  class NotificationSummaryDocumentStore extends AbstractDbxFirebaseDocumentStore {
5468
5558
  notificationFunctions = inject(NotificationFunctions);
5469
5559
  constructor() {
@@ -5491,6 +5581,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5491
5581
  type: Injectable
5492
5582
  }], ctorParameters: () => [] });
5493
5583
 
5584
+ /** Directive providing a {@link NotificationSummaryDocumentStore} for accessing a single notification summary. */
5494
5585
  class DbxFirebaseNotificationSummaryDocumentStoreDirective extends DbxFirebaseDocumentStoreDirective {
5495
5586
  constructor() {
5496
5587
  super(inject(NotificationSummaryDocumentStore));
@@ -5507,6 +5598,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5507
5598
  }]
5508
5599
  }], ctorParameters: () => [] });
5509
5600
 
5601
+ /** Collection store for querying NotificationUser documents. */
5510
5602
  class NotificationUserCollectionStore extends AbstractDbxFirebaseCollectionStore {
5511
5603
  constructor() {
5512
5604
  super({ firestoreCollection: inject(NotificationFirestoreCollections).notificationUserCollection });
@@ -5518,6 +5610,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5518
5610
  type: Injectable
5519
5611
  }], ctorParameters: () => [] });
5520
5612
 
5613
+ /** Directive providing a {@link NotificationUserCollectionStore} for querying notification user documents. */
5521
5614
  class DbxFirebaseNotificationUserCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective {
5522
5615
  constructor() {
5523
5616
  super(inject(NotificationUserCollectionStore));
@@ -5534,6 +5627,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5534
5627
  }]
5535
5628
  }], ctorParameters: () => [] });
5536
5629
 
5630
+ /** Document store for a single NotificationUser with update and resync functions. */
5537
5631
  class NotificationUserDocumentStore extends AbstractDbxFirebaseDocumentStore {
5538
5632
  notificationFunctions = inject(NotificationFunctions);
5539
5633
  constructor() {
@@ -5548,6 +5642,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5548
5642
  type: Injectable
5549
5643
  }], ctorParameters: () => [] });
5550
5644
 
5645
+ /** Directive providing a {@link NotificationUserDocumentStore} for accessing a single notification user document. */
5551
5646
  class DbxFirebaseNotificationUserDocumentStoreDirective extends DbxFirebaseDocumentStoreDirective {
5552
5647
  constructor() {
5553
5648
  super(inject(NotificationUserDocumentStore));
@@ -6822,6 +6917,16 @@ function provideDbxFirebaseStorageFileService() {
6822
6917
  return makeEnvironmentProviders(providers);
6823
6918
  }
6824
6919
 
6920
+ /**
6921
+ * Angular pipe that flattens a Firestore model key path into a single string identifier.
6922
+ *
6923
+ * Returns an empty string for null/undefined input.
6924
+ *
6925
+ * @example
6926
+ * ```html
6927
+ * <span>{{ document.key | flatFirestoreModelKey }}</span>
6928
+ * ```
6929
+ */
6825
6930
  class FlatFirestoreModelKeyPipe {
6826
6931
  transform(input) {
6827
6932
  if (input != null) {
@@ -6839,6 +6944,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
6839
6944
  args: [{ name: 'flatFirestoreModelKey', standalone: true }]
6840
6945
  }] });
6841
6946
 
6947
+ /**
6948
+ * Angular pipe that converts a Firestore model key to a two-way flat key format,
6949
+ * enabling reversible encoding/decoding of the full path.
6950
+ *
6951
+ * Returns an empty string for null/undefined input.
6952
+ *
6953
+ * @example
6954
+ * ```html
6955
+ * <span>{{ document.key | twoWayFlatFirestoreModelKey }}</span>
6956
+ * ```
6957
+ */
6842
6958
  class TwoWayFlatFirestoreModelKeyPipe {
6843
6959
  transform(input) {
6844
6960
  if (input != null) {