@dereekb/dbx-firebase 12.4.4 → 12.5.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.
Files changed (52) hide show
  1. package/esm2022/lib/auth/login/login.button.component.mjs +1 -1
  2. package/esm2022/lib/auth/login/login.email.content.component.mjs +2 -2
  3. package/esm2022/lib/development/development.scheduler.list.component.mjs +1 -1
  4. package/esm2022/lib/firestore/firebase.firestore.providers.mjs +21 -2
  5. package/esm2022/lib/model/loader/collection.loader.instance.mjs +65 -5
  6. package/esm2022/lib/model/modules/store/index.mjs +2 -1
  7. package/esm2022/lib/model/modules/store/store.collection.crud.mjs +28 -0
  8. package/esm2022/lib/model/modules/store/store.collection.directive.mjs +20 -2
  9. package/esm2022/lib/model/modules/store/store.collection.mjs +14 -1
  10. package/esm2022/lib/modules/index.mjs +2 -1
  11. package/esm2022/lib/modules/storagefile/container/index.mjs +7 -0
  12. package/esm2022/lib/modules/storagefile/container/storagefile.upload.action.handler.directive.mjs +118 -0
  13. package/esm2022/lib/modules/storagefile/container/storagefile.upload.error.mjs +12 -0
  14. package/esm2022/lib/modules/storagefile/container/storagefile.upload.handler.mjs +254 -0
  15. package/esm2022/lib/modules/storagefile/container/storagefile.upload.initialize.document.directive.mjs +39 -0
  16. package/esm2022/lib/modules/storagefile/container/storagefile.upload.store.directive.mjs +38 -0
  17. package/esm2022/lib/modules/storagefile/container/storagefile.upload.sync.directive.mjs +36 -0
  18. package/esm2022/lib/modules/storagefile/index.mjs +4 -0
  19. package/esm2022/lib/modules/storagefile/storagefile.upload.module.mjs +83 -0
  20. package/esm2022/lib/modules/storagefile/store/index.mjs +6 -0
  21. package/esm2022/lib/modules/storagefile/store/storagefile.collection.store.directive.mjs +22 -0
  22. package/esm2022/lib/modules/storagefile/store/storagefile.collection.store.mjs +18 -0
  23. package/esm2022/lib/modules/storagefile/store/storagefile.document.store.directive.mjs +21 -0
  24. package/esm2022/lib/modules/storagefile/store/storagefile.document.store.mjs +22 -0
  25. package/esm2022/lib/modules/storagefile/store/storagefile.upload.store.mjs +63 -0
  26. package/esm2022/lib/storage/firebase.storage.module.mjs +2 -2
  27. package/fesm2022/dereekb-dbx-firebase.mjs +833 -30
  28. package/fesm2022/dereekb-dbx-firebase.mjs.map +1 -1
  29. package/lib/firestore/firebase.firestore.providers.d.ts +14 -1
  30. package/lib/model/loader/collection.loader.instance.d.ts +26 -1
  31. package/lib/model/modules/store/index.d.ts +1 -0
  32. package/lib/model/modules/store/store.collection.crud.d.ts +21 -0
  33. package/lib/model/modules/store/store.collection.d.ts +19 -2
  34. package/lib/model/modules/store/store.collection.directive.d.ts +12 -2
  35. package/lib/modules/index.d.ts +1 -0
  36. package/lib/modules/storagefile/container/index.d.ts +6 -0
  37. package/lib/modules/storagefile/container/storagefile.upload.action.handler.directive.d.ts +47 -0
  38. package/lib/modules/storagefile/container/storagefile.upload.error.d.ts +9 -0
  39. package/lib/modules/storagefile/container/storagefile.upload.handler.d.ts +183 -0
  40. package/lib/modules/storagefile/container/storagefile.upload.initialize.document.directive.d.ts +14 -0
  41. package/lib/modules/storagefile/container/storagefile.upload.store.directive.d.ts +20 -0
  42. package/lib/modules/storagefile/container/storagefile.upload.sync.directive.d.ts +18 -0
  43. package/lib/modules/storagefile/index.d.ts +3 -0
  44. package/lib/modules/storagefile/storagefile.upload.module.d.ts +29 -0
  45. package/lib/modules/storagefile/store/index.d.ts +5 -0
  46. package/lib/modules/storagefile/store/storagefile.collection.store.d.ts +10 -0
  47. package/lib/modules/storagefile/store/storagefile.collection.store.directive.d.ts +9 -0
  48. package/lib/modules/storagefile/store/storagefile.document.store.d.ts +15 -0
  49. package/lib/modules/storagefile/store/storagefile.document.store.directive.d.ts +9 -0
  50. package/lib/modules/storagefile/store/storagefile.upload.store.d.ts +166 -0
  51. package/lib/storage/firebase.storage.module.d.ts +1 -1
  52. package/package.json +1 -1
@@ -1,24 +1,24 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable, APP_INITIALIZER, makeEnvironmentProviders, InjectionToken, Component, Optional, Inject, model, computed, ChangeDetectionStrategy, signal, Directive, input, EventEmitter, output, NgModule, Injector, viewChild, HostListener, ElementRef, forwardRef, effect, Pipe } from '@angular/core';
3
3
  import { DbxAnalyticsService } from '@dereekb/dbx-analytics';
4
- import { asObservable, timeoutStartWith, filterMaybe, isNot, SubscriptionObject, lazyFrom, switchMapWhileTrue, loadingStateFromObs, cleanupDestroyable, iterationHasNextAndCanLoadMore, pageItemAccumulatorCurrentPage, accumulatorFlattenPageListLoadingState, useFirst, itemAccumulatorNextPageUntilResultsCount, iteratorNextPageUntilPage, iteratorNextPageUntilMaxPageLoadLimit, pageLoadingStateFromObs, useAsObservable, filterMaybeArray, mapEachAsync, invertObservableDecision, filterItemsWithObservableDecision, skipInitialMaybe, distinctUntilModelKeyChange, successResult, beginLoading, errorResult, isLoadingStateLoading, cleanup, mapLoadingState, mapLoadingStateValueWithOperator } from '@dereekb/rxjs';
5
- import { switchMap, of, shareReplay, map, distinctUntilChanged, EMPTY, catchError, firstValueFrom, BehaviorSubject, combineLatest, first, from, tap, interval, exhaustMap, filter, take, startWith, Subject, throttleTime, NEVER, combineLatestWith } from 'rxjs';
4
+ import { asObservable, timeoutStartWith, filterMaybe, isNot, SubscriptionObject, lazyFrom, switchMapWhileTrue, loadingStateFromObs, distinctUntilKeysChange, cleanupDestroyable, iterationHasNextAndCanLoadMore, pageItemAccumulatorCurrentPage, accumulatorFlattenPageListLoadingState, useFirst, itemAccumulatorNextPageUntilResultsCount, iteratorNextPageUntilPage, iteratorNextPageUntilMaxPageLoadLimit, pageLoadingStateFromObs, useAsObservable, filterMaybeArray, mapEachAsync, invertObservableDecision, filterItemsWithObservableDecision, skipInitialMaybe, distinctUntilModelKeyChange, successResult, beginLoading, errorResult, isLoadingStateLoading, cleanup, mapLoadingState, mapLoadingStateValueWithOperator, distinctUntilHasDifferentValues, MultiSubscriptionObject, startWithBeginLoading, skipAllInitialMaybe } from '@dereekb/rxjs';
5
+ import { switchMap, of, shareReplay, map, distinctUntilChanged, EMPTY, catchError, firstValueFrom, BehaviorSubject, combineLatest, first, from, tap, interval, exhaustMap, filter, take, startWith, Subject, throttleTime, NEVER, combineLatestWith, Observable } from 'rxjs';
6
6
  import * as i2 from '@dereekb/dbx-core';
7
- import { loggedInObsFromIsLoggedIn, loggedOutObsFromIsLoggedIn, authUserIdentifier, DbxInjectionContext, DbxInjectionComponent, AbstractForwardDbxInjectionContextDirective, DbxInjectionContextDirective, DBX_INJECTION_COMPONENT_DATA, DbxAuthService, DbxActionButtonDirective, DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionAutoTriggerDirective, provideDbxRouteModelIdDirectiveDelegate, provideDbxRouteModelKeyDirectiveDelegate, AbstractSubscriptionDirective, AbstractIfDirective, LockSetComponentStore, newWithInjector, CutTextPipe, dbxRouteParamReaderInstance, DbxRouteParamDefaultRedirectInstance } from '@dereekb/dbx-core';
7
+ import { loggedInObsFromIsLoggedIn, loggedOutObsFromIsLoggedIn, authUserIdentifier, DbxInjectionContext, DbxInjectionComponent, AbstractForwardDbxInjectionContextDirective, DbxInjectionContextDirective, DBX_INJECTION_COMPONENT_DATA, DbxAuthService, DbxActionButtonDirective, DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionAutoTriggerDirective, provideDbxRouteModelIdDirectiveDelegate, provideDbxRouteModelKeyDirectiveDelegate, AbstractSubscriptionDirective, AbstractIfDirective, LockSetComponentStore, newWithInjector, CutTextPipe, DbxActionContextStoreSourceInstance, DbxActionHandlerInstance, dbxRouteParamReaderInstance, DbxRouteParamDefaultRedirectInstance } from '@dereekb/dbx-core';
8
8
  import { Auth, authState, idToken, GoogleAuthProvider, FacebookAuthProvider, TwitterAuthProvider, GithubAuthProvider, signInWithPopup, createUserWithEmailAndPassword, signInWithEmailAndPassword, signInAnonymously, reauthenticateWithPopup, provideAuth, getAuth, connectAuthEmulator } from '@angular/fire/auth';
9
- import { AUTH_ADMIN_ROLE, cachedGetter, urlWithoutParameters, addToSet, removeFromSet, filterMaybeArrayValues, mapIterable, asArray, excludeValuesFromArray, containsStringAnyCase, addToSetCopy, iterableToArray, runAsyncTasksForValues, pushArrayItemsIntoArray, forEachKeyValue, countAllInNestedArray, invertDecision, readableError, isMaybeSo, firstValue } from '@dereekb/util';
9
+ import { AUTH_ADMIN_ROLE, cachedGetter, urlWithoutParameters, addToSet, removeFromSet, filterMaybeArrayValues, mapIterable, asArray, excludeValuesFromArray, containsStringAnyCase, addToSetCopy, iterableToArray, runAsyncTasksForValues, pushArrayItemsIntoArray, forEachKeyValue, countAllInNestedArray, invertDecision, readableError, isMaybeSo, firstValue, separateValues } from '@dereekb/util';
10
10
  import { safeFormatToISO8601DateString, msToSeconds, isSameDate } from '@dereekb/date';
11
11
  import { sendPasswordResetEmail } from 'firebase/auth';
12
12
  import { getToken, initializeAppCheck, ReCaptchaV3Provider } from 'firebase/app-check';
13
13
  import { AppCheck, provideAppCheck } from '@angular/fire/app-check';
14
14
  import * as i1$1 from '@dereekb/dbx-web';
15
- import { DbxLinkComponent, DbxActionModule, DbxButtonModule, DbxErrorComponent, DbxActionErrorDirective, DbxButtonComponent, DbxButtonSpacerDirective, DbxRouterAnchorModule, DbxWidgetService, AbstractDbxSelectionListWrapperDirective, provideDbxListViewWrapper, DbxListWrapperComponentImportsModule, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, AbstractDbxSelectionListViewDirective, provideDbxListView, DbxSelectionValueListViewComponentImportsModule, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, AbstractDbxValueListViewItemComponent, TwoColumnsContextStore, DbxAnchorComponent, DbxTwoColumnFullLeftDirective, DbxWidgetViewComponent, DbxTwoColumnComponent, DbxTwoBlockComponent, DbxTwoColumnRightComponent, AbstractPopupDirective, DbxPopupService, DbxPopupContentComponent, DbxPopupControlsComponent, DbxModelTypesService, DbxModelTrackerService, allDbxModelViewTrackerEventModelKeys, DbxListItemAnchorModifierDirective, DbxValueListItemModifierDirective, AbstractPopoverDirective, DbxPopoverContentComponent, DbxPopoverHeaderComponent, DbxPopoverScrollContentDirective, DbxListEmptyContentComponent, AbstractPopoverRefDirective, DbxPopoverService, DbxIconButtonComponent, DbxModelObjectStateService, DbxListViewWrapper, AbstractDbxWidgetComponent, DbxPopoverInteractionModule, DbxListModifierModule } from '@dereekb/dbx-web';
15
+ import { DbxLinkComponent, DbxActionModule, DbxButtonModule, DbxErrorComponent, DbxActionErrorDirective, DbxButtonComponent, DbxButtonSpacerDirective, DbxRouterAnchorModule, DbxWidgetService, AbstractDbxSelectionListWrapperDirective, provideDbxListViewWrapper, DbxListWrapperComponentImportsModule, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, AbstractDbxSelectionListViewDirective, provideDbxListView, DbxSelectionValueListViewComponentImportsModule, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, AbstractDbxValueListViewItemComponent, TwoColumnsContextStore, DbxAnchorComponent, DbxTwoColumnFullLeftDirective, DbxWidgetViewComponent, DbxTwoColumnComponent, DbxTwoBlockComponent, DbxTwoColumnRightComponent, AbstractPopupDirective, DbxPopupService, DbxPopupContentComponent, DbxPopupControlsComponent, DbxModelTypesService, DbxModelTrackerService, allDbxModelViewTrackerEventModelKeys, DbxListItemAnchorModifierDirective, DbxValueListItemModifierDirective, AbstractPopoverDirective, DbxPopoverContentComponent, DbxPopoverHeaderComponent, DbxPopoverScrollContentDirective, DbxListEmptyContentComponent, AbstractPopoverRefDirective, DbxPopoverService, DbxIconButtonComponent, DbxModelObjectStateService, DbxListViewWrapper, AbstractDbxWidgetComponent, DbxPopoverInteractionModule, DbxListModifierModule, DbxFileUploadComponent, DbxLoadingComponent, DbxActionLoadingContextDirective, DbxActionSnackbarErrorDirective, DbxFileUploadActionSyncDirective } from '@dereekb/dbx-web';
16
16
  import * as i1 from '@angular/material/icon';
