@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.
- package/fesm2022/dereekb-dbx-firebase-oidc.mjs +1378 -0
- package/fesm2022/dereekb-dbx-firebase-oidc.mjs.map +1 -0
- package/fesm2022/dereekb-dbx-firebase.mjs +122 -6
- package/fesm2022/dereekb-dbx-firebase.mjs.map +1 -1
- package/package.json +14 -10
- package/types/dereekb-dbx-firebase-oidc.d.ts +616 -0
- package/types/dereekb-dbx-firebase.d.ts +145 -9
|
@@ -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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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) {
|