17
17
  import { MatIconModule } from '@angular/material/icon';
18
18
  import * as i1$2 from '@dereekb/dbx-form';
19
19
  import { AbstractSyncFormlyFormDirective, emailField, dbxFormlyFormComponentProviders, DbxFormlyFormComponentImportsModule, DBX_FORMLY_FORM_COMPONENT_TEMPLATE, AbstractConfigAsyncFormlyFormDirective, usernamePasswordLoginFields, DbxActionFormDirective, DbxFormSourceDirective, pickableItemChipField, filterPickableItemFieldValuesByLabel } from '@dereekb/dbx-form';
20
20
  import * as i1$4 from '@dereekb/firebase';
21
- import { firebaseAuthErrorToReadableError, FirebaseDevelopmentFunctions, ScheduledFunctionDevelopmentFunctionTypeEnum, clientFirebaseFirestoreContextFactory, SystemStateFirestoreCollections, NotificationFirestoreCollections, FIREBASE_DEVELOPMENT_FUNCTIONS_MAP_KEY, iterationQueryDocChangeWatcher, firebaseQuerySnapshotAccumulator, firebaseQueryItemAccumulator, firestoreModelKeysFromDocuments, firestoreModelIdsFromDocuments, documentReferencesFromDocuments, getDocumentSnapshots, getDataFromDocumentSnapshots, latestSnapshotsFromDocuments, dataFromDocumentSnapshots, loadDocumentsForKeys, loadDocumentsForDocumentReferences, loadDocumentsForIds, firestoreModelKeyCollectionTypePair, buildFirebaseCollectionTypeModelTypeMap, FirestoreAccessorStreamMode, firestoreModelIdsFromKey, firestoreModelKeyPartPairs, firestoreModelKeyPairObject, flatFirestoreModelKey, twoWayFlatFirestoreModelKey, documentDataWithIdAndKey, isClientFirebaseError, FIRESTORE_PERMISSION_DENIED_ERROR_CODE, inferKeyFromTwoWayFlatFirestoreModelKey, firestoreModelKeyParentKey, AppNotificationTemplateTypeInfoRecordService, NotificationFunctions, unreadNotificationItems, clientFirebaseStorageContextFactory } from '@dereekb/firebase';
21
+ import { firebaseAuthErrorToReadableError, FirebaseDevelopmentFunctions, ScheduledFunctionDevelopmentFunctionTypeEnum, clientFirebaseFirestoreContextFactory, SystemStateFirestoreCollections, NotificationFirestoreCollections, StorageFileFirestoreCollections, FIREBASE_DEVELOPMENT_FUNCTIONS_MAP_KEY, iterationQueryDocChangeWatcher, firebaseQuerySnapshotAccumulator, firebaseQueryItemAccumulator, firestoreModelKeysFromDocuments, firestoreModelIdsFromDocuments, documentReferencesFromDocuments, getDocumentSnapshots, getDataFromDocumentSnapshots, latestSnapshotsFromDocuments, dataFromDocumentSnapshots, loadDocumentsForKeys, loadDocumentsForDocumentReferences, loadDocumentsForIds, firestoreModelKeyCollectionTypePair, buildFirebaseCollectionTypeModelTypeMap, FirestoreAccessorStreamMode, firestoreModelIdsFromKey, firestoreModelKeyPartPairs, firestoreModelKeyPairObject, flatFirestoreModelKey, twoWayFlatFirestoreModelKey, documentDataWithIdAndKey, isClientFirebaseError, FIRESTORE_PERMISSION_DENIED_ERROR_CODE, inferKeyFromTwoWayFlatFirestoreModelKey, firestoreModelKeyParentKey, AppNotificationTemplateTypeInfoRecordService, NotificationFunctions, unreadNotificationItems, StorageFileFunctions, clientFirebaseStorageContextFactory } from '@dereekb/firebase';
22
22
  import { NgTemplateOutlet, DatePipe } from '@angular/common';
23
23
  import * as i1$3 from '@angular/material/button';
24
24
  import { MatButtonModule } from '@angular/material/button';
@@ -32,6 +32,7 @@ import { provideFirestore, persistentMultipleTabManager, persistentSingleTabMana
32
32
  import { HTTP_INTERCEPTORS } from '@angular/common/http';
33
33
  import { __decorate, __param, __metadata } from 'tslib';
34
34
  import { ComponentStore } from '@ngrx/component-store';
35
+ import { BaseError } from 'make-error';
35
36
 
36
37
  function authUserInfoFromAuthUser(user) {
37
38
  return {
@@ -674,7 +675,7 @@ class DbxFirebaseLoginButtonComponent {
674
675
  </div>
675
676
  </dbx-button>
676
677
  </ng-container>
677
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i2.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "ngmodule", type: DbxButtonModule }, { kind: "component", type: i1$1.DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
678
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i2.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "ngmodule", type: DbxButtonModule }, { kind: "component", type: i1$1.DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
678
679
  }
679
680
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseLoginButtonComponent, decorators: [{
680
681
  type: Component,
@@ -1053,7 +1054,7 @@ class DbxFirebaseLoginEmailContentComponent {
1053
1054
  this.doneOrCancelled.next(false);
1054
1055
  }
1055
1056
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseLoginEmailContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1056
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseLoginEmailContentComponent, isStandalone: true, selector: "ng-component", ngImport: i0, 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", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DbxErrorComponent, selector: "dbx-error", inputs: ["error", "iconOnly"], outputs: ["popoverOpened"] }, { kind: "component", type: DbxLinkComponent, selector: "dbx-link", inputs: ["ref", "href", "anchor"] }, { kind: "directive", type: DbxActionErrorDirective, selector: "[dbxActionError]" }, { kind: "directive", type: DbxActionFormDirective, selector: "[dbxActionForm]", inputs: ["dbxActionFormDisabledOnWorking", "dbxActionFormIsValid", "dbxActionFormIsEqual", "dbxActionFormIsModified", "dbxActionFormMapValue"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: DbxFirebaseEmailFormComponent, selector: "dbx-firebase-email-form" }, { kind: "component", type: DbxFirebaseEmailRecoveryFormComponent, selector: "dbx-firebase-email-recovery-form" }, { kind: "directive", type: DbxFormSourceDirective, selector: "[dbxFormSource]", inputs: ["dbxFormSourceMode", "dbxFormSource"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1057
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseLoginEmailContentComponent, isStandalone: true, selector: "ng-component", ngImport: i0, 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", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DbxErrorComponent, selector: "dbx-error", inputs: ["error", "iconOnly"], outputs: ["popoverOpened"] }, { kind: "component", type: DbxLinkComponent, selector: "dbx-link", inputs: ["ref", "href", "anchor"] }, { kind: "directive", type: DbxActionErrorDirective, selector: "[dbxActionError]" }, { kind: "directive", type: DbxActionFormDirective, selector: "[dbxActionForm]", inputs: ["dbxActionFormDisabledOnWorking", "dbxActionFormIsValid", "dbxActionFormIsEqual", "dbxActionFormIsModified", "dbxActionFormMapValue"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: DbxFirebaseEmailFormComponent, selector: "dbx-firebase-email-form" }, { kind: "component", type: DbxFirebaseEmailRecoveryFormComponent, selector: "dbx-firebase-email-recovery-form" }, { kind: "directive", type: DbxFormSourceDirective, selector: "[dbxFormSource]", inputs: ["dbxFormSourceMode", "dbxFormSource"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1057
1058
  }
1058
1059
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseLoginEmailContentComponent, decorators: [{
1059
1060
  type: Component,
@@ -1802,7 +1803,7 @@ class DbxFirebaseDevelopmentSchedulerListViewItemComponent extends AbstractDbxVa
1802
1803
  <dbx-button dbxActionButton [text]="'Run ' + name"></dbx-button>
1803
1804
  <div *dbxActionHasSuccess="3000" class="dbx-success">Success</div>
1804
1805
  </div>
1805
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i2.DbxActionHasSuccessDirective, selector: "[dbxActionHasSuccess]", inputs: ["dbxActionHasSuccess"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1806
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i2.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i2.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i2.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i2.DbxActionHasSuccessDirective, selector: "[dbxActionHasSuccess]", inputs: ["dbxActionHasSuccess"] }, { kind: "directive", type: i2.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1806
1807
  }
1807
1808
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseDevelopmentSchedulerListViewItemComponent, decorators: [{
1808
1809
  type: Component,
@@ -2087,7 +2088,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2087
2088
  args: ['window:keydown', ['$event']]
2088
2089
  }] } });
2089
2090
 
2090
- const importsAndExports$5 = [
2091
+ const importsAndExports$6 = [
2091
2092
  //
2092
2093
  DbxFirebaseDevelopmentPopupContentFormComponent,
2093
2094
  DbxFirebaseDevelopmentDirective,
@@ -2135,8 +2136,8 @@ class DbxFirebaseDevelopmentModule {
2135
2136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseDevelopmentModule, decorators: [{
2136
2137
  type: NgModule,
2137
2138
  args: [{
2138
- imports: importsAndExports$5,
2139
- exports: importsAndExports$5
2139
+ imports: importsAndExports$6,
2140
+ exports: importsAndExports$6
2140
2141
  }]
2141
2142
  }] });
2142
2143
 
@@ -2418,6 +2419,18 @@ function provideNotificationFirestoreCollections(appCollection) {
2418
2419
  }
2419
2420
  return appCollection;
2420
2421
  }
2422
+ /**
2423
+ * Provider factory for the StorageFileFirestoreCollections.
2424
+ *
2425
+ * @param appCollection The app collection class to use.
2426
+ * @returns Provider factory for the StorageFileFirestoreCollections.
2427
+ */
2428
+ function provideStorageFileFirestoreCollections(appCollection) {
2429
+ if (!appCollection.storageFileCollection) {
2430
+ throw new Error(`StorageFileFirestoreCollections could not be provided using the app's app collection. Set provideStorageFileFirestoreCollections to false in DbxFirebaseFirestoreCollectionModuleConfig to prevent auto-initialization, or update your app's collection class to implement StorageFileFirestoreCollections.`);
2431
+ }
2432
+ return appCollection;
2433
+ }
2421
2434
  /**
2422
2435
  * Creates EnvironmentProviders for the DBX_FIRESTORE_CONTEXT_TOKEN, appCollectionClass, and optionally the SystemStateFirestoreCollections and NotificationFirestoreCollections.
2423
2436
  *
@@ -2454,6 +2467,13 @@ function provideDbxFirestoreCollection(config) {
2454
2467
  deps: [config.appCollectionClass]
2455
2468
  });
2456
2469
  }
2470
+ if (config.provideStorageFileFirestoreCollections) {
2471
+ providers.push({
2472
+ provide: StorageFileFirestoreCollections,
2473
+ useFactory: provideStorageFileFirestoreCollections,
2474
+ deps: [config.appCollectionClass]
2475
+ });
2476
+ }
2457
2477
  return makeEnvironmentProviders(providers);
2458
2478
  }
2459
2479
 
@@ -2678,12 +2698,18 @@ function dbxFirebaseCollectionChangeTrigger(config) {
2678
2698
  class DbxFirebaseCollectionLoaderInstance {
2679
2699
  _maxPagesSub = new SubscriptionObject();
2680
2700
  _collection = new BehaviorSubject(undefined);
2701
+ _collectionMode = new BehaviorSubject('query');
2702
+ _collectionRefs = new BehaviorSubject(undefined);
2681
2703
  _maxPages = new BehaviorSubject(undefined);
2682
2704
  _itemsPerPage = new BehaviorSubject(undefined);
2683
2705
  _constraints = new BehaviorSubject(undefined);
2684
2706
  _waitForNonNullConstraints = new BehaviorSubject(undefined);
2685
2707
  _restart = new Subject();
2686
2708
  collection$ = this._collection.pipe(distinctUntilChanged());
2709
+ collectionMode$ = this._collectionMode.pipe(distinctUntilChanged(), shareReplay(1));
2710
+ currentCollectionRefs$ = this._collectionRefs.pipe(distinctUntilChanged(), shareReplay(1));
2711
+ collectionRefs$ = this.currentCollectionRefs$.pipe(filterMaybe(), distinctUntilKeysChange((x) => x.path), shareReplay(1));
2712
+ collectionKeys$ = this.collectionRefs$.pipe(map((x) => x.map((y) => y.path)), shareReplay(1));
2687
2713
  currentConstraints$ = this._constraints.pipe(distinctUntilChanged());
2688
2714
  constraints$ = this._waitForNonNullConstraints.pipe(switchMap((waitForNonNullConstraints) => {
2689
2715
  let obs = this.currentConstraints$;
@@ -2696,8 +2722,15 @@ class DbxFirebaseCollectionLoaderInstance {
2696
2722
  iteratorFilter$ = combineLatest([this._itemsPerPage.pipe(distinctUntilChanged()), this.constraints$]).pipe(map(([limit, constraints]) => ({ limit, constraints, maxPageLoadLimit: this.maxPages })), shareReplay(1));
2697
2723
  firestoreIteration$ = this.collection$.pipe(switchMap((collection) => {
2698
2724
  if (collection) {
2699
- return combineLatest([this.iteratorFilter$, this._restart.pipe(startWith(undefined))]).pipe(throttleTime(100, undefined, { trailing: true }), // prevent rapid changes and executing filters too quickly.
2700
- map(([iteratorFilter]) => collection.firestoreIteration(iteratorFilter)), cleanupDestroyable(), // cleanup the iteration
2725
+ return combineLatest([this.collectionMode$, this.iteratorFilter$, this._restart.pipe(startWith(undefined))]).pipe(throttleTime(100, undefined, { trailing: true }), // prevent rapid changes and executing filters too quickly.
2726
+ switchMap(([mode, filter]) => {
2727
+ if (mode === 'query') {
2728
+ return of(collection.firestoreIteration(filter));
2729
+ }
2730
+ else {
2731
+ return this.collectionRefs$.pipe(map((refs) => collection.firestoreFixedIteration(refs, filter)));
2732
+ }
2733
+ }), cleanupDestroyable(), // cleanup the iteration
2701
2734
  shareReplay(1));
2702
2735
  }
2703
2736
  else {
@@ -2734,6 +2767,13 @@ class DbxFirebaseCollectionLoaderInstance {
2734
2767
  allDocumentData$ = this.accumulatorItems$.pipe(map((x) => x.flat()), shareReplay(1));
2735
2768
  pageLoadingState$ = this.accumulator$.pipe(switchMap((x) => accumulatorFlattenPageListLoadingState(x)), shareReplay(1));
2736
2769
  constructor(initConfig) {
2770
+ this._collectionMode.next(initConfig?.collectionMode ?? 'query');
2771
+ if (initConfig?.collectionKeys) {
2772
+ this.collectionKeys = initConfig?.collectionKeys;
2773
+ }
2774
+ else if (initConfig?.collectionRefs) {
2775
+ this.collectionRefs = initConfig?.collectionRefs;
2776
+ }
2737
2777
  this._collection.next(initConfig?.collection);
2738
2778
  this._maxPages.next(initConfig?.maxPages);
2739
2779
  this._itemsPerPage.next(initConfig?.itemsPerPage);
@@ -2749,6 +2789,8 @@ class DbxFirebaseCollectionLoaderInstance {
2749
2789
  .subscribe();
2750
2790
  }
2751
2791
  destroy() {
2792
+ this._collectionMode.complete();
2793
+ this._collectionRefs.complete();
2752
2794
  this._maxPages.complete();
2753
2795
  this._collection.complete();
2754
2796
  this._constraints.complete();
@@ -2757,6 +2799,33 @@ class DbxFirebaseCollectionLoaderInstance {
2757
2799
  this._maxPagesSub.destroy();
2758
2800
  }
2759
2801
  // MARK: Inputs
2802
+ get collectionMode() {
2803
+ return this._collectionMode.value;
2804
+ }
2805
+ set collectionMode(mode) {
2806
+ if (this.collectionMode != mode) {
2807
+ this._collectionMode.next(mode);
2808
+ }
2809
+ }
2810
+ get collectionKeys() {
2811
+ const refs = this.collectionRefs;
2812
+ return refs?.map((x) => x.path);
2813
+ }
2814
+ set collectionKeys(keys) {
2815
+ let refs = undefined;
2816
+ const { collection } = this;
2817
+ if (keys && collection) {
2818
+ const accessor = collection.documentAccessor();
2819
+ refs = keys.map((x) => accessor.documentRefForKey(x));
2820
+ }
2821
+ this.collectionRefs = refs;
2822
+ }
2823
+ get collectionRefs() {
2824
+ return this._collectionRefs.value;
2825
+ }
2826
+ set collectionRefs(refs) {
2827
+ this._collectionRefs.next(refs);
2828
+ }
2760
2829
  get maxPages() {
2761
2830
  return this._maxPages.value;
2762
2831
  }
@@ -2798,6 +2867,17 @@ class DbxFirebaseCollectionLoaderInstance {
2798
2867
  restart() {
2799
2868
  this._restart.next();
2800
2869
  }
2870
+ setCollectionMode(mode) {
2871
+ this.collectionMode = mode;
2872
+ }
2873
+ // References Mode
2874
+ setCollectionKeys(keys) {
2875
+ this.collectionKeys = keys;
2876
+ }
2877
+ setCollectionRefs(refs) {
2878
+ this.collectionRefs = refs;
2879
+ }
2880
+ // Query Mode
2801
2881
  setMaxPages(maxPages) {
2802
2882
  this.maxPages = maxPages;
2803
2883
  }
@@ -3357,7 +3437,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3357
3437
  }]
3358
3438
  }] });
3359
3439
 
3360
- const importsAndExports$4 = [DbxFirebaseModelHistoryComponent, DbxFirebaseModelHistoryPopoverButtonComponent, DbxFirebaseModelHistoryPopoverComponent];
3440
+ const importsAndExports$5 = [DbxFirebaseModelHistoryComponent, DbxFirebaseModelHistoryPopoverButtonComponent, DbxFirebaseModelHistoryPopoverComponent];
3361
3441
  /**
3362
3442
  * @deprecated import standalone components individually instead.
3363
3443
  *
@@ -3368,13 +3448,13 @@ const importsAndExports$4 = [DbxFirebaseModelHistoryComponent, DbxFirebaseModelH
3368
3448
  class DbxFirebaseModelHistoryModule {
3369
3449
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseModelHistoryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3370
3450
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseModelHistoryModule, imports: [DbxFirebaseModelHistoryComponent, DbxFirebaseModelHistoryPopoverButtonComponent, DbxFirebaseModelHistoryPopoverComponent], exports: [DbxFirebaseModelHistoryComponent, DbxFirebaseModelHistoryPopoverButtonComponent, DbxFirebaseModelHistoryPopoverComponent] });
3371
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseModelHistoryModule, imports: [importsAndExports$4] });
3451
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseModelHistoryModule, imports: [importsAndExports$5] });
3372
3452
  }
3373
3453
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseModelHistoryModule, decorators: [{
3374
3454
  type: NgModule,
3375
3455
  args: [{
3376
- imports: importsAndExports$4,
3377
- exports: importsAndExports$4
3456
+ imports: importsAndExports$5,
3457
+ exports: importsAndExports$5
3378
3458
  }]
3379
3459
  }] });
3380
3460
 
@@ -3533,7 +3613,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3533
3613
  }]
3534
3614
  }] });
3535
3615
 
3536
- const importsAndExports$3 = [DbxFirebaseModelViewedEventDirective, DbxFirebaseModelTypeInstanceListComponent, DbxFirebaseModelTypeInstanceListViewComponent, DbxFirebaseModelTypeInstanceListViewItemComponent];
3616
+ const importsAndExports$4 = [DbxFirebaseModelViewedEventDirective, DbxFirebaseModelTypeInstanceListComponent, DbxFirebaseModelTypeInstanceListViewComponent, DbxFirebaseModelTypeInstanceListViewItemComponent];
3537
3617
  /**
3538
3618
  * @deprecated import independent components instead
3539
3619
  *
@@ -3550,8 +3630,8 @@ class DbxFirebaseModelTypesModule {
3550
3630
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseModelTypesModule, decorators: [{
3551
3631
  type: NgModule,
3552
3632
  args: [{
3553
- imports: importsAndExports$3,
3554
- exports: importsAndExports$3
3633
+ imports: importsAndExports$4,
3634
+ exports: importsAndExports$4
3555
3635
  }]
3556
3636
  }] });
3557
3637
 
@@ -3559,10 +3639,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3559
3639
  * Abstract directive that contains a DbxFirebaseCollectionStore and provides an interface for communicating with other directives.
3560
3640
  */
3561
3641
  class DbxFirebaseCollectionStoreDirective {
3642
+ collectionMode = model('query');
3643
+ collectionKeys = model(undefined);
3644
+ collectionRefs = model(undefined);
3562
3645
  maxPages = model(undefined);
3563
3646
  itemsPerPage = model(undefined);
3564
3647
  constraints = model(undefined);
3565
3648
  waitForNonNullConstraints = model(undefined);
3649
+ _collectionMode = toObservable(this.collectionMode).pipe(skipInitialMaybe());
3650
+ _collectionKeys = toObservable(this.collectionKeys).pipe(skipInitialMaybe());
3651
+ _collectionRefs = toObservable(this.collectionRefs).pipe(skipInitialMaybe());
3566
3652
  _maxPages = toObservable(this.maxPages).pipe(skipInitialMaybe());
3567
3653
  _itemsPerPage = toObservable(this.itemsPerPage).pipe(skipInitialMaybe());
3568
3654
  _constraints = toObservable(this.constraints).pipe(skipInitialMaybe());
@@ -3575,6 +3661,9 @@ class DbxFirebaseCollectionStoreDirective {
3575
3661
  this.replaceStore(store);
3576
3662
  // sync inputs to store any time the store changes
3577
3663
  this._storeSub.subscription = this.store$.subscribe((x) => {
3664
+ x.setCollectionMode(this._collectionMode);
3665
+ x.setCollectionKeys(this._collectionKeys);
3666
+ x.setCollectionRefs(this._collectionRefs);
3578
3667
  x.setConstraints(this._constraints);
3579
3668
  x.setMaxPages(this._maxPages);
3580
3669
  x.setItemsPerPage(this._itemsPerPage);
@@ -3594,6 +3683,15 @@ class DbxFirebaseCollectionStoreDirective {
3594
3683
  replaceStore(store) {
3595
3684
  this._store.next(store);
3596
3685
  }
3686
+ setCollectionMode(collectionMode) {
3687
+ this.collectionMode.set(collectionMode);
3688
+ }
3689
+ setCollectionKeys(collectionKeys) {
3690
+ this.collectionKeys.set(collectionKeys);
3691
+ }
3692
+ setCollectionRefs(collectionRefs) {
3693
+ this.collectionRefs.set(collectionRefs);
3694
+ }
3597
3695
  setMaxPages(maxPages) {
3598
3696
  this.maxPages.set(maxPages);
3599
3697
  }
@@ -3613,7 +3711,7 @@ class DbxFirebaseCollectionStoreDirective {
3613
3711
  this.store.restart();
3614
3712
  }
3615
3713
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseCollectionStoreDirective, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
3616
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DbxFirebaseCollectionStoreDirective, inputs: { maxPages: { classPropertyName: "maxPages", publicName: "maxPages", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: true, isRequired: false, transformFunction: null }, constraints: { classPropertyName: "constraints", publicName: "constraints", isSignal: true, isRequired: false, transformFunction: null }, waitForNonNullConstraints: { classPropertyName: "waitForNonNullConstraints", publicName: "waitForNonNullConstraints", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { maxPages: "maxPagesChange", itemsPerPage: "itemsPerPageChange", constraints: "constraintsChange", waitForNonNullConstraints: "waitForNonNullConstraintsChange" }, ngImport: i0 });
3714
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DbxFirebaseCollectionStoreDirective, inputs: { collectionMode: { classPropertyName: "collectionMode", publicName: "collectionMode", isSignal: true, isRequired: false, transformFunction: null }, collectionKeys: { classPropertyName: "collectionKeys", publicName: "collectionKeys", isSignal: true, isRequired: false, transformFunction: null }, collectionRefs: { classPropertyName: "collectionRefs", publicName: "collectionRefs", isSignal: true, isRequired: false, transformFunction: null }, maxPages: { classPropertyName: "maxPages", publicName: "maxPages", isSignal: true, isRequired: false, transformFunction: null }, itemsPerPage: { classPropertyName: "itemsPerPage", publicName: "itemsPerPage", isSignal: true, isRequired: false, transformFunction: null }, constraints: { classPropertyName: "constraints", publicName: "constraints", isSignal: true, isRequired: false, transformFunction: null }, waitForNonNullConstraints: { classPropertyName: "waitForNonNullConstraints", publicName: "waitForNonNullConstraints", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collectionMode: "collectionModeChange", collectionKeys: "collectionKeysChange", collectionRefs: "collectionRefsChange", maxPages: "maxPagesChange", itemsPerPage: "itemsPerPageChange", constraints: "constraintsChange", waitForNonNullConstraints: "waitForNonNullConstraintsChange" }, ngImport: i0 });
3617
3715
  }
3618
3716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseCollectionStoreDirective, decorators: [{
3619
3717
  type: Directive
@@ -3787,7 +3885,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3787
3885
  }]
3788
3886
  }], ctorParameters: () => [] });
3789
3887
 
3790
- const importsAndExports$2 = [DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseDocumentStoreTwoWayModelKeySourceDirective, DbxFirebaseDocumentStoreIdFromTwoWayModelKeyDirective];
3888
+ const importsAndExports$3 = [DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseDocumentStoreTwoWayModelKeySourceDirective, DbxFirebaseDocumentStoreIdFromTwoWayModelKeyDirective];
3791
3889
  class DbxFirebaseModelStoreModule {
3792
3890
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseModelStoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3793
3891
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseModelStoreModule, imports: [DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseDocumentStoreTwoWayModelKeySourceDirective, DbxFirebaseDocumentStoreIdFromTwoWayModelKeyDirective], exports: [DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseDocumentStoreTwoWayModelKeySourceDirective, DbxFirebaseDocumentStoreIdFromTwoWayModelKeyDirective] });
@@ -3796,13 +3894,22 @@ class DbxFirebaseModelStoreModule {
3796
3894
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseModelStoreModule, decorators: [{
3797
3895
  type: NgModule,
3798
3896
  args: [{
3799
- imports: importsAndExports$2,
3800
- exports: importsAndExports$2
3897
+ imports: importsAndExports$3,
3898
+ exports: importsAndExports$3
3801
3899
  }]
3802
3900
  }] });
3803
3901
 
3804
3902
  class AbstractDbxFirebaseCollectionStore extends LockSetComponentStore {
3805
3903
  // MARK: Effects
3904
+ setCollectionMode = this.effect((input) => {
3905
+ return input.pipe(switchMap((mode) => this.loader$.pipe(tap((x) => x.setCollectionMode(mode)))));
3906
+ });
3907
+ setCollectionKeys = this.effect((input) => {
3908
+ return input.pipe(switchMap((keys) => this.loader$.pipe(tap((x) => x.setCollectionKeys(keys)))));
3909
+ });
3910
+ setCollectionRefs = this.effect((input) => {
3911
+ return input.pipe(switchMap((refs) => this.loader$.pipe(tap((x) => x.setCollectionRefs(refs)))));
3912
+ });
3806
3913
  setMaxPages = this.effect((input) => {
3807
3914
  return input.pipe(switchMap((maxPages) => this.loader$.pipe(tap((x) => x.setMaxPages(maxPages)))));
3808
3915
  });
@@ -3826,11 +3933,15 @@ class AbstractDbxFirebaseCollectionStore extends LockSetComponentStore {
3826
3933
  firestoreCollection$ = this.currentFirestoreCollection$.pipe(filterMaybe());
3827
3934
  loader$ = this.currentFirestoreCollection$.pipe(switchMap((collection) => this.state$.pipe(first(), map((x) => dbxFirebaseCollectionLoaderInstance({
3828
3935
  collection,
3936
+ collectionMode: x.collectionMode,
3937
+ collectionKeys: x.collectionKeys,
3938
+ collectionRefs: x.collectionRefs,
3829
3939
  maxPages: x.maxPages,
3830
3940
  itemsPerPage: x.itemsPerPage,
3831
3941
  constraints: x.constraints,
3832
3942
  waitForNonNullConstraints: x.waitForNonNullConstraints
3833
3943
  })))), cleanupDestroyable(), distinctUntilChanged(), shareReplay(1));
3944
+ collectionMode$ = this.loader$.pipe(switchMap((x) => x.collectionMode$));
3834
3945
  constraints$ = this.loader$.pipe(switchMap((x) => x.constraints$));
3835
3946
  firestoreIteration$ = this.loader$.pipe(switchMap((x) => x.firestoreIteration$));
3836
3947
  queryChangeWatcher$ = this.loader$.pipe(switchMap((x) => x.queryChangeWatcher$));
@@ -3861,6 +3972,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3861
3972
  type: Injectable
3862
3973
  }] });
3863
3974
 
3975
+ /**
3976
+ * Creates a function for a store that DbxFirebaseDocumentStore captures the ModelFirebaseCreateFunction result and sets the key of the created value.
3977
+ *
3978
+ * @param store
3979
+ * @param fn
3980
+ * @returns
3981
+ */
3982
+ function firebaseCollectionStoreCreateFunction(store, fn) {
3983
+ return (params) => loadingStateFromObs(lazyFrom(() => fn(params).then((result) => {
3984
+ const modelKeys = asArray(result.modelKeys);
3985
+ store.setCollectionKeys(modelKeys);
3986
+ store.setCollectionMode('references'); // switch mode to references if not yet set
3987
+ return result;
3988
+ })));
3989
+ }
3990
+ /**
3991
+ * Creates a DbxfirebaseDocumentStoreCrudFunction from the input ModelFirebaseCrudFunction.
3992
+ *
3993
+ * @param fn
3994
+ * @returns
3995
+ */
3996
+ function firebaseCollectionStoreCrudFunction(fn) {
3997
+ return (params) => loadingStateFromObs(from(fn(params)).pipe(shareReplay(1)));
3998
+ }
3999
+
3864
4000
  const DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR = 'DOES_NOT_EXIST';
3865
4001
  function modelDoesNotExistError() {
3866
4002
  return readableError(DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR, 'The document does not exist.');
@@ -5032,7 +5168,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5032
5168
  }]
5033
5169
  }], ctorParameters: () => [{ type: NotificationUserDocumentStore }] });
5034
5170
 
5035
- const importsAndExports$1 = [
5171
+ const importsAndExports$2 = [
5036
5172
  // components
5037
5173
  DbxFirebaseNotificationItemListComponent,
5038
5174
  DbxFirebaseNotificationItemListViewComponent,
@@ -5120,8 +5256,8 @@ class DbxFirebaseNotificationModule {
5120
5256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseNotificationModule, decorators: [{
5121
5257
  type: NgModule,
5122
5258
  args: [{
5123
- imports: importsAndExports$1,
5124
- exports: importsAndExports$1
5259
+ imports: importsAndExports$2,
5260
+ exports: importsAndExports$2
5125
5261
  }]
5126
5262
  }] });
5127
5263
 
@@ -5167,6 +5303,673 @@ function provideDbxFirebaseNotifications(config) {
5167
5303
  return makeEnvironmentProviders(providers);
5168
5304
  }
5169
5305
 
5306
+ /**
5307
+ * Store used for selecting a specific NotificationItem from a list of notification items.
5308
+ */
5309
+ class DbxFirebaseStorageFileUploadStore extends ComponentStore {
5310
+ constructor() {
5311
+ super({});
5312
+ }
5313
+ // MARK: Accessors
5314
+ componentFileTypesAccepted$ = this.select((state) => state.componentFileTypesAccepted);
5315
+ isComponentMultiUploadAllowed$ = this.select((state) => state.isComponentMultiUploadAllowed).pipe(distinctUntilChanged(), shareReplay(1));
5316
+ fileTypesAllowed$ = this.select((state) => state.fileTypesAccepted ?? state.componentFileTypesAccepted ?? []).pipe(distinctUntilHasDifferentValues(), shareReplay(1));
5317
+ fileTypesAcceptString$ = this.fileTypesAllowed$.pipe(map((x) => x.join(',')), distinctUntilChanged(), shareReplay(1));
5318
+ isMultiUploadAllowed$ = this.select((state) => state.isComponentMultiUploadAllowed !== false && state.isMultiUploadAllowed).pipe(distinctUntilChanged(), shareReplay(1));
5319
+ uploadPath$ = this.select((state) => state.uploadPath).pipe(distinctUntilChanged(), shareReplay(1));
5320
+ currentFiles$ = this.select((state) => state.files).pipe(distinctUntilChanged(), shareReplay(1));
5321
+ files$ = this.currentFiles$.pipe(filterMaybe());
5322
+ isUploadHandlerWorking$ = this.select((state) => state.isUploadHandlerWorking).pipe(distinctUntilChanged(), shareReplay(1));
5323
+ latestProgressEvent$ = this.select((state) => state.latestProgressEvent).pipe(distinctUntilChanged(), shareReplay(1));
5324
+ currentUploadResult$ = this.select((state) => state.uploadResult).pipe(distinctUntilChanged(), shareReplay(1));
5325
+ uploadResult$ = this.currentUploadResult$.pipe(filterMaybe());
5326
+ // MARK: State Changes
5327
+ setComponentFileTypesAccepted = this.updater((state, componentFileTypesAccepted) => ({ ...state, componentFileTypesAccepted }));
5328
+ setIsComponentMultiUploadAllowed = this.updater((state, isComponentMultiUploadAllowed) => ({ ...state, isComponentMultiUploadAllowed }));
5329
+ setUploadPath = this.updater((state, uploadPath) => ({ ...state, uploadPath }));
5330
+ setFileTypesAccepted = this.updater((state, fileTypesAccepted) => ({ ...state, fileTypesAccepted: fileTypesAccepted ? asArray(fileTypesAccepted) : undefined }));
5331
+ /**
5332
+ * Sets the file list to upload.
5333
+ *
5334
+ * If the upload handler is working, the file list cannot be changed.
5335
+ */
5336
+ setFiles = this.updater((state, files) => ({ ...state, files: state.isUploadHandlerWorking ? state.files : files }));
5337
+ setIsMultiUploadAllowed = this.updater((state, isMultiUploadAllowed) => ({ ...state, isMultiUploadAllowed }));
5338
+ /**
5339
+ * Flags the upload handler to begin working.
5340
+ *
5341
+ * Once the upload handler is flagged, it cannot be unset until the upload handler has finished.
5342
+ */
5343
+ setIsUploadHandlerWorking = this.updater((state, isUploadHandlerWorking) => ({ ...state, isUploadHandlerWorking }));
5344
+ /**
5345
+ * Sets the latest progress event.
5346
+ */
5347
+ setLatestProgressEvent = this.updater((state, latestProgressEvent) => ({ ...state, latestProgressEvent }));
5348
+ /**
5349
+ * Updates the upload progress for one or more files.
5350
+ */
5351
+ // readonly updateUploadProgress = this.updater((state, uploadProgress: ArrayOrValue<DbxFirebaseStorageFileUploadStoreFileProgress>) => updateUploadStorageFileStoreStateWithUploadProgress(state, uploadProgress));
5352
+ /**
5353
+ * Sets the upload result.
5354
+ */
5355
+ setUploadResult = this.updater((state, uploadResult) => ({ ...state, isUploadHandlerWorking: false, uploadProgress: undefined, uploadResult }));
5356
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5357
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadStore });
5358
+ }
5359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadStore, decorators: [{
5360
+ type: Injectable
5361
+ }], ctorParameters: () => [] });
5362
+
5363
+ /**
5364
+ * Default implementation of StorageFileUploadHandler.
5365
+ */
5366
+ function storageFileUploadHandler(config) {
5367
+ const { storageService, storageFileUploadConfigFactory } = config;
5368
+ let resumable;
5369
+ return {
5370
+ uploadFile: async (file) => {
5371
+ const storageFileUploadConfig = await storageFileUploadConfigFactory(file);
5372
+ const { storagePath } = storageFileUploadConfig;
5373
+ const storageAccessorFile = storageService.file(storagePath);
5374
+ const upload = new Observable((x) => {
5375
+ if (storageAccessorFile.uploadResumable) {
5376
+ resumable = storageAccessorFile.uploadResumable(file);
5377
+ // subscribe to the event by piping this observable to it
5378
+ resumable
5379
+ .streamSnapshotEvents()
5380
+ .pipe(map((x) => {
5381
+ const { bytesTransferred, totalBytes } = x;
5382
+ const progress = {
5383
+ file,
5384
+ fileRef: storageAccessorFile,
5385
+ uploadRef: resumable,
5386
+ bytesTransferred,
5387
+ totalBytes,
5388
+ progress: bytesTransferred / totalBytes
5389
+ };
5390
+ return progress;
5391
+ }))
5392
+ .pipe(catchError((error) => {
5393
+ // if an error occurs, catch it and emit it as a progress
5394
+ const progress = {
5395
+ file,
5396
+ fileRef: storageAccessorFile,
5397
+ uploadRef: resumable,
5398
+ error,
5399
+ failed: true
5400
+ };
5401
+ return of(progress);
5402
+ }))
5403
+ .subscribe(x);
5404
+ }
5405
+ else {
5406
+ throw new Error('uploadResumable() function was unavailable.');
5407
+ }
5408
+ }).pipe(shareReplay(1));
5409
+ const instance = {
5410
+ upload,
5411
+ taskRef: storageAccessorFile,
5412
+ pause: () => resumable?.pause() ?? false,
5413
+ resume: () => resumable?.resume() ?? false,
5414
+ cancel: () => resumable?.cancel() ?? false
5415
+ };
5416
+ return instance;
5417
+ }
5418
+ };
5419
+ }
5420
+ /**
5421
+ * Uploads files using the provided upload handler and files.
5422
+ *
5423
+ * An observable is returned that emits the latest file events from any file that is being uploaded.
5424
+ *
5425
+ * @param input
5426
+ * @returns
5427
+ */
5428
+ function storageFileUploadFiles(input) {
5429
+ const { uploadHandler, files, maxParallelUploads: inputMaxParallelUploads } = input;
5430
+ const maxParallelTasks = inputMaxParallelUploads ?? 3;
5431
+ const multiUploadsSubscriptionObject = new MultiSubscriptionObject();
5432
+ // begin the upload for each file
5433
+ const allFiles = Array.from(files);
5434
+ // unsubscribe from all previous uploads
5435
+ multiUploadsSubscriptionObject.unsub();
5436
+ const allFilesAndLatestProgress = new Array(allFiles.length);
5437
+ const allFilesAndDetails = allFiles.map((file) => ({ file }));
5438
+ const overallProgressPerCompletedFile = (1 / allFilesAndLatestProgress.length);
5439
+ /**
5440
+ * Once set, any new file upload task that hits this will return an cancel failure.
5441
+ */
5442
+ let flaggedCancel = false;
5443
+ const cancel = () => {
5444
+ flaggedCancel = true;
5445
+ };
5446
+ const upload = new Observable((subscriber) => {
5447
+ const overallStartTime = new Date();
5448
+ const incompleteFileFileIndexes = new Set(allFiles.map((_, index) => index));
5449
+ const activeFileIndexes = new Set();
5450
+ const doneFileIndexes = new Set();
5451
+ let latestOverallProgress = 0;
5452
+ function onStartFileUpload(index, uploadInstance) {
5453
+ activeFileIndexes.add(index);
5454
+ allFilesAndDetails[index].startTime = new Date();
5455
+ allFilesAndDetails[index].uploadInstance = uploadInstance;
5456
+ allFilesAndDetails[index].fileRef = uploadInstance.taskRef;
5457
+ }
5458
+ function onStartFileUploadFlaggedCancelled(index) {
5459
+ allFilesAndDetails[index].startTime = new Date();
5460
+ // immediately mark it done
5461
+ _markFileUploadDone(index, true);
5462
+ // emit new progress event
5463
+ _emitEvent();
5464
+ }
5465
+ function _markFileUploadDone(fileIndex, error) {
5466
+ doneFileIndexes.add(fileIndex); // add to done file indexes
5467
+ activeFileIndexes.delete(fileIndex); // remove from active file indexes if it exists
5468
+ incompleteFileFileIndexes.delete(fileIndex); // remove from incomplete file indexes
5469
+ // update details
5470
+ allFilesAndDetails[fileIndex].endTime = new Date();
5471
+ allFilesAndDetails[fileIndex].success = !error;
5472
+ allFilesAndDetails[fileIndex].error = error;
5473
+ }
5474
+ function updateUploadProgress(input) {
5475
+ const { index: fileIndex, nextProgress, fileUploadTaskDone, error } = input;
5476
+ let nextOverallProgress = latestOverallProgress;
5477
+ const nextProgressPercent = fileUploadTaskDone ? 100 : (nextProgress?.progress ?? 0) * 100;
5478
+ // update the overall progress percentage
5479
+ if (nextProgressPercent) {
5480
+ // update the overall percentage
5481
+ const previousProgress = allFilesAndLatestProgress[fileIndex];
5482
+ const previousProgressPercent = previousProgress?.progress != null ? previousProgress.progress * 100 : 0;
5483
+ const progressPercentChange = nextProgressPercent - previousProgressPercent;
5484
+ // increase overall progress by the change
5485
+ nextOverallProgress += progressPercentChange * overallProgressPerCompletedFile;
5486
+ }
5487
+ // update the file progress
5488
+ if (nextProgress) {
5489
+ // update the latest FileProgress
5490
+ allFilesAndLatestProgress[fileIndex] = nextProgress;
5491
+ // only set fileRef once
5492
+ if (!allFilesAndDetails[fileIndex].fileRef) {
5493
+ allFilesAndDetails[fileIndex].fileRef = nextProgress.fileRef;
5494
+ }
5495
+ }
5496
+ // if complete, update the indexes and details
5497
+ if (fileUploadTaskDone) {
5498
+ _markFileUploadDone(fileIndex, error);
5499
+ }
5500
+ // update the overall progress
5501
+ latestOverallProgress = nextOverallProgress;
5502
+ // emit the event to send it
5503
+ _emitEvent(nextProgress);
5504
+ }
5505
+ function _emitEvent(nextProgress) {
5506
+ const isComplete = incompleteFileFileIndexes.size === 0;
5507
+ let overallProgress = latestOverallProgress;
5508
+ let result = undefined;
5509
+ if (isComplete) {
5510
+ overallProgress = 100; // set to 100%
5511
+ const overallEndTime = new Date();
5512
+ const fileResults = allFiles.map((file, index) => {
5513
+ const result = {
5514
+ startTime: allFilesAndDetails[index].startTime,
5515
+ endTime: allFilesAndDetails[index].endTime,
5516
+ file,
5517
+ fileRef: allFilesAndDetails[index].fileRef,
5518
+ success: !allFilesAndDetails[index].error,
5519
+ error: allFilesAndDetails[index].error
5520
+ };
5521
+ return result;
5522
+ });
5523
+ const { included: successFileResults, excluded: errorFileResults } = separateValues(fileResults, (x) => x.success);
5524
+ // all are done, set the result on the next event
5525
+ result = {
5526
+ startTime: overallStartTime,
5527
+ endTime: overallEndTime,
5528
+ successFileResults,
5529
+ errorFileResults,
5530
+ fileResults
5531
+ };
5532
+ }
5533
+ const nextEvent = {
5534
+ allFiles,
5535
+ isComplete,
5536
+ overallProgress,
5537
+ uploadProgress: nextProgress,
5538
+ incompleteFileCount: incompleteFileFileIndexes.size,
5539
+ activeFileCount: activeFileIndexes.size,
5540
+ doneFileCount: doneFileIndexes.size,
5541
+ result
5542
+ };
5543
+ subscriber.next(nextEvent);
5544
+ }
5545
+ async function runUploadTaskForFile([file, index]) {
5546
+ if (flaggedCancel) {
5547
+ onStartFileUploadFlaggedCancelled(index);
5548
+ return Promise.resolve();
5549
+ }
5550
+ return new Promise((resolve) => {
5551
+ const updateFileUploadProgress = (nextProgress) => {
5552
+ // update the progress
5553
+ updateUploadProgress({
5554
+ index,
5555
+ nextProgress
5556
+ });
5557
+ };
5558
+ const updateFileUploadProgressWithUncaughtError = (error) => {
5559
+ // error occurred, update the progress with the error
5560
+ updateUploadProgress({
5561
+ index,
5562
+ error,
5563
+ fileUploadTaskDone: true
5564
+ });
5565
+ // always resolve, never reject
5566
+ resolve();
5567
+ };
5568
+ const completeFileUploadProgress = () => {
5569
+ updateUploadProgress({
5570
+ index,
5571
+ fileUploadTaskDone: true
5572
+ });
5573
+ resolve();
5574
+ };
5575
+ // upload the file, subscribe to the progress
5576
+ try {
5577
+ uploadHandler
5578
+ .uploadFile(file)
5579
+ .then((uploadInstance) => {
5580
+ // add to active file indexes
5581
+ onStartFileUpload(index, uploadInstance);
5582
+ const uploadSubscription = uploadInstance.upload.subscribe({
5583
+ next: updateFileUploadProgress,
5584
+ error: updateFileUploadProgressWithUncaughtError,
5585
+ complete: completeFileUploadProgress
5586
+ });
5587
+ multiUploadsSubscriptionObject.addSubs(uploadSubscription);
5588
+ })
5589
+ .catch(updateFileUploadProgressWithUncaughtError);
5590
+ }
5591
+ catch (error) {
5592
+ updateFileUploadProgressWithUncaughtError(error);
5593
+ }
5594
+ });
5595
+ }
5596
+ // run upload task for each file
5597
+ const fileTuples = allFiles.map((file, index) => [file, index]);
5598
+ runAsyncTasksForValues(fileTuples, runUploadTaskForFile, {
5599
+ maxParallelTasks,
5600
+ retriesAllowed: 0 // no retries allowed
5601
+ }).then(() => {
5602
+ // all tasks are finished. Complete the subscriber.
5603
+ console.log('complete');
5604
+ subscriber.complete();
5605
+ });
5606
+ }).pipe(shareReplay(1));
5607
+ const instance = {
5608
+ cancel,
5609
+ upload
5610
+ };
5611
+ return instance;
5612
+ }
5613
+
5614
+ /**
5615
+ * Error that is thrown when a single file fails to upload.
5616
+ */
5617
+ class StorageFileUploadFilesError extends BaseError {
5618
+ result;
5619
+ constructor(result) {
5620
+ super('Failed to upload all files.');
5621
+ this.result = result;
5622
+ }
5623
+ }
5624
+
5625
+ /**
5626
+ * Connects a DbxFirebaseStorageFileUploadStore to a DbxActionContext, and handles the upload action.
5627
+ */
5628
+ class DbxFirebaseStorageFileUploadActionHandlerDirective {
5629
+ _triggerSub = new SubscriptionObject();
5630
+ _readySub = new SubscriptionObject();
5631
+ _isWorkingSub = new SubscriptionObject();
5632
+ _progressSub = new SubscriptionObject();
5633
+ source = inject((DbxActionContextStoreSourceInstance));
5634
+ uploadStore = inject(DbxFirebaseStorageFileUploadStore);
5635
+ _dbxActionHandlerInstance = new DbxActionHandlerInstance(this.source);
5636
+ /**
5637
+ * If true, the action will be triggered when files are set.
5638
+ *
5639
+ * Defaults to false.
5640
+ */
5641
+ triggerOnFiles = input(false);
5642
+ triggerOnFiles$ = toObservable(this.triggerOnFiles);
5643
+ /**
5644
+ * Uploading of all/any files should be cancelled if any file fails to upload.
5645
+ *
5646
+ * Any file that was successfully uploaded will not be reverted.
5647
+ *
5648
+ * Defaults to false.
5649
+ */
5650
+ cancelUploadsOnUploadError = input(false);
5651
+ /**
5652
+ * The upload should fail if any file fails to upload, rather than if all files fail to upload.
5653
+ *
5654
+ * Defaults to false.
5655
+ */
5656
+ actionFailureOnUploadError = input(false);
5657
+ uploadHandler = input.required({ alias: 'dbxFirebaseStorageFileUploadActionHandler' });
5658
+ _uploadHandlerEffect = effect(() => {
5659
+ const uploadHandler = this.uploadHandler();
5660
+ let handlerFunction;
5661
+ if (uploadHandler) {
5662
+ handlerFunction = (files, context) => {
5663
+ const { upload, cancel } = storageFileUploadFiles({
5664
+ files,
5665
+ uploadHandler
5666
+ });
5667
+ const loadingStateObs = upload.pipe(tap((x) => {
5668
+ this.uploadStore.setLatestProgressEvent(x);
5669
+ }), filter((x) => x.isComplete), tap((x) => {
5670
+ this.uploadStore.setUploadResult(x.result);
5671
+ }), map((x) => {
5672
+ const result = x.result;
5673
+ const { successFileResults, errorFileResults } = result;
5674
+ const actionFailureOnUploadError = this.actionFailureOnUploadError();
5675
+ let finalLoadingState;
5676
+ if ((errorFileResults.length > 0 && actionFailureOnUploadError) || (successFileResults.length === 0 && errorFileResults.length > 0)) {
5677
+ finalLoadingState = errorResult(new StorageFileUploadFilesError(result));
5678
+ }
5679
+ else {
5680
+ finalLoadingState = successResult(x.result);
5681
+ }
5682
+ return finalLoadingState;
5683
+ }), startWithBeginLoading());
5684
+ context.startWorkingWithLoadingStateObservable(loadingStateObs);
5685
+ };
5686
+ }
5687
+ else {
5688
+ handlerFunction = undefined;
5689
+ }
5690
+ this._dbxActionHandlerInstance.setHandlerFunction(handlerFunction);
5691
+ });
5692
+ files$ = this.uploadStore.files$;
5693
+ uploadHandler$ = toObservable(this.uploadHandler);
5694
+ ngOnInit() {
5695
+ this._dbxActionHandlerInstance.init();
5696
+ // trigger the action if files are available
5697
+ this._triggerSub.subscription = this.triggerOnFiles$
5698
+ .pipe(switchMap((triggerOnFiles) => {
5699
+ if (triggerOnFiles) {
5700
+ return this.files$.pipe(map((x) => x?.length));
5701
+ }
5702
+ else {
5703
+ return of(false);
5704
+ }
5705
+ }))
5706
+ .subscribe((canTrigger) => {
5707
+ if (canTrigger) {
5708
+ this.source.trigger();
5709
+ }
5710
+ });
5711
+ // ready the source with files after trigger is called and files are available
5712
+ this._readySub.subscription = this.files$.pipe(switchMap((files) => this.source.triggered$.pipe(map(() => files)))).subscribe((files) => {
5713
+ this.source.readyValue(files);
5714
+ });
5715
+ // sync isWorking
5716
+ this._isWorkingSub.subscription = this.uploadStore.setIsUploadHandlerWorking(this.source.isWorking$);
5717
+ // sync progress amount
5718
+ this._progressSub.subscription = this.source.setWorkProgress(this.uploadStore.latestProgressEvent$.pipe(throttleTime(100, undefined, { leading: true, trailing: true }), map((x) => x?.overallProgress), distinctUntilChanged()));
5719
+ }
5720
+ ngOnDestroy() {
5721
+ this._dbxActionHandlerInstance.destroy();
5722
+ }
5723
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadActionHandlerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5724
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DbxFirebaseStorageFileUploadActionHandlerDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileUploadActionHandler]", inputs: { triggerOnFiles: { classPropertyName: "triggerOnFiles", publicName: "triggerOnFiles", isSignal: true, isRequired: false, transformFunction: null }, cancelUploadsOnUploadError: { classPropertyName: "cancelUploadsOnUploadError", publicName: "cancelUploadsOnUploadError", isSignal: true, isRequired: false, transformFunction: null }, actionFailureOnUploadError: { classPropertyName: "actionFailureOnUploadError", publicName: "actionFailureOnUploadError", isSignal: true, isRequired: false, transformFunction: null }, uploadHandler: { classPropertyName: "uploadHandler", publicName: "dbxFirebaseStorageFileUploadActionHandler", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
5725
+ }
5726
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadActionHandlerDirective, decorators: [{
5727
+ type: Directive,
5728
+ args: [{
5729
+ selector: '[dbxFirebaseStorageFileUploadActionHandler]',
5730
+ standalone: true
5731
+ }]
5732
+ }] });
5733
+
5734
+ class StorageFileCollectionStore extends AbstractDbxFirebaseCollectionStore {
5735
+ storageFileFunctions = inject(StorageFileFunctions);
5736
+ constructor(collections) {
5737
+ super({ firestoreCollection: collections.storageFileCollection });
5738
+ }
5739
+ initializeAllStorageFilesFromUpload = firebaseCollectionStoreCreateFunction(this, this.storageFileFunctions.storageFile.createStorageFile.allFromUpload);
5740
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileCollectionStore, deps: [{ token: i1$4.StorageFileFirestoreCollections }], target: i0.ɵɵFactoryTarget.Injectable });
5741
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileCollectionStore });
5742
+ }
5743
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileCollectionStore, decorators: [{
5744
+ type: Injectable
5745
+ }], ctorParameters: () => [{ type: i1$4.StorageFileFirestoreCollections }] });
5746
+
5747
+ class DbxFirebaseStorageFileCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective {
5748
+ constructor(store) {
5749
+ super(store);
5750
+ this.setConstraints([]);
5751
+ }
5752
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileCollectionStoreDirective, deps: [{ token: StorageFileCollectionStore }], target: i0.ɵɵFactoryTarget.Directive });
5753
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DbxFirebaseStorageFileCollectionStoreDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileCollection]", providers: provideDbxFirebaseCollectionStoreDirective(DbxFirebaseStorageFileCollectionStoreDirective, StorageFileCollectionStore), usesInheritance: true, ngImport: i0 });
5754
+ }
5755
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileCollectionStoreDirective, decorators: [{
5756
+ type: Directive,
5757
+ args: [{
5758
+ selector: '[dbxFirebaseStorageFileCollection]',
5759
+ providers: provideDbxFirebaseCollectionStoreDirective(DbxFirebaseStorageFileCollectionStoreDirective, StorageFileCollectionStore),
5760
+ standalone: true
5761
+ }]
5762
+ }], ctorParameters: () => [{ type: StorageFileCollectionStore }] });
5763
+
5764
+ class StorageFileDocumentStore extends AbstractDbxFirebaseDocumentStore {
5765
+ storageFileFunctions = inject(StorageFileFunctions);
5766
+ constructor() {
5767
+ super({ firestoreCollection: inject(StorageFileFirestoreCollections).storageFileCollection });
5768
+ }
5769
+ createStorageFileFromUpload = firebaseDocumentStoreCreateFunction(this, this.storageFileFunctions.storageFile.createStorageFile.create);
5770
+ initializeStorageFileFromUpload = firebaseDocumentStoreCreateFunction(this, this.storageFileFunctions.storageFile.createStorageFile.fromUpload);
5771
+ initializeAllStorageFilesFromUpload = firebaseDocumentStoreCrudFunction(this.storageFileFunctions.storageFile.createStorageFile.allFromUpload);
5772
+ updateStorageFile = firebaseDocumentStoreUpdateFunction(this, this.storageFileFunctions.storageFile.updateStorageFile.update);
5773
+ processStorageFile = firebaseDocumentStoreUpdateFunction(this, this.storageFileFunctions.storageFile.updateStorageFile.process);
5774
+ deleteStorageFile = firebaseDocumentStoreDeleteFunction(this, this.storageFileFunctions.storageFile.deleteStorageFile.delete);
5775
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileDocumentStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5776
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileDocumentStore });
5777
+ }
5778
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileDocumentStore, decorators: [{
5779
+ type: Injectable
5780
+ }], ctorParameters: () => [] });
5781
+
5782
+ class DbxFirebaseStorageFileDocumentStoreDirective extends DbxFirebaseDocumentStoreDirective {
5783
+ constructor(store) {
5784
+ super(store);
5785
+ }
5786
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDocumentStoreDirective, deps: [{ token: StorageFileDocumentStore }], target: i0.ɵɵFactoryTarget.Directive });
5787
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DbxFirebaseStorageFileDocumentStoreDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileDocument]", providers: provideDbxFirebaseDocumentStoreDirective(DbxFirebaseStorageFileDocumentStoreDirective, StorageFileDocumentStore), usesInheritance: true, ngImport: i0 });
5788
+ }
5789
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDocumentStoreDirective, decorators: [{
5790
+ type: Directive,
5791
+ args: [{
5792
+ selector: '[dbxFirebaseStorageFileDocument]',
5793
+ providers: provideDbxFirebaseDocumentStoreDirective(DbxFirebaseStorageFileDocumentStoreDirective, StorageFileDocumentStore),
5794
+ standalone: true
5795
+ }]
5796
+ }], ctorParameters: () => [{ type: StorageFileDocumentStore }] });
5797
+
5798
+ /**
5799
+ * Directive that passes the upload result to a StorageFileDocumentStore to initialize the document immediately.
5800
+ */
5801
+ class DbxFirebaseStorageFileUploadInitializeDocumentDirective extends AbstractSubscriptionDirective {
5802
+ uploadStore = inject(DbxFirebaseStorageFileUploadStore);
5803
+ storageFileDocumentStore = inject(StorageFileDocumentStore);
5804
+ constructor() {
5805
+ super();
5806
+ this.sub = this.uploadStore.uploadResult$.subscribe(async (result) => {
5807
+ const successFileResult = result.successFileResults.find((x) => x.fileRef != null);
5808
+ if (successFileResult) {
5809
+ const fileRef = successFileResult.fileRef;
5810
+ if (fileRef) {
5811
+ this.storageFileDocumentStore
5812
+ .initializeStorageFileFromUpload({
5813
+ pathString: fileRef.storagePath.pathString,
5814
+ bucketId: fileRef.storagePath.bucketId
5815
+ })
5816
+ .subscribe();
5817
+ }
5818
+ }
5819
+ });
5820
+ }
5821
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadInitializeDocumentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5822
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DbxFirebaseStorageFileUploadInitializeDocumentDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileUploadInitializeDocument]", exportAs: ["dbxFirebaseStorageFileUploadInitializeDocument"], usesInheritance: true, ngImport: i0 });
5823
+ }
5824
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadInitializeDocumentDirective, decorators: [{
5825
+ type: Directive,
5826
+ args: [{
5827
+ selector: '[dbxFirebaseStorageFileUploadInitializeDocument]',
5828
+ exportAs: 'dbxFirebaseStorageFileUploadInitializeDocument',
5829
+ standalone: true
5830
+ }]
5831
+ }], ctorParameters: () => [] });
5832
+
5833
+ /**
5834
+ * Directive that provides a DbxFirebaseStorageFileUploadStore, and sync's the inputs to the store.
5835
+ */
5836
+ class DbxFirebaseStorageFileUploadStoreDirective {
5837
+ _allowedSub = new SubscriptionObject();
5838
+ _multiSub = new SubscriptionObject();
5839
+ uploadStore = inject(DbxFirebaseStorageFileUploadStore);
5840
+ multipleUpload = input();
5841
+ fileTypesAccepted = input();
5842
+ fileTypesAccepted$ = toObservable(this.fileTypesAccepted).pipe(skipAllInitialMaybe(), shareReplay(1));
5843
+ isMultiUploadAllowed$ = toObservable(this.multipleUpload).pipe(skipAllInitialMaybe(), shareReplay(1));
5844
+ constructor() {
5845
+ this._allowedSub.subscription = this.fileTypesAccepted$.subscribe((x) => this.uploadStore.setFileTypesAccepted(x));
5846
+ this._multiSub.subscription = this.isMultiUploadAllowed$.subscribe((x) => this.uploadStore.setIsMultiUploadAllowed(x));
5847
+ }
5848
+ ngOnDestroy() {
5849
+ this._allowedSub.destroy();
5850
+ this._multiSub.destroy();
5851
+ }
5852
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadStoreDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5853
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DbxFirebaseStorageFileUploadStoreDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileUploadStore]", inputs: { multipleUpload: { classPropertyName: "multipleUpload", publicName: "multipleUpload", isSignal: true, isRequired: false, transformFunction: null }, fileTypesAccepted: { classPropertyName: "fileTypesAccepted", publicName: "fileTypesAccepted", isSignal: true, isRequired: false, transformFunction: null } }, providers: [DbxFirebaseStorageFileUploadStore], exportAs: ["dbxFirebaseStorageFileUploadStore"], ngImport: i0 });
5854
+ }
5855
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadStoreDirective, decorators: [{
5856
+ type: Directive,
5857
+ args: [{
5858
+ selector: '[dbxFirebaseStorageFileUploadStore]',
5859
+ exportAs: 'dbxFirebaseStorageFileUploadStore',
5860
+ providers: [DbxFirebaseStorageFileUploadStore],
5861
+ standalone: true
5862
+ }]
5863
+ }], ctorParameters: () => [] });
5864
+
5865
+ /**
5866
+ * Directive that syncs a DbxFirebaseStorageFileUploadStore's configuration to a DbxFileUploadComponent.
5867
+ */
5868
+ class DbxFirebaseStorageFileUploadSyncDirective {
5869
+ _allowedSub = new SubscriptionObject();
5870
+ _multiSub = new SubscriptionObject();
5871
+ _filesSub = new SubscriptionObject();
5872
+ uploadStore = inject(DbxFirebaseStorageFileUploadStore);
5873
+ uploadComponent = inject(DbxFileUploadComponent);
5874
+ constructor() {
5875
+ this._allowedSub.subscription = this.uploadStore.fileTypesAllowed$.subscribe((x) => this.uploadComponent.setAccept(x));
5876
+ this._multiSub.subscription = this.uploadStore.isMultiUploadAllowed$.subscribe((x) => this.uploadComponent.setMultiple(x));
5877
+ this._filesSub.subscription = this.uploadComponent.filesChanged.subscribe((files) => this.uploadStore.setFiles(files.matchResult.accepted));
5878
+ }
5879
+ ngOnDestroy() {
5880
+ this._allowedSub.destroy();
5881
+ this._multiSub.destroy();
5882
+ this._filesSub.destroy();
5883
+ }
5884
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadSyncDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5885
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DbxFirebaseStorageFileUploadSyncDirective, isStandalone: true, selector: "[dbxFirebaseStorageFileUploadSync]", exportAs: ["dbxFirebaseStorageFileUploadSync"], ngImport: i0 });
5886
+ }
5887
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadSyncDirective, decorators: [{
5888
+ type: Directive,
5889
+ args: [{
5890
+ selector: '[dbxFirebaseStorageFileUploadSync]',
5891
+ exportAs: 'dbxFirebaseStorageFileUploadSync',
5892
+ standalone: true
5893
+ }]
5894
+ }], ctorParameters: () => [] });
5895
+
5896
+ const importsAndExports$1 = [
5897
+ // dbx-core/dbx-web modules/components
5898
+ DbxActionModule,
5899
+ DbxLoadingComponent,
5900
+ DbxActionLoadingContextDirective,
5901
+ DbxActionSnackbarErrorDirective,
5902
+ DbxFileUploadComponent,
5903
+ DbxFileUploadActionSyncDirective,
5904
+ // containers
5905
+ DbxFirebaseStorageFileUploadActionHandlerDirective,
5906
+ DbxFirebaseStorageFileUploadStoreDirective,
5907
+ DbxFirebaseStorageFileUploadSyncDirective,
5908
+ DbxFirebaseStorageFileUploadInitializeDocumentDirective,
5909
+ // stores
5910
+ DbxFirebaseStorageFileCollectionStoreDirective,
5911
+ DbxFirebaseStorageFileDocumentStoreDirective
5912
+ ];
5913
+ /**
5914
+ * Convenience module for importing various modules/components that are relevant to the storage file upload feature.
5915
+ *
5916
+ * - DbxActionModule
5917
+ * - DbxFileUploadComponent
5918
+ * - DbxFirebaseStorageFileUploadActionHandlerDirective
5919
+ * - DbxFirebaseStorageFileUploadStoreDirective
5920
+ * - DbxFirebaseStorageFileUploadSyncDirective
5921
+ * - DbxFirebaseStorageFileUploadInitializeDocumentDirective
5922
+ * - DbxFirebaseStorageFileUploadStore
5923
+ */
5924
+ class DbxFirebaseStorageFileUploadModule {
5925
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
5926
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadModule, imports: [
5927
+ // dbx-core/dbx-web modules/components
5928
+ DbxActionModule,
5929
+ DbxLoadingComponent,
5930
+ DbxActionLoadingContextDirective,
5931
+ DbxActionSnackbarErrorDirective,
5932
+ DbxFileUploadComponent,
5933
+ DbxFileUploadActionSyncDirective,
5934
+ // containers
5935
+ DbxFirebaseStorageFileUploadActionHandlerDirective,
5936
+ DbxFirebaseStorageFileUploadStoreDirective,
5937
+ DbxFirebaseStorageFileUploadSyncDirective,
5938
+ DbxFirebaseStorageFileUploadInitializeDocumentDirective,
5939
+ // stores
5940
+ DbxFirebaseStorageFileCollectionStoreDirective,
5941
+ DbxFirebaseStorageFileDocumentStoreDirective], exports: [
5942
+ // dbx-core/dbx-web modules/components
5943
+ DbxActionModule,
5944
+ DbxLoadingComponent,
5945
+ DbxActionLoadingContextDirective,
5946
+ DbxActionSnackbarErrorDirective,
5947
+ DbxFileUploadComponent,
5948
+ DbxFileUploadActionSyncDirective,
5949
+ // containers
5950
+ DbxFirebaseStorageFileUploadActionHandlerDirective,
5951
+ DbxFirebaseStorageFileUploadStoreDirective,
5952
+ DbxFirebaseStorageFileUploadSyncDirective,
5953
+ DbxFirebaseStorageFileUploadInitializeDocumentDirective,
5954
+ // stores
5955
+ DbxFirebaseStorageFileCollectionStoreDirective,
5956
+ DbxFirebaseStorageFileDocumentStoreDirective] });
5957
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadModule, imports: [
5958
+ // dbx-core/dbx-web modules/components
5959
+ DbxActionModule,
5960
+ DbxLoadingComponent,
5961
+ DbxFileUploadComponent,
5962
+ // dbx-core/dbx-web modules/components
5963
+ DbxActionModule] });
5964
+ }
5965
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileUploadModule, decorators: [{
5966
+ type: NgModule,
5967
+ args: [{
5968
+ imports: importsAndExports$1,
5969
+ exports: importsAndExports$1
5970
+ }]
5971
+ }] });
5972
+
5170
5973
  class FlatFirestoreModelKeyPipe {
5171
5974
  transform(input) {
5172
5975
  if (input != null) {
@@ -5354,7 +6157,7 @@ function providedDbxFirebaseStorage(config) {
5354
6157
  }
5355
6158
 
5356
6159
  /**
5357
- * @deprecated use providedDbxFirebaseStorageContext() instead.
6160
+ * @deprecated use providedDbxFirebaseStorage() instead.
5358
6161
  */
5359
6162
  class DbxFirebaseStorageModule {
5360
6163
  static forRoot(config) {
@@ -5433,5 +6236,5 @@ function provideDbxFirebase(config) {
5433
6236
  * Generated bundle index. Do not edit.
5434
6237
  */
5435
6238
 
5436
- export { AbstractConfiguredDbxFirebaseLoginButtonDirective, AbstractDbxFirebaseCollectionStore, AbstractDbxFirebaseCollectionWithParentStore, AbstractDbxFirebaseDocumentStore, AbstractDbxFirebaseDocumentWithParentStore, AbstractDbxFirebaseNotificationItemWidgetComponent, AbstractRootSingleItemDbxFirebaseDocument, AbstractSingleItemDbxFirebaseDocument, AbstractSystemStateDocumentStoreAccessor, DBX_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_COMPONENT_CONFIGURATION, DBX_FIREBASE_APP_OPTIONS_TOKEN, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_ID_PARAM_KEY, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_KEY_PARAM_KEY, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_USE_PARAM_VALUE, DBX_FIREBASE_LOGIN_COMPONENTS, DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR, DBX_FIREBASE_STORAGE_CONTEXT_CONFIG_TOKEN, DBX_FIREBASE_STORAGE_CONTEXT_TOKEN, DBX_FIRESTORE_CONTEXT_TOKEN, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE, DEFAULT_DBX_FIREBASE_ANALYTICS_USER_PROPERTIES_FACTORY, DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE, DEFAULT_DBX_FIREBASE_MODEL_HISTORY_COMPONENT_POPOVER_KEY, DEFAULT_DBX_FIREBASE_NOTIFICATION_ITEM_STORE_POPOVER_KEY, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN, DEFAULT_FIREBASE_COLLECTION_CHANGE_TRIGGER_FUNCTION, DEFAULT_FIREBASE_DEVELOPMENT_ENABLED_TOKEN, DEFAULT_FIREBASE_DEVELOPMENT_POPUP_KEY, DEFAULT_FIREBASE_DEVELOPMENT_SCHEDULER_ENABLED_TOKEN, DEFAULT_FIREBASE_DEVELOPMENT_WIDGET_PROVIDERS_TOKEN, DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY, DEFAULT_FIREBASE_NOTIFICATION_ITEM_WIDGET_TYPE, DEVELOPMENT_FIREBASE_SERVER_SCHEDULER_WIDGET_KEY, DbxFirebaseAnalyticsUserEventsListenerService, DbxFirebaseAnalyticsUserSource, DbxFirebaseAppCheckHttpInterceptor, DbxFirebaseAuthLoginService, DbxFirebaseAuthModule, DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionChangeTriggerInstance, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseCollectionListDirective, DbxFirebaseCollectionLoaderInstance, DbxFirebaseCollectionStoreDirective, DbxFirebaseCollectionWithParentStoreDirective, DbxFirebaseDefaultFirebaseProvidersModule, DbxFirebaseDevelopmentDirective, DbxFirebaseDevelopmentModule, DbxFirebaseDevelopmentPopupComponent, DbxFirebaseDevelopmentPopupContentComponent, DbxFirebaseDevelopmentPopupContentFormComponent, DbxFirebaseDevelopmentSchedulerListComponent, DbxFirebaseDevelopmentSchedulerListViewComponent, DbxFirebaseDevelopmentSchedulerListViewItemComponent, DbxFirebaseDevelopmentSchedulerService, DbxFirebaseDevelopmentSchedulerWidgetComponent, DbxFirebaseDevelopmentService, DbxFirebaseDevelopmentWidgetService, DbxFirebaseDocumentLoaderInstance, DbxFirebaseDocumentStoreDirective, DbxFirebaseDocumentStoreIdFromTwoWayModelKeyDirective, DbxFirebaseDocumentStoreTwoWayKeyProvider, DbxFirebaseDocumentStoreTwoWayModelKeySourceDirective, DbxFirebaseEmailFormComponent, DbxFirebaseEmailRecoveryFormComponent, DbxFirebaseEmulatorModule, DbxFirebaseEmulatorService, DbxFirebaseFirestoreCollectionModule, DbxFirebaseFunctionsModule, DbxFirebaseLoginAnonymousComponent, DbxFirebaseLoginAppleComponent, DbxFirebaseLoginButtonComponent, DbxFirebaseLoginButtonContainerComponent, DbxFirebaseLoginComponent, DbxFirebaseLoginContext, DbxFirebaseLoginContextBackButtonComponent, DbxFirebaseLoginContextDirective, DbxFirebaseLoginEmailComponent, DbxFirebaseLoginEmailContentComponent, DbxFirebaseLoginFacebookComponent, DbxFirebaseLoginGitHubComponent, DbxFirebaseLoginGoogleComponent, DbxFirebaseLoginListComponent, DbxFirebaseLoginMicrosoftComponent, DbxFirebaseLoginModule, DbxFirebaseLoginTermsComponent, DbxFirebaseLoginTermsSimpleComponent, DbxFirebaseLoginTwitterComponent, DbxFirebaseModelContextService, DbxFirebaseModelHistoryComponent, DbxFirebaseModelHistoryModule, DbxFirebaseModelHistoryPopoverButtonComponent, DbxFirebaseModelHistoryPopoverComponent, DbxFirebaseModelModule, DbxFirebaseModelStoreModule, DbxFirebaseModelTrackerService, DbxFirebaseModelTypeInstanceListComponent, DbxFirebaseModelTypeInstanceListViewComponent, DbxFirebaseModelTypeInstanceListViewItemComponent, DbxFirebaseModelTypesModule, DbxFirebaseModelTypesService, DbxFirebaseModelTypesServiceConfig, DbxFirebaseModelViewedEventDirective, DbxFirebaseModule, DbxFirebaseNotificationBoxCollectionStoreDirective, DbxFirebaseNotificationBoxDocumentStoreDirective, DbxFirebaseNotificationCollectionStoreDirective, DbxFirebaseNotificationDocumentStoreDirective, DbxFirebaseNotificationItemContentComponent, DbxFirebaseNotificationItemDefaultViewComponent, DbxFirebaseNotificationItemListComponent, DbxFirebaseNotificationItemListViewComponent, DbxFirebaseNotificationItemListViewItemComponent, DbxFirebaseNotificationItemStore, DbxFirebaseNotificationItemStorePopoverButtonComponent, DbxFirebaseNotificationItemStorePopoverComponent, DbxFirebaseNotificationItemViewComponent, DbxFirebaseNotificationItemWidgetService, DbxFirebaseNotificationModule, DbxFirebaseNotificationSummaryCollectionStoreDirective, DbxFirebaseNotificationSummaryDocumentStoreDirective, DbxFirebaseNotificationTemplateService, DbxFirebaseNotificationUserCollectionStoreDirective, DbxFirebaseNotificationUserDocumentStoreDirective, DbxFirebaseParsedEmulatorsConfig, DbxFirebasePipeModule, DbxFirebaseRegisterComponent, DbxFirebaseRegisterEmailComponent, DbxFirebaseStorageModule, DbxFirebaseStorageService, DbxFirebaseSystemStateCollectionStoreDirective, DbxFirebaseSystemStateDocumentStoreDirective, DbxFirestoreContextService, DbxLimitedFirebaseDocumentLoaderInstance, FIREBASE_NOTIFICATION_ITEM_WIDGET_TYPE_PREFIX, FlatFirestoreModelKeyPipe, NotificationBoxCollectionStore, NotificationBoxDocumentStore, NotificationCollectionStore, NotificationDocumentStore, NotificationSummaryCollectionStore, NotificationSummaryDocumentStore, NotificationUserCollectionStore, NotificationUserDocumentStore, OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY, SystemStateCollectionStore, SystemStateDocumentStore, TwoWayFlatFirestoreModelKeyPipe, authRolesObsWithClaimsService, authUserInfoFromAuthUser, authUserStateFromFirebaseAuthServiceFunction, dbxFirebaseAuthContextInfo, dbxFirebaseCollectionChangeTrigger, dbxFirebaseCollectionChangeTriggerForStore, dbxFirebaseCollectionChangeTriggerForWatcher, dbxFirebaseCollectionChangeWatcher, dbxFirebaseCollectionLoaderInstance, dbxFirebaseCollectionLoaderInstanceWithCollection, dbxFirebaseDocumentLoaderInstance, dbxFirebaseDocumentLoaderInstanceWithAccessor, dbxFirebaseIdRouteParamRedirect, dbxFirebaseInContextFirebaseModelServiceInstance, dbxFirebaseInContextFirebaseModelServiceInstanceFactory, dbxFirebaseKeyRouteParamRedirect, dbxFirebaseModelContextServiceInfoInstanceFactory, dbxFirebaseModelTypesServiceInstance, dbxFirebaseModelTypesServiceInstancePairForKeysFactory, dbxFirebaseSourceSelectLoadSource, dbxFirebaseStorageProvidersContextConfigFactory, dbxLimitedFirebaseDocumentLoaderInstance, dbxLimitedFirebaseDocumentLoaderInstanceWithAccessor, dbxWidgetTypeForNotificationTemplateType, defaultDbxFirebaseAuthServiceDelegateWithClaimsService, developmentFirebaseServerSchedulerWidgetEntry, enableAppCheckDebugTokenGeneration, firebaseAuthTokenFromUser, firebaseContextServiceEntityMap, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreCrudFunction, firebaseDocumentStoreDeleteFunction, firebaseDocumentStoreReadFunction, firebaseDocumentStoreUpdateFunction, modelDoesNotExistError, provideDbxFirebase, provideDbxFirebaseAnalyticsUserEventsListenerService, provideDbxFirebaseApp, provideDbxFirebaseAuth, provideDbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionWithParentStoreDirective, provideDbxFirebaseDevelopment, provideDbxFirebaseDocumentStoreDirective, provideDbxFirebaseDocumentStoreTwoWayKeyProvider, provideDbxFirebaseEmulator, provideDbxFirebaseFunctions, provideDbxFirebaseLogin, provideDbxFirebaseModelContextService, provideDbxFirebaseNotifications, provideDbxFirestoreCollection, provideNotificationFirestoreCollections, provideSystemStateFirestoreCollections, providedDbxFirebaseStorage, readDbxAnalyticsUserPropertiesFromAuthUserInfo, readValueFromIdToken, setParentStoreEffect, stateFromTokenForLoggedInUserFunction };
6239
+ export { AbstractConfiguredDbxFirebaseLoginButtonDirective, AbstractDbxFirebaseCollectionStore, AbstractDbxFirebaseCollectionWithParentStore, AbstractDbxFirebaseDocumentStore, AbstractDbxFirebaseDocumentWithParentStore, AbstractDbxFirebaseNotificationItemWidgetComponent, AbstractRootSingleItemDbxFirebaseDocument, AbstractSingleItemDbxFirebaseDocument, AbstractSystemStateDocumentStoreAccessor, DBX_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_COMPONENT_CONFIGURATION, DBX_FIREBASE_APP_OPTIONS_TOKEN, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_ID_PARAM_KEY, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_KEY_PARAM_KEY, DBX_FIREBASE_ID_ROUTER_PARAM_DEFAULT_USE_PARAM_VALUE, DBX_FIREBASE_LOGIN_COMPONENTS, DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR, DBX_FIREBASE_STORAGE_CONTEXT_CONFIG_TOKEN, DBX_FIREBASE_STORAGE_CONTEXT_TOKEN, DBX_FIRESTORE_CONTEXT_TOKEN, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE, DEFAULT_DBX_FIREBASE_ANALYTICS_USER_PROPERTIES_FACTORY, DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE, DEFAULT_DBX_FIREBASE_MODEL_HISTORY_COMPONENT_POPOVER_KEY, DEFAULT_DBX_FIREBASE_NOTIFICATION_ITEM_STORE_POPOVER_KEY, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN, DEFAULT_FIREBASE_COLLECTION_CHANGE_TRIGGER_FUNCTION, DEFAULT_FIREBASE_DEVELOPMENT_ENABLED_TOKEN, DEFAULT_FIREBASE_DEVELOPMENT_POPUP_KEY, DEFAULT_FIREBASE_DEVELOPMENT_SCHEDULER_ENABLED_TOKEN, DEFAULT_FIREBASE_DEVELOPMENT_WIDGET_PROVIDERS_TOKEN, DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY, DEFAULT_FIREBASE_NOTIFICATION_ITEM_WIDGET_TYPE, DEVELOPMENT_FIREBASE_SERVER_SCHEDULER_WIDGET_KEY, DbxFirebaseAnalyticsUserEventsListenerService, DbxFirebaseAnalyticsUserSource, DbxFirebaseAppCheckHttpInterceptor, DbxFirebaseAuthLoginService, DbxFirebaseAuthModule, DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionChangeTriggerInstance, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseCollectionListDirective, DbxFirebaseCollectionLoaderInstance, DbxFirebaseCollectionStoreDirective, DbxFirebaseCollectionWithParentStoreDirective, DbxFirebaseDefaultFirebaseProvidersModule, DbxFirebaseDevelopmentDirective, DbxFirebaseDevelopmentModule, DbxFirebaseDevelopmentPopupComponent, DbxFirebaseDevelopmentPopupContentComponent, DbxFirebaseDevelopmentPopupContentFormComponent, DbxFirebaseDevelopmentSchedulerListComponent, DbxFirebaseDevelopmentSchedulerListViewComponent, DbxFirebaseDevelopmentSchedulerListViewItemComponent, DbxFirebaseDevelopmentSchedulerService, DbxFirebaseDevelopmentSchedulerWidgetComponent, DbxFirebaseDevelopmentService, DbxFirebaseDevelopmentWidgetService, DbxFirebaseDocumentLoaderInstance, DbxFirebaseDocumentStoreDirective, DbxFirebaseDocumentStoreIdFromTwoWayModelKeyDirective, DbxFirebaseDocumentStoreTwoWayKeyProvider, DbxFirebaseDocumentStoreTwoWayModelKeySourceDirective, DbxFirebaseEmailFormComponent, DbxFirebaseEmailRecoveryFormComponent, DbxFirebaseEmulatorModule, DbxFirebaseEmulatorService, DbxFirebaseFirestoreCollectionModule, DbxFirebaseFunctionsModule, DbxFirebaseLoginAnonymousComponent, DbxFirebaseLoginAppleComponent, DbxFirebaseLoginButtonComponent, DbxFirebaseLoginButtonContainerComponent, DbxFirebaseLoginComponent, DbxFirebaseLoginContext, DbxFirebaseLoginContextBackButtonComponent, DbxFirebaseLoginContextDirective, DbxFirebaseLoginEmailComponent, DbxFirebaseLoginEmailContentComponent, DbxFirebaseLoginFacebookComponent, DbxFirebaseLoginGitHubComponent, DbxFirebaseLoginGoogleComponent, DbxFirebaseLoginListComponent, DbxFirebaseLoginMicrosoftComponent, DbxFirebaseLoginModule, DbxFirebaseLoginTermsComponent, DbxFirebaseLoginTermsSimpleComponent, DbxFirebaseLoginTwitterComponent, DbxFirebaseModelContextService, DbxFirebaseModelHistoryComponent, DbxFirebaseModelHistoryModule, DbxFirebaseModelHistoryPopoverButtonComponent, DbxFirebaseModelHistoryPopoverComponent, DbxFirebaseModelModule, DbxFirebaseModelStoreModule, DbxFirebaseModelTrackerService, DbxFirebaseModelTypeInstanceListComponent, DbxFirebaseModelTypeInstanceListViewComponent, DbxFirebaseModelTypeInstanceListViewItemComponent, DbxFirebaseModelTypesModule, DbxFirebaseModelTypesService, DbxFirebaseModelTypesServiceConfig, DbxFirebaseModelViewedEventDirective, DbxFirebaseModule, DbxFirebaseNotificationBoxCollectionStoreDirective, DbxFirebaseNotificationBoxDocumentStoreDirective, DbxFirebaseNotificationCollectionStoreDirective, DbxFirebaseNotificationDocumentStoreDirective, DbxFirebaseNotificationItemContentComponent, DbxFirebaseNotificationItemDefaultViewComponent, DbxFirebaseNotificationItemListComponent, DbxFirebaseNotificationItemListViewComponent, DbxFirebaseNotificationItemListViewItemComponent, DbxFirebaseNotificationItemStore, DbxFirebaseNotificationItemStorePopoverButtonComponent, DbxFirebaseNotificationItemStorePopoverComponent, DbxFirebaseNotificationItemViewComponent, DbxFirebaseNotificationItemWidgetService, DbxFirebaseNotificationModule, DbxFirebaseNotificationSummaryCollectionStoreDirective, DbxFirebaseNotificationSummaryDocumentStoreDirective, DbxFirebaseNotificationTemplateService, DbxFirebaseNotificationUserCollectionStoreDirective, DbxFirebaseNotificationUserDocumentStoreDirective, DbxFirebaseParsedEmulatorsConfig, DbxFirebasePipeModule, DbxFirebaseRegisterComponent, DbxFirebaseRegisterEmailComponent, DbxFirebaseStorageFileCollectionStoreDirective, DbxFirebaseStorageFileDocumentStoreDirective, DbxFirebaseStorageFileUploadActionHandlerDirective, DbxFirebaseStorageFileUploadInitializeDocumentDirective, DbxFirebaseStorageFileUploadModule, DbxFirebaseStorageFileUploadStore, DbxFirebaseStorageFileUploadStoreDirective, DbxFirebaseStorageFileUploadSyncDirective, DbxFirebaseStorageModule, DbxFirebaseStorageService, DbxFirebaseSystemStateCollectionStoreDirective, DbxFirebaseSystemStateDocumentStoreDirective, DbxFirestoreContextService, DbxLimitedFirebaseDocumentLoaderInstance, FIREBASE_NOTIFICATION_ITEM_WIDGET_TYPE_PREFIX, FlatFirestoreModelKeyPipe, NotificationBoxCollectionStore, NotificationBoxDocumentStore, NotificationCollectionStore, NotificationDocumentStore, NotificationSummaryCollectionStore, NotificationSummaryDocumentStore, NotificationUserCollectionStore, NotificationUserDocumentStore, OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY, StorageFileCollectionStore, StorageFileDocumentStore, StorageFileUploadFilesError, SystemStateCollectionStore, SystemStateDocumentStore, TwoWayFlatFirestoreModelKeyPipe, authRolesObsWithClaimsService, authUserInfoFromAuthUser, authUserStateFromFirebaseAuthServiceFunction, dbxFirebaseAuthContextInfo, dbxFirebaseCollectionChangeTrigger, dbxFirebaseCollectionChangeTriggerForStore, dbxFirebaseCollectionChangeTriggerForWatcher, dbxFirebaseCollectionChangeWatcher, dbxFirebaseCollectionLoaderInstance, dbxFirebaseCollectionLoaderInstanceWithCollection, dbxFirebaseDocumentLoaderInstance, dbxFirebaseDocumentLoaderInstanceWithAccessor, dbxFirebaseIdRouteParamRedirect, dbxFirebaseInContextFirebaseModelServiceInstance, dbxFirebaseInContextFirebaseModelServiceInstanceFactory, dbxFirebaseKeyRouteParamRedirect, dbxFirebaseModelContextServiceInfoInstanceFactory, dbxFirebaseModelTypesServiceInstance, dbxFirebaseModelTypesServiceInstancePairForKeysFactory, dbxFirebaseSourceSelectLoadSource, dbxFirebaseStorageProvidersContextConfigFactory, dbxLimitedFirebaseDocumentLoaderInstance, dbxLimitedFirebaseDocumentLoaderInstanceWithAccessor, dbxWidgetTypeForNotificationTemplateType, defaultDbxFirebaseAuthServiceDelegateWithClaimsService, developmentFirebaseServerSchedulerWidgetEntry, enableAppCheckDebugTokenGeneration, firebaseAuthTokenFromUser, firebaseCollectionStoreCreateFunction, firebaseCollectionStoreCrudFunction, firebaseContextServiceEntityMap, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreCrudFunction, firebaseDocumentStoreDeleteFunction, firebaseDocumentStoreReadFunction, firebaseDocumentStoreUpdateFunction, importsAndExports$1 as importsAndExports, modelDoesNotExistError, provideDbxFirebase, provideDbxFirebaseAnalyticsUserEventsListenerService, provideDbxFirebaseApp, provideDbxFirebaseAuth, provideDbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionWithParentStoreDirective, provideDbxFirebaseDevelopment, provideDbxFirebaseDocumentStoreDirective, provideDbxFirebaseDocumentStoreTwoWayKeyProvider, provideDbxFirebaseEmulator, provideDbxFirebaseFunctions, provideDbxFirebaseLogin, provideDbxFirebaseModelContextService, provideDbxFirebaseNotifications, provideDbxFirestoreCollection, provideNotificationFirestoreCollections, provideStorageFileFirestoreCollections, provideSystemStateFirestoreCollections, providedDbxFirebaseStorage, readDbxAnalyticsUserPropertiesFromAuthUserInfo, readValueFromIdToken, setParentStoreEffect, stateFromTokenForLoggedInUserFunction, storageFileUploadFiles, storageFileUploadHandler };
5437
6240
  //# sourceMappingURL=dereekb-dbx-firebase.mjs.map